diff --git a/Cargo.lock b/Cargo.lock index 3d3dcf3..fdac7ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -220,9 +220,9 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e21900ac91937e4d9a51391f3569cd92fc38caea1a2a671d56b39797f3ece61f" +checksum = "5df42e54d7015b7a00d2db9f5cb9975bc4b0cd46627e666c94c3534207503e71" dependencies = [ "enumflags2", "futures-channel", @@ -1200,7 +1200,7 @@ dependencies = [ [[package]] name = "collections" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "indexmap", "rustc-hash 2.1.1", @@ -1316,9 +1316,12 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.4.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] [[package]] name = "coop" @@ -1633,9 +1636,18 @@ checksum = "807800ff3288b621186fe0a8f3392c4652068257302709c24efd918c3dffcdc2" [[package]] name = "derive_more" -version = "0.99.20" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case", "proc-macro2", @@ -1647,7 +1659,7 @@ dependencies = [ [[package]] name = "derive_refineable" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "proc-macro2", "quote", @@ -2611,7 +2623,7 @@ dependencies = [ [[package]] name = "gpui" version = "0.2.2" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "async-channel 2.5.0", @@ -2690,7 +2702,7 @@ dependencies = [ [[package]] name = "gpui_linux" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "as-raw-xcb-connection", @@ -2738,7 +2750,7 @@ dependencies = [ [[package]] name = "gpui_macos" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "async-task", @@ -2780,7 +2792,7 @@ dependencies = [ [[package]] name = "gpui_macros" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -2791,7 +2803,7 @@ dependencies = [ [[package]] name = "gpui_platform" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "console_error_panic_hook", "gpui", @@ -2804,7 +2816,7 @@ dependencies = [ [[package]] name = "gpui_tokio" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "gpui", @@ -2815,7 +2827,7 @@ dependencies = [ [[package]] name = "gpui_util" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "log", @@ -2824,7 +2836,7 @@ dependencies = [ [[package]] name = "gpui_web" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "console_error_panic_hook", @@ -2848,7 +2860,7 @@ dependencies = [ [[package]] name = "gpui_wgpu" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "bytemuck", @@ -2876,7 +2888,7 @@ dependencies = [ [[package]] name = "gpui_windows" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "collections", @@ -2937,9 +2949,9 @@ dependencies = [ [[package]] name = "harfrust" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9f40651a03bc0f7316bd75267ff5767e93017ef3cfffe76c6aa7252cc5a31c" +checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ "bitflags 2.11.0", "bytemuck", @@ -3119,7 +3131,7 @@ dependencies = [ [[package]] name = "http_client" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "async-compression", @@ -3144,7 +3156,7 @@ dependencies = [ [[package]] name = "http_client_tls" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "rustls", "rustls-platform-verifier", @@ -3924,7 +3936,7 @@ dependencies = [ [[package]] name = "media" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "bindgen", @@ -4065,7 +4077,7 @@ dependencies = [ [[package]] name = "naga" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "arrayvec", "bit-set", @@ -4692,7 +4704,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "perf" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "collections", "serde", @@ -4962,11 +4974,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit 0.25.4+spec-1.1.0", ] [[package]] @@ -5089,9 +5101,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.38.4" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" dependencies = [ "memchr", ] @@ -5401,7 +5413,7 @@ dependencies = [ [[package]] name = "refineable" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "derive_refineable", ] @@ -5500,7 +5512,7 @@ dependencies = [ [[package]] name = "reqwest_client" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "bytes", @@ -5555,7 +5567,7 @@ dependencies = [ [[package]] name = "rope" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "arrayvec", "log", @@ -5817,7 +5829,7 @@ dependencies = [ [[package]] name = "scheduler" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "async-task", "backtrace", @@ -6411,7 +6423,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sum_tree" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "arrayvec", "log", @@ -6960,6 +6972,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_datetime" +version = "1.0.0+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -6976,12 +6997,12 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" dependencies = [ "indexmap", - "toml_datetime 0.7.5+spec-1.1.0", + "toml_datetime 1.0.0+spec-1.1.0", "toml_parser", "winnow", ] @@ -7162,13 +7183,13 @@ checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uds_windows" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +checksum = "51b70b87d15e91f553711b40df3048faf27a7a04e01e0ddc0cf9309f0af7c2ca" dependencies = [ "memoffset", "tempfile", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -7358,7 +7379,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "util" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "async-fs", @@ -7397,7 +7418,7 @@ dependencies = [ [[package]] name = "util_macros" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "perf", "quote", @@ -7406,9 +7427,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -7671,9 +7692,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.12" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" +checksum = "aa75f400b7f719bcd68b3f47cd939ba654cedeef690f486db71331eec4c6a406" dependencies = [ "cc", "downcast-rs", @@ -7685,9 +7706,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.12" +version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" +checksum = "ab51d9f7c071abeee76007e2b742499e535148035bb835f97aaed1338cf516c3" dependencies = [ "bitflags 2.11.0", "rustix 1.1.4", @@ -7697,9 +7718,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.12" +version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" +checksum = "4b3298683470fbdc6ca40151dfc48c8f2fd4c41a26e13042f801f85002384091" dependencies = [ "rustix 1.1.4", "wayland-client", @@ -7708,9 +7729,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.10" +version = "0.32.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" +checksum = "b23b5df31ceff1328f06ac607591d5ba360cf58f90c8fad4ac8d3a55a3c4aec7" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -7720,9 +7741,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" +checksum = "d392fc283a87774afc9beefcd6f931582bb97fe0e6ced0b306a62cb1d026527c" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -7733,9 +7754,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" +checksum = "78248e4cc0eff8163370ba5c158630dcae1f3497a586b826eca2ef5f348d6235" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -7746,20 +7767,20 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.8" +version = "0.31.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" +checksum = "c86287151a309799b821ca709b7345a048a2956af05957c89cb824ab919fa4e3" dependencies = [ "proc-macro2", - "quick-xml 0.38.4", + "quick-xml 0.39.2", "quote", ] [[package]] name = "wayland-sys" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" +checksum = "374f6b70e8e0d6bf9461a32988fd553b59ff630964924dad6e4a4eb6bd538d17" dependencies = [ "dlib", "log", @@ -7848,7 +7869,7 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "arrayvec", "bitflags 2.11.0", @@ -7877,7 +7898,7 @@ dependencies = [ [[package]] name = "wgpu-core" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "arrayvec", "bit-set", @@ -7908,7 +7929,7 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "wgpu-hal", ] @@ -7916,7 +7937,7 @@ dependencies = [ [[package]] name = "wgpu-core-deps-emscripten" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "wgpu-hal", ] @@ -7924,7 +7945,7 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "wgpu-hal", ] @@ -7932,7 +7953,7 @@ dependencies = [ [[package]] name = "wgpu-hal" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "android_system_properties", "arrayvec", @@ -7979,7 +8000,7 @@ dependencies = [ [[package]] name = "wgpu-types" version = "28.0.1" -source = "git+https://github.com/zed-industries/wgpu?rev=e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2#e0f83a6cedc5e0b97da1ebe2d638ad103672e0a2" +source = "git+https://github.com/zed-industries/wgpu?rev=9459e95113c5bd116b2cc2c87e8424b28059e17c#9459e95113c5bd116b2cc2c87e8424b28059e17c" dependencies = [ "bitflags 2.11.0", "bytemuck", @@ -8637,9 +8658,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] @@ -9193,7 +9214,7 @@ dependencies = [ [[package]] name = "zlog" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "anyhow", "chrono", @@ -9210,7 +9231,7 @@ checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "ztracing" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" dependencies = [ "tracing", "tracing-subscriber", @@ -9221,7 +9242,7 @@ dependencies = [ [[package]] name = "ztracing_macro" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#152d3eafcaf4655ac65e2a25e65cc5ee0545db3f" +source = "git+https://github.com/zed-industries/zed#a1d8c52a1be83379589438f5dc9665e1f8164dac" [[package]] name = "zune-core" diff --git a/Cargo.toml b/Cargo.toml index bf84d10..8319337 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ publish = false [workspace.dependencies] # GPUI gpui = { git = "https://github.com/zed-industries/zed" } -gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit", "x11", "wayland", "runtime_shaders"] } +gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit", "x11", "wayland"] } gpui_linux = { git = "https://github.com/zed-industries/zed" } gpui_windows = { git = "https://github.com/zed-industries/zed" } gpui_macos = { git = "https://github.com/zed-industries/zed" } diff --git a/assets/icons/input.svg b/assets/icons/input.svg new file mode 100644 index 0000000..86efa0e --- /dev/null +++ b/assets/icons/input.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/chat_ui/src/actions.rs b/crates/chat_ui/src/actions.rs index 915f212..fdb5fbb 100644 --- a/crates/chat_ui/src/actions.rs +++ b/crates/chat_ui/src/actions.rs @@ -7,21 +7,11 @@ use settings::SignerKind; #[action(namespace = chat, no_json)] pub enum Command { Insert(&'static str), - ChangeSubject(&'static str), + ChangeSubject(String), ChangeSigner(SignerKind), ToggleBackup, + Subject, + Copy(PublicKey), + Relays(PublicKey), + Njump(PublicKey), } - -#[derive(Action, Clone, PartialEq, Eq, Deserialize)] -#[action(namespace = chat, no_json)] -pub struct SeenOn(pub EventId); - -/// Define a open public key action -#[derive(Action, Clone, PartialEq, Eq, Deserialize, Debug)] -#[action(namespace = pubkey, no_json)] -pub struct OpenPublicKey(pub PublicKey); - -/// Define a copy inline public key action -#[derive(Action, Clone, PartialEq, Eq, Deserialize, Debug)] -#[action(namespace = pubkey, no_json)] -pub struct CopyPublicKey(pub PublicKey); diff --git a/crates/chat_ui/src/lib.rs b/crates/chat_ui/src/lib.rs index 2ffaf8a..eb0efd6 100644 --- a/crates/chat_ui/src/lib.rs +++ b/crates/chat_ui/src/lib.rs @@ -27,7 +27,7 @@ use ui::button::{Button, ButtonVariants}; use ui::dock_area::panel::{Panel, PanelEvent}; use ui::indicator::Indicator; use ui::input::{InputEvent, InputState, TextInput}; -use ui::menu::{ContextMenuExt, DropdownMenu}; +use ui::menu::DropdownMenu; use ui::notification::Notification; use ui::scroll::Scrollbar; use ui::{ @@ -72,9 +72,15 @@ pub struct ChatPanel { /// Mapping message (rumor event) ids to their reports reports_by_id: Entity>>, - /// Input state + /// Chat input state input: Entity, + /// Subject input state + subject_input: Entity, + + /// Subject bar visibility + subject_bar: Entity, + /// Sent message ids sent_ids: Arc>>, @@ -91,7 +97,7 @@ pub struct ChatPanel { tasks: Vec>>, /// Event subscriptions - subscriptions: SmallVec<[Subscription; 2]>, + subscriptions: SmallVec<[Subscription; 3]>, } impl ChatPanel { @@ -124,15 +130,34 @@ impl ChatPanel { .clean_on_escape() }); + // Define subject input state + let subject_input = cx.new(|cx| InputState::new(window, cx).placeholder("Nostr Meetup")); + let subject_bar = cx.new(|_cx| false); + // Define subscriptions - let subscriptions = - smallvec![ - cx.subscribe_in(&input, window, move |this, _input, event, window, cx| { + let mut subscriptions = smallvec![]; + + subscriptions.push( + // Subscribe the chat input event + cx.subscribe_in(&input, window, move |this, _input, event, window, cx| { + if let InputEvent::PressEnter { .. } = event { + this.send_text_message(window, cx); + }; + }), + ); + + subscriptions.push( + // Subscribe the subject input event + cx.subscribe_in( + &subject_input, + window, + move |this, _input, event, window, cx| { if let InputEvent::PressEnter { .. } = event { - this.send_text_message(window, cx); + this.change_subject(window, cx); }; - }) - ]; + }, + ), + ); // Define all functions that will run after the current cycle cx.defer_in(window, |this, window, cx| { @@ -149,6 +174,8 @@ impl ChatPanel { room, list_state, input, + subject_input, + subject_bar, replies_to, attachments, rendered_texts_by_id: BTreeMap::new(), @@ -254,23 +281,21 @@ impl ChatPanel { } fn subscribe_room_events(&mut self, window: &mut Window, cx: &mut Context) { - let Some(room) = self.room.upgrade() else { - return; - }; - - self.subscriptions.push( - // Subscribe to room events - cx.subscribe_in(&room, window, move |this, _room, event, window, cx| { - match event { - RoomEvent::Incoming(message) => { - this.insert_message(message, false, cx); - } - RoomEvent::Reload => { - this.get_messages(window, cx); - } - }; - }), - ); + if let Some(room) = self.room.upgrade() { + self.subscriptions.push( + // Subscribe to room events + cx.subscribe_in(&room, window, move |this, _room, event, window, cx| { + match event { + RoomEvent::Incoming(message) => { + this.insert_message(message, false, cx); + } + RoomEvent::Reload => { + this.get_messages(window, cx); + } + }; + }), + ); + } } /// Load all messages belonging to this room @@ -316,6 +341,16 @@ impl ChatPanel { content } + fn change_subject(&mut self, _window: &mut Window, cx: &mut Context) { + let subject = self.subject_input.read(cx).value(); + + self.room + .update(cx, |this, cx| { + this.set_subject(subject, cx); + }) + .ok(); + } + fn send_text_message(&mut self, window: &mut Window, cx: &mut Context) { // Get the message which includes all attachments let content = self.get_input_value(cx); @@ -505,10 +540,21 @@ impl ChatPanel { } } - fn copy_message(&self, id: &EventId, cx: &Context) { - if let Some(message) = self.message(id) { - cx.write_to_clipboard(ClipboardItem::new_string(message.content.to_string())); - } + fn copy_author(&self, public_key: &PublicKey, cx: &App) { + let content = public_key.to_bech32().unwrap(); + let item = ClipboardItem::new_string(content); + + cx.write_to_clipboard(item); + } + + fn copy_message(&self, id: &EventId, cx: &App) { + let Some(message) = self.message(id) else { + return; + }; + let content = message.content.to_string(); + let item = ClipboardItem::new_string(content); + + cx.write_to_clipboard(item); } fn reply_to(&mut self, id: &EventId, cx: &mut Context) { @@ -588,7 +634,7 @@ impl ChatPanel { }); } - fn profile(&self, public_key: &PublicKey, cx: &Context) -> Person { + fn profile(&self, public_key: &PublicKey, cx: &App) -> Person { let persons = PersonRegistry::global(cx); persons.read(cx).get(public_key, cx) } @@ -602,7 +648,7 @@ impl ChatPanel { if self .room .update(cx, |this, cx| { - this.set_subject(*subject, cx); + this.set_subject(subject, cx); }) .is_err() { @@ -631,9 +677,97 @@ impl ChatPanel { window.push_notification(Notification::error("Failed to toggle backup"), cx); } } + Command::Subject => { + self.open_subject(window, cx); + } + Command::Copy(public_key) => { + self.copy_author(public_key, cx); + } + Command::Relays(public_key) => { + self.open_relays(public_key, window, cx); + } + Command::Njump(public_key) => { + self.open_njump(public_key, cx); + } } } + fn open_subject(&mut self, window: &mut Window, cx: &mut Context) { + let subject_input = self.subject_input.clone(); + + window.open_modal(cx, move |this, _window, cx| { + let subject = subject_input.read(cx).value(); + + this.title("Change subject") + .show_close(true) + .confirm() + .child( + v_flex() + .gap_2() + .child( + v_flex() + .gap_1p5() + .child( + div() + .text_sm() + .text_color(cx.theme().text_muted) + .child(SharedString::from("Subject:")), + ) + .child(TextInput::new(&subject_input).small()), + ) + .child( + div() + .italic() + .text_xs() + .text_color(cx.theme().text_placeholder) + .child(SharedString::from( + "Subject will be updated when you send a new message.", + )), + ), + ) + .on_ok(move |_ev, window, cx| { + window + .dispatch_action(Box::new(Command::ChangeSubject(subject.to_string())), cx); + true + }) + }); + } + + fn open_relays(&mut self, public_key: &PublicKey, window: &mut Window, cx: &mut Context) { + let profile = self.profile(public_key, cx); + + window.open_modal(cx, move |this, _window, cx| { + let relays = profile.messaging_relays(); + + this.title("Messaging Relays") + .show_close(true) + .child(v_flex().gap_1().children({ + let mut items = vec![]; + + for url in relays.iter() { + items.push( + h_flex() + .h_7() + .px_2() + .gap_2() + .bg(cx.theme().elevated_surface_background) + .rounded(cx.theme().radius) + .text_sm() + .child(div().size_1p5().rounded_full().bg(gpui::green())) + .child(SharedString::from(url.to_string())), + ); + } + + items + })) + }); + } + + fn open_njump(&mut self, public_key: &PublicKey, cx: &mut Context) { + let content = format!("https://njump.me/{}", public_key.to_bech32().unwrap()); + cx.open_url(&content); + } + fn render_announcement(&self, ix: usize, cx: &Context) -> AnyElement { v_flex() .id(ix) @@ -758,18 +892,14 @@ impl ChatPanel { .flex() .gap_3() .when(!hide_avatar, |this| { - this.child( - div() - .id(SharedString::from(format!("{ix}-avatar"))) - .child(Avatar::new(author.avatar())) - .context_menu(move |this, _window, _cx| { - let view = Box::new(OpenPublicKey(public_key)); - let copy = Box::new(CopyPublicKey(public_key)); - - this.menu("View Profile", view) - .menu("Copy Public Key", copy) - }), - ) + this.child(Avatar::new(author.avatar()).dropdown_menu( + move |this, _window, _cx| { + this.menu("Copy Public Key", Box::new(Command::Copy(public_key))) + .menu("View Relays", Box::new(Command::Relays(public_key))) + .separator() + .menu("View on njump.me", Box::new(Command::Njump(public_key))) + }, + )) }) .child( v_flex() @@ -807,8 +937,17 @@ impl ChatPanel { }), ), ) - .child(self.render_border(cx)) - .child(self.render_actions(&id, cx)) + .child( + div() + .group_hover("", |this| this.bg(cx.theme().element_active)) + .absolute() + .left_0() + .top_0() + .w(px(2.)) + .h_full() + .bg(cx.theme().border_transparent), + ) + .child(self.render_actions(&id, &public_key, cx)) .on_mouse_down( MouseButton::Middle, cx.listener(move |this, _, _window, cx| { @@ -911,7 +1050,7 @@ impl ChatPanel { window.open_modal(cx, move |this, _window, cx| { this.show_close(true) .title(SharedString::from("Sent Reports")) - .child(v_flex().gap_4().pb_4().w_full().children({ + .child(v_flex().gap_4().w_full().children({ let mut items = Vec::with_capacity(reports.len()); for report in reports.iter() { @@ -1030,18 +1169,12 @@ impl ChatPanel { }) } - fn render_border(&self, cx: &Context) -> impl IntoElement { - div() - .group_hover("", |this| this.bg(cx.theme().element_active)) - .absolute() - .left_0() - .top_0() - .w(px(2.)) - .h_full() - .bg(cx.theme().border_transparent) - } - - fn render_actions(&self, id: &EventId, cx: &Context) -> impl IntoElement { + fn render_actions( + &self, + id: &EventId, + public_key: &PublicKey, + cx: &Context, + ) -> impl IntoElement { h_flex() .p_0p5() .gap_1() @@ -1082,13 +1215,22 @@ impl ChatPanel { ) .child(div().flex_shrink_0().h_4().w_px().bg(cx.theme().border)) .child( - Button::new("seen-on") + Button::new("advance") .icon(IconName::Ellipsis) .small() .ghost() .dropdown_menu({ - let id = id.to_owned(); - move |this, _window, _cx| this.menu("Seen on", Box::new(SeenOn(id))) + let public_key = *public_key; + let _id = *id; + move |this, _window, _cx| { + this.menu("Copy author", Box::new(Command::Copy(public_key))) + /* + .menu( + "Trace", + Box::new(Command::Trace(id)), + ) + */ + } }), ) .group_hover("", |this| this.visible()) @@ -1286,12 +1428,30 @@ impl Panel for ChatPanel { h_flex() .gap_1p5() - .child(Avatar::new(url).small()) + .child(Avatar::new(url).xsmall()) .child(label) .into_any_element() }) .unwrap_or(div().child("Unknown").into_any_element()) } + + fn toolbar_buttons(&self, _window: &Window, _cx: &App) -> Vec