From f8033213d5acbcf36e333b08ccf212954d118616 Mon Sep 17 00:00:00 2001 From: Braga Date: Sun, 13 Sep 2026 07:04:06 +0000 Subject: [PATCH] feat: migrate modules into independent crates --- Cargo.lock | 2994 ++++++++++++++++- Cargo.toml | 8 + config/config.toml | 2 +- config/theme.toml | 2 +- context/modules/calendar.md | 2 +- context/modules/clock.md | 5 +- crates/modules/calendar/Cargo.toml | 10 + crates/modules/calendar/src/lib.rs | 26 + crates/modules/clock/Cargo.toml | 11 + crates/modules/clock/src/lib.rs | 25 + crates/modules/launcher/Cargo.toml | 11 + crates/modules/launcher/src/lib.rs | 134 + crates/modules/player/Cargo.toml | 10 + crates/modules/player/src/lib.rs | 26 + crates/modules/resources/Cargo.toml | 12 + crates/modules/resources/src/lib.rs | 55 + crates/modules/settings/Cargo.toml | 10 + crates/modules/settings/src/lib.rs | 26 + crates/modules/theme/Cargo.toml | 10 + crates/modules/theme/src/lib.rs | 26 + crates/shell-app/Cargo.toml | 7 + crates/shell-app/src/lib.rs | 32 +- crates/shell-app/src/main.rs | 10 +- crates/shell-ui-gpui/src/lib.rs | 366 +- .../shell-ui-gpui/src/module_host/context.rs | 24 + crates/shell-ui-gpui/src/module_host/mod.rs | 9 + .../shell-ui-gpui/src/module_host/module.rs | 114 + .../shell-ui-gpui/src/module_host/registry.rs | 188 ++ crates/shell-ui-gpui/src/primitives.rs | 16 + 29 files changed, 3773 insertions(+), 398 deletions(-) create mode 100644 crates/modules/calendar/Cargo.toml create mode 100644 crates/modules/calendar/src/lib.rs create mode 100644 crates/modules/clock/Cargo.toml create mode 100644 crates/modules/clock/src/lib.rs create mode 100644 crates/modules/launcher/Cargo.toml create mode 100644 crates/modules/launcher/src/lib.rs create mode 100644 crates/modules/player/Cargo.toml create mode 100644 crates/modules/player/src/lib.rs create mode 100644 crates/modules/resources/Cargo.toml create mode 100644 crates/modules/resources/src/lib.rs create mode 100644 crates/modules/settings/Cargo.toml create mode 100644 crates/modules/settings/src/lib.rs create mode 100644 crates/modules/theme/Cargo.toml create mode 100644 crates/modules/theme/src/lib.rs create mode 100644 crates/shell-ui-gpui/src/module_host/context.rs create mode 100644 crates/shell-ui-gpui/src/module_host/mod.rs create mode 100644 crates/shell-ui-gpui/src/module_host/module.rs create mode 100644 crates/shell-ui-gpui/src/module_host/registry.rs create mode 100644 crates/shell-ui-gpui/src/primitives.rs diff --git a/Cargo.lock b/Cargo.lock index 7aa5296..97f69c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,7 +21,7 @@ dependencies = [ "accesskit", "accesskit_consumer", "atspi-common", - "phf", + "phf 0.13.1", "serde", "zvariant", ] @@ -105,10 +105,23 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", "zeroize", ] +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "const-random", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.5" @@ -151,6 +164,23 @@ dependencies = [ "libc", ] +[[package]] +name = "annotate-snippets" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" +dependencies = [ + "anstyle", + "memchr", + "unicode-width", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + [[package]] name = "anyhow" version = "1.0.104" @@ -183,6 +213,12 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + [[package]] name = "arrayref" version = "0.3.9" @@ -195,6 +231,12 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + [[package]] name = "as-slice" version = "0.2.1" @@ -509,6 +551,12 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "base62" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3a647dce9631f152a99ec16cfc09267ae55fe280d5dc288964027d458076323" + [[package]] name = "base64" version = "0.22.1" @@ -592,6 +640,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block-padding" version = "0.3.3" @@ -642,6 +699,16 @@ dependencies = [ "cfg_aliases", ] +[[package]] +name = "bstr" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f" +dependencies = [ + "memchr", + "serde_core", +] + [[package]] name = "built" version = "0.8.1" @@ -795,6 +862,17 @@ dependencies = [ "libc", ] +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "rand_core 0.10.1", +] + [[package]] name = "chrono" version = "0.4.45" @@ -815,7 +893,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", "zeroize", ] @@ -831,6 +909,22 @@ dependencies = [ "libloading", ] +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation 0.1.2", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types", + "libc", + "objc", +] + [[package]] name = "cocoa" version = "0.26.0" @@ -839,14 +933,28 @@ checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ "bitflags 2.13.2", "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", + "cocoa-foundation 0.2.0", + "core-foundation 0.10.0", + "core-graphics 0.24.0", "foreign-types", "libc", "objc", ] +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "libc", + "objc", +] + [[package]] name = "cocoa-foundation" version = "0.2.0" @@ -855,8 +963,8 @@ checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" dependencies = [ "bitflags 2.13.2", "block", - "core-foundation", - "core-graphics-types", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", "libc", "objc", ] @@ -925,6 +1033,32 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + [[package]] name = "convert_case" version = "0.10.0" @@ -934,6 +1068,16 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.0" @@ -950,6 +1094,19 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", +] + [[package]] name = "core-graphics" version = "0.24.0" @@ -957,12 +1114,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ "bitflags 2.13.2", - "core-foundation", - "core-graphics-types", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-helmer-fork" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32eb7c354ae9f6d437a6039099ce7ecd049337a8109b23d73e48e8ffba8e9cd5" +dependencies = [ + "bitflags 2.13.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", "foreign-types", "libc", ] +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + [[package]] name = "core-graphics-types" version = "0.2.0" @@ -970,7 +1151,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ "bitflags 2.13.2", - "core-foundation", + "core-foundation 0.10.0", "libc", ] @@ -983,7 +1164,7 @@ dependencies = [ "bitflags 2.13.2", "block", "cfg-if", - "core-foundation", + "core-foundation 0.10.0", "libc", ] @@ -993,8 +1174,8 @@ version = "21.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a593227b66cbd4007b2a050dfdd9e1d1318311409c8d600dc82ba1b15ca9c130" dependencies = [ - "core-foundation", - "core-graphics", + "core-foundation 0.10.0", + "core-graphics 0.24.0", "foreign-types", "libc", ] @@ -1006,13 +1187,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139679cc63eb9504bdbe37e37874b0247136177655f0008588781e90863afa62" dependencies = [ "block", - "core-foundation", + "core-foundation 0.10.0", "core-graphics2", "io-surface", "libc", "metal", ] +[[package]] +name = "core_detect" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" + [[package]] name = "core_maths" version = "0.1.1" @@ -1055,6 +1242,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.1" @@ -1114,6 +1310,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + [[package]] name = "ctor" version = "1.0.13" @@ -1175,18 +1380,50 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.1", + "const-oid", + "crypto-common 0.2.2", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + [[package]] name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ - "dirs-sys", + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.4.6", + "windows-sys 0.48.0", ] [[package]] @@ -1197,10 +1434,16 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.5.2", "windows-sys 0.61.2", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + [[package]] name = "dispatch2" version = "0.3.1" @@ -1292,12 +1535,56 @@ dependencies = [ "winreg", ] +[[package]] +name = "encoding_rs" +version = "0.8.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a" +dependencies = [ + "cfg-if", + "core_detect", + "multiversion", + "multiversion_no_op", + "rustversion", + "scopeguard", + "simdutf8", +] + +[[package]] +name = "encoding_rs_io" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba3fe847045ecff794b9c138293a80db914678c453ad63fbf0c6a9eb6e00b22" +dependencies = [ + "encoding_rs", +] + [[package]] name = "endi" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" +[[package]] +name = "enum-iterator" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "enumflags2" version = "0.7.12" @@ -1477,6 +1764,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if", + "libc", +] + [[package]] name = "find-msvc-tools" version = "0.1.12" @@ -1518,6 +1815,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" +[[package]] +name = "fluent-uri" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "flume" version = "0.12.0" @@ -1530,6 +1836,12 @@ dependencies = [ "spin 0.9.9", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "foldhash" version = "0.1.5" @@ -1639,6 +1951,16 @@ dependencies = [ "libc", ] +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + [[package]] name = "futures" version = "0.3.34" @@ -1763,6 +2085,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix", + "windows-link 0.2.1", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -1770,8 +2102,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -1798,9 +2132,20 @@ dependencies = [ "js-sys", "libc", "r-efi 6.0.0", + "rand_core 0.10.1", "wasm-bindgen", ] +[[package]] +name = "gif" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gif" version = "0.14.2" @@ -1835,127 +2180,788 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] -name = "glow" -version = "0.17.0" +name = "globset" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29038e1c483364cc6bb3cf78feee1816002e127c331a1eec55a4d202b9e1adb5" +checksum = "07c34a9410465b45bd9787443bc7370f37735bad04b0f0cd57ff1a3186c98988" dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", ] [[package]] -name = "glutin_wgl_sys" -version = "0.6.1" +name = "globwalk" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" dependencies = [ - "gl_generator", + "bitflags 1.3.2", + "ignore", + "walkdir", +] + +[[package]] +name = "glow" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29038e1c483364cc6bb3cf78feee1816002e127c331a1eec55a4d202b9e1adb5" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gpu-allocator" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" +dependencies = [ + "ash", + "hashbrown 0.16.1", + "log", + "presser", + "thiserror 2.0.20", + "windows 0.62.2", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.13.2", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "gpui" +version = "0.2.2" +source = "git+https://github.com/zed-industries/zed?rev=a9cdfc9936c4ccf0503ee4631204e045f913e2c1#a9cdfc9936c4ccf0503ee4631204e045f913e2c1" +dependencies = [ + "accesskit", + "anyhow", + "async-channel", + "async-task", + "bindgen", + "bitflags 2.13.2", + "chrono", + "collections", + "core-video", + "ctor", + "derive_more", + "embed-resource", + "etagere", + "futures", + "futures-concurrency", + "getrandom 0.3.4", + "gpui_macros", + "gpui_shared_string", + "gpui_util", + "heapless", + "http_client", + "image", + "inventory", + "itertools 0.14.0", + "log", + "lyon", + "num_cpus", + "parking", + "parking_lot", + "pin-project", + "pollster 0.4.0", + "postage", + "profiling", + "rand 0.9.5", + "raw-window-handle", + "refineable", + "regex", + "resvg 0.46.0", + "scheduler", + "schemars", + "seahash", + "serde", + "serde_json", + "slotmap", + "smallvec", + "spin 0.10.1", + "strum", + "sum_tree", + "taffy", + "thiserror 2.0.20", + "tracing", + "ttf-parser", + "url", + "usvg 0.46.0", + "util_macros", + "uuid", + "waker-fn", + "web-time", + "windows 0.62.2", + "ztracing", +] + +[[package]] +name = "gpui-base" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d45dcaaeac889bf1e7757db1beb26c9043c8ea3156651facc11c6be56bb6722" +dependencies = [ + "aho-corasick", + "anyhow", + "async-channel", + "chrono", + "futures", + "gpui-pre", + "gpui-pre-macros", + "gpui-pre-sum-tree", + "html5ever", + "instant", + "lsp-types", + "markdown", + "markup5ever_rcdom", + "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", + "tracing", + "unicode-segmentation", + "web-time", +] + +[[package]] +name = "gpui-component" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b7ab4921dc9d2624648fb40580067bfe0f47dd14f5f8f6e070d40c6d4246d4" +dependencies = [ + "anyhow", + "chrono", + "core-text", + "enum-iterator", + "gpui-base", + "gpui-component-macros", + "gpui-kit-assets", + "gpui-pre", + "gpui-pre-macros", + "gpui-pre-sum-tree", + "instant", + "itertools 0.13.0", + "log", + "lsp-types", + "markdown", + "notify 7.0.0", + "num-traits", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", + "once_cell", + "paste", + "raw-window-handle", + "regex", + "resvg 0.45.1", + "ropey", + "rust-i18n", + "schemars", + "serde", + "serde_json", + "serde_repr", + "smallvec", + "smol", + "tracing", + "uuid", + "windows 0.58.0", +] + +[[package]] +name = "gpui-component-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21fee2d71a84a6af828e7915a1b4c6721610a47ba5ef30b35c2f8edafdd753cc" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "gpui-kit" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a74f10f4499d99378c73c0251541a5d92bde45cb83dd658f0618fb32769d5898" +dependencies = [ + "gpui-base", + "gpui-component", + "gpui-kit-assets", + "gpui-pre", + "gpui-pre-platform", + "gpui-pre-web", +] + +[[package]] +name = "gpui-kit-assets" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be79bcf18842485308282d138cffaacb6191ece5643f4ee66d1828524be2a8e3" +dependencies = [ + "anyhow", + "gpui-pre", + "gpui-pre-reqwest", + "log", + "rust-embed", + "wasm-bindgen", + "wasm-bindgen-futures", +] + +[[package]] +name = "gpui-pre" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20199390dbd6cfbb7f0cb2ca57b46120cc1f434746a77367d2780657e0973725" +dependencies = [ + "accesskit", + "anyhow", + "async-channel", + "async-task", + "bindgen", + "bitflags 2.13.2", + "chrono", + "core-video", + "ctor", + "derive_more", + "embed-resource", + "etagere", + "futures", + "futures-concurrency", + "getrandom 0.3.4", + "gpui-pre-collections", + "gpui-pre-http-client", + "gpui-pre-macros", + "gpui-pre-refineable", + "gpui-pre-scheduler", + "gpui-pre-shared-string", + "gpui-pre-sum-tree", + "gpui-pre-util", + "gpui-pre-util-macros", + "gpui-pre-ztracing", + "heapless", + "image", + "inventory", + "itertools 0.14.0", + "log", + "lyon", + "num_cpus", + "parking", + "parking_lot", + "pin-project", + "pollster 0.4.0", + "postage", + "profiling", + "rand 0.9.5", + "raw-window-handle", + "regex", + "resvg 0.46.0", + "schemars", + "seahash", + "serde", + "serde_json", + "slotmap", + "smallvec", + "spin 0.10.1", + "strum", + "taffy", + "thiserror 2.0.20", + "tracing", + "ttf-parser", + "url", + "usvg 0.46.0", + "uuid", + "waker-fn", + "web-time", + "windows 0.62.2", + "zed-font-kit 0.14.1-zed (registry+https://github.com/rust-lang/crates.io-index)", + "zed-scap", +] + +[[package]] +name = "gpui-pre-apple" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4506904f40d7f214d72d9a1603fc8dc00b9884bd9c80770f215b3d12cac771b8" +dependencies = [ + "anyhow", + "block", + "cbindgen", + "cocoa 0.26.0", + "core-foundation 0.10.0", + "core-video", + "derive_more", + "etagere", + "foreign-types", + "gpui-pre", + "gpui-pre-collections", + "image", + "log", + "metal", + "objc", + "parking_lot", +] + +[[package]] +name = "gpui-pre-collections" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c8b0623a1a129d503d16dc38f8e51f5dd82e1e381dd19ea86054b983859cfc" +dependencies = [ + "gpui-pre-util", + "indexmap", + "rustc-hash 2.1.3", +] + +[[package]] +name = "gpui-pre-derive-refineable" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58e1b01bf92752443d78beae3b77d80896d1e7815078df3e3f50340c5ba96768" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "gpui-pre-http-client" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9bfcb50ec19f2a2e814448e295e471647fa05f58fb211a270d84a77b9bf9fd8" +dependencies = [ + "anyhow", + "async-compression", + "bytes", + "derive_more", + "futures", + "http", + "http-body", + "log", + "parking_lot", + "serde", + "serde_json", + "serde_urlencoded", + "url", +] + +[[package]] +name = "gpui-pre-linux" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd1d912c039641f0236b1701b7871bfddfb4926ffd1915b3958b73d03177250" +dependencies = [ + "accesskit", + "accesskit_unix", + "anyhow", + "as-raw-xcb-connection", + "ashpd", + "bitflags 2.13.2", + "bytemuck", + "calloop", + "calloop-wayland-source", + "filedescriptor", + "futures", + "gpui-pre", + "gpui-pre-collections", + "gpui-pre-http-client", + "gpui-pre-util", + "gpui-pre-wgpu", + "libc", + "log", + "notify-rust", + "oo7", + "open", + "parking_lot", + "raw-window-handle", + "smallvec", + "smol", + "strum", + "url", + "uuid", + "wayland-backend", + "wayland-client", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-plasma", + "wayland-protocols-wlr", + "x11-clipboard", + "x11rb", + "xkbcommon", + "zed-scap", + "zed-xim", +] + +[[package]] +name = "gpui-pre-macos" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15263eafcbe4e81aec7eb24a47d4c6c88f5e29ba2ba8ad86c430ab8e472883dc" +dependencies = [ + "accesskit", + "accesskit_macos", + "anyhow", + "async-task", + "block", + "block2 0.6.2", + "cocoa 0.26.0", + "core-foundation 0.10.0", + "core-foundation-sys", + "core-graphics 0.24.0", + "core-text", + "ctor", + "dispatch2", + "foreign-types", + "futures", + "gpui-pre", + "gpui-pre-apple", + "gpui-pre-collections", + "gpui-pre-media", + "gpui-pre-util", + "image", + "itertools 0.14.0", + "libc", + "log", + "mach2", + "metal", + "objc", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", + "objc2-user-notifications", + "parking_lot", + "pathfinder_geometry", + "raw-window-handle", + "semver", + "smallvec", + "strum", + "uuid", + "zed-font-kit 0.14.1-zed (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gpui-pre-macros" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e29384b3145f0143a17187b35339779398fe4c1d4534320d6a05594248a49965" +dependencies = [ + "heck 0.5.0", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "gpui-pre-media" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4010771de1c32efc395cc5edf64a8d43350437763764d4032cccf01639c23a" +dependencies = [ + "anyhow", + "bindgen", + "core-foundation 0.10.0", + "core-video", + "foreign-types", + "metal", + "objc", +] + +[[package]] +name = "gpui-pre-perf" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b8b89fd6fa5330477e46146a2fc2dc47d0bb1084763a9bd9b3da4173e8bfcf" +dependencies = [ + "gpui-pre-collections", + "serde", + "serde_json", +] + +[[package]] +name = "gpui-pre-platform" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e85fc9ec7ea5ff87ffb69edd0e23254e5627bc95758de232fb876d578ebd9e6d" +dependencies = [ + "console_error_panic_hook", + "gpui-pre", + "gpui-pre-linux", + "gpui-pre-macos", + "gpui-pre-web", + "gpui-pre-windows", +] + +[[package]] +name = "gpui-pre-refineable" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8dd11743345d7ee24768b47ad4bade35e05f68400b843e19f149f08fc99bf59" +dependencies = [ + "gpui-pre-derive-refineable", +] + +[[package]] +name = "gpui-pre-reqwest" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05be23908e707966824f8c51a609904b7f30739e8d915e120a53c1b995ba964c" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-rustls", + "tokio-socks", + "tokio-util", + "tower", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "windows-registry 0.4.0", +] + +[[package]] +name = "gpui-pre-scheduler" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28d65279f6eb7e74107457140ccd7aae3a3fcb12c4690568ac1748985b3b71e" +dependencies = [ + "async-task", + "backtrace", + "chrono", + "flume", + "futures", + "parking_lot", + "rand 0.9.5", + "wasm_thread 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "web-time", +] + +[[package]] +name = "gpui-pre-shared-string" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d597ac929a6c0f5f99a5de81322a67c061c3d2a87a558f8e9c6689ecc61ca75d" +dependencies = [ + "schemars", + "serde", + "smol_str", +] + +[[package]] +name = "gpui-pre-sum-tree" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c48ce7d9baabc52be67165433a11874b5286125d8e19edf1a8415f5735f478" +dependencies = [ + "gpui-pre-ztracing", + "heapless", + "log", + "rayon", + "tracing", +] + +[[package]] +name = "gpui-pre-util" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd91e2d2ac036e4bd496543cc4ae9b5108430a43a65bdaeecb79ef9e2e43e80b" +dependencies = [ + "anyhow", + "log", + "which", ] [[package]] -name = "gpu-allocator" -version = "0.28.0" +name = "gpui-pre-util-macros" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" +checksum = "402f0aef1b2874792bde32aec90a9b133153c62eeed7a7d55c4b622312096eb0" dependencies = [ - "ash", - "hashbrown 0.16.1", - "log", - "presser", - "thiserror 2.0.20", - "windows 0.62.2", + "gpui-pre-perf", + "quote", + "syn 2.0.119", ] [[package]] -name = "gpu-descriptor" -version = "0.3.2" +name = "gpui-pre-web" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +checksum = "99e4d7b8867307c3b0599ae4759f86960c6eaa983021eb1a2a34a47815ca071a" dependencies = [ - "bitflags 2.13.2", - "gpu-descriptor-types", - "hashbrown 0.15.5", + "anyhow", + "console_error_panic_hook", + "futures", + "gpui-pre", + "gpui-pre-http-client", + "gpui-pre-scheduler", + "gpui-pre-wgpu", + "js-sys", + "log", + "parking_lot", + "raw-window-handle", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm_thread 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "web-sys", + "web-time", ] [[package]] -name = "gpu-descriptor-types" -version = "0.2.0" +name = "gpui-pre-wgpu" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +checksum = "567f1fb79e72c80001d9e358e9f552e2696d79ad71af76aab60da5684848fd98" dependencies = [ - "bitflags 2.13.2", + "anyhow", + "bytemuck", + "cosmic-text", + "etagere", + "gpui-pre", + "gpui-pre-collections", + "gpui-pre-util", + "itertools 0.14.0", + "log", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "swash", + "unicode-bidi", + "unicode-segmentation", + "web-sys", + "wgpu", + "zed-font-kit 0.14.1-zed (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "gpui" -version = "0.2.2" -source = "git+https://github.com/zed-industries/zed?rev=a9cdfc9936c4ccf0503ee4631204e045f913e2c1#a9cdfc9936c4ccf0503ee4631204e045f913e2c1" +name = "gpui-pre-windows" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45918b16e62e89ef4952a6e140297f716934bf6f9b21206ad6ce54faa7316005" dependencies = [ "accesskit", + "accesskit_windows", "anyhow", - "async-channel", - "async-task", - "bindgen", - "bitflags 2.13.2", - "chrono", - "collections", - "core-video", - "ctor", - "derive_more", - "embed-resource", + "dunce", "etagere", "futures", - "futures-concurrency", - "getrandom 0.3.4", - "gpui_macros", - "gpui_shared_string", - "gpui_util", - "heapless", - "http_client", + "gpui-pre", + "gpui-pre-collections", + "gpui-pre-util", "image", - "inventory", "itertools 0.14.0", "log", - "lyon", - "num_cpus", - "parking", "parking_lot", - "pin-project", - "pollster 0.4.0", - "postage", - "profiling", - "rand", + "rand 0.9.5", "raw-window-handle", - "refineable", - "regex", - "resvg", - "scheduler", - "schemars", - "seahash", - "serde", - "serde_json", - "slotmap", "smallvec", - "spin 0.10.1", - "strum", - "sum_tree", - "taffy", - "thiserror 2.0.20", - "tracing", - "ttf-parser", - "url", - "usvg", - "util_macros", "uuid", - "waker-fn", - "web-time", "windows 0.62.2", - "ztracing", + "windows-core 0.62.2", + "windows-numerics 0.3.1", + "windows-registry 0.6.1", +] + +[[package]] +name = "gpui-pre-zlog" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24609786bd3dd9291b440a97ad700003827bbf55b69223038253ea0b401b3c36" +dependencies = [ + "anyhow", + "chrono", + "gpui-pre-collections", + "log", +] + +[[package]] +name = "gpui-pre-ztracing" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b59bfae633cc76bd10488b931308f04e3b916b211d3cb76b0e401eca7cf4ea5" +dependencies = [ + "gpui-pre-zlog", + "gpui-pre-ztracing-macro", + "tracing", + "tracing-subscriber", ] +[[package]] +name = "gpui-pre-ztracing-macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a09e0bf58aede45b8e7eed6e8d5d6552381c431014d62b349b0133008737bd" + [[package]] name = "gpui_apple" version = "0.1.0" @@ -1964,9 +2970,9 @@ dependencies = [ "anyhow", "block", "cbindgen", - "cocoa", + "cocoa 0.26.0", "collections", - "core-foundation", + "core-foundation 0.10.0", "core-video", "derive_more", "etagere", @@ -2032,11 +3038,11 @@ dependencies = [ "async-task", "block", "block2 0.6.2", - "cocoa", + "cocoa 0.26.0", "collections", - "core-foundation", + "core-foundation 0.10.0", "core-foundation-sys", - "core-graphics", + "core-graphics 0.24.0", "core-text", "ctor", "dispatch2", @@ -2130,7 +3136,7 @@ dependencies = [ "uuid", "wasm-bindgen", "wasm-bindgen-futures", - "wasm_thread", + "wasm_thread 0.3.3 (git+https://github.com/zed-industries/wasm_thread?rev=0cf96c7708dfb97ccf3da50347e25edcf75d6937)", "web-sys", "web-time", ] @@ -2158,7 +3164,7 @@ dependencies = [ "unicode-segmentation", "web-sys", "wgpu", - "zed-font-kit", + "zed-font-kit 0.14.1-zed (git+https://github.com/zed-industries/font-kit?rev=94b0f28166665e8fd2f53ff6d268a14955c82269)", ] [[package]] @@ -2179,14 +3185,43 @@ dependencies = [ "itertools 0.14.0", "log", "parking_lot", - "rand", + "rand 0.9.5", "raw-window-handle", "smallvec", "uuid", "windows 0.62.2", "windows-core 0.62.2", "windows-numerics 0.3.1", - "windows-registry", + "windows-registry 0.6.1", +] + +[[package]] +name = "granit-parser" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aa83cc6ac4dc610adf5501a5392b4bcc543b2c1f24eaf77469a96e31ec9abe" +dependencies = [ + "arraydeque", + "smallvec", +] + +[[package]] +name = "h2" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] @@ -2223,6 +3258,12 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "hashbrown" version = "0.15.5" @@ -2304,7 +3345,21 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", +] + +[[package]] +name = "html5ever" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] @@ -2327,6 +3382,19 @@ dependencies = [ "http", ] +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + [[package]] name = "http_client" version = "0.1.0" @@ -2347,6 +3415,78 @@ dependencies = [ "url", ] +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hybrid-array" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" +dependencies = [ + "typenum", +] + +[[package]] +name = "hyper" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "libc", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.65" @@ -2475,6 +3615,22 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "ignore" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b69833ed729dc5aa7d19541d96d6cf8e9137194207a04916d658e43168402f" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + [[package]] name = "image" version = "0.25.10" @@ -2485,7 +3641,7 @@ dependencies = [ "byteorder-lite", "color_quant", "exr", - "gif", + "gif 0.14.2", "image-webp", "moxcms", "num-traits", @@ -2494,8 +3650,8 @@ dependencies = [ "ravif", "rayon", "tiff", - "zune-core", - "zune-jpeg", + "zune-core 0.5.3", + "zune-jpeg 0.5.15", ] [[package]] @@ -2508,6 +3664,12 @@ dependencies = [ "quick-error", ] +[[package]] +name = "imagesize" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" + [[package]] name = "imagesize" version = "0.14.0" @@ -2532,6 +3694,17 @@ dependencies = [ "serde_core", ] +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + [[package]] name = "inotify" version = "0.11.5" @@ -2562,6 +3735,18 @@ dependencies = [ "generic-array", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "interpolate_name" version = "0.2.4" @@ -2589,11 +3774,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "554b8c5d64ec09a3a520fe58e4d48a73e00ff32899cdcbe32a4877afd4968b8e" dependencies = [ "cgl", - "core-foundation", + "core-foundation 0.10.0", "core-foundation-sys", "leaky-cow", ] +[[package]] +name = "ipnet" +version = "2.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" + [[package]] name = "is-docker" version = "0.2.0" @@ -2613,6 +3804,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -2723,6 +3923,17 @@ dependencies = [ "libc", ] +[[package]] +name = "kurbo" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" +dependencies = [ + "arrayvec", + "euclid", + "smallvec", +] + [[package]] name = "kurbo" version = "0.13.1" @@ -2873,6 +4084,85 @@ dependencies = [ "imgref", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "lsp-types" +version = "0.97.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53353550a17c04ac46c585feb189c2db82154fc84b79c7a66c96c2c644f66071" +dependencies = [ + "bitflags 1.3.2", + "fluent-uri", + "serde", + "serde_json", + "serde_repr", +] + +[[package]] +name = "luna-module-calendar" +version = "0.1.0" +dependencies = [ + "shell-core", + "shell-ui-gpui", +] + +[[package]] +name = "luna-module-clock" +version = "0.1.0" +dependencies = [ + "gpui", + "shell-core", + "shell-ui-gpui", +] + +[[package]] +name = "luna-module-launcher" +version = "0.1.0" +dependencies = [ + "gpui", + "shell-core", + "shell-ui-gpui", +] + +[[package]] +name = "luna-module-player" +version = "0.1.0" +dependencies = [ + "shell-core", + "shell-ui-gpui", +] + +[[package]] +name = "luna-module-resources" +version = "0.1.0" +dependencies = [ + "gpui", + "shell-core", + "shell-ui-gpui", + "tracing", +] + +[[package]] +name = "luna-module-settings" +version = "0.1.0" +dependencies = [ + "shell-core", + "shell-ui-gpui", +] + +[[package]] +name = "luna-module-theme" +version = "0.1.0" +dependencies = [ + "shell-core", + "shell-ui-gpui", +] + [[package]] name = "lyon" version = "1.0.19" @@ -2925,6 +4215,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + [[package]] name = "mac-notification-sys" version = "0.6.15" @@ -2957,6 +4253,42 @@ dependencies = [ "libc", ] +[[package]] +name = "markdown" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5cab8f2cadc416a82d2e783a1946388b31654d391d1c7d92cc1f03e295b1deb" +dependencies = [ + "serde", + "unicode-id", +] + +[[package]] +name = "markup5ever" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" +dependencies = [ + "log", + "phf 0.11.3", + "phf_codegen", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "markup5ever_rcdom" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" +dependencies = [ + "html5ever", + "markup5ever", + "tendril", + "xml5ever", +] + [[package]] name = "matchers" version = "0.2.0" @@ -2983,7 +4315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest", + "digest 0.10.7", ] [[package]] @@ -2993,7 +4325,7 @@ source = "git+https://github.com/zed-industries/zed?rev=a9cdfc9936c4ccf0503ee463 dependencies = [ "anyhow", "bindgen", - "core-foundation", + "core-foundation 0.10.0", "core-video", "foreign-types", "metal", @@ -3032,13 +4364,29 @@ checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ "bitflags 2.13.2", "block", - "core-graphics-types", + "core-graphics-types 0.2.0", "foreign-types", "log", "objc", "paste", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3087,6 +4435,33 @@ dependencies = [ "pxfm", ] +[[package]] +name = "multiversion" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c" +dependencies = [ + "multiversion-macros", +] + +[[package]] +name = "multiversion-macros" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83" +dependencies = [ + "proc-macro2", + "quote", + "rustversion", + "syn 3.0.5", +] + +[[package]] +name = "multiversion_no_op" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" + [[package]] name = "naga" version = "29.0.4" @@ -3137,6 +4512,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "7.1.3" @@ -3162,6 +4543,34 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" +[[package]] +name = "normpath" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9985ef7269fa99f3b12437bb698381da2428743ab90f20393f399fa14cab21a" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "notify" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533b4c39709f9ba5005d8002048266593c1cfaf3c5f0739d5b8ab0c6c504009" +dependencies = [ + "bitflags 2.13.2", + "filetime", + "fsevent-sys", + "inotify 0.10.2", + "kqueue", + "libc", + "log", + "mio", + "notify-types 1.0.1", + "walkdir", + "windows-sys 0.52.0", +] + [[package]] name = "notify" version = "8.2.0" @@ -3170,12 +4579,12 @@ checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ "bitflags 2.13.2", "fsevent-sys", - "inotify", + "inotify 0.11.5", "kqueue", "libc", "log", "mio", - "notify-types", + "notify-types 2.1.0", "walkdir", "windows-sys 0.60.2", ] @@ -3188,8 +4597,8 @@ checksum = "c02b49179cfebc9932238d04d6079912d26de0379328872846118a0fa0dbb302" dependencies = [ "file-id", "log", - "notify", - "notify-types", + "notify 8.2.0", + "notify-types 2.1.0", "walkdir", ] @@ -3207,6 +4616,15 @@ dependencies = [ "zbus", ] +[[package]] +name = "notify-types" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585d3cb5e12e01aed9e8a1f70d5c6b5e86fe2a6e48fc8cd0b3e0b8df6f6eb174" +dependencies = [ + "instant", +] + [[package]] name = "notify-types" version = "2.1.0" @@ -3216,6 +4634,15 @@ dependencies = [ "bitflags 2.13.2", ] +[[package]] +name = "ntapi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" +dependencies = [ + "winapi", +] + [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -3260,7 +4687,7 @@ dependencies = [ "num-iter", "num-traits", "once_cell", - "rand", + "rand 0.9.5", "serde", "smallvec", "zeroize", @@ -3350,6 +4777,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", ] [[package]] @@ -3387,8 +4826,8 @@ dependencies = [ "block2 0.5.1", "libc", "objc2 0.5.2", - "objc2-core-data", - "objc2-core-image", + "objc2-core-data 0.2.2", + "objc2-core-image 0.2.2", "objc2-foundation 0.2.2", "objc2-quartz-core 0.2.2", ] @@ -3401,8 +4840,27 @@ checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.13.2", "block2 0.6.2", + "libc", "objc2 0.6.4", + "objc2-cloud-kit", + "objc2-core-data 0.3.2", "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image 0.3.2", + "objc2-core-text", + "objc2-core-video", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3418,6 +4876,17 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", + "objc2-foundation 0.3.2", +] + [[package]] name = "objc2-core-foundation" version = "0.3.2" @@ -3454,6 +4923,16 @@ dependencies = [ "objc2-metal 0.2.2", ] +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2 0.6.4", + "objc2-foundation 0.3.2", +] + [[package]] name = "objc2-core-location" version = "0.3.2" @@ -3464,6 +4943,31 @@ dependencies = [ "objc2-foundation 0.3.2", ] +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -3581,6 +5085,24 @@ dependencies = [ "objc2-foundation 0.3.2", ] +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "object" version = "0.37.3" @@ -3610,7 +5132,7 @@ dependencies = [ "blocking", "cbc", "cipher", - "digest", + "digest 0.10.7", "endi", "futures-lite", "futures-util", @@ -3623,7 +5145,7 @@ dependencies = [ "pbkdf2", "serde", "serde_bytes", - "sha2", + "sha2 0.10.9", "subtle", "zbus", "zbus_macros", @@ -3641,6 +5163,12 @@ dependencies = [ "libc", ] +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "option-ext" version = "0.2.0" @@ -3732,7 +5260,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest", + "digest 0.10.7", "hmac", ] @@ -3747,9 +5275,18 @@ name = "perf" version = "0.1.0" source = "git+https://github.com/zed-industries/zed?rev=a9cdfc9936c4ccf0503ee4631204e045f913e2c1#a9cdfc9936c4ccf0503ee4631204e045f913e2c1" dependencies = [ - "collections", - "serde", - "serde_json", + "collections", + "serde", + "serde_json", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_shared 0.11.3", ] [[package]] @@ -3759,10 +5296,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ "phf_macros", - "phf_shared", + "phf_shared 0.13.1", "serde", ] +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.8", +] + [[package]] name = "phf_generator" version = "0.13.1" @@ -3770,7 +5327,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared", + "phf_shared 0.13.1", ] [[package]] @@ -3779,13 +5336,22 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.13.1", + "phf_shared 0.13.1", "proc-macro2", "quote", "syn 2.0.119", ] +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "phf_shared" version = "0.13.1" @@ -3961,6 +5527,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + [[package]] name = "presser" version = "0.3.1" @@ -4067,6 +5639,62 @@ dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.3", + "rustls", + "socket2", + "thiserror 2.0.20", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand 0.10.2", + "rand_pcg", + "ring", + "rustc-hash 2.1.3", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.20", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.61.2", +] + [[package]] name = "quote" version = "1.0.47" @@ -4088,14 +5716,46 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "rand" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ - "rand_chacha", - "rand_core", + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] @@ -4105,7 +5765,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", ] [[package]] @@ -4117,6 +5786,21 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + [[package]] name = "range-alloc" version = "0.1.5" @@ -4156,8 +5840,8 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand", - "rand_chacha", + "rand 0.9.5", + "rand_chacha 0.9.0", "simd_helpers", "thiserror 2.0.20", "v_frame", @@ -4263,6 +5947,17 @@ dependencies = [ "bitflags 2.13.2", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 1.0.69", +] + [[package]] name = "redox_users" version = "0.5.2" @@ -4337,21 +6032,38 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "resvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" +dependencies = [ + "gif 0.13.3", + "image-webp", + "log", + "pico-args", + "rgb", + "svgtypes 0.15.3", + "tiny-skia", + "usvg 0.45.1", + "zune-jpeg 0.4.21", +] + [[package]] name = "resvg" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b563218631706d614e23059436526d005b50ab5f2d506b55a17eb65c5eb83419" dependencies = [ - "gif", + "gif 0.14.2", "image-webp", "log", "pico-args", "rgb", - "svgtypes", + "svgtypes 0.16.1", "tiny-skia", - "usvg", - "zune-jpeg", + "usvg 0.46.0", + "zune-jpeg 0.5.15", ] [[package]] @@ -4363,6 +6075,29 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ropey" +version = "2.0.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4045a00dc327d084a2bbf126976e14125b54f23bd30511d45b842eba76c52d74" +dependencies = [ + "str_indices", +] + [[package]] name = "roxmltree" version = "0.20.0" @@ -4378,6 +6113,90 @@ dependencies = [ "memchr", ] +[[package]] +name = "rust-embed" +version = "8.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" +dependencies = [ + "mime_guess", + "proc-macro2", + "quote", + "rust-embed-utils", + "shellexpand", + "syn 2.0.119", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" +dependencies = [ + "globset", + "sha2 0.11.0", + "walkdir", +] + +[[package]] +name = "rust-i18n" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c43fd69c20da13756643a5bf51ae799965465c78e05c57a1242a736aaa56527" +dependencies = [ + "globwalk", + "regex", + "rust-i18n-macro", + "rust-i18n-support", + "smallvec", +] + +[[package]] +name = "rust-i18n-macro" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "086ec8a9eaa6afda33919b9bc1661c1f4e017c40e99bbd33ca98f6e1cb6ca91f" +dependencies = [ + "glob", + "proc-macro2", + "quote", + "rust-i18n-support", + "serde", + "serde_json", + "syn 2.0.119", +] + +[[package]] +name = "rust-i18n-support" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac02dcb9a01ec145d0a5534ea9554a966050ca250b346bb2a9ab0fcdafab5979" +dependencies = [ + "arc-swap", + "base62", + "globwalk", + "itertools 0.11.0", + "normpath", + "serde", + "serde-saphyr", + "serde_json", + "siphasher", + "toml 0.8.23", + "triomphe", +] + [[package]] name = "rustc-demangle" version = "0.1.28" @@ -4418,6 +6237,62 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "rustls" +version = "0.23.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6725596c3f2c3a0aef021139e145d4eafe314a6623e4680ca83852b2c67ab2ba" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.23" @@ -4457,6 +6332,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "scheduler" version = "0.1.0" @@ -4468,8 +6352,8 @@ dependencies = [ "flume", "futures", "parking_lot", - "rand", - "wasm_thread", + "rand 0.9.5", + "wasm_thread 0.3.3 (git+https://github.com/zed-industries/wasm_thread?rev=0cf96c7708dfb97ccf3da50347e25edcf75d6937)", "web-time", ] @@ -4511,12 +6395,58 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "screencapturekit" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5eeeb57ac94960cfe5ff4c402be6585ae4c8d29a2cf41b276048c2e849d64e" +dependencies = [ + "screencapturekit-sys", +] + +[[package]] +name = "screencapturekit-sys" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22411b57f7d49e7fe08025198813ee6fd65e1ee5eff4ebc7880c12c82bde4c60" +dependencies = [ + "block", + "dispatch", + "objc", + "objc-foundation", + "objc_id", + "once_cell", +] + [[package]] name = "seahash" version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.13.2", + "core-foundation 0.10.0", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "self_cell" version = "1.3.0" @@ -4543,6 +6473,23 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-saphyr" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3afb591f9cdb6223c88ba39269aff895620c7f0716dc42b705b5733d5c7c0823" +dependencies = [ + "annotate-snippets", + "base64", + "encoding_rs_io", + "granit-parser", + "nohash-hasher", + "num-traits", + "serde_core", + "smallvec", + "zmij", +] + [[package]] name = "serde_bytes" version = "0.11.19" @@ -4661,8 +6608,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "digest 0.11.3", ] [[package]] @@ -4678,6 +6636,13 @@ dependencies = [ name = "shell-app" version = "0.1.0" dependencies = [ + "luna-module-calendar", + "luna-module-clock", + "luna-module-launcher", + "luna-module-player", + "luna-module-resources", + "luna-module-settings", + "luna-module-theme", "shell-config", "shell-core", "shell-hyprland", @@ -4694,7 +6659,7 @@ name = "shell-config" version = "0.1.0" dependencies = [ "arc-swap", - "notify", + "notify 8.2.0", "notify-debouncer-full", "serde", "shell-core", @@ -4749,6 +6714,7 @@ version = "0.1.0" dependencies = [ "chrono", "gpui", + "gpui-kit", "gpui_platform", "shell-config", "shell-core", @@ -4757,6 +6723,15 @@ dependencies = [ "tracing", ] +[[package]] +name = "shellexpand" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" +dependencies = [ + "dirs 6.0.0", +] + [[package]] name = "shlex" version = "1.3.0" @@ -4794,6 +6769,12 @@ dependencies = [ "quote", ] +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "simplecss" version = "0.2.2" @@ -4877,6 +6858,16 @@ dependencies = [ "serde_core", ] +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "spin" version = "0.9.9" @@ -4916,6 +6907,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "str_indices" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d08889ec5408683408db66ad89e0e1f93dff55c73a4ccc71c427d5b277ee47e6" + [[package]] name = "strict-num" version = "0.1.1" @@ -4925,6 +6922,31 @@ dependencies = [ "float-cmp", ] +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + [[package]] name = "strum" version = "0.28.0" @@ -5049,13 +7071,23 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" +[[package]] +name = "svgtypes" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" +dependencies = [ + "kurbo 0.11.3", + "siphasher", +] + [[package]] name = "svgtypes" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d" dependencies = [ - "kurbo", + "kurbo 0.13.1", "siphasher", ] @@ -5092,6 +7124,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.2" @@ -5112,6 +7153,41 @@ dependencies = [ "libc", ] +[[package]] +name = "sysinfo" +version = "0.31.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "355dbe4f8799b304b05e1b0f05fc59b2a18d36645cf169607da45bde2f69a1be" +dependencies = [ + "core-foundation-sys", + "libc", + "memchr", + "ntapi", + "rayon", + "windows 0.57.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.13.2", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "taffy" version = "0.13.0" @@ -5124,6 +7200,18 @@ dependencies = [ "smallvec", ] +[[package]] +name = "tao-core-video-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271450eb289cb4d8d0720c6ce70c72c8c858c93dd61fc625881616752e6b98f6" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "objc", +] + [[package]] name = "tauri-winrt-notification" version = "0.7.3" @@ -5148,6 +7236,17 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + [[package]] name = "termcolor" version = "1.4.1" @@ -5217,7 +7316,7 @@ dependencies = [ "half", "quick-error", "weezl", - "zune-jpeg", + "zune-jpeg 0.5.15", ] [[package]] @@ -5239,6 +7338,15 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -5290,6 +7398,56 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-socks" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e2948f60dbe26b35f2c7fb74ac2854c1fddded0fe9d7548fcc674a246f7615" +dependencies = [ + "either", + "futures-util", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "libc", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.8.23" @@ -5382,6 +7540,33 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.44" @@ -5444,6 +7629,23 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "triomphe" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b40688ea6389c8171614b25491f71d4a27946e0c7ce2da1c6de27e25abf1a0ae" +dependencies = [ + "arc-swap", + "serde", + "stable_deref_trait", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "ttf-parser" version = "0.25.1" @@ -5476,6 +7678,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-bidi" version = "0.3.18" @@ -5494,6 +7702,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" +[[package]] +name = "unicode-id" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ba288e709927c043cbe476718d37be306be53fb1fafecd0dbe36d072be2580" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -5542,6 +7756,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.8" @@ -5554,6 +7774,33 @@ dependencies = [ "serde", ] +[[package]] +name = "usvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +dependencies = [ + "base64", + "data-url", + "flate2", + "fontdb", + "imagesize 0.13.0", + "kurbo 0.11.3", + "log", + "pico-args", + "roxmltree 0.20.0", + "rustybuzz", + "simplecss", + "siphasher", + "strict-num", + "svgtypes 0.15.3", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", +] + [[package]] name = "usvg" version = "0.46.0" @@ -5564,8 +7811,8 @@ dependencies = [ "data-url", "flate2", "fontdb", - "imagesize", - "kurbo", + "imagesize 0.14.0", + "kurbo 0.13.1", "log", "pico-args", "roxmltree 0.21.1", @@ -5573,7 +7820,7 @@ dependencies = [ "simplecss", "siphasher", "strict-num", - "svgtypes", + "svgtypes 0.16.1", "tiny-skia-path", "unicode-bidi", "unicode-script", @@ -5581,6 +7828,12 @@ dependencies = [ "xmlwriter", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -5705,6 +7958,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -5775,6 +8037,31 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm_thread" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7516db7f32decdadb1c3b8deb1b7d78b9df7606c5cc2f6241737c2ab3a0258e" +dependencies = [ + "futures", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm_thread" version = "0.3.3" @@ -6127,7 +8414,27 @@ dependencies = [ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] [[package]] name = "windows" @@ -6154,6 +8461,19 @@ dependencies = [ "windows-numerics 0.3.1", ] +[[package]] +name = "windows-capture" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a4df73e95feddb9ec1a7e9c2ca6323b8c97d5eeeff78d28f1eccdf19c882b24" +dependencies = [ + "parking_lot", + "rayon", + "thiserror 2.0.20", + "windows 0.61.3", + "windows-future 0.2.1", +] + [[package]] name = "windows-collections" version = "0.2.0" @@ -6172,14 +8492,39 @@ dependencies = [ "windows-core 0.62.2", ] +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -6191,8 +8536,8 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.2.1", "windows-result 0.4.1", "windows-strings 0.5.1", @@ -6220,6 +8565,28 @@ dependencies = [ "windows-threading 0.2.1", ] +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -6231,6 +8598,28 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "windows-interface" version = "0.59.3" @@ -6274,6 +8663,17 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +dependencies = [ + "windows-result 0.3.4", + "windows-strings 0.3.1", + "windows-targets 0.53.5", +] + [[package]] name = "windows-registry" version = "0.6.1" @@ -6285,6 +8685,24 @@ dependencies = [ "windows-strings 0.5.1", ] +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -6303,6 +8721,25 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-strings" version = "0.4.2" @@ -6321,6 +8758,24 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.59.0" @@ -6348,6 +8803,21 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -6408,6 +8878,12 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6420,6 +8896,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6432,6 +8914,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6456,6 +8944,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6468,6 +8962,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6480,6 +8980,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6492,6 +8998,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6553,18 +9065,89 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-clipboard" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "662d74b3d77e396b8e5beb00b9cad6a9eccf40b2ef68cc858784b14c41d535a3" +dependencies = [ + "libc", + "x11rb", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "rustix", + "x11rb-protocol", + "xcursor", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "xcb" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6c2ad15e0e922856ee89afe862b8992334bbe7953adad56cd1199358cb30566" +dependencies = [ + "bitflags 2.13.2", + "libc", + "quick-xml", + "x11", +] + [[package]] name = "xcursor" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23" +[[package]] +name = "xim-ctext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac61a7062c40f3c37b6e82eeeef835d5cc7824b632a72784a89b3963c33284c" +dependencies = [ + "encoding_rs", +] + +[[package]] +name = "xim-parser" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dcee45f89572d5a65180af3a84e7ddb24f5ea690a6d3aa9de231281544dd7b7" +dependencies = [ + "bitflags 2.13.2", +] + [[package]] name = "xkbcommon" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" dependencies = [ + "as-raw-xcb-connection", "libc", "memmap2", "xkeysym", @@ -6582,6 +9165,17 @@ version = "0.8.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7" +[[package]] +name = "xml5ever" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" +dependencies = [ + "log", + "mac", + "markup5ever", +] + [[package]] name = "xmlwriter" version = "0.1.0" @@ -6740,6 +9334,31 @@ dependencies = [ "serde", ] +[[package]] +name = "zed-font-kit" +version = "0.14.1-zed" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3898e450f36f852edda72e3f985c34426042c4951790b23b107f93394f9bff5" +dependencies = [ + "bitflags 2.13.2", + "byteorder", + "core-foundation 0.10.0", + "core-graphics 0.24.0", + "core-text", + "dirs 5.0.1", + "dwrote", + "float-ord", + "freetype-sys", + "lazy_static", + "libc", + "log", + "pathfinder_geometry", + "pathfinder_simd", + "walkdir", + "winapi", + "yeslogic-fontconfig-sys", +] + [[package]] name = "zed-font-kit" version = "0.14.1-zed" @@ -6747,10 +9366,10 @@ source = "git+https://github.com/zed-industries/font-kit?rev=94b0f28166665e8fd2f dependencies = [ "bitflags 2.13.2", "byteorder", - "core-foundation", - "core-graphics", + "core-foundation 0.10.0", + "core-graphics 0.24.0", "core-text", - "dirs", + "dirs 6.0.0", "dwrote", "float-ord", "freetype-sys", @@ -6764,6 +9383,42 @@ dependencies = [ "yeslogic-fontconfig-sys", ] +[[package]] +name = "zed-scap" +version = "0.0.8-zed" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b338d705ae33a43ca00287c11129303a7a0aa57b101b72a1c08c863f698ac8" +dependencies = [ + "anyhow", + "cocoa 0.25.0", + "core-graphics-helmer-fork", + "log", + "objc", + "rand 0.8.8", + "screencapturekit", + "screencapturekit-sys", + "sysinfo", + "tao-core-video-sys", + "windows 0.61.3", + "windows-capture", + "x11", + "xcb", +] + +[[package]] +name = "zed-xim" +version = "0.4.0-zed" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0b46ed118eba34d9ba53d94ddc0b665e0e06a2cf874cfa2dd5dec278148642" +dependencies = [ + "ahash", + "hashbrown 0.14.5", + "log", + "x11rb", + "xim-ctext", + "xim-parser", +] + [[package]] name = "zeno" version = "0.3.3" @@ -6903,6 +9558,12 @@ name = "ztracing_macro" version = "0.1.0" source = "git+https://github.com/zed-industries/zed?rev=a9cdfc9936c4ccf0503ee4631204e045f913e2c1#a9cdfc9936c4ccf0503ee4631204e045f913e2c1" +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + [[package]] name = "zune-core" version = "0.5.3" @@ -6918,13 +9579,22 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "zune-jpeg" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +dependencies = [ + "zune-core 0.4.12", +] + [[package]] name = "zune-jpeg" version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" dependencies = [ - "zune-core", + "zune-core 0.5.3", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 3408159..af64bd0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ members = [ "crates/shell-theme", "crates/shell-ui-gpui", "crates/shell-app", + "crates/modules/*", ] resolver = "3" @@ -25,6 +26,13 @@ shell-linux = { path = "crates/shell-linux" } shell-config = { path = "crates/shell-config" } shell-theme = { path = "crates/shell-theme" } shell-ui-gpui = { path = "crates/shell-ui-gpui" } +luna-module-launcher = { path = "crates/modules/launcher" } +luna-module-calendar = { path = "crates/modules/calendar" } +luna-module-player = { path = "crates/modules/player" } +luna-module-theme = { path = "crates/modules/theme" } +luna-module-resources = { path = "crates/modules/resources" } +luna-module-clock = { path = "crates/modules/clock" } +luna-module-settings = { path = "crates/modules/settings" } tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] } diff --git a/config/config.toml b/config/config.toml index 6a91e7f..c817924 100644 --- a/config/config.toml +++ b/config/config.toml @@ -8,7 +8,7 @@ startup_delay_ms = 0 backend = "hyprland" [modules] -bar = true +bar = false notch = true dock = false launcher = true diff --git a/config/theme.toml b/config/theme.toml index 2020f18..a39a1fe 100644 --- a/config/theme.toml +++ b/config/theme.toml @@ -19,5 +19,5 @@ slow_ms = 360 [typography] body_size = 14 -label_size = 13 +label_size = 14 title_size = 16 diff --git a/context/modules/calendar.md b/context/modules/calendar.md index 9c5faab..9f1ac57 100644 --- a/context/modules/calendar.md +++ b/context/modules/calendar.md @@ -6,7 +6,7 @@ ## Purpose -Provide date/calendar information inside the Notch, with room for future agenda integration without coupling the shell to a specific calendar provider. +Provide date/calendar information inside the Notch, with room for future agenda integration (SQLite) without coupling the shell to a specific calendar provider. ## Responsibilities diff --git a/context/modules/clock.md b/context/modules/clock.md index 4269ea1..7fc46e5 100644 --- a/context/modules/clock.md +++ b/context/modules/clock.md @@ -6,13 +6,12 @@ ## Purpose -Provide time/date presentation and clock-specific interaction inside the Notch while remaining independent from panel placement. +Provide time presentation and clock-specific interaction inside the Notch while remaining independent from panel placement. ## Responsibilities ```text current time -current date 12h/24h formatting timezone display optional timer/alarm expansion later @@ -33,7 +32,7 @@ optional expanded clock state ## Notch behavior -The module may expose compact and expanded clock views; the Notch owns host resizing and animation. +The module may expose compact and expanded clock views, when user clicks him opens calendar mode with date and calendar; the Notch owns host resizing and animation. ## MVP diff --git a/crates/modules/calendar/Cargo.toml b/crates/modules/calendar/Cargo.toml new file mode 100644 index 0000000..6c9b0b3 --- /dev/null +++ b/crates/modules/calendar/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "luna-module-calendar" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +shell-core.workspace = true +shell-ui-gpui.workspace = true diff --git a/crates/modules/calendar/src/lib.rs b/crates/modules/calendar/src/lib.rs new file mode 100644 index 0000000..a8749d8 --- /dev/null +++ b/crates/modules/calendar/src/lib.rs @@ -0,0 +1,26 @@ +//! Calendar module boundary. Calendar state/navigation will be added here as +//! the shared date model is introduced. + +use shell_core::NotchConfig; +use shell_ui_gpui::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +#[derive(Default)] +pub struct CalendarModule; + +impl NotchModule for CalendarModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Calendar, + title: "Calendar", + aliases: &[], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, false) + } + + fn render(&mut self, context: ModuleContext) -> ModuleView { + shell_ui_gpui::primitives::module_label("Calendar", &context.tokens) + } +} diff --git a/crates/modules/clock/Cargo.toml b/crates/modules/clock/Cargo.toml new file mode 100644 index 0000000..91e2156 --- /dev/null +++ b/crates/modules/clock/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "luna-module-clock" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +gpui.workspace = true +shell-core.workspace = true +shell-ui-gpui.workspace = true diff --git a/crates/modules/clock/src/lib.rs b/crates/modules/clock/src/lib.rs new file mode 100644 index 0000000..a6774d1 --- /dev/null +++ b/crates/modules/clock/src/lib.rs @@ -0,0 +1,25 @@ +//! Compact clock module. + +use shell_core::NotchConfig; +use shell_ui_gpui::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +#[derive(Default)] +pub struct ClockModule; + +impl NotchModule for ClockModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Clock, + title: "Clock", + aliases: &[], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, false) + } + + fn render(&mut self, context: ModuleContext) -> ModuleView { + shell_ui_gpui::primitives::module_label(context.clock, &context.tokens) + } +} diff --git a/crates/modules/launcher/Cargo.toml b/crates/modules/launcher/Cargo.toml new file mode 100644 index 0000000..1849615 --- /dev/null +++ b/crates/modules/launcher/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "luna-module-launcher" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +gpui.workspace = true +shell-core.workspace = true +shell-ui-gpui.workspace = true diff --git a/crates/modules/launcher/src/lib.rs b/crates/modules/launcher/src/lib.rs new file mode 100644 index 0000000..34a6946 --- /dev/null +++ b/crates/modules/launcher/src/lib.rs @@ -0,0 +1,134 @@ +//! Launcher module hosted by the Notch. + +use gpui::{FontWeight, div, prelude::*, px, rgb, rgba}; +use shell_core::NotchConfig; +use shell_ui_gpui::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +const ITEMS: &[(&str, &str, &str)] = &[ + ( + "◉", + "About Xfce", + "Information about the Xfce Desktop Environment", + ), + ( + "▣", + "Advanced Network Configuration", + "Manage and change network connection settings", + ), + ("△", "Alacritty", "Terminal"), + ( + "◌", + "AsusCtlTray", + "A tray icon to switch asusctl profiles on the fly", + ), + ( + "✣", + "auto-cpufreq", + "Automatic CPU frequency and power optimizer", + ), + ( + "◈", + "Avahi SSH Server Browser", + "Browse for Zeroconf-enabled SSH Servers", + ), +]; + +#[derive(Default)] +pub struct LauncherModule; + +impl NotchModule for LauncherModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Launcher, + title: "Launcher", + aliases: &[], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, true) + } + + fn render(&mut self, context: ModuleContext) -> ModuleView { + let tokens = context.tokens; + let query_lower = context.query.to_lowercase(); + let rows = ITEMS + .iter() + .filter(|(_, name, description)| { + query_lower.is_empty() + || name.to_lowercase().contains(&query_lower) + || description.to_lowercase().contains(&query_lower) + }) + .map(|(icon, name, description)| { + div() + .w_full() + .h(px(44.0)) + .px(px(tokens.spacing.sm as f32)) + .rounded(px(tokens.radius.sm as f32)) + .flex() + .items_center() + .gap(px(tokens.spacing.sm as f32)) + .bg(rgba(0x242424e8)) + .text_color(rgb(tokens.colors.foreground)) + .child( + div() + .w(px(28.0)) + .h(px(28.0)) + .rounded(px(tokens.radius.sm as f32)) + .flex() + .items_center() + .justify_center() + .bg(rgba(0x3b3b3bf0)) + .text_size(px(tokens.typography.title_size as f32 - 2.0)) + .child(*icon), + ) + .child( + div() + .flex() + .flex_col() + .gap(px(1.0)) + .child( + div() + .text_size(px(tokens.typography.body_size as f32)) + .font_weight(FontWeight::BOLD) + .child(*name), + ) + .child( + div() + .text_size(px(tokens.typography.label_size as f32 - 1.0)) + .text_color(rgba(0xaaa6a6e6)) + .child(*description), + ), + ) + }); + + div() + .w(px(context.notch.width as f32)) + .h(px(context.notch.expanded_height as f32)) + .p(px(tokens.spacing.md as f32)) + .flex() + .flex_col() + .gap(px(tokens.spacing.sm as f32)) + .text_color(rgb(tokens.colors.foreground)) + .child( + div() + .w_full() + .h(px(40.0)) + .px(px(tokens.spacing.sm as f32)) + .flex() + .items_center() + .gap(px(tokens.spacing.sm as f32)) + .border_b(px(1.0)) + .border_color(rgba(0x8b8b8b66)) + .text_size(px(tokens.typography.body_size as f32)) + .child("⌕") + .child(if context.query.is_empty() { + "Search...".to_string() + } else { + context.query + }), + ) + .child(div().flex().flex_col().gap(px(2.0)).children(rows)) + .into_any_element() + } +} diff --git a/crates/modules/player/Cargo.toml b/crates/modules/player/Cargo.toml new file mode 100644 index 0000000..b95069f --- /dev/null +++ b/crates/modules/player/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "luna-module-player" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +shell-core.workspace = true +shell-ui-gpui.workspace = true diff --git a/crates/modules/player/src/lib.rs b/crates/modules/player/src/lib.rs new file mode 100644 index 0000000..0b7b463 --- /dev/null +++ b/crates/modules/player/src/lib.rs @@ -0,0 +1,26 @@ +//! Player module boundary. Media state is expected to arrive through a +//! MediaPort/MPRIS adapter owned by the application composition root. + +use shell_core::NotchConfig; +use shell_ui_gpui::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +#[derive(Default)] +pub struct PlayerModule; + +impl NotchModule for PlayerModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Player, + title: "Player", + aliases: &[], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, false) + } + + fn render(&mut self, context: ModuleContext) -> ModuleView { + shell_ui_gpui::primitives::module_label("Player", &context.tokens) + } +} diff --git a/crates/modules/resources/Cargo.toml b/crates/modules/resources/Cargo.toml new file mode 100644 index 0000000..18cee3a --- /dev/null +++ b/crates/modules/resources/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "luna-module-resources" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +gpui.workspace = true +shell-core.workspace = true +shell-ui-gpui.workspace = true +tracing.workspace = true diff --git a/crates/modules/resources/src/lib.rs b/crates/modules/resources/src/lib.rs new file mode 100644 index 0000000..ce074e5 --- /dev/null +++ b/crates/modules/resources/src/lib.rs @@ -0,0 +1,55 @@ +//! Resource/status indicators hosted by the Notch. + +use gpui::{MouseButton, div, prelude::*, px, rgb}; +use shell_core::{NotchConfig, ShellCommand}; +use shell_ui_gpui::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +#[derive(Default)] +pub struct ResourcesModule; + +impl NotchModule for ResourcesModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Resources, + title: "Resources", + aliases: &["network", "audio", "battery", "media", "workspaces"], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, false) + } + + fn render(&mut self, context: ModuleContext) -> ModuleView { + let label = match context.module_key.as_str() { + "audio" => "◖".to_owned(), + "battery" => "▰".to_owned(), + "media" => "▶".to_owned(), + "workspaces" => context + .snapshot + .focused_workspace + .map_or_else(|| "WS —".to_owned(), |workspace| format!("WS {workspace}")), + _ => "▮▮▮".to_owned(), + }; + + let mut element = div() + .flex() + .items_center() + .text_color(rgb(context.tokens.colors.foreground)) + .text_size(px(context.tokens.typography.label_size as f32)) + .child(label); + + if context.module_key == "workspaces" + && let Some(workspace) = context.snapshot.focused_workspace + { + let sender = context.commands.clone(); + element = element.on_mouse_down(MouseButton::Left, move |_event, _window, _cx| { + if let Err(error) = sender.send(ShellCommand::FocusWorkspace(workspace)) { + tracing::warn!(%error, ?workspace, "could not enqueue workspace focus command"); + } + }); + } + + element.into_any_element() + } +} diff --git a/crates/modules/settings/Cargo.toml b/crates/modules/settings/Cargo.toml new file mode 100644 index 0000000..4d2de61 --- /dev/null +++ b/crates/modules/settings/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "luna-module-settings" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +shell-core.workspace = true +shell-ui-gpui.workspace = true diff --git a/crates/modules/settings/src/lib.rs b/crates/modules/settings/src/lib.rs new file mode 100644 index 0000000..d28d45d --- /dev/null +++ b/crates/modules/settings/src/lib.rs @@ -0,0 +1,26 @@ +//! Settings module boundary. Configuration writes stay behind ConfigPort and +//! are intentionally not performed by GPUI widgets. + +use shell_core::NotchConfig; +use shell_ui_gpui::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +#[derive(Default)] +pub struct SettingsModule; + +impl NotchModule for SettingsModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Settings, + title: "Settings", + aliases: &[], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, false) + } + + fn render(&mut self, context: ModuleContext) -> ModuleView { + shell_ui_gpui::primitives::module_label("Settings", &context.tokens) + } +} diff --git a/crates/modules/theme/Cargo.toml b/crates/modules/theme/Cargo.toml new file mode 100644 index 0000000..c8fdd06 --- /dev/null +++ b/crates/modules/theme/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "luna-module-theme" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +shell-core.workspace = true +shell-ui-gpui.workspace = true diff --git a/crates/modules/theme/src/lib.rs b/crates/modules/theme/src/lib.rs new file mode 100644 index 0000000..f48c870 --- /dev/null +++ b/crates/modules/theme/src/lib.rs @@ -0,0 +1,26 @@ +//! Theme controller module. The shared theme snapshot is supplied by the +//! application context; this crate does not define a second theme format. + +use shell_core::NotchConfig; +use shell_ui_gpui::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +#[derive(Default)] +pub struct ThemeModule; + +impl NotchModule for ThemeModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Theme, + title: "Theme", + aliases: &[], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, false) + } + + fn render(&mut self, context: ModuleContext) -> ModuleView { + shell_ui_gpui::primitives::module_label("Theme", &context.tokens) + } +} diff --git a/crates/shell-app/Cargo.toml b/crates/shell-app/Cargo.toml index d7c0499..60c50fe 100644 --- a/crates/shell-app/Cargo.toml +++ b/crates/shell-app/Cargo.toml @@ -13,5 +13,12 @@ shell-linux.workspace = true shell-platform.workspace = true shell-theme.workspace = true shell-ui-gpui.workspace = true +luna-module-launcher.workspace = true +luna-module-calendar.workspace = true +luna-module-player.workspace = true +luna-module-theme.workspace = true +luna-module-resources.workspace = true +luna-module-clock.workspace = true +luna-module-settings.workspace = true tracing.workspace = true tracing-subscriber.workspace = true diff --git a/crates/shell-app/src/lib.rs b/crates/shell-app/src/lib.rs index 3886d6f..e2bca73 100644 --- a/crates/shell-app/src/lib.rs +++ b/crates/shell-app/src/lib.rs @@ -14,11 +14,41 @@ use shell_platform::{ OutputRegistry, OutputStateError, OutputTransition, SurfaceMetrics, SurfaceTopology, }; use shell_theme::DesignTokens; -use shell_ui_gpui::GpuiFrontend; +use shell_ui_gpui::{GpuiFrontend, ModuleRegistry}; use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt}; static LOGGING_INITIALIZED: OnceLock<()> = OnceLock::new(); +/// Compose the initial statically linked module set. +/// +/// This is intentionally in `shell-app`: the UI host knows only the contract +/// and the application is the sole place that knows concrete module crates. +pub fn build_module_registry() -> Result { + let mut registry = ModuleRegistry::new(); + registry + .register(luna_module_launcher::LauncherModule) + .map_err(|error| PlatformError::initialization(error.to_string()))?; + registry + .register(luna_module_calendar::CalendarModule) + .map_err(|error| PlatformError::initialization(error.to_string()))?; + registry + .register(luna_module_player::PlayerModule) + .map_err(|error| PlatformError::initialization(error.to_string()))?; + registry + .register(luna_module_theme::ThemeModule) + .map_err(|error| PlatformError::initialization(error.to_string()))?; + registry + .register(luna_module_resources::ResourcesModule) + .map_err(|error| PlatformError::initialization(error.to_string()))?; + registry + .register(luna_module_clock::ClockModule) + .map_err(|error| PlatformError::initialization(error.to_string()))?; + registry + .register(luna_module_settings::SettingsModule) + .map_err(|error| PlatformError::initialization(error.to_string()))?; + Ok(registry) +} + /// Application-owned asynchronous command path used by feature surfaces. /// /// The UI only enqueues a domain command. The worker invokes the diff --git a/crates/shell-app/src/main.rs b/crates/shell-app/src/main.rs index 9c0675a..1c443cf 100644 --- a/crates/shell-app/src/main.rs +++ b/crates/shell-app/src/main.rs @@ -22,11 +22,19 @@ fn main() { std::process::exit(1); } + let module_registry = match shell_app::build_module_registry() { + Ok(registry) => registry, + Err(error) => { + tracing::error!(error = %error, "module registry could not be initialized"); + std::process::exit(1); + } + }; let frontend = GpuiFrontend::new(SurfaceSpec::new( shell_core::OutputId::new(0), ShellLayer::Top, Anchors::TOP_LEFT_RIGHT, - )); + )) + .with_module_registry(module_registry); let config_manager = match ConfigManager::new(ConfigLoader::discover()) { Ok(manager) => manager, Err(error) => { diff --git a/crates/shell-ui-gpui/src/lib.rs b/crates/shell-ui-gpui/src/lib.rs index 393fd91..258333b 100644 --- a/crates/shell-ui-gpui/src/lib.rs +++ b/crates/shell-ui-gpui/src/lib.rs @@ -4,6 +4,14 @@ //! application core only supplies renderer-independent configuration and //! domain values. +pub mod module_host; +pub mod primitives; + +pub use module_host::{ + ModuleContext, ModuleId, ModuleMetadata, ModuleRegistry, ModuleRegistryError, ModuleSize, + ModuleView, NotchModule, NotchRoute, +}; + use std::{ any::Any, cell::RefCell, @@ -25,18 +33,19 @@ use gpui_platform::application; use shell_config::{ConfigEvent, ConfigWatcher}; use shell_core::{ AppUsageMetrics, BarPosition, CompositorEvent, CompositorSnapshot, CompositorStateStore, - FocusManager, KeyboardModeConfig, NotchAnimation, NotchConfig, NotchGeometry, NotchState, - OutputId, PlatformError, Point, ShellCommand, ShellConfig, + FocusManager, KeyboardModeConfig, NotchAnimation, NotchConfig, NotchGeometry, OutputId, + PlatformError, Point, ShellCommand, ShellConfig, }; use shell_platform::{Anchors, ShellLayer, SurfaceSpec}; use shell_theme::DesignTokens; actions!(shell_ui_gpui, [Quit]); -#[derive(Clone, Debug)] +#[derive(Clone)] pub struct GpuiFrontend { surface_spec: Rc>, settings: Rc>, + module_registry: Rc>, } #[derive(Clone, Debug)] @@ -75,9 +84,19 @@ impl GpuiFrontend { Self { surface_spec: Rc::new(RefCell::new(surface_spec)), settings: Rc::new(RefCell::new(FrontendSettings::default())), + module_registry: Rc::new(RefCell::new(ModuleRegistry::new())), } } + /// Supplies the statically linked modules assembled by `shell-app`. + /// + /// The frontend owns the host handle after composition; concrete module + /// crates are never imported by this crate. + pub fn with_module_registry(mut self, registry: ModuleRegistry) -> Self { + self.module_registry = Rc::new(RefCell::new(registry)); + self + } + pub fn prepare(&self, config: &ShellConfig) { let mut surface_spec = self.surface_spec.borrow_mut(); surface_spec.anchors = match config.bar.position { @@ -140,6 +159,7 @@ impl GpuiFrontend { let debug_state_store = state_store.clone(); let notch_config = settings.notch.clone(); let notch_tokens = settings.tokens.clone(); + let module_registry = self.module_registry.clone(); let configured_output_size = focused_output_size(&initial_snapshot); let run_result = catch_gpui_run(|| { @@ -209,6 +229,7 @@ impl GpuiFrontend { notch_tokens, initial_snapshot, commands, + module_registry, cx, ); @@ -545,11 +566,12 @@ fn notch_layer_shell_options(reserved_height: u32) -> LayerShellOptions { struct NotchView { config: NotchConfig, tokens: DesignTokens, - state: NotchState, + route: NotchRoute, clock: SharedString, query: String, snapshot: CompositorSnapshot, commands: mpsc::Sender, + module_registry: Rc>, focus_manager: FocusManager, focus_handle: FocusHandle, animation: NotchAnimation, @@ -563,9 +585,11 @@ impl NotchView { tokens: DesignTokens, snapshot: CompositorSnapshot, commands: mpsc::Sender, + module_registry: Rc>, cx: &mut Context, ) -> Self { - let initial_geometry = notch_target_geometry(&config, NotchState::Idle); + let initial_geometry = + notch_target_geometry(&config, NotchRoute::Idle, &module_registry.borrow()); let task = cx.spawn(async move |this, cx| { loop { if this @@ -585,11 +609,12 @@ impl NotchView { Self { config, tokens, - state: NotchState::Idle, + route: NotchRoute::Idle, clock: local_clock(), query: String::new(), snapshot, commands, + module_registry, focus_manager: FocusManager::default(), focus_handle: cx.focus_handle(), animation: NotchAnimation::new(initial_geometry), @@ -598,39 +623,69 @@ impl NotchView { } } - fn target_geometry(&self, state: NotchState) -> NotchGeometry { - notch_target_geometry(&self.config, state) + fn target_geometry(&self, route: NotchRoute) -> NotchGeometry { + notch_target_geometry(&self.config, route, &self.module_registry.borrow()) } } -fn notch_target_geometry(config: &NotchConfig, state: NotchState) -> NotchGeometry { - let geometry = NotchGeometry::for_state(config, state); - if state == NotchState::Launcher { - return geometry; +fn notch_target_geometry( + config: &NotchConfig, + route: NotchRoute, + registry: &ModuleRegistry, +) -> NotchGeometry { + let idle_geometry = NotchGeometry::new( + config.collapsed_width as f32, + config.collapsed_height as f32, + config.corner_radius as f32, + config.corner_size as f32, + config.edge.into(), + ); + match route { + NotchRoute::Idle => { + let module_count = config + .modules + .iter() + .filter(|module| registry.resolve_key(module).is_some()) + .count(); + let calculated_width = 32.0 + module_count as f32 * 44.0; + NotchGeometry::new( + calculated_width + .max(idle_geometry.width) + .min(config.width as f32), + idle_geometry.height, + idle_geometry.radius, + idle_geometry.corner_size, + idle_geometry.edge, + ) + } + NotchRoute::Module(id) => registry + .preferred_size(id, config) + .map(|size| { + NotchGeometry::new( + size.width.min(config.width as f32), + size.height.min(config.expanded_height as f32), + idle_geometry.radius, + idle_geometry.corner_size, + idle_geometry.edge, + ) + }) + .unwrap_or_else(|| { + NotchGeometry::new( + config.width as f32, + config.expanded_height as f32, + config.corner_radius as f32, + config.corner_size as f32, + config.edge.into(), + ) + }), } - - let module_count = config - .modules - .iter() - .filter(|module| is_known_module(module)) - .count(); - let calculated_width = 32.0 + module_count as f32 * 44.0; - NotchGeometry::new( - calculated_width - .max(geometry.width) - .min(config.width as f32), - geometry.height, - geometry.radius, - geometry.corner_size, - geometry.edge, - ) } impl NotchView { fn apply_config(&mut self, config: NotchConfig, tokens: DesignTokens, cx: &mut Context) { self.config = config; self.tokens = tokens; - let target = self.target_geometry(self.state); + let target = self.target_geometry(self.route); let duration_ms = if self.config.animation.enabled { self.config.animation.duration_ms } else { @@ -641,25 +696,34 @@ impl NotchView { cx.notify(); } - fn set_state(&mut self, state: NotchState, window: &mut Window, cx: &mut Context) { - if self.state == state && !self.animation.is_running() { + fn set_route(&mut self, route: NotchRoute, window: &mut Window, cx: &mut Context) { + if self.route == route && !self.animation.is_running() { return; } - self.state = state; - match state { - NotchState::Idle => { + if let NotchRoute::Module(id) = route { + if let Err(error) = self.module_registry.borrow_mut().activate(id) { + tracing::warn!(%error, "cannot activate unregistered notch module"); + return; + } + } else { + self.module_registry.borrow_mut().deactivate(); + } + + self.route = route; + match route { + NotchRoute::Idle => { self.focus_manager.dismiss_notch(); self.query.clear(); window.blur(cx); } - NotchState::Launcher => { + NotchRoute::Module(_) => { self.focus_manager.activate_notch(); window.focus(&self.focus_handle, cx); } } - let target = self.target_geometry(state); + let target = self.target_geometry(route); let duration_ms = if self.config.animation.enabled { self.config.animation.duration_ms } else { @@ -757,7 +821,7 @@ impl Render for NotchView { window.set_input_region(Some(&input_rects)); let focus_handle = self.focus_handle.clone(); - let state = self.state; + let route = self.route; let geometry_for_click = geometry; let tokens = self.tokens.clone(); let paint_tokens = tokens.clone(); @@ -766,6 +830,18 @@ impl Render for NotchView { let modules = self.config.modules.clone(); let snapshot = self.snapshot.clone(); let commands = self.commands.clone(); + let notch = self.config.clone(); + let module_registry = self.module_registry.clone(); + let module_context = ModuleContext { + module: ModuleId::Clock, + module_key: String::new(), + tokens: tokens.clone(), + notch, + clock, + query, + snapshot, + commands, + }; div() .id("shell-notch-root") @@ -782,17 +858,19 @@ impl Render for NotchView { if view.focus_manager.owns_modal_pointer() { if view.focus_manager.click_outside(inside) { - view.set_state(NotchState::Idle, window, cx); + view.set_route(NotchRoute::Idle, window, cx); } } else if inside { - view.set_state(NotchState::Launcher, window, cx); + view.set_route(NotchRoute::Module(ModuleId::Launcher), window, cx); } }), ) .on_key_down(cx.listener(|view, event: &KeyDownEvent, window, cx| { if event.keystroke.key == "escape" && view.focus_manager.escape() { - view.set_state(NotchState::Idle, window, cx); - } else if view.focus_manager.owns_keyboard() { + view.set_route(NotchRoute::Idle, window, cx); + } else if view.route == NotchRoute::Module(ModuleId::Launcher) + && view.focus_manager.owns_keyboard() + { let changed = if event.keystroke.key == "backspace" { view.query.pop().is_some() } else if let Some(character) = &event.keystroke.key_char { @@ -830,63 +908,30 @@ impl Render for NotchView { .top(px(notch_bounds.origin.y)) .w(px(notch_bounds.size.width)) .h(px(notch_bounds.size.height)) - .when(state == NotchState::Launcher, |element| { - element.child(launcher_content( - &query, - &tokens, - geometry.width, - geometry.height, - )) + .when(route == NotchRoute::Idle, |element| { + let module_elements = module_registry + .borrow_mut() + .render_configured(&modules, module_context.clone()); + element.child(idle_content(module_elements, &tokens)) }) - .when(state == NotchState::Idle, |element| { - element.child(idle_content( - &modules, &clock, &snapshot, &commands, &tokens, - )) - }), + .when_some( + match route { + NotchRoute::Module(id) => Some(id), + NotchRoute::Idle => None, + }, + |element, id| { + let module = module_registry + .borrow_mut() + .render_module(id, module_context.clone()) + .unwrap_or_else(|| div().into_any_element()); + element.child(module) + }, + ), ) } } -const LAUNCHER_ITEMS: &[(&str, &str, &str)] = &[ - ( - "◉", - "About Xfce", - "Information about the Xfce Desktop Environment", - ), - ( - "▣", - "Advanced Network Configuration", - "Manage and change network connection settings", - ), - ("△", "Alacritty", "Terminal"), - ( - "◌", - "AsusCtlTray", - "A tray icon to switch asusctl profiles on the fly", - ), - ( - "✣", - "auto-cpufreq", - "Automatic CPU frequency and power optimizer", - ), - ( - "◈", - "Avahi SSH Server Browser", - "Browse for Zeroconf-enabled SSH Servers", - ), -]; - -fn idle_content( - modules: &[String], - clock: &SharedString, - snapshot: &CompositorSnapshot, - commands: &mpsc::Sender, - tokens: &DesignTokens, -) -> impl IntoElement { - let module_elements = modules - .iter() - .filter_map(|module| module_element(module, clock, snapshot, commands, tokens)); - +fn idle_content(module_elements: Vec, tokens: &DesignTokens) -> impl IntoElement { div() .w_full() .h_full() @@ -899,55 +944,6 @@ fn idle_content( .children(module_elements) } -fn module_element( - module: &str, - clock: &SharedString, - snapshot: &CompositorSnapshot, - commands: &mpsc::Sender, - tokens: &DesignTokens, -) -> Option { - let element = div() - .flex() - .items_center() - .gap(px(4.0)) - .text_color(rgb(tokens.colors.foreground)); - - match module { - "clock" => Some(element.child(clock.clone())), - "network" => Some( - element.child( - div() - .text_size(px(tokens.typography.label_size as f32 - 2.0)) - .child("▮▮▮"), - ), - ), - "audio" => Some(element.child("◖")), - "battery" => Some(element.child("▰")), - "media" => Some(element.child("▶")), - "workspaces" => { - let workspace = snapshot.focused_workspace?; - let sender = commands.clone(); - Some( - element - .child(format!("WS {workspace}")) - .on_mouse_down(gpui::MouseButton::Left, move |_event, _window, _cx| { - if let Err(error) = sender.send(ShellCommand::FocusWorkspace(workspace)) { - tracing::warn!(%error, ?workspace, "could not enqueue workspace focus command"); - } - }), - ) - } - _ => None, - } -} - -fn is_known_module(module: &str) -> bool { - matches!( - module, - "clock" | "network" | "audio" | "battery" | "media" | "workspaces" - ) -} - fn focused_output_size(snapshot: &CompositorSnapshot) -> Option<(f32, f32)> { let output = snapshot .focused_output @@ -959,92 +955,6 @@ fn focused_output_size(snapshot: &CompositorSnapshot) -> Option<(f32, f32)> { .then_some((width, height)) } -fn launcher_content( - query: &str, - tokens: &DesignTokens, - width: f32, - height: f32, -) -> impl IntoElement { - let query_lower = query.to_lowercase(); - let rows = LAUNCHER_ITEMS - .iter() - .filter(|(_, name, description)| { - query_lower.is_empty() - || name.to_lowercase().contains(&query_lower) - || description.to_lowercase().contains(&query_lower) - }) - .map(|(icon, name, description)| { - div() - .w_full() - .h(px(44.0)) - .px(px(tokens.spacing.sm as f32)) - .rounded(px(tokens.radius.sm as f32)) - .flex() - .items_center() - .gap(px(tokens.spacing.sm as f32)) - .bg(rgba(0x242424e8)) - .text_color(rgb(tokens.colors.foreground)) - .child( - div() - .w(px(28.0)) - .h(px(28.0)) - .rounded(px(tokens.radius.sm as f32)) - .flex() - .items_center() - .justify_center() - .bg(rgba(0x3b3b3bf0)) - .text_size(px(tokens.typography.title_size as f32 - 2.0)) - .child(*icon), - ) - .child( - div() - .flex() - .flex_col() - .gap(px(1.0)) - .child( - div() - .text_size(px(tokens.typography.body_size as f32)) - .font_weight(FontWeight::BOLD) - .child(*name), - ) - .child( - div() - .text_size(px(tokens.typography.label_size as f32 - 1.0)) - .text_color(rgba(0xaaa6a6e6)) - .child(*description), - ), - ) - }); - - div() - .w(px(width)) - .h(px(height)) - .p(px(tokens.spacing.md as f32)) - .flex() - .flex_col() - .gap(px(tokens.spacing.sm as f32)) - .text_color(rgb(tokens.colors.foreground)) - .child( - div() - .w_full() - .h(px(40.0)) - .px(px(tokens.spacing.sm as f32)) - .flex() - .items_center() - .gap(px(tokens.spacing.sm as f32)) - .border_b(px(1.0)) - .border_color(rgba(0x8b8b8b66)) - .text_size(px(tokens.typography.body_size as f32)) - .child("⌕") - .child(if query.is_empty() { - "Search...".to_string() - } else { - query.to_owned() - }), - ) - .child(div().flex().flex_col().gap(px(2.0)).children(rows)) -} - fn build_notch_path(geometry: NotchGeometry, origin: gpui::Point) -> Option> { let width = px(geometry.width); let height = px(geometry.height); diff --git a/crates/shell-ui-gpui/src/module_host/context.rs b/crates/shell-ui-gpui/src/module_host/context.rs new file mode 100644 index 0000000..c7ac8a9 --- /dev/null +++ b/crates/shell-ui-gpui/src/module_host/context.rs @@ -0,0 +1,24 @@ +use std::sync::mpsc; + +use gpui::SharedString; +use shell_core::{CompositorSnapshot, NotchConfig, ShellCommand}; +use shell_theme::DesignTokens; + +use super::ModuleId; + +/// Renderer/application state made available to a module during one render. +/// +/// The context deliberately contains domain values and an application command +/// sender only. It does not expose a Wayland surface, compositor socket, or +/// filesystem handle to feature modules. +#[derive(Clone, Debug)] +pub struct ModuleContext { + pub module: ModuleId, + pub module_key: String, + pub tokens: DesignTokens, + pub notch: NotchConfig, + pub clock: SharedString, + pub query: String, + pub snapshot: CompositorSnapshot, + pub commands: mpsc::Sender, +} diff --git a/crates/shell-ui-gpui/src/module_host/mod.rs b/crates/shell-ui-gpui/src/module_host/mod.rs new file mode 100644 index 0000000..fdd56bc --- /dev/null +++ b/crates/shell-ui-gpui/src/module_host/mod.rs @@ -0,0 +1,9 @@ +//! Internal Rust contract between the Notch host and statically linked modules. + +mod context; +mod module; +mod registry; + +pub use context::ModuleContext; +pub use module::{ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule, NotchRoute}; +pub use registry::{ModuleRegistry, ModuleRegistryError}; diff --git a/crates/shell-ui-gpui/src/module_host/module.rs b/crates/shell-ui-gpui/src/module_host/module.rs new file mode 100644 index 0000000..b5baa92 --- /dev/null +++ b/crates/shell-ui-gpui/src/module_host/module.rs @@ -0,0 +1,114 @@ +use std::fmt; + +use gpui::AnyElement; +use shell_core::NotchConfig; + +/// Stable identity for the initial statically linked Luna modules. +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +pub enum ModuleId { + Launcher, + Calendar, + Player, + Theme, + Resources, + Clock, + Settings, +} + +impl ModuleId { + pub const ALL: [Self; 7] = [ + Self::Launcher, + Self::Calendar, + Self::Player, + Self::Theme, + Self::Resources, + Self::Clock, + Self::Settings, + ]; + + pub const fn as_str(self) -> &'static str { + match self { + Self::Launcher => "launcher", + Self::Calendar => "calendar", + Self::Player => "player", + Self::Theme => "theme", + Self::Resources => "resources", + Self::Clock => "clock", + Self::Settings => "settings", + } + } + + pub fn parse(value: &str) -> Option { + match value { + "launcher" => Some(Self::Launcher), + "calendar" => Some(Self::Calendar), + "player" => Some(Self::Player), + "theme" => Some(Self::Theme), + "resources" => Some(Self::Resources), + "clock" => Some(Self::Clock), + "settings" => Some(Self::Settings), + _ => None, + } + } +} + +impl fmt::Display for ModuleId { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + formatter.write_str(self.as_str()) + } +} + +/// Route owned by the Notch host. Module activation is not encoded as a +/// feature-specific enum branch in the host renderer. +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] +pub enum NotchRoute { + #[default] + Idle, + Module(ModuleId), +} + +/// Metadata exposed to the host without exposing a concrete module type. +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct ModuleMetadata { + pub id: ModuleId, + pub title: &'static str, + pub aliases: &'static [&'static str], +} + +/// Preferred content dimensions. The Notch owns the layer-shell surface and +/// uses this value only to calculate its own target geometry. +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct ModuleSize { + pub width: f32, + pub height: f32, +} + +impl ModuleSize { + pub const fn new(width: f32, height: f32) -> Self { + Self { width, height } + } + + pub fn from_config(config: &NotchConfig, expanded: bool) -> Self { + if expanded { + Self::new(config.width as f32, config.expanded_height as f32) + } else { + Self::new( + config.collapsed_width as f32, + config.collapsed_height as f32, + ) + } + } +} + +/// Type-erased GPUI element returned by a module render call. +pub type ModuleView = AnyElement; + +/// Internal module contract. Implementations own feature state and content; +/// the Notch remains responsible for routing, focus, geometry, and animation. +pub trait NotchModule: 'static { + fn metadata(&self) -> ModuleMetadata; + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize; + + fn render(&mut self, context: crate::ModuleContext) -> ModuleView; +} diff --git a/crates/shell-ui-gpui/src/module_host/registry.rs b/crates/shell-ui-gpui/src/module_host/registry.rs new file mode 100644 index 0000000..b5e7b10 --- /dev/null +++ b/crates/shell-ui-gpui/src/module_host/registry.rs @@ -0,0 +1,188 @@ +use std::{collections::HashMap, fmt}; + +use shell_core::NotchConfig; + +use super::{ModuleContext, ModuleId, ModuleMetadata, ModuleSize, ModuleView, NotchModule}; + +/// Registration and activation errors are kept explicit so composition fails +/// before the GPUI runtime starts when a module is accidentally duplicated. +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ModuleRegistryError { + Duplicate(ModuleId), + Unknown(ModuleId), +} + +impl fmt::Display for ModuleRegistryError { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Duplicate(id) => write!(formatter, "module '{id}' is already registered"), + Self::Unknown(id) => write!(formatter, "module '{id}' is not registered"), + } + } +} + +impl std::error::Error for ModuleRegistryError {} + +/// Host-owned registry for statically linked module implementations. +pub struct ModuleRegistry { + modules: HashMap>, + order: Vec, + active: Option, +} + +impl Default for ModuleRegistry { + fn default() -> Self { + Self::new() + } +} + +impl ModuleRegistry { + pub fn new() -> Self { + Self { + modules: HashMap::new(), + order: Vec::new(), + active: None, + } + } + + pub fn register(&mut self, module: M) -> Result<(), ModuleRegistryError> + where + M: NotchModule, + { + self.register_boxed(Box::new(module)) + } + + pub fn register_boxed( + &mut self, + module: Box, + ) -> Result<(), ModuleRegistryError> { + let id = module.metadata().id; + if self.modules.contains_key(&id) { + return Err(ModuleRegistryError::Duplicate(id)); + } + self.order.push(id); + self.modules.insert(id, module); + Ok(()) + } + + pub fn lookup(&self, id: ModuleId) -> Option<&dyn NotchModule> { + self.modules.get(&id).map(Box::as_ref) + } + + pub fn lookup_mut(&mut self, id: ModuleId) -> Option<&mut dyn NotchModule> { + self.modules.get_mut(&id).map(Box::as_mut) + } + + pub fn activate(&mut self, id: ModuleId) -> Result<(), ModuleRegistryError> { + if !self.modules.contains_key(&id) { + return Err(ModuleRegistryError::Unknown(id)); + } + self.active = Some(id); + Ok(()) + } + + pub fn deactivate(&mut self) { + self.active = None; + } + + pub fn active(&self) -> Option { + self.active + } + + pub fn metadata(&self) -> Vec { + self.order + .iter() + .filter_map(|id| self.modules.get(id).map(|module| module.metadata())) + .collect() + } + + pub fn resolve_key(&self, key: &str) -> Option { + self.order.iter().copied().find(|id| { + let metadata = self + .modules + .get(id) + .expect("module order is consistent") + .metadata(); + metadata.id.as_str() == key || metadata.aliases.contains(&key) + }) + } + + pub fn preferred_size(&self, id: ModuleId, config: &NotchConfig) -> Option { + self.lookup(id).map(|module| module.preferred_size(config)) + } + + pub fn render_key(&mut self, key: &str, mut context: ModuleContext) -> Option { + let id = self.resolve_key(key)?; + context.module = id; + context.module_key = key.to_owned(); + self.lookup_mut(id).map(|module| module.render(context)) + } + + pub fn render_module( + &mut self, + id: ModuleId, + mut context: ModuleContext, + ) -> Option { + context.module = id; + context.module_key = id.as_str().to_owned(); + self.lookup_mut(id).map(|module| module.render(context)) + } + + pub fn render_configured( + &mut self, + keys: &[String], + context: ModuleContext, + ) -> Vec { + keys.iter() + .filter_map(|key| self.render_key(key, context.clone())) + .collect() + } +} + +#[cfg(test)] +mod tests { + use gpui::{IntoElement, div}; + use shell_core::NotchConfig; + + use super::*; + + struct TestModule; + + impl NotchModule for TestModule { + fn metadata(&self) -> ModuleMetadata { + ModuleMetadata { + id: ModuleId::Clock, + title: "Clock", + aliases: &[], + } + } + + fn preferred_size(&self, config: &NotchConfig) -> ModuleSize { + ModuleSize::from_config(config, false) + } + + fn render(&mut self, _context: ModuleContext) -> ModuleView { + div().into_any_element() + } + } + + #[test] + fn registration_activation_and_lookup_are_host_owned() { + let mut registry = ModuleRegistry::new(); + registry.register(TestModule).expect("first registration"); + assert!(registry.lookup(ModuleId::Clock).is_some()); + registry.activate(ModuleId::Clock).expect("known module"); + assert_eq!(registry.active(), Some(ModuleId::Clock)); + assert_eq!(registry.metadata()[0].title, "Clock"); + } + + #[test] + fn duplicate_registration_is_rejected() { + let mut registry = ModuleRegistry::new(); + registry.register(TestModule).expect("first registration"); + assert_eq!( + registry.register(TestModule), + Err(ModuleRegistryError::Duplicate(ModuleId::Clock)) + ); + } +} diff --git a/crates/shell-ui-gpui/src/primitives.rs b/crates/shell-ui-gpui/src/primitives.rs new file mode 100644 index 0000000..39a982a --- /dev/null +++ b/crates/shell-ui-gpui/src/primitives.rs @@ -0,0 +1,16 @@ +//! Small GPUI primitives shared by module crates. + +use gpui::{AnyElement, SharedString, div, prelude::*, px, rgb}; +use shell_theme::DesignTokens; + +/// Common compact module label used by modules that do not need a custom +/// feature surface yet. +pub fn module_label(label: impl Into, tokens: &DesignTokens) -> AnyElement { + div() + .flex() + .items_center() + .text_color(rgb(tokens.colors.foreground)) + .text_size(px(tokens.typography.label_size as f32)) + .child(label.into()) + .into_any_element() +}