diff --git a/Cargo.lock b/Cargo.lock index fe4b891..b3ea1ec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,9 +155,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -188,9 +188,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] @@ -313,6 +313,18 @@ dependencies = [ "zbus", ] +[[package]] +name = "assets" +version = "1.0.0" +dependencies = [ + "anyhow", + "gpui", + "gpui-component", + "log", + "rust-embed", + "serde_json", +] + [[package]] name = "async-broadcast" version = "0.7.2" @@ -469,13 +481,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.91" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -492,9 +504,9 @@ dependencies = [ [[package]] name = "async-wsocket" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa9ef232c1731ddbe4a306b5b5dcf9e50a924d6bd086d4784939d14f8e78daa" +checksum = "2c713e1f14c7b82e32ea159af1c6e2f070cfadbdf23fb2512acce9af0a26f1a2" dependencies = [ "futures", "futures-util", @@ -580,7 +592,7 @@ dependencies = [ "num-traits", "pastey", "rayon", - "thiserror 2.0.19", + "thiserror 2.0.20", "v_frame", "y4m", ] @@ -610,9 +622,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.17.3" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1" +checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" dependencies = [ "aws-lc-sys", "zeroize", @@ -620,9 +632,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c" +checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" dependencies = [ "cc", "cmake", @@ -664,6 +676,15 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efbd3e1070bbdf4cd88a75264e18e8a26f7cb5c6949eadf0ceb85fb159cf08f8" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bindgen" version = "0.71.1" @@ -690,7 +711,7 @@ version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90dbd31c98227229239363921e60fcf5e558e43ec69094d46fc4996f08d1d5bc" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.14.101", "serde", "unicode-normalization", ] @@ -710,15 +731,30 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d21f40d350a700f6aa107e45fb26448cf489d34794b2ba4522181dc9f1173af6" +[[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" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" dependencies = [ - "bit-vec", + "bit-vec 0.9.1", ] +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit-vec" version = "0.9.1" @@ -733,9 +769,9 @@ checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitcoin-consensus-encoding" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "207311705279250ba465076a1bac4b1ac982855fff73fc5f67e22158ac58cdc9" +checksum = "6712f9c6fd6785b3b270884e57c441c403dc5d7e19ca45368c97c7a1de3000ec" dependencies = [ "bitcoin-internals", "hex-conservative 1.2.0", @@ -765,6 +801,17 @@ checksum = "bca4c7abb40c8817d77403c880988cfd484f23ab2365726afb2f798363e2c4a2" dependencies = [ "bitcoin-io", "hex-conservative 0.2.2", +] + +[[package]] +name = "bitcoin_hashes" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5304e53726dbe5f93141535e102ed97b5bf4714fbecefdda8f9fb98d7fdaff0e" +dependencies = [ + "bitcoin-consensus-encoding", + "bitcoin-internals", + "hex-conservative 1.2.0", "serde", ] @@ -845,9 +892,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" dependencies = [ "async-channel", "async-task", @@ -868,9 +915,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7dc094d718f2e1c1559ad110e27eeaae14a5465d3d56dd6dbd793079fbd530" +checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f" dependencies = [ "memchr", "regex-automata", @@ -906,13 +953,13 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.4", ] [[package]] @@ -996,9 +1043,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.0" +version = "1.2.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" dependencies = [ "find-msvc-tools", "jobserver", @@ -1172,7 +1219,7 @@ checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ "bitflags 2.13.1", "block", - "cocoa-foundation 0.2.0", + "cocoa-foundation 0.2.1", "core-foundation 0.10.1", "core-graphics 0.24.0", "foreign-types", @@ -1196,15 +1243,14 @@ dependencies = [ [[package]] name = "cocoa-foundation" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" +checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" dependencies = [ "bitflags 2.13.1", "block", "core-foundation 0.10.1", "core-graphics-types 0.2.0", - "libc", "objc", ] @@ -1222,7 +1268,7 @@ dependencies = [ [[package]] name = "collections" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "gpui_util", "indexmap", @@ -1317,6 +1363,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "convert_case" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1496,18 +1551,18 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" dependencies = [ "crossbeam-utils", ] @@ -1573,9 +1628,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d83cb7e7a873830708d6b02a78cd36a592c6fa14bf267b68725103b85c0d77f" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" dependencies = [ "link-section", "linktime-proc-macro", @@ -1590,6 +1645,20 @@ dependencies = [ "cmov", ] +[[package]] +name = "dashmap" +version = "6.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "data-encoding" version = "2.11.1" @@ -1630,7 +1699,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -1654,7 +1723,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ - "convert_case", + "convert_case 0.10.0", "proc-macro2", "quote", "rustc_version", @@ -1665,7 +1734,7 @@ dependencies = [ [[package]] name = "derive_refineable" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "proc-macro2", "quote", @@ -1742,7 +1811,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1754,6 +1823,15 @@ dependencies = [ "libloading", ] +[[package]] +name = "dock" +version = "1.0.0" +dependencies = [ + "gpui", + "gpui-base", + "gpui-component", +] + [[package]] name = "document-features" version = "0.2.12" @@ -1804,9 +1882,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "embed-resource" @@ -1833,9 +1911,9 @@ dependencies = [ [[package]] name = "encoding_rs_io" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83" +checksum = "fba3fe847045ecff794b9c138293a80db914678c453ad63fbf0c6a9eb6e00b22" dependencies = [ "encoding_rs", ] @@ -2001,6 +2079,17 @@ dependencies = [ "zune-inflate", ] +[[package]] +name = "fancy-regex" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998b056554fbe42e03ae0e152895cd1a7e1002aec800fdc6635d20270260c46f" +dependencies = [ + "bit-set 0.8.0", + "regex-automata", + "regex-syntax", +] + [[package]] name = "faster-hex" version = "0.10.0" @@ -2058,9 +2147,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "fixedbitset" @@ -2167,9 +2256,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.12.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7299a780854a6d391be2ae1c8521c9368471b559dbfd6a8dbd9f407eaff100" +checksum = "e64eb721ca85a34323425f4041adc5d82704d3782d5f8f03793bc012419dce23" dependencies = [ "bytemuck", ] @@ -2215,7 +2304,7 @@ checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -2271,9 +2360,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -2286,9 +2375,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -2309,15 +2398,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -2326,9 +2415,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -2345,32 +2434,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.4", ] [[package]] name = "futures-sink" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -2523,7 +2612,7 @@ dependencies = [ "gix-zlib", "nonempty", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2550,7 +2639,7 @@ dependencies = [ "gix-quote", "gix-trace", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "unicode-bom", ] @@ -2614,7 +2703,7 @@ dependencies = [ "gix-sec", "gix-utils", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "unicode-bom", ] @@ -2628,7 +2717,7 @@ dependencies = [ "bstr", "gix-path", "libc", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2647,7 +2736,7 @@ dependencies = [ "gix-sec", "gix-trace", "gix-url", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2669,9 +2758,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fee7d89a3c507491cdfc57a1d1e0e300214720b4f7709ebc253e422f99822bfc" dependencies = [ "bstr", + "gix-command", + "gix-filter", + "gix-fs", "gix-hash", + "gix-imara-diff", "gix-object", - "thiserror 2.0.19", + "gix-path", + "gix-tempfile", + "gix-trace", + "gix-traverse", + "gix-worktree", + "thiserror 2.0.20", ] [[package]] @@ -2686,7 +2784,7 @@ dependencies = [ "gix-path", "gix-ref", "gix-sec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2700,9 +2798,9 @@ dependencies = [ [[package]] name = "gix-features" -version = "0.49.0" +version = "0.49.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20aa09e83a48dc02c5f5f08578aa79d3ab1bab4618b8c362f88684645a02bdcc" +checksum = "39c0e59d9d253dcccc38c3a46b91bfb9b46bd63eed54fe1a719e12194884d52a" dependencies = [ "bytes", "crc32fast", @@ -2735,27 +2833,27 @@ dependencies = [ "gix-trace", "gix-utils", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] name = "gix-fs" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "865cf13fcaf5455220546cb9607c416bd1be9a6caafd143655a362fdeab64e80" +checksum = "ebcfa9fd253f25350a3b21b3dd74034a446098e373c6123d4cee3519894f12ef" dependencies = [ "bstr", "gix-features", "gix-path", "gix-utils", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] name = "gix-glob" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "421e92a711554fa5827d1b0599d3389acdd0f6729e97a8c5a57d79af1e50bf36" +checksum = "b417cf515fd8c91468b578071f76d6cba716f8a1eccd853906bff4908b2c1413" dependencies = [ "bitflags 2.13.1", "bstr", @@ -2765,14 +2863,14 @@ dependencies = [ [[package]] name = "gix-hash" -version = "0.26.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13adaa73415fd6c902310923f68d0b98e8cecf14b33ea58c02cc387cee56f54e" +checksum = "380b9c423a54f0821064b954b5a5ab25c660812f6a91da03c3f1cb4b10762aa5" dependencies = [ "faster-hex", "gix-features", "sha1-checked", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2788,9 +2886,9 @@ dependencies = [ [[package]] name = "gix-ignore" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cff8e8aa125e39377456073e63df3334d9e5741372ddcc226198015076dda2" +checksum = "65859a2f7de5e159d4344a5486ebf53b6bac22d5ec6afa836e47c10ae88a7f0f" dependencies = [ "bstr", "gix-glob", @@ -2799,6 +2897,16 @@ dependencies = [ "unicode-bom", ] +[[package]] +name = "gix-imara-diff" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c91d8cffac8849493a82233811bd02b2b183b8cf39bf704de0fa0841b737595" +dependencies = [ + "bstr", + "hashbrown 0.17.1", +] + [[package]] name = "gix-index" version = "0.54.0" @@ -2824,7 +2932,7 @@ dependencies = [ "memmap2", "rustix 1.1.4", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2835,7 +2943,7 @@ checksum = "d4c69157820343bf1c6e4b88b9808e920900de02e18aaf5862b30ada43814848" dependencies = [ "gix-tempfile", "gix-utils", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2868,7 +2976,7 @@ dependencies = [ "gix-validate", "itoa", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2890,7 +2998,7 @@ dependencies = [ "memmap2", "parking_lot", "tempfile", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2912,31 +3020,31 @@ dependencies = [ "memmap2", "parking_lot", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] name = "gix-packetline" -version = "0.22.0" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3766025c72319c4accdd854a18e6f0dd176c8eb0f3bc8a60a7765be2b50cabf2" +checksum = "792bd92bea390087e6223b18d4d023decc36467de31e6b066b69b94beea1b9e2" dependencies = [ "bstr", "faster-hex", "gix-trace", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] name = "gix-path" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751d6bd162106f8c1e7e9aaccb5bbdd605267e91a930a17a4560c46e33a9100c" +checksum = "2b075e730586bba7341304d6fc1b4efc1d10cf64532622521c0e07f30e661046" dependencies = [ "bstr", "gix-trace", "gix-validate", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2951,7 +3059,7 @@ dependencies = [ "gix-config-value", "gix-glob", "gix-path", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2964,7 +3072,7 @@ dependencies = [ "gix-config-value", "parking_lot", "rustix 1.1.4", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2990,7 +3098,7 @@ dependencies = [ "gix-transport", "gix-utils", "nonempty", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3021,7 +3129,7 @@ dependencies = [ "gix-utils", "gix-validate", "memmap2", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3037,7 +3145,7 @@ dependencies = [ "gix-revision", "gix-validate", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3046,13 +3154,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e55e09d4a1ecf2beecc8c09cafcad37979e805b31f588b0e957e191df5783681" dependencies = [ + "bitflags 2.13.1", "bstr", "gix-commitgraph", "gix-date", "gix-error", "gix-hash", + "gix-hashtable", "gix-object", "gix-revwalk", + "gix-trace", "nonempty", ] @@ -3069,7 +3180,7 @@ dependencies = [ "gix-hashtable", "gix-object", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3094,7 +3205,7 @@ dependencies = [ "gix-hash", "gix-lock", "nonempty", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3109,7 +3220,7 @@ dependencies = [ "gix-pathspec", "gix-refspec", "gix-url", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3118,6 +3229,7 @@ version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b675b920bd5a61d17ad542772f03ec34c60feb8ff683e1560c03ae967363731e" dependencies = [ + "dashmap", "gix-fs", "libc", "parking_lot", @@ -3148,7 +3260,7 @@ dependencies = [ "gix-url", "parking_lot", "reqwest", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3165,7 +3277,7 @@ dependencies = [ "gix-object", "gix-revwalk", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3178,14 +3290,14 @@ dependencies = [ "gix-path", "gix-utils", "percent-encoding", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] name = "gix-utils" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1795bd2a970ca8b2185318c2abb97d955c71992f1cf28de73ad3b593a9f3ce8" +checksum = "0da1c46491b49458a446cc76f0085860f8164c2290742e0aa8c653ce67240a97" dependencies = [ "bstr", "fastrand", @@ -3195,9 +3307,9 @@ dependencies = [ [[package]] name = "gix-validate" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a034e84d1e04e1b1f20f51f12491da230b6ac8b925d0c8e1b89bcd87a7c5ccc" +checksum = "4dae8780f63ed8a803b8bdabbd7aa5f5c5d74592c8b50eed875c1bb4f6545a6a" dependencies = [ "bstr", ] @@ -3235,7 +3347,7 @@ dependencies = [ "gix-path", "gix-worktree", "io-close", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3262,7 +3374,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e8813f5579b3075ff9c90f7c59cd2b62b4ebb639361f0911648b22d7446cc7c" dependencies = [ - "thiserror 2.0.19", + "thiserror 2.0.20", "zlib-rs", ] @@ -3285,9 +3397,9 @@ checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "globset" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47d37d2ae4464254884b60ab7071be2b876a9c35b696bd018ddcc76847309cd" +checksum = "07c34a9410465b45bd9787443bc7370f37735bad04b0f0cd57ff1a3186c98988" dependencies = [ "aho-corasick", "bstr", @@ -3350,7 +3462,7 @@ dependencies = [ "hashbrown 0.16.1", "log", "presser", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows 0.62.2", ] @@ -3377,30 +3489,22 @@ dependencies = [ [[package]] name = "gpui" version = "0.2.2" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "accesskit", "anyhow", "async-channel", "async-task", + "backtrace", "bindgen", "bitflags 2.13.1", - "block", - "cbindgen", "chrono", - "cocoa 0.26.0", - "cocoa-foundation 0.2.0", "collections", - "core-foundation 0.10.1", - "core-foundation-sys", - "core-graphics 0.24.0", - "core-text", "core-video", "ctor", "derive_more", "embed-resource", "etagere", - "foreign-types", "futures", "futures-concurrency", "getrandom 0.3.4", @@ -3414,18 +3518,14 @@ dependencies = [ "itertools 0.14.0", "log", "lyon", - "mach2", - "media", - "metal", "num_cpus", - "objc", "parking", "parking_lot", - "pathfinder_geometry", "pin-project", "pollster 0.4.0", "postage", "profiling", + "proptest", "rand 0.9.5", "raw-window-handle", "refineable", @@ -3443,7 +3543,8 @@ dependencies = [ "strum", "sum_tree", "taffy", - "thiserror 2.0.19", + "thiserror 2.0.20", + "tracing", "ttf-parser", "url", "usvg 0.46.0", @@ -3454,21 +3555,53 @@ dependencies = [ "windows 0.61.3", "zed-font-kit", "zed-scap", + "ztracing", ] [[package]] -name = "gpui-component" +name = "gpui-base" version = "0.5.2" -source = "git+https://github.com/longbridge/gpui-component#88f102d13654fe25aa2fede076274b6b751a3704" +source = "git+https://github.com/longbridge/gpui-component#7885c41663c7a6cc68ad0c99b1ba33550f807ff0" dependencies = [ "aho-corasick", "anyhow", "async-channel", "chrono", + "gpui", + "gpui_macros", + "gpui_platform", + "instant", + "lsp-types", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", + "raw-window-handle", + "regex", + "ropey", + "schemars", + "serde", + "serde_json", + "smallvec", + "smol", + "syntect", + "tracing", + "unicode-segmentation", + "web-time", + "zed-sum-tree", +] + +[[package]] +name = "gpui-component" +version = "0.5.2" +source = "git+https://github.com/longbridge/gpui-component#7885c41663c7a6cc68ad0c99b1ba33550f807ff0" +dependencies = [ + "anyhow", + "chrono", "core-text", "enum-iterator", "futures", "gpui", + "gpui-base", "gpui-component-assets", "gpui-component-macros", "gpui_macros", @@ -3487,7 +3620,6 @@ dependencies = [ "once_cell", "paste", "raw-window-handle", - "regex", "resvg 0.45.1", "ropey", "rust-i18n", @@ -3498,7 +3630,41 @@ dependencies = [ "smallvec", "smol", "tracing", - "unicode-segmentation", + "tree-sitter", + "tree-sitter-astro-next", + "tree-sitter-bash", + "tree-sitter-c", + "tree-sitter-c-sharp", + "tree-sitter-cmake", + "tree-sitter-cpp", + "tree-sitter-css", + "tree-sitter-diff", + "tree-sitter-elixir", + "tree-sitter-embedded-template", + "tree-sitter-go", + "tree-sitter-graphql", + "tree-sitter-html", + "tree-sitter-java", + "tree-sitter-javascript", + "tree-sitter-jsdoc", + "tree-sitter-json", + "tree-sitter-kotlin-sg", + "tree-sitter-lua", + "tree-sitter-make", + "tree-sitter-md", + "tree-sitter-php", + "tree-sitter-proto", + "tree-sitter-python", + "tree-sitter-ruby", + "tree-sitter-rust", + "tree-sitter-scala", + "tree-sitter-sequel", + "tree-sitter-svelte-next", + "tree-sitter-swift", + "tree-sitter-toml-ng", + "tree-sitter-typescript", + "tree-sitter-yaml", + "tree-sitter-zig", "uuid", "windows 0.58.0", "zed-sum-tree", @@ -3507,7 +3673,7 @@ dependencies = [ [[package]] name = "gpui-component-assets" version = "0.5.1" -source = "git+https://github.com/longbridge/gpui-component#88f102d13654fe25aa2fede076274b6b751a3704" +source = "git+https://github.com/longbridge/gpui-component#7885c41663c7a6cc68ad0c99b1ba33550f807ff0" dependencies = [ "anyhow", "gpui", @@ -3521,17 +3687,40 @@ dependencies = [ [[package]] name = "gpui-component-macros" version = "0.5.1" -source = "git+https://github.com/longbridge/gpui-component#88f102d13654fe25aa2fede076274b6b751a3704" +source = "git+https://github.com/longbridge/gpui-component#7885c41663c7a6cc68ad0c99b1ba33550f807ff0" dependencies = [ "proc-macro2", "quote", "syn 2.0.119", ] +[[package]] +name = "gpui_apple" +version = "0.1.0" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" +dependencies = [ + "anyhow", + "block", + "cbindgen", + "cocoa 0.26.0", + "collections", + "core-foundation 0.10.1", + "core-video", + "derive_more", + "etagere", + "foreign-types", + "gpui", + "image", + "log", + "metal", + "objc", + "parking_lot", +] + [[package]] name = "gpui_linux" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "accesskit", "accesskit_unix", @@ -3549,22 +3738,16 @@ dependencies = [ "gpui_util", "gpui_wgpu", "http_client", - "image", - "itertools 0.14.0", "libc", "log", "notify-rust", "oo7", "open", "parking_lot", - "pathfinder_geometry", - "pollster 0.4.0", - "profiling", "raw-window-handle", "smallvec", "smol", "strum", - "swash", "url", "uuid", "wayland-backend", @@ -3583,7 +3766,7 @@ dependencies = [ [[package]] name = "gpui_macos" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "accesskit", "accesskit_macos", @@ -3591,21 +3774,18 @@ dependencies = [ "async-task", "block", "block2 0.6.2", - "cbindgen", "cocoa 0.26.0", "collections", "core-foundation 0.10.1", "core-foundation-sys", "core-graphics 0.24.0", "core-text", - "core-video", "ctor", - "derive_more", "dispatch2", - "etagere", "foreign-types", "futures", "gpui", + "gpui_apple", "gpui_util", "image", "itertools 0.14.0", @@ -3632,7 +3812,7 @@ dependencies = [ [[package]] name = "gpui_macros" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -3643,7 +3823,7 @@ dependencies = [ [[package]] name = "gpui_platform" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "console_error_panic_hook", "gpui", @@ -3656,7 +3836,7 @@ dependencies = [ [[package]] name = "gpui_shared_string" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "schemars", "serde", @@ -3666,7 +3846,7 @@ dependencies = [ [[package]] name = "gpui_util" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "anyhow", "log", @@ -3676,7 +3856,7 @@ dependencies = [ [[package]] name = "gpui_web" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "anyhow", "console_error_panic_hook", @@ -3688,6 +3868,7 @@ dependencies = [ "log", "parking_lot", "raw-window-handle", + "scheduler", "uuid", "wasm-bindgen", "wasm-bindgen-futures", @@ -3699,7 +3880,7 @@ dependencies = [ [[package]] name = "gpui_wgpu" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "anyhow", "bytemuck", @@ -3709,18 +3890,14 @@ dependencies = [ "gpui", "gpui_util", "itertools 0.14.0", - "js-sys", "log", "parking_lot", - "pollster 0.4.0", "profiling", "raw-window-handle", "smallvec", "swash", "unicode-bidi", "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", "wgpu", "zed-font-kit", @@ -3729,7 +3906,7 @@ dependencies = [ [[package]] name = "gpui_windows" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "accesskit", "accesskit_windows", @@ -3764,17 +3941,11 @@ dependencies = [ "smallvec", ] -[[package]] -name = "grid" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" - [[package]] name = "h2" -version = "0.4.15" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", @@ -4034,9 +4205,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", @@ -4048,7 +4219,7 @@ dependencies = [ [[package]] name = "http_client" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "anyhow", "async-compression", @@ -4068,7 +4239,7 @@ dependencies = [ [[package]] name = "http_client_tls" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "rustls", "rustls-platform-verifier 0.5.3", @@ -4175,9 +4346,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", @@ -4189,9 +4360,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", @@ -4202,9 +4373,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -4216,16 +4387,17 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -4236,15 +4408,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -4278,9 +4450,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.31" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f8a7b8211e695a1d0cd91cace480d4d0bd57667ab10277cc412c5f7f4884f83" +checksum = "00b69833ed729dc5aa7d19541d96d6cf8e9137194207a04916d658e43168402f" dependencies = [ "crossbeam-deque", "globset", @@ -4311,7 +4483,7 @@ dependencies = [ "ravif", "rayon", "tiff", - "zune-core 0.5.1", + "zune-core 0.5.3", "zune-jpeg 0.5.15", ] @@ -4322,7 +4494,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ "byteorder-lite", - "quick-error", + "quick-error 2.0.1", ] [[package]] @@ -4587,7 +4759,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.19", + "thiserror 2.0.20", "walkdir", "windows-link 0.2.1", ] @@ -4645,9 +4817,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "futures-util", @@ -4673,9 +4845,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kqueue" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5" +checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea" dependencies = [ "kqueue-sys", "libc", @@ -4781,9 +4953,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" +checksum = "28d0a00925a9f930d679b6789b721e3a7f9ed110f41b86d2497caa780c3a070a" dependencies = [ "libc", ] @@ -4796,15 +4968,15 @@ checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" [[package]] name = "link-section" -version = "0.19.2" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee1a0d6e252afe82e7bc2db42fba60e02ddf3b1accaf8cb21d96e34ba61f3d4" +checksum = "39c29a617ce3df32c08497bdc1ab6e2376e0b17948ac166a2fbe5977c5954cd9" [[package]] name = "linktime-proc-macro" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348d0075b1fc163b26d72a7f75fc5141daf2fd1bdf128d873cbaf6785d495bdf" +checksum = "7e57c38c1e860fd37c604281cdfb1dd2216977fd76a50f85ba2f388ef3219616" [[package]] name = "linux-raw-sys" @@ -4820,9 +4992,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" @@ -4852,9 +5024,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" dependencies = [ "serde_core", "value-bag", @@ -5043,13 +5215,12 @@ dependencies = [ [[package]] name = "media" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "anyhow", "bindgen", "core-foundation 0.10.1", "core-video", - "ctor", "foreign-types", "metal", "objc", @@ -5155,7 +5326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2bf919621e7975acb27d881bae2fb993e0d45c8e0446e85e6272971e00dc8df" dependencies = [ "arrayvec", - "bit-set", + "bit-set 0.9.1", "bitflags 2.13.1", "cfg-if", "cfg_aliases", @@ -5170,7 +5341,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.19", + "thiserror 2.0.20", "unicode-ident", ] @@ -5191,9 +5362,9 @@ dependencies = [ [[package]] name = "negentropy" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0efe882e02d206d8d279c20eb40e03baf7cb5136a1476dc084a324fbc3ec42d" +checksum = "81c353b400a5503efdcf398f11a83fb7aa84f59f5d76fc4bf5bbc1e4f5366caa" [[package]] name = "new_debug_unreachable" @@ -5258,14 +5429,14 @@ dependencies = [ [[package]] name = "nostr" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.3" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ "aes", "base64", "bech32", "bip39", - "bitcoin_hashes", + "bitcoin_hashes 1.2.0", "cbc", "chacha20 0.9.1", "chacha20poly1305", @@ -5279,12 +5450,13 @@ dependencies = [ "unicode-normalization", "universal-time", "url", + "zeroize", ] [[package]] name = "nostr-connect" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.1" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ "async-utility", "futures-core", @@ -5297,19 +5469,17 @@ dependencies = [ [[package]] name = "nostr-database" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.1" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ - "btreecap", - "flatbuffers", "nostr", "opaquerr", ] [[package]] name = "nostr-gossip" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.0" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ "nostr", "opaquerr", @@ -5317,8 +5487,8 @@ dependencies = [ [[package]] name = "nostr-gossip-memory" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.0" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ "indexmap", "lru", @@ -5329,10 +5499,11 @@ dependencies = [ [[package]] name = "nostr-lmdb" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.2" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ "async-utility", + "flatbuffers", "flume 0.12.0", "heed", "nostr", @@ -5343,8 +5514,8 @@ dependencies = [ [[package]] name = "nostr-memory" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.1" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ "btreecap", "nostr", @@ -5354,8 +5525,8 @@ dependencies = [ [[package]] name = "nostr-sdk" -version = "0.45.0-alpha.8" -source = "git+https://github.com/rust-nostr/nostr?rev=d0a1d67d3c9e5cf9710807a6a414c155a5f47215#d0a1d67d3c9e5cf9710807a6a414c155a5f47215" +version = "0.45.2" +source = "git+https://github.com/rust-nostr/nostr#ea38c0e3b2fc2717a4a55d019560a5574baf8cd0" dependencies = [ "async-utility", "async-wsocket", @@ -5504,9 +5675,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -5940,15 +6111,15 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "opaquerr" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a7b7f0accc9fdd8e514f122a697adf824d55de481ca26c31ff8f9a8e813c5" +checksum = "4f933a4265d5cdad61d19bbdfc972ea5726d56cd8d3d57b8f2d3c365dd42bee9" [[package]] name = "open" -version = "5.4.0" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b3d059e795d52b8a72fef45658620edd4d9c359b338564aa14391ffa511ed5" +checksum = "ade3be4664bc1ef537ce133015f04c176b737815c2ba9fd60edf212d6e90dd55" dependencies = [ "is-wsl", "libc", @@ -5968,9 +6139,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-float" -version = "5.3.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" +checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0" dependencies = [ "num-traits", ] @@ -6055,6 +6226,13 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "paths" +version = "1.0.0" +dependencies = [ + "dirs", +] + [[package]] name = "pbkdf2" version = "0.12.2" @@ -6084,7 +6262,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "perf" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "collections", "serde", @@ -6231,9 +6409,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "png" @@ -6309,9 +6487,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" @@ -6341,9 +6519,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "zerovec", ] @@ -6394,28 +6572,6 @@ dependencies = [ "toml_edit 0.25.13+spec-1.1.0", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "proc-macro2" version = "1.0.107" @@ -6453,10 +6609,40 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "proptest" +version = "1.10.0" +source = "git+https://github.com/proptest-rs/proptest?rev=3dca198a8fef1b32e3a66f1e1897c955b4dc5b5b#3dca198a8fef1b32e3a66f1e1897c955b4dc5b5b" +dependencies = [ + "bit-set 0.8.0", + "bit-vec 0.8.0", + "bitflags 2.13.1", + "num-traits", + "proptest-macro", + "rand 0.9.5", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "proptest-macro" +version = "0.5.0" +source = "git+https://github.com/proptest-rs/proptest?rev=3dca198a8fef1b32e3a66f1e1897c955b4dc5b5b#3dca198a8fef1b32e3a66f1e1897c955b4dc5b5b" +dependencies = [ + "convert_case 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "psm" version = "0.1.32" -source = "git+https://github.com/rust-lang/stacker?branch=master#cdf19cf36cd0343a97c174ee6f7f8241f88b35f0" +source = "git+https://github.com/rust-lang/stacker?branch=master#d3ac2df79a409c681329006e9b31c96ab9c5fcae" dependencies = [ "ar_archive_writer", "cc", @@ -6500,21 +6686,18 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quick-error" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" -[[package]] -name = "quick-xml" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" -dependencies = [ - "memchr", -] - [[package]] name = "quick-xml" version = "0.41.0" @@ -6538,7 +6721,7 @@ dependencies = [ "rustc-hash 2.1.3", "rustls", "socket2", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tracing", "web-time", @@ -6546,9 +6729,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.16" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" dependencies = [ "aws-lc-rs", "bytes", @@ -6561,7 +6744,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.19", + "thiserror 2.0.20", "tinyvec", "tracing", "web-time", @@ -6687,6 +6870,15 @@ dependencies = [ "rand_core 0.10.1", ] +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core 0.9.5", +] + [[package]] name = "range-alloc" version = "0.1.5" @@ -6695,9 +6887,9 @@ checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" [[package]] name = "rangemap" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" +checksum = "a611d15b50743feb4c76b7d03edcb0e64f399c26961e4efe6975bc398be6aa3d" [[package]] name = "rav1e" @@ -6729,7 +6921,7 @@ dependencies = [ "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", - "thiserror 2.0.19", + "thiserror 2.0.20", "v_frame", "wasm-bindgen", ] @@ -6743,7 +6935,7 @@ dependencies = [ "avif-serialize", "imgref", "loop9", - "quick-error", + "quick-error 2.0.1", "rav1e", "rayon", "rgb", @@ -6814,7 +7006,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.12.2", + "font-types 0.12.4", "once_cell", ] @@ -6841,33 +7033,33 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] name = "ref-cast" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" +checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" +checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] name = "refineable" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "derive_refineable", ] @@ -6886,9 +7078,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -6950,7 +7142,7 @@ dependencies = [ [[package]] name = "reqwest_client" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "anyhow", "bytes", @@ -6960,7 +7152,6 @@ dependencies = [ "http_client_tls", "log", "regex", - "serde", "tokio", "zed-reqwest", ] @@ -7280,9 +7471,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "aws-lc-rs", "ring", @@ -7296,6 +7487,18 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error 1.2.3", + "tempfile", + "wait-timeout", +] + [[package]] name = "rustybuzz" version = "0.20.1" @@ -7351,7 +7554,7 @@ dependencies = [ [[package]] name = "scheduler" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "async-task", "backtrace", @@ -7360,6 +7563,7 @@ dependencies = [ "futures", "parking_lot", "rand 0.9.5", + "wasm_thread", "web-time", ] @@ -7386,7 +7590,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -7448,7 +7652,7 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.14.101", "rand 0.8.7", "secp256k1-sys", ] @@ -7557,7 +7761,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -7568,7 +7772,7 @@ checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -7602,7 +7806,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -7734,6 +7938,8 @@ dependencies = [ name = "signed" version = "1.0.0" dependencies = [ + "assets", + "dock", "gpui", "gpui-component", "gpui_linux", @@ -7741,14 +7947,19 @@ dependencies = [ "gpui_platform", "gpui_windows", "log", + "paths", "reqwest_client", + "signed_state", + "tracing", "tracing-subscriber", + "workspace", ] [[package]] name = "signed_core" version = "1.0.0" dependencies = [ + "gpui", "nostr", ] @@ -7760,6 +7971,7 @@ dependencies = [ "gix", "nostr", "signed_core", + "tempfile", ] [[package]] @@ -7782,6 +7994,7 @@ name = "signed_state" version = "1.0.0" dependencies = [ "anyhow", + "bitcoin_hashes 1.2.0", "flume 0.11.1", "gpui", "log", @@ -7790,7 +8003,9 @@ dependencies = [ "nostr-sdk", "rustls", "signed_core", + "signed_git", "signed_nostr", + "utils", ] [[package]] @@ -7965,9 +8180,9 @@ dependencies = [ [[package]] name = "stacksafe" -version = "0.1.4" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9c1172965d317e87ddb6d364a040d958b40a1db82b6ef97da26253a8b3d090" +checksum = "95f9c34983ac74195c710c473db6fdf1085f64a47dbaa0090d1bea03be70da66" dependencies = [ "stacker", "stacksafe-macro", @@ -7975,13 +8190,13 @@ dependencies = [ [[package]] name = "stacksafe-macro" -version = "0.1.4" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172175341049678163e979d9107ca3508046d4d2a7c6682bee46ac541b17db69" +checksum = "6feeae42a2d6b0dcb8aeb2f08d9e48cdac600239cf8a20fc59f9e252e86bdfe1" dependencies = [ - "proc-macro-error2", + "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.4", ] [[package]] @@ -7996,6 +8211,12 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d08889ec5408683408db66ad89e0e1f93dff55c73a4ccc71c427d5b277ee47e6" +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + [[package]] name = "strict-num" version = "0.1.1" @@ -8060,7 +8281,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sum_tree" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "heapless 0.9.3", "log", @@ -8071,15 +8292,15 @@ dependencies = [ [[package]] name = "sval" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a370f3cd0422964fd9a19b6516f048527738e6ec50b1b0ff79b460b468390" +checksum = "ec4a2a7d92fa86fcc6222e4c3845f8486cff899d9db32480b26c91a5dbf2e22d" [[package]] name = "sval_buffer" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111e6e2dab25782acb41b281263f5f60d6f56a2ba0b3b076187ad23a1552544d" +checksum = "f4324db9ac500c609d659b752edf9c8abbf2233f8afd61a503fd6f88ed625032" dependencies = [ "sval", "sval_ref", @@ -8088,18 +8309,18 @@ dependencies = [ [[package]] name = "sval_dynamic" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590ac4ebd299740eac453162302a494e6d5b3be243feab8bf07d0d4331b6b2b3" +checksum = "4046add0eecf55e680b9e207edf5fc7737b18a1d950db363d97e7f1b2d7c629c" dependencies = [ "sval", ] [[package]] name = "sval_fmt" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b964d6d917267355d7f343c515b908586e5b4aeeada328738f703452f9412d6" +checksum = "911a3486b5984a0a4f25edefcf2c2dba23654c29f63e75493b671d338bf24243" dependencies = [ "itoa", "ryu", @@ -8108,9 +8329,9 @@ dependencies = [ [[package]] name = "sval_json" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea35e4d6b997acc7dc4786ab782f6a6c5000efe4ae93a2db89cf350775fe5fe" +checksum = "da53aae7c737b5b5f1be4bcb0ff20e057bf6b2ee4e9d025560075c5830d09f95" dependencies = [ "itoa", "ryu", @@ -8119,9 +8340,9 @@ dependencies = [ [[package]] name = "sval_nested" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a73195ebd4b3e5866db2e1b75f3f383657ad5abc600c646d69b4f064fee89154" +checksum = "df24df43cbdc4bb8c9f5ed19d0d57dc8f60a1a4259cdce52d597fe774ad3a71f" dependencies = [ "sval", "sval_buffer", @@ -8130,18 +8351,18 @@ dependencies = [ [[package]] name = "sval_ref" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ef28df9d586bfd15115286651337cb5645f8c203160d22d2d1a20cf13c428c" +checksum = "2bebc17f0f1fad060e57b778728d41ef87627e9111a6365d7463472cb58fc1b3" dependencies = [ "sval", ] [[package]] name = "sval_serde" -version = "2.21.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d72fbe6537e88878f10237bde71ae4a1b65b2bf54bdf274abc566fc696334c92" +checksum = "9f26fe3f6a68b40e6c8d654ea48c00e4316272fddf68c80493714c1b034ae70b" dependencies = [ "serde_core", "sval", @@ -8198,9 +8419,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" dependencies = [ "proc-macro2", "quote", @@ -8236,6 +8457,24 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "syntect" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "656b45c05d95a5704399aeef6bd0ddec7b2b3531b7c9e900abbf7c4d2190c925" +dependencies = [ + "bincode", + "fancy-regex", + "flate2", + "fnv", + "once_cell", + "regex-syntax", + "serde", + "serde_derive", + "thiserror 2.0.20", + "walkdir", +] + [[package]] name = "sys-locale" version = "0.3.2" @@ -8282,14 +8521,14 @@ dependencies = [ [[package]] name = "taffy" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340a09581f29809fc0df82a3955501dc7f2a21f887e5d1c13dbe288fe1c0bef4" +checksum = "c034e05f6ee85a12daa63863c2245797715075c70649947aa0da54f3f2ab1d0f" dependencies = [ "arrayvec", - "grid", "serde", "slotmap", + "smallvec", ] [[package]] @@ -8310,7 +8549,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed071c670382e85fc2f48ae706492d8c338f4f89bf72520d32f8abfe880aade" dependencies = [ - "thiserror 2.0.19", + "thiserror 2.0.20", "windows 0.61.3", "windows-version", ] @@ -8359,11 +8598,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.19", + "thiserror-impl 2.0.20", ] [[package]] @@ -8379,13 +8618,13 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -8406,7 +8645,7 @@ dependencies = [ "fax", "flate2", "half", - "quick-error", + "quick-error 2.0.1", "weezl", "zune-jpeg 0.5.15", ] @@ -8467,9 +8706,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "zerovec", @@ -8522,7 +8761,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -8784,6 +9023,366 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tree-sitter" +version = "0.26.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ebdd3a5a7e28a1890b876fdbd0c3c0fe0a6336cffaa104f11b9f720c9daa29" +dependencies = [ + "cc", + "regex", + "regex-syntax", + "serde_json", + "streaming-iterator", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-astro-next" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794a4a59fc2d88e49b4bc41fef9522d77184a36f4e68bbaf545cd1eb2364c46e" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-bash" +version = "0.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "329a4d48623ac337d42b1df84e81a1c9dbb2946907c102ca72db158c1964a52e" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-c" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b2eb57a55fed6b00812912e730b7a275cf4fe98bfd6a5d76263d4438371728" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-c-sharp" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1aac67f1ad71de1d6d39708d34811081c26dfa495658de6c14c34200849357c" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-cmake" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164e0c4f4236ec5ceff14824a5528615cf462e100467e49826442ff57d327061" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-cpp" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2196ea9d47b4ab4a31b9297eaa5a5d19a0b121dceb9f118f6790ad0ab94743" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-css" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad6489794d41350d12a7fbe520e5199f688618f43aace5443980d1ddcf1b29e" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-diff" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe1e5ca280a65dfe5ba4205c1bcc84edf486464fed315db53dee6da9a335889" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-elixir" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66dd064a762ed95bfc29857fa3cb7403bb1e5cb88112de0f6341b7e47284ba40" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-embedded-template" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790063ef14e5b67556abc0b3be0ed863fb41d65ee791cf8c0b20eb42a1fa46af" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-go" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b13d476345220dbe600147dd444165c5791bf85ef53e28acbedd46112ee18431" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-graphql" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efedc4cac157161cc23a0adc4553a2cedc908e1cd754b6cd033a919bb81ce5d6" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-html" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261b708e5d92061ede329babaaa427b819329a9d427a1d710abb0f67bbef63ee" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-java" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aa6cbcdc8c679b214e616fd3300da67da0e492e066df01bcf5a5921a71e90d6" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-javascript" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf40bf599e0416c16c125c3cec10ee5ddc7d1bb8b0c60fa5c4de249ad34dc1b1" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-jsdoc" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3862dfcb1038fc5e7812d7df14190afdeb7e1415288fd5f51f58395f8cb0faf" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-json" +version = "0.24.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d727acca406c0020cffc6cf35516764f36c8e3dc4408e5ebe2cb35a947ec471" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-kotlin-sg" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06ec43ae3c12165d4ac08afe4e1f5fc6757ffe274fa7bd5af9007ef11ba4319" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-language" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782" + +[[package]] +name = "tree-sitter-lua" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea992f4164d83f371ef1239ae178c4d4596c296c09055e9a48bb02a2760403af" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-make" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5998dc7cbcbdab19fae8aefef982bf2d6544513d8d2e69cc44aec4c63810104" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-md" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2efd398be546456c814598ee56c0f51769a77241511b4a58077815d120afa882" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-php" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c17c3ab69052c5eeaa7ff5cd972dd1bc25d1b97ee779fec391ad3b5df5592" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-proto" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e4360b434b5980fc397137ef29e1988619fef4159ac86fa7ac5777d459d3924" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-python" +version = "0.23.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d065aaa27f3aaceaf60c1f0e0ac09e1cb9eb8ed28e7bcdaa52129cffc7f4b04" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-ruby" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0484ea4ef6bb9c575b4fdabde7e31340a8d2dbc7d52b321ac83da703249f95" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-rust" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439e577dbe07423ec2582ac62c7531120dbfccfa6e5f92406f93dd271a120e45" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-scala" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efde5e68b4736e9eac17bfa296c6f104a26bffab363b365eb898c40a63c15d2f" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-sequel" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d198ad3c319c02e43c21efa1ec796b837afcb96ffaef1a40c1978fbdcec7d17" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-svelte-next" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f88190d0743e897c3e148a7e241aba0a8844b8afe816943851426e3f7b9753" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-swift" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe36052155b9dd69ca82b3b8f1b4ccfb2d867125ac1a4db1dd7331829242668c" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-toml-ng" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9adc2c898ae49730e857d75be403da3f92bb81d8e37a2f918a08dd10de5ebb1" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-typescript" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5f76ed8d947a75cc446d5fccd8b602ebf0cde64ccf2ffa434d873d7a575eff" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-yaml" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c223db85f05e34794f065454843b0668ebc15d240ada63e2b5939f43ce7c97" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-zig" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab11fc124851b0db4dd5e55983bbd9631192e93238389dcd44521715e5d53e28" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "triomphe" version = "0.1.16" @@ -8825,7 +9424,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.19", + "thiserror 2.0.20", "utf-8", ] @@ -8852,6 +9451,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicase" version = "2.9.0" @@ -9049,18 +9654,25 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "util_macros" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "perf", "quote", "syn 2.0.119", ] +[[package]] +name = "utils" +version = "1.0.0" +dependencies = [ + "nostr", +] + [[package]] name = "uuid" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +checksum = "f053576934f05a761a402421fbbe3d425d9366f75f978806a037b3ca481abecc" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -9148,6 +9760,15 @@ dependencies = [ "libc", ] +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "waker-fn" version = "1.2.0" @@ -9190,9 +9811,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -9203,9 +9824,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.76" +version = "0.4.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" dependencies = [ "js-sys", "wasm-bindgen", @@ -9213,9 +9834,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9223,9 +9844,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", @@ -9236,9 +9857,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] @@ -9269,9 +9890,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" +checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078" dependencies = [ "cc", "downcast-rs", @@ -9349,7 +9970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", - "quick-xml 0.41.0", + "quick-xml", "quote", ] @@ -9367,9 +9988,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" dependencies = [ "js-sys", "wasm-bindgen", @@ -9387,9 +10008,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6eb50cc7b133f0c7720a64661fbd8e520b882f8ab9015deea5e00d5cd809c4" +checksum = "62c35be770821a214dbc362fc26908c853e776c0004294d0b10b8a6bad582f94" dependencies = [ "jni 0.22.4", "log", @@ -9480,8 +10101,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f519832254e56965a9940c4af57dcb75f702b6f6fa4a0b172f685395843a4d7" dependencies = [ "arrayvec", - "bit-set", - "bit-vec", + "bit-set 0.9.1", + "bit-vec 0.9.1", "bitflags 2.13.1", "bytemuck", "cfg_aliases", @@ -9497,9 +10118,10 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", + "wgpu-core-deps-wasm", "wgpu-core-deps-windows-linux-android", "wgpu-hal", "wgpu-naga-bridge", @@ -9524,6 +10146,15 @@ dependencies = [ "wgpu-hal", ] +[[package]] +name = "wgpu-core-deps-wasm" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1fb1798be2a912497d4c224f72d39bb0cb34af50e8bcc29865bc339c943059" +dependencies = [ + "wgpu-hal", +] + [[package]] name = "wgpu-core-deps-windows-linux-android" version = "29.0.4" @@ -9542,7 +10173,7 @@ dependencies = [ "android_system_properties", "arrayvec", "ash", - "bit-set", + "bit-set 0.9.1", "bitflags 2.13.1", "block2 0.6.2", "bytemuck", @@ -9576,7 +10207,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "wasm-bindgen", "wayland-sys", "web-sys", @@ -9707,7 +10338,7 @@ checksum = "3a4df73e95feddb9ec1a7e9c2ca6323b8c97d5eeeff78d28f1eccdf19c882b24" dependencies = [ "parking_lot", "rayon", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows 0.61.3", "windows-future 0.2.1", ] @@ -10294,6 +10925,26 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +[[package]] +name = "workspace" +version = "1.0.0" +dependencies = [ + "anyhow", + "assets", + "dock", + "futures", + "gix", + "gpui", + "gpui-base", + "gpui-component", + "log", + "nostr", + "signed_core", + "signed_git", + "signed_state", + "utils", +] + [[package]] name = "workspace-hack" version = "0.1.0" @@ -10302,9 +10953,9 @@ checksum = "beffa227304dbaea3ad6a06ac674f9bc83a3dec3b7f63eeb442de37e7cb6bb01" [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "x11" @@ -10348,13 +10999,13 @@ checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "xcb" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4c580d8205abb0a5cf4eb7e927bd664e425b6c3263f9c5310583da96970cf6" +checksum = "a6c2ad15e0e922856ee89afe862b8992334bbe7953adad56cd1199358cb30566" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.13.1", "libc", - "quick-xml 0.30.0", + "quick-xml", "x11", ] @@ -10400,9 +11051,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.28" +version = "0.8.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7" [[package]] name = "xml5ever" @@ -10469,9 +11120,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.18.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -10528,14 +11179,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.18.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.4", "zbus_names", "zvariant", "zvariant_utils", @@ -10564,6 +11215,15 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + [[package]] name = "zed-font-kit" version = "0.14.1-zed" @@ -10691,18 +11351,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.55" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.55" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", @@ -10752,9 +11412,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -10763,9 +11423,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "yoke", "zerofrom", @@ -10774,13 +11434,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.4", ] [[package]] @@ -10792,7 +11452,7 @@ checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" [[package]] name = "zlog" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "anyhow", "chrono", @@ -10809,7 +11469,7 @@ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "ztracing" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" dependencies = [ "tracing", "tracing-subscriber", @@ -10820,7 +11480,7 @@ dependencies = [ [[package]] name = "ztracing_macro" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#35cb7558a9d9a6f2eaf31ce2e4dce4a0575820ef" +source = "git+https://github.com/zed-industries/zed#5631830c564afa89b3aba679f45d9c3345f9460f" [[package]] name = "zune-core" @@ -10830,9 +11490,9 @@ checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-inflate" @@ -10858,46 +11518,47 @@ version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" dependencies = [ - "zune-core 0.5.1", + "zune-core 0.5.3", ] [[package]] name = "zvariant" -version = "5.13.1" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" dependencies = [ "endi", "enumflags2", "serde", "serde_bytes", "winnow 1.0.4", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.13.1" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.4", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.5.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.119", + "syn 3.0.4", "winnow 1.0.4", ] diff --git a/Cargo.toml b/Cargo.toml index 0b8f27f..12b3c04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,15 +18,20 @@ gpui_macos = { git = "https://github.com/zed-industries/zed" } gpui_tokio = { git = "https://github.com/zed-industries/zed" } reqwest_client = { git = "https://github.com/zed-industries/zed" } -gpui-component = { git = "https://github.com/longbridge/gpui-component" } +# `tree-sitter-languages` enables syntax highlighting for the TextView +# code preview (fenced code blocks are highlighted with tree-sitter). +gpui-component = { git = "https://github.com/longbridge/gpui-component", features = ["tree-sitter-languages"] } +gpui-base = { git = "https://github.com/longbridge/gpui-component" } -nostr = { git = "https://github.com/rust-nostr/nostr", rev = "d0a1d67d3c9e5cf9710807a6a414c155a5f47215", features = ["nip59", "nip49", "nip44"] } -nostr-lmdb = { git = "https://github.com/rust-nostr/nostr", rev = "d0a1d67d3c9e5cf9710807a6a414c155a5f47215" } -nostr-memory = { git = "https://github.com/rust-nostr/nostr", rev = "d0a1d67d3c9e5cf9710807a6a414c155a5f47215" } -nostr-blossom = { git = "https://github.com/rust-nostr/nostr", rev = "d0a1d67d3c9e5cf9710807a6a414c155a5f47215" } -nostr-gossip-memory = { git = "https://github.com/rust-nostr/nostr", rev = "d0a1d67d3c9e5cf9710807a6a414c155a5f47215" } -nostr-connect = { git = "https://github.com/rust-nostr/nostr", rev = "d0a1d67d3c9e5cf9710807a6a414c155a5f47215" } -nostr-sdk = { git = "https://github.com/rust-nostr/nostr", rev = "d0a1d67d3c9e5cf9710807a6a414c155a5f47215" } +dock = { path = "crates/dock" } + +nostr = { git = "https://github.com/rust-nostr/nostr", features = ["nip59", "nip49", "nip44", "os-rng"] } +nostr-lmdb = { git = "https://github.com/rust-nostr/nostr" } +nostr-memory = { git = "https://github.com/rust-nostr/nostr" } +nostr-blossom = { git = "https://github.com/rust-nostr/nostr" } +nostr-gossip-memory = { git = "https://github.com/rust-nostr/nostr" } +nostr-connect = { git = "https://github.com/rust-nostr/nostr" } +nostr-sdk = { git = "https://github.com/rust-nostr/nostr" } gix = { version = "0.86", default-features = false, features = ["sha1", "blocking-network-client", "blocking-http-transport-reqwest-rust-tls", "worktree-mutation"] } @@ -42,6 +47,7 @@ log = "0.4" anyhow = "1.0.44" webbrowser = "1.0.4" tracing-subscriber = { version = "0.3.18", features = ["fmt"] } +tracing = "0.1" errno = { version = "0.3.14", default-features = false } instant = "0.1" diff --git a/crates/assets/Cargo.toml b/crates/assets/Cargo.toml new file mode 100644 index 0000000..df76dfc --- /dev/null +++ b/crates/assets/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "assets" +version.workspace = true +edition.workspace = true +publish.workspace = true + +[dependencies] +gpui.workspace = true +gpui-component.workspace = true +anyhow.workspace = true +log.workspace = true +rust-embed.workspace = true + +[dev-dependencies] +serde_json.workspace = true diff --git a/crates/assets/assets/.keep b/crates/assets/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/crates/assets/assets/icons/a-large-small.svg b/crates/assets/assets/icons/a-large-small.svg new file mode 100644 index 0000000..8a2054b --- /dev/null +++ b/crates/assets/assets/icons/a-large-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/arrow-down.svg b/crates/assets/assets/icons/arrow-down.svg new file mode 100644 index 0000000..3458ca1 --- /dev/null +++ b/crates/assets/assets/icons/arrow-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/arrow-left.svg b/crates/assets/assets/icons/arrow-left.svg new file mode 100644 index 0000000..4306eda --- /dev/null +++ b/crates/assets/assets/icons/arrow-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/arrow-right.svg b/crates/assets/assets/icons/arrow-right.svg new file mode 100644 index 0000000..8aa7e0d --- /dev/null +++ b/crates/assets/assets/icons/arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/arrow-up.svg b/crates/assets/assets/icons/arrow-up.svg new file mode 100644 index 0000000..9f49eb5 --- /dev/null +++ b/crates/assets/assets/icons/arrow-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/asterisk.svg b/crates/assets/assets/icons/asterisk.svg new file mode 100644 index 0000000..db9b6d9 --- /dev/null +++ b/crates/assets/assets/icons/asterisk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/battery-charging.svg b/crates/assets/assets/icons/battery-charging.svg new file mode 100644 index 0000000..6d1fb4e --- /dev/null +++ b/crates/assets/assets/icons/battery-charging.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/battery-full.svg b/crates/assets/assets/icons/battery-full.svg new file mode 100644 index 0000000..b21cf4e --- /dev/null +++ b/crates/assets/assets/icons/battery-full.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/battery-low.svg b/crates/assets/assets/icons/battery-low.svg new file mode 100644 index 0000000..6d41f28 --- /dev/null +++ b/crates/assets/assets/icons/battery-low.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/battery-medium.svg b/crates/assets/assets/icons/battery-medium.svg new file mode 100644 index 0000000..18daeeb --- /dev/null +++ b/crates/assets/assets/icons/battery-medium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/battery-warning.svg b/crates/assets/assets/icons/battery-warning.svg new file mode 100644 index 0000000..4dc94a5 --- /dev/null +++ b/crates/assets/assets/icons/battery-warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/battery.svg b/crates/assets/assets/icons/battery.svg new file mode 100644 index 0000000..bb105c5 --- /dev/null +++ b/crates/assets/assets/icons/battery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/bell.svg b/crates/assets/assets/icons/bell.svg new file mode 100644 index 0000000..455e1ff --- /dev/null +++ b/crates/assets/assets/icons/bell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/book-open.svg b/crates/assets/assets/icons/book-open.svg new file mode 100644 index 0000000..f3fc42b --- /dev/null +++ b/crates/assets/assets/icons/book-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/bot.svg b/crates/assets/assets/icons/bot.svg new file mode 100644 index 0000000..cabeb2a --- /dev/null +++ b/crates/assets/assets/icons/bot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/building-2.svg b/crates/assets/assets/icons/building-2.svg new file mode 100644 index 0000000..496eff3 --- /dev/null +++ b/crates/assets/assets/icons/building-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/calendar.svg b/crates/assets/assets/icons/calendar.svg new file mode 100644 index 0000000..9d6afdd --- /dev/null +++ b/crates/assets/assets/icons/calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/case-sensitive.svg b/crates/assets/assets/icons/case-sensitive.svg new file mode 100644 index 0000000..8a2054b --- /dev/null +++ b/crates/assets/assets/icons/case-sensitive.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/chart-pie.svg b/crates/assets/assets/icons/chart-pie.svg new file mode 100644 index 0000000..3832648 --- /dev/null +++ b/crates/assets/assets/icons/chart-pie.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/check.svg b/crates/assets/assets/icons/check.svg new file mode 100644 index 0000000..899c1cb --- /dev/null +++ b/crates/assets/assets/icons/check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/chevron-down.svg b/crates/assets/assets/icons/chevron-down.svg new file mode 100644 index 0000000..7a0a041 --- /dev/null +++ b/crates/assets/assets/icons/chevron-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/chevron-left.svg b/crates/assets/assets/icons/chevron-left.svg new file mode 100644 index 0000000..7e51ed1 --- /dev/null +++ b/crates/assets/assets/icons/chevron-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/chevron-right.svg b/crates/assets/assets/icons/chevron-right.svg new file mode 100644 index 0000000..0b8688f --- /dev/null +++ b/crates/assets/assets/icons/chevron-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/chevron-up.svg b/crates/assets/assets/icons/chevron-up.svg new file mode 100644 index 0000000..f9b878e --- /dev/null +++ b/crates/assets/assets/icons/chevron-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/chevrons-up-down.svg b/crates/assets/assets/icons/chevrons-up-down.svg new file mode 100644 index 0000000..1fe0fa9 --- /dev/null +++ b/crates/assets/assets/icons/chevrons-up-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/circle-check.svg b/crates/assets/assets/icons/circle-check.svg new file mode 100644 index 0000000..d1e1f8b --- /dev/null +++ b/crates/assets/assets/icons/circle-check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/circle-plus.svg b/crates/assets/assets/icons/circle-plus.svg new file mode 100644 index 0000000..96ac654 --- /dev/null +++ b/crates/assets/assets/icons/circle-plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/circle-user.svg b/crates/assets/assets/icons/circle-user.svg new file mode 100644 index 0000000..9f41a7d --- /dev/null +++ b/crates/assets/assets/icons/circle-user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/circle-x.svg b/crates/assets/assets/icons/circle-x.svg new file mode 100644 index 0000000..c9904ae --- /dev/null +++ b/crates/assets/assets/icons/circle-x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/close.svg b/crates/assets/assets/icons/close.svg new file mode 100644 index 0000000..03a63bc --- /dev/null +++ b/crates/assets/assets/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/copy.svg b/crates/assets/assets/icons/copy.svg new file mode 100644 index 0000000..d03829b --- /dev/null +++ b/crates/assets/assets/icons/copy.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/cpu.svg b/crates/assets/assets/icons/cpu.svg new file mode 100644 index 0000000..90cff8b --- /dev/null +++ b/crates/assets/assets/icons/cpu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/dash.svg b/crates/assets/assets/icons/dash.svg new file mode 100644 index 0000000..1bd2a89 --- /dev/null +++ b/crates/assets/assets/icons/dash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/delete.svg b/crates/assets/assets/icons/delete.svg new file mode 100644 index 0000000..deb1055 --- /dev/null +++ b/crates/assets/assets/icons/delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/ellipsis-vertical.svg b/crates/assets/assets/icons/ellipsis-vertical.svg new file mode 100644 index 0000000..47e8471 --- /dev/null +++ b/crates/assets/assets/icons/ellipsis-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/ellipsis.svg b/crates/assets/assets/icons/ellipsis.svg new file mode 100644 index 0000000..851b590 --- /dev/null +++ b/crates/assets/assets/icons/ellipsis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/external-link.svg b/crates/assets/assets/icons/external-link.svg new file mode 100644 index 0000000..b6fbc8b --- /dev/null +++ b/crates/assets/assets/icons/external-link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/eye-off.svg b/crates/assets/assets/icons/eye-off.svg new file mode 100644 index 0000000..ab2c9f0 --- /dev/null +++ b/crates/assets/assets/icons/eye-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/eye.svg b/crates/assets/assets/icons/eye.svg new file mode 100644 index 0000000..cec895d --- /dev/null +++ b/crates/assets/assets/icons/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/file.svg b/crates/assets/assets/icons/file.svg new file mode 100644 index 0000000..9fd0ca6 --- /dev/null +++ b/crates/assets/assets/icons/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/filter.svg b/crates/assets/assets/icons/filter.svg new file mode 100644 index 0000000..20829cb --- /dev/null +++ b/crates/assets/assets/icons/filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/folder-closed.svg b/crates/assets/assets/icons/folder-closed.svg new file mode 100644 index 0000000..7f1eaeb --- /dev/null +++ b/crates/assets/assets/icons/folder-closed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/folder-open.svg b/crates/assets/assets/icons/folder-open.svg new file mode 100644 index 0000000..db7f94b --- /dev/null +++ b/crates/assets/assets/icons/folder-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/folder.svg b/crates/assets/assets/icons/folder.svg new file mode 100644 index 0000000..e0edfdd --- /dev/null +++ b/crates/assets/assets/icons/folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/frame.svg b/crates/assets/assets/icons/frame.svg new file mode 100644 index 0000000..c799622 --- /dev/null +++ b/crates/assets/assets/icons/frame.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/gallery-vertical-end.svg b/crates/assets/assets/icons/gallery-vertical-end.svg new file mode 100644 index 0000000..0c3b5b7 --- /dev/null +++ b/crates/assets/assets/icons/gallery-vertical-end.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/git-branch.svg b/crates/assets/assets/icons/git-branch.svg new file mode 100644 index 0000000..69f6b1a --- /dev/null +++ b/crates/assets/assets/icons/git-branch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-clone.svg b/crates/assets/assets/icons/git-clone.svg new file mode 100644 index 0000000..0fa1753 --- /dev/null +++ b/crates/assets/assets/icons/git-clone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-issue-close.svg b/crates/assets/assets/icons/git-issue-close.svg new file mode 100644 index 0000000..1468023 --- /dev/null +++ b/crates/assets/assets/icons/git-issue-close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-issue-done.svg b/crates/assets/assets/icons/git-issue-done.svg new file mode 100644 index 0000000..d793147 --- /dev/null +++ b/crates/assets/assets/icons/git-issue-done.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/git-issue-ongoing.svg b/crates/assets/assets/icons/git-issue-ongoing.svg new file mode 100644 index 0000000..040d1a2 --- /dev/null +++ b/crates/assets/assets/icons/git-issue-ongoing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-issue-open.svg b/crates/assets/assets/icons/git-issue-open.svg new file mode 100644 index 0000000..22b9465 --- /dev/null +++ b/crates/assets/assets/icons/git-issue-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-pull-request-closed.svg b/crates/assets/assets/icons/git-pull-request-closed.svg new file mode 100644 index 0000000..84eab1f --- /dev/null +++ b/crates/assets/assets/icons/git-pull-request-closed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-pull-request-draft.svg b/crates/assets/assets/icons/git-pull-request-draft.svg new file mode 100644 index 0000000..df1fc0e --- /dev/null +++ b/crates/assets/assets/icons/git-pull-request-draft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-pull-request-merged.svg b/crates/assets/assets/icons/git-pull-request-merged.svg new file mode 100644 index 0000000..7ff4a1f --- /dev/null +++ b/crates/assets/assets/icons/git-pull-request-merged.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/git-pull-request.svg b/crates/assets/assets/icons/git-pull-request.svg new file mode 100644 index 0000000..8d5cb60 --- /dev/null +++ b/crates/assets/assets/icons/git-pull-request.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/github.svg b/crates/assets/assets/icons/github.svg new file mode 100644 index 0000000..7b3bfb7 --- /dev/null +++ b/crates/assets/assets/icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/global-on.svg b/crates/assets/assets/icons/global-on.svg new file mode 100644 index 0000000..40fc5ec --- /dev/null +++ b/crates/assets/assets/icons/global-on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/globe.svg b/crates/assets/assets/icons/globe.svg new file mode 100644 index 0000000..40fc5ec --- /dev/null +++ b/crates/assets/assets/icons/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/hard-drive.svg b/crates/assets/assets/icons/hard-drive.svg new file mode 100644 index 0000000..542b77c --- /dev/null +++ b/crates/assets/assets/icons/hard-drive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/heart-off.svg b/crates/assets/assets/icons/heart-off.svg new file mode 100644 index 0000000..444628f --- /dev/null +++ b/crates/assets/assets/icons/heart-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/heart.svg b/crates/assets/assets/icons/heart.svg new file mode 100644 index 0000000..83d1af5 --- /dev/null +++ b/crates/assets/assets/icons/heart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/inbox.svg b/crates/assets/assets/icons/inbox.svg new file mode 100644 index 0000000..6e9b642 --- /dev/null +++ b/crates/assets/assets/icons/inbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/info.svg b/crates/assets/assets/icons/info.svg new file mode 100644 index 0000000..73fa694 --- /dev/null +++ b/crates/assets/assets/icons/info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/inspector.svg b/crates/assets/assets/icons/inspector.svg new file mode 100644 index 0000000..d61e916 --- /dev/null +++ b/crates/assets/assets/icons/inspector.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/layout-dashboard.svg b/crates/assets/assets/icons/layout-dashboard.svg new file mode 100644 index 0000000..53afe50 --- /dev/null +++ b/crates/assets/assets/icons/layout-dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/loader-circle.svg b/crates/assets/assets/icons/loader-circle.svg new file mode 100644 index 0000000..55e4ea5 --- /dev/null +++ b/crates/assets/assets/icons/loader-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/loader.svg b/crates/assets/assets/icons/loader.svg new file mode 100644 index 0000000..185f0af --- /dev/null +++ b/crates/assets/assets/icons/loader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/map.svg b/crates/assets/assets/icons/map.svg new file mode 100644 index 0000000..a5425db --- /dev/null +++ b/crates/assets/assets/icons/map.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/markdown.svg b/crates/assets/assets/icons/markdown.svg new file mode 100644 index 0000000..f11c48f --- /dev/null +++ b/crates/assets/assets/icons/markdown.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/maximize.svg b/crates/assets/assets/icons/maximize.svg new file mode 100644 index 0000000..398a8c3 --- /dev/null +++ b/crates/assets/assets/icons/maximize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/memory-stick.svg b/crates/assets/assets/icons/memory-stick.svg new file mode 100644 index 0000000..cddb282 --- /dev/null +++ b/crates/assets/assets/icons/memory-stick.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/menu.svg b/crates/assets/assets/icons/menu.svg new file mode 100644 index 0000000..2f00246 --- /dev/null +++ b/crates/assets/assets/icons/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/minimize.svg b/crates/assets/assets/icons/minimize.svg new file mode 100644 index 0000000..51b44e4 --- /dev/null +++ b/crates/assets/assets/icons/minimize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/minus.svg b/crates/assets/assets/icons/minus.svg new file mode 100644 index 0000000..1bd2a89 --- /dev/null +++ b/crates/assets/assets/icons/minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/moon.svg b/crates/assets/assets/icons/moon.svg new file mode 100644 index 0000000..c991f89 --- /dev/null +++ b/crates/assets/assets/icons/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/network.svg b/crates/assets/assets/icons/network.svg new file mode 100644 index 0000000..6587f86 --- /dev/null +++ b/crates/assets/assets/icons/network.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/palette.svg b/crates/assets/assets/icons/palette.svg new file mode 100644 index 0000000..d7a32e8 --- /dev/null +++ b/crates/assets/assets/icons/palette.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/panel-bottom-open.svg b/crates/assets/assets/icons/panel-bottom-open.svg new file mode 100644 index 0000000..58cb22a --- /dev/null +++ b/crates/assets/assets/icons/panel-bottom-open.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/panel-bottom.svg b/crates/assets/assets/icons/panel-bottom.svg new file mode 100644 index 0000000..e017db3 --- /dev/null +++ b/crates/assets/assets/icons/panel-bottom.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/panel-left-close.svg b/crates/assets/assets/icons/panel-left-close.svg new file mode 100644 index 0000000..6cac95c --- /dev/null +++ b/crates/assets/assets/icons/panel-left-close.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/panel-left-open.svg b/crates/assets/assets/icons/panel-left-open.svg new file mode 100644 index 0000000..62bae09 --- /dev/null +++ b/crates/assets/assets/icons/panel-left-open.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/panel-left.svg b/crates/assets/assets/icons/panel-left.svg new file mode 100644 index 0000000..6cac95c --- /dev/null +++ b/crates/assets/assets/icons/panel-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/panel-right-close.svg b/crates/assets/assets/icons/panel-right-close.svg new file mode 100644 index 0000000..5fe9dcd --- /dev/null +++ b/crates/assets/assets/icons/panel-right-close.svg @@ -0,0 +1,14 @@ + diff --git a/crates/assets/assets/icons/panel-right-open.svg b/crates/assets/assets/icons/panel-right-open.svg new file mode 100644 index 0000000..3b5ff0b --- /dev/null +++ b/crates/assets/assets/icons/panel-right-open.svg @@ -0,0 +1 @@ + diff --git a/crates/assets/assets/icons/panel-right.svg b/crates/assets/assets/icons/panel-right.svg new file mode 100644 index 0000000..d37f5e7 --- /dev/null +++ b/crates/assets/assets/icons/panel-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/pause.svg b/crates/assets/assets/icons/pause.svg new file mode 100644 index 0000000..b9a49e5 --- /dev/null +++ b/crates/assets/assets/icons/pause.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/play.svg b/crates/assets/assets/icons/play.svg new file mode 100644 index 0000000..57b5217 --- /dev/null +++ b/crates/assets/assets/icons/play.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/plus.svg b/crates/assets/assets/icons/plus.svg new file mode 100644 index 0000000..7e2e5b8 --- /dev/null +++ b/crates/assets/assets/icons/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/redo-2.svg b/crates/assets/assets/icons/redo-2.svg new file mode 100644 index 0000000..51c616b --- /dev/null +++ b/crates/assets/assets/icons/redo-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/redo.svg b/crates/assets/assets/icons/redo.svg new file mode 100644 index 0000000..7a89cf8 --- /dev/null +++ b/crates/assets/assets/icons/redo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/replace.svg b/crates/assets/assets/icons/replace.svg new file mode 100644 index 0000000..fecb76d --- /dev/null +++ b/crates/assets/assets/icons/replace.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/resize-corner.svg b/crates/assets/assets/icons/resize-corner.svg new file mode 100644 index 0000000..9d3eef0 --- /dev/null +++ b/crates/assets/assets/icons/resize-corner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/search.svg b/crates/assets/assets/icons/search.svg new file mode 100644 index 0000000..07f3ac0 --- /dev/null +++ b/crates/assets/assets/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/settings-2.svg b/crates/assets/assets/icons/settings-2.svg new file mode 100644 index 0000000..8c0b6d1 --- /dev/null +++ b/crates/assets/assets/icons/settings-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/settings.svg b/crates/assets/assets/icons/settings.svg new file mode 100644 index 0000000..5ba9d43 --- /dev/null +++ b/crates/assets/assets/icons/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/sort-ascending.svg b/crates/assets/assets/icons/sort-ascending.svg new file mode 100644 index 0000000..268a8b0 --- /dev/null +++ b/crates/assets/assets/icons/sort-ascending.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/sort-descending.svg b/crates/assets/assets/icons/sort-descending.svg new file mode 100644 index 0000000..11ab2d7 --- /dev/null +++ b/crates/assets/assets/icons/sort-descending.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/square-terminal.svg b/crates/assets/assets/icons/square-terminal.svg new file mode 100644 index 0000000..1bc4c89 --- /dev/null +++ b/crates/assets/assets/icons/square-terminal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/star-fill.svg b/crates/assets/assets/icons/star-fill.svg new file mode 100644 index 0000000..4bd4c08 --- /dev/null +++ b/crates/assets/assets/icons/star-fill.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/star-off.svg b/crates/assets/assets/icons/star-off.svg new file mode 100644 index 0000000..6afff2f --- /dev/null +++ b/crates/assets/assets/icons/star-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/assets/assets/icons/star.svg b/crates/assets/assets/icons/star.svg new file mode 100644 index 0000000..0a13c9e --- /dev/null +++ b/crates/assets/assets/icons/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/sun.svg b/crates/assets/assets/icons/sun.svg new file mode 100644 index 0000000..8dfd5e3 --- /dev/null +++ b/crates/assets/assets/icons/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/tag.svg b/crates/assets/assets/icons/tag.svg new file mode 100644 index 0000000..e84a0c5 --- /dev/null +++ b/crates/assets/assets/icons/tag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/thumbs-down.svg b/crates/assets/assets/icons/thumbs-down.svg new file mode 100644 index 0000000..da52354 --- /dev/null +++ b/crates/assets/assets/icons/thumbs-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/thumbs-up.svg b/crates/assets/assets/icons/thumbs-up.svg new file mode 100644 index 0000000..8715ad7 --- /dev/null +++ b/crates/assets/assets/icons/thumbs-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/triangle-alert.svg b/crates/assets/assets/icons/triangle-alert.svg new file mode 100644 index 0000000..b456b4d --- /dev/null +++ b/crates/assets/assets/icons/triangle-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/undo-2.svg b/crates/assets/assets/icons/undo-2.svg new file mode 100644 index 0000000..e2ab153 --- /dev/null +++ b/crates/assets/assets/icons/undo-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/undo.svg b/crates/assets/assets/icons/undo.svg new file mode 100644 index 0000000..396852a --- /dev/null +++ b/crates/assets/assets/icons/undo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/unlock.svg b/crates/assets/assets/icons/unlock.svg new file mode 100644 index 0000000..c62caa1 --- /dev/null +++ b/crates/assets/assets/icons/unlock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/user.svg b/crates/assets/assets/icons/user.svg new file mode 100644 index 0000000..fd4dea4 --- /dev/null +++ b/crates/assets/assets/icons/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/window-close.svg b/crates/assets/assets/icons/window-close.svg new file mode 100644 index 0000000..4ee8e56 --- /dev/null +++ b/crates/assets/assets/icons/window-close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/window-maximize.svg b/crates/assets/assets/icons/window-maximize.svg new file mode 100644 index 0000000..b5a3265 --- /dev/null +++ b/crates/assets/assets/icons/window-maximize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/window-minimize.svg b/crates/assets/assets/icons/window-minimize.svg new file mode 100644 index 0000000..fcc1e94 --- /dev/null +++ b/crates/assets/assets/icons/window-minimize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/icons/window-restore.svg b/crates/assets/assets/icons/window-restore.svg new file mode 100644 index 0000000..f55fa10 --- /dev/null +++ b/crates/assets/assets/icons/window-restore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crates/assets/assets/themes/signed.json b/crates/assets/assets/themes/signed.json new file mode 100644 index 0000000..977c566 --- /dev/null +++ b/crates/assets/assets/themes/signed.json @@ -0,0 +1,576 @@ +{ + "$schema": "https://github.com/longbridge/gpui-component/raw/refs/heads/main/.theme-schema.json", + "name": "Signed", + "author": "Signed", + "url": "https://git.reya.su/reya/signed", + "themes": [ + { + "name": "Signed Light", + "mode": "light", + "colors": { + "accent.background": "#F4F4F5", + "accent.foreground": "#18181B", + "accordion.background": "#FFFFFF", + "background": "#FFFFFF", + "border": "#E4E4E7", + "button.background": "#FFFFFF", + "button.active.background": "#E4E4E7", + "button.foreground": "#18181B", + "button.hover.background": "#F4F4F5", + "button.danger.background": "#DC2626", + "button.danger.active.background": "#B91C1C", + "button.danger.foreground": "#FFFFFF", + "button.danger.hover.background": "#EF4444", + "button.info.background": "#0284C7", + "button.info.active.background": "#0369A1", + "button.info.foreground": "#FFFFFF", + "button.info.hover.background": "#0EA5E9", + "button.primary.background": "#C6FF4D", + "button.primary.active.background": "#65A30D", + "button.primary.foreground": "#0B0F0C", + "button.primary.hover.background": "#B2EC3C", + "button.secondary.background": "#F4F4F5", + "button.secondary.active.background": "#D4D4D8", + "button.secondary.foreground": "#18181B", + "button.secondary.hover.background": "#E4E4E7", + "button.success.background": "#2FBF71", + "button.success.active.background": "#1F9A58", + "button.success.foreground": "#0B0F0C", + "button.success.hover.background": "#2AB568", + "button.warning.background": "#D97706", + "button.warning.active.background": "#B45309", + "button.warning.foreground": "#FFFFFF", + "button.warning.hover.background": "#F59E0B", + "group_box.background": "#F4F4F5", + "group_box.foreground": "#18181B", + "group_box.title.foreground": "#18181B", + "caret": "#18181B", + "chart.1": "#65A30D", + "chart.2": "#2FBF71", + "chart.3": "#3F6212", + "chart.4": "#7A8B5F", + "chart.5": "#A1A1AA", + "chart_bullish": "#2FBF71", + "chart_bearish": "#DC2626", + "danger.background": "#DC2626", + "danger.active.background": "#B91C1C", + "danger.foreground": "#FFFFFF", + "danger.hover.background": "#EF4444", + "description_list.label.background": "#F4F4F5", + "description_list.label.foreground": "#71717A", + "drag.border": "#65A30D", + "drop_target.background": "#65A30D33", + "foreground": "#18181B", + "info.background": "#0284C7", + "info.active.background": "#0369A1", + "info.foreground": "#FFFFFF", + "info.hover.background": "#0EA5E9", + "input.border": "#D4D4D8", + "link": "#65A30D", + "link.active": "#3F6212", + "link.hover": "#4A7A0B", + "list.background": "#FFFFFF", + "list.active.background": "#C6FF4D40", + "list.active.border": "#65A30D80", + "list.even.background": "#FAFAFA", + "list.head.background": "#FAFAFA", + "list.hover.background": "#F4F4F5", + "muted.background": "#F4F4F5", + "muted.foreground": "#71717A", + "popover.background": "#FFFFFF", + "popover.foreground": "#18181B", + "primary.background": "#C6FF4D", + "primary.active.background": "#65A30D", + "primary.foreground": "#0B0F0C", + "primary.hover.background": "#B2EC3C", + "progress.bar.background": "#65A30D", + "ring": "#65A30D", + "scrollbar.background": "#FFFFFF00", + "scrollbar.thumb.background": "#A1A1AA99", + "scrollbar.thumb.hover.background": "#A1A1AA", + "secondary.background": "#F4F4F5", + "secondary.active.background": "#D4D4D8", + "secondary.foreground": "#18181B", + "secondary.hover.background": "#E4E4E7", + "selection.background": "#C6FF4D59", + "sidebar.background": "#FAFAFA", + "sidebar.accent.background": "#C6FF4D40", + "sidebar.accent.foreground": "#65A30D", + "sidebar.border": "#E4E4E7", + "sidebar.foreground": "#18181B", + "sidebar.primary.background": "#F4F4F5", + "sidebar.primary.foreground": "#18181B", + "skeleton.background": "#E4E4E7", + "slider.background": "#E4E4E7", + "slider.thumb.background": "#65A30D", + "success.background": "#2FBF71", + "success.active.background": "#1F9A58", + "success.foreground": "#0B0F0C", + "success.hover.background": "#2AB568", + "switch.background": "#D4D4D8", + "switch.thumb.background": "#FFFFFF", + "tab.background": "#F4F4F5", + "tab.active.background": "#EBFFC1", + "tab.active.foreground": "#3F6212", + "tab.foreground": "#71717A", + "tab_bar.background": "#F4F4F5", + "tab_bar.segmented.background": "#E4E4E7", + "table.background": "#FFFFFF", + "table.active.background": "#C6FF4D40", + "table.active.border": "#65A30D80", + "table.even.background": "#FAFAFA", + "table.head.background": "#FAFAFA", + "table.head.foreground": "#71717A", + "table.foot.background": "#FAFAFA", + "table.foot.foreground": "#71717A", + "table.hover.background": "#F4F4F5", + "table.row.border": "#E4E4E7", + "title_bar.background": "#FAFAFA", + "title_bar.border": "#E4E4E7", + "status_bar.background": "#FAFAFA", + "status_bar.border": "#E4E4E7", + "tiles.background": "#FFFFFF", + "warning.background": "#D97706", + "warning.active.background": "#B45309", + "warning.foreground": "#FFFFFF", + "warning.hover.background": "#F59E0B", + "overlay": "#0000004D", + "window.border": "#E4E4E7", + "base.red": "#DC2626", + "base.green": "#16A34A", + "base.yellow": "#CA8A04", + "base.blue": "#2563EB", + "base.magenta": "#9333EA", + "base.cyan": "#0891B2" + }, + "highlight": { + "editor.background": "#FFFFFF", + "editor.foreground": "#383A42", + "editor.active_line.background": "#F2F3F4", + "editor.line_number": "#A0A1A7", + "editor.active_line_number": "#383A42", + "editor.invisible": "#A0A1A766", + "conflict": "#DC2626", + "created": "#16A34A", + "deleted": "#DC2626", + "error": "#DC2626", + "error.background": "#FEF2F2", + "error.border": "#F87171", + "hidden": "#A0A1A7", + "hint": "#A626A4", + "hint.background": "#FAF5FF", + "hint.border": "#C4B5FD", + "ignored": "#A0A1A7", + "info": "#4078F2", + "info.background": "#EFF6FF", + "info.border": "#93C5FD", + "modified": "#C18401", + "modified.background": "#FFFBEB", + "predictive": "#A0A1A7", + "renamed": "#A626A4", + "success": "#16A34A", + "success.background": "#F0FDF4", + "unreachable": "#A0A1A7", + "warning": "#C18401", + "warning.background": "#FFFBEB", + "warning.border": "#FCD34D", + "syntax": { + "attribute": { + "color": "#986801" + }, + "boolean": { + "color": "#986801" + }, + "comment": { + "color": "#A0A1A7", + "font_style": "italic" + }, + "comment.doc": { + "color": "#A0A1A7", + "font_style": "italic" + }, + "constant": { + "color": "#986801" + }, + "constructor": { + "color": "#4078F2" + }, + "embedded": { + "color": "#C18401" + }, + "function": { + "color": "#4078F2" + }, + "keyword": { + "color": "#A626A4" + }, + "label": { + "color": "#4078F2" + }, + "link_text": { + "color": "#4078F2", + "font_style": "underline" + }, + "link_uri": { + "color": "#4078F2", + "font_style": "italic" + }, + "number": { + "color": "#986801" + }, + "operator": { + "color": "#383A42" + }, + "preproc": { + "color": "#C18401" + }, + "property": { + "color": "#E45649" + }, + "punctuation": { + "color": "#383A42" + }, + "punctuation.bracket": { + "color": "#383A42" + }, + "punctuation.delimiter": { + "color": "#383A42" + }, + "punctuation.list_marker": { + "color": "#986801" + }, + "punctuation.special": { + "color": "#A626A4" + }, + "string": { + "color": "#50A14F" + }, + "string.escape": { + "color": "#A626A4" + }, + "string.regex": { + "color": "#50A14F" + }, + "string.special": { + "color": "#50A14F" + }, + "string.special.symbol": { + "color": "#986801" + }, + "tag": { + "color": "#E45649" + }, + "tag.doctype": { + "color": "#A0A1A7" + }, + "text.code.span": { + "color": "#383A42" + }, + "text.literal": { + "color": "#50A14F" + }, + "title": { + "color": "#E45649", + "font_weight": 700 + }, + "type": { + "color": "#0184BC" + }, + "variable": { + "color": "#383A42" + }, + "variable.special": { + "color": "#E45649" + }, + "variant": { + "color": "#0184BC" + } + } + } + }, + { + "name": "Signed Dark", + "mode": "dark", + "colors": { + "accent.background": "#18181B", + "accent.foreground": "#FAFAFA", + "accordion.background": "#0A0A0A", + "background": "#0A0A0A", + "border": "#27272A", + "button.background": "#18181B", + "button.active.background": "#3F3F46", + "button.foreground": "#FAFAFA", + "button.hover.background": "#27272A", + "button.danger.background": "#EF4444", + "button.danger.active.background": "#DC2626", + "button.danger.foreground": "#FFFFFF", + "button.danger.hover.background": "#F87171", + "button.info.background": "#0EA5E9", + "button.info.active.background": "#0284C7", + "button.info.foreground": "#FFFFFF", + "button.info.hover.background": "#38BDF8", + "button.primary.background": "#C6FF4D", + "button.primary.active.background": "#65A30D", + "button.primary.foreground": "#0B0F0C", + "button.primary.hover.background": "#B2EC3C", + "button.secondary.background": "#18181B", + "button.secondary.active.background": "#3F3F46", + "button.secondary.foreground": "#FAFAFA", + "button.secondary.hover.background": "#27272A", + "button.success.background": "#2FBF71", + "button.success.active.background": "#24A35D", + "button.success.foreground": "#0B0F0C", + "button.success.hover.background": "#2AB568", + "button.warning.background": "#F59E0B", + "button.warning.active.background": "#D97706", + "button.warning.foreground": "#18181B", + "button.warning.hover.background": "#FBBF24", + "group_box.background": "#18181B", + "group_box.foreground": "#FAFAFA", + "group_box.title.foreground": "#FAFAFA", + "caret": "#FAFAFA", + "chart.1": "#C6FF4D", + "chart.2": "#A6E22E", + "chart.3": "#2FBF71", + "chart.4": "#7A8B5F", + "chart.5": "#A1A1AA", + "chart_bullish": "#2FBF71", + "chart_bearish": "#EF4444", + "danger.background": "#EF4444", + "danger.active.background": "#DC2626", + "danger.foreground": "#FFFFFF", + "danger.hover.background": "#F87171", + "description_list.label.background": "#18181B", + "description_list.label.foreground": "#A1A1AA", + "drag.border": "#C6FF4D", + "drop_target.background": "#C6FF4D33", + "foreground": "#FAFAFA", + "info.background": "#0EA5E9", + "info.active.background": "#0284C7", + "info.foreground": "#FFFFFF", + "info.hover.background": "#38BDF8", + "input.border": "#3F3F46", + "link": "#C6FF4D", + "link.active": "#A6E22E", + "link.hover": "#B2EC3C", + "list.background": "#0A0A0A", + "list.active.background": "#C6FF4D40", + "list.active.border": "#C6FF4D80", + "list.even.background": "#18181B", + "list.head.background": "#18181B", + "list.hover.background": "#27272A", + "muted.background": "#18181B", + "muted.foreground": "#A1A1AA", + "popover.background": "#18181B", + "popover.foreground": "#FAFAFA", + "primary.background": "#C6FF4D", + "primary.active.background": "#65A30D", + "primary.foreground": "#0B0F0C", + "primary.hover.background": "#B2EC3C", + "progress.bar.background": "#C6FF4D", + "ring": "#C6FF4D", + "scrollbar.background": "#0A0A0A00", + "scrollbar.thumb.background": "#3F3F46", + "scrollbar.thumb.hover.background": "#52525B", + "secondary.background": "#18181B", + "secondary.active.background": "#3F3F46", + "secondary.foreground": "#FAFAFA", + "secondary.hover.background": "#27272A", + "selection.background": "#C6FF4D59", + "sidebar.background": "#0A0A0A", + "sidebar.accent.background": "#C6FF4D40", + "sidebar.accent.foreground": "#C6FF4D", + "sidebar.border": "#27272A", + "sidebar.foreground": "#FAFAFA", + "sidebar.primary.background": "#18181B", + "sidebar.primary.foreground": "#FAFAFA", + "skeleton.background": "#27272A", + "slider.background": "#27272A", + "slider.thumb.background": "#C6FF4D", + "success.background": "#2FBF71", + "success.active.background": "#24A35D", + "success.foreground": "#0B0F0C", + "success.hover.background": "#2AB568", + "switch.background": "#3F3F46", + "switch.thumb.background": "#FAFAFA", + "tab.background": "#18181B", + "tab.active.background": "#19200A", + "tab.active.foreground": "#C6FF4D", + "tab.foreground": "#A1A1AA", + "tab_bar.background": "#18181B", + "tab_bar.segmented.background": "#27272A", + "table.background": "#0A0A0A", + "table.active.background": "#C6FF4D40", + "table.active.border": "#C6FF4D80", + "table.even.background": "#18181B", + "table.head.background": "#18181B", + "table.head.foreground": "#A1A1AA", + "table.foot.background": "#18181B", + "table.foot.foreground": "#A1A1AA", + "table.hover.background": "#27272A", + "table.row.border": "#27272A", + "title_bar.background": "#18181B", + "title_bar.border": "#27272A", + "status_bar.background": "#18181B", + "status_bar.border": "#27272A", + "tiles.background": "#0A0A0A", + "warning.background": "#F59E0B", + "warning.active.background": "#D97706", + "warning.foreground": "#18181B", + "warning.hover.background": "#FBBF24", + "overlay": "#00000080", + "window.border": "#27272A", + "base.red": "#EF4444", + "base.green": "#22C55E", + "base.yellow": "#EAB308", + "base.blue": "#3B82F6", + "base.magenta": "#A855F7", + "base.cyan": "#06B6D4" + }, + "highlight": { + "editor.background": "#0A0A0A", + "editor.foreground": "#ABB2BF", + "editor.active_line.background": "#18181B", + "editor.line_number": "#71717A", + "editor.active_line_number": "#FAFAFA", + "editor.invisible": "#71717A66", + "conflict": "#E06C75", + "created": "#98C379", + "deleted": "#E06C75", + "error": "#E06C75", + "error.background": "#3A1D1D", + "error.border": "#E06C75", + "hidden": "#5C6370", + "hint": "#C678DD", + "hint.background": "#2E2740", + "hint.border": "#C678DD", + "ignored": "#5C6370", + "info": "#61AFEF", + "info.background": "#1D2E3A", + "info.border": "#61AFEF", + "modified": "#E5C07B", + "modified.background": "#3A320E", + "predictive": "#5C6370", + "renamed": "#C678DD", + "success": "#98C379", + "success.background": "#1D3A2E", + "unreachable": "#5C6370", + "warning": "#E5C07B", + "warning.background": "#3A320E", + "warning.border": "#E5C07B", + "syntax": { + "attribute": { + "color": "#D19A66" + }, + "boolean": { + "color": "#D19A66" + }, + "comment": { + "color": "#5C6370", + "font_style": "italic" + }, + "comment.doc": { + "color": "#5C6370", + "font_style": "italic" + }, + "constant": { + "color": "#D19A66" + }, + "constructor": { + "color": "#E5C07B" + }, + "embedded": { + "color": "#98C379" + }, + "function": { + "color": "#61AFEF" + }, + "keyword": { + "color": "#C678DD" + }, + "label": { + "color": "#61AFEF" + }, + "link_text": { + "color": "#61AFEF", + "font_style": "underline" + }, + "link_uri": { + "color": "#61AFEF", + "font_style": "italic" + }, + "number": { + "color": "#D19A66" + }, + "operator": { + "color": "#56B6C2" + }, + "preproc": { + "color": "#E5C07B" + }, + "property": { + "color": "#E06C75" + }, + "punctuation": { + "color": "#ABB2BF" + }, + "punctuation.bracket": { + "color": "#ABB2BF" + }, + "punctuation.delimiter": { + "color": "#ABB2BF" + }, + "punctuation.list_marker": { + "color": "#98C379" + }, + "punctuation.special": { + "color": "#ABB2BF" + }, + "string": { + "color": "#98C379" + }, + "string.escape": { + "color": "#56B6C2" + }, + "string.regex": { + "color": "#E06C75" + }, + "string.special": { + "color": "#98C379" + }, + "string.special.symbol": { + "color": "#D19A66" + }, + "tag": { + "color": "#E06C75" + }, + "tag.doctype": { + "color": "#5C6370" + }, + "text.code.span": { + "color": "#ABB2BF" + }, + "text.literal": { + "color": "#98C379" + }, + "title": { + "color": "#61AFEF", + "font_weight": 700 + }, + "type": { + "color": "#E5C07B" + }, + "variable": { + "color": "#E06C75" + }, + "variable.special": { + "color": "#D19A66" + }, + "variant": { + "color": "#E5C07B" + } + } + } + } + ] +} diff --git a/crates/assets/src/lib.rs b/crates/assets/src/lib.rs new file mode 100644 index 0000000..3a16192 --- /dev/null +++ b/crates/assets/src/lib.rs @@ -0,0 +1,174 @@ +use anyhow::Context; +use gpui::{App, AssetSource, Result, SharedString}; +use gpui_component::IconNamed; +use rust_embed::RustEmbed; + +#[derive(RustEmbed)] +#[folder = "assets"] +#[include = "icons/**/*.svg"] +#[include = "themes/**/*.json"] +#[exclude = "*.DS_Store"] +pub struct Assets; + +impl AssetSource for Assets { + fn load(&self, path: &str) -> Result>> { + Self::get(path) + .map(|f| Some(f.data)) + .with_context(|| format!("loading asset at path {path:?}")) + } + + fn list(&self, path: &str) -> Result> { + Ok(Self::iter() + .filter_map(|p| { + if p.starts_with(path) { + Some(p.into()) + } else { + None + } + }) + .collect()) + } +} + +impl Assets { + /// Returns the embedded theme files as `(file name, JSON content)` pairs, + /// e.g. `("signed.json", ...)`. The content is a `ThemeSet` that can be + /// loaded into the [`ThemeRegistry`](gpui_component::ThemeRegistry). + pub fn themes(&self) -> Vec<(String, String)> { + Self::iter() + .filter(|path| path.starts_with("themes/")) + .filter_map(|path| { + let data = Self::get(path.as_ref())?; + let name = path.strip_prefix("themes/").unwrap_or(path.as_ref()); + // Debug builds read files from disk (owned), release builds + // embed them in the binary (borrowed). + let content = match data.data { + std::borrow::Cow::Borrowed(bytes) => { + std::str::from_utf8(bytes).ok()?.to_owned() + } + std::borrow::Cow::Owned(bytes) => String::from_utf8(bytes).ok()?, + }; + Some((name.to_owned(), content)) + }) + .collect() + } + + pub fn load_fonts(&self, cx: &App) -> anyhow::Result<()> { + let font_paths = self.list("fonts")?; + let mut embedded_fonts = Vec::new(); + for font_path in font_paths { + if font_path.ends_with(".ttf") { + let font_bytes = cx + .asset_source() + .load(&font_path)? + .expect("Assets should never return None"); + embedded_fonts.push(font_bytes); + } + } + + cx.text_system().add_fonts(embedded_fonts) + } +} + +pub enum CustomIconName { + CirclePlus, + Unlock, + Filter, + GlobalOn, + GlobalOff, + GitIssueDone, + GitIssueOpen, + GitIssueClosed, + GitIssueOngoing, + GitPullRequest, + GitPullRequestClosed, + GitPullRequestDraft, + GitPullRequestMerged, + GitClone, + GitBranch, + Tag, + Markdown, +} + +impl IconNamed for CustomIconName { + fn path(self) -> gpui::SharedString { + match self { + CustomIconName::CirclePlus => "icons/circle-plus.svg", + CustomIconName::Unlock => "icons/unlock.svg", + CustomIconName::Filter => "icons/filter.svg", + CustomIconName::GlobalOn => "icons/global-on.svg", + CustomIconName::GlobalOff => "icons/global-off.svg", + CustomIconName::GitIssueDone => "icons/git-issue-done.svg", + CustomIconName::GitIssueOpen => "icons/git-issue-open.svg", + CustomIconName::GitIssueClosed => "icons/git-issue-close.svg", + CustomIconName::GitIssueOngoing => "icons/git-issue-ongoing.svg", + CustomIconName::GitPullRequest => "icons/git-pull-request.svg", + CustomIconName::GitPullRequestClosed => "icons/git-pull-request-closed.svg", + CustomIconName::GitPullRequestDraft => "icons/git-pull-request-draft.svg", + CustomIconName::GitPullRequestMerged => "icons/git-pull-request-merged.svg", + CustomIconName::GitClone => "icons/git-clone.svg", + CustomIconName::GitBranch => "icons/git-branch.svg", + CustomIconName::Tag => "icons/tag.svg", + CustomIconName::Markdown => "icons/markdown.svg", + } + .into() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn signed_theme_set() -> gpui_component::ThemeSet { + let themes = Assets.themes(); + assert_eq!(themes.len(), 1, "expected exactly one embedded theme file"); + let (name, content) = &themes[0]; + assert_eq!(name, "signed.json"); + serde_json::from_str(content).expect("theme file must be a valid ThemeSet") + } + + #[test] + fn signed_theme_set_parses() { + let set = signed_theme_set(); + let names: Vec<&str> = set.themes.iter().map(|t| t.name.as_ref()).collect(); + assert_eq!(names, vec!["Signed Light", "Signed Dark"]); + } + + #[test] + fn signed_theme_palette_applies() { + let set = signed_theme_set(); + let parse = |hex: &str| gpui_component::try_parse_color(hex).unwrap(); + for config in &set.themes { + let mut theme = gpui_component::Theme::default(); + theme.apply_config(&std::rc::Rc::new(config.clone())); + + assert_eq!(theme.mode, config.mode); + // The resolved colors must match the brand palette. + assert_eq!(theme.primary, parse("#C6FF4D")); // nostr-lime + assert_eq!(theme.success, parse("#2FBF71")); // merge + assert_eq!(theme.primary_active, parse("#65A30D")); // lime-600 + + if config.mode.is_dark() { + // Dark theme chrome is neutral, mirroring the light theme. + assert_eq!(theme.background, parse("#0A0A0A")); // neutral-950 + assert_eq!(theme.border, parse("#27272A")); // neutral-800 + assert_eq!(theme.green, parse("#22C55E")); // green-500 + } else { + // Light theme chrome is neutral; lime is a brand accent only. + assert_eq!(theme.background, parse("#FFFFFF")); + assert_eq!(theme.foreground, parse("#18181B")); + assert_eq!(theme.border, parse("#E4E4E7")); + assert_eq!(theme.green, parse("#16A34A")); + } + // Active tab: a paler lime on light, a dim moss on dark — each + // paired with readable, contrasting text. + if config.mode.is_dark() { + assert_eq!(theme.tab_active, parse("#19200A")); // dim lime + assert_eq!(theme.tab_active_foreground, parse("#C6FF4D")); // nostr-lime + } else { + assert_eq!(theme.tab_active, parse("#EBFFC1")); // pale nostr-lime + assert_eq!(theme.tab_active_foreground, parse("#3F6212")); // deep-lime + } + } + } +} diff --git a/crates/dock/Cargo.toml b/crates/dock/Cargo.toml new file mode 100644 index 0000000..6009a56 --- /dev/null +++ b/crates/dock/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "dock" +description = "The Signed dock skin over gpui-component's upstream dock (gpui_base::dock engine + renderer traits)." +version.workspace = true +edition.workspace = true +publish.workspace = true + +[dependencies] +gpui.workspace = true +gpui-component.workspace = true +gpui-base.workspace = true + +[dev-dependencies] +gpui = { workspace = true, features = ["test-support"] } diff --git a/crates/dock/src/dock_area.rs b/crates/dock/src/dock_area.rs new file mode 100644 index 0000000..7b3f3df --- /dev/null +++ b/crates/dock/src/dock_area.rs @@ -0,0 +1,350 @@ +//! The dock-area appearance: the outer frame, the split frames, and one +//! dock's chrome. Ported from the vendored dock's `DockArea`/`Dock` render +//! onto `gpui_base::dock::DockAreaRenderer`. + +use std::cell::Cell; +use std::ops::Deref as _; +use std::rc::Rc; +use std::sync::Arc; + +use gpui::prelude::FluentBuilder as _; +use gpui::{ + AnyElement, App, AppContext as _, Axis, Context, Div, Element, Empty, InteractiveElement as _, + IntoElement, MouseMoveEvent, MouseUpEvent, ParentElement as _, Pixels, Render, Stateful, Style, + Styled as _, WeakEntity, Window, div, px, +}; +use gpui_base::dock::{ + DockArea, DockAreaRenderer, DockContext, DockEvent, DockPlacement, NodeId, PanelState, + PanelView, TabGroupRenderer, TilesRenderer, +}; +use gpui_base::resize_handle; +use gpui_component::scroll::ScrollbarMode; +use gpui_component::{ActiveTheme as _, Side, StyledExt as _}; + +use crate::invalid_panel::InvalidPanel; +use crate::tab_panel::SignedTabGroupSkin; +use crate::tiles::SignedTilesSkin; +use crate::{TAB_BAR_HEIGHT, panel_handle}; + +/// What every part of the skin reads, and the dock area it belongs to. +/// +/// The renderer is the only skin-owned object in the picture, so the settings +/// the old `DockArea` carried live here. It is shared by reference with the +/// per-container renderers, which are built once each and outlive any one +/// frame. +pub(crate) struct SkinShared { + area: WeakEntity, + toggle_button_visible: Cell, + tiles_scrollbar_mode: Cell>, + /// The dock whose resize handle is being dragged, if any. Only one can be. + resizing_dock: Cell>, +} + +impl SkinShared { + pub(crate) fn area(&self) -> &WeakEntity { + &self.area + } + + pub(crate) fn is_toggle_button_visible(&self) -> bool { + self.toggle_button_visible.get() + } + + pub(crate) fn tiles_scrollbar_mode(&self) -> Option { + self.tiles_scrollbar_mode.get() + } + + pub(crate) fn resizing_dock(&self) -> &Cell> { + &self.resizing_dock + } + + /// Redraw the area after a setting changed. The skin is not an entity, so + /// nothing else would notice. + pub(crate) fn notify(&self, cx: &mut App) { + _ = self.area.update(cx, |_, cx| cx.notify()); + } +} + +/// The Signed appearance for a [`DockArea`]. +/// +/// Install it at construction, where the area's own weak handle is available: +/// +/// ```ignore +/// let dock = cx.new(|cx| { +/// let skin = SignedDockSkin::new(cx); +/// DockArea::new("dock", Some(1), window, cx).with_renderer(skin) +/// }); +/// ``` +pub struct SignedDockSkin { + shared: Rc, +} + +impl SignedDockSkin { + pub fn new(cx: &mut Context) -> Rc { + Rc::new(Self { + shared: Rc::new(SkinShared { + area: cx.weak_entity(), + toggle_button_visible: Cell::new(true), + tiles_scrollbar_mode: Cell::new(None), + resizing_dock: Cell::new(None), + }), + }) + } + + pub(crate) fn shared(&self) -> &Rc { + &self.shared + } + + /// Whether tab bars offer the affordance that collapses a neighbouring + /// dock. + pub fn is_toggle_button_visible(&self) -> bool { + self.shared.is_toggle_button_visible() + } + + pub fn set_toggle_button_visible(&self, visible: bool, cx: &mut App) { + self.shared.toggle_button_visible.set(visible); + self.shared.notify(cx); + } + + /// When a tiles canvas shows its scrollbar. `None` follows the theme. + pub fn tiles_scrollbar_mode(&self) -> Option { + self.shared.tiles_scrollbar_mode() + } + + pub fn set_tiles_scrollbar_mode(&self, mode: Option, cx: &mut App) { + self.shared.tiles_scrollbar_mode.set(mode); + self.shared.notify(cx); + } +} + +/// The payload a dock's resize handle drags. It draws nothing: the handle +/// itself is the affordance. +#[derive(Clone)] +struct ResizePanel; + +impl Render for ResizePanel { + fn render(&mut self, _: &mut Window, _: &mut Context) -> impl IntoElement { + Empty + } +} + +impl DockAreaRenderer for SignedDockSkin { + fn frame(&self, _: &mut Window, _: &mut App) -> Stateful
{ + div() + .id("dock-area") + .relative() + .size_full() + .overflow_hidden() + .flex() + .flex_row() + } + + fn center_frame(&self, _: &mut Window, _: &mut App) -> Stateful
{ + div() + .id("dock-area-center") + .flex() + .flex_1() + .flex_col() + .overflow_hidden() + } + + fn split_frame(&self, node: NodeId, _: Axis, _: &mut Window, cx: &mut App) -> Stateful
{ + // `size_full` is what the old `StackPanel::render` carried; `flex_1` + // is belt and braces so the frame never collapses to zero height in + // an unsizing parent. + div() + .id(("dock-split-frame", node.as_u64())) + .size_full() + .flex_1() + .min_h(px(0.)) + .overflow_hidden() + .bg(cx.theme().tokens.tab_bar) + } + + fn render_dock( + &self, + dock: &DockContext, + content: AnyElement, + window: &mut Window, + cx: &mut App, + ) -> AnyElement { + let placement = dock.placement(); + let open = dock.is_open(); + + // A closed left or right dock takes no space at all; a closed bottom + // dock keeps a strip so its tab bar stays clickable. + if !open && !placement.is_bottom() { + return div().into_any_element(); + } + + div() + .flex() + .flex_none() + .relative() + .overflow_hidden() + .map(|this| match placement { + DockPlacement::Left | DockPlacement::Right => this.h_flex().h_full().w(dock.size()), + DockPlacement::Bottom => this.w_full().h(dock.size()), + // Base never builds a dock for the centre. + DockPlacement::Center => this, + }) + // The closed bottom dock's strip is the tab bar itself, which is + // a full tab bar tall. + .when(!open && placement.is_bottom(), |this| { + this.h(TAB_BAR_HEIGHT) + }) + .child(content) + .child(self.render_resize_handle(dock, window, cx)) + .child(DockResizeTracker { + dock: dock.clone(), + shared: self.shared().clone(), + }) + .into_any_element() + } + + /// The "unknown panel" message the old `InvalidPanel` drew. + /// + /// It answers `dump` with the state it was handed, so a layout written by + /// a build that knows the panel survives a load and save here. + fn build_placeholder( + &self, + state: &PanelState, + _: &mut Window, + cx: &mut App, + ) -> Option> { + let state = state.clone(); + Some(panel_handle(cx.new(|cx| { + InvalidPanel::new(state.panel_name.clone(), state, cx) + }))) + } + + fn tab_group_renderer(&self) -> Rc { + Rc::new(SignedTabGroupSkin::new(self.shared().clone())) + } + + fn tiles_renderer(&self) -> Rc { + Rc::new(SignedTilesSkin::new(self.shared().clone())) + } +} + +impl SignedDockSkin { + fn render_resize_handle( + &self, + dock: &DockContext, + _: &mut Window, + _: &mut App, + ) -> impl IntoElement { + let placement = dock.placement(); + let shared = self.shared().clone(); + + resize_handle("resize-handle", placement.axis()) + .when(placement.is_left(), |this| this.placement(Side::Left)) + .on_drag(ResizePanel, move |info, _, _, cx| { + cx.stop_propagation(); + shared.resizing_dock().set(Some(placement)); + cx.new(|_| info.deref().clone()) + }) + } +} + +/// Turns the window's mouse stream into dock resizing. +/// +/// A resize is driven by pointer moves that land anywhere in the window, not +/// only on the handle, so it cannot be expressed as a listener on the handle +/// itself. This element paints nothing and exists for its `paint` hook, which +/// is the only place a window-level mouse listener can be registered. +struct DockResizeTracker { + dock: DockContext, + shared: Rc, +} + +impl IntoElement for DockResizeTracker { + type Element = Self; + + fn into_element(self) -> Self::Element { + self + } +} + +impl Element for DockResizeTracker { + type PrepaintState = (); + type RequestLayoutState = (); + + fn id(&self) -> Option { + None + } + + fn source_location(&self) -> Option<&'static std::panic::Location<'static>> { + None + } + + fn request_layout( + &mut self, + _: Option<&gpui::GlobalElementId>, + _: Option<&gpui::InspectorElementId>, + window: &mut Window, + cx: &mut App, + ) -> (gpui::LayoutId, Self::RequestLayoutState) { + (window.request_layout(Style::default(), None, cx), ()) + } + + fn prepaint( + &mut self, + _: Option<&gpui::GlobalElementId>, + _: Option<&gpui::InspectorElementId>, + _: gpui::Bounds, + _: &mut Self::RequestLayoutState, + _: &mut Window, + _: &mut App, + ) -> Self::PrepaintState { + } + + fn paint( + &mut self, + _: Option<&gpui::GlobalElementId>, + _: Option<&gpui::InspectorElementId>, + _: gpui::Bounds, + _: &mut Self::RequestLayoutState, + _: &mut Self::PrepaintState, + window: &mut Window, + _: &mut App, + ) { + let placement = self.dock.placement(); + + window.on_mouse_event({ + let dock = self.dock.clone(); + let shared = self.shared.clone(); + move |event: &MouseMoveEvent, phase, window, cx| { + if !phase.bubble() || shared.resizing_dock().get() != Some(placement) { + return; + } + // Dragging a closed dock's handle reopens it, as the old dock + // did. The live state is read rather than the render-time + // snapshot in `dock`, which would still say closed for the + // rest of the frame and toggle it shut again on the next move. + let open = shared + .area() + .upgrade() + .is_some_and(|area| area.read(cx).is_dock_open(placement)); + if !open { + dock.toggle(window, cx); + } + dock.resize_to(event.position, window, cx); + } + }); + + window.on_mouse_event({ + let shared = self.shared.clone(); + move |_: &MouseUpEvent, phase, _, cx| { + if !phase.bubble() || shared.resizing_dock().get() != Some(placement) { + return; + } + shared.resizing_dock().set(None); + // The size lives on the dock, not in the layout tree, so + // nothing else tells a subscriber to persist it. + _ = shared + .area() + .update(cx, |_, cx| cx.emit(DockEvent::LayoutChanged)); + } + }); + } +} diff --git a/crates/dock/src/invalid_panel.rs b/crates/dock/src/invalid_panel.rs new file mode 100644 index 0000000..da78f36 --- /dev/null +++ b/crates/dock/src/invalid_panel.rs @@ -0,0 +1,71 @@ +use gpui::{ + App, Context, EventEmitter, FocusHandle, Focusable, IntoElement, ParentElement as _, Render, + SharedString, Styled as _, Window, div, +}; +use gpui_base::dock::{PanelEvent, PanelState}; +use gpui_component::ActiveTheme as _; + +use crate::Panel; + +/// Stands in for a panel this build cannot construct — one whose `panel_name` +/// no [`PanelRegistry`](gpui_base::dock::PanelRegistry) builder answers to. +/// +/// It reports the original [`PanelState`] from +/// [`dump`](gpui_base::dock::Panel::dump), so a layout written by a build that +/// knows the panel survives a load and a save here rather than losing it. +pub(crate) struct InvalidPanel { + name: SharedString, + focus_handle: FocusHandle, + old_state: PanelState, +} + +impl InvalidPanel { + pub(crate) fn new( + name: impl Into, + state: PanelState, + cx: &mut Context, + ) -> Self { + Self { + focus_handle: cx.focus_handle(), + name: name.into(), + old_state: state, + } + } +} + +impl gpui_base::dock::Panel for InvalidPanel { + fn panel_name(&self) -> &'static str { + "InvalidPanel" + } + + fn dump(&self, _: &App) -> PanelState { + self.old_state.clone() + } +} + +impl Panel for InvalidPanel {} + +impl EventEmitter for InvalidPanel {} + +impl Focusable for InvalidPanel { + fn focus_handle(&self, _: &App) -> FocusHandle { + self.focus_handle.clone() + } +} + +impl Render for InvalidPanel { + fn render(&mut self, _: &mut Window, cx: &mut Context) -> impl IntoElement { + div() + .size_full() + .my_6() + .flex() + .flex_col() + .items_center() + .justify_center() + .text_color(cx.theme().muted_foreground) + .child(format!( + "The `{}` panel type is not registered in PanelRegistry.", + self.name.clone() + )) + } +} diff --git a/crates/dock/src/lib.rs b/crates/dock/src/lib.rs new file mode 100644 index 0000000..16f2192 --- /dev/null +++ b/crates/dock/src/lib.rs @@ -0,0 +1,99 @@ +//! The Signed dock skin. +//! +//! The dock engine lives upstream: `gpui_base::dock` owns the layout tree, +//! the drags, the zoom and the persistence, and `gpui_component::dock` +//! supplies the default appearance. This crate is the appearance the app +//! used to vendor from gpui-component — a 44px tab bar that doubles as the +//! window title bar, with pill tabs, window controls, title-bar dragging and +//! previous/next tab buttons — re-implemented against upstream's renderer +//! traits. +//! +//! Everything `gpui_component::dock` exports is re-exported here, so the app +//! keeps importing the dock from a single place. + +use gpui::{ + App, Div, InteractiveElement as _, MouseButton, Pixels, Stateful, + StatefulInteractiveElement as _, Window, WindowControlArea, px, +}; + +mod dock_area; +mod invalid_panel; +mod tab_panel; +mod tiles; +mod window_controls; + +pub use dock_area::SignedDockSkin; +pub use gpui_component::dock::{ + AnyDrag, BasePanel, BasePanelView, ClosePanel, DockArea, DockAreaState, DockContext, DockEvent, + DockLayout, DockPlacement, DockState, DragPanel, DropIndicator, DropPlaceholderBounds, + DropTarget, Panel, PanelControl, PanelEvent, PanelHandle, PanelInfo, PanelState, PanelStyle, + PanelView, TitleStyle, ToggleZoom, panel_handle, register_panel, +}; + +/// The fixed height of the tab bar, which doubles as the window title bar. +pub const TAB_BAR_HEIGHT: Pixels = px(44.); + +/// Minimal i18n shim replacing gpui-component's `rust_i18n::t!()`, keeping the +/// same `Dock.*` keys resolved to English so the crate has no i18n dependency. +pub(crate) fn t(key: &'static str) -> &'static str { + match key { + "Dock.Unnamed" => "Unnamed", + "Dock.Close" => "Close", + "Dock.Zoom In" => "Zoom In", + "Dock.Zoom Out" => "Zoom Out", + "Dock.Collapse" => "Collapse", + "Dock.Expand" => "Expand", + _ => key, + } +} + +/// State used to move the window when the title bar area is dragged. +struct WindowDragState { + should_move: bool, +} + +/// Make an element behave like a window title bar: dragging it moves the +/// window, and double-clicking zooms the window (or performs the platform's +/// default title-bar double-click action on macOS). +/// +/// Only the bar's non-interactive areas should get this — tabs are draggable +/// (to reorder panels) and must not move the window. +pub fn title_bar_drag_handlers( + this: Stateful
, + window: &mut Window, + cx: &mut App, +) -> Stateful
{ + let state = window.use_state(cx, |_, _| WindowDragState { should_move: false }); + + this.window_control_area(WindowControlArea::Drag) + .on_mouse_down_out(window.listener_for(&state, |state, _, _, _| { + state.should_move = false; + })) + .on_mouse_down( + MouseButton::Left, + window.listener_for(&state, |state, _, _, _| { + state.should_move = true; + }), + ) + .on_mouse_up( + MouseButton::Left, + window.listener_for(&state, |state, _, _, _| { + state.should_move = false; + }), + ) + .on_mouse_move(window.listener_for(&state, |state, _, window, _| { + if state.should_move { + state.should_move = false; + window.start_window_move(); + } + })) + .on_click(|event, window, _| { + if event.click_count() == 2 { + if cfg!(target_os = "macos") { + window.titlebar_double_click(); + } else { + window.zoom_window(); + } + } + }) +} diff --git a/crates/dock/src/tab_panel.rs b/crates/dock/src/tab_panel.rs new file mode 100644 index 0000000..8d0bf79 --- /dev/null +++ b/crates/dock/src/tab_panel.rs @@ -0,0 +1,902 @@ +//! The Signed appearance for a tab group. +//! +//! `gpui_base::dock::TabGroup` owns the behavior — membership, the displayed +//! tab, drag hit-testing, the zoom flag — and draws none of it. Everything +//! visible is here, ported from the vendored dock: the pill tab bar that +//! doubles as the window title bar (with window controls, title-bar +//! dragging, and previous/next tab buttons), the toolbar, the ellipsis menu, +//! the dock collapse affordance, the drop placeholder, and the styled drag +//! preview. + +use std::cell::Cell; +use std::rc::Rc; +use std::sync::Arc; +use std::time::Duration; + +use gpui::prelude::FluentBuilder as _; +use gpui::{ + Anchor, Animation, AnimationExt as _, AnyElement, AnyView, App, AppContext as _, Bounds, + Context, Div, Empty, InteractiveElement as _, IntoElement, ParentElement as _, Pixels, Point, + Render, ScrollHandle, SharedString, Stateful, StatefulInteractiveElement as _, StyleRefinement, + Styled as _, Window, div, px, size, +}; +use gpui_base::dock::{ + AnyDrag, DockPlacement, DragPanel, DropIndicator, NodeId, PaneNode, PaneRef, + PanelView as BasePanelView, TabGroupContext, TabGroupRenderer, +}; +use gpui_base::{ElementExt, InteractiveElementExt, Tab, Tabs}; +use gpui_component::animation::{Lerp as _, ease_out_cubic}; +use gpui_component::button::{Button, ButtonVariants as _}; +use gpui_component::menu::DropdownMenu as _; +use gpui_component::{ + ActiveTheme as _, Disableable as _, IconName, Selectable as _, Sizable as _, h_flex, v_flex, +}; + +use crate::dock_area::SkinShared; +use crate::{ + ClosePanel, PanelControl, PanelHandle, TAB_BAR_HEIGHT, ToggleZoom, t, title_bar_drag_handlers, + window_controls, +}; + +/// The size the styled drag preview occupies, reported to base so a drop +/// placeholder knows where to fly in from. +const DRAG_PREVIEW_SIZE: gpui::Size = size(px(96.), px(30.)); + +/// A panel's title, or its registered name when it reached base without this +/// crate's handle and so carries no presentation. See [`PanelHandle::of`]. +pub(crate) fn panel_title( + panel: &Arc, + window: &mut Window, + cx: &mut App, +) -> AnyElement { + match PanelHandle::of(panel) { + Some(handle) => handle.title(window, cx), + None => SharedString::from(panel.panel_name(cx)).into_any_element(), + } +} + +/// The preview that follows the cursor while a panel is dragged. +/// +/// `gpui_base::dock::DragPanel` is the payload and draws nothing; this is the +/// appearance half, reintroduced here. +struct DragPanelPreview { + panel: Arc, +} + +impl Render for DragPanelPreview { + fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { + div() + .id("drag-panel") + .cursor_grab() + .py_1() + .px_3() + .w_24() + .overflow_hidden() + .whitespace_nowrap() + .border_1() + .border_color(cx.theme().border) + .rounded(cx.theme().radius) + .text_color(cx.theme().tab_foreground) + .bg(cx.theme().tokens.tab_active) + .opacity(0.75) + .child(panel_title(&self.panel, window, cx)) + } +} + +/// Where the zoom affordance goes for the group's displayed panel, or `None` +/// when there is none to offer. +/// +/// Two questions, and both have to be asked. [`Panel::zoom_control`] says +/// *where* the control appears; [`gpui_base::dock::Panel::zoomable`] says +/// whether zooming happens at all, and base refuses a zoom that fails it. +fn zoom_control(group: &TabGroupContext, cx: &App) -> Option { + let panel = group.active_panel()?; + panel + .zoomable(cx) + .then(|| PanelHandle::of(panel).and_then(|handle| handle.zoom_control(cx))) + .flatten() +} + +/// The left-most, top-most tab group in a container — where a left dock's +/// collapse affordance goes. Mirrors the old `StackPanel::left_top_tab_panel`. +fn left_top_group(node: &PaneNode) -> Option { + match node.kind() { + PaneRef::Tabs { .. } => Some(node.id()), + PaneRef::Split { children, .. } => children.first().and_then(left_top_group), + PaneRef::Tiles { .. } => None, + } +} + +/// The right-most, top-most tab group. A vertical split stacks its children, +/// so its *first* child is the top one; a horizontal split's last child is +/// the right-most. Mirrors the old `StackPanel::right_top_tab_panel`. +fn right_top_group(node: &PaneNode) -> Option { + match node.kind() { + PaneRef::Tabs { .. } => Some(node.id()), + PaneRef::Split { axis, children, .. } => match axis { + gpui::Axis::Vertical => children.first(), + gpui::Axis::Horizontal => children.last(), + } + .and_then(right_top_group), + PaneRef::Tiles { .. } => None, + } +} + +/// One tab group's appearance. +/// +/// Built per group — `DockAreaRenderer::tab_group_renderer` is called once +/// per container — so the tab bar's scroll position and the measured +/// title-bar geometry belong to the group they describe. +pub(crate) struct SignedTabGroupSkin { + shared: Rc, + scroll_handle: ScrollHandle, + /// The displayed tab the last frame drew, so a change scrolls the new tab + /// into view. + last_active_ix: Cell>, + /// Bounds of the title bar row (the wrapper around the tab bar), in + /// window coordinates. Measured via `on_prepaint` to position the + /// title-bar drag overlay. + title_bar_bounds: Rc>>>, + /// Bounds of the tab bar's trailing empty space (right after the last + /// tab), which marks where the draggable region starts. + title_bar_strip_bounds: Rc>>>, + /// Bounds of the tab bar's suffix (toolbar) area, which marks where the + /// draggable region ends. + title_bar_suffix_bounds: Rc>>>, +} + +impl SignedTabGroupSkin { + pub(crate) fn new(shared: Rc) -> Self { + Self { + shared, + scroll_handle: ScrollHandle::default(), + last_active_ix: Cell::new(None), + title_bar_bounds: Rc::new(Cell::new(None)), + title_bar_strip_bounds: Rc::new(Cell::new(None)), + title_bar_suffix_bounds: Rc::new(Cell::new(None)), + } + } + + /// A group that is the left dock's whole content with a single panel + /// draws no chrome at all — the vendored dock rendered such a panel bare, + /// and the sidebar is one. + fn is_plain_sidebar_group(&self, group: &TabGroupContext, cx: &mut App) -> bool { + let Some(area) = self.shared.area().upgrade() else { + return false; + }; + let area = area.read(cx); + let Some(left) = area + .layout(DockPlacement::Left) + .map(|tree| tree.root().id()) + else { + return false; + }; + left == group.node() && group.panels().len() == 1 + } + + /// The bottom or right dock whose root tab group this group is, if any. + /// + /// Base bars a dock's only group from being dragged or closed, so the + /// dock cannot be emptied. A bottom/right panel is supposed to be + /// closable and movable, though — the vendored dock allowed exactly that + /// — so the skin recognizes the group and routes around the bar. + fn is_dock_root_group(&self, group: &TabGroupContext, cx: &App) -> Option { + let area = self.shared.area().upgrade()?; + let area = area.read(cx); + [DockPlacement::Bottom, DockPlacement::Right] + .into_iter() + .find(|placement| { + area.layout(*placement) + .is_some_and(|tree| tree.root().id() == group.node()) + }) + } + + /// The drag payload for the tab at `ix`, or `None` when this group must + /// not be rearranged. A locked group is never draggable; a group that is + /// a bottom/right dock's only content still is, because the center is + /// always there to land in. + fn tab_drag(&self, group: &TabGroupContext, ix: usize, cx: &App) -> Option { + if group.is_locked() { + return None; + } + if !group.is_draggable() && self.is_dock_root_group(group, cx).is_none() { + return None; + } + group.drag_panel(ix, cx) + } + + /// Whether a dock's collapse affordance belongs in *this* group's tab + /// bar, and which way it points. `None` means this group draws none. + fn dock_toggle_button( + &self, + placement: DockPlacement, + group: &TabGroupContext, + cx: &mut App, + ) -> Option