From eb4fbb0a339cbdb339adfc98220dc41a467d4f78 Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Tue, 20 Oct 2026 09:58:26 +0700 Subject: [PATCH 1/6] chore: update deps --- Cargo.lock | 963 +++++++++-------------------- Cargo.toml | 10 +- crates/dock/src/dock_area.rs | 3 +- crates/signed_state/src/backend.rs | 23 +- 4 files changed, 304 insertions(+), 695 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0d0ab3..1ad687b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -176,9 +176,9 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.16" +version = "0.12.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" +checksum = "b2a5b0a5ab8561c603f16c3b78c24a386b1f70e7fc1b1b1e8c15738828e4a176" dependencies = [ "anstyle", "memchr", @@ -199,15 +199,15 @@ checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +checksum = "3bc62ac97cc33321f50863d514c3bc38a453947a8f9e781137e47c7401020aed" [[package]] name = "arc-swap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +checksum = "380962b3d93b99642e50b9febf72c071e97e8b32d86eae9cf4ef582bb960ae6e" dependencies = [ "rustversion", ] @@ -318,18 +318,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-compression" -version = "0.4.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee19bd99b43e3691acbad4e840420a4881cea6c0b66a208125a824f8fd53f5a1" -dependencies = [ - "compression-codecs", - "compression-core", - "futures-io", - "pin-project-lite", -] - [[package]] name = "async-executor" version = "1.14.0" @@ -421,7 +409,7 @@ checksum = "4f8abc12baad266b1c8cec146854c195b5864b4221d4b2ca7296a7ae82d9e451" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -456,13 +444,13 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "async-utility" version = "0.3.2" -source = "git+https://github.com/yukibtc/async-utility?rev=7d3a79983d0e848aafed9d321637af7334e01349#7d3a79983d0e848aafed9d321637af7334e01349" +source = "git+https://github.com/yukibtc/async-utility?rev=b323ae0c1c1424b78bf8bb8832b95e86771f1dee#b323ae0c1c1424b78bf8bb8832b95e86771f1dee" dependencies = [ "futures-util", "gloo-timers", @@ -574,7 +562,7 @@ dependencies = [ "anyhow", "arrayvec", "log", - "nom 8.0.0", + "nom", "num-rational", "v_frame", ] @@ -590,9 +578,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.18.1" +version = "1.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" +checksum = "faac5829c2b74c28f830747e7818ccfb684261b5f48a1118b1e2a13d36dfab13" dependencies = [ "aws-lc-sys", "zeroize", @@ -600,9 +588,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" +checksum = "f1622d8446a2d4b2ce0c7eefc73dd43a99779028d5ee5c2dd8073a658ba8a2bc" dependencies = [ "cc", "cmake", @@ -650,26 +638,6 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efbd3e1070bbdf4cd88a75264e18e8a26f7cb5c6949eadf0ceb85fb159cf08f8" -[[package]] -name = "bindgen" -version = "0.72.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" -dependencies = [ - "bitflags 2.13.2", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.3", - "shlex 1.3.0", - "syn 2.0.119", -] - [[package]] name = "bip39" version = "2.2.2" @@ -681,15 +649,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec 0.8.0", -] - [[package]] name = "bit-set" version = "0.9.1" @@ -700,10 +659,13 @@ dependencies = [ ] [[package]] -name = "bit-vec" -version = "0.8.0" +name = "bit-set" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "56d87354e4229f54a44f7bf2435906a4656dba36026ab6eaca629a2c436a691c" +dependencies = [ + "bit-vec 0.10.1", +] [[package]] name = "bit-vec" @@ -711,6 +673,16 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" +[[package]] +name = "bit-vec" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5727b15fa97d4f4fee0a3b7c3d550ed0269f54329207b86388de918604e31269" +dependencies = [ + "borsh", + "serde", +] + [[package]] name = "bit_field" version = "0.10.3" @@ -859,6 +831,30 @@ dependencies = [ "piper", ] +[[package]] +name = "borsh" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a" +dependencies = [ + "borsh-derive", + "bytes", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cdfe656708a01f89b451a7d36466e6fe6c414de0aa18fc54f864f6f9ca9f56" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 3.0.9", +] + [[package]] name = "bstr" version = "1.13.1" @@ -899,7 +895,7 @@ checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -920,15 +916,6 @@ version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" -[[package]] -name = "bzip2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" -dependencies = [ - "libbz2-rs-sys", -] - [[package]] name = "calloop" version = "0.14.5" @@ -989,16 +976,7 @@ dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex 2.0.1", -] - -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom 7.1.3", + "shlex", ] [[package]] @@ -1013,15 +991,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" -[[package]] -name = "cgl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] - [[package]] name = "chacha20" version = "0.9.1" @@ -1090,18 +1059,7 @@ checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ "block-buffer 0.12.1", "crypto-common 0.2.2", - "inout 0.2.2", -] - -[[package]] -name = "clang-sys" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" -dependencies = [ - "glob", - "libc", - "libloading", + "inout 0.2.5", ] [[package]] @@ -1206,32 +1164,14 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "combine" -version = "4.6.8" +version = "4.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92" dependencies = [ "bytes", "memchr", ] -[[package]] -name = "compression-codecs" -version = "0.4.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98fc98460ba0ad5317075d3632b8dfc45d0be8c4a49347c2a38272019717614a" -dependencies = [ - "bzip2", - "compression-core", - "flate2", - "memchr", -] - -[[package]] -name = "compression-core" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e8ccc4ea9f6acc32d102c0f6d471d11d913ad15f20c04de743374861fa1d414" - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -1382,19 +1322,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-graphics2" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4416167a69126e617f8d0a214af0e3c1dbdeffcb100ddf72dcd1a1ac9893c146" -dependencies = [ - "bitflags 2.13.2", - "block", - "cfg-if", - "core-foundation 0.10.1", - "libc", -] - [[package]] name = "core-text" version = "21.0.0" @@ -1407,20 +1334,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-video" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139679cc63eb9504bdbe37e37874b0247136177655f0008588781e90863afa62" -dependencies = [ - "block", - "core-foundation 0.10.1", - "core-graphics2", - "io-surface", - "libc", - "metal", -] - [[package]] name = "core_detect" version = "1.0.0" @@ -1602,18 +1515,18 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "defmt" -version = "0.3.100" +version = "0.3.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" +checksum = "4deef977660e373c458df605a913d4ab121db0ccd18d1ad6976dff7d37cddb53" dependencies = [ - "defmt 1.1.1", + "defmt 1.2.0", ] [[package]] name = "defmt" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +checksum = "e4a0795ac740cb54d7b3775c9c17345f6aaecf884c01733b39d6017738e0e3e1" dependencies = [ "bitflags 1.3.2", "defmt-macros", @@ -1621,30 +1534,30 @@ dependencies = [ [[package]] name = "defmt-macros" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +checksum = "840bb056bd99c495c9188198a258ab787c79f306d864db3e6e8451442d6d8366" dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", ] [[package]] name = "defmt-parser" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +checksum = "71958f69fb2de856c5dd51ac9377e986ca1aa5919f931bf5395a807277f889a0" dependencies = [ "thiserror 2.0.21", ] [[package]] name = "deranged" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" [[package]] name = "derive_more" @@ -1666,7 +1579,6 @@ dependencies = [ "quote", "rustc_version", "syn 2.0.119", - "unicode-xid", ] [[package]] @@ -1757,7 +1669,6 @@ checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ "bitflags 2.13.2", "block2 0.6.2", - "libc", "objc2 0.6.5", ] @@ -1769,7 +1680,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1855,7 +1766,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 1.1.6+spec-1.1.0", + "toml 1.1.8+spec-1.1.0", "vswhom", "winreg", ] @@ -1963,20 +1874,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "erased-serde" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" -dependencies = [ - "serde", - "serde_core", - "typeid", -] +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" [[package]] name = "errno" @@ -2051,7 +1951,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04839bdf9d8c10f66806fad16b852fc72aab80873aebc3cb69d85b4fa41543ed" dependencies = [ "autocfg", - "defmt 0.3.100", + "defmt 0.3.101", "heapless 0.8.0", "serde", ] @@ -2103,9 +2003,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" [[package]] name = "fixedbitset" @@ -2213,9 +2113,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.12.6" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c92d9081c7ab3bd83ef1eecdfad090f3d966e3ce74106779664114cfe1a6274" +checksum = "835ae9d781464a79026cde387f9cbc650c9a4909d7cf7e658b127e3c35d2f35d" dependencies = [ "bytemuck", ] @@ -2261,7 +2161,7 @@ checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -2397,7 +2297,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -2883,9 +2783,9 @@ dependencies = [ [[package]] name = "gix-imara-diff" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305657ad44356151d73c145f567c25b24fdf2466bfb3e90727e1d5461a4e9748" +checksum = "1c48eccd894bd15555b0346470e63491ded94aefe76b3fcb1052084b5a393238" dependencies = [ "bstr", "hashbrown 0.17.1", @@ -3521,9 +3421,9 @@ dependencies = [ [[package]] name = "gpui-base" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf698677b253118459f552fe15513858c669d79a25837a94e480db2ae330050" +checksum = "d5cd7de73d5b2d3d18b94a928abf343922091fa77bc472f77b7d2e7e8b1823a7" dependencies = [ "aho-corasick", "anyhow", @@ -3562,9 +3462,9 @@ dependencies = [ [[package]] name = "gpui-component" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc8b7def8e74b0d822d3e96f6b28fb5a2c20eb7a83d30d22fa59ca8088d1159b" +checksum = "4097e161cc81e86323b439664be0cdd4f7c56148e867ed6f67fd72b966b6c2d1" dependencies = [ "anyhow", "chrono", @@ -3597,6 +3497,7 @@ dependencies = [ "serde", "serde_json", "serde_repr", + "similar", "smallvec", "smol", "tracing", @@ -3635,15 +3536,17 @@ dependencies = [ "tree-sitter-typescript", "tree-sitter-yaml", "tree-sitter-zig", + "unicode-segmentation", + "unicode-width", "uuid", "windows 0.58.0", ] [[package]] name = "gpui-component-macros" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2968cc7f4a2bd8f51b09cfe4f1e77409951b48a0e2d48f372b010e69c3d7fb49" +checksum = "6b98496748463b60ad69eab80cd91fc9b3807fed9a0e01ab4d5c159c949fd814" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -3653,9 +3556,9 @@ dependencies = [ [[package]] name = "gpui-kit-assets" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6c481ca987f1e6f10b1aed4d47f1b301cd1dc6f3016fac93c305f2a4f307c0" +checksum = "b037e2fa43d53a567a8aa5be6b1a8931f416cbd010ceee8d4a3727a71e9b1d05" dependencies = [ "anyhow", "gpui-pre", @@ -3668,19 +3571,17 @@ dependencies = [ [[package]] name = "gpui-pre" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f0bc3ebba070f8981b3f8e905a12f47d27794a30d029e59cdb9edf7a4b3360" +checksum = "34f61c1cfd36fc9c436af09308c963822ae27a45a84feb21a77ba5c9e051f1c0" dependencies = [ "accesskit", "anyhow", "async-channel", "async-task", "backtrace", - "bindgen", "bitflags 2.13.2", "chrono", - "core-video", "ctor", "derive_more", "embed-resource", @@ -3696,7 +3597,6 @@ dependencies = [ "gpui-pre-shared-string", "gpui-pre-sum-tree", "gpui-pre-util", - "gpui-pre-util-macros", "heapless 0.9.3", "image", "inventory", @@ -3735,28 +3635,30 @@ dependencies = [ "waker-fn", "web-time", "windows 0.62.2", - "zed-font-kit", "zed-scap", ] [[package]] name = "gpui-pre-apple" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdd914311cd12894367c8b9908947bb0c27fd42f8b9a5ff7a0730551a83fa4c" +checksum = "b52f58893fe1a0836464428dfad2b5eaf42c9c303a9638f4c2aced5a69072a15" dependencies = [ "anyhow", "async-task", "block2 0.6.2", "cbindgen", "core-foundation 0.10.1", + "core-foundation-sys", "core-graphics 0.24.0", - "core-video", + "core-text", "derive_more", "dispatch2", "etagere", "foreign-types", + "futures", "gpui-pre", + "gpui-pre-collections", "gpui-pre-util", "image", "libc", @@ -3764,16 +3666,25 @@ dependencies = [ "mach2", "metal", "objc2 0.6.5", + "objc2-core-foundation", + "objc2-core-text", + "objc2-core-video", "objc2-foundation 0.3.2", + "objc2-metal 0.3.2", "objc2-quartz-core 0.3.2", + "objc2-security", "parking_lot", + "pathfinder_geometry", + "smallvec", + "thiserror 2.0.21", + "zed-font-kit", ] [[package]] name = "gpui-pre-collections" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c060863025dc3b8e90febad2d1f4ffd23a5d0dcedba39d3f6b7820ea2fdd3a0" +checksum = "920c2f5b2f1a7813114d89f4841f26f6060d9c35d7c8a852a4205d1a767a7ce0" dependencies = [ "gpui-pre-util", "indexmap", @@ -3782,9 +3693,9 @@ dependencies = [ [[package]] name = "gpui-pre-derive-refineable" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc834f30f5f49791e214f1fde01a009c7de91c9cd0a9f31dabfed130ba39e6cf" +checksum = "947395f26228296c0c79fb889d3687b205e552c25bbcdece216fb2394ea9bcd1" dependencies = [ "proc-macro2", "quote", @@ -3793,14 +3704,12 @@ dependencies = [ [[package]] name = "gpui-pre-http-client" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d2935cf82333da3f41774e5757837756408f01356197b41c817ad2666034453" +checksum = "c56cdaa3f1a271162b7fede1d4557879eedb056e293cedbb82743600650b755e" dependencies = [ "anyhow", - "async-compression", "bytes", - "derive_more", "futures", "http", "http-body", @@ -3814,21 +3723,21 @@ dependencies = [ [[package]] name = "gpui-pre-http-client-tls" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bbac58d44e80c2bfdd736cacd334e5c9446d5847cd584193ee3c8634c729c2b" +checksum = "b7616a90ec92c9832bbc80ddab34e10fdf8d23520d5cbb0b432b73e4e9f6c812" dependencies = [ "log", "rustls", "rustls-platform-verifier", - "webpki-roots 1.0.9", + "webpki-roots 1.0.10", ] [[package]] name = "gpui-pre-linux" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1131746fad5c87b5de74dc9c73105655b0c820a2dd4bb247586573e7cf5720e" +checksum = "e28213c3fde6f13e91ba0b74b90cbaadec9373e36a031eda98561d31059870f3" dependencies = [ "accesskit", "accesskit_unix", @@ -3871,9 +3780,9 @@ dependencies = [ [[package]] name = "gpui-pre-macos" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d756813ff1cd741a502af60fd18869e0677795936d7349642b41c49f43120c0" +checksum = "c7c988b7e49775cc8542dbe48d5a10e073d8e898a023ef3ff3d24f33363e9863" dependencies = [ "accesskit", "accesskit_macos", @@ -3883,8 +3792,6 @@ dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", "core-graphics 0.24.0", - "core-text", - "core-video", "ctor", "dispatch2", "foreign-types", @@ -3900,26 +3807,22 @@ dependencies = [ "objc", "objc2 0.6.5", "objc2-app-kit 0.3.2", - "objc2-core-graphics", - "objc2-core-media", + "objc2-core-video", "objc2-foundation 0.3.2", - "objc2-screen-capture-kit", "objc2-user-notifications", "parking_lot", - "pathfinder_geometry", "raw-window-handle", "semver", "smallvec", "strum", "uuid", - "zed-font-kit", ] [[package]] name = "gpui-pre-macros" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ad26ca759364694cb55487bebff4c1b7dd6accab49990ff3cda6f7a818a9f4" +checksum = "0bb80dac5e1f6b8cde1d2740389e77dfc0071bfcc81fba5526d5dc90f68171cc" dependencies = [ "heck 0.5.0", "proc-macro-crate", @@ -3928,22 +3831,11 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "gpui-pre-perf" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcb288a506a476b6cbf97e6ec1cc0118db43f0ca91087588afa1c2d8cd4f842" -dependencies = [ - "gpui-pre-collections", - "serde", - "serde_json", -] - [[package]] name = "gpui-pre-platform" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e200b7b78836f1a0fc70767d971768e88f29d8b91b697285c15fb8e373635a3e" +checksum = "bbdbdac421178313fed8929fe95b42634a266a735079fcf03ff231bc2ccb2c5e" dependencies = [ "anyhow", "console_error_panic_hook", @@ -3956,9 +3848,9 @@ dependencies = [ [[package]] name = "gpui-pre-refineable" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4042345bb5bd3ecbc5d15b21ed128154f462a992058d7038cd397631f5462338" +checksum = "237703b3b219d11adb50dd33bb0fcca3d34fc001623b3143e72cb051d0fb3777" dependencies = [ "gpui-pre-derive-refineable", ] @@ -4015,9 +3907,9 @@ dependencies = [ [[package]] name = "gpui-pre-reqwest-client" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894b8d8618c92cbd4da28a04dd3fcf3c0e0607074fa99416a864ac9b63b18aae" +checksum = "92c2e70dc8550d60324b1eb3f3d08b4ccf20a8b577a9a42732dd3bafb2363bc0" dependencies = [ "anyhow", "bytes", @@ -4033,9 +3925,9 @@ dependencies = [ [[package]] name = "gpui-pre-scheduler" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4acd73345bc3c09f1b98c1b21eb4459ad8336f89bb2edcef619e11c5a08456e" +checksum = "83f342555282a59ed8dd58dd7e0a920524fa8ef6aa8c8f30e2edb7019a8f72cb" dependencies = [ "async-task", "backtrace", @@ -4050,9 +3942,9 @@ dependencies = [ [[package]] name = "gpui-pre-shared-string" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "477529fd5aa90bff969785ee9a3938484d94aa5101cdf7b84719629c0345f98a" +checksum = "71f488bf4780735f6b2dad24f8db1e3d9e2593de0ec298e3574c788f571b81c4" dependencies = [ "schemars", "serde", @@ -4061,46 +3953,35 @@ dependencies = [ [[package]] name = "gpui-pre-sum-tree" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ec0ec176d576b82aed716cf47185856b54ea9528caaf9d01787024689bfd824" +checksum = "aadb3bd3da22617e2158b1842f5a9c29c1626c926ad0686163ced1a009963ff3" dependencies = [ "gpui-pre-ztracing", "heapless 0.9.3", - "log", "rayon", "tracing", ] [[package]] name = "gpui-pre-util" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1635ae7d0b05400bfa211ddef6c67dc8d9f223c463022c2b3bf2c1c14c6044f" +checksum = "a04ec9abd7a87ac05a221f4629403831c44c17123bc33cb5d271a6303259b340" dependencies = [ "anyhow", "log", "which", ] -[[package]] -name = "gpui-pre-util-macros" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01486fce7722e5d7d7e7bb71c719dfdcc6ed917112bdc7c56d0556fdb60d10ab" -dependencies = [ - "gpui-pre-perf", - "quote", - "syn 2.0.119", -] - [[package]] name = "gpui-pre-web" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "184776d0763e6889dd2842dcb1204c15055945f2bdfe926b5ef57bdbd1952a65" +checksum = "aedd55b99dc77e28df8202b0ea868aa5c90fda4aefff539ea21087d7c2ff4bfb" dependencies = [ "anyhow", + "async-channel", "console_error_panic_hook", "futures", "gpui-pre", @@ -4125,9 +4006,9 @@ dependencies = [ [[package]] name = "gpui-pre-wgpu" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439c5421cafe1a7cf68d0c0ae5cc82b26fad6b0e6345ac98d20acaf1f2463914" +checksum = "5b1cdb26c1503bf9662ee8fbc5ab0b44b2deeee4b5c12dc67491ba6fb5fc544b" dependencies = [ "anyhow", "bytemuck", @@ -4152,9 +4033,9 @@ dependencies = [ [[package]] name = "gpui-pre-windows" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "371f9bb13f97e3bea2f8b8e5e81232bb74d735153c244ae67f7400e743925b1c" +checksum = "513d4f0fc7d596d3bdef2a73a524ffb83dabc95bf484f2855a698e7f431290a9" dependencies = [ "accesskit", "accesskit_windows", @@ -4180,35 +4061,21 @@ dependencies = [ "windows-registry 0.6.1", ] -[[package]] -name = "gpui-pre-zlog" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bbe5b98630ef4bfed5a7105ec1062e78d571912bc491388f07ea22f2457c18b" -dependencies = [ - "anyhow", - "chrono", - "gpui-pre-collections", - "log", -] - [[package]] name = "gpui-pre-ztracing" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f806400f6bda1fdd9fc627e158c0e44fb0c4b7767582a3621efcf92f4a850db7" +checksum = "f17bfd6bd1f77ba5c58181fa6f82fc7a63015a1c58bef94a76e5acb9f8e42572" dependencies = [ - "gpui-pre-zlog", "gpui-pre-ztracing-macro", "tracing", - "tracing-subscriber", ] [[package]] name = "gpui-pre-ztracing-macro" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d337c9acf058238e45ce0570d8a5958439242889492f91ae2d8e324211a61ccd" +checksum = "4b0d73e1bc02eef886a5947f41b8512708792e9e5d3053d181843311a487f96f" [[package]] name = "granit-parser" @@ -4801,9 +4668,9 @@ dependencies = [ [[package]] name = "inout" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" +checksum = "3b5cf4372d022092674a83b8febf5865f7a573cc0c5baec5e49c879b6a20978f" dependencies = [ "hybrid-array", ] @@ -4833,9 +4700,9 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" +checksum = "6928282826c822ad91bf1c9a1cb90a30ba1c26770749929b4656cd6be829cd7c" dependencies = [ "rustversion", ] @@ -4850,18 +4717,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "io-surface" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "554b8c5d64ec09a3a520fe58e4d48a73e00ff32899cdcbe32a4877afd4968b8e" -dependencies = [ - "cgl", - "core-foundation 0.10.1", - "core-foundation-sys", - "leaky-cow", -] - [[package]] name = "ipnet" version = "2.12.2" @@ -4926,7 +4781,7 @@ version = "0.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2b005715dcbeb0089a3c0dab99f2ff1cc3b2525323552703d648585d342a383" dependencies = [ - "defmt 1.1.1", + "defmt 1.2.0", "jiff-core", "jiff-static", "jiff-tzdb-platform", @@ -4943,7 +4798,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c" dependencies = [ - "defmt 1.1.1", + "defmt 1.2.0", "log", ] @@ -5119,38 +4974,17 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" -[[package]] -name = "leak" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd100e01f1154f2908dfa7d02219aeab25d0b9c7fa955164192e3245255a0c73" - -[[package]] -name = "leaky-cow" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a8225d44241fd324a8af2806ba635fc7c8a7e9a7de4d5cf3ef54e71f5926fc" -dependencies = [ - "leak", -] - [[package]] name = "lebe" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" -[[package]] -name = "libbz2-rs-sys" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" - [[package]] name = "libc" -version = "0.2.190" +version = "0.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "libfuzzer-sys" @@ -5219,9 +5053,9 @@ checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" [[package]] name = "lmdb-master-sys" @@ -5250,7 +5084,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" dependencies = [ "serde_core", - "value-bag", ] [[package]] @@ -5361,12 +5194,9 @@ dependencies = [ [[package]] name = "mach2" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a1b95cd5421ec55b445b5ae102f5ea0e768de1f82bd3001e11f426c269c3aea" -dependencies = [ - "libc", -] +checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b" [[package]] name = "malloc_buf" @@ -5502,12 +5332,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -5599,9 +5423,9 @@ dependencies = [ [[package]] name = "negentropy" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81c353b400a5503efdcf398f11a83fb7aa84f59f5d76fc4bf5bbc1e4f5366caa" +checksum = "a3d66662cb5ca384d4991509755ed5a42dd8e31c4282bf881938e506fc3146ec" [[package]] name = "new_debug_unreachable" @@ -5624,16 +5448,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nom" version = "8.0.0" @@ -5667,7 +5481,7 @@ dependencies = [ [[package]] name = "nostr" version = "0.45.5" -source = "git+https://github.com/rust-nostr/nostr#463f0c2d48e1d3c9e295cc231715d8a3855c65d3" +source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ "aes", "base64 0.22.1", @@ -5693,10 +5507,9 @@ dependencies = [ [[package]] name = "nostr-connect" version = "0.45.2" -source = "git+https://github.com/rust-nostr/nostr#463f0c2d48e1d3c9e295cc231715d8a3855c65d3" +source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ "async-utility", - "futures-core", "nostr", "nostr-sdk", "opaquerr", @@ -5707,7 +5520,7 @@ dependencies = [ [[package]] name = "nostr-database" version = "0.45.2" -source = "git+https://github.com/rust-nostr/nostr#463f0c2d48e1d3c9e295cc231715d8a3855c65d3" +source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ "nostr", "opaquerr", @@ -5716,7 +5529,7 @@ dependencies = [ [[package]] name = "nostr-gossip" version = "0.45.1" -source = "git+https://github.com/rust-nostr/nostr#463f0c2d48e1d3c9e295cc231715d8a3855c65d3" +source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ "nostr", "opaquerr", @@ -5725,7 +5538,7 @@ dependencies = [ [[package]] name = "nostr-gossip-memory" version = "0.45.1" -source = "git+https://github.com/rust-nostr/nostr#463f0c2d48e1d3c9e295cc231715d8a3855c65d3" +source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ "indexmap", "lru", @@ -5737,7 +5550,7 @@ dependencies = [ [[package]] name = "nostr-lmdb" version = "0.45.3" -source = "git+https://github.com/rust-nostr/nostr#463f0c2d48e1d3c9e295cc231715d8a3855c65d3" +source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ "async-utility", "flatbuffers", @@ -5752,7 +5565,7 @@ dependencies = [ [[package]] name = "nostr-sdk" version = "0.45.4" -source = "git+https://github.com/rust-nostr/nostr#463f0c2d48e1d3c9e295cc231715d8a3855c65d3" +source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ "async-utility", "async-wsocket", @@ -5791,9 +5604,9 @@ dependencies = [ [[package]] name = "notify-rust" -version = "4.18.1" +version = "4.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe430c879247371c47fdedd328ad4e301e6b30b533c5fd5db1c06d75253d0e46" +checksum = "4587364a9a0074333429b3df75a30a205340c56a536ca3eb6ca0e59b87bbf8af" dependencies = [ "futures-lite", "log", @@ -6042,28 +5855,6 @@ dependencies = [ "objc2-foundation 0.3.2", ] -[[package]] -name = "objc2-core-audio" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1eebcea8b0dbff5f7c8504f3107c68fc061a3eb44932051c8cf8a68d969c3b2" -dependencies = [ - "dispatch2", - "objc2 0.6.5", - "objc2-core-audio-types", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-core-audio-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" -dependencies = [ - "bitflags 2.13.2", - "objc2 0.6.5", -] - [[package]] name = "objc2-core-data" version = "0.2.2" @@ -6133,31 +5924,6 @@ dependencies = [ "objc2-foundation 0.3.2", ] -[[package]] -name = "objc2-core-location" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" -dependencies = [ - "objc2 0.6.5", - "objc2-foundation 0.3.2", -] - -[[package]] -name = "objc2-core-media" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ec576860167a15dd9fce7fbee7512beb4e31f532159d3482d1f9c6caedf31d" -dependencies = [ - "bitflags 2.13.2", - "dispatch2", - "objc2 0.6.5", - "objc2-core-audio", - "objc2-core-audio-types", - "objc2-core-foundation", - "objc2-core-video", -] - [[package]] name = "objc2-core-text" version = "0.3.2" @@ -6181,6 +5947,7 @@ dependencies = [ "objc2-core-foundation", "objc2-core-graphics", "objc2-io-surface", + "objc2-metal 0.3.2", ] [[package]] @@ -6276,17 +6043,12 @@ dependencies = [ ] [[package]] -name = "objc2-screen-capture-kit" +name = "objc2-security" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b7c5390f477482f001bc354d6571a70db7e4f8d5288e860c45521fbce11394" +checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" dependencies = [ - "block2 0.6.2", - "dispatch2", - "objc2 0.6.5", - "objc2-core-graphics", - "objc2-core-media", - "objc2-foundation 0.3.2", + "objc2-core-foundation", ] [[package]] @@ -6298,7 +6060,6 @@ dependencies = [ "bitflags 2.13.2", "block2 0.6.2", "objc2 0.6.5", - "objc2-core-location", "objc2-foundation 0.3.2", ] @@ -6765,8 +6526,6 @@ checksum = "af3fb618632874fb76937c2361a7f22afd393c982a2165595407edc75b06d3c1" dependencies = [ "atomic", "crossbeam-queue", - "futures", - "log", "parking_lot", "pin-project", "pollster 0.2.5", @@ -6810,23 +6569,13 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.119", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.15+spec-1.1.0", + "toml_edit 0.25.17+spec-1.1.0", ] [[package]] @@ -6868,17 +6617,18 @@ dependencies = [ [[package]] name = "proptest" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" +checksum = "b8530004ccb15eae51c7e40009fbe317f341f804db54dc033eec1c50be28cfa0" dependencies = [ - "bit-set 0.8.0", - "bit-vec 0.8.0", + "bit-set 0.11.1", + "bit-vec 0.10.1", "bitflags 2.13.2", + "chacha20 0.10.2", + "core_detect", "num-traits", "proptest-macro", - "rand 0.9.5", - "rand_chacha 0.9.0", + "rand 0.10.3", "rand_xorshift", "regex-syntax", "rusty-fork", @@ -6888,14 +6638,14 @@ dependencies = [ [[package]] name = "proptest-macro" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa288b896cb2b345da7b7f2110ab19e51565b83495b56fcec98a62f8b1f33e" +checksum = "e99782ea31698c2206c6887c1220d2f594b291c26cb9ec5b6d7cf175320bc212" dependencies = [ "convert_case 0.11.0", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", ] [[package]] @@ -7122,11 +6872,11 @@ dependencies = [ [[package]] name = "rand_xorshift" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +checksum = "60aa6af80be32871323012e02e6e65f8a7cc7890931ae421d217ad8fe0df2ccf" dependencies = [ - "rand_core 0.9.5", + "rand_core 0.10.1", ] [[package]] @@ -7256,7 +7006,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.12.6", + "font-types 0.12.7", "once_cell", ] @@ -7313,7 +7063,7 @@ checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -7474,9 +7224,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.12.0" +version = "8.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" +checksum = "19afa5b4b6a611de00bd1bdae6ae6f39084c9399f0679c3f52d8469cf335cc23" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -7485,9 +7235,9 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.12.0" +version = "8.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" +checksum = "e0d8afda6374eac59e066abee06d265247ebbaf3006cf878e2879e8356e34053" dependencies = [ "mime_guess", "proc-macro2", @@ -7500,12 +7250,12 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.12.0" +version = "8.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" +checksum = "0d84e8ba78bd384263e5922f084cbe1b081c3b7e69add59c8fb097b879ba968a" dependencies = [ "globset", - "sha2 0.11.0", + "sha2 0.11.1", "walkdir", ] @@ -7599,9 +7349,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "aws-lc-rs", "log", @@ -7615,9 +7365,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +checksum = "4a073f5dc7469f984c52ad2752b63b0807745133b6de880b7b64c1ac4c48aec4" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -7746,18 +7496,18 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "9cb23c424d8ee841bb4d813677ca237e2a610067d594fec130f87d6093495ab5" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "schemars" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +checksum = "ab508826f74a77ca9d5aba6ff19b522583ee3eaf28a19384ff3d0e5835fadf6e" dependencies = [ "dyn-clone", "indexmap", @@ -7769,14 +7519,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba" +checksum = "e1c3a92094fa7d61aa124645844facb6b554dfc797136d0f5fd1f890e2bffc69" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -7823,7 +7573,7 @@ dependencies = [ "cfg-if", "pbkdf2 0.13.0", "salsa20", - "sha2 0.11.0", + "sha2 0.11.1", ] [[package]] @@ -7945,7 +7695,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -7956,24 +7706,16 @@ checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", -] - -[[package]] -name = "serde_fmt" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e497af288b3b95d067a23a4f749f2861121ffcb2f6d8379310dcda040c345ed" -dependencies = [ - "serde_core", + "syn 3.0.9", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ + "foldhash 0.2.0", "indexmap", "itoa", "memchr", @@ -7990,7 +7732,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -8004,9 +7746,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c" dependencies = [ "serde_core", ] @@ -8071,9 +7813,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +checksum = "47d7069beb7d6ac7b9acd1039986e73443f24234f41074da099d6f994ac9ad19" dependencies = [ "cfg-if", "cpufeatures 0.3.1", @@ -8098,12 +7840,6 @@ dependencies = [ "dirs 6.0.0", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "shlex" version = "2.0.1" @@ -8246,6 +7982,16 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +[[package]] +name = "similar" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +dependencies = [ + "bstr", + "unicode-segmentation", +] + [[package]] name = "simplecss" version = "0.2.2" @@ -8298,9 +8044,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.16.2" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" [[package]] name = "smol" @@ -8450,85 +8196,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "sval" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b81b254da21fe1fcc4e3a74fe39b46e25e3a863078f8b71c954d47f84889dbc6" - -[[package]] -name = "sval_buffer" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50be352d2822ffafb59e3e2ddac9d5ee60f2eeadbb7b5a2a951b9f3651e87a6f" -dependencies = [ - "sval", - "sval_ref", - "zerocopy", -] - -[[package]] -name = "sval_dynamic" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048ca293b998d9a45659159f94a64063791e74cdc670164943dbb434405573d" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_fmt" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b5888e40f80568733217f27b7317b845f463400ced36c424b1a804730e53b2" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_json" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17664d6bb6b74947afaab9d7c991caa9bf5638d4dee16fcbef637f440796049" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_nested" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c059969ca5ca163ea7fef6c9661758973d17691aba92abdcf5c428f4ec122c" -dependencies = [ - "sval", - "sval_buffer", - "sval_ref", -] - -[[package]] -name = "sval_ref" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d6b29ff568c85c87561807f51d2adfff4b6016c6363133f7cd1652a12548f3" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_serde" -version = "2.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f33ec9edc42b12764d5c90ca0a1d84189c6bde81ed27507f1e661c6e4e05853" -dependencies = [ - "serde_core", - "sval", - "sval_nested", -] - [[package]] name = "svg_fmt" version = "0.4.5" @@ -8579,9 +8246,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.6" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" dependencies = [ "proc-macro2", "quote", @@ -8614,7 +8281,7 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -8766,7 +8433,7 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -8864,9 +8531,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.2" +version = "1.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044" +checksum = "a0c168a474b95bfecfe908a65d4bdffc523144b649a74c09c286afb35d53e0bc" dependencies = [ "bytes", "libc", @@ -8894,7 +8561,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -8949,9 +8616,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +checksum = "e464cf451ba96ebfc6f9b6542f17ee8b8956e33f1e40d9690624e59d7a7f8a4b" dependencies = [ "bytes", "futures-core", @@ -8975,14 +8642,14 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.6+spec-1.1.0" +version = "1.1.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" +checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.1.1", - "toml_datetime 1.1.1+spec-1.1.0", + "serde_spanned 1.1.2", + "toml_datetime 1.1.2+spec-1.1.0", "toml_parser", "toml_writer", "winnow 1.0.4", @@ -8999,9 +8666,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053" dependencies = [ "serde_core", ] @@ -9022,21 +8689,21 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.15+spec-1.1.0" +version = "0.25.17+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" +checksum = "e3641d5bbb5349a79e1020a242d251efbc546ad8048d133958323ce9c40a9c9c" dependencies = [ "indexmap", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime 1.1.2+spec-1.1.0", "toml_parser", "winnow 1.0.4", ] [[package]] name = "toml_parser" -version = "1.1.3+spec-1.1.0" +version = "1.1.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c" dependencies = [ "winnow 1.0.4", ] @@ -9049,9 +8716,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" +checksum = "06bdbd8cfc056b8d2e2e85f29b56a3bdbecb527cef81eb39e3e7b98af4652770" [[package]] name = "tower" @@ -9352,9 +9019,9 @@ dependencies = [ [[package]] name = "tree-sitter-language" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0d1bf6fdd806e43ae5198f82f527056d359def39e54e67a0f478ac09dac081" +checksum = "d0af592be68c579aa78a16846bd19422978c3c52e438523d45ff5d1bff1f9d4a" [[package]] name = "tree-sitter-lua" @@ -9518,9 +9185,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40688ea6389c8171614b25491f71d4a27946e0c7ce2da1c6de27e25abf1a0ae" +checksum = "0d15f4f5898bcfc5d8a8e45ed30b2f108d710c1a2e5489dbf80e078f707181bc" dependencies = [ "arc-swap", "serde", @@ -9561,12 +9228,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - [[package]] name = "typenum" version = "1.20.1" @@ -9628,9 +9289,9 @@ checksum = "65dd75ab2d9d379dbe86d4059e91d8b5a6e7054865eaba1ddbfc7a817ff96392" [[package]] name = "unicode-ident" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "unicode-linebreak" @@ -9640,9 +9301,9 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-normalization" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +checksum = "75cd3fb03d5288b3ba9a1ee103ac7e9cbb59f0b03d64f8ddfcc04dd42758a85d" dependencies = [ "tinyvec", ] @@ -9677,12 +9338,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "universal-hash" version = "0.5.1" @@ -9793,9 +9448,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97277d36b9c3ace13e58fa6e753f8b0bbbf302a18dd193240d70f9e29681059a" +checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -9821,42 +9476,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "value-bag" -version = "1.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2799ffb329a792ecfd902b71306c8a815a6ef1c0470fa9953a6aa4d4cecbe511" -dependencies = [ - "value-bag-serde1", - "value-bag-sval2", -] - -[[package]] -name = "value-bag-serde1" -version = "1.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0941feceafbe7a8f59ea1096d45b97002884a41306315ad797b3684b63a81d8c" -dependencies = [ - "erased-serde", - "serde_core", - "serde_fmt", -] - -[[package]] -name = "value-bag-sval2" -version = "1.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839752af8179287d27eb2b94164641b1ede9e60ab7424163388dc21ebd0508cd" -dependencies = [ - "sval", - "sval_buffer", - "sval_dynamic", - "sval_fmt", - "sval_json", - "sval_ref", - "sval_serde", -] - [[package]] name = "version_check" version = "0.9.5" @@ -9975,7 +9594,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "wasm-bindgen-shared", ] @@ -10150,9 +9769,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +checksum = "58ec80e73fd8baf57bf0d9615554c75348bda990d6d5bbeab964dd068319fecb" dependencies = [ "rustls-pki-types", ] @@ -10163,14 +9782,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.9", + "webpki-roots 1.0.10", ] [[package]] name = "webpki-roots" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +checksum = "1c1c8e20c8a38fc7d65abfe74eb7280e4aa667e8eec8bc84996d2874810748d9" dependencies = [ "rustls-pki-types", ] @@ -11212,7 +10831,7 @@ checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure", ] @@ -11284,7 +10903,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "zbus_names", "zvariant", "zvariant_utils", @@ -11292,9 +10911,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.4" +version = "4.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" +checksum = "812a12be4ead7a59e18ea8f047d08add0066b73bc62fc1467066a2472ae088dd" dependencies = [ "serde", "winnow 1.0.4", @@ -11391,18 +11010,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.60" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6400fc4bb7426f6faac3fb07566122bb18622e3022bd2c36426a92ed489b1dbe" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.60" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99c27cc7525bad4df59a45e073c45b2c2aa820efb588234cc23a547ec69a34db" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" dependencies = [ "proc-macro2", "quote", @@ -11426,7 +11045,7 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure", ] @@ -11480,7 +11099,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -11536,9 +11155,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.15.0" +version = "5.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" +checksum = "80bf6d6cd6a4b601acb64cfb8284cdc643fcfa75ef26ae3c46ec8aa4e8a1fbb7" dependencies = [ "endi", "enumflags2", @@ -11552,14 +11171,14 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.15.0" +version = "5.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" +checksum = "ef2672456ba1cb54b5eaec136e63135b3c7495fb938e53b28a62e633496d486d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "zvariant_utils", ] @@ -11572,6 +11191,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 3.0.6", + "syn 3.0.9", "winnow 1.0.4", ] diff --git a/Cargo.toml b/Cargo.toml index 275b713..83a1907 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,13 +9,13 @@ edition = "2024" publish = false [workspace.dependencies] -gpui = { package = "gpui-pre", version = "0.3.8" } -gpui_platform = { package = "gpui-pre-platform", version = "0.3.8", features = ["font-kit", "x11", "wayland"] } -reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.8" } +gpui = { package = "gpui-pre", version = "0.3.9" } +gpui_platform = { package = "gpui-pre-platform", version = "0.3.9", features = ["font-kit", "x11", "wayland"] } +reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.9" } # GPUI Kit -gpui-component = { version = "0.7.1", features = ["tree-sitter-languages"] } -gpui-base = "0.7.1" +gpui-component = { version = "0.8", features = ["tree-sitter-languages"] } +gpui-base = "0.8" dock = { path = "crates/dock" } settings = { path = "crates/settings" } diff --git a/crates/dock/src/dock_area.rs b/crates/dock/src/dock_area.rs index b3c3176..67617c1 100644 --- a/crates/dock/src/dock_area.rs +++ b/crates/dock/src/dock_area.rs @@ -1,5 +1,4 @@ use std::cell::Cell; -use std::ops::Deref as _; use std::rc::Rc; use std::sync::Arc; @@ -173,7 +172,7 @@ impl SignedDockSkin { .on_drag(ResizePanel, move |info, _, _, cx| { cx.stop_propagation(); shared.resizing_dock().set(Some(placement)); - cx.new(|_| info.deref().clone()) + cx.new(|_| info.clone()) }) } } diff --git a/crates/signed_state/src/backend.rs b/crates/signed_state/src/backend.rs index e8f4016..0dd1576 100644 --- a/crates/signed_state/src/backend.rs +++ b/crates/signed_state/src/backend.rs @@ -1,6 +1,7 @@ use std::collections::HashSet; use std::path::PathBuf; use std::str::FromStr; +use std::sync::Arc; use std::time::{Duration, Instant}; use anyhow::{Error, anyhow, bail}; @@ -24,8 +25,6 @@ use crate::repos::RepoListStore; use crate::state::{GitPushMode, GitPushPolicy, GitRef, PushStepStatus, SyncState}; pub const USER_KEYRING: &str = "Signed Safe Storage"; -pub const NOSTR_CONNECT_TIMEOUT: u64 = 60; - const PUMP_DEBOUNCE: Duration = Duration::from_millis(200); #[derive(Debug, Clone)] @@ -199,13 +198,9 @@ impl Backend { } else if content.starts_with("bunker://") { let (base, keys) = extract_master_key(&content)?; let uri = NostrConnectUri::parse(base)?; - let mut signer = NostrConnect::new( - uri, - keys, - Duration::from_secs(NOSTR_CONNECT_TIMEOUT), - None, - )?; - signer.auth_url_handler(SignedAuthUrlHandler); + let signer = NostrConnect::builder(uri, keys) + .auth_url_handler(Arc::new(SignedAuthUrlHandler)) + .build()?; this.update(cx, |this, cx| { this.set_signer(signer, cx); @@ -366,13 +361,9 @@ impl Backend { let write = cx.write_credentials(USER_KEYRING, "bunker", credential.as_bytes()); cx.spawn(async move |this, cx| { - let mut signer = NostrConnect::new( - connect_uri, - keys, - Duration::from_secs(NOSTR_CONNECT_TIMEOUT), - None, - )?; - signer.auth_url_handler(SignedAuthUrlHandler); + let signer = NostrConnect::builder(connect_uri, keys) + .auth_url_handler(Arc::new(SignedAuthUrlHandler)) + .build()?; // Verify the bunker responds before persisting the credential. let public_key = signer.get_public_key_async().await?; -- 2.54.0 From f7865780d9b8c6819b34eb0ff265e9c0642adf6e Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Wed, 21 Oct 2026 10:56:14 +0700 Subject: [PATCH 2/6] add plan --- docs/NATIVE-THEME-MIGRATION.md | 269 +++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 docs/NATIVE-THEME-MIGRATION.md diff --git a/docs/NATIVE-THEME-MIGRATION.md b/docs/NATIVE-THEME-MIGRATION.md new file mode 100644 index 0000000..4136611 --- /dev/null +++ b/docs/NATIVE-THEME-MIGRATION.md @@ -0,0 +1,269 @@ +# Native theme migration plan + +Integrate [`native-theme`](https://github.com/tiborgats/native-theme) (via the +`native-theme-gpui` connector) so the app follows the OS native theme on +macOS, Windows and Linux (KDE/GNOME), instead of only the bundled +`signed.json` themes. + +Principles for this migration: plug the connector in, migrate what it +replaces, do not wrap it, and do not adopt its optional subsystems (icons, +theme-drawn widgets, presets UI) in this pass. + +--- + +## 1. Current state + +| Piece | Location | Notes | +| --- | --- | --- | +| Startup theme setup | `desktop/src/main.rs` | `gpui_component::init` + `theme::init`, loads `signed.json` into `ThemeRegistry`, sets `Theme::global_mut` fields (`radius`, `radius_lg`, `focus_ring`, `shadow`, `font_size`, `mono_font_size`, `light_theme`, `dark_theme`), then `Theme::change` / `Theme::sync_system_appearance` | +| Runtime theme application | `crates/workspace/src/views/sidebar/settings_dialog.rs` | `apply_theme()` re-reads settings into the global `Theme`; `apply_appearance()` maps `AppearanceMode` to `Theme::change` / `sync_system_appearance` | +| System appearance follow | `crates/workspace/src/workspace.rs` | `cx.observe_window_appearance` → `Theme::sync_system_appearance` when appearance is `System` | +| Theme settings | `crates/settings/src/settings.rs` (`ThemeSettings`) | `light_theme`, `dark_theme`, `font_size`, `mono_font_size`, `radius`, `radius_lg`, `focus_ring`, `shadow` | +| Bundled themes | `crates/assets/assets/themes/signed.json` | `Signed Light` / `Signed Dark` colors + a `highlight` section (editor/syntax colors) | +| Theme consumers | `dock`, `signed_ui`, `workspace` | ~50 `cx.theme()` call sites via `gpui_component::ActiveTheme` | + +Dependencies today (branch `feat/native-theme`, commit `eb4fbb0`): +`gpui-pre` 0.3.9, `gpui-pre-platform` 0.3.9, `gpui-component` 0.8, +`gpui-base` 0.8, toolchain 1.96. + +## 2. What the connector does + +`native-theme-gpui` turns a `native_theme::ResolvedTheme` (read from the OS, +or from a bundled preset) into a fully configured `gpui_component::Theme` and +installs it: + +- all 139 `ThemeColor` fields, fonts, `radius`, `shadow`, `focus_ring`, + scrollbar and base-layer values; +- a `ThemeConfig` per mode, so the app's existing + `Theme::change(mode, None, cx)` / `Theme::sync_system_appearance(..)` + switch between the native light and dark palettes unchanged; +- an internal observer that restores the native values gpui-component + overwrites on each rebuild; +- accessibility: the OS text-scaling factor scales fonts (through the window + rem), reduce-motion and reduce-transparency are forwarded. + +Because the connector produces a regular gpui-component `Theme`, every +existing `cx.theme()` call site keeps working without modification. That is +the core reason this integration is small. + +Key APIs: `SystemTheme::from_system()`, `apply_system_theme(&system, cx)`, +`apply(theme, &resolved, &prefs, cx)`, `from_preset(name, is_dark, &prefs)`, +`AccessibilityPreferences::from_system()`. + +## 3. Gate 0 — version compatibility (blocking) + +Verified against crates.io and the upstream repo on 2026-10-21: + +| Fact | Value | +| --- | --- | +| Latest connector | `native-theme-gpui` 0.6.1 (2026-10-09); upstream `main` is the same | +| Connector requires | `gpui-component ^0.7.1`, `gpui-base ^0.7.1`, `gpui-pre ^0.3.8`, Rust ≥ 1.95 | +| `gpui-component` 0.7.x pins | `gpui-pre =0.3.8` | +| `gpui-component` 0.8.0 pins | `gpui-pre =0.3.9` (0.8.0 published 2026-10-19) | +| This branch | moved 0.7.1 / 0.3.8 → 0.8 / 0.3.9 in `eb4fbb0` ("chore: update deps") | + +The pins are mutually exclusive: with the app on `gpui-component` 0.8, cargo +cannot unify the graph — the connector would pull a second `gpui-pre` 0.3.8 +and a second `gpui-component` 0.7.x, and `apply(.., cx)` would not even +type-check against the app's `App`. **The connector cannot be added on top of +gpui-component 0.8 today.** + +### Decision + +Revert the GPUI-side dependency bump on this branch and align with the +connector's supported closure (recommended): + +```toml +# [workspace.dependencies] +gpui = { package = "gpui-pre", version = "0.3.8" } +gpui_platform = { package = "gpui-pre-platform", version = "0.3.8", features = ["font-kit", "x11", "wayland"] } +reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.8" } + +gpui-component = { version = "0.7.1", features = ["tree-sitter-languages"] } +gpui-base = "0.7.1" + +native-theme = "0.6.1" +native-theme-gpui = "0.6.1" +``` + +- This is exactly the state of `master` before `eb4fbb0`, which is also the + version set the connector was verified against (2026-10-08 stamp) and that + its nightly dependency canary exercises. `"0.7.1"` is a caret requirement; + it resolves the newest 0.7.x (currently 0.7.3). Pin `=0.7.1` instead if + strict reproducibility is preferred. +- The three `gpui-pre-*` family crates are published in lockstep; all three + move back to 0.3.8 together. +- The cost of the revert is the two one-line tweaks `eb4fbb0` made for 0.8 + (the `Deref` removal in `crates/dock/src/dock_area.rs`; verify it compiles + either way). The nostr changes in that commit are unrelated and stay. +- When `native-theme-gpui` releases gpui-component 0.8 support (upstream has + bumped within days of each gpui-component release so far), bump both sides + together in one commit. + +Alternative, rejected for now: staying on gpui-component 0.8 and waiting for +upstream 0.8 support. Nothing in this migration depends on 0.8-only APIs, and +0.8.0 shipped two days before this plan, so the revert is the cheaper path. + +Note: the connector's README quick-start shows the `gpui-kit` facade crate; +this project depends on `gpui-component` + `gpui-base` directly, which is +equivalent — no `gpui-kit` dependency is needed. + +## 4. Target design + +### 4.1 Theme source + +The native OS theme becomes the primary source. The bundled `signed.json` +registry stays as the fallback when the OS theme cannot be read (unsupported +Linux desktop, headless, etc.). This keeps the existing startup code as the +fallback branch instead of deleting a working safety net. + +### 4.2 Startup flow (`desktop/src/main.rs`) + +Order is load-bearing: + +1. `gpui_component::init(cx)` and `theme::init(cx)` — must run before + `apply` (connector requirement). +2. `SettingsStore` load — already before any theme work. +3. `ThemeRegistry` load from `Assets.themes()` — kept, feeds the fallback. +4. Apply the native theme: + +```rust +let prefs = native_theme_gpui::AccessibilityPreferences::from_system(); +match native_theme::SystemTheme::from_system() { + Ok(system) => native_theme_gpui::apply_system_theme(&system, cx), + Err(error) => { + tracing::warn!("native theme unavailable ({error}); using bundled themes"); + // existing path: registry lookups + Theme::global_mut field setup + } +} +// shared: the existing `match settings.appearance { .. }` block stays, +// now driving native palettes per mode on the native path. +``` + +`apply_system_theme` installs both the light and dark variants plus their +configs, so the subsequent `Theme::change` / `sync_system_appearance` for the +user's `AppearanceMode` picks the right native palette. + +On the native path, do **not** set `radius` / `font_size` / `light_theme` / +`dark_theme` etc. on `Theme::global_mut` — the connector owns those fields, +and overwriting them fights its observer. + +### 4.3 Appearance switching (no changes) + +- `AppearanceMode::System | Light | Dark` and `apply_appearance()` in + `settings_dialog.rs` work as-is. +- `workspace.rs`'s `observe_window_appearance` → `sync_system_appearance` + keeps following the OS while in `System` mode. +- `Theme::change(mode, None, cx)` reproduces the native palette for the mode + because the connector installed a `ThemeConfig` per variant. + +Known gap (not addressed here): gpui-component's system-appearance follow is +driven by window-activation events. A live OS theme change while the window +is focused may not propagate on Linux until the window is re-focused; +native-theme's `watch` feature (a theme-change watcher) is a possible +follow-up, out of scope. + +### 4.4 Settings dialog (`settings_dialog.rs`) + +Keep: + +- the **Appearance** row (`System` / `Light` / `Dark`) and its handler. + +Remove (the native theme now owns all of these): + +- **Light Theme** / **Dark Theme** pickers and `theme_options()` — colors are + chosen by the OS. This is also the only way to avoid the connector's + registry trap: selecting a registry theme would overwrite the connector's + per-mode configs on the next `Theme::change` and silently drop native + colors until restart. +- **Font size**, **Mono font size**, **Radius**, **Large radius**, + **Focus ring**, **Shadows** rows and their handlers — the resolved theme + provides geometry, and the connector already scales fonts by the OS text + size. Keeping manual overrides would require re-applying them after every + upstream rebuild, a permanent fight with the connector. + +`apply_theme()` shrinks to the fallback-only body (registry lookups + global +field setup), called only when native detection failed at startup and by the +Appearance handler's fallback branch. + +`ThemeSettings` keeps its fields and serde shape — the fallback branch still +reads them, existing settings files keep parsing, and the tests in +`settings.rs` stay valid. They become fallback-only tuning (editable via +`settings.json`). Deleting the fields is a possible follow-up cleanup if the +fallback ever moves to native-theme presets. + +### 4.5 Syntax highlighting (known trade-off) + +`signed.json` carries a `highlight` section (editor and syntax colors) used by +code and markdown rendering (`TextView` in the files view and elsewhere). The +connector's installed per-mode configs carry upstream's default highlighter +styles, so on the native path the active syntax palette is upstream's, not +Signed's. + +Decision for this pass: accept upstream's defaults — zero code. If the Signed +syntax palette must be kept later, investigate whether gpui-component 0.7 +exposes a syntax-theme setter that survives `Theme::change`; do not build an +override mechanism now. + +### 4.6 Features + +Use the connector with narrowed features; the app uses its own SVG icons and +gpui-component widgets: + +```toml +native-theme-gpui = { version = "0.6.1", default-features = false, features = ["system-fonts"] } +``` + +`system-fonts` keeps a theme font family the system lacks drawing in the +platform's substitute. `widgets` (theme-drawn checkbox/switch/etc.), +`material-icons`, `lucide-icons`, `system-icons`, `svg-rasterize` are all +unused here and each carries build weight (the icon bundles are ~2 MB). +Adopting any of them is a separate, deliberate follow-up. + +## 5. Change list + +| File | Change | +| --- | --- | +| `Cargo.toml` | Revert gpui-side pins to 0.3.8 / 0.7.1 (Gate 0); add `native-theme` and `native-theme-gpui` workspace deps | +| `desktop/Cargo.toml` | Add `native-theme`, `native-theme-gpui` | +| `desktop/src/main.rs` | Native apply with bundled fallback (§4.2); move the settings-field setup into the fallback branch | +| `crates/workspace/src/views/sidebar/settings_dialog.rs` | Remove theme picker + font/radius/focus/shadow rows; shrink `apply_theme` to fallback-only (§4.4) | +| `CHANGELOG.md` | Added: native OS theme via `native-theme`; Removed: manual theme/font/radius settings | + +Unchanged: + +- every `cx.theme()` consumer in `dock`, `signed_ui`, `workspace` — including + the dock/tab skins and window controls, which keep reading tokens; +- `crates/workspace/src/workspace.rs` appearance observer; +- `crates/settings` (fields stay), `crates/assets` (`signed.json` stays as + the fallback), `crates/dock`. + +## 6. Validation + +1. `cargo check`, `cargo test`, `cargo clippy` across the workspace (toolchain + 1.96 satisfies the connector's 1.95 MSRV). +2. Manual matrix, per platform available (macOS first; KDE and GNOME Linux; + Windows): + - cold start matches the OS theme and accent; radius, fonts and controls + read as native; + - switching Appearance `System ↔ Light ↔ Dark` in settings switches native + palettes; + - with `System`, changing the OS theme and re-focusing the window updates + the app; + - settings dialog, dock tabs, diffs, files view, markdown rendering look + correct; the syntax palette difference from §4.5 is reviewed and + accepted; + - `cargo run` once with native detection forced to fail (e.g. temporarily + return early in the match) to prove the bundled fallback still works. +3. `cargo tree -i gpui-pre` and `cargo tree -i gpui-component` must each show + exactly one version — the whole point of Gate 0. + +## 7. Explicitly out of scope + +- native-theme icon sets / `CustomIconName` mapping — the app keeps its own + SVG assets. +- theme-drawn widgets (`widgets` feature). +- a preset-picker UI (`from_preset`) in settings. +- runtime OS-theme watching (`watch` feature). +- per-field user overrides layered on the native theme. +- migrating `signed.json` into a native-theme `Theme` definition. -- 2.54.0 From 6122474f9e50696fc330099be1816d3eb09a76ee Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Wed, 21 Oct 2026 13:57:01 +0700 Subject: [PATCH 3/6] Follow the OS native theme on macOS, Windows and Linux --- CHANGELOG.md | 2 + Cargo.lock | 818 +++++++++++++++--- Cargo.toml | 15 +- crates/dock/src/dock_area.rs | 3 +- .../src/views/sidebar/settings_dialog.rs | 352 +------- desktop/Cargo.toml | 1 + desktop/src/main.rs | 68 +- docs/NATIVE-THEME-MIGRATION.md | 51 +- 8 files changed, 797 insertions(+), 513 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d23cde3..c68172d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ### Added +- Follow the operating system's native theme on macOS, Windows and Linux (KDE, GNOME) via `native-theme`, applying the OS colors, fonts, radii and accessibility preferences; the bundled themes remain as the fallback when the OS theme cannot be read - Add an identity import dialog, importing an existing identity by pasting its `nsec` secret key (encrypted with a new passphrase), NIP-49 `ncryptsec` (unlocked with its passphrase), or `bunker://` NIP-46 URI - Add a dropdown menu on the signed-in user button in the sidebar - Add sign-out feature, confirmed by an alert dialog before deleting the stored session credential @@ -41,6 +42,7 @@ ### Removed +- Remove the light/dark theme pickers and the font size, corner radius, focus ring and shadow settings from the settings dialog; colors and geometry now come from the native theme - Remove dead code: the unused `login`/`logout` family, the unwired `SyncProgress` pipeline, `merge_pull_request`, inbox mark-read/archive APIs and the wasm32-only code paths ### Deprecated diff --git a/Cargo.lock b/Cargo.lock index 1ad687b..a790525 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -318,6 +318,18 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compression" +version = "0.4.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5755640120b24961f8231e05892e4a4f7e0d04e8aeca161508c9c397946970" +dependencies = [ + "compression-codecs", + "compression-core", + "futures-io", + "pin-project-lite", +] + [[package]] name = "async-executor" version = "1.14.0" @@ -562,7 +574,7 @@ dependencies = [ "anyhow", "arrayvec", "log", - "nom", + "nom 8.0.0", "num-rational", "v_frame", ] @@ -638,6 +650,26 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efbd3e1070bbdf4cd88a75264e18e8a26f7cb5c6949eadf0ceb85fb159cf08f8" +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags 2.13.2", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.3", + "shlex 1.3.0", + "syn 2.0.119", +] + [[package]] name = "bip39" version = "2.2.2" @@ -855,6 +887,15 @@ dependencies = [ "syn 3.0.9", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bstr" version = "1.13.1" @@ -916,6 +957,15 @@ version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +[[package]] +name = "bzip2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" +dependencies = [ + "libbz2-rs-sys", +] + [[package]] name = "calloop" version = "0.14.5" @@ -956,7 +1006,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eadd868a2ce9ca38de7eeafdcec9c7065ef89b42b32f0839278d55f35c54d1ff" dependencies = [ "heck 0.4.1", - "indexmap", + "indexmap 2.14.2", "log", "proc-macro2", "quote", @@ -976,7 +1026,16 @@ dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom 7.1.3", ] [[package]] @@ -991,6 +1050,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + [[package]] name = "chacha20" version = "0.9.1" @@ -1062,6 +1130,17 @@ dependencies = [ "inout 0.2.5", ] +[[package]] +name = "clang-sys" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clru" version = "0.6.3" @@ -1172,6 +1251,24 @@ dependencies = [ "memchr", ] +[[package]] +name = "compression-codecs" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae36683101b2899f48bd31f8db9839437356188e3b1ff23096e73dab09ba8fe" +dependencies = [ + "bzip2", + "compression-core", + "flate2", + "memchr", +] + +[[package]] +name = "compression-core" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ebdda89edc534bf8d5dd2857562633b6495557e5846552ade994b99ed13c36a" + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -1181,6 +1278,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "configparser" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031ad3d167622974ed636505ae4556267ed4aa2aea0464122fa6bc9698a32825" + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -1322,6 +1425,19 @@ dependencies = [ "libc", ] +[[package]] +name = "core-graphics2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4416167a69126e617f8d0a214af0e3c1dbdeffcb100ddf72dcd1a1ac9893c146" +dependencies = [ + "bitflags 2.13.2", + "block", + "cfg-if", + "core-foundation 0.10.1", + "libc", +] + [[package]] name = "core-text" version = "21.0.0" @@ -1334,6 +1450,20 @@ dependencies = [ "libc", ] +[[package]] +name = "core-video" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139679cc63eb9504bdbe37e37874b0247136177655f0008588781e90863afa62" +dependencies = [ + "block", + "core-foundation 0.10.1", + "core-graphics2", + "io-surface", + "libc", + "metal", +] + [[package]] name = "core_detect" version = "1.0.0" @@ -1487,6 +1617,40 @@ dependencies = [ "cmov", ] +[[package]] +name = "darling" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 3.0.9", +] + +[[package]] +name = "darling_macro" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" +dependencies = [ + "darling_core", + "quote", + "syn 3.0.9", +] + [[package]] name = "dashmap" version = "6.2.1" @@ -1558,6 +1722,9 @@ name = "deranged" version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" +dependencies = [ + "serde_core", +] [[package]] name = "derive_more" @@ -1579,6 +1746,7 @@ dependencies = [ "quote", "rustc_version", "syn 2.0.119", + "unicode-xid", ] [[package]] @@ -1669,6 +1837,7 @@ checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ "bitflags 2.13.2", "block2 0.6.2", + "libc", "objc2 0.6.5", ] @@ -1878,6 +2047,17 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + [[package]] name = "errno" version = "0.3.14" @@ -3421,9 +3601,9 @@ dependencies = [ [[package]] name = "gpui-base" -version = "0.8.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5cd7de73d5b2d3d18b94a928abf343922091fa77bc472f77b7d2e7e8b1823a7" +checksum = "3cf698677b253118459f552fe15513858c669d79a25837a94e480db2ae330050" dependencies = [ "aho-corasick", "anyhow", @@ -3448,7 +3628,7 @@ dependencies = [ "raw-window-handle", "regex", "ropey", - "schemars", + "schemars 1.2.3", "serde", "serde_json", "smallvec", @@ -3462,9 +3642,9 @@ dependencies = [ [[package]] name = "gpui-component" -version = "0.8.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4097e161cc81e86323b439664be0cdd4f7c56148e867ed6f67fd72b966b6c2d1" +checksum = "bc8b7def8e74b0d822d3e96f6b28fb5a2c20eb7a83d30d22fa59ca8088d1159b" dependencies = [ "anyhow", "chrono", @@ -3493,11 +3673,10 @@ dependencies = [ "resvg 0.45.1", "ropey", "rust-i18n", - "schemars", + "schemars 1.2.3", "serde", "serde_json", "serde_repr", - "similar", "smallvec", "smol", "tracing", @@ -3536,17 +3715,15 @@ dependencies = [ "tree-sitter-typescript", "tree-sitter-yaml", "tree-sitter-zig", - "unicode-segmentation", - "unicode-width", "uuid", "windows 0.58.0", ] [[package]] name = "gpui-component-macros" -version = "0.8.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b98496748463b60ad69eab80cd91fc9b3807fed9a0e01ab4d5c159c949fd814" +checksum = "5c0c9398aaf99e595d450e38eb44ff0c500df8c332b4783d5b72022e69525359" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -3556,9 +3733,9 @@ dependencies = [ [[package]] name = "gpui-kit-assets" -version = "0.8.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b037e2fa43d53a567a8aa5be6b1a8931f416cbd010ceee8d4a3727a71e9b1d05" +checksum = "cb5fd2b154c96abe8ac49d8c431a24a764977128fce6a72a5f9f1e8802f64fe7" dependencies = [ "anyhow", "gpui-pre", @@ -3571,17 +3748,19 @@ dependencies = [ [[package]] name = "gpui-pre" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34f61c1cfd36fc9c436af09308c963822ae27a45a84feb21a77ba5c9e051f1c0" +checksum = "d7f0bc3ebba070f8981b3f8e905a12f47d27794a30d029e59cdb9edf7a4b3360" dependencies = [ "accesskit", "anyhow", "async-channel", "async-task", "backtrace", + "bindgen", "bitflags 2.13.2", "chrono", + "core-video", "ctor", "derive_more", "embed-resource", @@ -3597,6 +3776,7 @@ dependencies = [ "gpui-pre-shared-string", "gpui-pre-sum-tree", "gpui-pre-util", + "gpui-pre-util-macros", "heapless 0.9.3", "image", "inventory", @@ -3618,7 +3798,7 @@ dependencies = [ "raw-window-handle", "regex", "resvg 0.46.0", - "schemars", + "schemars 1.2.3", "seahash", "serde", "serde_json", @@ -3635,30 +3815,28 @@ dependencies = [ "waker-fn", "web-time", "windows 0.62.2", + "zed-font-kit", "zed-scap", ] [[package]] name = "gpui-pre-apple" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b52f58893fe1a0836464428dfad2b5eaf42c9c303a9638f4c2aced5a69072a15" +checksum = "bfdd914311cd12894367c8b9908947bb0c27fd42f8b9a5ff7a0730551a83fa4c" dependencies = [ "anyhow", "async-task", "block2 0.6.2", "cbindgen", "core-foundation 0.10.1", - "core-foundation-sys", "core-graphics 0.24.0", - "core-text", + "core-video", "derive_more", "dispatch2", "etagere", "foreign-types", - "futures", "gpui-pre", - "gpui-pre-collections", "gpui-pre-util", "image", "libc", @@ -3666,36 +3844,27 @@ dependencies = [ "mach2", "metal", "objc2 0.6.5", - "objc2-core-foundation", - "objc2-core-text", - "objc2-core-video", "objc2-foundation 0.3.2", - "objc2-metal 0.3.2", "objc2-quartz-core 0.3.2", - "objc2-security", "parking_lot", - "pathfinder_geometry", - "smallvec", - "thiserror 2.0.21", - "zed-font-kit", ] [[package]] name = "gpui-pre-collections" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "920c2f5b2f1a7813114d89f4841f26f6060d9c35d7c8a852a4205d1a767a7ce0" +checksum = "2c060863025dc3b8e90febad2d1f4ffd23a5d0dcedba39d3f6b7820ea2fdd3a0" dependencies = [ "gpui-pre-util", - "indexmap", + "indexmap 2.14.2", "rustc-hash 2.1.3", ] [[package]] name = "gpui-pre-derive-refineable" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "947395f26228296c0c79fb889d3687b205e552c25bbcdece216fb2394ea9bcd1" +checksum = "bc834f30f5f49791e214f1fde01a009c7de91c9cd0a9f31dabfed130ba39e6cf" dependencies = [ "proc-macro2", "quote", @@ -3704,12 +3873,14 @@ dependencies = [ [[package]] name = "gpui-pre-http-client" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56cdaa3f1a271162b7fede1d4557879eedb056e293cedbb82743600650b755e" +checksum = "5d2935cf82333da3f41774e5757837756408f01356197b41c817ad2666034453" dependencies = [ "anyhow", + "async-compression", "bytes", + "derive_more", "futures", "http", "http-body", @@ -3723,9 +3894,9 @@ dependencies = [ [[package]] name = "gpui-pre-http-client-tls" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7616a90ec92c9832bbc80ddab34e10fdf8d23520d5cbb0b432b73e4e9f6c812" +checksum = "9bbac58d44e80c2bfdd736cacd334e5c9446d5847cd584193ee3c8634c729c2b" dependencies = [ "log", "rustls", @@ -3735,9 +3906,9 @@ dependencies = [ [[package]] name = "gpui-pre-linux" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28213c3fde6f13e91ba0b74b90cbaadec9373e36a031eda98561d31059870f3" +checksum = "b1131746fad5c87b5de74dc9c73105655b0c820a2dd4bb247586573e7cf5720e" dependencies = [ "accesskit", "accesskit_unix", @@ -3780,9 +3951,9 @@ dependencies = [ [[package]] name = "gpui-pre-macos" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c988b7e49775cc8542dbe48d5a10e073d8e898a023ef3ff3d24f33363e9863" +checksum = "0d756813ff1cd741a502af60fd18869e0677795936d7349642b41c49f43120c0" dependencies = [ "accesskit", "accesskit_macos", @@ -3792,6 +3963,8 @@ dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", "core-graphics 0.24.0", + "core-text", + "core-video", "ctor", "dispatch2", "foreign-types", @@ -3807,22 +3980,26 @@ dependencies = [ "objc", "objc2 0.6.5", "objc2-app-kit 0.3.2", - "objc2-core-video", + "objc2-core-graphics", + "objc2-core-media", "objc2-foundation 0.3.2", + "objc2-screen-capture-kit", "objc2-user-notifications", "parking_lot", + "pathfinder_geometry", "raw-window-handle", "semver", "smallvec", "strum", "uuid", + "zed-font-kit", ] [[package]] name = "gpui-pre-macros" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb80dac5e1f6b8cde1d2740389e77dfc0071bfcc81fba5526d5dc90f68171cc" +checksum = "d2ad26ca759364694cb55487bebff4c1b7dd6accab49990ff3cda6f7a818a9f4" dependencies = [ "heck 0.5.0", "proc-macro-crate", @@ -3832,10 +4009,21 @@ dependencies = [ ] [[package]] -name = "gpui-pre-platform" -version = "0.3.9" +name = "gpui-pre-perf" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbdbdac421178313fed8929fe95b42634a266a735079fcf03ff231bc2ccb2c5e" +checksum = "2fcb288a506a476b6cbf97e6ec1cc0118db43f0ca91087588afa1c2d8cd4f842" +dependencies = [ + "gpui-pre-collections", + "serde", + "serde_json", +] + +[[package]] +name = "gpui-pre-platform" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e200b7b78836f1a0fc70767d971768e88f29d8b91b697285c15fb8e373635a3e" dependencies = [ "anyhow", "console_error_panic_hook", @@ -3848,9 +4036,9 @@ dependencies = [ [[package]] name = "gpui-pre-refineable" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237703b3b219d11adb50dd33bb0fcca3d34fc001623b3143e72cb051d0fb3777" +checksum = "4042345bb5bd3ecbc5d15b21ed128154f462a992058d7038cd397631f5462338" dependencies = [ "gpui-pre-derive-refineable", ] @@ -3907,9 +4095,9 @@ dependencies = [ [[package]] name = "gpui-pre-reqwest-client" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c2e70dc8550d60324b1eb3f3d08b4ccf20a8b577a9a42732dd3bafb2363bc0" +checksum = "894b8d8618c92cbd4da28a04dd3fcf3c0e0607074fa99416a864ac9b63b18aae" dependencies = [ "anyhow", "bytes", @@ -3925,9 +4113,9 @@ dependencies = [ [[package]] name = "gpui-pre-scheduler" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83f342555282a59ed8dd58dd7e0a920524fa8ef6aa8c8f30e2edb7019a8f72cb" +checksum = "f4acd73345bc3c09f1b98c1b21eb4459ad8336f89bb2edcef619e11c5a08456e" dependencies = [ "async-task", "backtrace", @@ -3942,32 +4130,33 @@ dependencies = [ [[package]] name = "gpui-pre-shared-string" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71f488bf4780735f6b2dad24f8db1e3d9e2593de0ec298e3574c788f571b81c4" +checksum = "477529fd5aa90bff969785ee9a3938484d94aa5101cdf7b84719629c0345f98a" dependencies = [ - "schemars", + "schemars 1.2.3", "serde", "smol_str", ] [[package]] name = "gpui-pre-sum-tree" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aadb3bd3da22617e2158b1842f5a9c29c1626c926ad0686163ced1a009963ff3" +checksum = "9ec0ec176d576b82aed716cf47185856b54ea9528caaf9d01787024689bfd824" dependencies = [ "gpui-pre-ztracing", "heapless 0.9.3", + "log", "rayon", "tracing", ] [[package]] name = "gpui-pre-util" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a04ec9abd7a87ac05a221f4629403831c44c17123bc33cb5d271a6303259b340" +checksum = "e1635ae7d0b05400bfa211ddef6c67dc8d9f223c463022c2b3bf2c1c14c6044f" dependencies = [ "anyhow", "log", @@ -3975,13 +4164,23 @@ dependencies = [ ] [[package]] -name = "gpui-pre-web" -version = "0.3.9" +name = "gpui-pre-util-macros" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedd55b99dc77e28df8202b0ea868aa5c90fda4aefff539ea21087d7c2ff4bfb" +checksum = "01486fce7722e5d7d7e7bb71c719dfdcc6ed917112bdc7c56d0556fdb60d10ab" +dependencies = [ + "gpui-pre-perf", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "gpui-pre-web" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "184776d0763e6889dd2842dcb1204c15055945f2bdfe926b5ef57bdbd1952a65" dependencies = [ "anyhow", - "async-channel", "console_error_panic_hook", "futures", "gpui-pre", @@ -4006,9 +4205,9 @@ dependencies = [ [[package]] name = "gpui-pre-wgpu" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b1cdb26c1503bf9662ee8fbc5ab0b44b2deeee4b5c12dc67491ba6fb5fc544b" +checksum = "439c5421cafe1a7cf68d0c0ae5cc82b26fad6b0e6345ac98d20acaf1f2463914" dependencies = [ "anyhow", "bytemuck", @@ -4033,9 +4232,9 @@ dependencies = [ [[package]] name = "gpui-pre-windows" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513d4f0fc7d596d3bdef2a73a524ffb83dabc95bf484f2855a698e7f431290a9" +checksum = "371f9bb13f97e3bea2f8b8e5e81232bb74d735153c244ae67f7400e743925b1c" dependencies = [ "accesskit", "accesskit_windows", @@ -4062,20 +4261,34 @@ dependencies = [ ] [[package]] -name = "gpui-pre-ztracing" -version = "0.3.9" +name = "gpui-pre-zlog" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17bfd6bd1f77ba5c58181fa6f82fc7a63015a1c58bef94a76e5acb9f8e42572" +checksum = "3bbe5b98630ef4bfed5a7105ec1062e78d571912bc491388f07ea22f2457c18b" dependencies = [ + "anyhow", + "chrono", + "gpui-pre-collections", + "log", +] + +[[package]] +name = "gpui-pre-ztracing" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f806400f6bda1fdd9fc627e158c0e44fb0c4b7767582a3621efcf92f4a850db7" +dependencies = [ + "gpui-pre-zlog", "gpui-pre-ztracing-macro", "tracing", + "tracing-subscriber", ] [[package]] name = "gpui-pre-ztracing-macro" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0d73e1bc02eef886a5947f41b8512708792e9e5d3053d181843311a487f96f" +checksum = "d337c9acf058238e45ce0570d8a5958439242889492f91ae2d8e324211a61ccd" [[package]] name = "granit-parser" @@ -4099,7 +4312,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap", + "indexmap 2.14.2", "slab", "tokio", "tokio-util", @@ -4140,6 +4353,12 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.5" @@ -4536,6 +4755,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.1.0" @@ -4624,6 +4849,17 @@ version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e44b0a4eaa4c82f441d50a963f2d5f05a787240aeee097597033e72accfd22f" +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.14.2" @@ -4717,6 +4953,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "io-surface" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "554b8c5d64ec09a3a520fe58e4d48a73e00ff32899cdcbe32a4877afd4968b8e" +dependencies = [ + "cgl", + "core-foundation 0.10.1", + "core-foundation-sys", + "leaky-cow", +] + [[package]] name = "ipnet" version = "2.12.2" @@ -4974,12 +5222,33 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" +[[package]] +name = "leak" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd100e01f1154f2908dfa7d02219aeab25d0b9c7fa955164192e3245255a0c73" + +[[package]] +name = "leaky-cow" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a8225d44241fd324a8af2806ba635fc7c8a7e9a7de4d5cf3ef54e71f5926fc" +dependencies = [ + "leak", +] + [[package]] name = "lebe" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" +[[package]] +name = "libbz2-rs-sys" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" + [[package]] name = "libc" version = "0.2.191" @@ -5084,6 +5353,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" dependencies = [ "serde_core", + "value-bag", ] [[package]] @@ -5194,9 +5464,12 @@ dependencies = [ [[package]] name = "mach2" -version = "0.6.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b" +checksum = "6a1b95cd5421ec55b445b5ae102f5ea0e768de1f82bd3001e11f426c269c3aea" +dependencies = [ + "libc", +] [[package]] name = "malloc_buf" @@ -5332,6 +5605,12 @@ dependencies = [ "unicase", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -5395,7 +5674,7 @@ dependencies = [ "half", "hashbrown 0.16.1", "hexf-parse", - "indexmap", + "indexmap 2.14.2", "libm", "log", "num-traits", @@ -5406,6 +5685,58 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "native-theme" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea89548b5c74493eeda312d5b1dad2c3c5f3bb35076dfef7c9a5b85c5cf140bf" +dependencies = [ + "arc-swap", + "ashpd", + "async-trait", + "block2 0.6.2", + "configparser", + "fontdb", + "inventory", + "native-theme-derive", + "objc2 0.6.5", + "objc2-app-kit 0.3.2", + "objc2-core-foundation", + "objc2-core-text", + "objc2-foundation 0.3.2", + "pollster 1.0.1", + "serde", + "serde_with", + "toml 1.1.8+spec-1.1.0", + "unicase", + "windows 0.62.2", + "zbus", +] + +[[package]] +name = "native-theme-derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cddcfe1cc7b75a3ef362b242343aabf8fd9053ed9b4c72bcf4af4a45989b4d1" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "native-theme-gpui" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5002c99b80209a2da63224a8ffa6a6b95feb836a1098c1189de47f69f3a40053" +dependencies = [ + "gpui-base", + "gpui-component", + "gpui-pre", + "image", + "native-theme", +] + [[package]] name = "ndk-context" version = "0.1.1" @@ -5448,6 +5779,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "nom" version = "8.0.0" @@ -5540,7 +5881,7 @@ name = "nostr-gossip-memory" version = "0.45.1" source = "git+https://github.com/rust-nostr/nostr#20096765b95f4840dd3df66cad49db35e9634462" dependencies = [ - "indexmap", + "indexmap 2.14.2", "lru", "nostr", "nostr-gossip", @@ -5855,6 +6196,28 @@ dependencies = [ "objc2-foundation 0.3.2", ] +[[package]] +name = "objc2-core-audio" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1eebcea8b0dbff5f7c8504f3107c68fc061a3eb44932051c8cf8a68d969c3b2" +dependencies = [ + "dispatch2", + "objc2 0.6.5", + "objc2-core-audio-types", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-core-audio-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.5", +] + [[package]] name = "objc2-core-data" version = "0.2.2" @@ -5885,7 +6248,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags 2.13.2", + "block2 0.6.2", "dispatch2", + "libc", "objc2 0.6.5", ] @@ -5924,6 +6289,31 @@ dependencies = [ "objc2-foundation 0.3.2", ] +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2 0.6.5", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-core-media" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ec576860167a15dd9fce7fbee7512beb4e31f532159d3482d1f9c6caedf31d" +dependencies = [ + "bitflags 2.13.2", + "dispatch2", + "objc2 0.6.5", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", + "objc2-core-video", +] + [[package]] name = "objc2-core-text" version = "0.3.2" @@ -5931,6 +6321,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ "bitflags 2.13.2", + "block2 0.6.2", + "libc", "objc2 0.6.5", "objc2-core-foundation", "objc2-core-graphics", @@ -5947,7 +6339,6 @@ dependencies = [ "objc2-core-foundation", "objc2-core-graphics", "objc2-io-surface", - "objc2-metal 0.3.2", ] [[package]] @@ -6043,12 +6434,17 @@ dependencies = [ ] [[package]] -name = "objc2-security" +name = "objc2-screen-capture-kit" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" +checksum = "74b7c5390f477482f001bc354d6571a70db7e4f8d5288e860c45521fbce11394" dependencies = [ - "objc2-core-foundation", + "block2 0.6.2", + "dispatch2", + "objc2 0.6.5", + "objc2-core-graphics", + "objc2-core-media", + "objc2-foundation 0.3.2", ] [[package]] @@ -6060,6 +6456,7 @@ dependencies = [ "bitflags 2.13.2", "block2 0.6.2", "objc2 0.6.5", + "objc2-core-location", "objc2-foundation 0.3.2", ] @@ -6483,6 +6880,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" +[[package]] +name = "pollster" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6355899e1c9462875b6757c79f3caa011a1fdae12bbb1a2e72dd1f234f8336" + [[package]] name = "poly1305" version = "0.8.0" @@ -6526,6 +6929,8 @@ checksum = "af3fb618632874fb76937c2361a7f22afd393c982a2165595407edc75b06d3c1" dependencies = [ "atomic", "crossbeam-queue", + "futures", + "log", "parking_lot", "pin-project", "pollster 0.2.5", @@ -6569,6 +6974,16 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.119", +] + [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -7503,6 +7918,18 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "schemars" version = "1.2.3" @@ -7510,7 +7937,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab508826f74a77ca9d5aba6ff19b522583ee3eaf28a19384ff3d0e5835fadf6e" dependencies = [ "dyn-clone", - "indexmap", + "indexmap 2.14.2", "ref-cast", "schemars_derive", "serde", @@ -7709,6 +8136,15 @@ dependencies = [ "syn 3.0.9", ] +[[package]] +name = "serde_fmt" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e497af288b3b95d067a23a4f749f2861121ffcb2f6d8379310dcda040c345ed" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_json" version = "1.0.154" @@ -7716,7 +8152,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "foldhash 0.2.0", - "indexmap", + "indexmap 2.14.2", "itoa", "memchr", "serde", @@ -7765,6 +8201,39 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9adc193c780ef8f159aee8b61e2d5801aaa555e6eb0947fe45530ec506296f" +dependencies = [ + "base64 0.23.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.2", + "jiff", + "schemars 0.9.0", + "schemars 1.2.3", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e17bbc68e28663bbbb90df47e058aa7eda4fb445b89fe70457bb94fbccf6e49" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 3.0.9", +] + [[package]] name = "settings" version = "0.2.0-alpha" @@ -7840,6 +8309,12 @@ dependencies = [ "dirs 6.0.0", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "shlex" version = "2.0.1" @@ -7867,6 +8342,7 @@ dependencies = [ "gpui-pre-platform", "gpui-pre-reqwest-client", "metadata", + "native-theme-gpui", "paths", "settings", "signed_state", @@ -7982,16 +8458,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" -[[package]] -name = "similar" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" -dependencies = [ - "bstr", - "unicode-segmentation", -] - [[package]] name = "simplecss" version = "0.2.2" @@ -8169,6 +8635,12 @@ dependencies = [ "quote", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "strum" version = "0.28.0" @@ -8196,6 +8668,85 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "sval" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b81b254da21fe1fcc4e3a74fe39b46e25e3a863078f8b71c954d47f84889dbc6" + +[[package]] +name = "sval_buffer" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50be352d2822ffafb59e3e2ddac9d5ee60f2eeadbb7b5a2a951b9f3651e87a6f" +dependencies = [ + "sval", + "sval_ref", + "zerocopy", +] + +[[package]] +name = "sval_dynamic" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048ca293b998d9a45659159f94a64063791e74cdc670164943dbb434405573d" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_fmt" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6b5888e40f80568733217f27b7317b845f463400ced36c424b1a804730e53b2" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_json" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17664d6bb6b74947afaab9d7c991caa9bf5638d4dee16fcbef637f440796049" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_nested" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07c059969ca5ca163ea7fef6c9661758973d17691aba92abdcf5c428f4ec122c" +dependencies = [ + "sval", + "sval_buffer", + "sval_ref", +] + +[[package]] +name = "sval_ref" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d6b29ff568c85c87561807f51d2adfff4b6016c6363133f7cd1652a12548f3" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_serde" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f33ec9edc42b12764d5c90ca0a1d84189c6bde81ed27507f1e661c6e4e05853" +dependencies = [ + "serde_core", + "sval", + "sval_nested", +] + [[package]] name = "svg_fmt" version = "0.4.5" @@ -8470,6 +9021,7 @@ dependencies = [ "powerfmt", "serde_core", "time-core", + "time-macros", ] [[package]] @@ -8478,6 +9030,16 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -8646,7 +9208,7 @@ version = "1.1.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d" dependencies = [ - "indexmap", + "indexmap 2.14.2", "serde_core", "serde_spanned 1.1.2", "toml_datetime 1.1.2+spec-1.1.0", @@ -8679,7 +9241,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap", + "indexmap 2.14.2", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -8693,7 +9255,7 @@ version = "0.25.17+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3641d5bbb5349a79e1020a242d251efbc546ad8048d133958323ce9c40a9c9c" dependencies = [ - "indexmap", + "indexmap 2.14.2", "toml_datetime 1.1.2+spec-1.1.0", "toml_parser", "winnow 1.0.4", @@ -9228,6 +9790,12 @@ dependencies = [ "utf-8", ] +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.20.1" @@ -9338,6 +9906,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "universal-hash" version = "0.5.1" @@ -9476,6 +10050,42 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "value-bag" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2799ffb329a792ecfd902b71306c8a815a6ef1c0470fa9953a6aa4d4cecbe511" +dependencies = [ + "value-bag-serde1", + "value-bag-sval2", +] + +[[package]] +name = "value-bag-serde1" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0941feceafbe7a8f59ea1096d45b97002884a41306315ad797b3684b63a81d8c" +dependencies = [ + "erased-serde", + "serde_core", + "serde_fmt", +] + +[[package]] +name = "value-bag-sval2" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839752af8179287d27eb2b94164641b1ede9e60ab7424163388dc21ebd0508cd" +dependencies = [ + "sval", + "sval_buffer", + "sval_dynamic", + "sval_fmt", + "sval_json", + "sval_ref", + "sval_serde", +] + [[package]] name = "version_check" version = "0.9.5" @@ -9844,7 +10454,7 @@ dependencies = [ "cfg_aliases", "document-features", "hashbrown 0.16.1", - "indexmap", + "indexmap 2.14.2", "log", "naga", "once_cell", diff --git a/Cargo.toml b/Cargo.toml index 83a1907..0050ba5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,13 +9,16 @@ edition = "2024" publish = false [workspace.dependencies] -gpui = { package = "gpui-pre", version = "0.3.9" } -gpui_platform = { package = "gpui-pre-platform", version = "0.3.9", features = ["font-kit", "x11", "wayland"] } -reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.9" } +gpui = { package = "gpui-pre", version = "0.3.8" } +gpui_platform = { package = "gpui-pre-platform", version = "0.3.8", features = ["font-kit", "x11", "wayland"] } +reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.8" } -# GPUI Kit -gpui-component = { version = "0.8", features = ["tree-sitter-languages"] } -gpui-base = "0.8" +# GPUI Kit; exact pins keep the graph on the gpui-pre 0.3.8 closure that +# native-theme-gpui 0.6.1 is verified against (0.7.3 and 0.8 pin 0.3.9). +gpui-component = { version = "=0.7.1", features = ["tree-sitter-languages"] } +gpui-base = "=0.7.1" + +native-theme-gpui = { version = "0.6.1", default-features = false, features = ["system-fonts"] } dock = { path = "crates/dock" } settings = { path = "crates/settings" } diff --git a/crates/dock/src/dock_area.rs b/crates/dock/src/dock_area.rs index 67617c1..b3c3176 100644 --- a/crates/dock/src/dock_area.rs +++ b/crates/dock/src/dock_area.rs @@ -1,4 +1,5 @@ use std::cell::Cell; +use std::ops::Deref as _; use std::rc::Rc; use std::sync::Arc; @@ -172,7 +173,7 @@ impl SignedDockSkin { .on_drag(ResizePanel, move |info, _, _, cx| { cx.stop_propagation(); shared.resizing_dock().set(Some(placement)); - cx.new(|_| info.clone()) + cx.new(|_| info.deref().clone()) }) } } diff --git a/crates/workspace/src/views/sidebar/settings_dialog.rs b/crates/workspace/src/views/sidebar/settings_dialog.rs index e986a3c..2518277 100644 --- a/crates/workspace/src/views/sidebar/settings_dialog.rs +++ b/crates/workspace/src/views/sidebar/settings_dialog.rs @@ -1,22 +1,15 @@ -use std::cell::Cell; use std::path::PathBuf; use std::rc::Rc; use gpui::prelude::*; -use gpui::{ - AnyWindowHandle, App, Entity, PathPromptOptions, SharedString, Subscription, Window, div, px, -}; +use gpui::{App, Entity, PathPromptOptions, SharedString, Subscription, Window, div, px}; use gpui_component::button::{Button, ButtonVariants}; -use gpui_component::input::{ - Input, InputEvent, InputState, NumberInput, NumberInputEvent, StepAction, -}; +use gpui_component::input::{Input, InputState}; use gpui_component::select::{Select, SelectEvent, SelectState}; use gpui_component::separator::Separator; -use gpui_component::setting::NumberFieldOptions; use gpui_component::switch::Switch; use gpui_component::{ - ActiveTheme, IconName, IndexPath, Sizable, Theme, ThemeMode, ThemeRegistry, WindowExt, h_flex, - v_flex, + ActiveTheme, IconName, IndexPath, Sizable, Theme, ThemeMode, WindowExt, h_flex, v_flex, }; use settings::{AppearanceMode, EventFetchingStrategy, Settings, SettingsStore}; use signed_ui::{SelectOption, setting_block, setting_row}; @@ -31,34 +24,10 @@ fn selected_index(options: &[SelectOption], value: &str) -> Option { .map(|row| IndexPath::default().row(row)) } -/// Registered themes split into light and dark options, light first. -fn theme_options(cx: &App) -> (Vec, Vec) { - let registry = ThemeRegistry::global(cx); - let mut light = Vec::new(); - let mut dark = Vec::new(); - for config in registry.themes().values() { - let name = config.name.clone(); - if config.mode.is_dark() { - dark.push(SelectOption::new(name.clone(), name)); - } else { - light.push(SelectOption::new(name.clone(), name)); - } - } - light.sort_by(|a, b| a.label().as_ref().cmp(b.label().as_ref())); - dark.sort_by(|a, b| a.label().as_ref().cmp(b.label().as_ref())); - (light, dark) -} - /// Created once when the dialog opens, so control state survives re-renders. struct SettingsControls { appearance: Entity>>, event_fetching: Entity>>, - light_theme: Entity>>, - dark_theme: Entity>>, - font_size: Entity, - mono_font_size: Entity, - radius: Entity, - radius_lg: Entity, grasp_server_input: Entity, /// The effective create-repository folder, shown in a disabled input. default_folder: Entity, @@ -107,38 +76,9 @@ impl SettingsControls { ) }); - let (light_options, dark_options) = theme_options(cx); - let light_theme = cx.new(|cx| { - SelectState::new( - light_options.clone(), - selected_index(&light_options, &settings.theme.light_theme), - window, - cx, - ) - }); - let dark_theme = cx.new(|cx| { - SelectState::new( - dark_options.clone(), - selected_index(&dark_options, &settings.theme.dark_theme), - window, - cx, - ) - }); - - let font_size = cx.new(|cx| { - InputState::new(window, cx).default_value(settings.theme.font_size.to_string()) - }); - let mono_font_size = cx.new(|cx| { - InputState::new(window, cx).default_value(settings.theme.mono_font_size.to_string()) - }); - let radius = cx - .new(|cx| InputState::new(window, cx).default_value(settings.theme.radius.to_string())); - let radius_lg = cx.new(|cx| { - InputState::new(window, cx).default_value(settings.theme.radius_lg.to_string()) - }); - let grasp_server_input = cx.new(|cx| InputState::new(window, cx).placeholder("wss://relay.example.com")); + let default_folder = cx.new(|cx| { let folder = settings .create_repository @@ -178,118 +118,9 @@ impl SettingsControls { } })); - subscriptions.push(cx.subscribe(&light_theme, |_, event, cx| { - if let SelectEvent::Confirm(Some(value)) = event { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit( - |settings| settings.theme.light_theme = value.to_string(), - cx, - ); - }); - apply_theme(cx); - } - })); - - subscriptions.push(cx.subscribe(&dark_theme, |_, event, cx| { - if let SelectEvent::Confirm(Some(value)) = event { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit(|settings| settings.theme.dark_theme = value.to_string(), cx); - }); - apply_theme(cx); - } - })); - - wire_number_input( - &font_size, - &mut subscriptions, - window.window_handle(), - cx, - NumberFieldOptions { - min: 10., - max: 32., - ..Default::default() - }, - settings.theme.font_size as f64, - |value, cx| { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit(|settings| settings.theme.font_size = value as f32, cx); - }); - apply_theme(cx); - }, - ); - - wire_number_input( - &mono_font_size, - &mut subscriptions, - window.window_handle(), - cx, - NumberFieldOptions { - min: 8., - max: 32., - ..Default::default() - }, - settings.theme.mono_font_size as f64, - |value, cx| { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit(|settings| settings.theme.mono_font_size = value as f32, cx); - }); - apply_theme(cx); - }, - ); - - wire_number_input( - &radius, - &mut subscriptions, - window.window_handle(), - cx, - NumberFieldOptions { - min: 0., - max: 24., - ..Default::default() - }, - settings.theme.radius as f64, - |value, cx| { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit(|settings| settings.theme.radius = value as f32, cx); - }); - apply_theme(cx); - }, - ); - - wire_number_input( - &radius_lg, - &mut subscriptions, - window.window_handle(), - cx, - NumberFieldOptions { - min: 0., - max: 24., - ..Default::default() - }, - settings.theme.radius_lg as f64, - |value, cx| { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit(|settings| settings.theme.radius_lg = value as f32, cx); - }); - apply_theme(cx); - }, - ); - Self { appearance, event_fetching, - light_theme, - dark_theme, - font_size, - mono_font_size, - radius, - radius_lg, grasp_server_input, default_folder, _subscriptions: subscriptions, @@ -320,8 +151,6 @@ fn settings_view(controls: &SettingsControls, cx: &mut App) -> impl IntoElement .w_full() .child(appearance_section(controls, cx)) .child(Separator::horizontal()) - .child(theme_section(&settings, controls, cx)) - .child(Separator::horizontal()) .child(tab_bar_section(&settings, cx)) .child(Separator::horizontal()) .child(grasp_servers_section(&settings, controls, cx)) @@ -350,76 +179,6 @@ fn event_fetching_section(controls: &SettingsControls, cx: &App) -> impl IntoEle )) } -fn theme_section(settings: &Settings, controls: &SettingsControls, cx: &App) -> impl IntoElement { - v_flex() - .gap_3() - .w_full() - .child(setting_row( - cx, - "Light Theme", - "The theme to use when the appearance is light.", - Select::new(&controls.light_theme).w_full(), - )) - .child(setting_row( - cx, - "Dark Theme", - "The theme to use when the appearance is dark.", - Select::new(&controls.dark_theme).w_full(), - )) - .child(setting_row( - cx, - "UI Font Size", - "Font size for the UI.", - NumberInput::new(&controls.font_size).w_full(), - )) - .child(setting_row( - cx, - "Editor Font Size", - "Font size for editor text.", - NumberInput::new(&controls.mono_font_size).w_full(), - )) - .child(setting_row( - cx, - "Corner Radius", - "The corner radius for UI elements.", - NumberInput::new(&controls.radius).w_full(), - )) - .child(setting_row( - cx, - "Large Corner Radius", - "The corner radius for large UI elements (dialogs, notifications).", - NumberInput::new(&controls.radius_lg).w_full(), - )) - .child(setting_row( - cx, - "Focus Ring", - "Draw a ring around focused controls.", - Switch::new("focus-ring") - .checked(settings.theme.focus_ring) - .on_click(move |checked: &bool, _window, cx| { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit(|settings| settings.theme.focus_ring = *checked, cx); - }); - apply_theme(cx); - }), - )) - .child(setting_row( - cx, - "Shadows", - "The shadow effect for UI elements.", - Switch::new("shadows") - .checked(settings.theme.shadow) - .on_click(move |checked: &bool, _window, cx| { - let store = SettingsStore::global(cx); - store.update(cx, |store, cx| { - store.edit(|settings| settings.theme.shadow = *checked, cx); - }); - apply_theme(cx); - }), - )) -} - /// Tab bar chrome, such as its next/previous tab buttons. fn tab_bar_section(settings: &Settings, cx: &App) -> impl IntoElement { v_flex().w_full().gap_3().child(setting_row( @@ -724,79 +483,6 @@ fn choose_default_folder(default_folder: &Entity, window: &mut Windo .detach(); } -/// Step actions clamp and persist the value; typed changes parse, clamp and persist. -fn wire_number_input( - state: &Entity, - subscriptions: &mut Vec, - window_handle: AnyWindowHandle, - cx: &mut App, - options: NumberFieldOptions, - initial: f64, - on_change: impl Fn(f64, &mut App) + 'static, -) { - let on_change = Rc::new(on_change); - let initial_value = Rc::new(Cell::new(initial)); - let (min, max, step) = (options.min, options.max, options.step); - - subscriptions.push(cx.subscribe(&state.clone(), { - let state = state.clone(); - let initial_value = initial_value.clone(); - let on_change = on_change.clone(); - move |_, event: &NumberInputEvent, cx| { - let NumberInputEvent::Step(action) = event; - let value = state.read(cx).value(); - if let Ok(value) = value.parse::() { - let new_value = match action { - StepAction::Increment => value + step, - StepAction::Decrement => value - step, - }; - let clamped = new_value.clamp(min, max); - window_handle - .update(cx, |_, window, cx| { - state.update(cx, |input, cx| { - input.set_value(SharedString::from(clamped.to_string()), window, cx); - }); - }) - .ok(); - initial_value.set(clamped); - on_change(clamped, cx); - } - } - })); - - subscriptions.push(cx.subscribe(&state.clone(), { - let state = state.clone(); - let initial_value = initial_value.clone(); - let on_change = on_change.clone(); - move |_, event: &InputEvent, cx| { - if matches!(event, InputEvent::Change) { - let value = state.read(cx).value(); - if value == initial_value.get().to_string() { - return; - } - if let Ok(parsed) = value.parse::() { - let clamped = parsed.clamp(min, max); - initial_value.set(clamped); - on_change(clamped, cx); - if clamped != parsed { - window_handle - .update(cx, |_, window, cx| { - state.update(cx, |input, cx| { - input.set_value( - SharedString::from(clamped.to_string()), - window, - cx, - ); - }); - }) - .ok(); - } - } - } - } - })); -} - fn apply_appearance(appearance: AppearanceMode, cx: &mut App) { match appearance { AppearanceMode::System => Theme::sync_system_appearance(None, cx), @@ -804,33 +490,3 @@ fn apply_appearance(appearance: AppearanceMode, cx: &mut App) { AppearanceMode::Dark => Theme::change(ThemeMode::Dark, None, cx), } } - -fn apply_theme(cx: &mut App) { - let store = SettingsStore::global(cx); - let settings = store.read(cx).settings().theme.clone(); - - let registry = ThemeRegistry::global(cx); - let light_config = registry - .themes() - .get(settings.light_theme.as_str()) - .cloned(); - let dark_config = registry.themes().get(settings.dark_theme.as_str()).cloned(); - let mode = Theme::global(cx).mode; - - let theme = Theme::global_mut(cx); - theme.radius = px(settings.radius); - theme.radius_lg = px(settings.radius_lg); - theme.focus_ring = settings.focus_ring; - theme.shadow = settings.shadow; - theme.font_size = px(settings.font_size); - theme.mono_font_size = px(settings.mono_font_size); - if let Some(config) = light_config { - theme.light_theme = config; - } - if let Some(config) = dark_config { - theme.dark_theme = config; - } - - // Re-apply the active mode so the updated configs take effect. - Theme::change(mode, None, cx); -} diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index 92623b9..045883d 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -38,6 +38,7 @@ gpui.workspace = true gpui_platform.workspace = true dock = { workspace = true } gpui-component.workspace = true +native-theme-gpui.workspace = true reqwest_client.workspace = true tracing.workspace = true tracing-subscriber.workspace = true diff --git a/desktop/src/main.rs b/desktop/src/main.rs index c732e4a..3130afc 100644 --- a/desktop/src/main.rs +++ b/desktop/src/main.rs @@ -5,6 +5,7 @@ use dock::TAB_BAR_HEIGHT; use gpui::*; use gpui_component::{Theme, ThemeMode, ThemeRegistry, theme}; use gpui_platform::application; +use native_theme_gpui::{SystemTheme, apply_system_theme}; use settings::{AppearanceMode, SettingsStore}; actions!(signed, [Quit]); @@ -25,47 +26,51 @@ fn main() { // The persisted settings must load before the theme is applied. let store = cx.new(|cx| SettingsStore::new(paths::settings_file(), cx)); SettingsStore::set_global(store.clone(), cx); - let settings = store.read(cx).settings().clone(); + let settings = store.read(cx).settings().clone(); let registry = ThemeRegistry::global_mut(cx); + for (name, content) in Assets.themes() { if let Err(err) = registry.load_themes_from_str(&content) { tracing::error!("Failed to load theme {name}: {err}"); } } - let light_theme = registry - .themes() - .get(settings.theme.light_theme.as_str()) - .cloned(); - let dark_theme = registry - .themes() - .get(settings.theme.dark_theme.as_str()) - .cloned(); - let theme = Theme::global_mut(cx); - theme.radius = px(settings.theme.radius); - theme.radius_lg = px(settings.theme.radius_lg); - theme.focus_ring = settings.theme.focus_ring; - theme.shadow = settings.theme.shadow; - theme.font_size = px(settings.theme.font_size); - theme.mono_font_size = px(settings.theme.mono_font_size); + match SystemTheme::from_system() { + Ok(system) => apply_system_theme(&system, cx), + Err(error) => { + tracing::warn!("native theme unavailable ({error})"); - if let Some(light) = light_theme { - theme.light_theme = light; - } else { - tracing::warn!( - "{} theme is missing from the registry", - settings.theme.light_theme - ); - } + let light_theme = registry + .themes() + .get(settings.theme.light_theme.as_str()) + .cloned(); - if let Some(dark) = dark_theme { - theme.dark_theme = dark; - } else { - tracing::warn!( - "{} theme is missing from the registry", - settings.theme.dark_theme - ); + let dark_theme = registry + .themes() + .get(settings.theme.dark_theme.as_str()) + .cloned(); + + let theme = Theme::global_mut(cx); + theme.radius = px(settings.theme.radius); + theme.radius_lg = px(settings.theme.radius_lg); + theme.focus_ring = settings.theme.focus_ring; + theme.shadow = settings.theme.shadow; + theme.font_size = px(settings.theme.font_size); + theme.mono_font_size = px(settings.theme.mono_font_size); + + if let Some(light) = light_theme { + theme.light_theme = light; + } else { + tracing::warn!("{} theme is missing", settings.theme.light_theme); + } + + if let Some(dark) = dark_theme { + theme.dark_theme = dark; + } else { + tracing::warn!("{} theme is missing", settings.theme.dark_theme); + } + } } match settings.appearance { @@ -76,6 +81,7 @@ fn main() { std::fs::create_dir_all(paths::nostr_dir()).ok(); std::fs::create_dir_all(paths::repos_dir()).ok(); + signed_state::init( paths::nostr_dir(), paths::repos_dir().clone(), diff --git a/docs/NATIVE-THEME-MIGRATION.md b/docs/NATIVE-THEME-MIGRATION.md index 4136611..072e3a5 100644 --- a/docs/NATIVE-THEME-MIGRATION.md +++ b/docs/NATIVE-THEME-MIGRATION.md @@ -58,7 +58,8 @@ Verified against crates.io and the upstream repo on 2026-10-21: | --- | --- | | Latest connector | `native-theme-gpui` 0.6.1 (2026-10-09); upstream `main` is the same | | Connector requires | `gpui-component ^0.7.1`, `gpui-base ^0.7.1`, `gpui-pre ^0.3.8`, Rust ≥ 1.95 | -| `gpui-component` 0.7.x pins | `gpui-pre =0.3.8` | +| `gpui-component`/`gpui-base` 0.7.1 pin | `gpui-pre =0.3.8` | +| `gpui-component`/`gpui-base` 0.7.3 pin | `gpui-pre =0.3.9` | | `gpui-component` 0.8.0 pins | `gpui-pre =0.3.9` (0.8.0 published 2026-10-19) | | This branch | moved 0.7.1 / 0.3.8 → 0.8 / 0.3.9 in `eb4fbb0` ("chore: update deps") | @@ -79,23 +80,25 @@ gpui = { package = "gpui-pre", version = "0.3.8" } gpui_platform = { package = "gpui-pre-platform", version = "0.3.8", features = ["font-kit", "x11", "wayland"] } reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.8" } -gpui-component = { version = "0.7.1", features = ["tree-sitter-languages"] } -gpui-base = "0.7.1" +gpui-component = { version = "=0.7.1", features = ["tree-sitter-languages"] } +gpui-base = "=0.7.1" -native-theme = "0.6.1" -native-theme-gpui = "0.6.1" +native-theme-gpui = { version = "0.6.1", default-features = false, features = ["system-fonts"] } ``` -- This is exactly the state of `master` before `eb4fbb0`, which is also the - version set the connector was verified against (2026-10-08 stamp) and that - its nightly dependency canary exercises. `"0.7.1"` is a caret requirement; - it resolves the newest 0.7.x (currently 0.7.3). Pin `=0.7.1` instead if - strict reproducibility is preferred. -- The three `gpui-pre-*` family crates are published in lockstep; all three - move back to 0.3.8 together. +- This is the state of `master` before `eb4fbb0`, the version set the + connector was verified against (2026-10-08 stamp). The exact `=0.7.1` + pins are required, not a style choice: a caret `"0.7.1"` resolves 0.7.3, + whose `gpui-pre =0.3.9` pin drags the graph onto 0.3.9, outside the + closure the connector is verified against. The three `gpui-pre-*` family + crates are published in lockstep; all three move back to 0.3.8 together. +- The connector re-exports the `native-theme` types that appear in its + public signatures (`SystemTheme`, `AccessibilityPreferences`, …), so the + app does **not** need `native-theme` as a direct dependency. - The cost of the revert is the two one-line tweaks `eb4fbb0` made for 0.8 - (the `Deref` removal in `crates/dock/src/dock_area.rs`; verify it compiles - either way). The nostr changes in that commit are unrelated and stay. + (the `Deref` removal in `crates/dock/src/dock_area.rs` is restored; the + 0.7.1 `ResizeHandle::on_drag` hands the closure an `Rc` and requires + `E: Render`). The nostr changes in that commit are unrelated and stay. - When `native-theme-gpui` releases gpui-component 0.8 support (upstream has bumped within days of each gpui-component release so far), bump both sides together in one commit. @@ -128,8 +131,8 @@ Order is load-bearing: 4. Apply the native theme: ```rust -let prefs = native_theme_gpui::AccessibilityPreferences::from_system(); -match native_theme::SystemTheme::from_system() { +// native_theme_gpui re-exports SystemTheme from native-theme. +match native_theme_gpui::SystemTheme::from_system() { Ok(system) => native_theme_gpui::apply_system_theme(&system, cx), Err(error) => { tracing::warn!("native theme unavailable ({error}); using bundled themes"); @@ -182,9 +185,11 @@ Remove (the native theme now owns all of these): size. Keeping manual overrides would require re-applying them after every upstream rebuild, a permanent fight with the connector. -`apply_theme()` shrinks to the fallback-only body (registry lookups + global -field setup), called only when native detection failed at startup and by the -Appearance handler's fallback branch. +`apply_theme()` and `theme_options()` are deleted outright: with the pickers +and number fields gone they have no remaining callers. The fallback logic +lives only in `main.rs`'s `Err` branch; the Appearance handler keeps working +through `apply_appearance()` alone (`Theme::change` picks up whatever configs +are installed, bundled or native). `ThemeSettings` keeps its fields and serde shape — the fallback branch still reads them, existing settings files keep parsing, and the tests in @@ -224,8 +229,8 @@ Adopting any of them is a separate, deliberate follow-up. | File | Change | | --- | --- | -| `Cargo.toml` | Revert gpui-side pins to 0.3.8 / 0.7.1 (Gate 0); add `native-theme` and `native-theme-gpui` workspace deps | -| `desktop/Cargo.toml` | Add `native-theme`, `native-theme-gpui` | +| `Cargo.toml` | Revert gpui-side pins to 0.3.8 / `=0.7.1` (Gate 0); add the `native-theme-gpui` workspace dep | +| `desktop/Cargo.toml` | Add `native-theme-gpui` | | `desktop/src/main.rs` | Native apply with bundled fallback (§4.2); move the settings-field setup into the fallback branch | | `crates/workspace/src/views/sidebar/settings_dialog.rs` | Remove theme picker + font/radius/focus/shadow rows; shrink `apply_theme` to fallback-only (§4.4) | | `CHANGELOG.md` | Added: native OS theme via `native-theme`; Removed: manual theme/font/radius settings | @@ -240,8 +245,8 @@ Unchanged: ## 6. Validation -1. `cargo check`, `cargo test`, `cargo clippy` across the workspace (toolchain - 1.96 satisfies the connector's 1.95 MSRV). +1. `cargo check`, `cargo test --workspace`, `cargo clippy` across the workspace + (toolchain 1.96 satisfies the connector's 1.95 MSRV). 2. Manual matrix, per platform available (macOS first; KDE and GNOME Linux; Windows): - cold start matches the OS theme and accent; radius, fonts and controls -- 2.54.0 From 36e5a18982d40ec08ddf664f414b3e64a63366b3 Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Wed, 21 Oct 2026 14:08:35 +0700 Subject: [PATCH 4/6] Scale text by font size ratio when applying system theme --- desktop/src/main.rs | 9 ++++++++- docs/NATIVE-THEME-MIGRATION.md | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/desktop/src/main.rs b/desktop/src/main.rs index 3130afc..93c2c95 100644 --- a/desktop/src/main.rs +++ b/desktop/src/main.rs @@ -37,7 +37,14 @@ fn main() { } match SystemTheme::from_system() { - Ok(system) => apply_system_theme(&system, cx), + Ok(mut system) => { + let native = system.light.defaults.font.size; + if native > 0.0 { + let scaling = settings.theme.font_size / native; + system.accessibility.text_scaling_factor *= scaling; + } + apply_system_theme(&system, cx); + } Err(error) => { tracing::warn!("native theme unavailable ({error})"); diff --git a/docs/NATIVE-THEME-MIGRATION.md b/docs/NATIVE-THEME-MIGRATION.md index 072e3a5..73a7684 100644 --- a/docs/NATIVE-THEME-MIGRATION.md +++ b/docs/NATIVE-THEME-MIGRATION.md @@ -147,6 +147,15 @@ match native_theme_gpui::SystemTheme::from_system() { configs, so the subsequent `Theme::change` / `sync_system_appearance` for the user's `AppearanceMode` picks the right native palette. +Sizing note: gpui-component derives the window rem from `theme.font_size`, so +every rem-relative element scales with it. The OS-reported UI font (13 on +macOS) is smaller than the 16 this app is designed around, so the native path +multiplies `system.accessibility.text_scaling_factor` by +`settings.theme.font_size / native_size` before applying — the connector's +supported scaling knob, which also preserves any OS accessibility scaling. +The same factor scales `mono_font_size`, so code text follows the UI size +(the pre-migration app used 13 for mono while the UI was 16). + On the native path, do **not** set `radius` / `font_size` / `light_theme` / `dark_theme` etc. on `Theme::global_mut` — the connector owns those fields, and overwriting them fights its observer. -- 2.54.0 From d223879a2e445c230d7e45de40440047851a6f95 Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Wed, 21 Oct 2026 14:38:40 +0700 Subject: [PATCH 5/6] Watch for OS theme changes at runtime --- Cargo.lock | 3 ++ Cargo.toml | 1 + desktop/Cargo.toml | 2 + desktop/src/main.rs | 97 ++++++++++++++++++++++++++-------- docs/NATIVE-THEME-MIGRATION.md | 14 ++--- 5 files changed, 90 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a790525..423cc86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5699,6 +5699,7 @@ dependencies = [ "fontdb", "inventory", "native-theme-derive", + "notify", "objc2 0.6.5", "objc2-app-kit 0.3.2", "objc2-core-foundation", @@ -8337,11 +8338,13 @@ version = "0.2.0-alpha" dependencies = [ "assets", "dock", + "flume 0.11.1", "gpui-component", "gpui-pre", "gpui-pre-platform", "gpui-pre-reqwest-client", "metadata", + "native-theme", "native-theme-gpui", "paths", "settings", diff --git a/Cargo.toml b/Cargo.toml index 0050ba5..ad8bd41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,7 @@ reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.8" } gpui-component = { version = "=0.7.1", features = ["tree-sitter-languages"] } gpui-base = "=0.7.1" +native-theme = { version = "0.6.1", features = ["watch"] } native-theme-gpui = { version = "0.6.1", default-features = false, features = ["system-fonts"] } dock = { path = "crates/dock" } diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index 045883d..0175475 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -38,7 +38,9 @@ gpui.workspace = true gpui_platform.workspace = true dock = { workspace = true } gpui-component.workspace = true +native-theme.workspace = true native-theme-gpui.workspace = true +flume.workspace = true reqwest_client.workspace = true tracing.workspace = true tracing-subscriber.workspace = true diff --git a/desktop/src/main.rs b/desktop/src/main.rs index 93c2c95..5606dec 100644 --- a/desktop/src/main.rs +++ b/desktop/src/main.rs @@ -5,8 +5,9 @@ use dock::TAB_BAR_HEIGHT; use gpui::*; use gpui_component::{Theme, ThemeMode, ThemeRegistry, theme}; use gpui_platform::application; +use native_theme::watch::ThemeSubscription; use native_theme_gpui::{SystemTheme, apply_system_theme}; -use settings::{AppearanceMode, SettingsStore}; +use settings::{AppearanceMode, Settings, SettingsStore}; actions!(signed, [Quit]); @@ -28,26 +29,21 @@ fn main() { SettingsStore::set_global(store.clone(), cx); let settings = store.read(cx).settings().clone(); - let registry = ThemeRegistry::global_mut(cx); - - for (name, content) in Assets.themes() { - if let Err(err) = registry.load_themes_from_str(&content) { - tracing::error!("Failed to load theme {name}: {err}"); + { + let registry = ThemeRegistry::global_mut(cx); + for (name, content) in Assets.themes() { + if let Err(err) = registry.load_themes_from_str(&content) { + tracing::error!("Failed to load theme {name}: {err}"); + } } } - match SystemTheme::from_system() { - Ok(mut system) => { - let native = system.light.defaults.font.size; - if native > 0.0 { - let scaling = settings.theme.font_size / native; - system.accessibility.text_scaling_factor *= scaling; - } - apply_system_theme(&system, cx); - } + match apply_native_theme(&settings, cx) { + Ok(()) => start_theme_watcher(cx), Err(error) => { tracing::warn!("native theme unavailable ({error})"); + let registry = ThemeRegistry::global_mut(cx); let light_theme = registry .themes() .get(settings.theme.light_theme.as_str()) @@ -77,13 +73,13 @@ fn main() { } else { tracing::warn!("{} theme is missing", settings.theme.dark_theme); } - } - } - match settings.appearance { - AppearanceMode::System => Theme::sync_system_appearance(None, cx), - AppearanceMode::Light => Theme::change(ThemeMode::Light, None, cx), - AppearanceMode::Dark => Theme::change(ThemeMode::Dark, None, cx), + match settings.appearance { + AppearanceMode::System => Theme::sync_system_appearance(None, cx), + AppearanceMode::Light => Theme::change(ThemeMode::Light, None, cx), + AppearanceMode::Dark => Theme::change(ThemeMode::Dark, None, cx), + } + } } std::fs::create_dir_all(paths::nostr_dir()).ok(); @@ -128,3 +124,62 @@ fn main() { cx.activate(true); }); } + +/// Apply the OS theme to the app, scaling the font size to match the system font size. +fn apply_native_theme(settings: &Settings, cx: &mut App) -> native_theme::Result<()> { + let mut system = SystemTheme::from_system()?; + let native = system.light.defaults.font.size; + if native > 0.0 { + let scaling = settings.theme.font_size / native; + system.accessibility.text_scaling_factor *= scaling; + } + + apply_system_theme(&system, cx); + + match settings.appearance { + AppearanceMode::System => Theme::sync_system_appearance(None, cx), + AppearanceMode::Light => Theme::change(ThemeMode::Light, None, cx), + AppearanceMode::Dark => Theme::change(ThemeMode::Dark, None, cx), + } + + Ok(()) +} + +/// Holds the watcher subscription so it lives as long as the app. +struct ThemeWatcher { + _subscription: ThemeSubscription, +} + +impl Global for ThemeWatcher {} + +/// Re-apply the OS theme whenever it changes at runtime. +fn start_theme_watcher(cx: &mut App) { + let (sender, receiver) = flume::unbounded(); + match native_theme::watch::on_theme_change(move |event| { + if let Err(error) = sender.send(event) { + tracing::warn!("theme change dropped ({error})"); + } + }) { + Ok(subscription) => { + cx.set_global(ThemeWatcher { + _subscription: subscription, + }); + cx.spawn(async move |cx| { + while receiver.recv_async().await.is_ok() { + tracing::info!("OS theme changed; re-applying"); + cx.update(|cx| { + let store = SettingsStore::global(cx); + let settings = store.read(cx).settings().clone(); + if let Err(error) = apply_native_theme(&settings, cx) { + tracing::warn!("failed to apply updated OS theme ({error})"); + } + }); + } + }) + .detach(); + } + Err(error) => { + tracing::warn!("OS theme watching unavailable ({error})") + } + } +} diff --git a/docs/NATIVE-THEME-MIGRATION.md b/docs/NATIVE-THEME-MIGRATION.md index 73a7684..5d2e1e6 100644 --- a/docs/NATIVE-THEME-MIGRATION.md +++ b/docs/NATIVE-THEME-MIGRATION.md @@ -169,11 +169,14 @@ and overwriting them fights its observer. - `Theme::change(mode, None, cx)` reproduces the native palette for the mode because the connector installed a `ThemeConfig` per variant. -Known gap (not addressed here): gpui-component's system-appearance follow is -driven by window-activation events. A live OS theme change while the window -is focused may not propagate on Linux until the window is re-focused; -native-theme's `watch` feature (a theme-change watcher) is a possible -follow-up, out of scope. +Known gap (addressed since): gpui-component's system-appearance follow is +driven by window-activation events. The app now enables native-theme's +`watch` feature and re-applies the theme on its signal (`start_theme_watcher` +in `desktop/src/main.rs`), so live OS changes apply without re-focusing or +restarting. macOS reports appearance changes only (`AppleInterfaceTheme- +ChangedNotification`); an accent-only change posts a different notification +the watcher does not observe yet — Windows (`UISettings::ColorValuesChanged`), +KDE (inotify on `kdeglobals`) and GNOME (portal `SettingChanged`) cover accent. ### 4.4 Settings dialog (`settings_dialog.rs`) @@ -278,6 +281,5 @@ Unchanged: SVG assets. - theme-drawn widgets (`widgets` feature). - a preset-picker UI (`from_preset`) in settings. -- runtime OS-theme watching (`watch` feature). - per-field user overrides layered on the native theme. - migrating `signed.json` into a native-theme `Theme` definition. -- 2.54.0 From 4c201b8cf172c3a008181b943ad79e8ce3b46ca5 Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Wed, 21 Oct 2026 14:46:42 +0700 Subject: [PATCH 6/6] Remove completed native theme migration plan --- CHANGELOG.md | 3 +- docs/NATIVE-THEME-MIGRATION.md | 285 --------------------------------- 2 files changed, 2 insertions(+), 286 deletions(-) delete mode 100644 docs/NATIVE-THEME-MIGRATION.md diff --git a/CHANGELOG.md b/CHANGELOG.md index c68172d..96783e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ ### Added -- Follow the operating system's native theme on macOS, Windows and Linux (KDE, GNOME) via `native-theme`, applying the OS colors, fonts, radii and accessibility preferences; the bundled themes remain as the fallback when the OS theme cannot be read +- Follow the operating system's native theme on macOS, Windows and Linux (KDE, GNOME), applying the OS colors, fonts, radii and accessibility preferences. - Add an identity import dialog, importing an existing identity by pasting its `nsec` secret key (encrypted with a new passphrase), NIP-49 `ncryptsec` (unlocked with its passphrase), or `bunker://` NIP-46 URI - Add a dropdown menu on the signed-in user button in the sidebar - Add sign-out feature, confirmed by an alert dialog before deleting the stored session credential @@ -18,6 +18,7 @@ ### Changed +- Use the built-in light/dark syntax highlighting palette instead of the Signed palette bundled in `signed.json` when the native theme is active - Increase the default theme corner radii from 2 to 4 and large radii from 6 to 8 - Surface backend errors as error notifications in the workspace instead of silently dropping them - Break ties in repository activity lists by event id, so same-second events order deterministically diff --git a/docs/NATIVE-THEME-MIGRATION.md b/docs/NATIVE-THEME-MIGRATION.md deleted file mode 100644 index 5d2e1e6..0000000 --- a/docs/NATIVE-THEME-MIGRATION.md +++ /dev/null @@ -1,285 +0,0 @@ -# Native theme migration plan - -Integrate [`native-theme`](https://github.com/tiborgats/native-theme) (via the -`native-theme-gpui` connector) so the app follows the OS native theme on -macOS, Windows and Linux (KDE/GNOME), instead of only the bundled -`signed.json` themes. - -Principles for this migration: plug the connector in, migrate what it -replaces, do not wrap it, and do not adopt its optional subsystems (icons, -theme-drawn widgets, presets UI) in this pass. - ---- - -## 1. Current state - -| Piece | Location | Notes | -| --- | --- | --- | -| Startup theme setup | `desktop/src/main.rs` | `gpui_component::init` + `theme::init`, loads `signed.json` into `ThemeRegistry`, sets `Theme::global_mut` fields (`radius`, `radius_lg`, `focus_ring`, `shadow`, `font_size`, `mono_font_size`, `light_theme`, `dark_theme`), then `Theme::change` / `Theme::sync_system_appearance` | -| Runtime theme application | `crates/workspace/src/views/sidebar/settings_dialog.rs` | `apply_theme()` re-reads settings into the global `Theme`; `apply_appearance()` maps `AppearanceMode` to `Theme::change` / `sync_system_appearance` | -| System appearance follow | `crates/workspace/src/workspace.rs` | `cx.observe_window_appearance` → `Theme::sync_system_appearance` when appearance is `System` | -| Theme settings | `crates/settings/src/settings.rs` (`ThemeSettings`) | `light_theme`, `dark_theme`, `font_size`, `mono_font_size`, `radius`, `radius_lg`, `focus_ring`, `shadow` | -| Bundled themes | `crates/assets/assets/themes/signed.json` | `Signed Light` / `Signed Dark` colors + a `highlight` section (editor/syntax colors) | -| Theme consumers | `dock`, `signed_ui`, `workspace` | ~50 `cx.theme()` call sites via `gpui_component::ActiveTheme` | - -Dependencies today (branch `feat/native-theme`, commit `eb4fbb0`): -`gpui-pre` 0.3.9, `gpui-pre-platform` 0.3.9, `gpui-component` 0.8, -`gpui-base` 0.8, toolchain 1.96. - -## 2. What the connector does - -`native-theme-gpui` turns a `native_theme::ResolvedTheme` (read from the OS, -or from a bundled preset) into a fully configured `gpui_component::Theme` and -installs it: - -- all 139 `ThemeColor` fields, fonts, `radius`, `shadow`, `focus_ring`, - scrollbar and base-layer values; -- a `ThemeConfig` per mode, so the app's existing - `Theme::change(mode, None, cx)` / `Theme::sync_system_appearance(..)` - switch between the native light and dark palettes unchanged; -- an internal observer that restores the native values gpui-component - overwrites on each rebuild; -- accessibility: the OS text-scaling factor scales fonts (through the window - rem), reduce-motion and reduce-transparency are forwarded. - -Because the connector produces a regular gpui-component `Theme`, every -existing `cx.theme()` call site keeps working without modification. That is -the core reason this integration is small. - -Key APIs: `SystemTheme::from_system()`, `apply_system_theme(&system, cx)`, -`apply(theme, &resolved, &prefs, cx)`, `from_preset(name, is_dark, &prefs)`, -`AccessibilityPreferences::from_system()`. - -## 3. Gate 0 — version compatibility (blocking) - -Verified against crates.io and the upstream repo on 2026-10-21: - -| Fact | Value | -| --- | --- | -| Latest connector | `native-theme-gpui` 0.6.1 (2026-10-09); upstream `main` is the same | -| Connector requires | `gpui-component ^0.7.1`, `gpui-base ^0.7.1`, `gpui-pre ^0.3.8`, Rust ≥ 1.95 | -| `gpui-component`/`gpui-base` 0.7.1 pin | `gpui-pre =0.3.8` | -| `gpui-component`/`gpui-base` 0.7.3 pin | `gpui-pre =0.3.9` | -| `gpui-component` 0.8.0 pins | `gpui-pre =0.3.9` (0.8.0 published 2026-10-19) | -| This branch | moved 0.7.1 / 0.3.8 → 0.8 / 0.3.9 in `eb4fbb0` ("chore: update deps") | - -The pins are mutually exclusive: with the app on `gpui-component` 0.8, cargo -cannot unify the graph — the connector would pull a second `gpui-pre` 0.3.8 -and a second `gpui-component` 0.7.x, and `apply(.., cx)` would not even -type-check against the app's `App`. **The connector cannot be added on top of -gpui-component 0.8 today.** - -### Decision - -Revert the GPUI-side dependency bump on this branch and align with the -connector's supported closure (recommended): - -```toml -# [workspace.dependencies] -gpui = { package = "gpui-pre", version = "0.3.8" } -gpui_platform = { package = "gpui-pre-platform", version = "0.3.8", features = ["font-kit", "x11", "wayland"] } -reqwest_client = { package = "gpui-pre-reqwest-client", version = "0.3.8" } - -gpui-component = { version = "=0.7.1", features = ["tree-sitter-languages"] } -gpui-base = "=0.7.1" - -native-theme-gpui = { version = "0.6.1", default-features = false, features = ["system-fonts"] } -``` - -- This is the state of `master` before `eb4fbb0`, the version set the - connector was verified against (2026-10-08 stamp). The exact `=0.7.1` - pins are required, not a style choice: a caret `"0.7.1"` resolves 0.7.3, - whose `gpui-pre =0.3.9` pin drags the graph onto 0.3.9, outside the - closure the connector is verified against. The three `gpui-pre-*` family - crates are published in lockstep; all three move back to 0.3.8 together. -- The connector re-exports the `native-theme` types that appear in its - public signatures (`SystemTheme`, `AccessibilityPreferences`, …), so the - app does **not** need `native-theme` as a direct dependency. -- The cost of the revert is the two one-line tweaks `eb4fbb0` made for 0.8 - (the `Deref` removal in `crates/dock/src/dock_area.rs` is restored; the - 0.7.1 `ResizeHandle::on_drag` hands the closure an `Rc` and requires - `E: Render`). The nostr changes in that commit are unrelated and stay. -- When `native-theme-gpui` releases gpui-component 0.8 support (upstream has - bumped within days of each gpui-component release so far), bump both sides - together in one commit. - -Alternative, rejected for now: staying on gpui-component 0.8 and waiting for -upstream 0.8 support. Nothing in this migration depends on 0.8-only APIs, and -0.8.0 shipped two days before this plan, so the revert is the cheaper path. - -Note: the connector's README quick-start shows the `gpui-kit` facade crate; -this project depends on `gpui-component` + `gpui-base` directly, which is -equivalent — no `gpui-kit` dependency is needed. - -## 4. Target design - -### 4.1 Theme source - -The native OS theme becomes the primary source. The bundled `signed.json` -registry stays as the fallback when the OS theme cannot be read (unsupported -Linux desktop, headless, etc.). This keeps the existing startup code as the -fallback branch instead of deleting a working safety net. - -### 4.2 Startup flow (`desktop/src/main.rs`) - -Order is load-bearing: - -1. `gpui_component::init(cx)` and `theme::init(cx)` — must run before - `apply` (connector requirement). -2. `SettingsStore` load — already before any theme work. -3. `ThemeRegistry` load from `Assets.themes()` — kept, feeds the fallback. -4. Apply the native theme: - -```rust -// native_theme_gpui re-exports SystemTheme from native-theme. -match native_theme_gpui::SystemTheme::from_system() { - Ok(system) => native_theme_gpui::apply_system_theme(&system, cx), - Err(error) => { - tracing::warn!("native theme unavailable ({error}); using bundled themes"); - // existing path: registry lookups + Theme::global_mut field setup - } -} -// shared: the existing `match settings.appearance { .. }` block stays, -// now driving native palettes per mode on the native path. -``` - -`apply_system_theme` installs both the light and dark variants plus their -configs, so the subsequent `Theme::change` / `sync_system_appearance` for the -user's `AppearanceMode` picks the right native palette. - -Sizing note: gpui-component derives the window rem from `theme.font_size`, so -every rem-relative element scales with it. The OS-reported UI font (13 on -macOS) is smaller than the 16 this app is designed around, so the native path -multiplies `system.accessibility.text_scaling_factor` by -`settings.theme.font_size / native_size` before applying — the connector's -supported scaling knob, which also preserves any OS accessibility scaling. -The same factor scales `mono_font_size`, so code text follows the UI size -(the pre-migration app used 13 for mono while the UI was 16). - -On the native path, do **not** set `radius` / `font_size` / `light_theme` / -`dark_theme` etc. on `Theme::global_mut` — the connector owns those fields, -and overwriting them fights its observer. - -### 4.3 Appearance switching (no changes) - -- `AppearanceMode::System | Light | Dark` and `apply_appearance()` in - `settings_dialog.rs` work as-is. -- `workspace.rs`'s `observe_window_appearance` → `sync_system_appearance` - keeps following the OS while in `System` mode. -- `Theme::change(mode, None, cx)` reproduces the native palette for the mode - because the connector installed a `ThemeConfig` per variant. - -Known gap (addressed since): gpui-component's system-appearance follow is -driven by window-activation events. The app now enables native-theme's -`watch` feature and re-applies the theme on its signal (`start_theme_watcher` -in `desktop/src/main.rs`), so live OS changes apply without re-focusing or -restarting. macOS reports appearance changes only (`AppleInterfaceTheme- -ChangedNotification`); an accent-only change posts a different notification -the watcher does not observe yet — Windows (`UISettings::ColorValuesChanged`), -KDE (inotify on `kdeglobals`) and GNOME (portal `SettingChanged`) cover accent. - -### 4.4 Settings dialog (`settings_dialog.rs`) - -Keep: - -- the **Appearance** row (`System` / `Light` / `Dark`) and its handler. - -Remove (the native theme now owns all of these): - -- **Light Theme** / **Dark Theme** pickers and `theme_options()` — colors are - chosen by the OS. This is also the only way to avoid the connector's - registry trap: selecting a registry theme would overwrite the connector's - per-mode configs on the next `Theme::change` and silently drop native - colors until restart. -- **Font size**, **Mono font size**, **Radius**, **Large radius**, - **Focus ring**, **Shadows** rows and their handlers — the resolved theme - provides geometry, and the connector already scales fonts by the OS text - size. Keeping manual overrides would require re-applying them after every - upstream rebuild, a permanent fight with the connector. - -`apply_theme()` and `theme_options()` are deleted outright: with the pickers -and number fields gone they have no remaining callers. The fallback logic -lives only in `main.rs`'s `Err` branch; the Appearance handler keeps working -through `apply_appearance()` alone (`Theme::change` picks up whatever configs -are installed, bundled or native). - -`ThemeSettings` keeps its fields and serde shape — the fallback branch still -reads them, existing settings files keep parsing, and the tests in -`settings.rs` stay valid. They become fallback-only tuning (editable via -`settings.json`). Deleting the fields is a possible follow-up cleanup if the -fallback ever moves to native-theme presets. - -### 4.5 Syntax highlighting (known trade-off) - -`signed.json` carries a `highlight` section (editor and syntax colors) used by -code and markdown rendering (`TextView` in the files view and elsewhere). The -connector's installed per-mode configs carry upstream's default highlighter -styles, so on the native path the active syntax palette is upstream's, not -Signed's. - -Decision for this pass: accept upstream's defaults — zero code. If the Signed -syntax palette must be kept later, investigate whether gpui-component 0.7 -exposes a syntax-theme setter that survives `Theme::change`; do not build an -override mechanism now. - -### 4.6 Features - -Use the connector with narrowed features; the app uses its own SVG icons and -gpui-component widgets: - -```toml -native-theme-gpui = { version = "0.6.1", default-features = false, features = ["system-fonts"] } -``` - -`system-fonts` keeps a theme font family the system lacks drawing in the -platform's substitute. `widgets` (theme-drawn checkbox/switch/etc.), -`material-icons`, `lucide-icons`, `system-icons`, `svg-rasterize` are all -unused here and each carries build weight (the icon bundles are ~2 MB). -Adopting any of them is a separate, deliberate follow-up. - -## 5. Change list - -| File | Change | -| --- | --- | -| `Cargo.toml` | Revert gpui-side pins to 0.3.8 / `=0.7.1` (Gate 0); add the `native-theme-gpui` workspace dep | -| `desktop/Cargo.toml` | Add `native-theme-gpui` | -| `desktop/src/main.rs` | Native apply with bundled fallback (§4.2); move the settings-field setup into the fallback branch | -| `crates/workspace/src/views/sidebar/settings_dialog.rs` | Remove theme picker + font/radius/focus/shadow rows; shrink `apply_theme` to fallback-only (§4.4) | -| `CHANGELOG.md` | Added: native OS theme via `native-theme`; Removed: manual theme/font/radius settings | - -Unchanged: - -- every `cx.theme()` consumer in `dock`, `signed_ui`, `workspace` — including - the dock/tab skins and window controls, which keep reading tokens; -- `crates/workspace/src/workspace.rs` appearance observer; -- `crates/settings` (fields stay), `crates/assets` (`signed.json` stays as - the fallback), `crates/dock`. - -## 6. Validation - -1. `cargo check`, `cargo test --workspace`, `cargo clippy` across the workspace - (toolchain 1.96 satisfies the connector's 1.95 MSRV). -2. Manual matrix, per platform available (macOS first; KDE and GNOME Linux; - Windows): - - cold start matches the OS theme and accent; radius, fonts and controls - read as native; - - switching Appearance `System ↔ Light ↔ Dark` in settings switches native - palettes; - - with `System`, changing the OS theme and re-focusing the window updates - the app; - - settings dialog, dock tabs, diffs, files view, markdown rendering look - correct; the syntax palette difference from §4.5 is reviewed and - accepted; - - `cargo run` once with native detection forced to fail (e.g. temporarily - return early in the match) to prove the bundled fallback still works. -3. `cargo tree -i gpui-pre` and `cargo tree -i gpui-component` must each show - exactly one version — the whole point of Gate 0. - -## 7. Explicitly out of scope - -- native-theme icon sets / `CustomIconName` mapping — the app keeps its own - SVG assets. -- theme-drawn widgets (`widgets` feature). -- a preset-picker UI (`from_preset`) in settings. -- per-field user overrides layered on the native theme. -- migrating `signed.json` into a native-theme `Theme` definition. -- 2.54.0