diff --git a/Cargo.lock b/Cargo.lock
index 53d54bc9..5b2738fd 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -20,94 +20,72 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
[[package]]
name = "accesskit"
-version = "0.17.1"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a"
+checksum = "5351dcebb14b579ccab05f288596b2ae097005be7ee50a7c3d4ca9d0d5a66f6a"
+dependencies = [
+ "uuid",
+]
[[package]]
-name = "accesskit_atspi_common"
-version = "0.10.1"
+name = "accesskit_consumer"
+version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f"
+checksum = "53cf47daed85312e763fbf85ceca136e0d7abc68e0a7e12abe11f48172bc3b10"
dependencies = [
"accesskit",
- "accesskit_consumer",
- "atspi-common",
- "serde",
- "thiserror 1.0.69",
- "zvariant",
+ "hashbrown 0.16.1",
]
[[package]]
name = "accesskit_consumer"
-version = "0.26.0"
+version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459"
+checksum = "25e0d7e25d06f4dc21d1774d67146e9e80d6789216cbd4d1e88185b0095dba60"
dependencies = [
"accesskit",
- "hashbrown 0.15.5",
- "immutable-chunkmap",
+ "hashbrown 0.16.1",
]
[[package]]
name = "accesskit_macos"
-version = "0.18.1"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1"
+checksum = "4c5c87e8d94f2ec10cce590aadff24c76f576dab5502d45d0aed9fc3065d4451"
dependencies = [
"accesskit",
- "accesskit_consumer",
- "hashbrown 0.15.5",
+ "accesskit_consumer 0.36.0",
+ "hashbrown 0.16.1",
"objc2 0.5.2",
"objc2-app-kit 0.2.2",
"objc2-foundation 0.2.2",
]
-[[package]]
-name = "accesskit_unix"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5"
-dependencies = [
- "accesskit",
- "accesskit_atspi_common",
- "async-channel",
- "async-executor",
- "async-task",
- "atspi",
- "futures-lite",
- "futures-util",
- "serde",
- "zbus",
-]
-
[[package]]
name = "accesskit_windows"
-version = "0.24.1"
+version = "0.32.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81"
+checksum = "eff7009f1a532e917d66970a1e80c965140c6cfbbabbdde3d64e5431e6c78e21"
dependencies = [
"accesskit",
- "accesskit_consumer",
- "hashbrown 0.15.5",
- "paste",
+ "accesskit_consumer 0.35.0",
+ "hashbrown 0.16.1",
"static_assertions",
- "windows 0.58.0",
- "windows-core 0.58.0",
+ "windows 0.62.2",
+ "windows-core 0.62.2",
]
[[package]]
-name = "accesskit_winit"
-version = "0.23.1"
+name = "accesskit_xplat"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879"
+checksum = "bbb69cd9e9ca89e4bb0ac98821c509849d5e51c6ae8c96bddf7b0c97579b839a"
dependencies = [
"accesskit",
"accesskit_macos",
- "accesskit_unix",
"accesskit_windows",
+ "android-activity",
"raw-window-handle 0.6.2",
- "winit",
]
[[package]]
@@ -147,6 +125,21 @@ dependencies = [
"equator",
]
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
[[package]]
name = "allocator-api2"
version = "0.2.21"
@@ -169,7 +162,7 @@ dependencies = [
"log",
"ndk",
"ndk-context",
- "ndk-sys 0.6.0+11769913",
+ "ndk-sys",
"num_enum",
"thiserror 1.0.69",
]
@@ -197,58 +190,62 @@ checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]]
name = "anyrender"
-version = "0.6.2"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e2c6900aa6fa601379c17b824d0882c5c4ffd2f974124b273ba083b64f76077"
+checksum = "74dcad75fbef1209804ee5d1cfd7409665c5a7987865c758e45f8c5553f9a75f"
dependencies = [
- "kurbo 0.12.0",
+ "kurbo",
"peniko",
"raw-window-handle 0.6.2",
]
[[package]]
name = "anyrender_svg"
-version = "0.6.3"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f40554c3b19e6298c6210d21902796cb02f4dd1a472f393bb94a067c2c9562bc"
+checksum = "bb301bceaa7b9089211acb35f15b46aad96c433e63043d4a2ec4f2f83c4818df"
dependencies = [
"anyrender",
"image",
- "kurbo 0.12.0",
+ "kurbo",
"peniko",
- "thiserror 2.0.18",
"usvg",
]
[[package]]
-name = "anyrender_vello"
-version = "0.6.2"
+name = "anyrender_vello_cpu"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6dd9574a872584fa9c7be06ed8be1c4875aeae37e74a567597125f3ec4579bd3"
+checksum = "379caa953b953149c002c4a956443e09771b432b74e1c7074af26a8854a93ae7"
dependencies = [
"anyrender",
"debug_timer",
- "kurbo 0.12.0",
+ "glifo",
+ "kurbo",
"peniko",
- "pollster 0.4.0",
- "rustc-hash 2.1.2",
- "vello",
- "wgpu 26.0.1",
- "wgpu_context",
+ "pixels_window_renderer",
+ "vello_cpu",
]
[[package]]
-name = "anyrender_vello_cpu"
-version = "0.8.1"
+name = "anyrender_vello_hybrid"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53ab47fd3c17dd144010b079f07e106b9d5d982c2916dcf73e8ad2f611d5becd"
+checksum = "61b6de3eb188f15d7782e37d086b1a06bc835043e52c2f836e64a1de0e1a2ee6"
dependencies = [
"anyrender",
"debug_timer",
- "kurbo 0.12.0",
+ "futures-channel",
+ "glifo",
+ "kurbo",
"peniko",
- "pixels_window_renderer",
- "vello_cpu",
+ "pollster",
+ "rustc-hash 2.1.2",
+ "vello_common",
+ "vello_hybrid",
+ "wasm-bindgen-futures",
+ "wgpu",
+ "wgpu_context",
]
[[package]]
@@ -399,15 +396,6 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
-[[package]]
-name = "ash"
-version = "0.37.3+1.3.251"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a"
-dependencies = [
- "libloading 0.7.4",
-]
-
[[package]]
name = "ash"
version = "0.38.0+1.3.281"
@@ -423,131 +411,6 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3df27b8d5ddb458c5fb1bbc1ce172d4a38c614a97d550b0ac89003897fb01de4"
-[[package]]
-name = "async-broadcast"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
-dependencies = [
- "event-listener",
- "event-listener-strategy",
- "futures-core",
- "pin-project-lite",
-]
-
-[[package]]
-name = "async-channel"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
-dependencies = [
- "concurrent-queue",
- "event-listener-strategy",
- "futures-core",
- "pin-project-lite",
-]
-
-[[package]]
-name = "async-executor"
-version = "1.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a"
-dependencies = [
- "async-task",
- "concurrent-queue",
- "fastrand",
- "futures-lite",
- "pin-project-lite",
- "slab",
-]
-
-[[package]]
-name = "async-fs"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5"
-dependencies = [
- "async-lock",
- "blocking",
- "futures-lite",
-]
-
-[[package]]
-name = "async-io"
-version = "2.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
-dependencies = [
- "autocfg",
- "cfg-if",
- "concurrent-queue",
- "futures-io",
- "futures-lite",
- "parking",
- "polling",
- "rustix 1.1.4",
- "slab",
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "async-lock"
-version = "3.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
-dependencies = [
- "event-listener",
- "event-listener-strategy",
- "pin-project-lite",
-]
-
-[[package]]
-name = "async-process"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
-dependencies = [
- "async-channel",
- "async-io",
- "async-lock",
- "async-signal",
- "async-task",
- "blocking",
- "cfg-if",
- "event-listener",
- "futures-lite",
- "rustix 1.1.4",
-]
-
-[[package]]
-name = "async-recursion"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
-[[package]]
-name = "async-signal"
-version = "0.2.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
-dependencies = [
- "async-io",
- "async-lock",
- "atomic-waker",
- "cfg-if",
- "futures-core",
- "futures-io",
- "rustix 1.1.4",
- "signal-hook-registry",
- "slab",
- "windows-sys 0.61.2",
-]
-
[[package]]
name = "async-stream"
version = "0.3.6"
@@ -570,12 +433,6 @@ dependencies = [
"syn 2.0.117",
]
-[[package]]
-name = "async-task"
-version = "4.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
-
[[package]]
name = "async-trait"
version = "0.1.89"
@@ -638,57 +495,6 @@ version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21e4227379beff4205943696e6c3e0cd809bacdf3f0edd6e3dd153e2269571a4"
-[[package]]
-name = "atspi"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf"
-dependencies = [
- "atspi-common",
- "atspi-connection",
- "atspi-proxies",
-]
-
-[[package]]
-name = "atspi-common"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7"
-dependencies = [
- "enumflags2",
- "serde",
- "static_assertions",
- "zbus",
- "zbus-lockstep",
- "zbus-lockstep-macros",
- "zbus_names",
- "zvariant",
-]
-
-[[package]]
-name = "atspi-connection"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333"
-dependencies = [
- "atspi-common",
- "atspi-proxies",
- "futures-lite",
- "zbus",
-]
-
-[[package]]
-name = "atspi-proxies"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496"
-dependencies = [
- "atspi-common",
- "serde",
- "zbus",
- "zvariant",
-]
-
[[package]]
name = "autocfg"
version = "1.5.0"
@@ -823,33 +629,18 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bit-set"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
-dependencies = [
- "bit-vec 0.6.3",
-]
-
-[[package]]
-name = "bit-set"
-version = "0.8.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
+checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd"
dependencies = [
- "bit-vec 0.8.0",
+ "bit-vec",
]
[[package]]
name = "bit-vec"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
-
-[[package]]
-name = "bit-vec"
-version = "0.8.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51"
[[package]]
name = "bit_field"
@@ -880,73 +671,78 @@ checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2"
[[package]]
name = "blitz-dom"
-version = "0.2.4"
+version = "0.3.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c81d0f520bad6798a54cc4360bcabd245dc0aba2ce5917217d1d82ac5ee6bfed"
+checksum = "38802275fbb85def2369e7c3abf2fea63fdf2dd8821a457264171cb072b7e6dd"
dependencies = [
"accesskit",
+ "anyrender",
"app_units",
"atomic_refcell",
"bitflags 2.11.1",
"blitz-traits",
"color",
- "cssparser 0.35.0",
+ "cssparser 0.37.0",
"cursor-icon",
"debug_timer",
"euclid",
- "fastrand",
"html-escape",
"image",
- "keyboard-types",
+ "keyboard-types 0.7.0",
+ "kurbo",
"linebender_resource_handle",
- "markup5ever 0.35.0",
+ "markup5ever 0.39.0",
"objc2 0.6.4",
"parley",
"percent-encoding",
"rayon",
- "selectors 0.32.0",
- "skrifa 0.37.0",
+ "selectors 0.38.0",
+ "skrifa",
"slab",
"smallvec",
"stylo",
- "stylo_config",
"stylo_dom",
+ "stylo_static_prefs",
"stylo_taffy",
"stylo_traits",
"taffy",
+ "thread_local",
"url",
"usvg",
+ "web-time",
+ "wuff",
]
[[package]]
name = "blitz-html"
-version = "0.2.0"
+version = "0.3.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e77adcd3cb60e67d365bc897c6120ecb684627f2e2265c2bb75b12cc6c4bc4de"
+checksum = "8251f0fddea8d44883ebec049480f44fe68b7c4b917f8f3af8010f53aa0706bc"
dependencies = [
"blitz-dom",
"blitz-traits",
- "html5ever 0.35.0",
+ "html5ever 0.39.0",
"xml5ever",
]
[[package]]
name = "blitz-net"
-version = "0.2.1"
+version = "0.3.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0583c80a179a95a08adeb30c6c25dfeaa9d6e9314072f3c81a7976dee8d7a562"
+checksum = "594214a6e88384ea7aa2136954073b174305ec6550c1f4bcfd9bfab4ce599b96"
dependencies = [
"blitz-traits",
"data-url",
- "reqwest",
+ "reqwest 0.13.3",
"tokio",
+ "wasm-bindgen-futures",
]
[[package]]
name = "blitz-paint"
-version = "0.2.1"
+version = "0.3.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "027aa42b3795589c9d7ae0238ac3087f9f22b58f9643fc22c4dc1ef1ef3413b2"
+checksum = "0b42e521d60fb0ad6d627eed4aedab30f8b3d4719cb66ce97a34cd9ee3ed43c2"
dependencies = [
"anyrender",
"anyrender_svg",
@@ -954,7 +750,7 @@ dependencies = [
"blitz-traits",
"color",
"euclid",
- "kurbo 0.12.0",
+ "kurbo",
"parley",
"peniko",
"stylo",
@@ -964,12 +760,12 @@ dependencies = [
[[package]]
name = "blitz-shell"
-version = "0.2.3"
+version = "0.3.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61ecda230035f39b13383f08e0cfc7159c92d194650ac8d57871a207ea0e52b7"
+checksum = "840d4beafb9ae791bd05682403cc8a1d9d69a5d4a28588a10c2080eb3f98ce23"
dependencies = [
"accesskit",
- "accesskit_winit",
+ "accesskit_xplat",
"android-activity",
"anyrender",
"arboard",
@@ -977,33 +773,30 @@ dependencies = [
"blitz-paint",
"blitz-traits",
"futures-util",
- "keyboard-types",
+ "keyboard-types 0.7.0",
"rfd",
+ "wasm-bindgen",
+ "web-sys",
+ "web-time",
"winit",
]
[[package]]
name = "blitz-traits"
-version = "0.2.0"
+version = "0.3.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6cd87a5b7bc1bc3d546aeb28d0867ff3191e9c4e85452e1808931200a4bc49d4"
+checksum = "7a69aad4292231416c2f1becdff3d9353be59556321c95071b66a0fc57e22d94"
dependencies = [
"bitflags 2.11.1",
"bytes",
"cursor-icon",
"http",
- "keyboard-types",
+ "keyboard-types 0.7.0",
"serde",
"smol_str",
"url",
]
-[[package]]
-name = "block"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
-
[[package]]
name = "block-buffer"
version = "0.10.4"
@@ -1032,16 +825,23 @@ dependencies = [
]
[[package]]
-name = "blocking"
-version = "1.6.2"
+name = "borsh"
+version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
+checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a"
dependencies = [
- "async-channel",
- "async-task",
- "futures-io",
- "futures-lite",
- "piper",
+ "bytes",
+ "cfg_aliases",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
]
[[package]]
@@ -1130,26 +930,25 @@ dependencies = [
[[package]]
name = "calloop"
-version = "0.13.0"
+version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
+checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7"
dependencies = [
"bitflags 2.11.1",
- "log",
"polling",
- "rustix 0.38.44",
+ "rustix",
"slab",
- "thiserror 1.0.69",
+ "tracing",
]
[[package]]
name = "calloop-wayland-source"
-version = "0.3.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
+checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa"
dependencies = [
"calloop",
- "rustix 0.38.44",
+ "rustix",
"wayland-backend",
"wayland-client",
]
@@ -1199,12 +998,6 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
-[[package]]
-name = "cfg_aliases"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
-
[[package]]
name = "cfg_aliases"
version = "0.2.1"
@@ -1271,101 +1064,31 @@ dependencies = [
]
[[package]]
-name = "cocoa"
-version = "0.26.1"
+name = "codespan-reporting"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c"
+checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681"
dependencies = [
- "bitflags 2.11.1",
- "block",
- "cocoa-foundation",
- "core-foundation 0.10.1",
- "core-graphics 0.24.0",
- "foreign-types 0.5.0",
- "libc",
- "objc",
+ "serde",
+ "termcolor",
+ "unicode-width 0.1.14",
]
[[package]]
-name = "cocoa-foundation"
-version = "0.2.1"
+name = "color"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d"
+checksum = "2ec7c5eb7a16992b1904d76c517d170ab353b0e0b3d5a0c81a8a0cd1037893cf"
dependencies = [
- "bitflags 2.11.1",
- "block",
- "core-foundation 0.10.1",
- "core-graphics-types 0.2.0",
- "objc",
+ "bytemuck",
]
[[package]]
-name = "codespan-reporting"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
-dependencies = [
- "termcolor",
- "unicode-width 0.1.14",
-]
-
-[[package]]
-name = "codespan-reporting"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
-dependencies = [
- "serde",
- "termcolor",
- "unicode-width 0.2.2",
-]
-
-[[package]]
-name = "color"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ec7c5eb7a16992b1904d76c517d170ab353b0e0b3d5a0c81a8a0cd1037893cf"
-dependencies = [
- "bytemuck",
-]
-
-[[package]]
-name = "color_quant"
-version = "1.1.0"
+name = "color_quant"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
-[[package]]
-name = "com"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6"
-dependencies = [
- "com_macros",
-]
-
-[[package]]
-name = "com_macros"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5"
-dependencies = [
- "com_macros_support",
- "proc-macro2",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "com_macros_support"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
[[package]]
name = "combine"
version = "4.6.7"
@@ -1397,8 +1120,6 @@ dependencies = [
[[package]]
name = "const-serialize"
version = "0.8.0-alpha.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e42cd5aabba86f128b3763da1fec1491c0f728ce99245062cd49b6f9e6d235b"
dependencies = [
"const-serialize 0.7.2",
"const-serialize-macro 0.8.0-alpha.0",
@@ -1419,8 +1140,6 @@ dependencies = [
[[package]]
name = "const-serialize-macro"
version = "0.8.0-alpha.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42571ed01eb46d2e1adcf99c8ca576f081e46f2623d13500eba70d1d99a4c439"
dependencies = [
"proc-macro2",
"quote",
@@ -1533,32 +1252,6 @@ version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
-[[package]]
-name = "core-graphics"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
-dependencies = [
- "bitflags 1.3.2",
- "core-foundation 0.9.4",
- "core-graphics-types 0.1.3",
- "foreign-types 0.5.0",
- "libc",
-]
-
-[[package]]
-name = "core-graphics"
-version = "0.24.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
-dependencies = [
- "bitflags 2.11.1",
- "core-foundation 0.10.1",
- "core-graphics-types 0.2.0",
- "foreign-types 0.5.0",
- "libc",
-]
-
[[package]]
name = "core-graphics"
version = "0.25.0"
@@ -1567,22 +1260,11 @@ checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97"
dependencies = [
"bitflags 2.11.1",
"core-foundation 0.10.1",
- "core-graphics-types 0.2.0",
+ "core-graphics-types",
"foreign-types 0.5.0",
"libc",
]
-[[package]]
-name = "core-graphics-types"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
-dependencies = [
- "bitflags 1.3.2",
- "core-foundation 0.9.4",
- "libc",
-]
-
[[package]]
name = "core-graphics-types"
version = "0.2.0"
@@ -1677,7 +1359,7 @@ version = "0.29.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa"
dependencies = [
- "cssparser-macros",
+ "cssparser-macros 0.6.1",
"dtoa-short",
"itoa",
"matches",
@@ -1690,14 +1372,14 @@ dependencies = [
[[package]]
name = "cssparser"
-version = "0.35.0"
+version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa"
+checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98"
dependencies = [
- "cssparser-macros",
+ "cssparser-macros 0.7.0",
"dtoa-short",
"itoa",
- "phf 0.11.3",
+ "phf 0.13.1",
"serde",
"smallvec",
]
@@ -1713,21 +1395,20 @@ dependencies = [
]
[[package]]
-name = "cursor-icon"
-version = "1.2.0"
+name = "cssparser-macros"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
+checksum = "10a2a99df6e410a8ff4245aa2006499ea662245f967cc7c0a38c83ef8eb44dbf"
+dependencies = [
+ "quote",
+ "syn 2.0.117",
+]
[[package]]
-name = "d3d12"
-version = "0.19.0"
+name = "cursor-icon"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307"
-dependencies = [
- "bitflags 2.11.1",
- "libloading 0.8.9",
- "winapi",
-]
+checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
[[package]]
name = "darling"
@@ -1885,8 +1566,6 @@ dependencies = [
[[package]]
name = "dioxus"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c01ecf7ddbae18a419ad3d83c486101a85ffc5740ea09cdd0f09a30dc12170d"
dependencies = [
"dioxus-asset-resolver",
"dioxus-cli-config",
@@ -1920,8 +1599,6 @@ dependencies = [
[[package]]
name = "dioxus-asset-resolver"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69387edbbc60c7cb93ad96d8cc7a22b49a76e21643380b89b1c49a78d347ff60"
dependencies = [
"dioxus-cli-config",
"http",
@@ -1930,7 +1607,7 @@ dependencies = [
"js-sys",
"ndk",
"ndk-context",
- "ndk-sys 0.6.0+11769913",
+ "ndk-sys",
"percent-encoding",
"thiserror 2.0.18",
"tokio",
@@ -1951,8 +1628,6 @@ dependencies = [
[[package]]
name = "dioxus-cli-config"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c000f584ddf608e2b272b3074bf11512a474eeeb2eb85a1915f276ce5c4a8615"
dependencies = [
"wasm-bindgen",
]
@@ -1988,8 +1663,6 @@ dependencies = [
[[package]]
name = "dioxus-config-macro"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7637091592978fbfdb45a16b26bd99fd97fb1bd7e31c6a963530e00c022af321"
dependencies = [
"proc-macro2",
"quote",
@@ -1998,14 +1671,10 @@ dependencies = [
[[package]]
name = "dioxus-config-macros"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54f9ed8fc1a215ad34bb8dbae42a4ea54efbcd26ca9006bbe5cca78e511bf25f"
[[package]]
name = "dioxus-core"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45887100ff0cf89abeb8b659808294fda48cd53f3b424e36407dedffcfea830b"
dependencies = [
"anyhow",
"const_format",
@@ -2021,13 +1690,12 @@ dependencies = [
"slotmap",
"subsecond",
"tracing",
+ "xxhash-rust",
]
[[package]]
name = "dioxus-core-macro"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "370c63663dff0f24df5dfea643ca239283542c6b228a302f69b32e1d36762b7f"
dependencies = [
"convert_case 0.8.0",
"dioxus-rsx",
@@ -2039,21 +1707,15 @@ dependencies = [
[[package]]
name = "dioxus-core-types"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36963eab106b169737762f9cd5ee5fd97f585989dcb2d8e30a596e97a6999009"
[[package]]
name = "dioxus-desktop"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "662cd78c73ca3f17346adbf2d64757df40dd0ce20536c05123097fd31828d2bd"
dependencies = [
"anyhow",
"async-trait",
"base64",
"bytes",
- "cocoa",
- "core-foundation 0.10.1",
"dioxus-asset-resolver",
"dioxus-cli-config",
"dioxus-core",
@@ -2072,14 +1734,16 @@ dependencies = [
"image",
"infer",
"jni",
- "lazy-js-bundle",
+ "lazy-js-bundle 0.7.9",
"libc",
"muda",
"ndk",
"ndk-context",
- "ndk-sys 0.6.0+11769913",
- "objc",
- "objc_id",
+ "ndk-sys",
+ "objc2 0.6.4",
+ "objc2-app-kit 0.3.2",
+ "objc2-foundation 0.3.2",
+ "objc2-ui-kit",
"percent-encoding",
"rand 0.9.4",
"rfd",
@@ -2102,8 +1766,6 @@ dependencies = [
[[package]]
name = "dioxus-devtools"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2349cedbdf1b429df1f1bea61fdee0ad3dae7b2548eedfbeca82710122a57da0"
dependencies = [
"dioxus-cli-config",
"dioxus-core",
@@ -2122,8 +1784,6 @@ dependencies = [
[[package]]
name = "dioxus-devtools-types"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ab9b0f7565d1916b70915f59b89ea8054ef0a9d67a364a32bbee68ef5f3818d"
dependencies = [
"dioxus-core",
"serde",
@@ -2133,8 +1793,6 @@ dependencies = [
[[package]]
name = "dioxus-document"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37e3a5bec7ffc999ff23446a487eb5cd86111d1574a23533dd3f8b3c69a53a22"
dependencies = [
"dioxus-core",
"dioxus-core-macro",
@@ -2143,7 +1801,7 @@ dependencies = [
"futures-channel",
"futures-util",
"generational-box",
- "lazy-js-bundle",
+ "lazy-js-bundle 0.7.9",
"serde",
"serde_json",
"tracing",
@@ -2152,8 +1810,6 @@ dependencies = [
[[package]]
name = "dioxus-fullstack"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37f0558edb88af5ad47275ae36a7f06317163ba482db377c26d7d8590b5cd0f6"
dependencies = [
"anyhow",
"async-stream",
@@ -2189,7 +1845,7 @@ dependencies = [
"js-sys",
"mime",
"pin-project",
- "reqwest",
+ "reqwest 0.12.28",
"rustversion",
"send_wrapper",
"serde",
@@ -2217,8 +1873,6 @@ dependencies = [
[[package]]
name = "dioxus-fullstack-core"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc634b28b4b1e3eab1e8df4f98510e2d2fa39d686321467f977213155e86ed2b"
dependencies = [
"anyhow",
"axum-core",
@@ -2245,8 +1899,6 @@ dependencies = [
[[package]]
name = "dioxus-fullstack-macro"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85a8fe7da549859fae00c7f4bf11a2aab734ae7ef6f98f280dce9bea1f3326ec"
dependencies = [
"const_format",
"convert_case 0.8.0",
@@ -2259,8 +1911,6 @@ dependencies = [
[[package]]
name = "dioxus-history"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a15232302d1933015fcf2d6fe9e286ad36f6e9c205a546089a0f326023bb0d2"
dependencies = [
"dioxus-core",
"tracing",
@@ -2269,8 +1919,6 @@ dependencies = [
[[package]]
name = "dioxus-hooks"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4534f91cf6305204b948bdec130076ac9ecc7c22faab29475b76870558bf73ea"
dependencies = [
"dioxus-core",
"dioxus-signals",
@@ -2285,8 +1933,6 @@ dependencies = [
[[package]]
name = "dioxus-html"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e03d6ad4040b667f2b2eefcb678840e630938c09bf9ec39b04ea4d1d96d90d44"
dependencies = [
"async-trait",
"bytes",
@@ -2300,8 +1946,8 @@ dependencies = [
"futures-channel",
"futures-util",
"generational-box",
- "keyboard-types",
- "lazy-js-bundle",
+ "keyboard-types 0.7.0",
+ "lazy-js-bundle 0.7.9",
"rustversion",
"serde",
"serde_json",
@@ -2312,8 +1958,6 @@ dependencies = [
[[package]]
name = "dioxus-html-internal-macro"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "584e2772127ab00f0d5e1d4d9795f39fecebc828ece0b7a02349d438bc1b1ce7"
dependencies = [
"convert_case 0.8.0",
"proc-macro2",
@@ -2336,25 +1980,22 @@ dependencies = [
[[package]]
name = "dioxus-icons"
version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ae929a4cdde2e51fca98ccb8a8fe2ea11640e5026c57486b15dbd5618ba7e56"
+source = "git+https://github.com/ealmloff/dioxus-icons?branch=bump-dioxus#5a6acdd0a15d4aea7b2b8271327b286d1f467d44"
dependencies = [
"dioxus",
"dioxus-signals",
- "lazy-js-bundle",
+ "lazy-js-bundle 0.7.9",
]
[[package]]
name = "dioxus-interpreter-js"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11999d6eb5bb179a9512dad30e5de408aab66f2cb65de9098c9fbe02927e2978"
dependencies = [
"dioxus-core",
"dioxus-core-types",
"dioxus-html",
"js-sys",
- "lazy-js-bundle",
+ "lazy-js-bundle 0.7.9",
"rustc-hash 2.1.2",
"serde",
"sledgehammer_bindgen",
@@ -2367,8 +2008,6 @@ dependencies = [
[[package]]
name = "dioxus-liveview"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7344b8f174967c7d2f6ad0103d680ab57daea83ebe3368f7f011c402fd6aaf77"
dependencies = [
"axum",
"dioxus-cli-config",
@@ -2395,8 +2034,6 @@ dependencies = [
[[package]]
name = "dioxus-logger"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a28ccdfe36d2cb830a2784e40f7e6f7199805a2c6da99bd65b1ca308f11aed28"
dependencies = [
"dioxus-cli-config",
"tracing",
@@ -2407,18 +2044,18 @@ dependencies = [
[[package]]
name = "dioxus-native"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a27795b6b4c12e2dc6ef284f80dd647d5aecda4c0b75948ba4ecde7f83c526d4"
dependencies = [
+ "android-activity",
"anyrender",
- "anyrender_vello",
"anyrender_vello_cpu",
+ "anyrender_vello_hybrid",
"blitz-dom",
"blitz-html",
"blitz-net",
"blitz-paint",
"blitz-shell",
"blitz-traits",
+ "cfg-if",
"dioxus-asset-resolver",
"dioxus-cli-config",
"dioxus-core",
@@ -2428,25 +2065,24 @@ dependencies = [
"dioxus-html",
"dioxus-native-dom",
"futures-util",
- "keyboard-types",
+ "keyboard-types 0.7.0",
"rustc-hash 2.1.2",
"tokio",
"webbrowser",
+ "wgpu_context",
"winit",
]
[[package]]
name = "dioxus-native-dom"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf20d08ad6f5f0714d28b2115a6e11f2d5b5959144f8bef106c2e0638a8f2f13"
dependencies = [
"blitz-dom",
"blitz-traits",
"dioxus-core",
"dioxus-html",
"futures-util",
- "keyboard-types",
+ "keyboard-types 0.7.0",
"rustc-hash 2.1.2",
]
@@ -2458,7 +2094,7 @@ dependencies = [
"dioxus-attributes",
"dioxus-sdk-time",
"dioxus-ssr",
- "lazy-js-bundle",
+ "lazy-js-bundle 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)",
"num-integer",
"palette",
"serde",
@@ -2469,8 +2105,6 @@ dependencies = [
[[package]]
name = "dioxus-router"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38e47f62d680429badfcb99bf5dec17ee92b0cb9623f264e36bc003a1359bfdc"
dependencies = [
"dioxus-cli-config",
"dioxus-core",
@@ -2490,8 +2124,6 @@ dependencies = [
[[package]]
name = "dioxus-router-macro"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f83fb667d27e256f8c9eca49963fbace66a8722cb64ee15a10ffc97d092357e"
dependencies = [
"base16",
"digest",
@@ -2505,8 +2137,6 @@ dependencies = [
[[package]]
name = "dioxus-rsx"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2106afda239a4c7c22ffa1ca19117011225fc1c735c139c0a5b765996aa8bb1d"
dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
@@ -2530,8 +2160,6 @@ dependencies = [
[[package]]
name = "dioxus-server"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5ba2095c16f847d3f680a94cc9b0637d190aace651ecfad0feda180da13634b"
dependencies = [
"anyhow",
"async-trait",
@@ -2588,8 +2216,6 @@ dependencies = [
[[package]]
name = "dioxus-signals"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3705754f5e043deec9fc7af0d159f18e5b21c02c47d255c7e477f31368f0b6d2"
dependencies = [
"dioxus-core",
"futures-channel",
@@ -2604,8 +2230,6 @@ dependencies = [
[[package]]
name = "dioxus-ssr"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d261c5c9907b84fb1ed52f59f46d68c84a4ae860a65cc5effd0cea740ee428af"
dependencies = [
"askama_escape",
"dioxus-core",
@@ -2616,8 +2240,6 @@ dependencies = [
[[package]]
name = "dioxus-stores"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64bec7b21c86b1360ec965a07a53a2c96b7caee3465049e1c299a45024e87614"
dependencies = [
"dioxus-core",
"dioxus-signals",
@@ -2628,8 +2250,6 @@ dependencies = [
[[package]]
name = "dioxus-stores-macro"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40a5875e9f890f27b1cc3e5b56c1e23601211470315a1fb8627c4ca4f3b2be9a"
dependencies = [
"convert_case 0.8.0",
"proc-macro2",
@@ -2640,8 +2260,6 @@ dependencies = [
[[package]]
name = "dioxus-web"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc0a0be76b404e8242a597db0fb239d05f8dee4e7856bc1fc7144f7e244822fd"
dependencies = [
"dioxus-cli-config",
"dioxus-core",
@@ -2658,7 +2276,7 @@ dependencies = [
"generational-box",
"gloo-timers",
"js-sys",
- "lazy-js-bundle",
+ "lazy-js-bundle 0.7.9",
"rustc-hash 2.1.2",
"send_wrapper",
"serde",
@@ -2692,12 +2310,6 @@ dependencies = [
"windows-sys 0.61.2",
]
-[[package]]
-name = "dispatch"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
-
[[package]]
name = "dispatch2"
version = "0.3.1"
@@ -2821,33 +2433,6 @@ dependencies = [
"cfg-if",
]
-[[package]]
-name = "endi"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
-
-[[package]]
-name = "enumflags2"
-version = "0.7.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
-dependencies = [
- "enumflags2_derive",
- "serde",
-]
-
-[[package]]
-name = "enumflags2_derive"
-version = "0.7.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
[[package]]
name = "enumset"
version = "1.1.12"
@@ -2921,27 +2506,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "event-listener"
-version = "5.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
-dependencies = [
- "concurrent-queue",
- "parking",
- "pin-project-lite",
-]
-
-[[package]]
-name = "event-listener-strategy"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
-dependencies = [
- "event-listener",
- "pin-project-lite",
-]
-
[[package]]
name = "exr"
version = "1.74.0"
@@ -2980,12 +2544,9 @@ dependencies = [
[[package]]
name = "fearless_simd"
-version = "0.3.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fb2907d1f08b2b316b9223ced5b0e89d87028ba8deae9764741dba8ff7f3903"
-dependencies = [
- "bytemuck",
-]
+checksum = "b97b65636e5b9ef369943878ac74335ba1c55c1cb6adbf1e2c293c624248d693"
[[package]]
name = "field-offset"
@@ -3084,18 +2645,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "font-types"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7"
-dependencies = [
- "bytemuck",
-]
-
-[[package]]
-name = "font-types"
-version = "0.10.1"
+version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5"
+checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7"
dependencies = [
"bytemuck",
]
@@ -3106,7 +2658,7 @@ version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646"
dependencies = [
- "roxmltree",
+ "roxmltree 0.20.0",
]
[[package]]
@@ -3125,24 +2677,23 @@ dependencies = [
[[package]]
name = "fontique"
-version = "0.6.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff3336bc0b87fe42305047263fa60d2eabd650d29cbe62fdeb2a66c7a0a595f9"
+checksum = "7c20b425addb8661e97fe1d51c4d8bcec3ec29ed6ad0db983976a7521276b8f7"
dependencies = [
- "bytemuck",
- "hashbrown 0.15.5",
- "icu_locale_core",
+ "hashbrown 0.17.1",
"linebender_resource_handle",
"memmap2",
"objc2 0.6.4",
"objc2-core-foundation",
"objc2-core-text",
"objc2-foundation 0.3.2",
- "read-fonts 0.35.0",
- "roxmltree",
+ "parlance",
+ "read-fonts",
+ "roxmltree 0.21.1",
"smallvec",
- "windows 0.58.0",
- "windows-core 0.58.0",
+ "windows 0.62.2",
+ "windows-core 0.62.2",
"yeslogic-fontconfig-sys",
]
@@ -3266,19 +2817,6 @@ version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
-[[package]]
-name = "futures-lite"
-version = "2.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
-dependencies = [
- "fastrand",
- "futures-core",
- "futures-io",
- "parking",
- "pin-project-lite",
-]
-
[[package]]
name = "futures-macro"
version = "0.3.32"
@@ -3416,8 +2954,6 @@ dependencies = [
[[package]]
name = "generational-box"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8cd0d825b8d339701ad330dbcd6399519ced4d143484954daf6e3185dace4f77"
dependencies = [
"parking_lot",
"tracing",
@@ -3439,7 +2975,7 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
dependencies = [
- "rustix 1.1.4",
+ "rustix",
"windows-link 0.2.1",
]
@@ -3590,6 +3126,22 @@ dependencies = [
"system-deps",
]
+[[package]]
+name = "glifo"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae9d48c6d81526ad2f9d5d6e5fddf5f6949ffbc46fcac0db0d061a6e65097019"
+dependencies = [
+ "bytemuck",
+ "foldhash 0.2.0",
+ "hashbrown 0.17.1",
+ "log",
+ "peniko",
+ "skrifa",
+ "smallvec",
+ "vello_common",
+]
+
[[package]]
name = "global-hotkey"
version = "0.7.0"
@@ -3597,7 +3149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9247516746aa8e53411a0db9b62b0e24efbcf6a76e0ba73e5a91b512ddabed7"
dependencies = [
"crossbeam-channel",
- "keyboard-types",
+ "keyboard-types 0.7.0",
"objc2 0.6.4",
"objc2-app-kit 0.3.2",
"once_cell",
@@ -3655,21 +3207,9 @@ dependencies = [
[[package]]
name = "glow"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1"
-dependencies = [
- "js-sys",
- "slotmap",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "glow"
-version = "0.16.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08"
+checksum = "29038e1c483364cc6bb3cf78feee1816002e127c331a1eec55a4d202b9e1adb5"
dependencies = [
"js-sys",
"slotmap",
@@ -3677,15 +3217,6 @@ dependencies = [
"web-sys",
]
-[[package]]
-name = "glutin_wgl_sys"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead"
-dependencies = [
- "gl_generator",
-]
-
[[package]]
name = "glutin_wgl_sys"
version = "0.6.1"
@@ -3707,60 +3238,19 @@ dependencies = [
]
[[package]]
-name = "gpu-alloc"
-version = "0.6.0"
+name = "gpu-allocator"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
-dependencies = [
- "bitflags 2.11.1",
- "gpu-alloc-types",
-]
-
-[[package]]
-name = "gpu-alloc-types"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
-dependencies = [
- "bitflags 2.11.1",
-]
-
-[[package]]
-name = "gpu-allocator"
-version = "0.25.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884"
-dependencies = [
- "log",
- "presser",
- "thiserror 1.0.69",
- "winapi",
- "windows 0.52.0",
-]
-
-[[package]]
-name = "gpu-allocator"
-version = "0.27.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
+checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795"
dependencies = [
+ "ash",
+ "hashbrown 0.16.1",
"log",
"presser",
- "thiserror 1.0.69",
+ "thiserror 2.0.18",
"windows 0.58.0",
]
-[[package]]
-name = "gpu-descriptor"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c"
-dependencies = [
- "bitflags 2.11.1",
- "gpu-descriptor-types 0.1.2",
- "hashbrown 0.14.5",
-]
-
[[package]]
name = "gpu-descriptor"
version = "0.3.2"
@@ -3768,19 +3258,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
dependencies = [
"bitflags 2.11.1",
- "gpu-descriptor-types 0.2.0",
+ "gpu-descriptor-types",
"hashbrown 0.15.5",
]
-[[package]]
-name = "gpu-descriptor-types"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c"
-dependencies = [
- "bitflags 2.11.1",
-]
-
[[package]]
name = "gpu-descriptor-types"
version = "0.2.0"
@@ -3850,12 +3331,11 @@ dependencies = [
[[package]]
name = "guillotiere"
-version = "0.6.2"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
+checksum = "6b17e70c989c36bad147b27a58d148c0741c51448aa5653436547323e524d0ab"
dependencies = [
"euclid",
- "svg_fmt",
]
[[package]]
@@ -3891,14 +3371,14 @@ dependencies = [
[[package]]
name = "harfrust"
-version = "0.3.2"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92c020db12c71d8a12a3fe7607873cade3a01a6287e29d540c8723276221b9d8"
+checksum = "a9ce5e848d21ba97a324266e41c70e0eb5e2577a610c1fbd546e15096f2e8e37"
dependencies = [
"bitflags 2.11.1",
"bytemuck",
"core_maths",
- "read-fonts 0.35.0",
+ "read-fonts",
"smallvec",
]
@@ -3907,10 +3387,6 @@ name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
-dependencies = [
- "ahash",
- "allocator-api2",
-]
[[package]]
name = "hashbrown"
@@ -3918,8 +3394,6 @@ version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
- "allocator-api2",
- "equivalent",
"foldhash 0.1.5",
]
@@ -3935,18 +3409,12 @@ dependencies = [
]
[[package]]
-name = "hassle-rs"
-version = "0.11.0"
+name = "hashbrown"
+version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890"
+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
dependencies = [
- "bitflags 2.11.1",
- "com",
- "libc",
- "libloading 0.8.9",
- "thiserror 1.0.69",
- "widestring",
- "winapi",
+ "foldhash 0.2.0",
]
[[package]]
@@ -3991,12 +3459,6 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
[[package]]
name = "hexf-parse"
version = "0.2.1"
@@ -4021,18 +3483,17 @@ dependencies = [
"log",
"mac",
"markup5ever 0.14.1",
- "match_token 0.1.0",
+ "match_token",
]
[[package]]
name = "html5ever"
-version = "0.35.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4"
+checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8"
dependencies = [
"log",
- "markup5ever 0.35.0",
- "match_token 0.35.0",
+ "markup5ever 0.39.0",
]
[[package]]
@@ -4198,9 +3659,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
dependencies = [
"displaydoc",
- "yoke",
+ "yoke 0.7.5",
+ "zerofrom",
+ "zerovec 0.10.4",
+]
+
+[[package]]
+name = "icu_collections"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
+dependencies = [
+ "displaydoc",
+ "potential_utf",
+ "yoke 0.8.2",
"zerofrom",
- "zerovec",
+ "zerovec 0.11.6",
+]
+
+[[package]]
+name = "icu_locale"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60"
+dependencies = [
+ "icu_collections 2.1.1",
+ "icu_locale_core",
+ "icu_locale_data",
+ "icu_provider 2.1.1",
+ "potential_utf",
+ "tinystr 0.8.0",
+ "zerovec 0.11.6",
]
[[package]]
@@ -4214,8 +3703,15 @@ dependencies = [
"serde",
"tinystr 0.8.0",
"writeable 0.6.3",
+ "zerovec 0.11.6",
]
+[[package]]
+name = "icu_locale_data"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c5f1d16b4c3a2642d3a719f18f6b06070ab0aef246a6418130c955ae08aa831"
+
[[package]]
name = "icu_locid"
version = "1.5.0"
@@ -4226,7 +3722,7 @@ dependencies = [
"litemap 0.7.4",
"tinystr 0.7.6",
"writeable 0.5.5",
- "zerovec",
+ "zerovec 0.10.4",
]
[[package]]
@@ -4238,9 +3734,9 @@ dependencies = [
"displaydoc",
"icu_locid",
"icu_locid_transform_data",
- "icu_provider",
+ "icu_provider 1.5.0",
"tinystr 0.7.6",
- "zerovec",
+ "zerovec 0.10.4",
]
[[package]]
@@ -4256,15 +3752,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
dependencies = [
"displaydoc",
- "icu_collections",
- "icu_normalizer_data",
- "icu_properties",
- "icu_provider",
+ "icu_collections 1.5.0",
+ "icu_normalizer_data 1.5.1",
+ "icu_properties 1.5.1",
+ "icu_provider 1.5.0",
"smallvec",
"utf16_iter",
"utf8_iter",
"write16",
- "zerovec",
+ "zerovec 0.10.4",
+]
+
+[[package]]
+name = "icu_normalizer"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
+dependencies = [
+ "icu_collections 2.1.1",
+ "icu_normalizer_data 2.1.1",
+ "icu_properties 2.1.2",
+ "icu_provider 2.1.1",
+ "smallvec",
+ "zerovec 0.11.6",
]
[[package]]
@@ -4273,6 +3783,12 @@ version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7"
+[[package]]
+name = "icu_normalizer_data"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
+
[[package]]
name = "icu_properties"
version = "1.5.1"
@@ -4280,12 +3796,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
dependencies = [
"displaydoc",
- "icu_collections",
+ "icu_collections 1.5.0",
"icu_locid_transform",
- "icu_properties_data",
- "icu_provider",
+ "icu_properties_data 1.5.1",
+ "icu_provider 1.5.0",
"tinystr 0.7.6",
- "zerovec",
+ "zerovec 0.10.4",
+]
+
+[[package]]
+name = "icu_properties"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
+dependencies = [
+ "icu_collections 2.1.1",
+ "icu_locale_core",
+ "icu_properties_data 2.1.2",
+ "icu_provider 2.1.1",
+ "zerotrie",
+ "zerovec 0.11.6",
]
[[package]]
@@ -4294,6 +3824,12 @@ version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2"
+[[package]]
+name = "icu_properties_data"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
+
[[package]]
name = "icu_provider"
version = "1.5.0"
@@ -4306,9 +3842,26 @@ dependencies = [
"stable_deref_trait",
"tinystr 0.7.6",
"writeable 0.5.5",
- "yoke",
+ "yoke 0.7.5",
+ "zerofrom",
+ "zerovec 0.10.4",
+]
+
+[[package]]
+name = "icu_provider"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
+dependencies = [
+ "displaydoc",
+ "icu_locale_core",
+ "serde",
+ "stable_deref_trait",
+ "writeable 0.6.3",
+ "yoke 0.8.2",
"zerofrom",
- "zerovec",
+ "zerotrie",
+ "zerovec 0.11.6",
]
[[package]]
@@ -4330,12 +3883,27 @@ checksum = "a717725612346ffc2d7b42c94b820db6908048f39434504cb130e8b46256b0de"
dependencies = [
"core_maths",
"displaydoc",
- "icu_collections",
+ "icu_collections 1.5.0",
"icu_locid",
- "icu_provider",
- "icu_segmenter_data",
+ "icu_provider 1.5.0",
+ "icu_segmenter_data 1.5.1",
+ "utf8_iter",
+ "zerovec 0.10.4",
+]
+
+[[package]]
+name = "icu_segmenter"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a807a7488f3f758629ae86d99d9d30dce24da2fb2945d74c80a4f4a62c71db73"
+dependencies = [
+ "icu_collections 2.1.1",
+ "icu_locale",
+ "icu_provider 2.1.1",
+ "icu_segmenter_data 2.1.1",
+ "potential_utf",
"utf8_iter",
- "zerovec",
+ "zerovec 0.11.6",
]
[[package]]
@@ -4344,6 +3912,12 @@ version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb"
+[[package]]
+name = "icu_segmenter_data"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ebbb7321d9e21d25f5660366cb6c08201d0175898a3a6f7a41ee9685af21c80"
+
[[package]]
name = "ident_case"
version = "1.0.1"
@@ -4367,8 +3941,8 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
dependencies = [
- "icu_normalizer",
- "icu_properties",
+ "icu_normalizer 1.5.0",
+ "icu_properties 1.5.1",
]
[[package]]
@@ -4384,7 +3958,7 @@ dependencies = [
"gif",
"image-webp",
"num-traits",
- "png",
+ "png 0.17.16",
"qoi",
"ravif",
"rayon",
@@ -4406,9 +3980,9 @@ dependencies = [
[[package]]
name = "imagesize"
-version = "0.13.0"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285"
+checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c"
[[package]]
name = "imgref"
@@ -4416,15 +3990,6 @@ version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2"
-[[package]]
-name = "immutable-chunkmap"
-version = "2.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a3e98b1520e49e252237edc238a39869da9f3241f2ec19dc788c1d24694d1e4"
-dependencies = [
- "arrayvec",
-]
-
[[package]]
name = "indexmap"
version = "2.11.4"
@@ -4619,6 +4184,16 @@ dependencies = [
"unicode-segmentation",
]
+[[package]]
+name = "keyboard-types"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d"
+dependencies = [
+ "bitflags 2.11.1",
+ "serde",
+]
+
[[package]]
name = "khronos-egl"
version = "6.0.0"
@@ -4665,25 +4240,19 @@ dependencies = [
[[package]]
name = "kurbo"
-version = "0.11.3"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62"
+checksum = "4b60dfc32f652b926df6192e55525b16d186c69d47876c3ead4da5cc9f8450e2"
dependencies = [
"arrayvec",
"euclid",
+ "polycool",
"smallvec",
]
[[package]]
-name = "kurbo"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32"
-dependencies = [
- "arrayvec",
- "euclid",
- "smallvec",
-]
+name = "lazy-js-bundle"
+version = "0.7.9"
[[package]]
name = "lazy-js-bundle"
@@ -4806,12 +4375,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4"
-[[package]]
-name = "linux-raw-sys"
-version = "0.4.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
-
[[package]]
name = "linux-raw-sys"
version = "0.12.1"
@@ -4898,15 +4461,6 @@ dependencies = [
"syn 2.0.117",
]
-[[package]]
-name = "malloc_buf"
-version = "0.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
-dependencies = [
- "libc",
-]
-
[[package]]
name = "malloc_size_of_derive"
version = "0.1.3"
@@ -4921,8 +4475,6 @@ dependencies = [
[[package]]
name = "manganis"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bfcf56309de35b48b8780ea097ace5c3b773a617b52edc49dfc9a63a7d9dc43"
dependencies = [
"const-serialize 0.7.2",
"const-serialize 0.8.0-alpha.0",
@@ -4937,8 +4489,6 @@ dependencies = [
[[package]]
name = "manganis-core"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a24d6be68f594495aea60850a284029d585d7b7839b26096c1b6d758f8518648"
dependencies = [
"const-serialize 0.7.2",
"const-serialize 0.8.0-alpha.0",
@@ -4951,8 +4501,6 @@ dependencies = [
[[package]]
name = "manganis-macro"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e782a10318d707c0833e31876ded8acf91287eee0010af8392559af614c7226"
dependencies = [
"dunce",
"macro-string",
@@ -4971,19 +4519,19 @@ dependencies = [
"log",
"phf 0.11.3",
"phf_codegen 0.11.3",
- "string_cache",
- "string_cache_codegen",
- "tendril",
+ "string_cache 0.8.9",
+ "string_cache_codegen 0.5.4",
+ "tendril 0.4.3",
]
[[package]]
name = "markup5ever"
-version = "0.35.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3"
+checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de"
dependencies = [
"log",
- "tendril",
+ "tendril 0.5.0",
"web_atoms",
]
@@ -4998,17 +4546,6 @@ dependencies = [
"syn 2.0.117",
]
-[[package]]
-name = "match_token"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
[[package]]
name = "matchers"
version = "0.2.0"
@@ -5052,7 +4589,7 @@ version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227"
dependencies = [
- "rustix 1.1.4",
+ "rustix",
]
[[package]]
@@ -5073,36 +4610,6 @@ dependencies = [
"autocfg",
]
-[[package]]
-name = "metal"
-version = "0.27.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25"
-dependencies = [
- "bitflags 2.11.1",
- "block",
- "core-graphics-types 0.1.3",
- "foreign-types 0.5.0",
- "log",
- "objc",
- "paste",
-]
-
-[[package]]
-name = "metal"
-version = "0.32.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605"
-dependencies = [
- "bitflags 2.11.1",
- "block",
- "core-graphics-types 0.2.0",
- "foreign-types 0.5.0",
- "log",
- "objc",
- "paste",
-]
-
[[package]]
name = "mime"
version = "0.3.17"
@@ -5155,14 +4662,14 @@ dependencies = [
"crossbeam-channel",
"dpi",
"gtk",
- "keyboard-types",
+ "keyboard-types 0.7.0",
"libxdo",
"objc2 0.6.4",
"objc2-app-kit 0.3.2",
"objc2-core-foundation",
"objc2-foundation 0.3.2",
"once_cell",
- "png",
+ "png 0.17.16",
"thiserror 2.0.18",
"windows-sys 0.60.2",
]
@@ -5186,38 +4693,18 @@ dependencies = [
[[package]]
name = "naga"
-version = "0.19.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843"
-dependencies = [
- "bit-set 0.5.3",
- "bitflags 2.11.1",
- "codespan-reporting 0.11.1",
- "hexf-parse",
- "indexmap",
- "log",
- "num-traits",
- "rustc-hash 1.1.0",
- "spirv",
- "termcolor",
- "thiserror 1.0.69",
- "unicode-xid",
-]
-
-[[package]]
-name = "naga"
-version = "26.0.0"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c"
+checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079"
dependencies = [
"arrayvec",
- "bit-set 0.8.0",
+ "bit-set",
"bitflags 2.11.1",
"cfg-if",
- "cfg_aliases 0.2.1",
- "codespan-reporting 0.12.0",
+ "cfg_aliases",
+ "codespan-reporting",
"half",
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
"hexf-parse",
"indexmap",
"libm",
@@ -5256,7 +4743,7 @@ dependencies = [
"bitflags 2.11.1",
"jni-sys 0.3.1",
"log",
- "ndk-sys 0.6.0+11769913",
+ "ndk-sys",
"num_enum",
"raw-window-handle 0.6.2",
"thiserror 1.0.69",
@@ -5268,15 +4755,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
-[[package]]
-name = "ndk-sys"
-version = "0.5.0+25.2.9519653"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
-dependencies = [
- "jni-sys 0.3.1",
-]
-
[[package]]
name = "ndk-sys"
version = "0.6.0+11769913"
@@ -5292,19 +4770,6 @@ version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
-[[package]]
-name = "nix"
-version = "0.29.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
-dependencies = [
- "bitflags 2.11.1",
- "cfg-if",
- "cfg_aliases 0.2.1",
- "libc",
- "memoffset",
-]
-
[[package]]
name = "nodrop"
version = "0.1.14"
@@ -5425,16 +4890,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "objc"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
-dependencies = [
- "malloc_buf",
- "objc_exception",
-]
-
[[package]]
name = "objc-sys"
version = "0.3.5"
@@ -5474,7 +4929,7 @@ dependencies = [
"objc2-core-data",
"objc2-core-image",
"objc2-foundation 0.2.2",
- "objc2-quartz-core",
+ "objc2-quartz-core 0.2.2",
]
[[package]]
@@ -5492,34 +4947,10 @@ dependencies = [
]
[[package]]
-name = "objc2-cloud-kit"
+name = "objc2-core-data"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
-dependencies = [
- "bitflags 2.11.1",
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-core-location",
- "objc2-foundation 0.2.2",
-]
-
-[[package]]
-name = "objc2-contacts"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
-dependencies = [
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
-]
-
-[[package]]
-name = "objc2-core-data"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
+checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
dependencies = [
"bitflags 2.11.1",
"block2 0.5.1",
@@ -5534,6 +4965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
dependencies = [
"bitflags 2.11.1",
+ "block2 0.6.2",
"dispatch2",
"objc2 0.6.4",
]
@@ -5546,6 +4978,7 @@ checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
dependencies = [
"bitflags 2.11.1",
"dispatch2",
+ "libc",
"objc2 0.6.4",
"objc2-core-foundation",
"objc2-io-surface",
@@ -5560,29 +4993,28 @@ dependencies = [
"block2 0.5.1",
"objc2 0.5.2",
"objc2-foundation 0.2.2",
- "objc2-metal",
+ "objc2-metal 0.2.2",
]
[[package]]
-name = "objc2-core-location"
-version = "0.2.2"
+name = "objc2-core-text"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
+checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d"
dependencies = [
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-contacts",
- "objc2-foundation 0.2.2",
+ "bitflags 2.11.1",
+ "objc2-core-foundation",
]
[[package]]
-name = "objc2-core-text"
+name = "objc2-core-video"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d"
+checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6"
dependencies = [
"bitflags 2.11.1",
"objc2-core-foundation",
+ "objc2-core-graphics",
]
[[package]]
@@ -5608,7 +5040,6 @@ checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
dependencies = [
"bitflags 2.11.1",
"block2 0.5.1",
- "dispatch",
"libc",
"objc2 0.5.2",
]
@@ -5637,27 +5068,27 @@ dependencies = [
]
[[package]]
-name = "objc2-link-presentation"
+name = "objc2-metal"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
+checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
dependencies = [
+ "bitflags 2.11.1",
"block2 0.5.1",
"objc2 0.5.2",
- "objc2-app-kit 0.2.2",
"objc2-foundation 0.2.2",
]
[[package]]
name = "objc2-metal"
-version = "0.2.2"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
+checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794"
dependencies = [
"bitflags 2.11.1",
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
+ "block2 0.6.2",
+ "objc2 0.6.4",
+ "objc2-foundation 0.3.2",
]
[[package]]
@@ -5670,38 +5101,20 @@ dependencies = [
"block2 0.5.1",
"objc2 0.5.2",
"objc2-foundation 0.2.2",
- "objc2-metal",
-]
-
-[[package]]
-name = "objc2-symbols"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
-dependencies = [
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
+ "objc2-metal 0.2.2",
]
[[package]]
-name = "objc2-ui-kit"
-version = "0.2.2"
+name = "objc2-quartz-core"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
+checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
dependencies = [
"bitflags 2.11.1",
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-cloud-kit",
- "objc2-core-data",
- "objc2-core-image",
- "objc2-core-location",
- "objc2-foundation 0.2.2",
- "objc2-link-presentation",
- "objc2-quartz-core",
- "objc2-symbols",
- "objc2-uniform-type-identifiers",
- "objc2-user-notifications",
+ "objc2 0.6.4",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.2",
+ "objc2-metal 0.3.2",
]
[[package]]
@@ -5716,30 +5129,6 @@ dependencies = [
"objc2-foundation 0.3.2",
]
-[[package]]
-name = "objc2-uniform-type-identifiers"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
-dependencies = [
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
-]
-
-[[package]]
-name = "objc2-user-notifications"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
-dependencies = [
- "bitflags 2.11.1",
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-core-location",
- "objc2-foundation 0.2.2",
-]
-
[[package]]
name = "objc2-web-kit"
version = "0.3.2"
@@ -5754,24 +5143,6 @@ dependencies = [
"objc2-foundation 0.3.2",
]
-[[package]]
-name = "objc_exception"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "objc_id"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
-dependencies = [
- "objc",
-]
-
[[package]]
name = "once_cell"
version = "1.21.4"
@@ -5809,6 +5180,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
+[[package]]
+name = "openssl-src"
+version = "300.6.0+3.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8e8cbfd3a4a8c8f089147fd7aaa33cf8c7450c4d09f8f80698a0cf093abeff4"
+dependencies = [
+ "cc",
+]
+
[[package]]
name = "openssl-sys"
version = "0.9.115"
@@ -5817,6 +5197,7 @@ checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781"
dependencies = [
"cc",
"libc",
+ "openssl-src",
"pkg-config",
"vcpkg",
]
@@ -5846,16 +5227,6 @@ dependencies = [
"num-traits",
]
-[[package]]
-name = "ordered-stream"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
-dependencies = [
- "futures-core",
- "pin-project-lite",
-]
-
[[package]]
name = "owned_ttf_parser"
version = "0.25.1"
@@ -5914,12 +5285,6 @@ dependencies = [
"system-deps",
]
-[[package]]
-name = "parking"
-version = "2.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
-
[[package]]
name = "parking_lot"
version = "0.12.5"
@@ -5943,18 +5308,37 @@ dependencies = [
"windows-link 0.2.1",
]
+[[package]]
+name = "parlance"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5"
+
[[package]]
name = "parley"
-version = "0.6.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26746861bb76dbc9bcd5ed1b0b55d2fedf291100961251702a031ab2abd2ce52"
+checksum = "8fad031076f48f0d4d85ce1aea9b94b4e715a4d636a030a123038f8f5b5e4343"
dependencies = [
"fontique",
"harfrust",
- "hashbrown 0.15.5",
+ "hashbrown 0.17.1",
+ "icu_normalizer 2.1.1",
+ "icu_properties 2.1.2",
+ "icu_segmenter 2.1.2",
"linebender_resource_handle",
- "skrifa 0.37.0",
- "swash",
+ "parlance",
+ "parley_data",
+ "skrifa",
+]
+
+[[package]]
+name = "parley_data"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ab9ace3fad1b9ed603ddac5b595e69931fc50263d7e04e4055015b77b02da5"
+dependencies = [
+ "icu_properties 2.1.2",
]
[[package]]
@@ -5965,13 +5349,13 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "peniko"
-version = "0.5.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3c76095c9a636173600478e0373218c7b955335048c2bcd12dc6a79657649d8"
+checksum = "839c8299360d2e998bdb106dc0a6cd71dcc5f4df51df1b620361bf50e283cca6"
dependencies = [
"bytemuck",
"color",
- "kurbo 0.12.0",
+ "kurbo",
"linebender_resource_handle",
"smallvec",
]
@@ -6012,6 +5396,17 @@ dependencies = [
"phf_shared 0.11.3",
]
+[[package]]
+name = "phf"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
+dependencies = [
+ "phf_macros 0.13.1",
+ "phf_shared 0.13.1",
+ "serde",
+]
+
[[package]]
name = "phf_codegen"
version = "0.8.0"
@@ -6032,6 +5427,16 @@ dependencies = [
"phf_shared 0.11.3",
]
+[[package]]
+name = "phf_codegen"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
+dependencies = [
+ "phf_generator 0.13.1",
+ "phf_shared 0.13.1",
+]
+
[[package]]
name = "phf_generator"
version = "0.8.0"
@@ -6062,6 +5467,16 @@ dependencies = [
"rand 0.8.6",
]
+[[package]]
+name = "phf_generator"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
+dependencies = [
+ "fastrand",
+ "phf_shared 0.13.1",
+]
+
[[package]]
name = "phf_macros"
version = "0.10.0"
@@ -6089,6 +5504,19 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "phf_macros"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
+dependencies = [
+ "phf_generator 0.13.1",
+ "phf_shared 0.13.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
[[package]]
name = "phf_shared"
version = "0.8.0"
@@ -6116,6 +5544,15 @@ dependencies = [
"siphasher 1.0.3",
]
+[[package]]
+name = "phf_shared"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
+dependencies = [
+ "siphasher 1.0.3",
+]
+
[[package]]
name = "pico-args"
version = "0.5.0"
@@ -6148,36 +5585,25 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
-[[package]]
-name = "piper"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
-dependencies = [
- "atomic-waker",
- "fastrand",
- "futures-io",
-]
-
[[package]]
name = "pixels"
-version = "0.15.0"
+version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "518d43cd70c5381d4c7bd4bf47ee344beee99b58b0587adcb198cc713ff0dfb5"
+checksum = "f7ddc5048a90da4dab8f3f81fb280f44c9e1d76b68fb2f62dce78b22d55546b1"
dependencies = [
"bytemuck",
- "pollster 0.3.0",
+ "pollster",
"raw-window-handle 0.6.2",
- "thiserror 1.0.69",
+ "thiserror 2.0.18",
"ultraviolet",
- "wgpu 0.19.4",
+ "wgpu",
]
[[package]]
name = "pixels_window_renderer"
-version = "0.1.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5973b55d585de980b6a1db68b116c8c741c18ab5a5699621aee7cac343aea58"
+checksum = "76c3c4c8dec11a1bbf2be6e82322f2c4064bcbcf3b33f2de50c88ac1a53a2393"
dependencies = [
"anyrender",
"debug_timer",
@@ -6209,6 +5635,19 @@ dependencies = [
"miniz_oxide",
]
+[[package]]
+name = "png"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61"
+dependencies = [
+ "bitflags 2.11.1",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
[[package]]
name = "polling"
version = "3.11.0"
@@ -6219,21 +5658,24 @@ dependencies = [
"concurrent-queue",
"hermit-abi",
"pin-project-lite",
- "rustix 1.1.4",
+ "rustix",
"windows-sys 0.61.2",
]
[[package]]
name = "pollster"
-version = "0.3.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2"
+checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
[[package]]
-name = "pollster"
+name = "polycool"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
+checksum = "50596ddc09eb5ad5f75cacd40209568e66df71baf86e1499a0e99c4cff12a5a6"
+dependencies = [
+ "arrayvec",
+]
[[package]]
name = "portable-atomic"
@@ -6250,6 +5692,17 @@ dependencies = [
"portable-atomic",
]
+[[package]]
+name = "potential_utf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
+dependencies = [
+ "serde_core",
+ "writeable 0.6.3",
+ "zerovec 0.11.6",
+]
+
[[package]]
name = "powerfmt"
version = "0.2.0"
@@ -6290,7 +5743,7 @@ dependencies = [
"palette",
"pulldown-cmark",
"serde_json",
- "strum",
+ "strum 0.27.2",
"time",
"tracing",
"unic-langid",
@@ -6445,16 +5898,6 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
-[[package]]
-name = "quick-xml"
-version = "0.30.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956"
-dependencies = [
- "memchr",
- "serde",
-]
-
[[package]]
name = "quick-xml"
version = "0.39.4"
@@ -6471,7 +5914,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
dependencies = [
"bytes",
- "cfg_aliases 0.2.1",
+ "cfg_aliases",
"pin-project-lite",
"quinn-proto",
"quinn-udp",
@@ -6511,7 +5954,7 @@ version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
dependencies = [
- "cfg_aliases 0.2.1",
+ "cfg_aliases",
"libc",
"once_cell",
"socket2",
@@ -6712,6 +6155,18 @@ version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
+[[package]]
+name = "raw-window-metal"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135"
+dependencies = [
+ "objc2 0.6.4",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.2",
+ "objc2-quartz-core 0.3.2",
+]
+
[[package]]
name = "rayon"
version = "1.12.0"
@@ -6734,32 +6189,13 @@ dependencies = [
[[package]]
name = "read-fonts"
-version = "0.34.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8941f8e9d5f8ad3aebea330d01ac68c0167600eb31a86ecd86e97be4d13b51f5"
-dependencies = [
- "bytemuck",
- "font-types 0.9.0",
-]
-
-[[package]]
-name = "read-fonts"
-version = "0.35.0"
+version = "0.39.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358"
+checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81"
dependencies = [
"bytemuck",
"core_maths",
- "font-types 0.10.1",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
-dependencies = [
- "bitflags 1.3.2",
+ "font-types",
]
[[package]]
@@ -6836,22 +6272,17 @@ dependencies = [
"bytes",
"cookie",
"cookie_store",
- "encoding_rs",
"futures-core",
"futures-util",
- "h2",
"http",
"http-body",
"http-body-util",
"hyper",
"hyper-rustls",
- "hyper-tls",
"hyper-util",
"js-sys",
"log",
- "mime",
"mime_guess",
- "native-tls",
"percent-encoding",
"pin-project-lite",
"quinn",
@@ -6862,7 +6293,6 @@ dependencies = [
"serde_urlencoded",
"sync_wrapper",
"tokio",
- "tokio-native-tls",
"tokio-rustls",
"tokio-util",
"tower",
@@ -6877,9 +6307,46 @@ dependencies = [
]
[[package]]
-name = "rfd"
-version = "0.17.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
+name = "reqwest"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-tls",
+ "hyper-util",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls-pki-types",
+ "serde",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "tokio",
+ "tokio-native-tls",
+ "tower",
+ "tower-http",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "rfd"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20dafead71c16a34e1ff357ddefc8afc11e7d51d6d2b9fbd07eaa48e3e540220"
dependencies = [
"block2 0.6.2",
@@ -6892,7 +6359,7 @@ dependencies = [
"objc2-core-foundation",
"objc2-foundation 0.3.2",
"percent-encoding",
- "pollster 0.4.0",
+ "pollster",
"raw-window-handle 0.6.2",
"wasm-bindgen",
"wasm-bindgen-futures",
@@ -6926,6 +6393,15 @@ version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
+[[package]]
+name = "roxmltree"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "rustc-hash"
version = "1.1.0"
@@ -6947,19 +6423,6 @@ dependencies = [
"semver",
]
-[[package]]
-name = "rustix"
-version = "0.38.44"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
-dependencies = [
- "bitflags 2.11.1",
- "errno",
- "libc",
- "linux-raw-sys 0.4.15",
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "rustix"
version = "1.1.4"
@@ -6969,7 +6432,7 @@ dependencies = [
"bitflags 2.11.1",
"errno",
"libc",
- "linux-raw-sys 0.12.1",
+ "linux-raw-sys",
"windows-sys 0.61.2",
]
@@ -7079,9 +6542,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sctk-adwaita"
-version = "0.10.1"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
+checksum = "1dd3accc0f3f4bbaf2c9e1957a030dc582028130c67660d44c0a0345a22ca69b"
dependencies = [
"ab_glyph",
"log",
@@ -7133,17 +6596,17 @@ dependencies = [
[[package]]
name = "selectors"
-version = "0.32.0"
+version = "0.38.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09975d3195f34dce9c7b381cb0f00c3c13381d4d3735c0f1a9c894b283b302ab"
+checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d"
dependencies = [
"bitflags 2.11.1",
- "cssparser 0.35.0",
+ "cssparser 0.37.0",
"derive_more 2.0.1",
"log",
"new_debug_unreachable",
- "phf 0.11.3",
- "phf_codegen 0.11.3",
+ "phf 0.13.1",
+ "phf_codegen 0.13.1",
"precomputed-hash",
"rustc-hash 2.1.2",
"servo_arc 0.4.3",
@@ -7396,22 +6859,12 @@ checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
[[package]]
name = "skrifa"
-version = "0.36.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37004372610e83ee2a4c69c7d896b41f33da6a3dc1a4fe07dd9b2629a549b1dc"
-dependencies = [
- "bytemuck",
- "read-fonts 0.34.0",
-]
-
-[[package]]
-name = "skrifa"
-version = "0.37.0"
+version = "0.42.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841"
+checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564"
dependencies = [
"bytemuck",
- "read-fonts 0.35.0",
+ "read-fonts",
]
[[package]]
@@ -7473,9 +6926,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
name = "smithay-client-toolkit"
-version = "0.19.2"
+version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
+checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"
dependencies = [
"bitflags 2.11.1",
"calloop",
@@ -7484,13 +6937,15 @@ dependencies = [
"libc",
"log",
"memmap2",
- "rustix 0.38.44",
- "thiserror 1.0.69",
+ "rustix",
+ "thiserror 2.0.18",
"wayland-backend",
"wayland-client",
"wayland-csd-frame",
"wayland-cursor",
"wayland-protocols",
+ "wayland-protocols-experimental",
+ "wayland-protocols-misc",
"wayland-protocols-wlr",
"wayland-scanner",
"xkeysym",
@@ -7498,10 +6953,11 @@ dependencies = [
[[package]]
name = "smol_str"
-version = "0.2.2"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"
+checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d"
dependencies = [
+ "borsh",
"serde",
]
@@ -7549,9 +7005,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
[[package]]
name = "spirv"
-version = "0.3.0+sdk-1.3.268.0"
+version = "0.4.0+sdk-1.4.341.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
+checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f"
dependencies = [
"bitflags 2.11.1",
]
@@ -7596,6 +7052,19 @@ dependencies = [
"serde",
]
+[[package]]
+name = "string_cache"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901"
+dependencies = [
+ "new_debug_unreachable",
+ "parking_lot",
+ "phf_shared 0.13.1",
+ "precomputed-hash",
+ "serde",
+]
+
[[package]]
name = "string_cache_codegen"
version = "0.5.4"
@@ -7608,15 +7077,33 @@ dependencies = [
"quote",
]
+[[package]]
+name = "string_cache_codegen"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69"
+dependencies = [
+ "phf_generator 0.13.1",
+ "phf_shared 0.13.1",
+ "proc-macro2",
+ "quote",
+]
+
[[package]]
name = "strum"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
dependencies = [
- "strum_macros",
+ "strum_macros 0.27.2",
]
+[[package]]
+name = "strum"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd"
+
[[package]]
name = "strum_macros"
version = "0.27.2"
@@ -7629,29 +7116,39 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "strum_macros"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
+dependencies = [
+ "heck 0.5.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
[[package]]
name = "stylo"
-version = "0.8.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff45c788bcb0230aff156dce747d4d0d7f793f525764fd6690d51bbfe1f5bbd5"
+checksum = "e791ea1b0ede7a720ac17394e48d1ed29cfcb0c27fe339ead2f392ad111502ac"
dependencies = [
"app_units",
"arrayvec",
"atomic_refcell",
"bitflags 2.11.1",
"byteorder",
- "cssparser 0.35.0",
+ "cssparser 0.37.0",
"derive_more 2.0.1",
"encoding_rs",
"euclid",
- "icu_segmenter",
+ "icu_segmenter 1.5.0",
"indexmap",
"itertools 0.14.0",
"itoa",
- "lazy_static",
"log",
"malloc_size_of_derive",
- "matches",
"mime",
"new_debug_unreachable",
"num-derive",
@@ -7663,15 +7160,16 @@ dependencies = [
"rayon",
"rayon-core",
"rustc-hash 2.1.2",
- "selectors 0.32.0",
+ "selectors 0.38.0",
"serde",
"servo_arc 0.4.3",
"smallbitvec",
"smallvec",
"static_assertions",
- "string_cache",
+ "string_cache 0.9.0",
+ "strum 0.28.0",
+ "strum_macros 0.28.0",
"stylo_atoms",
- "stylo_config",
"stylo_derive",
"stylo_dom",
"stylo_malloc_size_of",
@@ -7689,25 +7187,19 @@ dependencies = [
[[package]]
name = "stylo_atoms"
-version = "0.8.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7d6ff15e6ed626c331663555af48b8f21bc46f729f45711597143dc1bf50fb5"
+checksum = "50302033a902062041527b6213259c28217a85ffa8f5da7479b584c98f129bbc"
dependencies = [
- "string_cache",
- "string_cache_codegen",
+ "string_cache 0.9.0",
+ "string_cache_codegen 0.6.1",
]
-[[package]]
-name = "stylo_config"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebdb6722cde5d2660928c63e07b3afbef1be8376e2b247e96e381ba5e99db33a"
-
[[package]]
name = "stylo_derive"
-version = "0.8.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1724b911e0775fb9379dc629b1c3647fed991f90ddb865f74a2a26f7b030777"
+checksum = "2697714b8a3591ca2bd9087fdbf7f228979217c24c0eba91a9f127cfbd276f24"
dependencies = [
"darling 0.20.11",
"proc-macro2",
@@ -7718,9 +7210,9 @@ dependencies = [
[[package]]
name = "stylo_dom"
-version = "0.8.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8c0101ada15990fee6269257538cbcbc6f01462dc4b22d6f820edb6a4427e82"
+checksum = "fb8aac516e70921783ec1279cf568cb981177305beb70575c4c00fd6551384f2"
dependencies = [
"bitflags 2.11.1",
"stylo_malloc_size_of",
@@ -7728,33 +7220,33 @@ dependencies = [
[[package]]
name = "stylo_malloc_size_of"
-version = "0.8.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8185a7a3cf0716c475ad113b494c276acf534b518dd41ee47ad5aba4af6690e"
+checksum = "925c363675afbe6e2b845f571332c860fe9a61bf9896d8ae358c6c68f6e3aefe"
dependencies = [
"app_units",
- "cssparser 0.35.0",
+ "cssparser 0.37.0",
"euclid",
- "selectors 0.32.0",
+ "selectors 0.38.0",
"servo_arc 0.4.3",
"smallbitvec",
"smallvec",
- "string_cache",
+ "string_cache 0.9.0",
"thin-vec",
"void",
]
[[package]]
name = "stylo_static_prefs"
-version = "0.8.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca4c89da4ab6ac0beda8b03db38216967c99f1f7287a0f3b0f366b45d34ac7c4"
+checksum = "850ac3401667d004d4a13f9c93dc6d9fe67044c9bfdaf5f1519ff136ed68fbab"
[[package]]
name = "stylo_taffy"
-version = "0.2.0"
+version = "0.3.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b841aad2b770ef75dd134ba885aef0716f2ac3a83ccaf0fc31b09c8b02562e23"
+checksum = "95128533e10268e12b17cab58c0c608a3a9c444ed21cb9ff3b9892bc55153fbf"
dependencies = [
"stylo",
"stylo_atoms",
@@ -7763,16 +7255,16 @@ dependencies = [
[[package]]
name = "stylo_traits"
-version = "0.8.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f58034d08877fb80a5496301fde9111bc57e761f4a78045222af30ce95ec150f"
+checksum = "31f5138147c085644487d71b9bbb274fc7f4d6bbe2289c09744c4bd6018f45e2"
dependencies = [
"app_units",
"bitflags 2.11.1",
- "cssparser 0.35.0",
+ "cssparser 0.37.0",
"euclid",
"malloc_size_of_derive",
- "selectors 0.32.0",
+ "selectors 0.38.0",
"serde",
"servo_arc 0.4.3",
"stylo_atoms",
@@ -7786,8 +7278,6 @@ dependencies = [
[[package]]
name = "subsecond"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cc79674bd55726e6b123204403389400229a95fe4a3b2c5453dada70b06ca95"
dependencies = [
"js-sys",
"libc",
@@ -7805,8 +7295,6 @@ dependencies = [
[[package]]
name = "subsecond-types"
version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9798bfed58797aed51c672aa99810aac30a50d3120ecfdcf28c13784e9a8f1c"
dependencies = [
"serde",
]
@@ -7817,33 +7305,16 @@ version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
-[[package]]
-name = "svg_fmt"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
-
[[package]]
name = "svgtypes"
-version = "0.15.3"
+version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc"
+checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d"
dependencies = [
- "kurbo 0.11.3",
+ "kurbo",
"siphasher 1.0.3",
]
-[[package]]
-name = "swash"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64"
-dependencies = [
- "skrifa 0.36.0",
- "yazi",
- "zeno",
-]
-
[[package]]
name = "syn"
version = "1.0.109"
@@ -7922,9 +7393,9 @@ dependencies = [
[[package]]
name = "taffy"
-version = "0.9.2"
+version = "0.11.0-experimental-cache-fix.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b"
+checksum = "e87b88128d417cd7c2c75b8a398177fb9efcb2ae5cddad22bcec106ba9c8e1c3"
dependencies = [
"arrayvec",
"grid",
@@ -7941,7 +7412,7 @@ dependencies = [
"bitflags 2.11.1",
"block2 0.6.2",
"core-foundation 0.10.1",
- "core-graphics 0.25.0",
+ "core-graphics",
"crossbeam-channel",
"dispatch2",
"dlopen2",
@@ -7954,7 +7425,7 @@ dependencies = [
"log",
"ndk",
"ndk-context",
- "ndk-sys 0.6.0+11769913",
+ "ndk-sys",
"objc2 0.6.4",
"objc2-app-kit 0.3.2",
"objc2-foundation 0.3.2",
@@ -7997,7 +7468,7 @@ dependencies = [
"fastrand",
"getrandom 0.3.4",
"once_cell",
- "rustix 1.1.4",
+ "rustix",
"windows-sys 0.61.2",
]
@@ -8012,6 +7483,16 @@ dependencies = [
"utf-8",
]
+[[package]]
+name = "tendril"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24"
+dependencies = [
+ "new_debug_unreachable",
+ "utf-8",
+]
+
[[package]]
name = "termcolor"
version = "1.4.1"
@@ -8161,7 +7642,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
"displaydoc",
- "zerovec",
+ "zerovec 0.10.4",
]
[[package]]
@@ -8171,6 +7652,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2b56a820bb70060f096338fcc02edb78cb3f8fb21c5078503f48588cfcaf494"
dependencies = [
"displaydoc",
+ "zerovec 0.11.6",
]
[[package]]
@@ -8190,15 +7672,15 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "to_shmem"
-version = "0.2.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb61262d1e7e4cc777e40cb2f101d5fa51f3eeac50c3a7355b2027b9274baa35"
+checksum = "e8eb8396666f8344ad4b8849ac0d493ae960290ba89ba1aaf0cb8045d2023288"
dependencies = [
- "cssparser 0.35.0",
+ "cssparser 0.37.0",
"servo_arc 0.4.3",
"smallbitvec",
"smallvec",
- "string_cache",
+ "string_cache 0.9.0",
"thin-vec",
]
@@ -8526,7 +8008,7 @@ dependencies = [
"objc2-core-graphics",
"objc2-foundation 0.3.2",
"once_cell",
- "png",
+ "png 0.17.16",
"thiserror 2.0.18",
"windows-sys 0.60.2",
]
@@ -8619,22 +8101,11 @@ version = "1.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de"
-[[package]]
-name = "uds_windows"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
-dependencies = [
- "memoffset",
- "tempfile",
- "winapi",
-]
-
[[package]]
name = "ultraviolet"
-version = "0.9.2"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a28554d13eb5daba527cc1b91b6c341372a0ae45ed277ffb2c6fbc04f319d7e"
+checksum = "ea519dad475ee0446b8172793c3c327e4fc81dafdaf05aaac510e630000b6296"
dependencies = [
"wide",
]
@@ -8784,19 +8255,19 @@ dependencies = [
[[package]]
name = "usvg"
-version = "0.45.1"
+version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef"
+checksum = "e419dff010bb12512b0ae9e3d2f318dfbdf0167fde7eb05465134d4e8756076f"
dependencies = [
"base64",
"data-url",
"flate2",
"fontdb",
"imagesize",
- "kurbo 0.11.3",
+ "kurbo",
"log",
"pico-args",
- "roxmltree",
+ "roxmltree 0.21.1",
"rustybuzz",
"simplecss",
"siphasher 1.0.3",
@@ -8860,75 +8331,56 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-[[package]]
-name = "vello"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71acbd6b5f7f19841425845c113a89a54bbf60556ae39e7d0182a6f80ce37f5b"
-dependencies = [
- "bytemuck",
- "futures-intrusive",
- "log",
- "peniko",
- "png",
- "skrifa 0.37.0",
- "static_assertions",
- "thiserror 2.0.18",
- "vello_encoding",
- "vello_shaders",
- "wgpu 26.0.1",
-]
-
[[package]]
name = "vello_common"
-version = "0.0.4"
+version = "0.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a235ba928b3109ad9e7696270edb09445a52ae1c7c08e6d31a19b1cdd6cbc24a"
+checksum = "3361bff7f7d82c0c496b92048db83846691f0e844cc28dee92b1c824291b55ee"
dependencies = [
"bytemuck",
"fearless_simd",
- "hashbrown 0.15.5",
+ "guillotiere",
+ "hashbrown 0.17.1",
"log",
"peniko",
- "skrifa 0.37.0",
+ "png 0.18.1",
"smallvec",
+ "thiserror 2.0.18",
]
[[package]]
name = "vello_cpu"
-version = "0.0.4"
+version = "0.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0bd1fcf9c1814f17a491e07113623d44e3ec1125a9f3401f5e047d6d326da21"
+checksum = "6d8ded630e8316bb94a55881256506d1f3b9947b5f66db8a7d32ca7ba02decd0"
dependencies = [
"bytemuck",
+ "glifo",
+ "hashbrown 0.17.1",
"vello_common",
]
[[package]]
-name = "vello_encoding"
-version = "0.6.0"
+name = "vello_hybrid"
+version = "0.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfd5e0b9fec91df34a09fbcbbed474cec68d05691b590a911c7af83c4860ae42"
+checksum = "644d88a5ccb2280a407eada75a9318920bdee029e293b52c6e8b3fc8c31c70dd"
dependencies = [
"bytemuck",
- "guillotiere",
- "peniko",
- "skrifa 0.37.0",
- "smallvec",
+ "glifo",
+ "hashbrown 0.17.1",
+ "log",
+ "thiserror 2.0.18",
+ "vello_common",
+ "vello_sparse_shaders",
+ "wgpu",
]
[[package]]
-name = "vello_shaders"
-version = "0.6.0"
+name = "vello_sparse_shaders"
+version = "0.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c381dde4e7d0d7957df0c0e3f8a7cc0976762d3972d97da5c71464e57ffefd3"
-dependencies = [
- "bytemuck",
- "log",
- "naga 26.0.0",
- "thiserror 2.0.18",
- "vello_encoding",
-]
+checksum = "45c3abf652bc0f42be7b8235bc2b9ae97991ee801bbdbc694485dead5786202c"
[[package]]
name = "version-compare"
@@ -9086,7 +8538,7 @@ checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d"
dependencies = [
"cc",
"downcast-rs",
- "rustix 1.1.4",
+ "rustix",
"scoped-tls",
"smallvec",
"wayland-sys",
@@ -9099,7 +8551,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144"
dependencies = [
"bitflags 2.11.1",
- "rustix 1.1.4",
+ "rustix",
"wayland-backend",
"wayland-scanner",
]
@@ -9121,7 +8573,7 @@ version = "0.31.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d"
dependencies = [
- "rustix 1.1.4",
+ "rustix",
"wayland-client",
"xcursor",
]
@@ -9138,6 +8590,32 @@ dependencies = [
"wayland-scanner",
]
+[[package]]
+name = "wayland-protocols-experimental"
+version = "20250721.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1"
+dependencies = [
+ "bitflags 2.11.1",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-protocols-misc"
+version = "0.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8"
+dependencies = [
+ "bitflags 2.11.1",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-scanner",
+]
+
[[package]]
name = "wayland-protocols-plasma"
version = "0.3.12"
@@ -9171,7 +8649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a"
dependencies = [
"proc-macro2",
- "quick-xml 0.39.4",
+ "quick-xml",
"quote",
]
@@ -9209,14 +8687,14 @@ dependencies = [
[[package]]
name = "web_atoms"
-version = "0.1.3"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414"
+checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538"
dependencies = [
- "phf 0.11.3",
- "phf_codegen 0.11.3",
- "string_cache",
- "string_cache_codegen",
+ "phf 0.13.1",
+ "phf_codegen 0.13.1",
+ "string_cache 0.9.0",
+ "string_cache_codegen 0.6.1",
]
[[package]]
@@ -9332,44 +8810,20 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
[[package]]
name = "wgpu"
-version = "0.19.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01"
-dependencies = [
- "arrayvec",
- "cfg-if",
- "cfg_aliases 0.1.1",
- "js-sys",
- "log",
- "naga 0.19.2",
- "parking_lot",
- "profiling",
- "raw-window-handle 0.6.2",
- "smallvec",
- "static_assertions",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "wgpu-core 0.19.4",
- "wgpu-hal 0.19.5",
- "wgpu-types 0.19.2",
-]
-
-[[package]]
-name = "wgpu"
-version = "26.0.1"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798"
+checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250"
dependencies = [
"arrayvec",
"bitflags 2.11.1",
+ "bytemuck",
"cfg-if",
- "cfg_aliases 0.2.1",
+ "cfg_aliases",
"document-features",
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
"js-sys",
"log",
- "naga 26.0.0",
+ "naga",
"parking_lot",
"portable-atomic",
"profiling",
@@ -9379,171 +8833,114 @@ dependencies = [
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
- "wgpu-core 26.0.1",
- "wgpu-hal 26.0.6",
- "wgpu-types 26.0.0",
+ "wgpu-core",
+ "wgpu-hal",
+ "wgpu-types",
]
[[package]]
name = "wgpu-core"
-version = "0.19.4"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a"
+checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7"
dependencies = [
"arrayvec",
- "bit-vec 0.6.3",
+ "bit-set",
+ "bit-vec",
"bitflags 2.11.1",
- "cfg_aliases 0.1.1",
- "codespan-reporting 0.11.1",
+ "bytemuck",
+ "cfg_aliases",
+ "document-features",
+ "hashbrown 0.16.1",
"indexmap",
"log",
- "naga 0.19.2",
+ "naga",
"once_cell",
"parking_lot",
+ "portable-atomic",
"profiling",
"raw-window-handle 0.6.2",
"rustc-hash 1.1.0",
"smallvec",
- "thiserror 1.0.69",
- "web-sys",
- "wgpu-hal 0.19.5",
- "wgpu-types 0.19.2",
+ "thiserror 2.0.18",
+ "wgpu-core-deps-apple",
+ "wgpu-core-deps-emscripten",
+ "wgpu-core-deps-wasm",
+ "wgpu-core-deps-windows-linux-android",
+ "wgpu-hal",
+ "wgpu-naga-bridge",
+ "wgpu-types",
]
[[package]]
-name = "wgpu-core"
-version = "26.0.1"
+name = "wgpu-core-deps-apple"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9"
+checksum = "62e51b5447e144b3dbba4feb01f80f4fa21696fa0cd99afb2c3df1affd6fdb28"
dependencies = [
- "arrayvec",
- "bit-set 0.8.0",
- "bit-vec 0.8.0",
- "bitflags 2.11.1",
- "cfg_aliases 0.2.1",
- "document-features",
- "hashbrown 0.15.5",
- "indexmap",
- "log",
- "naga 26.0.0",
- "once_cell",
- "parking_lot",
- "portable-atomic",
- "profiling",
- "raw-window-handle 0.6.2",
- "rustc-hash 1.1.0",
- "smallvec",
- "thiserror 2.0.18",
- "wgpu-core-deps-apple",
- "wgpu-core-deps-emscripten",
- "wgpu-core-deps-windows-linux-android",
- "wgpu-hal 26.0.6",
- "wgpu-types 26.0.0",
-]
-
-[[package]]
-name = "wgpu-core-deps-apple"
-version = "26.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf"
-dependencies = [
- "wgpu-hal 26.0.6",
+ "wgpu-hal",
]
[[package]]
name = "wgpu-core-deps-emscripten"
-version = "26.0.0"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d"
+checksum = "3487cd6293a963bc5c0c0396f6a2192043c50003c07f4efdccbad3d90ec9d819"
dependencies = [
- "wgpu-hal 26.0.6",
+ "wgpu-hal",
]
[[package]]
-name = "wgpu-core-deps-windows-linux-android"
-version = "26.0.0"
+name = "wgpu-core-deps-wasm"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14"
+checksum = "0c2f2fb042f36920771deb0b966543c5751b18f3d327760ffc90f74e20b2dcd4"
dependencies = [
- "wgpu-hal 26.0.6",
+ "wgpu-hal",
]
[[package]]
-name = "wgpu-hal"
-version = "0.19.5"
+name = "wgpu-core-deps-windows-linux-android"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703"
+checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916"
dependencies = [
- "android_system_properties",
- "arrayvec",
- "ash 0.37.3+1.3.251",
- "bit-set 0.5.3",
- "bitflags 2.11.1",
- "block",
- "cfg_aliases 0.1.1",
- "core-graphics-types 0.1.3",
- "d3d12",
- "glow 0.13.1",
- "glutin_wgl_sys 0.5.0",
- "gpu-alloc",
- "gpu-allocator 0.25.0",
- "gpu-descriptor 0.2.4",
- "hassle-rs",
- "js-sys",
- "khronos-egl",
- "libc",
- "libloading 0.8.9",
- "log",
- "metal 0.27.0",
- "naga 0.19.2",
- "ndk-sys 0.5.0+25.2.9519653",
- "objc",
- "once_cell",
- "parking_lot",
- "profiling",
- "range-alloc",
- "raw-window-handle 0.6.2",
- "renderdoc-sys",
- "rustc-hash 1.1.0",
- "smallvec",
- "thiserror 1.0.69",
- "wasm-bindgen",
- "web-sys",
- "wgpu-types 0.19.2",
- "winapi",
+ "wgpu-hal",
]
[[package]]
name = "wgpu-hal"
-version = "26.0.6"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8d0e67224cc7305b3b4eb2cc57ca4c4c3afc665c1d1bee162ea806e19c47bdd"
+checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f"
dependencies = [
"android_system_properties",
"arrayvec",
- "ash 0.38.0+1.3.281",
- "bit-set 0.8.0",
+ "ash",
+ "bit-set",
"bitflags 2.11.1",
- "block",
+ "block2 0.6.2",
"bytemuck",
"cfg-if",
- "cfg_aliases 0.2.1",
- "core-graphics-types 0.2.0",
- "glow 0.16.0",
- "glutin_wgl_sys 0.6.1",
- "gpu-alloc",
- "gpu-allocator 0.27.0",
- "gpu-descriptor 0.3.2",
- "hashbrown 0.15.5",
+ "cfg_aliases",
+ "glow",
+ "glutin_wgl_sys",
+ "gpu-allocator",
+ "gpu-descriptor",
+ "hashbrown 0.16.1",
"js-sys",
"khronos-egl",
"libc",
"libloading 0.8.9",
"log",
- "metal 0.32.0",
- "naga 26.0.0",
- "ndk-sys 0.6.0+11769913",
- "objc",
+ "naga",
+ "ndk-sys",
+ "objc2 0.6.4",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.2",
+ "objc2-metal 0.3.2",
+ "objc2-quartz-core 0.3.2",
+ "once_cell",
"ordered-float",
"parking_lot",
"portable-atomic",
@@ -9551,49 +8948,52 @@ dependencies = [
"profiling",
"range-alloc",
"raw-window-handle 0.6.2",
+ "raw-window-metal",
"renderdoc-sys",
"smallvec",
"thiserror 2.0.18",
"wasm-bindgen",
+ "wayland-sys",
"web-sys",
- "wgpu-types 26.0.0",
- "windows 0.58.0",
- "windows-core 0.58.0",
+ "wgpu-naga-bridge",
+ "wgpu-types",
+ "windows 0.62.2",
+ "windows-core 0.62.2",
+ "windows-result 0.4.1",
]
[[package]]
-name = "wgpu-types"
-version = "0.19.2"
+name = "wgpu-naga-bridge"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805"
+checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02"
dependencies = [
- "bitflags 2.11.1",
- "js-sys",
- "web-sys",
+ "naga",
+ "wgpu-types",
]
[[package]]
name = "wgpu-types"
-version = "26.0.0"
+version = "29.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2"
+checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639"
dependencies = [
"bitflags 2.11.1",
"bytemuck",
"js-sys",
"log",
- "thiserror 2.0.18",
+ "raw-window-handle 0.6.2",
"web-sys",
]
[[package]]
name = "wgpu_context"
-version = "0.1.2"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0f49e6f733fcc61e41a5ecdb36910baa5148497036784bca319289bfdca6141"
+checksum = "b1352548a4576b7998474fa6fbc54232df5f9ccd90cdea079418c3577e26e220"
dependencies = [
"futures-intrusive",
- "wgpu 26.0.1",
+ "wgpu",
]
[[package]]
@@ -9606,12 +9006,6 @@ dependencies = [
"safe_arch",
]
-[[package]]
-name = "widestring"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
-
[[package]]
name = "winapi"
version = "0.3.9"
@@ -9643,16 +9037,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-[[package]]
-name = "windows"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
-dependencies = [
- "windows-core 0.52.0",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "windows"
version = "0.58.0"
@@ -9669,11 +9053,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-future 0.2.1",
"windows-link 0.1.3",
- "windows-numerics",
+ "windows-numerics 0.2.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
+dependencies = [
+ "windows-collections 0.3.2",
+ "windows-core 0.62.2",
+ "windows-future 0.3.2",
+ "windows-numerics 0.3.1",
]
[[package]]
@@ -9686,12 +9082,12 @@ dependencies = [
]
[[package]]
-name = "windows-core"
-version = "0.52.0"
+name = "windows-collections"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-core 0.62.2",
]
[[package]]
@@ -9720,6 +9116,19 @@ dependencies = [
"windows-strings 0.4.2",
]
+[[package]]
+name = "windows-core"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+dependencies = [
+ "windows-implement 0.60.2",
+ "windows-interface 0.59.3",
+ "windows-link 0.2.1",
+ "windows-result 0.4.1",
+ "windows-strings 0.5.1",
+]
+
[[package]]
name = "windows-future"
version = "0.2.1"
@@ -9728,7 +9137,18 @@ checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
dependencies = [
"windows-core 0.61.2",
"windows-link 0.1.3",
- "windows-threading",
+ "windows-threading 0.1.0",
+]
+
+[[package]]
+name = "windows-future"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
+dependencies = [
+ "windows-core 0.62.2",
+ "windows-link 0.2.1",
+ "windows-threading 0.2.1",
]
[[package]]
@@ -9797,6 +9217,16 @@ dependencies = [
"windows-link 0.1.3",
]
+[[package]]
+name = "windows-numerics"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
+dependencies = [
+ "windows-core 0.62.2",
+ "windows-link 0.2.1",
+]
+
[[package]]
name = "windows-registry"
version = "0.5.3"
@@ -9826,6 +9256,15 @@ dependencies = [
"windows-link 0.1.3",
]
+[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
[[package]]
name = "windows-strings"
version = "0.1.0"
@@ -9845,6 +9284,15 @@ dependencies = [
"windows-link 0.1.3",
]
+[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
[[package]]
name = "windows-sys"
version = "0.45.0"
@@ -9947,6 +9395,15 @@ dependencies = [
"windows-link 0.1.3",
]
+[[package]]
+name = "windows-threading"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
[[package]]
name = "windows-version"
version = "0.1.7"
@@ -10096,51 +9553,224 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
[[package]]
name = "winit"
-version = "0.30.13"
+version = "0.31.0-beta.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d"
+checksum = "2879d2854d1a43e48f67322d4bd097afcb6eb8f8f775c8de0260a71aea1df1aa"
+dependencies = [
+ "bitflags 2.11.1",
+ "cfg_aliases",
+ "cursor-icon",
+ "dpi",
+ "libc",
+ "raw-window-handle 0.6.2",
+ "rustix",
+ "smol_str",
+ "tracing",
+ "winit-android",
+ "winit-appkit",
+ "winit-common",
+ "winit-core",
+ "winit-orbital",
+ "winit-uikit",
+ "winit-wayland",
+ "winit-web",
+ "winit-win32",
+ "winit-x11",
+]
+
+[[package]]
+name = "winit-android"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d9c0d2cd93efec3a9f9ad819cfaf0834782403af7c0d248c784ec0c61761df"
dependencies = [
- "ahash",
"android-activity",
- "atomic-waker",
"bitflags 2.11.1",
- "block2 0.5.1",
- "bytemuck",
+ "dpi",
+ "ndk",
+ "raw-window-handle 0.6.2",
+ "smol_str",
+ "tracing",
+ "winit-core",
+]
+
+[[package]]
+name = "winit-appkit"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21310ca07851a49c348e0c2cc768e36b52ca65afda2c2354d78ed4b90074d8aa"
+dependencies = [
+ "bitflags 2.11.1",
+ "block2 0.6.2",
+ "dispatch2",
+ "dpi",
+ "objc2 0.6.4",
+ "objc2-app-kit 0.3.2",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-core-video",
+ "objc2-foundation 0.3.2",
+ "raw-window-handle 0.6.2",
+ "smol_str",
+ "tracing",
+ "winit-common",
+ "winit-core",
+]
+
+[[package]]
+name = "winit-common"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45375fbac4cbb77260d83a30b1f9d8105880dbac99a9ae97f56656694680ff69"
+dependencies = [
+ "memmap2",
+ "objc2 0.6.4",
+ "objc2-core-foundation",
+ "smol_str",
+ "tracing",
+ "winit-core",
+ "x11-dl",
+ "xkbcommon-dl",
+]
+
+[[package]]
+name = "winit-core"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4f0ccd7abb43740e2c6124ac7cae7d865ecec74eec63783e8922577ac232583"
+dependencies = [
+ "bitflags 2.11.1",
+ "cursor-icon",
+ "dpi",
+ "keyboard-types 0.8.3",
+ "raw-window-handle 0.6.2",
+ "smol_str",
+ "web-time",
+]
+
+[[package]]
+name = "winit-orbital"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51ea1fb262e7209f265f12bd0cc792c399b14355675e65531e9c8a87db287d46"
+dependencies = [
+ "bitflags 2.11.1",
+ "dpi",
+ "orbclient",
+ "raw-window-handle 0.6.2",
+ "redox_syscall 0.5.18",
+ "smol_str",
+ "tracing",
+ "winit-core",
+]
+
+[[package]]
+name = "winit-uikit"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "680a356e798837d8eb274d4556e83bceaf81698194e31aafc5cfb8a9f2fab643"
+dependencies = [
+ "bitflags 2.11.1",
+ "block2 0.6.2",
+ "dispatch2",
+ "dpi",
+ "objc2 0.6.4",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.2",
+ "objc2-ui-kit",
+ "raw-window-handle 0.6.2",
+ "smol_str",
+ "tracing",
+ "winit-common",
+ "winit-core",
+]
+
+[[package]]
+name = "winit-wayland"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce5afb2ba07da603f84b722c95f9f9396d2cedae3944fb6c0cda4a6f88de545"
+dependencies = [
+ "ahash",
+ "bitflags 2.11.1",
"calloop",
- "cfg_aliases 0.2.1",
- "concurrent-queue",
- "core-foundation 0.9.4",
- "core-graphics 0.23.2",
"cursor-icon",
"dpi",
- "js-sys",
"libc",
"memmap2",
- "ndk",
- "objc2 0.5.2",
- "objc2-app-kit 0.2.2",
- "objc2-foundation 0.2.2",
- "objc2-ui-kit 0.2.2",
- "orbclient",
- "percent-encoding",
- "pin-project",
"raw-window-handle 0.6.2",
- "redox_syscall 0.4.1",
- "rustix 0.38.44",
+ "rustix",
"sctk-adwaita",
"smithay-client-toolkit",
"smol_str",
"tracing",
- "unicode-segmentation",
- "wasm-bindgen",
- "wasm-bindgen-futures",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"wayland-protocols-plasma",
+ "winit-common",
+ "winit-core",
+]
+
+[[package]]
+name = "winit-web"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2490a953fb776fbbd5e295d54f1c3847f4f15b6c3929ec53c09acda6487a92"
+dependencies = [
+ "atomic-waker",
+ "bitflags 2.11.1",
+ "concurrent-queue",
+ "cursor-icon",
+ "dpi",
+ "js-sys",
+ "pin-project",
+ "raw-window-handle 0.6.2",
+ "smol_str",
+ "tracing",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
"web-sys",
"web-time",
- "windows-sys 0.52.0",
+ "winit-core",
+]
+
+[[package]]
+name = "winit-win32"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "644ea78af0e858aa3b092e5d1c67c41995a98220c81813f1353b28bc8bb91eaa"
+dependencies = [
+ "bitflags 2.11.1",
+ "cursor-icon",
+ "dpi",
+ "raw-window-handle 0.6.2",
+ "smol_str",
+ "tracing",
+ "unicode-segmentation",
+ "windows-sys 0.59.0",
+ "winit-core",
+]
+
+[[package]]
+name = "winit-x11"
+version = "0.31.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa5b600756534c7041aa93cd0d244d44b09fca1b89e202bd1cd80dd9f3636c46"
+dependencies = [
+ "bitflags 2.11.1",
+ "bytemuck",
+ "calloop",
+ "cursor-icon",
+ "dpi",
+ "libc",
+ "percent-encoding",
+ "raw-window-handle 0.6.2",
+ "rustix",
+ "smol_str",
+ "tracing",
+ "winit-common",
+ "winit-core",
"x11-dl",
"x11rb",
"xkbcommon-dl",
@@ -10222,7 +9852,7 @@ dependencies = [
"objc2-app-kit 0.3.2",
"objc2-core-foundation",
"objc2-foundation 0.3.2",
- "objc2-ui-kit 0.3.2",
+ "objc2-ui-kit",
"objc2-web-kit",
"once_cell",
"percent-encoding",
@@ -10240,6 +9870,18 @@ dependencies = [
"windows-version",
]
+[[package]]
+name = "wuff"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77cd3107d02dc860d9377a7e28a60e2a77c6d1964f4119999b03dd95f007719"
+dependencies = [
+ "arrayvec",
+ "brotli-decompressor",
+ "bytes",
+ "flate2",
+]
+
[[package]]
name = "x11"
version = "2.21.0"
@@ -10272,8 +9914,9 @@ dependencies = [
"libc",
"libloading 0.8.9",
"once_cell",
- "rustix 1.1.4",
+ "rustix",
"x11rb-protocol",
+ "xcursor",
]
[[package]]
@@ -10288,16 +9931,6 @@ version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b"
-[[package]]
-name = "xdg-home"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6"
-dependencies = [
- "libc",
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "xkbcommon-dl"
version = "0.4.2"
@@ -10325,12 +9958,12 @@ checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f"
[[package]]
name = "xml5ever"
-version = "0.35.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee3f1e41afb31a75aef076563b0ad3ecc24f5bd9d12a72b132222664eb76b494"
+checksum = "5ab627f34ff61b80d756180d556f9c68801d836d271b3b8c094504ceca69d221"
dependencies = [
"log",
- "markup5ever 0.35.0",
+ "markup5ever 0.39.0",
]
[[package]]
@@ -10345,12 +9978,6 @@ version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
-[[package]]
-name = "yazi"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5"
-
[[package]]
name = "yeslogic-fontconfig-sys"
version = "6.0.1"
@@ -10370,127 +9997,45 @@ checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
dependencies = [
"serde",
"stable_deref_trait",
- "yoke-derive",
+ "yoke-derive 0.7.5",
"zerofrom",
]
[[package]]
-name = "yoke-derive"
-version = "0.7.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
- "synstructure",
-]
-
-[[package]]
-name = "zbus"
-version = "4.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
-dependencies = [
- "async-broadcast",
- "async-executor",
- "async-fs",
- "async-io",
- "async-lock",
- "async-process",
- "async-recursion",
- "async-task",
- "async-trait",
- "blocking",
- "enumflags2",
- "event-listener",
- "futures-core",
- "futures-sink",
- "futures-util",
- "hex",
- "nix",
- "ordered-stream",
- "rand 0.8.6",
- "serde",
- "serde_repr",
- "sha1",
- "static_assertions",
- "tracing",
- "uds_windows",
- "windows-sys 0.52.0",
- "xdg-home",
- "zbus_macros",
- "zbus_names",
- "zvariant",
-]
-
-[[package]]
-name = "zbus-lockstep"
-version = "0.4.4"
+name = "yoke"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d"
+checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
dependencies = [
- "zbus_xml",
- "zvariant",
+ "stable_deref_trait",
+ "yoke-derive 0.8.2",
+ "zerofrom",
]
[[package]]
-name = "zbus-lockstep-macros"
-version = "0.4.4"
+name = "yoke-derive"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce"
+checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.117",
- "zbus-lockstep",
- "zbus_xml",
- "zvariant",
+ "synstructure",
]
[[package]]
-name = "zbus_macros"
-version = "4.4.0"
+name = "yoke-derive"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e"
+checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
dependencies = [
- "proc-macro-crate 3.5.0",
"proc-macro2",
"quote",
"syn 2.0.117",
- "zvariant_utils",
-]
-
-[[package]]
-name = "zbus_names"
-version = "3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
-dependencies = [
- "serde",
- "static_assertions",
- "zvariant",
-]
-
-[[package]]
-name = "zbus_xml"
-version = "4.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233"
-dependencies = [
- "quick-xml 0.30.0",
- "serde",
- "static_assertions",
- "zbus_names",
- "zvariant",
+ "synstructure",
]
-[[package]]
-name = "zeno"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
-
[[package]]
name = "zerocopy"
version = "0.8.48"
@@ -10538,15 +10083,38 @@ version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
+[[package]]
+name = "zerotrie"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa766b97d68da210d29cc0bc8d072d87de9359cb998e4bc30ab4982a1c795d47"
+dependencies = [
+ "displaydoc",
+ "yoke 0.7.5",
+ "zerofrom",
+]
+
[[package]]
name = "zerovec"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
dependencies = [
- "yoke",
+ "yoke 0.7.5",
+ "zerofrom",
+ "zerovec-derive 0.10.3",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
+dependencies = [
+ "serde",
+ "yoke 0.8.2",
"zerofrom",
- "zerovec-derive",
+ "zerovec-derive 0.11.3",
]
[[package]]
@@ -10560,6 +10128,17 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "zerovec-derive"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
[[package]]
name = "zmij"
version = "1.0.21"
@@ -10589,40 +10168,3 @@ checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
dependencies = [
"zune-core",
]
-
-[[package]]
-name = "zvariant"
-version = "4.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe"
-dependencies = [
- "endi",
- "enumflags2",
- "serde",
- "static_assertions",
- "zvariant_derive",
-]
-
-[[package]]
-name = "zvariant_derive"
-version = "4.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449"
-dependencies = [
- "proc-macro-crate 3.5.0",
- "proc-macro2",
- "quote",
- "syn 2.0.117",
- "zvariant_utils",
-]
-
-[[package]]
-name = "zvariant_utils"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
diff --git a/Cargo.toml b/Cargo.toml
index 5bed6886..55ac51d9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,6 +9,16 @@ tracing = { version = "0.1", features = ["std"] }
dioxus = "0.7.8"
dioxus-rsx = "0.7.8"
+[patch.crates-io]
+dioxus = { path = "../selection/packages/dioxus" }
+dioxus-rsx = { path = "../selection/packages/rsx" }
+dioxus-ssr = { path = "../selection/packages/ssr" }
+
+[patch."https://github.com/ealmloff/dioxus"]
+dioxus = { path = "../selection/packages/dioxus" }
+dioxus-signals = { path = "../selection/packages/signals" }
+lazy-js-bundle = { path = "../selection/packages/lazy-js-bundle" }
+
[profile.release]
opt-level = "z"
debug = false
diff --git a/component.json b/component.json
index c0986114..015c7262 100644
--- a/component.json
+++ b/component.json
@@ -5,6 +5,7 @@
"preview/src/components/tabs",
"preview/src/components/dropdown_menu",
"preview/src/components/navbar",
+ "preview/src/components/otp",
"preview/src/components/form",
"preview/src/components/tooltip",
"preview/src/components/calendar",
diff --git a/playwright/otp.spec.ts b/playwright/otp.spec.ts
new file mode 100644
index 00000000..46b08cbd
--- /dev/null
+++ b/playwright/otp.spec.ts
@@ -0,0 +1,328 @@
+import { test, expect, type Locator, type Page } from '@playwright/test';
+
+const previewUrl = process.env.PREVIEW_URL ?? 'http://127.0.0.1:8080';
+const otpUrl = new URL('/component/?name=otp&', previewUrl).toString();
+const nonAsciiOtpUrl = new URL('/component/?name=otp&variant=non_ascii&', previewUrl).toString();
+
+async function waitForOtpLayout(page: Page) {
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const frame = page.locator('#component-preview-frame').first();
+ await expect
+ .poll(async () => {
+ const [inputBox, frameBox] = await Promise.all([
+ input.boundingBox(),
+ frame.boundingBox(),
+ ]);
+
+ if (!inputBox || !frameBox) {
+ return false;
+ }
+
+ return (
+ inputBox.width < 400 &&
+ frameBox.width < 900 &&
+ inputBox.x >= frameBox.x &&
+ inputBox.x + inputBox.width <= frameBox.x + frameBox.width
+ );
+ })
+ .toBe(true);
+ await input.scrollIntoViewIfNeeded();
+ await expect(input).toBeInViewport();
+}
+
+function otpSlot(otp: Locator, index: number) {
+ return otp.locator('[data-empty]').nth(index);
+}
+
+test('otp typing, backspace, and rejection', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ await expect(input).toBeVisible();
+ await expect(input).toHaveCSS('opacity', '0');
+
+ await input.focus();
+ await page.keyboard.type('123456');
+ await expect(page.locator('#otp-value')).toHaveText('123456');
+
+ await page.keyboard.press('Backspace');
+ await expect(page.locator('#otp-value')).toHaveText('12345');
+
+ await page.keyboard.press('a');
+ await expect(page.locator('#otp-value')).toHaveText('12345');
+});
+
+test('otp cursor does not drift past typed length', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ await input.focus();
+ await page.keyboard.type('12');
+ // Three right-arrows from end should be no-ops — cursor is already at end.
+ await page.keyboard.press('ArrowRight');
+ await page.keyboard.press('ArrowRight');
+ await page.keyboard.press('ArrowRight');
+ // The next typed digit goes at position 2, not somewhere past it.
+ await page.keyboard.type('3');
+ await expect(page.locator('#otp-value')).toHaveText('123');
+});
+
+test('otp ArrowLeft replaces the active slot', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ await input.focus();
+ await page.keyboard.type('12');
+ await page.keyboard.press('ArrowLeft');
+ await page.keyboard.type('9');
+ await expect(page.locator('#otp-value')).toHaveText('19');
+});
+
+test('otp input events replace the active slot', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ await input.focus();
+ await page.keyboard.type('12');
+ await page.keyboard.press('ArrowLeft');
+
+ // insertText simulates paste / IME / on-screen-keyboard input without a
+ // keydown event for the inserted text.
+ await page.keyboard.insertText('9');
+ await page.keyboard.insertText('8');
+ await expect(page.locator('#otp-value')).toHaveText('198');
+});
+
+test('otp does not let the native input grow past maxlength', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ await input.focus();
+ await page.keyboard.type('1234567');
+ await expect(page.locator('#otp-value')).toHaveText('123457');
+ await expect(input).toHaveValue('123457');
+
+ await page.keyboard.press('Home');
+ await page.keyboard.type('9');
+ await expect(page.locator('#otp-value')).toHaveText('923457');
+ await expect(input).toHaveValue('923457');
+
+ await page.keyboard.press('End');
+ await page.keyboard.type('8');
+ await expect(page.locator('#otp-value')).toHaveText('923458');
+ await expect(input).toHaveValue('923458');
+});
+
+test('otp keeps visual focus visible at the end', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const otp = input.locator('xpath=..');
+ await input.focus();
+ await page.keyboard.type('123456');
+
+ await expect(otp.locator('[data-active="true"]')).toHaveCount(1);
+ await expect(otpSlot(otp, 5)).toHaveAttribute('data-active', 'true');
+
+ await page.keyboard.press('ArrowRight');
+ await page.keyboard.press('End');
+ await expect(otp.locator('[data-active="true"]')).toHaveCount(1);
+ await expect(otpSlot(otp, 5)).toHaveAttribute('data-active', 'true');
+ await expect(otpSlot(otp, 5)).toHaveCSS('border-left-width', '1px');
+ await expect(otpSlot(otp, 5)).toHaveCSS('border-left-style', 'solid');
+});
+
+test('otp renders its own selection highlight', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const otp = input.locator('xpath=..');
+ await input.focus();
+ await page.keyboard.type('123456');
+
+ await page.keyboard.press('ControlOrMeta+A');
+ await expect(otp.locator('[data-selected="true"]')).toHaveCount(6);
+
+ await page.keyboard.type('9');
+ await expect(page.locator('#otp-value')).toHaveText('9');
+ await expect(otp.locator('[data-selected="true"]')).toHaveCount(0);
+});
+
+test('otp pointer selection highlights slots', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const otp = input.locator('xpath=..');
+ await input.focus();
+ await page.keyboard.type('123456');
+ await input.evaluate((node: HTMLInputElement) => node.blur());
+ await expect(input).not.toBeFocused();
+ await waitForOtpLayout(page);
+
+ const start = await otpSlot(otp, 1).boundingBox();
+ const end = await otpSlot(otp, 4).boundingBox();
+ expect(start).not.toBeNull();
+ expect(end).not.toBeNull();
+
+ await page.mouse.move(start!.x + start!.width / 2 + 1, start!.y + start!.height / 2);
+ await page.mouse.down();
+ await page.mouse.move(end!.x + end!.width / 2 + 1, end!.y + end!.height / 2, { steps: 5 });
+ await page.mouse.up();
+
+ await expect(otp.locator('[data-selected="true"]')).toHaveCount(4);
+ await expect(otpSlot(otp, 1)).toHaveAttribute('data-selection-start', 'true');
+ await expect(otpSlot(otp, 4)).toHaveAttribute('data-selection-end', 'true');
+
+ await page.keyboard.type('9');
+ await expect(page.locator('#otp-value')).toHaveText('196');
+});
+
+test('otp backward pointer selection includes the slot under the pointer', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const otp = input.locator('xpath=..');
+ await input.focus();
+ await page.keyboard.type('123456');
+ await waitForOtpLayout(page);
+
+ const start = await otpSlot(otp, 4).boundingBox();
+ const end = await otpSlot(otp, 1).boundingBox();
+ expect(start).not.toBeNull();
+ expect(end).not.toBeNull();
+
+ await page.mouse.move(start!.x + start!.width / 2, start!.y + start!.height / 2);
+ await page.mouse.down();
+ await page.mouse.move(end!.x + end!.width / 2, end!.y + end!.height / 2, { steps: 5 });
+ await page.mouse.up();
+
+ await expect(otp.locator('[data-selected="true"]')).toHaveCount(4);
+ await expect(otpSlot(otp, 4)).toHaveAttribute('data-selected', 'true');
+ await expect(otpSlot(otp, 1)).toHaveAttribute('data-selection-start', 'true');
+ await expect(otpSlot(otp, 1)).toHaveCSS('border-left-width', '1px');
+ await expect(otpSlot(otp, 1)).toHaveCSS('border-left-style', 'solid');
+
+ await page.keyboard.type('9');
+ await expect(page.locator('#otp-value')).toHaveText('196');
+});
+
+test('otp copy cut and paste use the visible selection', async ({
+ page,
+ context,
+ browserName,
+}) => {
+ test.skip(browserName !== 'chromium', 'Clipboard permissions are Chromium-only in Playwright.');
+
+ await context.grantPermissions(['clipboard-read', 'clipboard-write']);
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const otp = input.locator('xpath=..');
+ await input.focus();
+ await page.keyboard.type('123456');
+
+ await page.keyboard.press('ControlOrMeta+A');
+ await expect(otp.locator('[data-selected="true"]')).toHaveCount(6);
+
+ await page.keyboard.press('ControlOrMeta+C');
+ await expect.poll(() => page.evaluate(() => navigator.clipboard.readText())).toBe('123456');
+
+ await page.evaluate(() => navigator.clipboard.writeText('98'));
+ await page.keyboard.press('ControlOrMeta+V');
+ await expect(page.locator('#otp-value')).toHaveText('98');
+
+ await page.keyboard.press('ControlOrMeta+A');
+ await page.keyboard.press('ControlOrMeta+X');
+ await expect.poll(() => page.evaluate(() => navigator.clipboard.readText())).toBe('98');
+ await expect(page.locator('#otp-value')).toHaveText('');
+});
+
+test('otp paste fills all slots', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ await input.focus();
+ // insertText simulates a paste / IME / on-screen-keyboard input event.
+ await page.keyboard.insertText('987654');
+ await expect(page.locator('#otp-value')).toHaveText('987654');
+});
+
+test('otp accepts emoji input in the non-ascii variant', async ({ page }) => {
+ await page.goto(nonAsciiOtpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'Emoji code' });
+ await expect(input).toBeVisible();
+ await input.focus();
+
+ for (const emoji of ['😀', '😃', '😄', '😁']) {
+ await page.keyboard.insertText(emoji);
+ }
+
+ const value = '😀😃😄😁';
+ await expect(page.locator('#otp-non-ascii-value')).toHaveText(value);
+ await expect(page.locator('#otp-non-ascii-complete')).toHaveText(value);
+ await expect(input).toHaveValue(value);
+});
+
+test('otp on_complete fires only when the value reaches maxlength', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const complete = page.locator('#otp-complete');
+
+ await input.focus();
+ await page.keyboard.type('12345');
+ await expect(page.locator('#otp-value')).toHaveText('12345');
+ await expect(complete).toHaveText('');
+
+ await page.keyboard.type('6');
+ await expect(complete).toHaveText('123456');
+
+ // Editing back below maxlength should not re-fire complete; the last value sticks.
+ await page.keyboard.press('Backspace');
+ await expect(page.locator('#otp-value')).toHaveText('12345');
+ await expect(complete).toHaveText('123456');
+});
+
+test('otp on_complete does not re-fire when editing a full buffer', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ const complete = page.locator('#otp-complete');
+
+ await input.focus();
+ await page.keyboard.type('123456');
+ await expect(complete).toHaveText('123456');
+
+ // Move into the full buffer and type. The keydown handler replaces the active
+ // slot, keeping length at maxlength but changing the value. This is
+ // NOT a transition to maxlength, so on_complete must not fire again.
+ await page.keyboard.press('Home');
+ await page.keyboard.press('9');
+ await expect(page.locator('#otp-value')).toHaveText('923456');
+ await expect(complete).toHaveText('123456');
+});
+
+test('otp disabled state blocks input', async ({ page }) => {
+ await page.goto(otpUrl, { timeout: 20 * 60 * 1000 });
+
+ const input = page.getByRole('textbox', { name: 'One-time password' });
+ await page
+ .locator('#otp-toggle-disabled')
+ .evaluate((node: HTMLButtonElement) => node.click());
+ await expect(input).toBeDisabled();
+
+ // Typing into a disabled input is a no-op in the browser.
+ await input.focus({ timeout: 1000 }).catch(() => { /* focus may be refused while disabled */ });
+ await page.keyboard.type('123');
+ await expect(page.locator('#otp-value')).toHaveText('');
+
+ // Re-enable and confirm input works again.
+ await page
+ .locator('#otp-toggle-disabled')
+ .evaluate((node: HTMLButtonElement) => node.click());
+ await expect(input).toBeEnabled();
+ await input.focus();
+ await page.keyboard.type('123');
+ await expect(page.locator('#otp-value')).toHaveText('123');
+});
diff --git a/preview/Cargo.toml b/preview/Cargo.toml
index 240a3afe..e58f3fd7 100644
--- a/preview/Cargo.toml
+++ b/preview/Cargo.toml
@@ -7,7 +7,7 @@ rust-version = "1.88.0"
[dependencies]
dioxus = { workspace = true, features = ["router"] }
dioxus-code = { version = "0.1.0", default-features = false, features = ["macro", "lang-css"] }
-dioxus-icons = "0.1.0"
+dioxus-icons = { git = "https://github.com/ealmloff/dioxus-icons", branch = "bump-dioxus" }
dioxus-primitives.workspace = true
dioxus-i18n = { git = "https://github.com/ealmloff/dioxus-i18n", branch = "bump-dioxus" }
palette = "0.7.6"
diff --git a/preview/src/components/mod.rs b/preview/src/components/mod.rs
index cad937b4..a70b6a11 100644
--- a/preview/src/components/mod.rs
+++ b/preview/src/components/mod.rs
@@ -193,6 +193,7 @@ examples!(
label,
menubar,
navbar,
+ otp[non_ascii],
pagination,
popover,
progress,
diff --git a/preview/src/components/otp/component.json b/preview/src/components/otp/component.json
new file mode 100644
index 00000000..a963a6b0
--- /dev/null
+++ b/preview/src/components/otp/component.json
@@ -0,0 +1,13 @@
+{
+ "name": "otp",
+ "description": "An accessible, composable one-time-password input.",
+ "authors": ["Evan Almloff"],
+ "exclude": ["variants", "docs.md", "component.json"],
+ "cargoDependencies": [
+ {
+ "name": "dioxus-primitives",
+ "git": "https://github.com/DioxusLabs/components"
+ }
+ ],
+ "globalAssets": ["../../../assets/dx-components-theme.css"]
+}
diff --git a/preview/src/components/otp/component.rs b/preview/src/components/otp/component.rs
new file mode 100644
index 00000000..20a82b75
--- /dev/null
+++ b/preview/src/components/otp/component.rs
@@ -0,0 +1,84 @@
+use dioxus::prelude::*;
+use dioxus_primitives::otp::{
+ self, OneTimePasswordGroupProps, OneTimePasswordInputProps, OneTimePasswordSeparatorProps,
+ OneTimePasswordSlotProps,
+};
+use dioxus_primitives::{dioxus_attributes::attributes, merge_attributes};
+
+#[css_module("/src/components/otp/style.css")]
+struct Styles;
+
+#[component]
+pub fn OneTimePasswordInput(props: OneTimePasswordInputProps) -> Element {
+ let base = attributes!(div { class: Styles::dx_otp });
+ let merged = merge_attributes(vec![base, props.attributes]);
+ rsx! {
+ otp::OneTimePasswordInput {
+ value: props.value,
+ default_value: props.default_value,
+ maxlength: props.maxlength,
+ inputmode: props.inputmode,
+ autocomplete: props.autocomplete,
+ disabled: props.disabled,
+ required: props.required,
+ name: props.name,
+ id: props.id,
+ aria_label: props.aria_label,
+ aria_labelledby: props.aria_labelledby,
+ validate: props.validate,
+ on_value_change: props.on_value_change,
+ on_complete: props.on_complete,
+ attributes: merged,
+ {props.children}
+ }
+ }
+}
+
+#[component]
+pub fn OneTimePasswordGroup(props: OneTimePasswordGroupProps) -> Element {
+ let base = attributes!(div { class: Styles::dx_otp_group });
+ let merged = merge_attributes(vec![base, props.attributes]);
+ rsx! {
+ otp::OneTimePasswordGroup {
+ attributes: merged,
+ {props.children}
+ }
+ }
+}
+
+#[component]
+pub fn OneTimePasswordSlot(props: OneTimePasswordSlotProps) -> Element {
+ let base = attributes!(div { class: Styles::dx_otp_slot });
+ let merged = merge_attributes(vec![base, props.attributes]);
+ rsx! {
+ otp::OneTimePasswordSlot {
+ index: props.index,
+ attributes: merged,
+ span { class: Styles::dx_otp_caret, aria_hidden: "true" }
+ {props.children}
+ }
+ }
+}
+
+#[component]
+pub fn OneTimePasswordSeparator(props: OneTimePasswordSeparatorProps) -> Element {
+ let base = attributes!(div { class: Styles::dx_otp_separator });
+ let merged = merge_attributes(vec![base, props.attributes]);
+ rsx! {
+ otp::OneTimePasswordSeparator {
+ attributes: merged,
+ svg {
+ width: "10",
+ height: "10",
+ view_box: "0 0 24 24",
+ fill: "none",
+ stroke: "currentColor",
+ stroke_width: "2",
+ stroke_linecap: "round",
+ stroke_linejoin: "round",
+ line { x1: "5", y1: "12", x2: "19", y2: "12" }
+ }
+ {props.children}
+ }
+ }
+}
diff --git a/preview/src/components/otp/docs.md b/preview/src/components/otp/docs.md
new file mode 100644
index 00000000..9eba1512
--- /dev/null
+++ b/preview/src/components/otp/docs.md
@@ -0,0 +1,30 @@
+The OneTimePasswordInput component is used to capture a short code (typically a 6-digit
+authentication code) into a row of discrete slots. It is built on a single accessible
+`` element so paste, browser autofill (`autocomplete="one-time-code"`), IME
+composition, and screen readers all continue to work.
+
+## Component Structure
+
+```rust
+// The wrapper holds the hidden input and provides shared state to all slots.
+OneTimePasswordInput {
+ maxlength: 6,
+ aria_label: "One-time password",
+ // Reject anything that isn't a digit (paste, autofill, and keystrokes).
+ validate: |s: String| s.chars().all(|c| c.is_ascii_digit()),
+ // A visual grouping of contiguous slots.
+ OneTimePasswordGroup {
+ // Each slot displays the character at its `index`.
+ OneTimePasswordSlot { index: 0 }
+ OneTimePasswordSlot { index: 1 }
+ OneTimePasswordSlot { index: 2 }
+ }
+ // Decorative separator placed between groups.
+ OneTimePasswordSeparator {}
+ OneTimePasswordGroup {
+ OneTimePasswordSlot { index: 3 }
+ OneTimePasswordSlot { index: 4 }
+ OneTimePasswordSlot { index: 5 }
+ }
+}
+```
diff --git a/preview/src/components/otp/mod.rs b/preview/src/components/otp/mod.rs
new file mode 100644
index 00000000..2590c013
--- /dev/null
+++ b/preview/src/components/otp/mod.rs
@@ -0,0 +1,2 @@
+mod component;
+pub use component::*;
diff --git a/preview/src/components/otp/style.css b/preview/src/components/otp/style.css
new file mode 100644
index 00000000..9509fa9a
--- /dev/null
+++ b/preview/src/components/otp/style.css
@@ -0,0 +1,123 @@
+.dx-otp {
+ display: flex;
+ width: fit-content;
+ align-items: center;
+ font-family: inherit;
+ gap: 0.5rem;
+}
+
+.dx-otp[data-disabled="true"] {
+ cursor: not-allowed;
+ opacity: 0.5;
+}
+
+.dx-otp[data-disabled="true"] input {
+ cursor: not-allowed;
+}
+
+.dx-otp-group {
+ display: flex;
+ align-items: center;
+}
+
+.dx-otp-slot {
+ position: relative;
+ display: flex;
+ width: 2.25rem;
+ height: 2.25rem;
+ box-sizing: border-box;
+ align-items: center;
+ justify-content: center;
+ border-top: 1px solid var(--primary-color-7);
+ border-right: 1px solid var(--primary-color-7);
+ border-bottom: 1px solid var(--primary-color-7);
+ background-color: var(--light, var(--primary-color))
+ var(--dark, color-mix(in oklab, var(--primary-color-7) 30%, transparent));
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);
+ color: var(--secondary-color-1);
+ font-size: 0.875rem;
+ font-variant-numeric: tabular-nums;
+ font-weight: 500;
+ line-height: 1.25rem;
+ outline: none;
+ transition: color 100ms ease-out, background-color 100ms ease-out,
+ border-color 100ms ease-out, box-shadow 100ms ease-out;
+}
+
+.dx-otp-group .dx-otp-slot:first-child {
+ border-left: 1px solid var(--primary-color-7);
+ border-bottom-left-radius: 0.375rem;
+ border-top-left-radius: 0.375rem;
+}
+
+.dx-otp-group .dx-otp-slot:last-child {
+ border-bottom-right-radius: 0.375rem;
+ border-top-right-radius: 0.375rem;
+}
+
+.dx-otp-group .dx-otp-slot[data-active="true"] {
+ z-index: 10;
+ border-color: var(--focused-border-color);
+ border-left: 1px solid var(--focused-border-color);
+ box-shadow: 0 0 0 2px var(--focused-border-color);
+}
+
+.dx-otp-group .dx-otp-slot[data-selected="true"] {
+ z-index: 5;
+ border-color: var(--focused-border-color);
+ border-left: 1px solid var(--focused-border-color);
+ background-color: color-mix(in oklab, var(--focused-border-color) 24%, transparent);
+ color: var(--secondary-color-1);
+}
+
+.dx-otp-group .dx-otp-slot[data-selection-start="true"] {
+ border-left: 1px solid var(--focused-border-color);
+}
+
+/* Fake blinking caret — only visible in the active, empty slot */
+.dx-otp-caret {
+ position: absolute;
+ display: none;
+ align-items: center;
+ justify-content: center;
+ inset: 0;
+ pointer-events: none;
+}
+
+.dx-otp-caret::after {
+ display: block;
+ width: 1px;
+ height: 1rem;
+ animation: dx-otp-caret-blink 1s ease-out infinite;
+ background-color: var(--secondary-color-1);
+ content: "";
+}
+
+.dx-otp-slot[data-active="true"][data-empty="true"] .dx-otp-caret {
+ display: flex;
+}
+
+.dx-otp-slot[data-selected="true"] .dx-otp-caret {
+ display: none;
+}
+
+@keyframes dx-otp-caret-blink {
+ 0%,
+ 70%,
+ 100% {
+ opacity: 1;
+ }
+
+ 20%,
+ 50% {
+ opacity: 0;
+ }
+}
+
+.dx-otp-separator {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--secondary-color-4);
+ pointer-events: none;
+}
diff --git a/preview/src/components/otp/variants/main/mod.rs b/preview/src/components/otp/variants/main/mod.rs
new file mode 100644
index 00000000..130edf6c
--- /dev/null
+++ b/preview/src/components/otp/variants/main/mod.rs
@@ -0,0 +1,44 @@
+use super::super::component::*;
+use dioxus::prelude::*;
+
+#[component]
+pub fn Demo() -> Element {
+ let mut value = use_signal(String::new);
+ let mut last_complete = use_signal(String::new);
+ let mut disabled = use_signal(|| false);
+
+ rsx! {
+ div { style: "position: relative; display: inline-flex; align-items: center; justify-content: center;",
+ OneTimePasswordInput {
+ maxlength: 6usize,
+ value: value(),
+ disabled: disabled(),
+ validate: |s: String| s.chars().all(|c| c.is_ascii_digit()),
+ on_value_change: move |v| value.set(v),
+ on_complete: move |v| last_complete.set(v),
+ aria_label: "One-time password",
+ OneTimePasswordGroup {
+ OneTimePasswordSlot { index: 0usize }
+ OneTimePasswordSlot { index: 1usize }
+ OneTimePasswordSlot { index: 2usize }
+ }
+ OneTimePasswordSeparator {}
+ OneTimePasswordGroup {
+ OneTimePasswordSlot { index: 3usize }
+ OneTimePasswordSlot { index: 4usize }
+ OneTimePasswordSlot { index: 5usize }
+ }
+ }
+ div { style: "display: none;",
+ span { id: "otp-value", "{value}" }
+ span { id: "otp-complete", "{last_complete}" }
+ button {
+ id: "otp-toggle-disabled",
+ r#type: "button",
+ onclick: move |_| disabled.toggle(),
+ "toggle disabled"
+ }
+ }
+ }
+ }
+}
diff --git a/preview/src/components/otp/variants/non_ascii/mod.rs b/preview/src/components/otp/variants/non_ascii/mod.rs
new file mode 100644
index 00000000..707230d7
--- /dev/null
+++ b/preview/src/components/otp/variants/non_ascii/mod.rs
@@ -0,0 +1,43 @@
+use super::super::component::*;
+use dioxus::prelude::*;
+
+#[component]
+pub fn Demo() -> Element {
+ let mut value = use_signal(String::new);
+ let mut last_complete = use_signal(String::new);
+
+ rsx! {
+ div {
+ style: "display: grid; gap: 0.75rem; justify-items: center;",
+ p {
+ style: "margin: 0; color: var(--secondary-color-2); font-size: 0.875rem; font-weight: 500;",
+ "Emoji code"
+ }
+ OneTimePasswordInput {
+ maxlength: 4usize,
+ value: value(),
+ inputmode: "text",
+ autocomplete: "off",
+ validate: |s: String| s.chars().all(|c| !c.is_ascii()),
+ on_value_change: move |v| value.set(v),
+ on_complete: move |v| last_complete.set(v),
+ aria_label: "Emoji code",
+ OneTimePasswordGroup {
+ OneTimePasswordSlot { index: 0usize }
+ OneTimePasswordSlot { index: 1usize }
+ OneTimePasswordSlot { index: 2usize }
+ OneTimePasswordSlot { index: 3usize }
+ }
+ }
+ output {
+ id: "otp-non-ascii-value",
+ aria_live: "polite",
+ style: "min-height: 1.25rem; color: var(--secondary-color-1); font-size: 1rem;",
+ "{value}"
+ }
+ div { style: "display: none;",
+ span { id: "otp-non-ascii-complete", "{last_complete}" }
+ }
+ }
+ }
+}
diff --git a/preview/src/dashboard/views/email_client/state.rs b/preview/src/dashboard/views/email_client/state.rs
index 54726730..9a23cbd3 100644
--- a/preview/src/dashboard/views/email_client/state.rs
+++ b/preview/src/dashboard/views/email_client/state.rs
@@ -50,9 +50,9 @@ impl EmailClientState {
}
}
-#[store(pub)]
+#[store(pub(super))]
impl Store {
- fn active_folder_label(&self) -> &'static str {
+ pub(super) fn active_folder_label(&self) -> &'static str {
let active_folder = self.active_folder().cloned();
FOLDERS
.iter()
@@ -61,7 +61,7 @@ impl Store {
.unwrap_or("Inbox")
}
- fn visible_message_ids(&self) -> Vec {
+ pub(super) fn visible_message_ids(&self) -> Vec {
let active_folder = self.active_folder().cloned();
let active_tab = self.active_tab().cloned();
let search_query = self.search_query().cloned();
@@ -88,7 +88,7 @@ impl Store {
.collect()
}
- fn selected_message_uid(&self, visible_ids: &[String]) -> Option {
+ pub(super) fn selected_message_uid(&self, visible_ids: &[String]) -> Option {
let selected_id = self.selected_id().cloned();
if visible_ids.iter().any(|uid| uid == &selected_id) {
return Some(selected_id);
@@ -97,7 +97,11 @@ impl Store {
visible_ids.first().cloned()
}
- fn selected_message_index(&self, selected_uid: Option<&str>, visible_ids: &[String]) -> usize {
+ pub(super) fn selected_message_index(
+ &self,
+ selected_uid: Option<&str>,
+ visible_ids: &[String],
+ ) -> usize {
selected_uid
.and_then(|selected_uid| {
visible_ids
@@ -108,7 +112,7 @@ impl Store {
.unwrap_or(0)
}
- fn folder_count(&self, folder_id: FolderId) -> u32 {
+ pub(super) fn folder_count(&self, folder_id: FolderId) -> u32 {
let messages_store = self.messages();
let count = messages_store
.read()
@@ -118,7 +122,12 @@ impl Store {
count
}
- fn tab_count(&self, tab_id: TabId, visible_query: &str, selected_tags: &[MessageTag]) -> u32 {
+ pub(super) fn tab_count(
+ &self,
+ tab_id: TabId,
+ visible_query: &str,
+ selected_tags: &[MessageTag],
+ ) -> u32 {
let active_folder = self.active_folder().cloned();
let messages_store = self.messages();
let count = messages_store
@@ -137,63 +146,63 @@ impl Store {
count
}
- fn set_active_folder(&mut self, folder_id: FolderId) {
+ pub(super) fn set_active_folder(&mut self, folder_id: FolderId) {
self.active_folder().set(folder_id);
self.close_read_pane();
}
- fn set_active_tab(&mut self, tab_id: TabId) {
+ pub(super) fn set_active_tab(&mut self, tab_id: TabId) {
self.active_tab().set(tab_id);
self.close_read_pane();
}
- fn set_search_query(&mut self, query: String) {
+ pub(super) fn set_search_query(&mut self, query: String) {
self.search_query().set(query);
self.close_read_pane();
}
- fn set_selected_tags(&mut self, tags: Vec) {
+ pub(super) fn set_selected_tags(&mut self, tags: Vec) {
self.selected_tags().set(tags);
self.close_read_pane();
}
- fn select_message(&mut self, uid: String) {
+ pub(super) fn select_message(&mut self, uid: String) {
self.selected_id().set(uid);
self.read_open().set(true);
}
- fn close_read_pane(&mut self) {
+ pub(super) fn close_read_pane(&mut self) {
self.read_open().set(false);
}
- fn open_compose(&mut self) {
+ pub(super) fn open_compose(&mut self) {
self.compose_open().set(true);
}
- fn set_compose_open(&mut self, open: bool) {
+ pub(super) fn set_compose_open(&mut self, open: bool) {
self.compose_open().set(open);
}
- fn discard_compose(&mut self) {
+ pub(super) fn discard_compose(&mut self) {
self.compose_open().set(false);
self.compose_to().set(String::new());
self.compose_subject().set(String::new());
self.compose_body().set(String::new());
}
- fn set_compose_to(&mut self, value: String) {
+ pub(super) fn set_compose_to(&mut self, value: String) {
self.compose_to().set(value);
}
- fn set_compose_subject(&mut self, value: String) {
+ pub(super) fn set_compose_subject(&mut self, value: String) {
self.compose_subject().set(value);
}
- fn set_compose_body(&mut self, value: String) {
+ pub(super) fn set_compose_body(&mut self, value: String) {
self.compose_body().set(value);
}
- fn archive_message(&mut self, uid: String) {
+ pub(super) fn archive_message(&mut self, uid: String) {
self.update_message(uid.clone(), |message| {
message.folder_id = FolderId::Archive;
message.unread = false;
@@ -201,14 +210,14 @@ impl Store {
self.close_if_selected(&uid);
}
- fn snooze_message(&mut self, uid: String) {
+ pub(super) fn snooze_message(&mut self, uid: String) {
self.update_message(uid.clone(), |message| {
message.snoozed = true;
});
self.close_if_selected(&uid);
}
- fn delete_message(&mut self, uid: String) {
+ pub(super) fn delete_message(&mut self, uid: String) {
self.update_message(uid.clone(), |message| {
message.folder_id = FolderId::Trash;
message.unread = false;
@@ -216,45 +225,45 @@ impl Store {
self.close_if_selected(&uid);
}
- fn toggle_message_flag(&mut self, uid: String) {
+ pub(super) fn toggle_message_flag(&mut self, uid: String) {
self.update_message(uid, |message| {
message.flagged = !message.flagged;
});
}
- fn toggle_message_star(&mut self, uid: String) {
+ pub(super) fn toggle_message_star(&mut self, uid: String) {
self.update_message(uid, |message| {
message.starred = !message.starred;
});
}
- fn move_message_to_trash(&mut self, uid: String) {
+ pub(super) fn move_message_to_trash(&mut self, uid: String) {
self.update_message(uid.clone(), |message| {
message.folder_id = FolderId::Trash;
});
self.close_if_selected(&uid);
}
- fn remove_message_tag(&mut self, uid: String, tag: MessageTag) {
+ pub(super) fn remove_message_tag(&mut self, uid: String, tag: MessageTag) {
self.update_message(uid, |message| {
message.tags.retain(|current| *current != tag);
});
}
- fn set_message_tags(&mut self, uid: String, tags: Vec) {
+ pub(super) fn set_message_tags(&mut self, uid: String, tags: Vec) {
self.update_message(uid, |message| {
message.tags = tags;
});
}
- fn update_message(&mut self, uid: String, update: impl FnOnce(&mut MessageState)) {
+ pub(super) fn update_message(&mut self, uid: String, update: impl FnOnce(&mut MessageState)) {
if let Some(mut message) = self.messages().get(uid) {
let mut message = message.write();
update(&mut message);
}
}
- fn close_if_selected(&mut self, uid: &str) {
+ pub(super) fn close_if_selected(&mut self, uid: &str) {
if self.selected_id().cloned() == uid {
self.close_read_pane();
}
diff --git a/preview/src/main.rs b/preview/src/main.rs
index c5fb6f40..990f5516 100644
--- a/preview/src/main.rs
+++ b/preview/src/main.rs
@@ -1,3 +1,5 @@
+#![allow(unpredictable_function_pointer_comparisons)]
+
use crate::components::{
avatar::{AvatarImageSize, ImageAvatar},
badge::{Badge, BadgeVariant, VerifiedIcon},
@@ -11,6 +13,9 @@ use crate::components::{
Item, ItemContent, ItemDescription, ItemMedia, ItemMediaVariant, ItemTitle, ItemVariant,
},
label::Label,
+ otp::{
+ OneTimePasswordGroup, OneTimePasswordInput, OneTimePasswordSeparator, OneTimePasswordSlot,
+ },
progress::Progress,
radio_group::{RadioGroup, RadioItem},
slider::Slider,
@@ -24,8 +29,8 @@ use dioxus::prelude::{dioxus_router::LinkProps, *};
use dioxus_code::{advanced::HighlightedSource, Code, CodeTheme, Theme};
use dioxus_i18n::prelude::{use_init_i18n, I18nConfig};
use dioxus_icons::lucide::{
- ArrowRight, ArrowUpRight, Check, ChevronDown, ChevronLeft, Copy, ExternalLink, Mail, Menu,
- Pause, Play, SkipBack, SkipForward, X,
+ ArrowRight, ArrowUpRight, Check, ChevronDown, ChevronLeft, Copy, ExternalLink, KeyRound, Mail,
+ Menu, Pause, Play, ShieldCheck, SkipBack, SkipForward, X,
};
use std::str::FromStr;
use strum::{Display, EnumIter, EnumString, IntoEnumIterator};
@@ -54,7 +59,6 @@ struct ComponentDemoData {
variants: &'static [ComponentVariantDemoData],
}
-#[allow(unpredictable_function_pointer_comparisons)]
#[derive(Clone, PartialEq)]
struct ComponentVariantDemoData {
name: &'static str,
@@ -1200,6 +1204,10 @@ const BLOCKS: &[MasonryEntry] = &[
component: BlockStats,
popout: false,
},
+ MasonryEntry {
+ component: BlockOtp,
+ popout: false,
+ },
MasonryEntry {
component: BlockInbox,
popout: false,
@@ -1266,7 +1274,6 @@ fn WidgetMasonry() -> Element {
}
}
-#[allow(unpredictable_function_pointer_comparisons)]
#[component]
fn MasonryCard(component: fn() -> Element, #[props(default)] popout: bool) -> Element {
let Comp = component;
@@ -1377,6 +1384,66 @@ fn BlockStats() -> Element {
}
}
+#[component]
+fn BlockOtp() -> Element {
+ let mut value = use_signal(String::new);
+ let mut last_complete = use_signal(String::new);
+ let is_complete = value.read().chars().count() == 6;
+
+ rsx! {
+ div { style: "display: grid; gap: 1rem;",
+ div { style: "display: grid; align-items: center; gap: 0.75rem; grid-template-columns: auto minmax(0, 1fr) auto;",
+ div { style: "display: flex; width: 2.25rem; height: 2.25rem; align-items: center; justify-content: center; border: 1px solid var(--primary-color-6); border-radius: 0.5rem; background: var(--primary-color-2); color: var(--highlight-color-tertiary);",
+ ShieldCheck { size: 20, stroke_width: "1.75" }
+ }
+ div { style: "min-width: 0;",
+ h3 { style: "margin: 0; color: var(--secondary-color-3); font-size: 1rem; font-weight: 660; line-height: 1.25;",
+ "Verification"
+ }
+ p { style: "margin: 0; color: var(--secondary-color-5); font-size: 0.85rem; line-height: 1.4;",
+ "Enter the 6-digit code"
+ }
+ }
+ span {
+ style: if is_complete {
+ "display: inline-flex; min-width: 4.75rem; justify-content: center; padding: 0.25rem 0.5rem; border: 1px solid color-mix(in oklab, var(--secondary-success-color) 35%, var(--primary-color-6)); border-radius: 999px; background: color-mix(in oklab, var(--secondary-success-color) 14%, transparent); color: var(--secondary-success-color); font-size: 0.75rem; font-weight: 600; line-height: 1;"
+ } else {
+ "display: inline-flex; min-width: 4.75rem; justify-content: center; padding: 0.25rem 0.5rem; border: 1px solid var(--primary-color-6); border-radius: 999px; background: var(--primary-color-2); color: var(--secondary-color-5); font-size: 0.75rem; font-weight: 600; line-height: 1;"
+ },
+ if is_complete { "Complete" } else { "Pending" }
+ }
+ }
+
+ div { style: "display: grid; gap: 0.5rem; justify-items: start;",
+ label { r#for: "masonry-otp-input", style: "display: inline-flex; align-items: center; color: var(--secondary-color-4); font-size: 0.8rem; font-weight: 600; gap: 0.375rem; line-height: 1.25;",
+ KeyRound { size: 14, stroke_width: "1.75" }
+ "Security code"
+ }
+ OneTimePasswordInput {
+ id: "masonry-otp-input",
+ maxlength: 6usize,
+ value: value(),
+ validate: |s: String| s.chars().all(|c| c.is_ascii_digit()),
+ on_value_change: move |v| value.set(v),
+ on_complete: move |v| last_complete.set(v),
+ aria_label: "Verification code",
+ OneTimePasswordGroup {
+ OneTimePasswordSlot { index: 0usize }
+ OneTimePasswordSlot { index: 1usize }
+ OneTimePasswordSlot { index: 2usize }
+ }
+ OneTimePasswordSeparator {}
+ OneTimePasswordGroup {
+ OneTimePasswordSlot { index: 3usize }
+ OneTimePasswordSlot { index: 4usize }
+ OneTimePasswordSlot { index: 5usize }
+ }
+ }
+ }
+ }
+ }
+}
+
#[component]
fn BlockNotifications() -> Element {
rsx! {
diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs
index facfc1e6..17f2f18a 100644
--- a/primitives/src/lib.rs
+++ b/primitives/src/lib.rs
@@ -35,6 +35,7 @@ pub mod menubar;
mod move_interaction;
#[cfg(feature = "router")]
pub mod navbar;
+pub mod otp;
mod pointer;
pub mod popover;
mod portal;
diff --git a/primitives/src/otp/components/group.rs b/primitives/src/otp/components/group.rs
new file mode 100644
index 00000000..9d6f0b02
--- /dev/null
+++ b/primitives/src/otp/components/group.rs
@@ -0,0 +1,27 @@
+use dioxus::prelude::*;
+
+/// The props for the [`OneTimePasswordGroup`] component.
+#[derive(Props, Clone, PartialEq)]
+pub struct OneTimePasswordGroupProps {
+ /// Additional attributes applied to the group element.
+ #[props(extends = GlobalAttributes)]
+ pub attributes: Vec,
+
+ /// The slots inside the group.
+ pub children: Element,
+}
+
+/// # OneTimePasswordGroup
+///
+/// A visual grouping of [`super::OneTimePasswordSlot`]s. Used to render contiguous slots
+/// separated by [`super::OneTimePasswordSeparator`]s.
+#[component]
+pub fn OneTimePasswordGroup(props: OneTimePasswordGroupProps) -> Element {
+ rsx! {
+ div {
+ role: "presentation",
+ ..props.attributes,
+ {props.children}
+ }
+ }
+}
diff --git a/primitives/src/otp/components/input.rs b/primitives/src/otp/components/input.rs
new file mode 100644
index 00000000..c1bbb636
--- /dev/null
+++ b/primitives/src/otp/components/input.rs
@@ -0,0 +1,922 @@
+use super::super::context::OtpCtx;
+use crate::{use_controlled, use_id_or, use_unique_id};
+use dioxus::prelude::*;
+use std::ops::Range;
+
+fn selection_range_for(anchor: usize, focus: usize, len: usize) -> Option> {
+ let start = anchor.min(focus).min(len);
+ let end = anchor.max(focus).min(len);
+
+ (start < end).then_some(start..end)
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+struct InputValueChange {
+ value: String,
+ cursor: usize,
+ changed: bool,
+}
+
+impl InputValueChange {
+ fn from_raw_input(
+ current_value: &str,
+ raw_value: &str,
+ max: usize,
+ cursor: usize,
+ selected_range: Option>,
+ ) -> Self {
+ if max == 0 {
+ return Self {
+ value: String::new(),
+ cursor: 0,
+ changed: false,
+ };
+ }
+
+ let current_chars: Vec = current_value.chars().collect();
+ let raw_chars_full: Vec = raw_value.chars().collect();
+ let current_len = current_chars.len();
+ let cursor = cursor.min(current_len);
+
+ // Typing one character at the end of a full buffer replaces the last slot.
+ // The native input has no maxlength attribute, so it lets the value grow by
+ // one; we splice the overflow char into the last slot to match input-otp's
+ // "type past the end to overwrite the last digit" behavior.
+ if selected_range.is_none()
+ && current_len == max
+ && raw_chars_full.len() == current_len + 1
+ && cursor == max
+ && raw_chars_full[..max] == current_chars[..]
+ {
+ let mut next_chars = current_chars.clone();
+ next_chars[max - 1] = raw_chars_full[max];
+ let next: String = next_chars.into_iter().collect();
+ return Self {
+ value: next,
+ cursor: max,
+ changed: true,
+ };
+ }
+
+ let raw_chars: Vec = raw_chars_full.into_iter().take(max).collect();
+ let range = edit_range_for_entry(cursor, current_len, max, selected_range.clone());
+ let (next_chars, next_cursor) = if selected_range.is_none() && !range.is_empty() {
+ if let Some(inserted_chars) =
+ inserted_chars_at_cursor(¤t_chars, &raw_chars, cursor)
+ {
+ let mut replaced_chars = current_chars.clone();
+ replaced_chars.splice(range.start..range.end, inserted_chars.iter().copied());
+ replaced_chars.truncate(max);
+ let next_cursor = (range.start + inserted_chars.len()).min(replaced_chars.len());
+ (replaced_chars, next_cursor)
+ } else {
+ let next_cursor = raw_value_cursor(¤t_chars, &raw_chars, range, current_len);
+ (raw_chars, next_cursor)
+ }
+ } else {
+ let next_cursor = raw_value_cursor(¤t_chars, &raw_chars, range, current_len);
+ (raw_chars, next_cursor)
+ };
+ let next: String = next_chars.into_iter().collect();
+ let changed = next != current_value;
+
+ Self {
+ value: next,
+ cursor: next_cursor,
+ changed,
+ }
+ }
+}
+
+fn edit_range_for_entry(
+ cursor: usize,
+ len: usize,
+ max: usize,
+ selected_range: Option>,
+) -> Range {
+ if let Some(range) = selected_range {
+ return range.start.min(len)..range.end.min(len);
+ }
+
+ let cursor = cursor.min(len);
+ if len == 0 || cursor == len && len < max {
+ cursor..cursor
+ } else {
+ let start = cursor.min(len.saturating_sub(1));
+ start..(start + 1).min(len)
+ }
+}
+
+fn inserted_chars_at_cursor(
+ current_chars: &[char],
+ raw_chars: &[char],
+ cursor: usize,
+) -> Option> {
+ if raw_chars.len() <= current_chars.len() || cursor > current_chars.len() {
+ return None;
+ }
+
+ let inserted_len = raw_chars.len() - current_chars.len();
+ if cursor + inserted_len > raw_chars.len()
+ || raw_chars[..cursor] != current_chars[..cursor]
+ || raw_chars[cursor + inserted_len..] != current_chars[cursor..]
+ {
+ return None;
+ }
+
+ Some(raw_chars[cursor..cursor + inserted_len].to_vec())
+}
+
+fn raw_value_cursor(
+ current_chars: &[char],
+ next_chars: &[char],
+ range: Range,
+ current_len: usize,
+) -> usize {
+ let replaced_len = range.len();
+ let base_len = current_len.saturating_sub(replaced_len);
+ if next_chars.len() >= base_len {
+ (range.start + next_chars.len().saturating_sub(base_len)).min(next_chars.len())
+ } else {
+ current_chars
+ .iter()
+ .zip(next_chars)
+ .take_while(|(a, b)| a == b)
+ .count()
+ }
+}
+
+fn utf16_offset_for_char(value: &str, index: usize) -> usize {
+ value
+ .chars()
+ .take(index)
+ .map(char::len_utf16)
+ .sum::()
+}
+
+fn char_index_for_utf16(value: &str, utf16_offset: usize) -> usize {
+ let mut acc = 0;
+ let mut char_count = 0;
+ for c in value.chars() {
+ if acc >= utf16_offset {
+ return char_count;
+ }
+ let next = acc + c.len_utf16();
+ if next > utf16_offset {
+ return char_count;
+ }
+ acc = next;
+ char_count += 1;
+ }
+ char_count
+}
+
+fn active_slot_index(cursor: usize, len: usize, max: usize) -> Option {
+ if max == 0 {
+ return None;
+ }
+
+ Some(cursor.min(len).min(max - 1))
+}
+
+fn slot_selection_range(anchor_slot: usize, focus_slot: usize, len: usize) -> Option> {
+ if len == 0 {
+ return None;
+ }
+
+ let anchor_slot = anchor_slot.min(len - 1);
+ let focus_slot = focus_slot.min(len - 1);
+ let start = anchor_slot.min(focus_slot);
+ let end = anchor_slot.max(focus_slot) + 1;
+
+ Some(start..end.min(len))
+}
+
+fn slot_selection_focus_cursor(anchor_slot: usize, focus_slot: usize, len: usize) -> usize {
+ if len == 0 {
+ return 0;
+ }
+
+ if focus_slot < anchor_slot {
+ focus_slot.min(len)
+ } else {
+ (focus_slot + 1).min(len)
+ }
+}
+
+fn apply_value_change(
+ current_value: &str,
+ next_value: String,
+ max: usize,
+ set_value: Callback,
+ on_complete: Callback,
+) {
+ let old_len = current_value.chars().count();
+ let len = next_value.chars().count();
+
+ if next_value != current_value {
+ set_value.call(next_value.clone());
+ if old_len < max && len == max {
+ on_complete.call(next_value);
+ }
+ }
+}
+
+fn focus_input(input_id: String) {
+ spawn(async move {
+ let eval = document::eval(
+ r#"
+ const id = await dioxus.recv();
+ const input = document.getElementById(id);
+
+ if (input && input.focus) {
+ input.focus({ preventScroll: true });
+ }
+ "#,
+ );
+ let _ = eval.send(input_id);
+ });
+}
+
+fn selection_direction_for_dom(direction: SelectionDirection) -> &'static str {
+ match direction {
+ SelectionDirection::Forward => "forward",
+ SelectionDirection::Backward => "backward",
+ SelectionDirection::None => "none",
+ }
+}
+
+/// Read the native input's selection from Dioxus selection event data and push
+/// it into `cursor` / `selection_range` / `selection_direction`.
+///
+/// Returned callback is meant to be wired to the input's selection-related
+/// event handlers (`onselect`, `onselectionchange`) so we treat the native
+/// input as the source of truth for keyboard selection inside it.
+fn use_native_selection_sync(
+ value: Memo,
+ mut cursor: Signal,
+ mut selection_range: Signal