From 28c39aae17c7e027e07b2198aa4c786f5ae64ea6 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 2 Jan 2024 11:44:51 -0800 Subject: [PATCH 01/74] Start work on read-only project access for channel guests Co-authored-by: Conrad Co-authored-by: Mikayla --- crates/call/src/room.rs | 2 +- crates/collab/src/db/queries/channels.rs | 52 +++++------ crates/collab/src/tests.rs | 1 + .../collab/src/tests/channel_guest_tests.rs | 88 +++++++++++++++++++ crates/collab/src/tests/integration_tests.rs | 24 ++--- .../random_project_collaboration_tests.rs | 4 +- .../src/tests/randomized_test_helpers.rs | 2 +- crates/gpui/src/element.rs | 5 +- crates/gpui/src/platform/test/platform.rs | 5 +- crates/gpui/src/platform/test/window.rs | 16 +++- crates/project/src/project.rs | 10 ++- crates/workspace/src/workspace.rs | 6 +- 12 files changed, 159 insertions(+), 56 deletions(-) create mode 100644 crates/collab/src/tests/channel_guest_tests.rs diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index 0dfdb50fc7201e1cfd9e03b68741d99b3b14bdc7..14d9a55ef03c92f13e1ecfb398963cf57db7710c 100644 --- a/crates/call/src/room.rs +++ b/crates/call/src/room.rs @@ -1099,7 +1099,7 @@ impl Room { this.update(&mut cx, |this, cx| { this.joined_projects.retain(|project| { if let Some(project) = project.upgrade() { - !project.read(cx).is_read_only() + !project.read(cx).is_disconnected() } else { false } diff --git a/crates/collab/src/db/queries/channels.rs b/crates/collab/src/db/queries/channels.rs index 780fb783bc84c9b0f741117122fc737689e98ab2..9a14aabfda3ba5d8449fea47397d92be5f217690 100644 --- a/crates/collab/src/db/queries/channels.rs +++ b/crates/collab/src/db/queries/channels.rs @@ -132,34 +132,34 @@ impl Database { debug_assert!( self.channel_role_for_user(&channel, user_id, &*tx).await? == role ); - } - } - - if channel.visibility == ChannelVisibility::Public { - role = Some(ChannelRole::Guest); - let channel_to_join = self - .public_ancestors_including_self(&channel, &*tx) - .await? - .first() - .cloned() - .unwrap_or(channel.clone()); - - channel_member::Entity::insert(channel_member::ActiveModel { - id: ActiveValue::NotSet, - channel_id: ActiveValue::Set(channel_to_join.id), - user_id: ActiveValue::Set(user_id), - accepted: ActiveValue::Set(true), - role: ActiveValue::Set(ChannelRole::Guest), - }) - .exec(&*tx) - .await?; + } else if channel.visibility == ChannelVisibility::Public { + role = Some(ChannelRole::Guest); + let channel_to_join = self + .public_ancestors_including_self(&channel, &*tx) + .await? + .first() + .cloned() + .unwrap_or(channel.clone()); + + channel_member::Entity::insert(channel_member::ActiveModel { + id: ActiveValue::NotSet, + channel_id: ActiveValue::Set(channel_to_join.id), + user_id: ActiveValue::Set(user_id), + accepted: ActiveValue::Set(true), + role: ActiveValue::Set(ChannelRole::Guest), + }) + .exec(&*tx) + .await?; - accept_invite_result = Some( - self.calculate_membership_updated(&channel_to_join, user_id, &*tx) - .await?, - ); + accept_invite_result = Some( + self.calculate_membership_updated(&channel_to_join, user_id, &*tx) + .await?, + ); - debug_assert!(self.channel_role_for_user(&channel, user_id, &*tx).await? == role); + debug_assert!( + self.channel_role_for_user(&channel, user_id, &*tx).await? == role + ); + } } if role.is_none() || role == Some(ChannelRole::Banned) { diff --git a/crates/collab/src/tests.rs b/crates/collab/src/tests.rs index 53d42505bdc3babe023c4a8feb4dbbf5c5e24ab6..aca9329d5ad87a477614803de5143b86f1fe169b 100644 --- a/crates/collab/src/tests.rs +++ b/crates/collab/src/tests.rs @@ -2,6 +2,7 @@ use call::Room; use gpui::{Model, TestAppContext}; mod channel_buffer_tests; +mod channel_guest_tests; mod channel_message_tests; mod channel_tests; mod editor_tests; diff --git a/crates/collab/src/tests/channel_guest_tests.rs b/crates/collab/src/tests/channel_guest_tests.rs new file mode 100644 index 0000000000000000000000000000000000000000..78dd57be026913b3299efe2e1c35a94a5ea798ad --- /dev/null +++ b/crates/collab/src/tests/channel_guest_tests.rs @@ -0,0 +1,88 @@ +use crate::tests::TestServer; +use call::ActiveCall; +use gpui::{BackgroundExecutor, TestAppContext, VisualTestContext}; +use rpc::proto; +use workspace::Workspace; + +#[gpui::test] +async fn test_channel_guests( + executor: BackgroundExecutor, + mut cx_a: &mut TestAppContext, + mut cx_b: &mut TestAppContext, +) { + let mut server = TestServer::start(executor.clone()).await; + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + + let channel_id = server + .make_channel("the-channel", None, (&client_a, cx_a), &mut []) + .await; + + client_a + .channel_store() + .update(cx_a, |channel_store, cx| { + channel_store.set_channel_visibility(channel_id, proto::ChannelVisibility::Public, cx) + }) + .await + .unwrap(); + + client_a + .fs() + .insert_tree( + "/a", + serde_json::json!({ + "a.txt": "a-contents", + }), + ) + .await; + + let active_call_a = cx_a.read(ActiveCall::global); + let active_call_b = cx_b.read(ActiveCall::global); + + // Client A shares a project in the channel + active_call_a + .update(cx_a, |call, cx| call.join_channel(channel_id, cx)) + .await + .unwrap(); + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + let worktree_a = project_a.read_with(cx_a, |project, _| project.worktrees().next().unwrap()); + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + cx_a.executor().run_until_parked(); + + // Client B joins channel A as a guest + cx_b.update(|cx| workspace::join_channel(channel_id, client_b.app_state.clone(), None, cx)) + .await + .unwrap(); + + // b should be following a in the shared project. + // B is a guest, + cx_a.executor().run_until_parked(); + + // todo!() the test window does not call activation handlers + // correctly yet, so this API does not work. + // let project_b = active_call_b.read_with(cx_b, |call, _| { + // call.location() + // .unwrap() + // .upgrade() + // .expect("should not be weak") + // }); + + let window_b = cx_b.update(|cx| cx.active_window().unwrap()); + let cx_b = &mut VisualTestContext::from_window(window_b, cx_b); + + let workspace_b = window_b + .downcast::() + .unwrap() + .root_view(cx_b) + .unwrap(); + let project_b = workspace_b.update(cx_b, |workspace, _| workspace.project().clone()); + + assert_eq!( + project_b.read_with(cx_b, |project, _| project.remote_id()), + Some(project_id), + ); + assert!(project_b.read_with(cx_b, |project, _| project.is_read_only())) +} diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs index 201ba07dbb319663cb2c6f1810c50faa87a077ab..e64fdbec832a07d1dc3753c059653f6ea954fb00 100644 --- a/crates/collab/src/tests/integration_tests.rs +++ b/crates/collab/src/tests/integration_tests.rs @@ -1380,7 +1380,7 @@ async fn test_unshare_project( .unwrap(); executor.run_until_parked(); - assert!(project_b.read_with(cx_b, |project, _| project.is_read_only())); + assert!(project_b.read_with(cx_b, |project, _| project.is_disconnected())); // Client C opens the project. let project_c = client_c.build_remote_project(project_id, cx_c).await; @@ -1393,7 +1393,7 @@ async fn test_unshare_project( assert!(worktree_a.read_with(cx_a, |tree, _| !tree.as_local().unwrap().is_shared())); - assert!(project_c.read_with(cx_c, |project, _| project.is_read_only())); + assert!(project_c.read_with(cx_c, |project, _| project.is_disconnected())); // Client C can open the project again after client A re-shares. let project_id = active_call_a @@ -1419,7 +1419,7 @@ async fn test_unshare_project( project_a.read_with(cx_a, |project, _| assert!(!project.is_shared())); project_c2.read_with(cx_c, |project, _| { - assert!(project.is_read_only()); + assert!(project.is_disconnected()); assert!(project.collaborators().is_empty()); }); } @@ -1551,7 +1551,7 @@ async fn test_project_reconnect( }); project_b1.read_with(cx_b, |project, _| { - assert!(!project.is_read_only()); + assert!(!project.is_disconnected()); assert_eq!(project.collaborators().len(), 1); }); @@ -1653,7 +1653,7 @@ async fn test_project_reconnect( }); project_b1.read_with(cx_b, |project, cx| { - assert!(!project.is_read_only()); + assert!(!project.is_disconnected()); assert_eq!( project .worktree_for_id(worktree1_id, cx) @@ -1687,9 +1687,9 @@ async fn test_project_reconnect( ); }); - project_b2.read_with(cx_b, |project, _| assert!(project.is_read_only())); + project_b2.read_with(cx_b, |project, _| assert!(project.is_disconnected())); - project_b3.read_with(cx_b, |project, _| assert!(!project.is_read_only())); + project_b3.read_with(cx_b, |project, _| assert!(!project.is_disconnected())); buffer_a1.read_with(cx_a, |buffer, _| assert_eq!(buffer.text(), "WaZ")); @@ -1746,7 +1746,7 @@ async fn test_project_reconnect( executor.run_until_parked(); project_b1.read_with(cx_b, |project, cx| { - assert!(!project.is_read_only()); + assert!(!project.is_disconnected()); assert_eq!( project .worktree_for_id(worktree1_id, cx) @@ -1780,7 +1780,7 @@ async fn test_project_reconnect( ); }); - project_b3.read_with(cx_b, |project, _| assert!(project.is_read_only())); + project_b3.read_with(cx_b, |project, _| assert!(project.is_disconnected())); buffer_a1.read_with(cx_a, |buffer, _| assert_eq!(buffer.text(), "WXaYZ")); @@ -3535,7 +3535,7 @@ async fn test_leaving_project( }); project_b2.read_with(cx_b, |project, _| { - assert!(project.is_read_only()); + assert!(project.is_disconnected()); }); project_c.read_with(cx_c, |project, _| { @@ -3568,11 +3568,11 @@ async fn test_leaving_project( }); project_b2.read_with(cx_b, |project, _| { - assert!(project.is_read_only()); + assert!(project.is_disconnected()); }); project_c.read_with(cx_c, |project, _| { - assert!(project.is_read_only()); + assert!(project.is_disconnected()); }); } diff --git a/crates/collab/src/tests/random_project_collaboration_tests.rs b/crates/collab/src/tests/random_project_collaboration_tests.rs index f4194b98e8adbf41742a5aa279d766cf09c2477d..53d47eb6b5b44e9a5e34518bcc305c9e27ed399f 100644 --- a/crates/collab/src/tests/random_project_collaboration_tests.rs +++ b/crates/collab/src/tests/random_project_collaboration_tests.rs @@ -1149,7 +1149,7 @@ impl RandomizedTest for ProjectCollaborationTest { Some((project, cx)) }); - if !guest_project.is_read_only() { + if !guest_project.is_disconnected() { if let Some((host_project, host_cx)) = host_project { let host_worktree_snapshots = host_project.read_with(host_cx, |host_project, cx| { @@ -1236,7 +1236,7 @@ impl RandomizedTest for ProjectCollaborationTest { let buffers = client.buffers().clone(); for (guest_project, guest_buffers) in &buffers { let project_id = if guest_project.read_with(client_cx, |project, _| { - project.is_local() || project.is_read_only() + project.is_local() || project.is_disconnected() }) { continue; } else { diff --git a/crates/collab/src/tests/randomized_test_helpers.rs b/crates/collab/src/tests/randomized_test_helpers.rs index 91bd9cf6f698b3a8c6d436b99e35eaefc771e89e..69bec62460bbd2469fe497ce9418442b0f58ba92 100644 --- a/crates/collab/src/tests/randomized_test_helpers.rs +++ b/crates/collab/src/tests/randomized_test_helpers.rs @@ -518,7 +518,7 @@ impl TestPlan { for project in client.remote_projects().iter() { project.read_with(&client_cx, |project, _| { assert!( - project.is_read_only(), + project.is_disconnected(), "project {:?} should be read only", project.remote_id() ) diff --git a/crates/gpui/src/element.rs b/crates/gpui/src/element.rs index 30456f14a7ffeb35df54442e15304dcc68ed1958..987b91b791a93b9fb72672a4608c1b6665fc20e2 100644 --- a/crates/gpui/src/element.rs +++ b/crates/gpui/src/element.rs @@ -44,8 +44,9 @@ pub trait IntoElement: Sized { } /// Convert into an element, then draw in the current window at the given origin. - /// The provided available space is provided to the layout engine to determine the size of the root element. - /// Once the element is drawn, its associated element staet is yielded to the given callback. + /// The available space argument is provided to the layout engine to determine the size of the + // root element. Once the element is drawn, its associated element state is yielded to the + // given callback. fn draw_and_update_state( self, origin: Point, diff --git a/crates/gpui/src/platform/test/platform.rs b/crates/gpui/src/platform/test/platform.rs index cc683cacb68f0e471ef9b1fa5596581d81d3d0f3..142498ce4be88f05595d52109c12238eb8ef021f 100644 --- a/crates/gpui/src/platform/test/platform.rs +++ b/crates/gpui/src/platform/test/platform.rs @@ -19,7 +19,7 @@ pub struct TestPlatform { background_executor: BackgroundExecutor, foreground_executor: ForegroundExecutor, - active_window: Arc>>, + pub(crate) active_window: Arc>>, active_display: Rc, active_cursor: Mutex, current_clipboard_item: Mutex>, @@ -106,7 +106,7 @@ impl Platform for TestPlatform { } fn activate(&self, _ignoring_other_apps: bool) { - unimplemented!() + // } fn hide(&self) { @@ -142,6 +142,7 @@ impl Platform for TestPlatform { *self.active_window.lock() = Some(handle); Box::new(TestWindow::new( options, + handle, self.weak.clone(), self.active_display.clone(), )) diff --git a/crates/gpui/src/platform/test/window.rs b/crates/gpui/src/platform/test/window.rs index 9df513d1f7ea46b0dffb452d27dbd82f5aba2176..dab53e46d9f10593104a08a0ea0d9517e7d2b911 100644 --- a/crates/gpui/src/platform/test/window.rs +++ b/crates/gpui/src/platform/test/window.rs @@ -1,7 +1,7 @@ use crate::{ - px, AtlasKey, AtlasTextureId, AtlasTile, Pixels, PlatformAtlas, PlatformDisplay, - PlatformInputHandler, PlatformWindow, Point, Size, TestPlatform, TileId, WindowAppearance, - WindowBounds, WindowOptions, + px, AnyWindowHandle, AtlasKey, AtlasTextureId, AtlasTile, Pixels, PlatformAtlas, + PlatformDisplay, PlatformInputHandler, PlatformWindow, Point, Size, TestPlatform, TileId, + WindowAppearance, WindowBounds, WindowOptions, }; use collections::HashMap; use parking_lot::Mutex; @@ -20,6 +20,7 @@ pub(crate) struct TestWindowHandlers { pub struct TestWindow { pub(crate) bounds: WindowBounds, + pub(crate) handle: AnyWindowHandle, display: Rc, pub(crate) title: Option, pub(crate) edited: bool, @@ -32,6 +33,7 @@ pub struct TestWindow { impl TestWindow { pub fn new( options: WindowOptions, + handle: AnyWindowHandle, platform: Weak, display: Rc, ) -> Self { @@ -39,6 +41,7 @@ impl TestWindow { bounds: options.bounds, display, platform, + handle, input_handler: None, sprite_atlas: Arc::new(TestAtlas::new()), handlers: Default::default(), @@ -107,7 +110,12 @@ impl PlatformWindow for TestWindow { } fn activate(&self) { - unimplemented!() + *self + .platform + .upgrade() + .expect("platform dropped") + .active_window + .lock() = Some(self.handle); } fn set_title(&mut self, title: &str) { diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index b9c73ae67785d48d7912414113329bb4a6d2e0da..a58a7b804f1120c07c4cabc5c8a5b7e3126acbf9 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -1659,7 +1659,7 @@ impl Project { cx.emit(Event::Closed); } - pub fn is_read_only(&self) -> bool { + pub fn is_disconnected(&self) -> bool { match &self.client_state { Some(ProjectClientState::Remote { sharing_has_stopped, @@ -1669,6 +1669,10 @@ impl Project { } } + pub fn is_read_only(&self) -> bool { + self.is_disconnected() + } + pub fn is_local(&self) -> bool { match &self.client_state { Some(ProjectClientState::Remote { .. }) => false, @@ -6015,7 +6019,7 @@ impl Project { this.upgrade().context("project dropped")?; let response = rpc.request(message).await?; let this = this.upgrade().context("project dropped")?; - if this.update(&mut cx, |this, _| this.is_read_only())? { + if this.update(&mut cx, |this, _| this.is_disconnected())? { Err(anyhow!("disconnected before completing request")) } else { request @@ -7942,7 +7946,7 @@ impl Project { if let Some(buffer) = buffer { break buffer; - } else if this.update(&mut cx, |this, _| this.is_read_only())? { + } else if this.update(&mut cx, |this, _| this.is_disconnected())? { return Err(anyhow!("disconnected before buffer {} could be opened", id)); } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 76715f69bef9ffb5e7f4ced25d00372df897b7e5..7c2ca8a1f79c857270a30c7f98f3ada4507d32e8 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -1184,7 +1184,7 @@ impl Workspace { mut save_intent: SaveIntent, cx: &mut ViewContext, ) -> Task> { - if self.project.read(cx).is_read_only() { + if self.project.read(cx).is_disconnected() { return Task::ready(Ok(true)); } let dirty_items = self @@ -2508,7 +2508,7 @@ impl Workspace { } fn update_window_edited(&mut self, cx: &mut ViewContext) { - let is_edited = !self.project.read(cx).is_read_only() + let is_edited = !self.project.read(cx).is_disconnected() && self .items(cx) .any(|item| item.has_conflict(cx) || item.is_dirty(cx)); @@ -3632,7 +3632,7 @@ impl Render for Workspace { })), ) .child(self.status_bar.clone()) - .children(if self.project.read(cx).is_read_only() { + .children(if self.project.read(cx).is_disconnected() { Some(DisconnectedOverlay) } else { None From a801c85a1ba6f54fb077e936f4cb4fea063339a5 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 2 Jan 2024 15:51:36 -0700 Subject: [PATCH 02/74] TEMP --- crates/rpc/proto/zed.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index 5ae127e2775af712895353d76e9a5c474f02b509..21fe81ca1b16cf32061ffa6b5e88593bf79fc25d 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -368,7 +368,7 @@ message JoinProject { } message JoinProjectResponse { - uint32 replica_id = 1; + optional uint32 replica_id = 1; repeated WorktreeMetadata worktrees = 2; repeated Collaborator collaborators = 3; repeated LanguageServer language_servers = 4; From 88ed5f7290c19c10c18143e988289ac262307a94 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 2 Jan 2024 20:14:30 -0700 Subject: [PATCH 03/74] Plumbing to pass `role` for room participants --- crates/collab/migrations.sqlite/20221109000000_test_schema.sql | 3 ++- .../20240103025509_add_role_to_room_participants.sql | 1 + crates/collab/src/db/queries/rooms.rs | 2 ++ crates/collab/src/db/tables/room_participant.rs | 3 ++- crates/collab/src/rpc.rs | 2 +- crates/project/src/project.rs | 3 ++- crates/rpc/proto/zed.proto | 1 + 7 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 crates/collab/migrations/20240103025509_add_role_to_room_participants.sql diff --git a/crates/collab/migrations.sqlite/20221109000000_test_schema.sql b/crates/collab/migrations.sqlite/20221109000000_test_schema.sql index 775a4c1bbe23be4ca05043d06567889a3a8c87cb..9bbbf88dac9879bf12dee3c99c35c8b18ca8d527 100644 --- a/crates/collab/migrations.sqlite/20221109000000_test_schema.sql +++ b/crates/collab/migrations.sqlite/20221109000000_test_schema.sql @@ -161,7 +161,8 @@ CREATE TABLE "room_participants" ( "calling_user_id" INTEGER NOT NULL REFERENCES users (id), "calling_connection_id" INTEGER NOT NULL, "calling_connection_server_id" INTEGER REFERENCES servers (id) ON DELETE SET NULL, - "participant_index" INTEGER + "participant_index" INTEGER, + "role" TEXT ); CREATE UNIQUE INDEX "index_room_participants_on_user_id" ON "room_participants" ("user_id"); CREATE INDEX "index_room_participants_on_room_id" ON "room_participants" ("room_id"); diff --git a/crates/collab/migrations/20240103025509_add_role_to_room_participants.sql b/crates/collab/migrations/20240103025509_add_role_to_room_participants.sql new file mode 100644 index 0000000000000000000000000000000000000000..2748e00ebaa18ec375111c648a7accafe90c5dbb --- /dev/null +++ b/crates/collab/migrations/20240103025509_add_role_to_room_participants.sql @@ -0,0 +1 @@ +ALTER TABLE room_participants ADD COLUMN role TEXT; diff --git a/crates/collab/src/db/queries/rooms.rs b/crates/collab/src/db/queries/rooms.rs index 40fdf5d58f184a0444f0c82938ab8fcd2a7bbb69..12d8940d7c3179e0f7c19881dbfea970a64b910f 100644 --- a/crates/collab/src/db/queries/rooms.rs +++ b/crates/collab/src/db/queries/rooms.rs @@ -1126,6 +1126,7 @@ impl Database { projects: Default::default(), location: Some(proto::ParticipantLocation { variant: location }), participant_index: participant_index as u32, + role: db_participant.role.unwrap_or(ChannelRole::Member).into(), }, ); } else { @@ -1137,6 +1138,7 @@ impl Database { } } drop(db_participants); + dbg!(&participants); let mut db_projects = db_room .find_related(project::Entity) diff --git a/crates/collab/src/db/tables/room_participant.rs b/crates/collab/src/db/tables/room_participant.rs index 4c5b8cc11c7a23532de3e7d0ea61f55fe3a4077f..c562111e96957c2457e421f8d7d2a95b9c6c2385 100644 --- a/crates/collab/src/db/tables/room_participant.rs +++ b/crates/collab/src/db/tables/room_participant.rs @@ -1,4 +1,4 @@ -use crate::db::{ProjectId, RoomId, RoomParticipantId, ServerId, UserId}; +use crate::db::{ChannelRole, ProjectId, RoomId, RoomParticipantId, ServerId, UserId}; use rpc::ConnectionId; use sea_orm::entity::prelude::*; @@ -19,6 +19,7 @@ pub struct Model { pub calling_connection_id: i32, pub calling_connection_server_id: Option, pub participant_index: Option, + pub role: Option, } impl Model { diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 835b48809da94dc60cd872d473e564a7456da81e..8bb33cae296016dc241c03304154e14266c02f23 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -1504,7 +1504,7 @@ async fn join_project( // First, we send the metadata associated with each worktree. response.send(proto::JoinProjectResponse { worktrees: worktrees.clone(), - replica_id: replica_id.0 as u32, + replica_id: Some(replica_id.0 as u32), collaborators: collaborators.clone(), language_servers: project.language_servers.clone(), })?; diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index a58a7b804f1120c07c4cabc5c8a5b7e3126acbf9..8b3abff0538f970c72555915d831f090c664f82a 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -713,7 +713,8 @@ impl Project { }) .await?; let this = cx.new_model(|cx| { - let replica_id = response.payload.replica_id as ReplicaId; + // todo!() + let replica_id = response.payload.replica_id.unwrap() as ReplicaId; let mut worktrees = Vec::new(); for worktree in response.payload.worktrees { diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index 21fe81ca1b16cf32061ffa6b5e88593bf79fc25d..84d03727c0c59f61d54c59c4f688aeb71e392e87 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -269,6 +269,7 @@ message Participant { repeated ParticipantProject projects = 3; ParticipantLocation location = 4; uint32 participant_index = 5; + ChannelRole role = 6; } message PendingParticipant { From bf304b3fe7c345000ec06946416a3f26d3a87930 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 2 Jan 2024 21:07:46 -0700 Subject: [PATCH 04/74] Track room participant role (Also wire that through to project collaboration rules for now) --- crates/call/src/participant.rs | 1 + crates/call/src/room.rs | 35 +++++++++++++++++--- crates/collab/src/db/queries/channels.rs | 5 +-- crates/collab/src/db/queries/rooms.rs | 23 +++++++++++-- crates/collab/src/tests/integration_tests.rs | 2 ++ crates/project/src/project.rs | 16 +++++++++ 6 files changed, 73 insertions(+), 9 deletions(-) diff --git a/crates/call/src/participant.rs b/crates/call/src/participant.rs index 11a58b4b098cc6a255f8c1b061d76cf44c64684b..5f3d2827f821ec36b5cdfb63d3b8cd8247fb455e 100644 --- a/crates/call/src/participant.rs +++ b/crates/call/src/participant.rs @@ -36,6 +36,7 @@ impl ParticipantLocation { pub struct LocalParticipant { pub projects: Vec, pub active_project: Option>, + pub role: proto::ChannelRole, } #[derive(Clone, Debug)] diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index 14d9a55ef03c92f13e1ecfb398963cf57db7710c..78e609c73f2f7c83ac701c1bf7795d8992c911c0 100644 --- a/crates/call/src/room.rs +++ b/crates/call/src/room.rs @@ -247,14 +247,18 @@ impl Room { let response = client.request(proto::CreateRoom {}).await?; let room_proto = response.room.ok_or_else(|| anyhow!("invalid room"))?; let room = cx.new_model(|cx| { - Self::new( + let mut room = Self::new( room_proto.id, None, response.live_kit_connection_info, client, user_store, cx, - ) + ); + if let Some(participant) = room_proto.participants.first() { + room.local_participant.role = participant.role() + } + room })?; let initial_project_id = if let Some(initial_project) = initial_project { @@ -710,7 +714,21 @@ impl Room { this.participant_user_ids.clear(); if let Some(participant) = local_participant { + let role = participant.role(); this.local_participant.projects = participant.projects; + if this.local_participant.role != role { + this.local_participant.role = role; + // TODO!() this may be better done using optional replica ids instead. + // (though need to figure out how to handle promotion? join and leave the project?) + this.joined_projects.retain(|project| { + if let Some(project) = project.upgrade() { + project.update(cx, |project, _| project.set_role(role)); + true + } else { + false + } + }); + } } else { this.local_participant.projects.clear(); } @@ -1091,10 +1109,19 @@ impl Room { ) -> Task>> { let client = self.client.clone(); let user_store = self.user_store.clone(); + let role = self.local_participant.role; cx.emit(Event::RemoteProjectJoined { project_id: id }); cx.spawn(move |this, mut cx| async move { - let project = - Project::remote(id, client, user_store, language_registry, fs, cx.clone()).await?; + let project = Project::remote( + id, + client, + user_store, + language_registry, + fs, + role, + cx.clone(), + ) + .await?; this.update(&mut cx, |this, cx| { this.joined_projects.retain(|project| { diff --git a/crates/collab/src/db/queries/channels.rs b/crates/collab/src/db/queries/channels.rs index 9a14aabfda3ba5d8449fea47397d92be5f217690..9c28e998c95426bc1026bcc5df86e8c528c4da8b 100644 --- a/crates/collab/src/db/queries/channels.rs +++ b/crates/collab/src/db/queries/channels.rs @@ -165,15 +165,16 @@ impl Database { if role.is_none() || role == Some(ChannelRole::Banned) { Err(anyhow!("not allowed"))? } + let role = role.unwrap(); let live_kit_room = format!("channel-{}", nanoid::nanoid!(30)); let room_id = self .get_or_create_channel_room(channel_id, &live_kit_room, environment, &*tx) .await?; - self.join_channel_room_internal(room_id, user_id, connection, &*tx) + self.join_channel_room_internal(room_id, user_id, connection, role, &*tx) .await - .map(|jr| (jr, accept_invite_result, role.unwrap())) + .map(|jr| (jr, accept_invite_result, role)) }) .await } diff --git a/crates/collab/src/db/queries/rooms.rs b/crates/collab/src/db/queries/rooms.rs index 12d8940d7c3179e0f7c19881dbfea970a64b910f..ee2b0519e30f0c56f41b89dc4012ab7968babda6 100644 --- a/crates/collab/src/db/queries/rooms.rs +++ b/crates/collab/src/db/queries/rooms.rs @@ -131,7 +131,12 @@ impl Database { connection.owner_id as i32, ))), participant_index: ActiveValue::set(Some(0)), - ..Default::default() + role: ActiveValue::set(Some(ChannelRole::Admin)), + + id: ActiveValue::NotSet, + location_kind: ActiveValue::NotSet, + location_project_id: ActiveValue::NotSet, + initial_project_id: ActiveValue::NotSet, } .insert(&*tx) .await?; @@ -162,7 +167,13 @@ impl Database { calling_connection.owner_id as i32, ))), initial_project_id: ActiveValue::set(initial_project_id), - ..Default::default() + role: ActiveValue::set(Some(ChannelRole::Member)), + + id: ActiveValue::NotSet, + answering_connection_id: ActiveValue::NotSet, + answering_connection_server_id: ActiveValue::NotSet, + location_kind: ActiveValue::NotSet, + location_project_id: ActiveValue::NotSet, } .insert(&*tx) .await?; @@ -384,6 +395,7 @@ impl Database { room_id: RoomId, user_id: UserId, connection: ConnectionId, + role: ChannelRole, tx: &DatabaseTransaction, ) -> Result { let participant_index = self @@ -404,7 +416,11 @@ impl Database { connection.owner_id as i32, ))), participant_index: ActiveValue::Set(Some(participant_index)), - ..Default::default() + role: ActiveValue::set(Some(role)), + id: ActiveValue::NotSet, + location_kind: ActiveValue::NotSet, + location_project_id: ActiveValue::NotSet, + initial_project_id: ActiveValue::NotSet, }]) .on_conflict( OnConflict::columns([room_participant::Column::UserId]) @@ -413,6 +429,7 @@ impl Database { room_participant::Column::AnsweringConnectionServerId, room_participant::Column::AnsweringConnectionLost, room_participant::Column::ParticipantIndex, + room_participant::Column::Role, ]) .to_owned(), ) diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs index e64fdbec832a07d1dc3753c059653f6ea954fb00..457f085f8fe9a1d6de8df497fbff435277f6cfef 100644 --- a/crates/collab/src/tests/integration_tests.rs +++ b/crates/collab/src/tests/integration_tests.rs @@ -19,6 +19,7 @@ use project::{ search::SearchQuery, DiagnosticSummary, FormatTrigger, HoverBlockKind, Project, ProjectPath, }; use rand::prelude::*; +use rpc::proto::ChannelRole; use serde_json::json; use settings::SettingsStore; use std::{ @@ -3550,6 +3551,7 @@ async fn test_leaving_project( client_b.user_store().clone(), client_b.language_registry().clone(), FakeFs::new(cx.background_executor().clone()), + ChannelRole::Member, cx, ) }) diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 8b3abff0538f970c72555915d831f090c664f82a..28ce04f0fc4022e26d60829046276b31677f6836 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -262,6 +262,8 @@ enum ProjectClientState { }, Remote { sharing_has_stopped: bool, + // todo!() this should be represented differently! + is_read_only: bool, remote_id: u64, replica_id: ReplicaId, }, @@ -702,6 +704,7 @@ impl Project { user_store: Model, languages: Arc, fs: Arc, + role: proto::ChannelRole, mut cx: AsyncAppContext, ) -> Result> { client.authenticate_and_connect(true, &cx).await?; @@ -757,6 +760,7 @@ impl Project { client: client.clone(), client_state: Some(ProjectClientState::Remote { sharing_has_stopped: false, + is_read_only: false, remote_id, replica_id, }), @@ -797,6 +801,7 @@ impl Project { prettiers_per_worktree: HashMap::default(), prettier_instances: HashMap::default(), }; + this.set_role(role); for worktree in worktrees { let _ = this.add_worktree(&worktree, cx); } @@ -1619,6 +1624,13 @@ impl Project { cx.notify(); } + pub fn set_role(&mut self, role: proto::ChannelRole) { + if let Some(ProjectClientState::Remote { is_read_only, .. }) = &mut self.client_state { + *is_read_only = + !(role == proto::ChannelRole::Member || role == proto::ChannelRole::Admin) + } + } + fn disconnected_from_host_internal(&mut self, cx: &mut AppContext) { if let Some(ProjectClientState::Remote { sharing_has_stopped, @@ -1672,6 +1684,10 @@ impl Project { pub fn is_read_only(&self) -> bool { self.is_disconnected() + || match &self.client_state { + Some(ProjectClientState::Remote { is_read_only, .. }) => *is_read_only, + _ => false, + } } pub fn is_local(&self) -> bool { From 84171787a5806c66801be4bda60c76ebefdd583b Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 3 Jan 2024 12:08:07 -0700 Subject: [PATCH 05/74] Track read_only per project and buffer This uses a new enum to avoid confusing booleans --- crates/assistant/src/assistant_panel.rs | 6 ++-- crates/channel/src/channel_buffer.rs | 7 ++++- crates/channel/src/channel_store.rs | 9 ++++-- crates/collab_ui/src/channel_view.rs | 13 ++------ crates/diagnostics/src/diagnostics.rs | 7 ++++- crates/editor/src/editor.rs | 28 +++++++++-------- crates/editor/src/editor_tests.rs | 21 +++++++------ crates/editor/src/git.rs | 3 +- crates/editor/src/inlay_hint_cache.rs | 7 +++-- crates/editor/src/items.rs | 3 +- crates/editor/src/movement.rs | 3 +- crates/language/src/buffer.rs | 28 ++++++++++++++++- crates/language/src/buffer_tests.rs | 14 ++++++--- crates/multi_buffer/src/multi_buffer.rs | 39 +++++++++++++---------- crates/project/src/project.rs | 41 +++++++++++++++---------- crates/project/src/worktree.rs | 12 ++++++-- crates/search/src/buffer_search.rs | 2 +- crates/search/src/project_search.rs | 6 ++-- script/sqlx | 2 +- 19 files changed, 161 insertions(+), 90 deletions(-) diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 7b19ad130c4c42316f6ca65c8063be9c3842b42b..d225463b056ec13b7955d19106891d2769caca06 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -2818,8 +2818,8 @@ impl InlineAssistant { fn handle_codegen_changed(&mut self, _: Model, cx: &mut ViewContext) { let is_read_only = !self.codegen.read(cx).idle(); - self.prompt_editor.update(cx, |editor, _cx| { - let was_read_only = editor.read_only(); + self.prompt_editor.update(cx, |editor, cx| { + let was_read_only = editor.read_only(cx); if was_read_only != is_read_only { if is_read_only { editor.set_read_only(true); @@ -3054,7 +3054,7 @@ impl InlineAssistant { fn render_prompt_editor(&self, cx: &mut ViewContext) -> impl IntoElement { let settings = ThemeSettings::get_global(cx); let text_style = TextStyle { - color: if self.prompt_editor.read(cx).read_only() { + color: if self.prompt_editor.read(cx).read_only(cx) { cx.theme().colors().text_disabled } else { cx.theme().colors().text diff --git a/crates/channel/src/channel_buffer.rs b/crates/channel/src/channel_buffer.rs index 62daad0a62f35fcadec7d0839d8fe6f810f18e02..1aca05ec867a05e2125d451ef1b42266b765fd02 100644 --- a/crates/channel/src/channel_buffer.rs +++ b/crates/channel/src/channel_buffer.rs @@ -62,7 +62,12 @@ impl ChannelBuffer { .collect::, _>>()?; let buffer = cx.new_model(|_| { - language::Buffer::remote(response.buffer_id, response.replica_id as u16, base_text) + language::Buffer::remote( + response.buffer_id, + response.replica_id as u16, + channel.channel_buffer_capability(), + base_text, + ) })?; buffer.update(&mut cx, |buffer, cx| buffer.apply_ops(operations, cx))??; diff --git a/crates/channel/src/channel_store.rs b/crates/channel/src/channel_store.rs index 44f527bdfd0d553b8345bc50b9782d53abbb2629..59b69405a5c8dd5160e9d61d6fd8d64fb1370a94 100644 --- a/crates/channel/src/channel_store.rs +++ b/crates/channel/src/channel_store.rs @@ -11,6 +11,7 @@ use gpui::{ AppContext, AsyncAppContext, Context, EventEmitter, Model, ModelContext, SharedString, Task, WeakModel, }; +use language::Capability; use rpc::{ proto::{self, ChannelVisibility}, TypedEnvelope, @@ -74,8 +75,12 @@ impl Channel { slug.trim_matches(|c| c == '-').to_string() } - pub fn can_edit_notes(&self) -> bool { - self.role == proto::ChannelRole::Member || self.role == proto::ChannelRole::Admin + pub fn channel_buffer_capability(&self) -> Capability { + if self.role == proto::ChannelRole::Member || self.role == proto::ChannelRole::Admin { + Capability::ReadWrite + } else { + Capability::ReadOnly + } } } diff --git a/crates/collab_ui/src/channel_view.rs b/crates/collab_ui/src/channel_view.rs index df2adbaabe962192b97c1c9ea456328a5e58ec7b..27873b1067637e8d6c001bc50b0b4c99dde782f9 100644 --- a/crates/collab_ui/src/channel_view.rs +++ b/crates/collab_ui/src/channel_view.rs @@ -138,12 +138,6 @@ impl ChannelView { editor.set_collaboration_hub(Box::new(ChannelBufferCollaborationHub( channel_buffer.clone(), ))); - editor.set_read_only( - !channel_buffer - .read(cx) - .channel(cx) - .is_some_and(|c| c.can_edit_notes()), - ); editor }); let _editor_event_subscription = @@ -179,7 +173,6 @@ impl ChannelView { }), ChannelBufferEvent::ChannelChanged => { self.editor.update(cx, |editor, cx| { - editor.set_read_only(!self.channel(cx).is_some_and(|c| c.can_edit_notes())); cx.emit(editor::EditorEvent::TitleChanged); cx.notify() }); @@ -254,11 +247,11 @@ impl Item for ChannelView { fn tab_content(&self, _: Option, selected: bool, cx: &WindowContext) -> AnyElement { let label = if let Some(channel) = self.channel(cx) { match ( - channel.can_edit_notes(), + self.channel_buffer.read(cx).buffer().read(cx).read_only(), self.channel_buffer.read(cx).is_connected(), ) { - (true, true) => format!("#{}", channel.name), - (false, true) => format!("#{} (read-only)", channel.name), + (false, true) => format!("#{}", channel.name), + (true, true) => format!("#{} (read-only)", channel.name), (_, false) => format!("#{} (disconnected)", channel.name), } } else { diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 77e6a7673ff838f3f4a5ac3029b9d5bddacbb9ee..d31d6249c6358d05b6e018b0fea227e62e225c86 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -151,7 +151,12 @@ impl ProjectDiagnosticsEditor { let focus_in_subscription = cx.on_focus_in(&focus_handle, |diagnostics, cx| diagnostics.focus_in(cx)); - let excerpts = cx.new_model(|cx| MultiBuffer::new(project_handle.read(cx).replica_id())); + let excerpts = cx.new_model(|cx| { + MultiBuffer::new( + project_handle.read(cx).replica_id(), + project_handle.read(cx).capability(), + ) + }); let editor = cx.new_view(|cx| { let mut editor = Editor::for_multibuffer(excerpts.clone(), Some(project_handle.clone()), cx); diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 85a156a8eb9014728a4a2ad1598082e990f45ef7..1a0ccba03ce97a9a1943d08aeb788f2978134c07 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -54,10 +54,10 @@ use itertools::Itertools; pub use language::{char_kind, CharKind}; use language::{ language_settings::{self, all_language_settings, InlayHintSettings}, - markdown, point_from_lsp, AutoindentMode, BracketPair, Buffer, CodeAction, CodeLabel, - Completion, CursorShape, Diagnostic, Documentation, IndentKind, IndentSize, Language, - LanguageRegistry, LanguageServerName, OffsetRangeExt, Point, Selection, SelectionGoal, - TransactionId, + markdown, point_from_lsp, AutoindentMode, BracketPair, Buffer, Capability, CodeAction, + CodeLabel, Completion, CursorShape, Diagnostic, Documentation, IndentKind, IndentSize, + Language, LanguageRegistry, LanguageServerName, OffsetRangeExt, Point, Selection, + SelectionGoal, TransactionId, }; use link_go_to_definition::{GoToDefinitionLink, InlayHighlight, LinkGoToDefinitionState}; @@ -2050,8 +2050,8 @@ impl Editor { } } - pub fn read_only(&self) -> bool { - self.read_only + pub fn read_only(&self, cx: &AppContext) -> bool { + self.read_only || self.buffer.read(cx).read_only() } pub fn set_read_only(&mut self, read_only: bool) { @@ -2200,7 +2200,7 @@ impl Editor { S: ToOffset, T: Into>, { - if self.read_only { + if self.read_only(cx) { return; } @@ -2214,7 +2214,7 @@ impl Editor { S: ToOffset, T: Into>, { - if self.read_only { + if self.read_only(cx) { return; } @@ -2233,7 +2233,7 @@ impl Editor { S: ToOffset, T: Into>, { - if self.read_only { + if self.read_only(cx) { return; } @@ -2597,7 +2597,7 @@ impl Editor { pub fn handle_input(&mut self, text: &str, cx: &mut ViewContext) { let text: Arc = text.into(); - if self.read_only { + if self.read_only(cx) { return; } @@ -3050,7 +3050,7 @@ impl Editor { autoindent_mode: Option, cx: &mut ViewContext, ) { - if self.read_only { + if self.read_only(cx) { return; } @@ -3787,7 +3787,8 @@ impl Editor { let mut ranges_to_highlight = Vec::new(); let excerpt_buffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(replica_id).with_title(title); + let mut multibuffer = + MultiBuffer::new(replica_id, Capability::ReadWrite).with_title(title); for (buffer_handle, transaction) in &entries { let buffer = buffer_handle.read(cx); ranges_to_highlight.extend( @@ -7492,9 +7493,10 @@ impl Editor { locations.sort_by_key(|location| location.buffer.read(cx).remote_id()); let mut locations = locations.into_iter().peekable(); let mut ranges_to_highlight = Vec::new(); + let capability = workspace.project().read(cx).capability(); let excerpt_buffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(replica_id); + let mut multibuffer = MultiBuffer::new(replica_id, capability); while let Some(location) = locations.next() { let buffer = location.buffer.read(cx); let mut ranges_for_buffer = Vec::new(); diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 4d507e0d3795e06ee8b9e07d8ee8c5b2345a4bb6..a84b866e1f8139a8ca558ccd54ac57c1d6e08bdd 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -17,8 +17,9 @@ use gpui::{ use indoc::indoc; use language::{ language_settings::{AllLanguageSettings, AllLanguageSettingsContent, LanguageSettingsContent}, - BracketPairConfig, FakeLspAdapter, LanguageConfig, LanguageConfigOverride, LanguageRegistry, - Override, Point, + BracketPairConfig, + Capability::ReadWrite, + FakeLspAdapter, LanguageConfig, LanguageConfigOverride, LanguageRegistry, Override, Point, }; use parking_lot::Mutex; use project::project_settings::{LspSettings, ProjectSettings}; @@ -2355,7 +2356,7 @@ fn test_indent_outdent_with_excerpts(cx: &mut TestAppContext) { .with_language(rust_language, cx) }); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); multibuffer.push_excerpts( toml_buffer.clone(), [ExcerptRange { @@ -6019,7 +6020,7 @@ fn test_editing_disjoint_excerpts(cx: &mut TestAppContext) { let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(3, 4, 'a'))); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); multibuffer.push_excerpts( buffer.clone(), [ @@ -6103,7 +6104,7 @@ fn test_editing_overlapping_excerpts(cx: &mut TestAppContext) { }); let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), initial_text)); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); multibuffer.push_excerpts(buffer, excerpt_ranges, cx); multibuffer }); @@ -6162,7 +6163,7 @@ fn test_refresh_selections(cx: &mut TestAppContext) { let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(3, 4, 'a'))); let mut excerpt1_id = None; let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); excerpt1_id = multibuffer .push_excerpts( buffer.clone(), @@ -6247,7 +6248,7 @@ fn test_refresh_selections_while_selecting_with_mouse(cx: &mut TestAppContext) { let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(3, 4, 'a'))); let mut excerpt1_id = None; let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); excerpt1_id = multibuffer .push_excerpts( buffer.clone(), @@ -6636,7 +6637,7 @@ async fn test_following_with_multiple_excerpts(cx: &mut gpui::TestAppContext) { let cx = &mut VisualTestContext::from_window(*workspace.deref(), cx); let leader = pane.update(cx, |_, cx| { - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, ReadWrite)); cx.new_view(|cx| build_editor(multibuffer.clone(), cx)) }); @@ -7425,7 +7426,7 @@ async fn test_copilot_multibuffer(executor: BackgroundExecutor, cx: &mut gpui::T let buffer_1 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "a = 1\nb = 2\n")); let buffer_2 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "c = 3\nd = 4\n")); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); multibuffer.push_excerpts( buffer_1.clone(), [ExcerptRange { @@ -7552,7 +7553,7 @@ async fn test_copilot_disabled_globs(executor: BackgroundExecutor, cx: &mut gpui .unwrap(); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); multibuffer.push_excerpts( private_buffer.clone(), [ExcerptRange { diff --git a/crates/editor/src/git.rs b/crates/editor/src/git.rs index e1715aa3b2f97f83e01c9907b4e5eeea9bc802ef..6eb80b99fc2248b8540c9eee4da33b5adaa620e6 100644 --- a/crates/editor/src/git.rs +++ b/crates/editor/src/git.rs @@ -93,6 +93,7 @@ mod tests { use crate::editor_tests::init_test; use crate::Point; use gpui::{Context, TestAppContext}; + use language::Capability::ReadWrite; use multi_buffer::{ExcerptRange, MultiBuffer}; use project::{FakeFs, Project}; use unindent::Unindent; @@ -183,7 +184,7 @@ mod tests { cx.background_executor.run_until_parked(); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, ReadWrite); multibuffer.push_excerpts( buffer_1.clone(), [ diff --git a/crates/editor/src/inlay_hint_cache.rs b/crates/editor/src/inlay_hint_cache.rs index d7dfa01b219275c29362255c8476449ced77f07d..59c6b8605c1001440999e3f6909db300cf33e392 100644 --- a/crates/editor/src/inlay_hint_cache.rs +++ b/crates/editor/src/inlay_hint_cache.rs @@ -1206,7 +1206,8 @@ pub mod tests { use gpui::{Context, TestAppContext, WindowHandle}; use itertools::Itertools; use language::{ - language_settings::AllLanguageSettingsContent, FakeLspAdapter, Language, LanguageConfig, + language_settings::AllLanguageSettingsContent, Capability, FakeLspAdapter, Language, + LanguageConfig, }; use lsp::FakeLanguageServer; use parking_lot::Mutex; @@ -2459,7 +2460,7 @@ pub mod tests { .await .unwrap(); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, Capability::ReadWrite); multibuffer.push_excerpts( buffer_1.clone(), [ @@ -2798,7 +2799,7 @@ pub mod tests { }) .await .unwrap(); - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let (buffer_1_excerpts, buffer_2_excerpts) = multibuffer.update(cx, |multibuffer, cx| { let buffer_1_excerpts = multibuffer.push_excerpts( buffer_1.clone(), diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 31c4e24659fb5a691f379e0979ce4cc5a7546aa1..f358a672537b5f4be32b9bd30d4ed50cc474bdcd 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -101,7 +101,8 @@ impl FollowableItem for Editor { if state.singleton && buffers.len() == 1 { multibuffer = MultiBuffer::singleton(buffers.pop().unwrap(), cx) } else { - multibuffer = MultiBuffer::new(replica_id); + multibuffer = + MultiBuffer::new(replica_id, project.read(cx).capability()); let mut excerpts = state.excerpts.into_iter().peekable(); while let Some(excerpt) = excerpts.peek() { let buffer_id = excerpt.buffer_id; diff --git a/crates/editor/src/movement.rs b/crates/editor/src/movement.rs index cfccec253fe4e5a08b19c5f1e43edd0fd40ae867..0b13e25d5dd621f9d62fcf05e7d75657a3902656 100644 --- a/crates/editor/src/movement.rs +++ b/crates/editor/src/movement.rs @@ -461,6 +461,7 @@ mod tests { Buffer, DisplayMap, ExcerptRange, InlayId, MultiBuffer, }; use gpui::{font, Context as _}; + use language::Capability; use project::Project; use settings::SettingsStore; use util::post_inc; @@ -766,7 +767,7 @@ mod tests { let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "abc\ndefg\nhijkl\nmn")); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, Capability::ReadWrite); multibuffer.push_excerpts( buffer.clone(), [ diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index f56b24bb6a1df586405ff1a84f6439463cc1b563..d9472e8a77afc2dc7222d003aa23f513448ed661 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -57,6 +57,12 @@ lazy_static! { pub static ref BUFFER_DIFF_TASK: TaskLabel = TaskLabel::new(); } +#[derive(PartialEq, Clone, Copy, Debug)] +pub enum Capability { + ReadWrite, + ReadOnly, +} + pub struct Buffer { text: TextBuffer, diff_base: Option, @@ -90,6 +96,7 @@ pub struct Buffer { completion_triggers: Vec, completion_triggers_timestamp: clock::Lamport, deferred_ops: OperationQueue, + capability: Capability, } pub struct BufferSnapshot { @@ -405,19 +412,27 @@ impl Buffer { TextBuffer::new(replica_id, id, base_text.into()), None, None, + Capability::ReadWrite, ) } - pub fn remote(remote_id: u64, replica_id: ReplicaId, base_text: String) -> Self { + pub fn remote( + remote_id: u64, + replica_id: ReplicaId, + capability: Capability, + base_text: String, + ) -> Self { Self::build( TextBuffer::new(replica_id, remote_id, base_text), None, None, + capability, ) } pub fn from_proto( replica_id: ReplicaId, + capability: Capability, message: proto::BufferState, file: Option>, ) -> Result { @@ -426,6 +441,7 @@ impl Buffer { buffer, message.diff_base.map(|text| text.into_boxed_str().into()), file, + capability, ); this.text.set_line_ending(proto::deserialize_line_ending( rpc::proto::LineEnding::from_i32(message.line_ending) @@ -504,10 +520,19 @@ impl Buffer { self } + pub fn capability(&self) -> Capability { + self.capability + } + + pub fn read_only(&self) -> bool { + self.capability == Capability::ReadOnly + } + pub fn build( buffer: TextBuffer, diff_base: Option, file: Option>, + capability: Capability, ) -> Self { let saved_mtime = if let Some(file) = file.as_ref() { file.mtime() @@ -526,6 +551,7 @@ impl Buffer { diff_base, git_diff: git::diff::BufferDiff::new(), file, + capability, syntax_map: Mutex::new(SyntaxMap::new()), parsing_in_background: false, parse_count: 0, diff --git a/crates/language/src/buffer_tests.rs b/crates/language/src/buffer_tests.rs index af959b13e53949e08224f8188edd571a46c25818..780483c5ca24fbb5ec43f9652b54f6c9ba5b0c30 100644 --- a/crates/language/src/buffer_tests.rs +++ b/crates/language/src/buffer_tests.rs @@ -1926,7 +1926,7 @@ fn test_serialization(cx: &mut gpui::AppContext) { .background_executor() .block(buffer1.read(cx).serialize_ops(None, cx)); let buffer2 = cx.new_model(|cx| { - let mut buffer = Buffer::from_proto(1, state, None).unwrap(); + let mut buffer = Buffer::from_proto(1, Capability::ReadWrite, state, None).unwrap(); buffer .apply_ops( ops.into_iter() @@ -1967,7 +1967,8 @@ fn test_random_collaboration(cx: &mut AppContext, mut rng: StdRng) { let ops = cx .background_executor() .block(base_buffer.read(cx).serialize_ops(None, cx)); - let mut buffer = Buffer::from_proto(i as ReplicaId, state, None).unwrap(); + let mut buffer = + Buffer::from_proto(i as ReplicaId, Capability::ReadWrite, state, None).unwrap(); buffer .apply_ops( ops.into_iter() @@ -2083,8 +2084,13 @@ fn test_random_collaboration(cx: &mut AppContext, mut rng: StdRng) { replica_id ); new_buffer = Some(cx.new_model(|cx| { - let mut new_buffer = - Buffer::from_proto(new_replica_id, old_buffer_state, None).unwrap(); + let mut new_buffer = Buffer::from_proto( + new_replica_id, + Capability::ReadWrite, + old_buffer_state, + None, + ) + .unwrap(); new_buffer .apply_ops( old_buffer_ops diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index 49ec284a99e217a0d62961316fa6737ca8d25dfc..946e6af5ab5fd9a97439edb5acb296972068cf44 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -11,7 +11,7 @@ pub use language::Completion; use language::{ char_kind, language_settings::{language_settings, LanguageSettings}, - AutoindentMode, Buffer, BufferChunks, BufferSnapshot, CharKind, Chunk, CursorShape, + AutoindentMode, Buffer, BufferChunks, BufferSnapshot, Capability, CharKind, Chunk, CursorShape, DiagnosticEntry, File, IndentSize, Language, LanguageScope, OffsetRangeExt, OffsetUtf16, Outline, OutlineItem, Point, PointUtf16, Selection, TextDimension, ToOffset as _, ToOffsetUtf16 as _, ToPoint as _, ToPointUtf16 as _, TransactionId, Unclipped, @@ -55,6 +55,7 @@ pub struct MultiBuffer { replica_id: ReplicaId, history: History, title: Option, + capability: Capability, } #[derive(Clone, Debug, PartialEq, Eq)] @@ -225,13 +226,14 @@ struct ExcerptBytes<'a> { } impl MultiBuffer { - pub fn new(replica_id: ReplicaId) -> Self { + pub fn new(replica_id: ReplicaId, capability: Capability) -> Self { Self { snapshot: Default::default(), buffers: Default::default(), next_excerpt_id: 1, subscriptions: Default::default(), singleton: false, + capability, replica_id, history: History { next_transaction_id: Default::default(), @@ -271,6 +273,7 @@ impl MultiBuffer { next_excerpt_id: 1, subscriptions: Default::default(), singleton: self.singleton, + capability: self.capability, replica_id: self.replica_id, history: self.history.clone(), title: self.title.clone(), @@ -282,8 +285,12 @@ impl MultiBuffer { self } + pub fn read_only(&self) -> bool { + self.capability == Capability::ReadOnly + } + pub fn singleton(buffer: Model, cx: &mut ModelContext) -> Self { - let mut this = Self::new(buffer.read(cx).replica_id()); + let mut this = Self::new(buffer.read(cx).replica_id(), buffer.read(cx).capability()); this.singleton = true; this.push_excerpts( buffer, @@ -1657,7 +1664,7 @@ impl MultiBuffer { excerpts: [(&str, Vec>); COUNT], cx: &mut gpui::AppContext, ) -> Model { - let multi = cx.new_model(|_| Self::new(0)); + let multi = cx.new_model(|_| Self::new(0, Capability::ReadWrite)); for (text, ranges) in excerpts { let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), text)); let excerpt_ranges = ranges.into_iter().map(|range| ExcerptRange { @@ -1678,7 +1685,7 @@ impl MultiBuffer { pub fn build_random(rng: &mut impl rand::Rng, cx: &mut gpui::AppContext) -> Model { cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, Capability::ReadWrite); let mutation_count = rng.gen_range(1..=5); multibuffer.randomly_edit_excerpts(rng, mutation_count, cx); multibuffer @@ -4176,7 +4183,7 @@ mod tests { let ops = cx .background_executor() .block(host_buffer.read(cx).serialize_ops(None, cx)); - let mut buffer = Buffer::from_proto(1, state, None).unwrap(); + let mut buffer = Buffer::from_proto(1, Capability::ReadWrite, state, None).unwrap(); buffer .apply_ops( ops.into_iter() @@ -4205,7 +4212,7 @@ mod tests { cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(6, 6, 'a'))); let buffer_2 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(6, 6, 'g'))); - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let events = Arc::new(RwLock::new(Vec::::new())); multibuffer.update(cx, |_, cx| { @@ -4442,8 +4449,8 @@ mod tests { let buffer_2 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(10, 3, 'm'))); - let leader_multibuffer = cx.new_model(|_| MultiBuffer::new(0)); - let follower_multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let leader_multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); + let follower_multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let follower_edit_event_count = Arc::new(RwLock::new(0)); follower_multibuffer.update(cx, |_, cx| { @@ -4547,7 +4554,7 @@ mod tests { fn test_push_excerpts_with_context_lines(cx: &mut AppContext) { let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(20, 3, 'a'))); - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let anchor_ranges = multibuffer.update(cx, |multibuffer, cx| { multibuffer.push_excerpts_with_context_lines( buffer.clone(), @@ -4584,7 +4591,7 @@ mod tests { async fn test_stream_excerpts_with_context_lines(cx: &mut TestAppContext) { let buffer = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), sample_text(20, 3, 'a'))); - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let anchor_ranges = multibuffer.update(cx, |multibuffer, cx| { let snapshot = buffer.read(cx); let ranges = vec![ @@ -4619,7 +4626,7 @@ mod tests { #[gpui::test] fn test_empty_multibuffer(cx: &mut AppContext) { - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let snapshot = multibuffer.read(cx).snapshot(cx); assert_eq!(snapshot.text(), ""); @@ -4652,7 +4659,7 @@ mod tests { let buffer_1 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "abcd")); let buffer_2 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "efghi")); let multibuffer = cx.new_model(|cx| { - let mut multibuffer = MultiBuffer::new(0); + let mut multibuffer = MultiBuffer::new(0, Capability::ReadWrite); multibuffer.push_excerpts( buffer_1.clone(), [ExcerptRange { @@ -4710,7 +4717,7 @@ mod tests { let buffer_1 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "abcd")); let buffer_2 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "ABCDEFGHIJKLMNOP")); - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); // Create an insertion id in buffer 1 that doesn't exist in buffer 2. // Add an excerpt from buffer 1 that spans this new insertion. @@ -4844,7 +4851,7 @@ mod tests { .unwrap_or(10); let mut buffers: Vec> = Vec::new(); - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let mut excerpt_ids = Vec::::new(); let mut expected_excerpts = Vec::<(Model, Range)>::new(); let mut anchors = Vec::new(); @@ -5266,7 +5273,7 @@ mod tests { let buffer_1 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "1234")); let buffer_2 = cx.new_model(|cx| Buffer::new(0, cx.entity_id().as_u64(), "5678")); - let multibuffer = cx.new_model(|_| MultiBuffer::new(0)); + let multibuffer = cx.new_model(|_| MultiBuffer::new(0, Capability::ReadWrite)); let group_interval = multibuffer.read(cx).history.group_interval; multibuffer.update(cx, |multibuffer, cx| { multibuffer.push_excerpts( diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 28ce04f0fc4022e26d60829046276b31677f6836..8b83dc445570365f1def06e0f4ad71b5eb1d8289 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -39,11 +39,11 @@ use language::{ deserialize_anchor, deserialize_fingerprint, deserialize_line_ending, deserialize_version, serialize_anchor, serialize_version, split_operations, }, - range_from_lsp, range_to_lsp, Bias, Buffer, BufferSnapshot, CachedLspAdapter, CodeAction, - CodeLabel, Completion, Diagnostic, DiagnosticEntry, DiagnosticSet, Diff, Event as BufferEvent, - File as _, Language, LanguageRegistry, LanguageServerName, LocalFile, LspAdapterDelegate, - OffsetRangeExt, Operation, Patch, PendingLanguageServer, PointUtf16, TextBufferSnapshot, - ToOffset, ToPointUtf16, Transaction, Unclipped, + range_from_lsp, range_to_lsp, Bias, Buffer, BufferSnapshot, CachedLspAdapter, Capability, + CodeAction, CodeLabel, Completion, Diagnostic, DiagnosticEntry, DiagnosticSet, Diff, + Event as BufferEvent, File as _, Language, LanguageRegistry, LanguageServerName, LocalFile, + LspAdapterDelegate, OffsetRangeExt, Operation, Patch, PendingLanguageServer, PointUtf16, + TextBufferSnapshot, ToOffset, ToPointUtf16, Transaction, Unclipped, }; use log::error; use lsp::{ @@ -262,8 +262,7 @@ enum ProjectClientState { }, Remote { sharing_has_stopped: bool, - // todo!() this should be represented differently! - is_read_only: bool, + capability: Capability, remote_id: u64, replica_id: ReplicaId, }, @@ -760,7 +759,7 @@ impl Project { client: client.clone(), client_state: Some(ProjectClientState::Remote { sharing_has_stopped: false, - is_read_only: false, + capability: Capability::ReadWrite, remote_id, replica_id, }), @@ -1625,9 +1624,13 @@ impl Project { } pub fn set_role(&mut self, role: proto::ChannelRole) { - if let Some(ProjectClientState::Remote { is_read_only, .. }) = &mut self.client_state { - *is_read_only = - !(role == proto::ChannelRole::Member || role == proto::ChannelRole::Admin) + if let Some(ProjectClientState::Remote { capability, .. }) = &mut self.client_state { + *capability = if role == proto::ChannelRole::Member || role == proto::ChannelRole::Admin + { + Capability::ReadWrite + } else { + Capability::ReadOnly + }; } } @@ -1682,12 +1685,15 @@ impl Project { } } + pub fn capability(&self) -> Capability { + match &self.client_state { + Some(ProjectClientState::Remote { capability, .. }) => *capability, + Some(ProjectClientState::Local { .. }) | None => Capability::ReadWrite, + } + } + pub fn is_read_only(&self) -> bool { - self.is_disconnected() - || match &self.client_state { - Some(ProjectClientState::Remote { is_read_only, .. }) => *is_read_only, - _ => false, - } + self.is_disconnected() || self.capability() == Capability::ReadOnly } pub fn is_local(&self) -> bool { @@ -7215,7 +7221,8 @@ impl Project { let buffer_id = state.id; let buffer = cx.new_model(|_| { - Buffer::from_proto(this.replica_id(), state, buffer_file).unwrap() + Buffer::from_proto(this.replica_id(), this.capability(), state, buffer_file) + .unwrap() }); this.incomplete_remote_buffers .insert(buffer_id, Some(buffer)); diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 6f7d2046d645157d9aa902b7253110af5273ad87..ae0c074188274b95fbed3b078f68378ce715e570 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -32,7 +32,8 @@ use language::{ deserialize_fingerprint, deserialize_version, serialize_fingerprint, serialize_line_ending, serialize_version, }, - Buffer, DiagnosticEntry, File as _, LineEnding, PointUtf16, Rope, RopeFingerprint, Unclipped, + Buffer, Capability, DiagnosticEntry, File as _, LineEnding, PointUtf16, Rope, RopeFingerprint, + Unclipped, }; use lsp::LanguageServerId; use parking_lot::Mutex; @@ -682,7 +683,14 @@ impl LocalWorktree { .background_executor() .spawn(async move { text::Buffer::new(0, id, contents) }) .await; - cx.new_model(|_| Buffer::build(text_buffer, diff_base, Some(Arc::new(file)))) + cx.new_model(|_| { + Buffer::build( + text_buffer, + diff_base, + Some(Arc::new(file)), + Capability::ReadWrite, + ) + }) }) } diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 67aa4955bc692483faafb9b6291e9e8550dac859..351558b6bbcd533d80ded576806bf3883cd0ee23 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -70,7 +70,7 @@ impl BufferSearchBar { fn render_text_input(&self, editor: &View, cx: &ViewContext) -> impl IntoElement { let settings = ThemeSettings::get_global(cx); let text_style = TextStyle { - color: if editor.read(cx).read_only() { + color: if editor.read(cx).read_only(cx) { cx.theme().colors().text_disabled } else { cx.theme().colors().text diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 9a91d619a43cf2cd4e9c024006494f2aa9b19989..94435e8b76a61f9e1e4078a4cf253ee3c5ef6b7c 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -132,9 +132,11 @@ pub struct ProjectSearchBar { impl ProjectSearch { fn new(project: Model, cx: &mut ModelContext) -> Self { let replica_id = project.read(cx).replica_id(); + let capability = project.read(cx).capability(); + Self { project, - excerpts: cx.new_model(|_| MultiBuffer::new(replica_id)), + excerpts: cx.new_model(|_| MultiBuffer::new(replica_id, capability)), pending_search: Default::default(), match_ranges: Default::default(), active_query: None, @@ -1519,7 +1521,7 @@ impl ProjectSearchBar { fn render_text_input(&self, editor: &View, cx: &ViewContext) -> impl IntoElement { let settings = ThemeSettings::get_global(cx); let text_style = TextStyle { - color: if editor.read(cx).read_only() { + color: if editor.read(cx).read_only(cx) { cx.theme().colors().text_disabled } else { cx.theme().colors().text diff --git a/script/sqlx b/script/sqlx index cf2fa8d405f0b108c7131533257a859b842fdfd4..a575efbcb619bced63c5d29b29f4d69c7e1221ae 100755 --- a/script/sqlx +++ b/script/sqlx @@ -8,7 +8,7 @@ set -e cd crates/collab # Export contents of .env.toml -eval "$(cargo run --quiet --bin dotenv)" +eval "$(cargo run --quiet --bin dotenv2)" # Run sqlx command sqlx $@ From 6877bd4969d2b496b08ca80a57040bea69e63c77 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 3 Jan 2024 13:10:59 -0700 Subject: [PATCH 06/74] Make read only buffers feel more read only --- crates/editor/src/editor.rs | 3 ++- crates/editor/src/element.rs | 8 +++++++- crates/gpui/src/color.rs | 9 +++++++++ crates/theme/src/styles/players.rs | 13 +++++++++++-- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 1a0ccba03ce97a9a1943d08aeb788f2978134c07..e3b0e9874bfdc1cadab7abc3f928d997ed46fab3 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -8605,7 +8605,8 @@ impl Editor { } pub fn show_local_cursors(&self, cx: &WindowContext) -> bool { - self.blink_manager.read(cx).visible() && self.focus_handle.is_focused(cx) + (self.read_only(cx) || self.blink_manager.read(cx).visible()) + && self.focus_handle.is_focused(cx) } fn on_buffer_changed(&mut self, _: Model, cx: &mut ViewContext) { diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 2b5c97bac5b1e067db5ff1640752c0bc8a9a489d..368fc4b7ca8f88a26cb1840728c917404c0ef521 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1901,7 +1901,13 @@ impl EditorElement { layouts.push(layout); } - selections.push((style.local_player, layouts)); + let player = if editor.read_only(cx) { + cx.theme().players().read_only() + } else { + style.local_player + }; + + selections.push((player, layouts)); } if let Some(collaboration_hub) = &editor.collaboration_hub { diff --git a/crates/gpui/src/color.rs b/crates/gpui/src/color.rs index df16d2c0b5664f7354cbde90e088be3cf1aee589..dc0f5055e70a123b99a7cc8b746ee69bd23652a3 100644 --- a/crates/gpui/src/color.rs +++ b/crates/gpui/src/color.rs @@ -339,6 +339,15 @@ impl Hsla { } } + pub fn grayscale(&self) -> Self { + Hsla { + h: self.h, + s: 0., + l: self.l, + a: self.a, + } + } + /// Fade out the color by a given factor. This factor should be between 0.0 and 1.0. /// Where 0.0 will leave the color unchanged, and 1.0 will completely fade out the color. pub fn fade_out(&mut self, factor: f32) { diff --git a/crates/theme/src/styles/players.rs b/crates/theme/src/styles/players.rs index 9f9b837e47b8c7e2ccf8b0d870214c382bb9cf28..089de247230341bf89fd40da38a13091e7024368 100644 --- a/crates/theme/src/styles/players.rs +++ b/crates/theme/src/styles/players.rs @@ -1,7 +1,7 @@ -use gpui::Hsla; +use gpui::{hsla, Hsla}; use serde_derive::Deserialize; -use crate::{amber, blue, jade, lime, orange, pink, purple, red}; +use crate::{amber, blue, gray, jade, lime, orange, pink, purple, red}; #[derive(Debug, Clone, Copy, Deserialize, Default)] pub struct PlayerColor { @@ -131,6 +131,15 @@ impl PlayerColors { *self.0.last().unwrap() } + pub fn read_only(&self) -> PlayerColor { + let local = self.local(); + PlayerColor { + cursor: local.cursor.grayscale(), + background: local.background.grayscale(), + selection: local.selection.grayscale(), + } + } + pub fn color_for_participant(&self, participant_index: u32) -> PlayerColor { let len = self.0.len() - 1; self.0[(participant_index as usize % len) + 1] From 9fe17a1d1dd4700679dcb6a753dbca286d8faadb Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 3 Jan 2024 13:48:50 -0700 Subject: [PATCH 07/74] Prevent guests from screen-sharing, unmuting or screen sharing --- crates/call/src/room.rs | 5 ++ crates/collab/src/db/ids.rs | 8 +++ crates/collab/src/db/queries/projects.rs | 7 +++ crates/collab_ui/src/collab_titlebar_item.rs | 64 ++++++++++++-------- crates/live_kit_server/src/token.rs | 1 + 5 files changed, 60 insertions(+), 25 deletions(-) diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index 78e609c73f2f7c83ac701c1bf7795d8992c911c0..03a6b942b212c6766db38a55d75784bae52861ae 100644 --- a/crates/call/src/room.rs +++ b/crates/call/src/room.rs @@ -1251,6 +1251,11 @@ impl Room { .unwrap_or(false) } + pub fn can_publish(&self) -> bool { + self.local_participant().role == proto::ChannelRole::Member + || self.local_participant().role == proto::ChannelRole::Admin + } + pub fn is_speaking(&self) -> bool { self.live_kit .as_ref() diff --git a/crates/collab/src/db/ids.rs b/crates/collab/src/db/ids.rs index 5f0df90811cce78167643d176f41cedc7a2d7d9c..9bb766147f5b0b2084b76665262962179a62e6eb 100644 --- a/crates/collab/src/db/ids.rs +++ b/crates/collab/src/db/ids.rs @@ -132,6 +132,14 @@ impl ChannelRole { Admin | Member | Banned => false, } } + + pub fn can_share_projects(&self) -> bool { + use ChannelRole::*; + match self { + Admin | Member => true, + Guest | Banned => false, + } + } } impl From for ChannelRole { diff --git a/crates/collab/src/db/queries/projects.rs b/crates/collab/src/db/queries/projects.rs index 3e2c00337823a91badeedf183a5598f94f8f2c2a..5b8d54f8d36a746b2c09a77cbf9e75b77b557543 100644 --- a/crates/collab/src/db/queries/projects.rs +++ b/crates/collab/src/db/queries/projects.rs @@ -46,6 +46,13 @@ impl Database { if participant.room_id != room_id { return Err(anyhow!("shared project on unexpected room"))?; } + if !participant + .role + .unwrap_or(ChannelRole::Member) + .can_share_projects() + { + return Err(anyhow!("guests cannot share projects"))?; + } let project = project::ActiveModel { room_id: ActiveValue::set(participant.room_id), diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index 16d8be89af78db45bdcc27b317bffcbfdf66e98e..a3f82b1f5f83944f051e3ea93e46e8fa761dcb82 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -173,8 +173,9 @@ impl Render for CollabTitlebarItem { let is_muted = room.is_muted(cx); let is_deafened = room.is_deafened().unwrap_or(false); let is_screen_sharing = room.is_screen_sharing(); + let can_publish = room.can_publish(); - this.when(is_local, |this| { + this.when(is_local && can_publish, |this| { this.child( Button::new( "toggle_sharing", @@ -203,20 +204,22 @@ impl Render for CollabTitlebarItem { .detach_and_log_err(cx); }), ) - .child( - IconButton::new( - "mute-microphone", - if is_muted { - ui::Icon::MicMute - } else { - ui::Icon::Mic - }, + .when(can_publish, |this| { + this.child( + IconButton::new( + "mute-microphone", + if is_muted { + ui::Icon::MicMute + } else { + ui::Icon::Mic + }, + ) + .style(ButtonStyle::Subtle) + .icon_size(IconSize::Small) + .selected(is_muted) + .on_click(move |_, cx| crate::toggle_mute(&Default::default(), cx)), ) - .style(ButtonStyle::Subtle) - .icon_size(IconSize::Small) - .selected(is_muted) - .on_click(move |_, cx| crate::toggle_mute(&Default::default(), cx)), - ) + }) .child( IconButton::new( "mute-sound", @@ -230,19 +233,30 @@ impl Render for CollabTitlebarItem { .icon_size(IconSize::Small) .selected(is_deafened) .tooltip(move |cx| { - Tooltip::with_meta("Deafen Audio", None, "Mic will be muted", cx) + if can_publish { + Tooltip::with_meta( + "Deafen Audio", + None, + "Mic will be muted", + cx, + ) + } else { + Tooltip::text("Deafen Audio", cx) + } }) - .on_click(move |_, cx| crate::toggle_mute(&Default::default(), cx)), - ) - .child( - IconButton::new("screen-share", ui::Icon::Screen) - .style(ButtonStyle::Subtle) - .icon_size(IconSize::Small) - .selected(is_screen_sharing) - .on_click(move |_, cx| { - crate::toggle_screen_sharing(&Default::default(), cx) - }), + .on_click(move |_, cx| crate::toggle_deafen(&Default::default(), cx)), ) + .when(can_publish, |this| { + this.child( + IconButton::new("screen-share", ui::Icon::Screen) + .style(ButtonStyle::Subtle) + .icon_size(IconSize::Small) + .selected(is_screen_sharing) + .on_click(move |_, cx| { + crate::toggle_screen_sharing(&Default::default(), cx) + }), + ) + }) }) .map(|el| { let status = self.client.status(); diff --git a/crates/live_kit_server/src/token.rs b/crates/live_kit_server/src/token.rs index b98f5892aea9ead8472b614da8491bdf7f2a38b4..a2ca19ad20e42b1ad8ef0dc783cfaf4ac42269d0 100644 --- a/crates/live_kit_server/src/token.rs +++ b/crates/live_kit_server/src/token.rs @@ -62,6 +62,7 @@ impl<'a> VideoGrant<'a> { Self { room: Some(Cow::Borrowed(room)), room_join: Some(true), + can_publish: Some(false), can_subscribe: Some(true), ..Default::default() } From c3402024bca4737ce101b75c4ff371170b81281d Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 3 Jan 2024 14:05:22 -0700 Subject: [PATCH 08/74] Fix privilege escalation when guests invite people --- crates/collab/src/db/queries/rooms.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/crates/collab/src/db/queries/rooms.rs b/crates/collab/src/db/queries/rooms.rs index ee2b0519e30f0c56f41b89dc4012ab7968babda6..af554955a1d5de745df0c000b47c0a8230107689 100644 --- a/crates/collab/src/db/queries/rooms.rs +++ b/crates/collab/src/db/queries/rooms.rs @@ -156,6 +156,24 @@ impl Database { initial_project_id: Option, ) -> Result> { self.room_transaction(room_id, |tx| async move { + let room = self.get_room(room_id, &tx).await?; + + let caller = room_participant::Entity::find() + .filter( + room_participant::Column::UserId + .eq(calling_user_id) + .and(room_participant::Column::RoomId.eq(room_id)), + ) + .one(&*tx) + .await? + .ok_or_else(|| anyhow!("user is not in the room"))?; + + let called_user_role = match caller.role.unwrap_or(ChannelRole::Member) { + ChannelRole::Admin | ChannelRole::Member => ChannelRole::Member, + ChannelRole::Guest => ChannelRole::Guest, + ChannelRole::Banned => return Err(anyhow!("banned users cannot invite").into()), + }; + room_participant::ActiveModel { room_id: ActiveValue::set(room_id), user_id: ActiveValue::set(called_user_id), @@ -167,7 +185,7 @@ impl Database { calling_connection.owner_id as i32, ))), initial_project_id: ActiveValue::set(initial_project_id), - role: ActiveValue::set(Some(ChannelRole::Member)), + role: ActiveValue::set(Some(called_user_role)), id: ActiveValue::NotSet, answering_connection_id: ActiveValue::NotSet, @@ -178,7 +196,6 @@ impl Database { .insert(&*tx) .await?; - let room = self.get_room(room_id, &tx).await?; let incoming_call = Self::build_incoming_call(&room, called_user_id) .ok_or_else(|| anyhow!("failed to build incoming call"))?; Ok((room, incoming_call)) From 1930258d397acc516a6ba6a2edd2e08b49b13fc1 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 3 Jan 2024 14:44:09 -0700 Subject: [PATCH 09/74] Show guests in fewer places --- crates/call/src/participant.rs | 1 + crates/call/src/room.rs | 19 ++++- .../collab/src/tests/channel_guest_tests.rs | 8 +- crates/collab_ui/src/channel_view.rs | 2 +- crates/collab_ui/src/collab_panel.rs | 77 ++++++++++++++++--- crates/collab_ui/src/collab_titlebar_item.rs | 15 ++-- crates/theme/src/styles/players.rs | 4 +- 7 files changed, 100 insertions(+), 26 deletions(-) diff --git a/crates/call/src/participant.rs b/crates/call/src/participant.rs index 5f3d2827f821ec36b5cdfb63d3b8cd8247fb455e..9faefc63c36975757f2ef45006bfebe7394b986a 100644 --- a/crates/call/src/participant.rs +++ b/crates/call/src/participant.rs @@ -43,6 +43,7 @@ pub struct LocalParticipant { pub struct RemoteParticipant { pub user: Arc, pub peer_id: proto::PeerId, + pub role: proto::ChannelRole, pub projects: Vec, pub location: ParticipantLocation, pub participant_index: ParticipantIndex, diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index 03a6b942b212c6766db38a55d75784bae52861ae..4561e6d807fa3047f9a2e0c0f7663d7e72a4c1ce 100644 --- a/crates/call/src/room.rs +++ b/crates/call/src/room.rs @@ -610,6 +610,12 @@ impl Room { .find(|p| p.peer_id == peer_id) } + pub fn role_for_user(&self, user_id: u64) -> Option { + self.remote_participants + .get(&user_id) + .map(|participant| participant.role) + } + pub fn pending_participants(&self) -> &[Arc] { &self.pending_participants } @@ -784,6 +790,7 @@ impl Room { }); } + let role = participant.role(); let location = ParticipantLocation::from_proto(participant.location) .unwrap_or(ParticipantLocation::External); if let Some(remote_participant) = @@ -792,8 +799,11 @@ impl Room { remote_participant.peer_id = peer_id; remote_participant.projects = participant.projects; remote_participant.participant_index = participant_index; - if location != remote_participant.location { + if location != remote_participant.location + || role != remote_participant.role + { remote_participant.location = location; + remote_participant.role = role; cx.emit(Event::ParticipantLocationChanged { participant_id: peer_id, }); @@ -807,6 +817,7 @@ impl Room { peer_id, projects: participant.projects, location, + role, muted: true, speaking: false, video_tracks: Default::default(), @@ -1251,9 +1262,9 @@ impl Room { .unwrap_or(false) } - pub fn can_publish(&self) -> bool { - self.local_participant().role == proto::ChannelRole::Member - || self.local_participant().role == proto::ChannelRole::Admin + pub fn read_only(&self) -> bool { + !(self.local_participant().role == proto::ChannelRole::Member + || self.local_participant().role == proto::ChannelRole::Admin) } pub fn is_speaking(&self) -> bool { diff --git a/crates/collab/src/tests/channel_guest_tests.rs b/crates/collab/src/tests/channel_guest_tests.rs index 78dd57be026913b3299efe2e1c35a94a5ea798ad..e2051c44a038ced0724b616ac4e3b4cd851b4508 100644 --- a/crates/collab/src/tests/channel_guest_tests.rs +++ b/crates/collab/src/tests/channel_guest_tests.rs @@ -7,8 +7,8 @@ use workspace::Workspace; #[gpui::test] async fn test_channel_guests( executor: BackgroundExecutor, - mut cx_a: &mut TestAppContext, - mut cx_b: &mut TestAppContext, + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, ) { let mut server = TestServer::start(executor.clone()).await; let client_a = server.create_client(cx_a, "user_a").await; @@ -37,15 +37,13 @@ async fn test_channel_guests( .await; let active_call_a = cx_a.read(ActiveCall::global); - let active_call_b = cx_b.read(ActiveCall::global); // Client A shares a project in the channel active_call_a .update(cx_a, |call, cx| call.join_channel(channel_id, cx)) .await .unwrap(); - let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; - let worktree_a = project_a.read_with(cx_a, |project, _| project.worktrees().next().unwrap()); + let (project_a, _) = client_a.build_local_project("/a", cx_a).await; let project_id = active_call_a .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) .await diff --git a/crates/collab_ui/src/channel_view.rs b/crates/collab_ui/src/channel_view.rs index 27873b1067637e8d6c001bc50b0b4c99dde782f9..ce68acfbd83379e77c298152aa95b51280883e0c 100644 --- a/crates/collab_ui/src/channel_view.rs +++ b/crates/collab_ui/src/channel_view.rs @@ -172,7 +172,7 @@ impl ChannelView { cx.notify(); }), ChannelBufferEvent::ChannelChanged => { - self.editor.update(cx, |editor, cx| { + self.editor.update(cx, |_, cx| { cx.emit(editor::EditorEvent::TitleChanged); cx.notify() }); diff --git a/crates/collab_ui/src/collab_panel.rs b/crates/collab_ui/src/collab_panel.rs index 3ed07e5bd1b8b3985f58d8ca89dd04e676f5425a..457a31ff5d01bc3838ba0ae5f252dcc1b89b823f 100644 --- a/crates/collab_ui/src/collab_panel.rs +++ b/crates/collab_ui/src/collab_panel.rs @@ -151,6 +151,9 @@ enum ListEntry { peer_id: Option, is_last: bool, }, + GuestCount { + count: usize, + }, IncomingRequest(Arc), OutgoingRequest(Arc), ChannelInvite(Arc), @@ -380,10 +383,13 @@ impl CollabPanel { if !self.collapsed_sections.contains(&Section::ActiveCall) { let room = room.read(cx); + let mut guest_count_ix = 0; + let mut guest_count = if room.read_only() { 1 } else { 0 }; if let Some(channel_id) = room.channel_id() { self.entries.push(ListEntry::ChannelNotes { channel_id }); - self.entries.push(ListEntry::ChannelChat { channel_id }) + self.entries.push(ListEntry::ChannelChat { channel_id }); + guest_count_ix = self.entries.len(); } // Populate the active user. @@ -402,7 +408,7 @@ impl CollabPanel { &Default::default(), executor.clone(), )); - if !matches.is_empty() { + if !matches.is_empty() && !room.read_only() { let user_id = user.id; self.entries.push(ListEntry::CallParticipant { user, @@ -430,13 +436,21 @@ impl CollabPanel { // Populate remote participants. self.match_candidates.clear(); self.match_candidates - .extend(room.remote_participants().iter().map(|(_, participant)| { - StringMatchCandidate { - id: participant.user.id as usize, - string: participant.user.github_login.clone(), - char_bag: participant.user.github_login.chars().collect(), - } - })); + .extend( + room.remote_participants() + .iter() + .filter_map(|(_, participant)| { + if participant.role == proto::ChannelRole::Guest { + guest_count += 1; + return None; + } + Some(StringMatchCandidate { + id: participant.user.id as usize, + string: participant.user.github_login.clone(), + char_bag: participant.user.github_login.chars().collect(), + }) + }), + ); let matches = executor.block(match_strings( &self.match_candidates, &query, @@ -470,6 +484,10 @@ impl CollabPanel { }); } } + if guest_count > 0 { + self.entries + .insert(guest_count_ix, ListEntry::GuestCount { count: guest_count }); + } // Populate pending participants. self.match_candidates.clear(); @@ -959,6 +977,34 @@ impl CollabPanel { .tooltip(move |cx| Tooltip::text("Open Chat", cx)) } + fn render_guest_count( + &self, + count: usize, + is_selected: bool, + cx: &mut ViewContext, + ) -> impl IntoElement { + // TODO! disable manage_members for guests. + ListItem::new("guest_count") + .selected(is_selected) + .on_click(cx.listener(move |this, _, cx| { + if let Some(channel_id) = ActiveCall::global(cx).read(cx).channel_id(cx) { + this.manage_members(channel_id, cx) + } + })) + .start_slot( + h_stack() + .gap_1() + .child(render_tree_branch(false, cx)) + .child(""), + ) + .child(Label::new(if count == 1 { + format!("{} guest", count) + } else { + format!("{} guests", count) + })) + .tooltip(move |cx| Tooltip::text("Manage Members", cx)) + } + fn has_subchannels(&self, ix: usize) -> bool { self.entries.get(ix).map_or(false, |entry| { if let ListEntry::Channel { has_children, .. } = entry { @@ -1180,6 +1226,11 @@ impl CollabPanel { }); } } + ListEntry::GuestCount { .. } => { + if let Some(channel_id) = ActiveCall::global(cx).read(cx).channel_id(cx) { + self.manage_members(channel_id, cx) + } + } ListEntry::Channel { channel, .. } => { let is_active = maybe!({ let call_channel = ActiveCall::global(cx) @@ -1735,6 +1786,9 @@ impl CollabPanel { ListEntry::ParticipantScreen { peer_id, is_last } => self .render_participant_screen(*peer_id, *is_last, is_selected, cx) .into_any_element(), + ListEntry::GuestCount { count } => self + .render_guest_count(*count, is_selected, cx) + .into_any_element(), ListEntry::ChannelNotes { channel_id } => self .render_channel_notes(*channel_id, is_selected, cx) .into_any_element(), @@ -2504,6 +2558,11 @@ impl PartialEq for ListEntry { return true; } } + ListEntry::GuestCount { .. } => { + if let ListEntry::GuestCount { .. } = other { + return true; + } + } } false } diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index a3f82b1f5f83944f051e3ea93e46e8fa761dcb82..81a71da27ed4dfd4f38dc227c6609a1a063f15a5 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -10,6 +10,7 @@ use gpui::{ }; use project::{Project, RepositoryEntry}; use recent_projects::RecentProjects; +use rpc::proto; use std::sync::Arc; use theme::{ActiveTheme, PlayerColors}; use ui::{ @@ -173,9 +174,9 @@ impl Render for CollabTitlebarItem { let is_muted = room.is_muted(cx); let is_deafened = room.is_deafened().unwrap_or(false); let is_screen_sharing = room.is_screen_sharing(); - let can_publish = room.can_publish(); + let read_only = room.read_only(); - this.when(is_local && can_publish, |this| { + this.when(is_local && !read_only, |this| { this.child( Button::new( "toggle_sharing", @@ -204,7 +205,7 @@ impl Render for CollabTitlebarItem { .detach_and_log_err(cx); }), ) - .when(can_publish, |this| { + .when(!read_only, |this| { this.child( IconButton::new( "mute-microphone", @@ -233,7 +234,7 @@ impl Render for CollabTitlebarItem { .icon_size(IconSize::Small) .selected(is_deafened) .tooltip(move |cx| { - if can_publish { + if !read_only { Tooltip::with_meta( "Deafen Audio", None, @@ -246,7 +247,7 @@ impl Render for CollabTitlebarItem { }) .on_click(move |_, cx| crate::toggle_deafen(&Default::default(), cx)), ) - .when(can_publish, |this| { + .when(!read_only, |this| { this.child( IconButton::new("screen-share", ui::Icon::Screen) .style(ButtonStyle::Subtle) @@ -420,6 +421,10 @@ impl CollabTitlebarItem { project_id: Option, current_user: &Arc, ) -> Option { + if room.role_for_user(user.id) == Some(proto::ChannelRole::Guest) { + return None; + } + let followers = project_id.map_or(&[] as &[_], |id| room.followers_for(peer_id, id)); let pile = FacePile::default() diff --git a/crates/theme/src/styles/players.rs b/crates/theme/src/styles/players.rs index 089de247230341bf89fd40da38a13091e7024368..d4d27e71237b0968d4642a92399dca754dada77e 100644 --- a/crates/theme/src/styles/players.rs +++ b/crates/theme/src/styles/players.rs @@ -1,7 +1,7 @@ -use gpui::{hsla, Hsla}; +use gpui::Hsla; use serde_derive::Deserialize; -use crate::{amber, blue, gray, jade, lime, orange, pink, purple, red}; +use crate::{amber, blue, jade, lime, orange, pink, purple, red}; #[derive(Debug, Clone, Copy, Deserialize, Default)] pub struct PlayerColor { From 26a4b6af0b26e3ec2560f6eb5dfd202b6cb8c8f1 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 3 Jan 2024 19:54:20 -0700 Subject: [PATCH 10/74] Disable Dangerous Downtime-causing Default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to https://docs.digitalocean.com/products/kubernetes/how-to/configure-load-balancers/#ssl-certificates you can specify whether to disable automatic DNS record creation for the certificate upon the load balancer’s creation using the do-loadbalancer-disable-lets-encrypt-dns-records annotation. If you specify true, we will not automatically create a DNS A record at the apex of your domain to support the SSL certificate. --- crates/collab/k8s/collab.template.yml | 1 + crates/collab/k8s/postgrest.template.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/crates/collab/k8s/collab.template.yml b/crates/collab/k8s/collab.template.yml index e406bf463036bed8f6d031db1176985c6b700cd1..a9dc0c383ecc4db5508e3ef095ed459b0736cb01 100644 --- a/crates/collab/k8s/collab.template.yml +++ b/crates/collab/k8s/collab.template.yml @@ -13,6 +13,7 @@ metadata: annotations: service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443" service.beta.kubernetes.io/do-loadbalancer-certificate-id: ${ZED_DO_CERTIFICATE_ID} + service.beta.kubernetes.io/do-loadbalancer-disable-lets-encrypt-dns-records: true spec: type: LoadBalancer selector: diff --git a/crates/collab/k8s/postgrest.template.yml b/crates/collab/k8s/postgrest.template.yml index e2d11a2cd282fcc5a77f6b6eb4d0ab6dea811855..d366108c344df8c08aace599527642dc5d2c5e40 100644 --- a/crates/collab/k8s/postgrest.template.yml +++ b/crates/collab/k8s/postgrest.template.yml @@ -7,6 +7,7 @@ metadata: annotations: service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443" service.beta.kubernetes.io/do-loadbalancer-certificate-id: ${ZED_DO_CERTIFICATE_ID} + service.beta.kubernetes.io/do-loadbalancer-disable-lets-encrypt-dns-records: true spec: type: LoadBalancer selector: From 5c32dd5688cd4e613b18890d926405276c0ad76d Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 3 Jan 2024 22:05:35 -0700 Subject: [PATCH 11/74] Better TestWindow support --- Cargo.lock | 2 +- crates/gpui/src/app/test_context.rs | 132 ++++------------- crates/gpui/src/platform/test/platform.rs | 16 ++- crates/gpui/src/platform/test/window.rs | 165 ++++++++++++++++++---- 4 files changed, 171 insertions(+), 144 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d0af3c00876104d2f8554ee43ed757689bce281..13d4be62337ae0557fbc59538db4a4bdceacd22e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9514,7 +9514,7 @@ dependencies = [ [[package]] name = "zed" -version = "0.119.0" +version = "0.120.0" dependencies = [ "activity_indicator", "ai", diff --git a/crates/gpui/src/app/test_context.rs b/crates/gpui/src/app/test_context.rs index 44f303ac0bebfde1ded9c4deb1eebef40ad06633..dfbffaf2e59282f2878bf3aee7cea5aeac0d09fa 100644 --- a/crates/gpui/src/app/test_context.rs +++ b/crates/gpui/src/app/test_context.rs @@ -1,14 +1,13 @@ use crate::{ div, Action, AnyView, AnyWindowHandle, AppCell, AppContext, AsyncAppContext, - BackgroundExecutor, Bounds, ClipboardItem, Context, Entity, EventEmitter, ForegroundExecutor, - InputEvent, IntoElement, KeyDownEvent, Keystroke, Model, ModelContext, Pixels, Platform, - PlatformWindow, Point, Render, Result, Size, Task, TestDispatcher, TestPlatform, TestWindow, - TestWindowHandlers, TextSystem, View, ViewContext, VisualContext, WindowBounds, WindowContext, - WindowHandle, WindowOptions, + BackgroundExecutor, ClipboardItem, Context, Entity, EventEmitter, ForegroundExecutor, + IntoElement, Keystroke, Model, ModelContext, Pixels, Platform, Render, Result, Size, Task, + TestDispatcher, TestPlatform, TestWindow, TextSystem, View, ViewContext, VisualContext, + WindowContext, WindowHandle, WindowOptions, }; use anyhow::{anyhow, bail}; use futures::{Stream, StreamExt}; -use std::{future::Future, mem, ops::Deref, rc::Rc, sync::Arc, time::Duration}; +use std::{future::Future, ops::Deref, rc::Rc, sync::Arc, time::Duration}; #[derive(Clone)] pub struct TestAppContext { @@ -185,42 +184,7 @@ impl TestAppContext { } pub fn simulate_window_resize(&self, window_handle: AnyWindowHandle, size: Size) { - let (mut handlers, scale_factor) = self - .app - .borrow_mut() - .update_window(window_handle, |_, cx| { - let platform_window = cx.window.platform_window.as_test().unwrap(); - let scale_factor = platform_window.scale_factor(); - match &mut platform_window.bounds { - WindowBounds::Fullscreen | WindowBounds::Maximized => { - platform_window.bounds = WindowBounds::Fixed(Bounds { - origin: Point::default(), - size: size.map(|pixels| f64::from(pixels).into()), - }); - } - WindowBounds::Fixed(bounds) => { - bounds.size = size.map(|pixels| f64::from(pixels).into()); - } - } - - ( - mem::take(&mut platform_window.handlers.lock().resize), - scale_factor, - ) - }) - .unwrap(); - - for handler in &mut handlers { - handler(size, scale_factor); - } - - self.app - .borrow_mut() - .update_window(window_handle, |_, cx| { - let platform_window = cx.window.platform_window.as_test().unwrap(); - platform_window.handlers.lock().resize = handlers; - }) - .unwrap(); + self.test_window(window_handle).simulate_resize(size); } pub fn spawn(&self, f: impl FnOnce(AsyncAppContext) -> Fut) -> Task @@ -313,41 +277,22 @@ impl TestAppContext { keystroke: Keystroke, is_held: bool, ) { - let keystroke2 = keystroke.clone(); - let handled = window - .update(self, |_, cx| { - cx.dispatch_event(InputEvent::KeyDown(KeyDownEvent { keystroke, is_held })) - }) - .is_ok_and(|handled| handled); - if handled { - return; - } - - let input_handler = self.update_test_window(window, |window| window.input_handler.clone()); - let Some(input_handler) = input_handler else { - panic!( - "dispatch_keystroke {:?} failed to dispatch action or input", - &keystroke2 - ); - }; - let text = keystroke2.ime_key.unwrap_or(keystroke2.key); - input_handler.lock().replace_text_in_range(None, &text); + self.test_window(window) + .simulate_keystroke(keystroke, is_held) } - pub fn update_test_window( - &mut self, - window: AnyWindowHandle, - f: impl FnOnce(&mut TestWindow) -> R, - ) -> R { - window - .update(self, |_, cx| { - f(cx.window - .platform_window - .as_any_mut() - .downcast_mut::() - .unwrap()) - }) + pub fn test_window(&self, window: AnyWindowHandle) -> TestWindow { + self.app + .borrow_mut() + .windows + .get_mut(window.id) + .unwrap() + .as_mut() .unwrap() + .platform_window + .as_test() + .unwrap() + .clone() } pub fn notifications(&mut self, entity: &impl Entity) -> impl Stream { @@ -563,11 +508,7 @@ impl<'a> VisualTestContext<'a> { } pub fn window_title(&mut self) -> Option { - self.cx - .update_window(self.window, |_, cx| { - cx.window.platform_window.as_test().unwrap().title.clone() - }) - .unwrap() + self.cx.test_window(self.window).0.lock().title.clone() } pub fn simulate_keystrokes(&mut self, keystrokes: &str) { @@ -579,36 +520,15 @@ impl<'a> VisualTestContext<'a> { } pub fn simulate_activation(&mut self) { - self.simulate_window_events(&mut |handlers| { - handlers - .active_status_change - .iter_mut() - .for_each(|f| f(true)); - }) + self.cx + .test_window(self.window) + .simulate_active_status_change(true) } pub fn simulate_deactivation(&mut self) { - self.simulate_window_events(&mut |handlers| { - handlers - .active_status_change - .iter_mut() - .for_each(|f| f(false)); - }) - } - - fn simulate_window_events(&mut self, f: &mut dyn FnMut(&mut TestWindowHandlers)) { - let handlers = self - .cx - .update_window(self.window, |_, cx| { - cx.window - .platform_window - .as_test() - .unwrap() - .handlers - .clone() - }) - .unwrap(); - f(&mut *handlers.lock()); + self.cx + .test_window(self.window) + .simulate_active_status_change(false) } } diff --git a/crates/gpui/src/platform/test/platform.rs b/crates/gpui/src/platform/test/platform.rs index cc683cacb68f0e471ef9b1fa5596581d81d3d0f3..889e8b971e9232ad2d64baf01104758a4af6575a 100644 --- a/crates/gpui/src/platform/test/platform.rs +++ b/crates/gpui/src/platform/test/platform.rs @@ -19,7 +19,7 @@ pub struct TestPlatform { background_executor: BackgroundExecutor, foreground_executor: ForegroundExecutor, - active_window: Arc>>, + pub(crate) active_window: RefCell>, active_display: Rc, active_cursor: Mutex, current_clipboard_item: Mutex>, @@ -106,7 +106,7 @@ impl Platform for TestPlatform { } fn activate(&self, _ignoring_other_apps: bool) { - unimplemented!() + // } fn hide(&self) { @@ -130,7 +130,10 @@ impl Platform for TestPlatform { } fn active_window(&self) -> Option { - self.active_window.lock().clone() + self.active_window + .borrow() + .as_ref() + .map(|window| window.0.lock().handle) } fn open_window( @@ -139,12 +142,13 @@ impl Platform for TestPlatform { options: WindowOptions, _draw: Box Result>, ) -> Box { - *self.active_window.lock() = Some(handle); - Box::new(TestWindow::new( + let window = TestWindow::new( options, + handle, self.weak.clone(), self.active_display.clone(), - )) + ); + Box::new(window) } fn set_display_link_output_callback( diff --git a/crates/gpui/src/platform/test/window.rs b/crates/gpui/src/platform/test/window.rs index 9df513d1f7ea46b0dffb452d27dbd82f5aba2176..eee2cf93c76515b176a811fc0f985f4b69dc7daa 100644 --- a/crates/gpui/src/platform/test/window.rs +++ b/crates/gpui/src/platform/test/window.rs @@ -1,7 +1,8 @@ use crate::{ - px, AtlasKey, AtlasTextureId, AtlasTile, Pixels, PlatformAtlas, PlatformDisplay, - PlatformInputHandler, PlatformWindow, Point, Size, TestPlatform, TileId, WindowAppearance, - WindowBounds, WindowOptions, + px, AnyWindowHandle, AtlasKey, AtlasTextureId, AtlasTile, Bounds, InputEvent, KeyDownEvent, + Keystroke, Pixels, Platform, PlatformAtlas, PlatformDisplay, PlatformInputHandler, + PlatformWindow, Point, Size, TestPlatform, TileId, WindowAppearance, WindowBounds, + WindowOptions, }; use collections::HashMap; use parking_lot::Mutex; @@ -10,51 +11,122 @@ use std::{ sync::{self, Arc}, }; -#[derive(Default)] -pub(crate) struct TestWindowHandlers { - pub(crate) active_status_change: Vec>, - pub(crate) input: Vec bool>>, - pub(crate) moved: Vec>, - pub(crate) resize: Vec, f32)>>, -} - -pub struct TestWindow { +pub struct TestWindowState { pub(crate) bounds: WindowBounds, + pub(crate) handle: AnyWindowHandle, display: Rc, pub(crate) title: Option, pub(crate) edited: bool, - pub(crate) input_handler: Option>>>, - pub(crate) handlers: Arc>, platform: Weak, sprite_atlas: Arc, + + input_callback: Option bool>>, + active_status_change_callback: Option>, + resize_callback: Option, f32)>>, + moved_callback: Option>, + input_handler: Option>, } +#[derive(Clone)] +pub struct TestWindow(pub(crate) Arc>); + impl TestWindow { pub fn new( options: WindowOptions, + handle: AnyWindowHandle, platform: Weak, display: Rc, ) -> Self { - Self { + Self(Arc::new(Mutex::new(TestWindowState { bounds: options.bounds, display, platform, - input_handler: None, + handle, sprite_atlas: Arc::new(TestAtlas::new()), - handlers: Default::default(), title: Default::default(), edited: false, + + input_callback: None, + active_status_change_callback: None, + resize_callback: None, + moved_callback: None, + input_handler: None, + }))) + } + + pub fn simulate_resize(&mut self, size: Size) { + let scale_factor = self.scale_factor(); + let mut lock = self.0.lock(); + let Some(mut callback) = lock.resize_callback.take() else { + return; + }; + match &mut lock.bounds { + WindowBounds::Fullscreen | WindowBounds::Maximized => { + lock.bounds = WindowBounds::Fixed(Bounds { + origin: Point::default(), + size: size.map(|pixels| f64::from(pixels).into()), + }); + } + WindowBounds::Fixed(bounds) => { + bounds.size = size.map(|pixels| f64::from(pixels).into()); + } } + drop(lock); + callback(size, scale_factor); + self.0.lock().resize_callback = Some(callback); + } + + pub fn simulate_active_status_change(&self, active: bool) { + let mut lock = self.0.lock(); + let Some(mut callback) = lock.active_status_change_callback.take() else { + return; + }; + drop(lock); + callback(active); + self.0.lock().active_status_change_callback = Some(callback); + } + + pub fn simulate_input(&mut self, event: InputEvent) -> bool { + let mut lock = self.0.lock(); + let Some(mut callback) = lock.input_callback.take() else { + return false; + }; + drop(lock); + let result = callback(event); + self.0.lock().input_callback = Some(callback); + result + } + + pub fn simulate_keystroke(&mut self, keystroke: Keystroke, is_held: bool) { + if self.simulate_input(InputEvent::KeyDown(KeyDownEvent { + keystroke: keystroke.clone(), + is_held, + })) { + return; + } + + let mut lock = self.0.lock(); + let Some(mut input_handler) = lock.input_handler.take() else { + panic!( + "simulate_keystroke {:?} input event was not handled and there was no active input", + &keystroke + ); + }; + drop(lock); + let text = keystroke.ime_key.unwrap_or(keystroke.key); + input_handler.replace_text_in_range(None, &text); + + self.0.lock().input_handler = Some(input_handler); } } impl PlatformWindow for TestWindow { fn bounds(&self) -> WindowBounds { - self.bounds + self.0.lock().bounds } fn content_size(&self) -> Size { - let bounds = match self.bounds { + let bounds = match self.bounds() { WindowBounds::Fixed(bounds) => bounds, WindowBounds::Maximized | WindowBounds::Fullscreen => self.display().bounds(), }; @@ -74,7 +146,7 @@ impl PlatformWindow for TestWindow { } fn display(&self) -> std::rc::Rc { - self.display.clone() + self.0.lock().display.clone() } fn mouse_position(&self) -> Point { @@ -90,11 +162,11 @@ impl PlatformWindow for TestWindow { } fn set_input_handler(&mut self, input_handler: Box) { - self.input_handler = Some(Arc::new(Mutex::new(input_handler))); + self.0.lock().input_handler = Some(input_handler); } fn clear_input_handler(&mut self) { - self.input_handler = None; + self.0.lock().input_handler = None; } fn prompt( @@ -103,19 +175,50 @@ impl PlatformWindow for TestWindow { _msg: &str, _answers: &[&str], ) -> futures::channel::oneshot::Receiver { - self.platform.upgrade().expect("platform dropped").prompt() + self.0 + .lock() + .platform + .upgrade() + .expect("platform dropped") + .prompt() } fn activate(&self) { - unimplemented!() + let this = self.clone(); + let executor = self + .0 + .lock() + .platform + .upgrade() + .unwrap() + .foreground_executor() + .clone(); + + executor + .spawn(async move { + let state = this.0.lock(); + let platform = state.platform.upgrade().unwrap(); + let previous_window = platform.active_window.borrow_mut().replace(this.clone()); + drop(state); + drop(platform); + if let Some(previous_window) = previous_window { + if Arc::ptr_eq(&previous_window.0, &this.0) { + return; + } + previous_window.simulate_active_status_change(false); + } + + this.simulate_active_status_change(true); + }) + .detach(); } fn set_title(&mut self, title: &str) { - self.title = Some(title.to_owned()); + self.0.lock().title = Some(title.to_owned()); } fn set_edited(&mut self, edited: bool) { - self.edited = edited; + self.0.lock().edited = edited; } fn show_character_palette(&self) { @@ -135,15 +238,15 @@ impl PlatformWindow for TestWindow { } fn on_input(&self, callback: Box bool>) { - self.handlers.lock().input.push(callback) + self.0.lock().input_callback = Some(callback) } fn on_active_status_change(&self, callback: Box) { - self.handlers.lock().active_status_change.push(callback) + self.0.lock().active_status_change_callback = Some(callback) } fn on_resize(&self, callback: Box, f32)>) { - self.handlers.lock().resize.push(callback) + self.0.lock().resize_callback = Some(callback) } fn on_fullscreen(&self, _callback: Box) { @@ -151,7 +254,7 @@ impl PlatformWindow for TestWindow { } fn on_moved(&self, callback: Box) { - self.handlers.lock().moved.push(callback) + self.0.lock().moved_callback = Some(callback) } fn on_should_close(&self, _callback: Box bool>) { @@ -175,7 +278,7 @@ impl PlatformWindow for TestWindow { } fn sprite_atlas(&self) -> sync::Arc { - self.sprite_atlas.clone() + self.0.lock().sprite_atlas.clone() } fn as_test(&mut self) -> Option<&mut TestWindow> { From 3ab20626147a0bbe4739e6bdb8faf8ee78137b22 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 4 Jan 2024 16:15:32 +0100 Subject: [PATCH 12/74] Fix border rendering After implementing it a while ago, our previous interpolation scheme didn't really make sense to me and was causing borders to be rendered incorrectly. We don't really draw backgrounds and borders as part of the same draw call anymore, but it seemed reasonable to have a correct implementation in the shader anyway. This commit uses Porter-Duff compositing (i.e., `over`) to produce a color that is the result of superimposing the border on top of the background. Then, we linearly interpolate towards the background color as we slide out of the border and into the background. --- crates/gpui/src/platform/mac/shaders.metal | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/crates/gpui/src/platform/mac/shaders.metal b/crates/gpui/src/platform/mac/shaders.metal index aba01b9d5b059da1c1df55c0a01120d8be10775b..264fa55134bb39db7c45541434a4126afac87116 100644 --- a/crates/gpui/src/platform/mac/shaders.metal +++ b/crates/gpui/src/platform/mac/shaders.metal @@ -16,6 +16,7 @@ float gaussian(float x, float sigma); float2 erf(float2 x); float blur_along_x(float x, float y, float sigma, float corner, float2 half_size); +float4 over(float4 below, float4 above); struct QuadVertexOutput { float4 position [[position]]; @@ -108,21 +109,11 @@ fragment float4 quad_fragment(QuadFragmentInput input [[stage_in]], color = input.background_color; } else { float inset_distance = distance + border_width; - - // Decrease border's opacity as we move inside the background. - input.border_color.a *= 1. - saturate(0.5 - inset_distance); - - // Alpha-blend the border and the background. - float output_alpha = input.border_color.a + - input.background_color.a * (1. - input.border_color.a); - float3 premultiplied_border_rgb = - input.border_color.rgb * input.border_color.a; - float3 premultiplied_background_rgb = - input.background_color.rgb * input.background_color.a; - float3 premultiplied_output_rgb = - premultiplied_border_rgb + - premultiplied_background_rgb * (1. - input.border_color.a); - color = float4(premultiplied_output_rgb, output_alpha); + // Blend the border on top of the background and then linearly interpolate + // between the two as we slide inside the background. + float4 blended_border = over(input.background_color, input.border_color); + color = mix(blended_border, input.background_color, + saturate(0.5 - inset_distance)); } return color * float4(1., 1., 1., saturate(0.5 - distance)); @@ -653,3 +644,12 @@ float4 distance_from_clip_rect(float2 unit_vertex, Bounds_ScaledPixels bounds, position.y - clip_bounds.origin.y, clip_bounds.origin.y + clip_bounds.size.height - position.y); } + +float4 over(float4 below, float4 above) { + float4 result; + float alpha = above.a + below.a * (1.0 - above.a); + result.rgb = + (above.rgb * above.a + below.rgb * below.a * (1.0 - above.a)) / alpha; + result.a = alpha; + return result; +} From 5a1509ef269b608f95d7f73355f533ead852de72 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 4 Jan 2024 16:37:13 +0100 Subject: [PATCH 13/74] Re-enable key bindings for `AssistantPanel` --- crates/assistant/src/assistant_panel.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 3625b64e32ee52d1efad6d4c043c5147b2777ffc..9221d87f60fda92990997a1401bf54325a099c6b 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -1157,6 +1157,7 @@ impl Render for AssistantPanel { }); v_stack() + .key_context("AssistantPanel") .size_full() .on_action(cx.listener(|this, _: &workspace::NewFile, cx| { this.new_conversation(cx); From 9d146a2a6f75c4c59f0e494c76196016399b61da Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 08:59:31 -0700 Subject: [PATCH 14/74] Fix vim tests --- crates/workspace/src/workspace.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 76715f69bef9ffb5e7f4ced25d00372df897b7e5..6c31366f93c663cfe8c0cd0bd5b4f9ad82ce023e 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -3264,6 +3264,7 @@ impl Workspace { let user_store = project.read(cx).user_store(); let workspace_store = cx.new_model(|cx| WorkspaceStore::new(client.clone(), cx)); + cx.activate_window(); let app_state = Arc::new(AppState { languages: project.read(cx).languages().clone(), workspace_store, From a7550de8c57c4ee143ed696de3362314f0c3b305 Mon Sep 17 00:00:00 2001 From: Julia Date: Wed, 3 Jan 2024 14:36:10 -0500 Subject: [PATCH 15/74] Show pointer hand on tab & give last tab border right --- crates/ui/src/components/tab.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/ui/src/components/tab.rs b/crates/ui/src/components/tab.rs index 9bafb0c0bba7c8219c729b5b3e15830355710fdf..351c851bb9088db8907e7defff71fe21d79ffe75 100644 --- a/crates/ui/src/components/tab.rs +++ b/crates/ui/src/components/tab.rs @@ -126,13 +126,14 @@ impl RenderOnce for Tab { if self.selected { this.border_l().border_r().pb_px() } else { - this.pr_px().pl_px().border_b() + this.pr_px().pl_px().border_b().border_r() } } TabPosition::Middle(Ordering::Equal) => this.border_l().border_r().pb_px(), TabPosition::Middle(Ordering::Less) => this.border_l().pr_px().border_b(), TabPosition::Middle(Ordering::Greater) => this.border_r().pl_px().border_b(), }) + .cursor_pointer() .child( h_stack() .group("") From 6f140c8ae3582b4480ffc8345acb0b0120016432 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Thu, 4 Jan 2024 11:15:53 -0500 Subject: [PATCH 16/74] WIP tinted buttons --- .../ui/src/components/button/button_like.rs | 52 ++++++++++++++++--- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/crates/ui/src/components/button/button_like.rs b/crates/ui/src/components/button/button_like.rs index f255104432816f090aad741fdcb5800d589ff74b..47aae89dfd983df876bcf7bfe4d86c656ed73f18 100644 --- a/crates/ui/src/components/button/button_like.rs +++ b/crates/ui/src/components/button/button_like.rs @@ -36,17 +36,43 @@ pub enum IconPosition { End, } +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Default)] +pub enum TintColor { + #[default] + Accent, + Negative, + Positive, + Warning, +} + +impl TintColor { + fn button_style(self, cx: &mut WindowContext) -> ButtonLikeStyles { + match self { + TintColor::Accent => ButtonLikeStyles { + background: cx.theme().status().info_background, + border_color: cx.theme().status().info_border, + label_color: cx.theme().colors().text, + icon_color: cx.theme().colors().text, + }, + _ => ButtonLikeStyles { + background: gpui::red(), + border_color: gpui::red(), + label_color: gpui::red(), + icon_color: gpui::red(), + }, + } + } +} + #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Default)] pub enum ButtonStyle { /// A filled button with a solid background color. Provides emphasis versus /// the more common subtle button. Filled, - /// 🚧 Under construction 🚧 - /// /// Used to emphasize a button in some way, like a selected state, or a semantic /// coloring like an error or success button. - Tinted, + Tinted(TintColor), /// The default button style, used for most buttons. Has a transparent background, /// but has a background color to indicate states like hover and active. @@ -86,7 +112,9 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted => ButtonLikeStyles { + ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), + // TODO: Finish tint colors + ButtonStyle::Tinted(_) => ButtonLikeStyles { background: gpui::red(), border_color: gpui::red(), label_color: gpui::red(), @@ -115,7 +143,9 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted => ButtonLikeStyles { + ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), + // TODO: Finish tint colors + ButtonStyle::Tinted(_) => ButtonLikeStyles { background: gpui::red(), border_color: gpui::red(), label_color: gpui::red(), @@ -146,7 +176,9 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted => ButtonLikeStyles { + ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), + // TODO: Finish tint colors + ButtonStyle::Tinted(_) => ButtonLikeStyles { background: gpui::red(), border_color: gpui::red(), label_color: gpui::red(), @@ -178,7 +210,9 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted => ButtonLikeStyles { + ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), + // TODO: Finish tint colors + ButtonStyle::Tinted(_) => ButtonLikeStyles { background: gpui::red(), border_color: gpui::red(), label_color: gpui::red(), @@ -208,7 +242,9 @@ impl ButtonStyle { label_color: Color::Disabled.color(cx), icon_color: Color::Disabled.color(cx), }, - ButtonStyle::Tinted => ButtonLikeStyles { + ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), + // TODO: Finish tint colors + ButtonStyle::Tinted(_) => ButtonLikeStyles { background: gpui::red(), border_color: gpui::red(), label_color: gpui::red(), From 6f4a08ba5a96a13793449d094dfd78a34b237440 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 4 Jan 2024 17:25:02 +0100 Subject: [PATCH 17/74] Prevent scrolling editor and resizing panels at the same time This fixes a bug that would cause Zed to never stop resizing panels when the drag handle overlapped with an editor scrollbar. Co-Authored-By: Marshall --- crates/editor/src/element.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index ab29f6c8b290de894b4528c50dd5f20bf5d748bf..b1a3e73d6a6372c99551a409edc630331727523c 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1230,6 +1230,14 @@ impl EditorElement { return; } + // If a drag took place after we started dragging the scrollbar, + // cancel the scrollbar drag. + if cx.has_active_drag() { + self.editor.update(cx, |editor, cx| { + editor.scroll_manager.set_is_dragging_scrollbar(false, cx); + }); + } + let top = bounds.origin.y; let bottom = bounds.lower_left().y; let right = bounds.lower_right().x; From 427e7f6b4f55e96628c1c079227f587fb9df58e8 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 09:40:12 -0700 Subject: [PATCH 18/74] Read only permissions for project panel too --- crates/project_panel/src/project_panel.rs | 30 +++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 6f438098b718a72602e69b81339129e00fa8a3ba..cb3538601fd7932e7a0cce7a7b7f1f9071f4c176 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -388,8 +388,13 @@ impl ProjectPanel { let is_dir = entry.is_dir(); let worktree_id = worktree.id(); let is_local = project.is_local(); + let is_read_only = project.is_read_only(); let context_menu = ContextMenu::build(cx, |mut menu, cx| { + if is_read_only { + return menu.action("Copy Relative Path", Box::new(CopyRelativePath)); + } + if is_local { menu = menu.action( "Add Folder to Project", @@ -1482,6 +1487,7 @@ impl ProjectPanel { impl Render for ProjectPanel { fn render(&mut self, cx: &mut gpui::ViewContext) -> impl IntoElement { let has_worktree = self.visible_entries.len() != 0; + let project = self.project.read(cx); if has_worktree { div() @@ -1494,21 +1500,25 @@ impl Render for ProjectPanel { .on_action(cx.listener(Self::expand_selected_entry)) .on_action(cx.listener(Self::collapse_selected_entry)) .on_action(cx.listener(Self::collapse_all_entries)) - .on_action(cx.listener(Self::new_file)) - .on_action(cx.listener(Self::new_directory)) - .on_action(cx.listener(Self::rename)) - .on_action(cx.listener(Self::delete)) - .on_action(cx.listener(Self::confirm)) .on_action(cx.listener(Self::open_file)) + .on_action(cx.listener(Self::confirm)) .on_action(cx.listener(Self::cancel)) - .on_action(cx.listener(Self::cut)) - .on_action(cx.listener(Self::copy)) .on_action(cx.listener(Self::copy_path)) .on_action(cx.listener(Self::copy_relative_path)) - .on_action(cx.listener(Self::paste)) - .on_action(cx.listener(Self::reveal_in_finder)) - .on_action(cx.listener(Self::open_in_terminal)) .on_action(cx.listener(Self::new_search_in_directory)) + .when(!project.is_read_only(), |el| { + el.on_action(cx.listener(Self::new_file)) + .on_action(cx.listener(Self::new_directory)) + .on_action(cx.listener(Self::rename)) + .on_action(cx.listener(Self::delete)) + .on_action(cx.listener(Self::cut)) + .on_action(cx.listener(Self::copy)) + .on_action(cx.listener(Self::paste)) + }) + .when(project.is_local(), |el| { + el.on_action(cx.listener(Self::reveal_in_finder)) + .on_action(cx.listener(Self::open_in_terminal)) + }) .track_focus(&self.focus_handle) .child( uniform_list( From 4e310b99aa0da7d5d231dbacc398222aa297e760 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 09:45:39 -0700 Subject: [PATCH 19/74] Implement "open in terminal" --- Cargo.lock | 2 +- crates/project_panel/src/project_panel.rs | 29 ++++++++--------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d0af3c00876104d2f8554ee43ed757689bce281..13d4be62337ae0557fbc59538db4a4bdceacd22e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9514,7 +9514,7 @@ dependencies = [ [[package]] name = "zed" -version = "0.119.0" +version = "0.120.0" dependencies = [ "activity_indicator", "ai", diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 6f438098b718a72602e69b81339129e00fa8a3ba..e0bee14df27479021634d3400b13850d44fa51a9 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -971,25 +971,16 @@ impl ProjectPanel { } } - fn open_in_terminal(&mut self, _: &OpenInTerminal, _cx: &mut ViewContext) { - todo!() - // if let Some((worktree, entry)) = self.selected_entry(cx) { - // let window = cx.window(); - // let view_id = cx.view_id(); - // let path = worktree.abs_path().join(&entry.path); - - // cx.app_context() - // .spawn(|mut cx| async move { - // window.dispatch_action( - // view_id, - // &workspace::OpenTerminal { - // working_directory: path, - // }, - // &mut cx, - // ); - // }) - // .detach(); - // } + fn open_in_terminal(&mut self, _: &OpenInTerminal, cx: &mut ViewContext) { + if let Some((worktree, entry)) = self.selected_entry(cx) { + let path = worktree.abs_path().join(&entry.path); + cx.dispatch_action( + workspace::OpenTerminal { + working_directory: path, + } + .boxed_clone(), + ) + } } pub fn new_search_in_directory( From fcf7007e0bdc84d62308ba33097512b93e635013 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 09:48:47 -0700 Subject: [PATCH 20/74] let search happen too --- crates/project_panel/src/project_panel.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index cb3538601fd7932e7a0cce7a7b7f1f9071f4c176..a685a82b073395bca0ee812e45a4ff2c62cac4a1 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -392,7 +392,12 @@ impl ProjectPanel { let context_menu = ContextMenu::build(cx, |mut menu, cx| { if is_read_only { - return menu.action("Copy Relative Path", Box::new(CopyRelativePath)); + menu = menu.action("Copy Relative Path", Box::new(CopyRelativePath)); + if is_dir { + menu = menu.action("Search Inside", Box::new(NewSearchInDirectory)) + } + + return menu; } if is_local { From d79b8e4b98313ac418aee5100dd89522f9169d06 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 4 Jan 2024 12:35:51 -0500 Subject: [PATCH 21/74] Fix `SendText`/`SendKeystroke` having the wrong context name in terminal Co-Authored-By: Max Brunsfeld --- crates/terminal/src/terminal.rs | 10 +--------- crates/terminal_view/src/terminal_view.rs | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index b15bd7c6d659cc7794b770934e95775c0ae41507..af922f109e9ed218fc56c950cae8bc2acbc0900d 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -61,15 +61,7 @@ use lazy_static::lazy_static; actions!( terminal, - [ - Clear, - Copy, - Paste, - ShowCharacterPalette, - SearchTest, - SendText, - SendKeystroke, - ] + [Clear, Copy, Paste, ShowCharacterPalette, SearchTest,] ); ///Scrolling is unbearably sluggish by default. Alacritty supports a configurable diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index d4dea29b49e71e66604ec56799d166778792ae9a..48765b67c0117745123081b44b29651e54364168 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -57,7 +57,7 @@ pub struct SendText(String); #[derive(Clone, Debug, Default, Deserialize, PartialEq)] pub struct SendKeystroke(String); -impl_actions!(terminal_view, [SendText, SendKeystroke]); +impl_actions!(terminal, [SendText, SendKeystroke]); pub fn init(cx: &mut AppContext) { terminal_panel::init(cx); From 90fc1ebaf6acfac4d8b3ab8e18871216335c1a01 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 4 Jan 2024 09:53:57 -0800 Subject: [PATCH 22/74] Fix version comparison in auto update Co-authored-by: Antonio Scandurra --- crates/auto_update/src/auto_update.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/auto_update/src/auto_update.rs b/crates/auto_update/src/auto_update.rs index 691b83479f1e4fb793068aca9d4f2af55124413a..a2a90d4f2f69c94fc87a56ff13d8aa861304699b 100644 --- a/crates/auto_update/src/auto_update.rs +++ b/crates/auto_update/src/auto_update.rs @@ -270,7 +270,7 @@ impl AutoUpdater { ReleaseChannel::Nightly => cx .try_read_global::(|sha, _| release.version != sha.0) .unwrap_or(true), - _ => release.version.parse::()? <= current_version, + _ => release.version.parse::()? > current_version, }; if !should_download { From 3d1023ef52a4041c355af370e929eab713c5c3a7 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 19:24:22 +0100 Subject: [PATCH 23/74] lsp: Do not cache initialization options --- crates/language/src/language.rs | 3 --- crates/project/src/project.rs | 26 ++++++++++++-------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 5564481c6bdc07a41d0b3fdd91a75970de9b8e21..366d2b0098ca36437252044c50825bceaed96081 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -113,7 +113,6 @@ pub struct LanguageServerName(pub Arc); pub struct CachedLspAdapter { pub name: LanguageServerName, pub short_name: &'static str, - pub initialization_options: Option, pub disk_based_diagnostic_sources: Vec, pub disk_based_diagnostics_progress_token: Option, pub language_ids: HashMap, @@ -125,7 +124,6 @@ impl CachedLspAdapter { pub async fn new(adapter: Arc) -> Arc { let name = adapter.name().await; let short_name = adapter.short_name(); - let initialization_options = adapter.initialization_options().await; let disk_based_diagnostic_sources = adapter.disk_based_diagnostic_sources().await; let disk_based_diagnostics_progress_token = adapter.disk_based_diagnostics_progress_token().await; @@ -134,7 +132,6 @@ impl CachedLspAdapter { Arc::new(CachedLspAdapter { name, short_name, - initialization_options, disk_based_diagnostic_sources, disk_based_diagnostics_progress_token, language_ids, diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index b9c73ae67785d48d7912414113329bb4a6d2e0da..a513b3907adcee142db6c09b481c99ae03384b6d 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -2816,15 +2816,6 @@ impl Project { let lsp = project_settings.lsp.get(&adapter.name.0); let override_options = lsp.map(|s| s.initialization_options.clone()).flatten(); - let mut initialization_options = adapter.initialization_options.clone(); - match (&mut initialization_options, override_options) { - (Some(initialization_options), Some(override_options)) => { - merge_json_value_into(override_options, initialization_options); - } - (None, override_options) => initialization_options = override_options, - _ => {} - } - let server_id = pending_server.server_id; let container_dir = pending_server.container_dir.clone(); let state = LanguageServerState::Starting({ @@ -2837,7 +2828,7 @@ impl Project { let result = Self::setup_and_insert_language_server( this.clone(), &worktree_path, - initialization_options, + override_options, pending_server, adapter.clone(), language.clone(), @@ -2958,7 +2949,7 @@ impl Project { async fn setup_and_insert_language_server( this: WeakModel, worktree_path: &Path, - initialization_options: Option, + override_initialization_options: Option, pending_server: PendingLanguageServer, adapter: Arc, language: Arc, @@ -2968,7 +2959,7 @@ impl Project { ) -> Result>> { let language_server = Self::setup_pending_language_server( this.clone(), - initialization_options, + override_initialization_options, pending_server, worktree_path, adapter.clone(), @@ -2998,7 +2989,7 @@ impl Project { async fn setup_pending_language_server( this: WeakModel, - initialization_options: Option, + override_options: Option, pending_server: PendingLanguageServer, worktree_path: &Path, adapter: Arc, @@ -3164,7 +3155,14 @@ impl Project { } }) .detach(); - + let mut initialization_options = adapter.adapter.initialization_options().await; + match (&mut initialization_options, override_options) { + (Some(initialization_options), Some(override_options)) => { + merge_json_value_into(override_options, initialization_options); + } + (None, override_options) => initialization_options = override_options, + _ => {} + } let language_server = language_server.initialize(initialization_options).await?; language_server From d2afc97b53263a9215e80422d81f604f62efe288 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 11:55:14 -0700 Subject: [PATCH 24/74] Tidy up branch --- crates/collab/src/db/queries/rooms.rs | 4 +--- crates/collab/src/rpc.rs | 2 +- crates/project/src/project.rs | 3 +-- crates/rpc/proto/zed.proto | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/crates/collab/src/db/queries/rooms.rs b/crates/collab/src/db/queries/rooms.rs index af554955a1d5de745df0c000b47c0a8230107689..878f0d67cfaf6ec03cf51880c2dff67566454ec0 100644 --- a/crates/collab/src/db/queries/rooms.rs +++ b/crates/collab/src/db/queries/rooms.rs @@ -156,8 +156,6 @@ impl Database { initial_project_id: Option, ) -> Result> { self.room_transaction(room_id, |tx| async move { - let room = self.get_room(room_id, &tx).await?; - let caller = room_participant::Entity::find() .filter( room_participant::Column::UserId @@ -196,6 +194,7 @@ impl Database { .insert(&*tx) .await?; + let room = self.get_room(room_id, &tx).await?; let incoming_call = Self::build_incoming_call(&room, called_user_id) .ok_or_else(|| anyhow!("failed to build incoming call"))?; Ok((room, incoming_call)) @@ -1172,7 +1171,6 @@ impl Database { } } drop(db_participants); - dbg!(&participants); let mut db_projects = db_room .find_related(project::Entity) diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 8bb33cae296016dc241c03304154e14266c02f23..835b48809da94dc60cd872d473e564a7456da81e 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -1504,7 +1504,7 @@ async fn join_project( // First, we send the metadata associated with each worktree. response.send(proto::JoinProjectResponse { worktrees: worktrees.clone(), - replica_id: Some(replica_id.0 as u32), + replica_id: replica_id.0 as u32, collaborators: collaborators.clone(), language_servers: project.language_servers.clone(), })?; diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 8b83dc445570365f1def06e0f4ad71b5eb1d8289..ad2e1bb2679bf0764e2a57fdfb52571edf1144a0 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -715,8 +715,7 @@ impl Project { }) .await?; let this = cx.new_model(|cx| { - // todo!() - let replica_id = response.payload.replica_id.unwrap() as ReplicaId; + let replica_id = response.payload.replica_id as ReplicaId; let mut worktrees = Vec::new(); for worktree in response.payload.worktrees { diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index 84d03727c0c59f61d54c59c4f688aeb71e392e87..e423441a30218674c4d6b68098a8f724c8a32654 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -369,7 +369,7 @@ message JoinProject { } message JoinProjectResponse { - optional uint32 replica_id = 1; + uint32 replica_id = 1; repeated WorktreeMetadata worktrees = 2; repeated Collaborator collaborators = 3; repeated LanguageServer language_servers = 4; From 09b32e6a0e364fbbb29ede470596825ab4b13376 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 4 Jan 2024 14:01:01 -0500 Subject: [PATCH 25/74] Attempt to run keystroke actions before attempting key listeners --- crates/gpui/src/window.rs | 46 ++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/crates/gpui/src/window.rs b/crates/gpui/src/window.rs index 7b6541c937edaacdfff8f01f7ffe0386d74c1ba4..71e6cb9e559a97634ee7d2df8610569838c32a5d 100644 --- a/crates/gpui/src/window.rs +++ b/crates/gpui/src/window.rs @@ -1583,36 +1583,16 @@ impl<'a> WindowContext<'a> { let mut actions: Vec> = Vec::new(); - // Capture phase let mut context_stack: SmallVec<[KeyContext; 16]> = SmallVec::new(); - self.propagate_event = true; - for node_id in &dispatch_path { let node = self.window.rendered_frame.dispatch_tree.node(*node_id); if let Some(context) = node.context.clone() { context_stack.push(context); } - - for key_listener in node.key_listeners.clone() { - key_listener(event, DispatchPhase::Capture, self); - if !self.propagate_event { - return; - } - } } - // Bubble phase for node_id in dispatch_path.iter().rev() { - // Handle low level key events - let node = self.window.rendered_frame.dispatch_tree.node(*node_id); - for key_listener in node.key_listeners.clone() { - key_listener(event, DispatchPhase::Bubble, self); - if !self.propagate_event { - return; - } - } - // Match keystrokes let node = self.window.rendered_frame.dispatch_tree.node(*node_id); if node.context.is_some() { @@ -1633,6 +1613,7 @@ impl<'a> WindowContext<'a> { self.clear_pending_keystrokes(); } + self.propagate_event = true; for action in actions { self.dispatch_action_on_node(node_id, action.boxed_clone()); if !self.propagate_event { @@ -1640,6 +1621,31 @@ impl<'a> WindowContext<'a> { return; } } + + // Capture phase + for node_id in &dispatch_path { + let node = self.window.rendered_frame.dispatch_tree.node(*node_id); + + for key_listener in node.key_listeners.clone() { + key_listener(event, DispatchPhase::Capture, self); + if !self.propagate_event { + return; + } + } + } + + // Bubble phase + for node_id in dispatch_path.iter().rev() { + // Handle low level key events + let node = self.window.rendered_frame.dispatch_tree.node(*node_id); + for key_listener in node.key_listeners.clone() { + key_listener(event, DispatchPhase::Bubble, self); + if !self.propagate_event { + return; + } + } + } + self.dispatch_keystroke_observers(event, None); } From e4aa7ba4f262eb794b798107efbae04fbecb2d87 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 4 Jan 2024 14:10:46 -0500 Subject: [PATCH 26/74] Try to load fallback fonts instead of panicking when a font is not found (#3891) This PR adjusts our font resolution code to attempt to use a fallback font if the specified font cannot be found. Right now our fallback font stack is `Zed Mono`, followed by `Helvetica` (in practice we should always be able to resolve `Zed Mono` since we bundle it with the app). In the future we'll want to surface the ability to set the fallback font stack from GPUI consumers, and potentially even support specifying font stacks in the user settings (as opposed to a single font family). Release Notes: - Fixed a panic when trying to load a font that could not be found. --- crates/editor/src/editor.rs | 2 +- crates/editor/src/element.rs | 4 +- crates/gpui/src/text_system.rs | 39 +++++++++++++++++++- crates/terminal_view/src/terminal_element.rs | 2 +- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index cf074bad415d499516c1bb693cbfc19c4482f41c..b53fda335ed55ad1d31885cbe227d9c9cf339c28 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -9565,7 +9565,7 @@ impl InputHandler for Editor { ) -> Option> { let text_layout_details = self.text_layout_details(cx); let style = &text_layout_details.editor_style; - let font_id = cx.text_system().font_id(&style.text.font()).unwrap(); + let font_id = cx.text_system().resolve_font(&style.text.font()); let font_size = style.text.font_size.to_pixels(cx.rem_size()); let line_height = style.text.line_height_in_pixels(cx.rem_size()); let em_width = cx diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index b1a3e73d6a6372c99551a409edc630331727523c..76a5d1ec5ce9131dfaeeba46c73e95e5181003e2 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1775,7 +1775,7 @@ impl EditorElement { let snapshot = editor.snapshot(cx); let style = self.style.clone(); - let font_id = cx.text_system().font_id(&style.text.font()).unwrap(); + let font_id = cx.text_system().resolve_font(&style.text.font()); let font_size = style.text.font_size.to_pixels(cx.rem_size()); let line_height = style.text.line_height_in_pixels(cx.rem_size()); let em_width = cx @@ -3782,7 +3782,7 @@ fn compute_auto_height_layout( } let style = editor.style.as_ref().unwrap(); - let font_id = cx.text_system().font_id(&style.text.font()).unwrap(); + let font_id = cx.text_system().resolve_font(&style.text.font()); let font_size = style.text.font_size.to_pixels(cx.rem_size()); let line_height = style.text.line_height_in_pixels(cx.rem_size()); let em_width = cx diff --git a/crates/gpui/src/text_system.rs b/crates/gpui/src/text_system.rs index 944a9b78bec2a33b4b20e4e1e1b991565d42212b..60934b3959722eb76f9a86a16b6669d06109dd74 100644 --- a/crates/gpui/src/text_system.rs +++ b/crates/gpui/src/text_system.rs @@ -15,8 +15,9 @@ use crate::{ use anyhow::anyhow; use collections::FxHashMap; use core::fmt; +use itertools::Itertools; use parking_lot::{Mutex, RwLock, RwLockUpgradableReadGuard}; -use smallvec::SmallVec; +use smallvec::{smallvec, SmallVec}; use std::{ cmp, fmt::{Debug, Display, Formatter}, @@ -42,6 +43,7 @@ pub struct TextSystem { raster_bounds: RwLock>>, wrapper_pool: Mutex>>, font_runs_pool: Mutex>>, + fallback_font_stack: SmallVec<[Font; 2]>, } impl TextSystem { @@ -54,6 +56,12 @@ impl TextSystem { font_ids_by_font: RwLock::default(), wrapper_pool: Mutex::default(), font_runs_pool: Mutex::default(), + fallback_font_stack: smallvec![ + // TODO: This is currently Zed-specific. + // We should allow GPUI users to provide their own fallback font stack. + font("Zed Mono"), + font("Helvetica") + ], } } @@ -72,6 +80,33 @@ impl TextSystem { } } + /// Resolves the specified font, falling back to the default font stack if + /// the font fails to load. + /// + /// # Panics + /// + /// Panics if the font and none of the fallbacks can be resolved. + pub fn resolve_font(&self, font: &Font) -> FontId { + if let Ok(font_id) = self.font_id(font) { + return font_id; + } + + for fallback in &self.fallback_font_stack { + if let Ok(font_id) = self.font_id(fallback) { + return font_id; + } + } + + panic!( + "failed to resolve font '{}' or any of the fallbacks: {}", + font.family, + self.fallback_font_stack + .iter() + .map(|fallback| &fallback.family) + .join(", ") + ); + } + pub fn bounding_box(&self, font_id: FontId, font_size: Pixels) -> Bounds { self.read_metrics(font_id, |metrics| metrics.bounding_box(font_size)) } @@ -159,7 +194,7 @@ impl TextSystem { ) -> Result> { let mut font_runs = self.font_runs_pool.lock().pop().unwrap_or_default(); for run in runs.iter() { - let font_id = self.font_id(&run.font)?; + let font_id = self.resolve_font(&run.font); if let Some(last_run) = font_runs.last_mut() { if last_run.font_id == font_id { last_run.len += run.len; diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index 8be10f9469fd8a2fb716f469c39bae841500920e..328a6a1c4e8cd37dcc698ada592a60e7c9767628 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -421,7 +421,7 @@ impl TerminalElement { let rem_size = cx.rem_size(); let font_pixels = text_style.font_size.to_pixels(rem_size); let line_height = font_pixels * line_height.to_pixels(rem_size); - let font_id = cx.text_system().font_id(&text_style.font()).unwrap(); + let font_id = cx.text_system().resolve_font(&text_style.font()); // todo!(do we need to keep this unwrap?) let cell_width = text_system From 4dbec66cddf6c55e494ff0029e74980238faaa82 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 4 Jan 2024 21:13:51 +0200 Subject: [PATCH 27/74] Return back old project search behavior as default. Add a `workspace::DeploySearch` action and use it as a default for "cmd-shift-f" binding. This action opens existing search tab if it exists, or creates a new one otherwise. `workspace::NewSearch` action is still available and always opens an existing search tab. --- assets/keymaps/default.json | 2 +- crates/search/src/project_search.rs | 304 ++++++++++++++++++++++++++-- crates/workspace/src/workspace.rs | 1 + 3 files changed, 288 insertions(+), 19 deletions(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 5d700006393ea27a4e46348f08866ab3197f8215..3ff0db1a160e4d420a7aad83d56404e313ad3b46 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -402,7 +402,7 @@ "cmd-r": "workspace::ToggleRightDock", "cmd-j": "workspace::ToggleBottomDock", "alt-cmd-y": "workspace::CloseAllDocks", - "cmd-shift-f": "workspace::NewSearch", + "cmd-shift-f": "workspace::DeploySearch", "cmd-k cmd-t": "theme_selector::Toggle", "cmd-k cmd-s": "zed::OpenKeymap", "cmd-t": "project_symbols::Toggle", diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 9a91d619a43cf2cd4e9c024006494f2aa9b19989..b6523bc3cda6e5c8e97b9c9d4d34a96db157e34d 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -61,12 +61,12 @@ struct ActiveSearches(HashMap, WeakView>); struct ActiveSettings(HashMap, ProjectSearchSettings>); pub fn init(cx: &mut AppContext) { - // todo!() po cx.set_global(ActiveSearches::default()); cx.set_global(ActiveSettings::default()); cx.observe_new_views(|workspace: &mut Workspace, _cx| { workspace - .register_action(ProjectSearchView::deploy) + .register_action(ProjectSearchView::new_search) + .register_action(ProjectSearchView::deploy_search) .register_action(ProjectSearchBar::search_in_new); }) .detach(); @@ -941,11 +941,41 @@ impl ProjectSearchView { }); } + // Re-activate the most recently activated search or the most recent if it has been closed. + // If no search exists in the workspace, create a new one. + fn deploy_search( + workspace: &mut Workspace, + _: &workspace::DeploySearch, + cx: &mut ViewContext, + ) { + let active_search = cx + .global::() + .0 + .get(&workspace.project().downgrade()); + let existing = active_search + .and_then(|active_search| { + workspace + .items_of_type::(cx) + .filter(|search| &search.downgrade() == active_search) + .last() + }) + .or_else(|| workspace.item_of_type::(cx)); + Self::existing_or_new_search(workspace, existing, cx) + } + // Add another search tab to the workspace. - fn deploy( + fn new_search( workspace: &mut Workspace, _: &workspace::NewSearch, cx: &mut ViewContext, + ) { + Self::existing_or_new_search(workspace, None, cx) + } + + fn existing_or_new_search( + workspace: &mut Workspace, + existing: Option>, + cx: &mut ViewContext, ) { // Clean up entries for dropped projects cx.update_global(|state: &mut ActiveSearches, _cx| { @@ -962,19 +992,27 @@ impl ProjectSearchView { } }); - let settings = cx - .global::() - .0 - .get(&workspace.project().downgrade()); - - let settings = if let Some(settings) = settings { - Some(settings.clone()) + let search = if let Some(existing) = existing { + workspace.activate_item(&existing, cx); + existing } else { - None - }; + let settings = cx + .global::() + .0 + .get(&workspace.project().downgrade()); - let model = cx.new_model(|cx| ProjectSearch::new(workspace.project().clone(), cx)); - let search = cx.new_view(|cx| ProjectSearchView::new(model, cx, settings)); + let settings = if let Some(settings) = settings { + Some(settings.clone()) + } else { + None + }; + + let model = cx.new_model(|cx| ProjectSearch::new(workspace.project().clone(), cx)); + let view = cx.new_view(|cx| ProjectSearchView::new(model, cx, settings)); + + workspace.add_item(Box::new(view.clone()), cx); + view + }; workspace.add_item(Box::new(search.clone()), cx); @@ -2060,7 +2098,237 @@ pub mod tests { } #[gpui::test] - async fn test_project_search_focus(cx: &mut TestAppContext) { + async fn test_deploy_project_search_focus(cx: &mut TestAppContext) { + init_test(cx); + + let fs = FakeFs::new(cx.background_executor.clone()); + fs.insert_tree( + "/dir", + json!({ + "one.rs": "const ONE: usize = 1;", + "two.rs": "const TWO: usize = one::ONE + one::ONE;", + "three.rs": "const THREE: usize = one::ONE + two::TWO;", + "four.rs": "const FOUR: usize = one::ONE + three::THREE;", + }), + ) + .await; + let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await; + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.clone(); + let search_bar = window.build_view(cx, |_| ProjectSearchBar::new()); + + let active_item = cx.read(|cx| { + workspace + .read(cx) + .unwrap() + .active_pane() + .read(cx) + .active_item() + .and_then(|item| item.downcast::()) + }); + assert!( + active_item.is_none(), + "Expected no search panel to be active" + ); + + window + .update(cx, move |workspace, cx| { + assert_eq!(workspace.panes().len(), 1); + workspace.panes()[0].update(cx, move |pane, cx| { + pane.toolbar() + .update(cx, |toolbar, cx| toolbar.add_item(search_bar, cx)) + }); + + ProjectSearchView::deploy_search(workspace, &workspace::DeploySearch, cx) + }) + .unwrap(); + + let Some(search_view) = cx.read(|cx| { + workspace + .read(cx) + .unwrap() + .active_pane() + .read(cx) + .active_item() + .and_then(|item| item.downcast::()) + }) else { + panic!("Search view expected to appear after new search event trigger") + }; + + cx.spawn(|mut cx| async move { + window + .update(&mut cx, |_, cx| { + cx.dispatch_action(ToggleFocus.boxed_clone()) + }) + .unwrap(); + }) + .detach(); + cx.background_executor.run_until_parked(); + window + .update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + assert!( + search_view.query_editor.focus_handle(cx).is_focused(cx), + "Empty search view should be focused after the toggle focus event: no results panel to focus on", + ); + }); + }).unwrap(); + + window + .update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + let query_editor = &search_view.query_editor; + assert!( + query_editor.focus_handle(cx).is_focused(cx), + "Search view should be focused after the new search view is activated", + ); + let query_text = query_editor.read(cx).text(cx); + assert!( + query_text.is_empty(), + "New search query should be empty but got '{query_text}'", + ); + let results_text = search_view + .results_editor + .update(cx, |editor, cx| editor.display_text(cx)); + assert!( + results_text.is_empty(), + "Empty search view should have no results but got '{results_text}'" + ); + }); + }) + .unwrap(); + + window + .update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + search_view.query_editor.update(cx, |query_editor, cx| { + query_editor.set_text("sOMETHINGtHATsURELYdOESnOTeXIST", cx) + }); + search_view.search(cx); + }); + }) + .unwrap(); + cx.background_executor.run_until_parked(); + window + .update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + let results_text = search_view + .results_editor + .update(cx, |editor, cx| editor.display_text(cx)); + assert!( + results_text.is_empty(), + "Search view for mismatching query should have no results but got '{results_text}'" + ); + assert!( + search_view.query_editor.focus_handle(cx).is_focused(cx), + "Search view should be focused after mismatching query had been used in search", + ); + }); + }).unwrap(); + + cx.spawn(|mut cx| async move { + window.update(&mut cx, |_, cx| { + cx.dispatch_action(ToggleFocus.boxed_clone()) + }) + }) + .detach(); + cx.background_executor.run_until_parked(); + window.update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + assert!( + search_view.query_editor.focus_handle(cx).is_focused(cx), + "Search view with mismatching query should be focused after the toggle focus event: still no results panel to focus on", + ); + }); + }).unwrap(); + + window + .update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + search_view + .query_editor + .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx)); + search_view.search(cx); + }); + }) + .unwrap(); + cx.background_executor.run_until_parked(); + window.update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + assert_eq!( + search_view + .results_editor + .update(cx, |editor, cx| editor.display_text(cx)), + "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;", + "Search view results should match the query" + ); + assert!( + search_view.results_editor.focus_handle(cx).is_focused(cx), + "Search view with mismatching query should be focused after search results are available", + ); + }); + }).unwrap(); + cx.spawn(|mut cx| async move { + window + .update(&mut cx, |_, cx| { + cx.dispatch_action(ToggleFocus.boxed_clone()) + }) + .unwrap(); + }) + .detach(); + cx.background_executor.run_until_parked(); + window.update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + assert!( + search_view.results_editor.focus_handle(cx).is_focused(cx), + "Search view with matching query should still have its results editor focused after the toggle focus event", + ); + }); + }).unwrap(); + + workspace + .update(cx, |workspace, cx| { + ProjectSearchView::deploy_search(workspace, &workspace::DeploySearch, cx) + }) + .unwrap(); + window.update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "two", "Query should be updated to first search result after search view 2nd open in a row"); + assert_eq!( + search_view + .results_editor + .update(cx, |editor, cx| editor.display_text(cx)), + "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;", + "Results should be unchanged after search view 2nd open in a row" + ); + assert!( + search_view.query_editor.focus_handle(cx).is_focused(cx), + "Focus should be moved into query editor again after search view 2nd open in a row" + ); + }); + }).unwrap(); + + cx.spawn(|mut cx| async move { + window + .update(&mut cx, |_, cx| { + cx.dispatch_action(ToggleFocus.boxed_clone()) + }) + .unwrap(); + }) + .detach(); + cx.background_executor.run_until_parked(); + window.update(cx, |_, cx| { + search_view.update(cx, |search_view, cx| { + assert!( + search_view.results_editor.focus_handle(cx).is_focused(cx), + "Search view with matching query should switch focus to the results editor after the toggle focus event", + ); + }); + }).unwrap(); + } + + #[gpui::test] + async fn test_new_project_search_focus(cx: &mut TestAppContext) { init_test(cx); let fs = FakeFs::new(cx.background_executor.clone()); @@ -2101,7 +2369,7 @@ pub mod tests { .update(cx, |toolbar, cx| toolbar.add_item(search_bar, cx)) }); - ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx) + ProjectSearchView::new_search(workspace, &workspace::NewSearch, cx) }) .unwrap(); @@ -2250,7 +2518,7 @@ pub mod tests { workspace .update(cx, |workspace, cx| { - ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx) + ProjectSearchView::new_search(workspace, &workspace::NewSearch, cx) }) .unwrap(); cx.background_executor.run_until_parked(); @@ -2536,7 +2804,7 @@ pub mod tests { .update(cx, |toolbar, cx| toolbar.add_item(search_bar, cx)) }); - ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx) + ProjectSearchView::new_search(workspace, &workspace::NewSearch, cx) } }) .unwrap(); diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 69e30a6ccb65c215cd5a59efcb6821549233378d..ba2a2dea9032a646d0657cc12499818d1bb5cb81 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -107,6 +107,7 @@ actions!( NewCenterTerminal, ToggleTerminalFocus, NewSearch, + DeploySearch, Feedback, Restart, Welcome, From be426e67cca91b7525b1a32b95e43ac888a5b4d7 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 12:13:22 -0700 Subject: [PATCH 28/74] Tidy up guest count --- crates/call/src/room.rs | 7 ++-- crates/collab_ui/src/collab_panel.rs | 52 +++++++++++++++++++++------- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index 4561e6d807fa3047f9a2e0c0f7663d7e72a4c1ce..e2c9bf5886faca374334e463b8d0ac4711ce863b 100644 --- a/crates/call/src/room.rs +++ b/crates/call/src/room.rs @@ -616,6 +616,10 @@ impl Room { .map(|participant| participant.role) } + pub fn local_participant_is_admin(&self) -> bool { + self.local_participant.role == proto::ChannelRole::Admin + } + pub fn pending_participants(&self) -> &[Arc] { &self.pending_participants } @@ -724,8 +728,7 @@ impl Room { this.local_participant.projects = participant.projects; if this.local_participant.role != role { this.local_participant.role = role; - // TODO!() this may be better done using optional replica ids instead. - // (though need to figure out how to handle promotion? join and leave the project?) + this.joined_projects.retain(|project| { if let Some(project) = project.upgrade() { project.update(cx, |project, _| project.set_role(role)); diff --git a/crates/collab_ui/src/collab_panel.rs b/crates/collab_ui/src/collab_panel.rs index 457a31ff5d01bc3838ba0ae5f252dcc1b89b823f..f8dd4bf0b76d1f186d5befa1715df251ac4d43b7 100644 --- a/crates/collab_ui/src/collab_panel.rs +++ b/crates/collab_ui/src/collab_panel.rs @@ -153,6 +153,7 @@ enum ListEntry { }, GuestCount { count: usize, + has_visible_participants: bool, }, IncomingRequest(Arc), OutgoingRequest(Arc), @@ -385,6 +386,7 @@ impl CollabPanel { let room = room.read(cx); let mut guest_count_ix = 0; let mut guest_count = if room.read_only() { 1 } else { 0 }; + let mut non_guest_count = if room.read_only() { 0 } else { 1 }; if let Some(channel_id) = room.channel_id() { self.entries.push(ListEntry::ChannelNotes { channel_id }); @@ -443,6 +445,8 @@ impl CollabPanel { if participant.role == proto::ChannelRole::Guest { guest_count += 1; return None; + } else { + non_guest_count += 1; } Some(StringMatchCandidate { id: participant.user.id as usize, @@ -485,8 +489,13 @@ impl CollabPanel { } } if guest_count > 0 { - self.entries - .insert(guest_count_ix, ListEntry::GuestCount { count: guest_count }); + self.entries.insert( + guest_count_ix, + ListEntry::GuestCount { + count: guest_count, + has_visible_participants: non_guest_count > 0, + }, + ); } // Populate pending participants. @@ -980,21 +989,25 @@ impl CollabPanel { fn render_guest_count( &self, count: usize, + has_visible_participants: bool, is_selected: bool, cx: &mut ViewContext, ) -> impl IntoElement { - // TODO! disable manage_members for guests. + let manageable_channel_id = ActiveCall::global(cx).read(cx).room().and_then(|room| { + let room = room.read(cx); + if room.local_participant_is_admin() { + room.channel_id() + } else { + None + } + }); + ListItem::new("guest_count") .selected(is_selected) - .on_click(cx.listener(move |this, _, cx| { - if let Some(channel_id) = ActiveCall::global(cx).read(cx).channel_id(cx) { - this.manage_members(channel_id, cx) - } - })) .start_slot( h_stack() .gap_1() - .child(render_tree_branch(false, cx)) + .child(render_tree_branch(!has_visible_participants, cx)) .child(""), ) .child(Label::new(if count == 1 { @@ -1002,7 +1015,10 @@ impl CollabPanel { } else { format!("{} guests", count) })) - .tooltip(move |cx| Tooltip::text("Manage Members", cx)) + .when_some(manageable_channel_id, |el, channel_id| { + el.tooltip(move |cx| Tooltip::text("Manage Members", cx)) + .on_click(cx.listener(move |this, _, cx| this.manage_members(channel_id, cx))) + }) } fn has_subchannels(&self, ix: usize) -> bool { @@ -1227,7 +1243,14 @@ impl CollabPanel { } } ListEntry::GuestCount { .. } => { - if let Some(channel_id) = ActiveCall::global(cx).read(cx).channel_id(cx) { + let Some(room) = ActiveCall::global(cx).read(cx).room() else { + return; + }; + let room = room.read(cx); + let Some(channel_id) = room.channel_id() else { + return; + }; + if room.local_participant_is_admin() { self.manage_members(channel_id, cx) } } @@ -1786,8 +1809,11 @@ impl CollabPanel { ListEntry::ParticipantScreen { peer_id, is_last } => self .render_participant_screen(*peer_id, *is_last, is_selected, cx) .into_any_element(), - ListEntry::GuestCount { count } => self - .render_guest_count(*count, is_selected, cx) + ListEntry::GuestCount { + count, + has_visible_participants, + } => self + .render_guest_count(*count, *has_visible_participants, is_selected, cx) .into_any_element(), ListEntry::ChannelNotes { channel_id } => self .render_channel_notes(*channel_id, is_selected, cx) From 2da314fb79aa098b6053d7309435a69099b06008 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 4 Jan 2024 14:26:08 -0500 Subject: [PATCH 29/74] Fix font resolution for UI text so we render with the fallback font (#3893) This PR updates the font resolution for shaped text to use the new `resolve_font` method on the text system. This makes it so we use the fallback font if the desired font cannot be found rather than rendering nothing. Release Notes: - Fixed an issue where nothing would render when the font set in `ui_font_family` was not found. --- crates/gpui/src/text_system.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/gpui/src/text_system.rs b/crates/gpui/src/text_system.rs index 60934b3959722eb76f9a86a16b6669d06109dd74..3106a5a961514157d2daf4d0360c395fae45c2df 100644 --- a/crates/gpui/src/text_system.rs +++ b/crates/gpui/src/text_system.rs @@ -288,7 +288,7 @@ impl TextSystem { last_font = Some(run.font.clone()); font_runs.push(FontRun { len: run_len_within_line, - font_id: self.platform_text_system.font_id(&run.font)?, + font_id: self.resolve_font(&run.font), }); } From bf8f3e3d68567e5bfde0ee89b6ddd21c483452e1 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 4 Jan 2024 15:07:46 -0500 Subject: [PATCH 30/74] Unbork test relying on old keystroke behavior Previously it would both send the keydown *and then* the action, now it send the action, and then because there was an action, does not send the keydown Co-Authored-By: Conrad Irwin --- crates/gpui/src/interactive.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/gpui/src/interactive.rs b/crates/gpui/src/interactive.rs index 6fc7cfc8e8dfcca3cf91bb35d4da06517a2c75f1..0be917350df812ce07de2e95d1dac52cd59637ad 100644 --- a/crates/gpui/src/interactive.rs +++ b/crates/gpui/src/interactive.rs @@ -307,7 +307,10 @@ mod test { div().id("testview").child( div() .key_context("parent") - .on_key_down(cx.listener(|this, _, _| this.saw_key_down = true)) + .on_key_down(cx.listener(|this, _, cx| { + cx.stop_propagation(); + this.saw_key_down = true + })) .on_action( cx.listener(|this: &mut TestView, _: &TestAction, _| { this.saw_action = true @@ -343,6 +346,7 @@ mod test { .update(cx, |test_view, cx| cx.focus(&test_view.focus_handle)) .unwrap(); + cx.dispatch_keystroke(*window, Keystroke::parse("a").unwrap(), false); cx.dispatch_keystroke(*window, Keystroke::parse("ctrl-g").unwrap(), false); window From 931bd687dc339d4c1c2e7fcc0ab5d5d0079db405 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 13:57:59 -0700 Subject: [PATCH 31/74] Uncomment editor tests Co-Authored-By: Julia --- crates/collab/src/tests/editor_tests.rs | 3773 +++++++++++------------ 1 file changed, 1884 insertions(+), 1889 deletions(-) diff --git a/crates/collab/src/tests/editor_tests.rs b/crates/collab/src/tests/editor_tests.rs index 07a4269567d24481231e5c8bfd1ab155c559bb27..c6577014618cfd7fec29c76fb97cf8a10d14a617 100644 --- a/crates/collab/src/tests/editor_tests.rs +++ b/crates/collab/src/tests/editor_tests.rs @@ -1,1889 +1,1884 @@ -//todo(partially ported) -// use std::{ -// path::Path, -// sync::{ -// atomic::{self, AtomicBool, AtomicUsize}, -// Arc, -// }, -// }; - -// use call::ActiveCall; -// use editor::{ -// test::editor_test_context::{AssertionContextManager, EditorTestContext}, -// Anchor, ConfirmCodeAction, ConfirmCompletion, ConfirmRename, Editor, Redo, Rename, -// ToggleCodeActions, Undo, -// }; -// use gpui::{BackgroundExecutor, TestAppContext, VisualContext, VisualTestContext}; -// use indoc::indoc; -// use language::{ -// language_settings::{AllLanguageSettings, InlayHintSettings}, -// tree_sitter_rust, FakeLspAdapter, Language, LanguageConfig, -// }; -// use rpc::RECEIVE_TIMEOUT; -// use serde_json::json; -// use settings::SettingsStore; -// use text::Point; -// use workspace::Workspace; - -// use crate::{rpc::RECONNECT_TIMEOUT, tests::TestServer}; - -// #[gpui::test(iterations = 10)] -// async fn test_host_disconnect( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// cx_c: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// let client_c = server.create_client(cx_c, "user_c").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b), (&client_c, cx_c)]) -// .await; - -// cx_b.update(editor::init); - -// client_a -// .fs() -// .insert_tree( -// "/a", -// serde_json::json!({ -// "a.txt": "a-contents", -// "b.txt": "b-contents", -// }), -// ) -// .await; - -// let active_call_a = cx_a.read(ActiveCall::global); -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; - -// let worktree_a = project_a.read_with(cx_a, |project, cx| project.worktrees().next().unwrap()); -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); - -// let project_b = client_b.build_remote_project(project_id, cx_b).await; -// executor.run_until_parked(); - -// assert!(worktree_a.read_with(cx_a, |tree, _| tree.as_local().unwrap().is_shared())); - -// let workspace_b = -// cx_b.add_window(|cx| Workspace::new(0, project_b.clone(), client_b.app_state.clone(), cx)); -// let cx_b = &mut VisualTestContext::from_window(*workspace_b, cx_b); - -// let editor_b = workspace_b -// .update(cx_b, |workspace, cx| { -// workspace.open_path((worktree_id, "b.txt"), None, true, cx) -// }) -// .unwrap() -// .await -// .unwrap() -// .downcast::() -// .unwrap(); - -// //TODO: focus -// assert!(cx_b.update_view(&editor_b, |editor, cx| editor.is_focused(cx))); -// editor_b.update(cx_b, |editor, cx| editor.insert("X", cx)); -// //todo(is_edited) -// // assert!(workspace_b.is_edited(cx_b)); - -// // Drop client A's connection. Collaborators should disappear and the project should not be shown as shared. -// server.forbid_connections(); -// server.disconnect_client(client_a.peer_id().unwrap()); -// executor.advance_clock(RECEIVE_TIMEOUT + RECONNECT_TIMEOUT); - -// project_a.read_with(cx_a, |project, _| project.collaborators().is_empty()); - -// project_a.read_with(cx_a, |project, _| assert!(!project.is_shared())); - -// project_b.read_with(cx_b, |project, _| project.is_read_only()); - -// assert!(worktree_a.read_with(cx_a, |tree, _| !tree.as_local().unwrap().is_shared())); - -// // Ensure client B's edited state is reset and that the whole window is blurred. - -// workspace_b.update(cx_b, |_, cx| { -// assert_eq!(cx.focused_view_id(), None); -// }); -// // assert!(!workspace_b.is_edited(cx_b)); - -// // Ensure client B is not prompted to save edits when closing window after disconnecting. -// let can_close = workspace_b -// .update(cx_b, |workspace, cx| workspace.prepare_to_close(true, cx)) -// .await -// .unwrap(); -// assert!(can_close); - -// // Allow client A to reconnect to the server. -// server.allow_connections(); -// executor.advance_clock(RECEIVE_TIMEOUT); - -// // Client B calls client A again after they reconnected. -// let active_call_b = cx_b.read(ActiveCall::global); -// active_call_b -// .update(cx_b, |call, cx| { -// call.invite(client_a.user_id().unwrap(), None, cx) -// }) -// .await -// .unwrap(); -// executor.run_until_parked(); -// active_call_a -// .update(cx_a, |call, cx| call.accept_incoming(cx)) -// .await -// .unwrap(); - -// active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); - -// // Drop client A's connection again. We should still unshare it successfully. -// server.forbid_connections(); -// server.disconnect_client(client_a.peer_id().unwrap()); -// executor.advance_clock(RECEIVE_TIMEOUT + RECONNECT_TIMEOUT); - -// project_a.read_with(cx_a, |project, _| assert!(!project.is_shared())); -// } - -// #[gpui::test] -// async fn test_newline_above_or_below_does_not_move_guest_cursor( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); - -// client_a -// .fs() -// .insert_tree("/dir", json!({ "a.txt": "Some text\n" })) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/dir", cx_a).await; -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); - -// let project_b = client_b.build_remote_project(project_id, cx_b).await; - -// // Open a buffer as client A -// let buffer_a = project_a -// .update(cx_a, |p, cx| p.open_buffer((worktree_id, "a.txt"), cx)) -// .await -// .unwrap(); -// let window_a = cx_a.add_empty_window(); -// let editor_a = -// window_a.build_view(cx_a, |cx| Editor::for_buffer(buffer_a, Some(project_a), cx)); -// let mut editor_cx_a = EditorTestContext { -// cx: cx_a, -// window: window_a.into(), -// editor: editor_a, -// assertion_cx: AssertionContextManager::new(), -// }; - -// // Open a buffer as client B -// let buffer_b = project_b -// .update(cx_b, |p, cx| p.open_buffer((worktree_id, "a.txt"), cx)) -// .await -// .unwrap(); -// let window_b = cx_b.add_empty_window(); -// let editor_b = -// window_b.build_view(cx_b, |cx| Editor::for_buffer(buffer_b, Some(project_b), cx)); -// let mut editor_cx_b = EditorTestContext { -// cx: cx_b, -// window: window_b.into(), -// editor: editor_b, -// assertion_cx: AssertionContextManager::new(), -// }; - -// // Test newline above -// editor_cx_a.set_selections_state(indoc! {" -// Some textˇ -// "}); -// editor_cx_b.set_selections_state(indoc! {" -// Some textˇ -// "}); -// editor_cx_a.update_editor(|editor, cx| editor.newline_above(&editor::NewlineAbove, cx)); -// executor.run_until_parked(); -// editor_cx_a.assert_editor_state(indoc! {" -// ˇ -// Some text -// "}); -// editor_cx_b.assert_editor_state(indoc! {" - -// Some textˇ -// "}); - -// // Test newline below -// editor_cx_a.set_selections_state(indoc! {" - -// Some textˇ -// "}); -// editor_cx_b.set_selections_state(indoc! {" - -// Some textˇ -// "}); -// editor_cx_a.update_editor(|editor, cx| editor.newline_below(&editor::NewlineBelow, cx)); -// executor.run_until_parked(); -// editor_cx_a.assert_editor_state(indoc! {" - -// Some text -// ˇ -// "}); -// editor_cx_b.assert_editor_state(indoc! {" - -// Some textˇ - -// "}); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_collaborating_with_completion( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); - -// // Set up a fake language server. -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language -// .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { -// capabilities: lsp::ServerCapabilities { -// completion_provider: Some(lsp::CompletionOptions { -// trigger_characters: Some(vec![".".to_string()]), -// resolve_provider: Some(true), -// ..Default::default() -// }), -// ..Default::default() -// }, -// ..Default::default() -// })) -// .await; -// client_a.language_registry().add(Arc::new(language)); - -// client_a -// .fs() -// .insert_tree( -// "/a", -// json!({ -// "main.rs": "fn main() { a }", -// "other.rs": "", -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); -// let project_b = client_b.build_remote_project(project_id, cx_b).await; - -// // Open a file in an editor as the guest. -// let buffer_b = project_b -// .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) -// .await -// .unwrap(); -// let window_b = cx_b.add_empty_window(); -// let editor_b = window_b.build_view(cx_b, |cx| { -// Editor::for_buffer(buffer_b.clone(), Some(project_b.clone()), cx) -// }); - -// let fake_language_server = fake_language_servers.next().await.unwrap(); -// cx_a.foreground().run_until_parked(); - -// buffer_b.read_with(cx_b, |buffer, _| { -// assert!(!buffer.completion_triggers().is_empty()) -// }); - -// // Type a completion trigger character as the guest. -// editor_b.update(cx_b, |editor, cx| { -// editor.change_selections(None, cx, |s| s.select_ranges([13..13])); -// editor.handle_input(".", cx); -// cx.focus(&editor_b); -// }); - -// // Receive a completion request as the host's language server. -// // Return some completions from the host's language server. -// cx_a.foreground().start_waiting(); -// fake_language_server -// .handle_request::(|params, _| async move { -// assert_eq!( -// params.text_document_position.text_document.uri, -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// ); -// assert_eq!( -// params.text_document_position.position, -// lsp::Position::new(0, 14), -// ); - -// Ok(Some(lsp::CompletionResponse::Array(vec![ -// lsp::CompletionItem { -// label: "first_method(…)".into(), -// detail: Some("fn(&mut self, B) -> C".into()), -// text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit { -// new_text: "first_method($1)".to_string(), -// range: lsp::Range::new( -// lsp::Position::new(0, 14), -// lsp::Position::new(0, 14), -// ), -// })), -// insert_text_format: Some(lsp::InsertTextFormat::SNIPPET), -// ..Default::default() -// }, -// lsp::CompletionItem { -// label: "second_method(…)".into(), -// detail: Some("fn(&mut self, C) -> D".into()), -// text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit { -// new_text: "second_method()".to_string(), -// range: lsp::Range::new( -// lsp::Position::new(0, 14), -// lsp::Position::new(0, 14), -// ), -// })), -// insert_text_format: Some(lsp::InsertTextFormat::SNIPPET), -// ..Default::default() -// }, -// ]))) -// }) -// .next() -// .await -// .unwrap(); -// cx_a.foreground().finish_waiting(); - -// // Open the buffer on the host. -// let buffer_a = project_a -// .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) -// .await -// .unwrap(); -// cx_a.foreground().run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// assert_eq!(buffer.text(), "fn main() { a. }") -// }); - -// // Confirm a completion on the guest. - -// editor_b.read_with(cx_b, |editor, _| assert!(editor.context_menu_visible())); -// editor_b.update(cx_b, |editor, cx| { -// editor.confirm_completion(&ConfirmCompletion { item_ix: Some(0) }, cx); -// assert_eq!(editor.text(cx), "fn main() { a.first_method() }"); -// }); - -// // Return a resolved completion from the host's language server. -// // The resolved completion has an additional text edit. -// fake_language_server.handle_request::( -// |params, _| async move { -// assert_eq!(params.label, "first_method(…)"); -// Ok(lsp::CompletionItem { -// label: "first_method(…)".into(), -// detail: Some("fn(&mut self, B) -> C".into()), -// text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit { -// new_text: "first_method($1)".to_string(), -// range: lsp::Range::new(lsp::Position::new(0, 14), lsp::Position::new(0, 14)), -// })), -// additional_text_edits: Some(vec![lsp::TextEdit { -// new_text: "use d::SomeTrait;\n".to_string(), -// range: lsp::Range::new(lsp::Position::new(0, 0), lsp::Position::new(0, 0)), -// }]), -// insert_text_format: Some(lsp::InsertTextFormat::SNIPPET), -// ..Default::default() -// }) -// }, -// ); - -// // The additional edit is applied. -// cx_a.executor().run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// assert_eq!( -// buffer.text(), -// "use d::SomeTrait;\nfn main() { a.first_method() }" -// ); -// }); - -// buffer_b.read_with(cx_b, |buffer, _| { -// assert_eq!( -// buffer.text(), -// "use d::SomeTrait;\nfn main() { a.first_method() }" -// ); -// }); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_collaborating_with_code_actions( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// // -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); - -// cx_b.update(editor::init); - -// // Set up a fake language server. -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await; -// client_a.language_registry().add(Arc::new(language)); - -// client_a -// .fs() -// .insert_tree( -// "/a", -// json!({ -// "main.rs": "mod other;\nfn main() { let foo = other::foo(); }", -// "other.rs": "pub fn foo() -> usize { 4 }", -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); - -// // Join the project as client B. -// let project_b = client_b.build_remote_project(project_id, cx_b).await; -// let window_b = -// cx_b.add_window(|cx| Workspace::new(0, project_b.clone(), client_b.app_state.clone(), cx)); -// let workspace_b = window_b.root(cx_b); -// let editor_b = workspace_b -// .update(cx_b, |workspace, cx| { -// workspace.open_path((worktree_id, "main.rs"), None, true, cx) -// }) -// .await -// .unwrap() -// .downcast::() -// .unwrap(); - -// let mut fake_language_server = fake_language_servers.next().await.unwrap(); -// let mut requests = fake_language_server -// .handle_request::(|params, _| async move { -// assert_eq!( -// params.text_document.uri, -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// ); -// assert_eq!(params.range.start, lsp::Position::new(0, 0)); -// assert_eq!(params.range.end, lsp::Position::new(0, 0)); -// Ok(None) -// }); -// executor.advance_clock(editor::CODE_ACTIONS_DEBOUNCE_TIMEOUT * 2); -// requests.next().await; - -// // Move cursor to a location that contains code actions. -// editor_b.update(cx_b, |editor, cx| { -// editor.change_selections(None, cx, |s| { -// s.select_ranges([Point::new(1, 31)..Point::new(1, 31)]) -// }); -// cx.focus(&editor_b); -// }); - -// let mut requests = fake_language_server -// .handle_request::(|params, _| async move { -// assert_eq!( -// params.text_document.uri, -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// ); -// assert_eq!(params.range.start, lsp::Position::new(1, 31)); -// assert_eq!(params.range.end, lsp::Position::new(1, 31)); - -// Ok(Some(vec![lsp::CodeActionOrCommand::CodeAction( -// lsp::CodeAction { -// title: "Inline into all callers".to_string(), -// edit: Some(lsp::WorkspaceEdit { -// changes: Some( -// [ -// ( -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// vec![lsp::TextEdit::new( -// lsp::Range::new( -// lsp::Position::new(1, 22), -// lsp::Position::new(1, 34), -// ), -// "4".to_string(), -// )], -// ), -// ( -// lsp::Url::from_file_path("/a/other.rs").unwrap(), -// vec![lsp::TextEdit::new( -// lsp::Range::new( -// lsp::Position::new(0, 0), -// lsp::Position::new(0, 27), -// ), -// "".to_string(), -// )], -// ), -// ] -// .into_iter() -// .collect(), -// ), -// ..Default::default() -// }), -// data: Some(json!({ -// "codeActionParams": { -// "range": { -// "start": {"line": 1, "column": 31}, -// "end": {"line": 1, "column": 31}, -// } -// } -// })), -// ..Default::default() -// }, -// )])) -// }); -// executor.advance_clock(editor::CODE_ACTIONS_DEBOUNCE_TIMEOUT * 2); -// requests.next().await; - -// // Toggle code actions and wait for them to display. -// editor_b.update(cx_b, |editor, cx| { -// editor.toggle_code_actions( -// &ToggleCodeActions { -// deployed_from_indicator: false, -// }, -// cx, -// ); -// }); -// cx_a.foreground().run_until_parked(); - -// editor_b.read_with(cx_b, |editor, _| assert!(editor.context_menu_visible())); - -// fake_language_server.remove_request_handler::(); - -// // Confirming the code action will trigger a resolve request. -// let confirm_action = workspace_b -// .update(cx_b, |workspace, cx| { -// Editor::confirm_code_action(workspace, &ConfirmCodeAction { item_ix: Some(0) }, cx) -// }) -// .unwrap(); -// fake_language_server.handle_request::( -// |_, _| async move { -// Ok(lsp::CodeAction { -// title: "Inline into all callers".to_string(), -// edit: Some(lsp::WorkspaceEdit { -// changes: Some( -// [ -// ( -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// vec![lsp::TextEdit::new( -// lsp::Range::new( -// lsp::Position::new(1, 22), -// lsp::Position::new(1, 34), -// ), -// "4".to_string(), -// )], -// ), -// ( -// lsp::Url::from_file_path("/a/other.rs").unwrap(), -// vec![lsp::TextEdit::new( -// lsp::Range::new( -// lsp::Position::new(0, 0), -// lsp::Position::new(0, 27), -// ), -// "".to_string(), -// )], -// ), -// ] -// .into_iter() -// .collect(), -// ), -// ..Default::default() -// }), -// ..Default::default() -// }) -// }, -// ); - -// // After the action is confirmed, an editor containing both modified files is opened. -// confirm_action.await.unwrap(); - -// let code_action_editor = workspace_b.read_with(cx_b, |workspace, cx| { -// workspace -// .active_item(cx) -// .unwrap() -// .downcast::() -// .unwrap() -// }); -// code_action_editor.update(cx_b, |editor, cx| { -// assert_eq!(editor.text(cx), "mod other;\nfn main() { let foo = 4; }\n"); -// editor.undo(&Undo, cx); -// assert_eq!( -// editor.text(cx), -// "mod other;\nfn main() { let foo = other::foo(); }\npub fn foo() -> usize { 4 }" -// ); -// editor.redo(&Redo, cx); -// assert_eq!(editor.text(cx), "mod other;\nfn main() { let foo = 4; }\n"); -// }); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_collaborating_with_renames( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); - -// cx_b.update(editor::init); - -// // Set up a fake language server. -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language -// .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { -// capabilities: lsp::ServerCapabilities { -// rename_provider: Some(lsp::OneOf::Right(lsp::RenameOptions { -// prepare_provider: Some(true), -// work_done_progress_options: Default::default(), -// })), -// ..Default::default() -// }, -// ..Default::default() -// })) -// .await; -// client_a.language_registry().add(Arc::new(language)); - -// client_a -// .fs() -// .insert_tree( -// "/dir", -// json!({ -// "one.rs": "const ONE: usize = 1;", -// "two.rs": "const TWO: usize = one::ONE + one::ONE;" -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/dir", cx_a).await; -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); -// let project_b = client_b.build_remote_project(project_id, cx_b).await; - -// let window_b = -// cx_b.add_window(|cx| Workspace::new(0, project_b.clone(), client_b.app_state.clone(), cx)); -// let workspace_b = window_b.root(cx_b); -// let editor_b = workspace_b -// .update(cx_b, |workspace, cx| { -// workspace.open_path((worktree_id, "one.rs"), None, true, cx) -// }) -// .await -// .unwrap() -// .downcast::() -// .unwrap(); -// let fake_language_server = fake_language_servers.next().await.unwrap(); - -// // Move cursor to a location that can be renamed. -// let prepare_rename = editor_b.update(cx_b, |editor, cx| { -// editor.change_selections(None, cx, |s| s.select_ranges([7..7])); -// editor.rename(&Rename, cx).unwrap() -// }); - -// fake_language_server -// .handle_request::(|params, _| async move { -// assert_eq!(params.text_document.uri.as_str(), "file:///dir/one.rs"); -// assert_eq!(params.position, lsp::Position::new(0, 7)); -// Ok(Some(lsp::PrepareRenameResponse::Range(lsp::Range::new( -// lsp::Position::new(0, 6), -// lsp::Position::new(0, 9), -// )))) -// }) -// .next() -// .await -// .unwrap(); -// prepare_rename.await.unwrap(); -// editor_b.update(cx_b, |editor, cx| { -// use editor::ToOffset; -// let rename = editor.pending_rename().unwrap(); -// let buffer = editor.buffer().read(cx).snapshot(cx); -// assert_eq!( -// rename.range.start.to_offset(&buffer)..rename.range.end.to_offset(&buffer), -// 6..9 -// ); -// rename.editor.update(cx, |rename_editor, cx| { -// rename_editor.buffer().update(cx, |rename_buffer, cx| { -// rename_buffer.edit([(0..3, "THREE")], None, cx); -// }); -// }); -// }); - -// let confirm_rename = workspace_b.update(cx_b, |workspace, cx| { -// Editor::confirm_rename(workspace, &ConfirmRename, cx).unwrap() -// }); -// fake_language_server -// .handle_request::(|params, _| async move { -// assert_eq!( -// params.text_document_position.text_document.uri.as_str(), -// "file:///dir/one.rs" -// ); -// assert_eq!( -// params.text_document_position.position, -// lsp::Position::new(0, 6) -// ); -// assert_eq!(params.new_name, "THREE"); -// Ok(Some(lsp::WorkspaceEdit { -// changes: Some( -// [ -// ( -// lsp::Url::from_file_path("/dir/one.rs").unwrap(), -// vec![lsp::TextEdit::new( -// lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)), -// "THREE".to_string(), -// )], -// ), -// ( -// lsp::Url::from_file_path("/dir/two.rs").unwrap(), -// vec![ -// lsp::TextEdit::new( -// lsp::Range::new( -// lsp::Position::new(0, 24), -// lsp::Position::new(0, 27), -// ), -// "THREE".to_string(), -// ), -// lsp::TextEdit::new( -// lsp::Range::new( -// lsp::Position::new(0, 35), -// lsp::Position::new(0, 38), -// ), -// "THREE".to_string(), -// ), -// ], -// ), -// ] -// .into_iter() -// .collect(), -// ), -// ..Default::default() -// })) -// }) -// .next() -// .await -// .unwrap(); -// confirm_rename.await.unwrap(); - -// let rename_editor = workspace_b.read_with(cx_b, |workspace, cx| { -// workspace -// .active_item(cx) -// .unwrap() -// .downcast::() -// .unwrap() -// }); -// rename_editor.update(cx_b, |editor, cx| { -// assert_eq!( -// editor.text(cx), -// "const THREE: usize = 1;\nconst TWO: usize = one::THREE + one::THREE;" -// ); -// editor.undo(&Undo, cx); -// assert_eq!( -// editor.text(cx), -// "const ONE: usize = 1;\nconst TWO: usize = one::ONE + one::ONE;" -// ); -// editor.redo(&Redo, cx); -// assert_eq!( -// editor.text(cx), -// "const THREE: usize = 1;\nconst TWO: usize = one::THREE + one::THREE;" -// ); -// }); - -// // Ensure temporary rename edits cannot be undone/redone. -// editor_b.update(cx_b, |editor, cx| { -// editor.undo(&Undo, cx); -// assert_eq!(editor.text(cx), "const ONE: usize = 1;"); -// editor.undo(&Undo, cx); -// assert_eq!(editor.text(cx), "const ONE: usize = 1;"); -// editor.redo(&Redo, cx); -// assert_eq!(editor.text(cx), "const THREE: usize = 1;"); -// }) -// } - -// #[gpui::test(iterations = 10)] -// async fn test_language_server_statuses( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); - -// cx_b.update(editor::init); - -// // Set up a fake language server. -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language -// .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { -// name: "the-language-server", -// ..Default::default() -// })) -// .await; -// client_a.language_registry().add(Arc::new(language)); - -// client_a -// .fs() -// .insert_tree( -// "/dir", -// json!({ -// "main.rs": "const ONE: usize = 1;", -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/dir", cx_a).await; - -// let _buffer_a = project_a -// .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) -// .await -// .unwrap(); - -// let fake_language_server = fake_language_servers.next().await.unwrap(); -// fake_language_server.start_progress("the-token").await; -// fake_language_server.notify::(lsp::ProgressParams { -// token: lsp::NumberOrString::String("the-token".to_string()), -// value: lsp::ProgressParamsValue::WorkDone(lsp::WorkDoneProgress::Report( -// lsp::WorkDoneProgressReport { -// message: Some("the-message".to_string()), -// ..Default::default() -// }, -// )), -// }); -// executor.run_until_parked(); - -// project_a.read_with(cx_a, |project, _| { -// let status = project.language_server_statuses().next().unwrap(); -// assert_eq!(status.name, "the-language-server"); -// assert_eq!(status.pending_work.len(), 1); -// assert_eq!( -// status.pending_work["the-token"].message.as_ref().unwrap(), -// "the-message" -// ); -// }); - -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); -// executor.run_until_parked(); -// let project_b = client_b.build_remote_project(project_id, cx_b).await; - -// project_b.read_with(cx_b, |project, _| { -// let status = project.language_server_statuses().next().unwrap(); -// assert_eq!(status.name, "the-language-server"); -// }); - -// fake_language_server.notify::(lsp::ProgressParams { -// token: lsp::NumberOrString::String("the-token".to_string()), -// value: lsp::ProgressParamsValue::WorkDone(lsp::WorkDoneProgress::Report( -// lsp::WorkDoneProgressReport { -// message: Some("the-message-2".to_string()), -// ..Default::default() -// }, -// )), -// }); -// executor.run_until_parked(); - -// project_a.read_with(cx_a, |project, _| { -// let status = project.language_server_statuses().next().unwrap(); -// assert_eq!(status.name, "the-language-server"); -// assert_eq!(status.pending_work.len(), 1); -// assert_eq!( -// status.pending_work["the-token"].message.as_ref().unwrap(), -// "the-message-2" -// ); -// }); - -// project_b.read_with(cx_b, |project, _| { -// let status = project.language_server_statuses().next().unwrap(); -// assert_eq!(status.name, "the-language-server"); -// assert_eq!(status.pending_work.len(), 1); -// assert_eq!( -// status.pending_work["the-token"].message.as_ref().unwrap(), -// "the-message-2" -// ); -// }); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_share_project( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// cx_c: &mut TestAppContext, -// ) { -// let window_b = cx_b.add_empty_window(); -// let mut server = TestServer::start(executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// let client_c = server.create_client(cx_c, "user_c").await; -// server -// .make_contacts(&mut [(&client_a, cx_a), (&client_b, cx_b), (&client_c, cx_c)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); -// let active_call_b = cx_b.read(ActiveCall::global); -// let active_call_c = cx_c.read(ActiveCall::global); - -// client_a -// .fs() -// .insert_tree( -// "/a", -// json!({ -// ".gitignore": "ignored-dir", -// "a.txt": "a-contents", -// "b.txt": "b-contents", -// "ignored-dir": { -// "c.txt": "", -// "d.txt": "", -// } -// }), -// ) -// .await; - -// // Invite client B to collaborate on a project -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; -// active_call_a -// .update(cx_a, |call, cx| { -// call.invite(client_b.user_id().unwrap(), Some(project_a.clone()), cx) -// }) -// .await -// .unwrap(); - -// // Join that project as client B - -// let incoming_call_b = active_call_b.read_with(cx_b, |call, _| call.incoming()); -// executor.run_until_parked(); -// let call = incoming_call_b.borrow().clone().unwrap(); -// assert_eq!(call.calling_user.github_login, "user_a"); -// let initial_project = call.initial_project.unwrap(); -// active_call_b -// .update(cx_b, |call, cx| call.accept_incoming(cx)) -// .await -// .unwrap(); -// let client_b_peer_id = client_b.peer_id().unwrap(); -// let project_b = client_b -// .build_remote_project(initial_project.id, cx_b) -// .await; - -// let replica_id_b = project_b.read_with(cx_b, |project, _| project.replica_id()); - -// executor.run_until_parked(); - -// project_a.read_with(cx_a, |project, _| { -// let client_b_collaborator = project.collaborators().get(&client_b_peer_id).unwrap(); -// assert_eq!(client_b_collaborator.replica_id, replica_id_b); -// }); - -// project_b.read_with(cx_b, |project, cx| { -// let worktree = project.worktrees().next().unwrap().read(cx); -// assert_eq!( -// worktree.paths().map(AsRef::as_ref).collect::>(), -// [ -// Path::new(".gitignore"), -// Path::new("a.txt"), -// Path::new("b.txt"), -// Path::new("ignored-dir"), -// ] -// ); -// }); - -// project_b -// .update(cx_b, |project, cx| { -// let worktree = project.worktrees().next().unwrap(); -// let entry = worktree.read(cx).entry_for_path("ignored-dir").unwrap(); -// project.expand_entry(worktree_id, entry.id, cx).unwrap() -// }) -// .await -// .unwrap(); - -// project_b.read_with(cx_b, |project, cx| { -// let worktree = project.worktrees().next().unwrap().read(cx); -// assert_eq!( -// worktree.paths().map(AsRef::as_ref).collect::>(), -// [ -// Path::new(".gitignore"), -// Path::new("a.txt"), -// Path::new("b.txt"), -// Path::new("ignored-dir"), -// Path::new("ignored-dir/c.txt"), -// Path::new("ignored-dir/d.txt"), -// ] -// ); -// }); - -// // Open the same file as client B and client A. -// let buffer_b = project_b -// .update(cx_b, |p, cx| p.open_buffer((worktree_id, "b.txt"), cx)) -// .await -// .unwrap(); - -// buffer_b.read_with(cx_b, |buf, _| assert_eq!(buf.text(), "b-contents")); - -// project_a.read_with(cx_a, |project, cx| { -// assert!(project.has_open_buffer((worktree_id, "b.txt"), cx)) -// }); -// let buffer_a = project_a -// .update(cx_a, |p, cx| p.open_buffer((worktree_id, "b.txt"), cx)) -// .await -// .unwrap(); - -// let editor_b = window_b.build_view(cx_b, |cx| Editor::for_buffer(buffer_b, None, cx)); - -// // Client A sees client B's selection -// executor.run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// buffer -// .snapshot() -// .remote_selections_in_range(Anchor::MIN..Anchor::MAX) -// .count() -// == 1 -// }); - -// // Edit the buffer as client B and see that edit as client A. -// editor_b.update(cx_b, |editor, cx| editor.handle_input("ok, ", cx)); -// executor.run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// assert_eq!(buffer.text(), "ok, b-contents") -// }); - -// // Client B can invite client C on a project shared by client A. -// active_call_b -// .update(cx_b, |call, cx| { -// call.invite(client_c.user_id().unwrap(), Some(project_b.clone()), cx) -// }) -// .await -// .unwrap(); - -// let incoming_call_c = active_call_c.read_with(cx_c, |call, _| call.incoming()); -// executor.run_until_parked(); -// let call = incoming_call_c.borrow().clone().unwrap(); -// assert_eq!(call.calling_user.github_login, "user_b"); -// let initial_project = call.initial_project.unwrap(); -// active_call_c -// .update(cx_c, |call, cx| call.accept_incoming(cx)) -// .await -// .unwrap(); -// let _project_c = client_c -// .build_remote_project(initial_project.id, cx_c) -// .await; - -// // Client B closes the editor, and client A sees client B's selections removed. -// cx_b.update(move |_| drop(editor_b)); -// executor.run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// buffer -// .snapshot() -// .remote_selections_in_range(Anchor::MIN..Anchor::MAX) -// .count() -// == 0 -// }); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_on_input_format_from_host_to_guest( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); - -// // Set up a fake language server. -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language -// .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { -// capabilities: lsp::ServerCapabilities { -// document_on_type_formatting_provider: Some(lsp::DocumentOnTypeFormattingOptions { -// first_trigger_character: ":".to_string(), -// more_trigger_character: Some(vec![">".to_string()]), -// }), -// ..Default::default() -// }, -// ..Default::default() -// })) -// .await; -// client_a.language_registry().add(Arc::new(language)); - -// client_a -// .fs() -// .insert_tree( -// "/a", -// json!({ -// "main.rs": "fn main() { a }", -// "other.rs": "// Test file", -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); -// let project_b = client_b.build_remote_project(project_id, cx_b).await; - -// // Open a file in an editor as the host. -// let buffer_a = project_a -// .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) -// .await -// .unwrap(); -// let window_a = cx_a.add_empty_window(); -// let editor_a = window_a -// .update(cx_a, |_, cx| { -// cx.build_view(|cx| Editor::for_buffer(buffer_a, Some(project_a.clone()), cx)) -// }) -// .unwrap(); - -// let fake_language_server = fake_language_servers.next().await.unwrap(); -// executor.run_until_parked(); - -// // Receive an OnTypeFormatting request as the host's language server. -// // Return some formattings from the host's language server. -// fake_language_server.handle_request::( -// |params, _| async move { -// assert_eq!( -// params.text_document_position.text_document.uri, -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// ); -// assert_eq!( -// params.text_document_position.position, -// lsp::Position::new(0, 14), -// ); - -// Ok(Some(vec![lsp::TextEdit { -// new_text: "~<".to_string(), -// range: lsp::Range::new(lsp::Position::new(0, 14), lsp::Position::new(0, 14)), -// }])) -// }, -// ); - -// // Open the buffer on the guest and see that the formattings worked -// let buffer_b = project_b -// .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) -// .await -// .unwrap(); - -// // Type a on type formatting trigger character as the guest. -// editor_a.update(cx_a, |editor, cx| { -// cx.focus(&editor_a); -// editor.change_selections(None, cx, |s| s.select_ranges([13..13])); -// editor.handle_input(">", cx); -// }); - -// executor.run_until_parked(); - -// buffer_b.read_with(cx_b, |buffer, _| { -// assert_eq!(buffer.text(), "fn main() { a>~< }") -// }); - -// // Undo should remove LSP edits first -// editor_a.update(cx_a, |editor, cx| { -// assert_eq!(editor.text(cx), "fn main() { a>~< }"); -// editor.undo(&Undo, cx); -// assert_eq!(editor.text(cx), "fn main() { a> }"); -// }); -// executor.run_until_parked(); - -// buffer_b.read_with(cx_b, |buffer, _| { -// assert_eq!(buffer.text(), "fn main() { a> }") -// }); - -// editor_a.update(cx_a, |editor, cx| { -// assert_eq!(editor.text(cx), "fn main() { a> }"); -// editor.undo(&Undo, cx); -// assert_eq!(editor.text(cx), "fn main() { a }"); -// }); -// executor.run_until_parked(); - -// buffer_b.read_with(cx_b, |buffer, _| { -// assert_eq!(buffer.text(), "fn main() { a }") -// }); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_on_input_format_from_guest_to_host( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); - -// // Set up a fake language server. -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language -// .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { -// capabilities: lsp::ServerCapabilities { -// document_on_type_formatting_provider: Some(lsp::DocumentOnTypeFormattingOptions { -// first_trigger_character: ":".to_string(), -// more_trigger_character: Some(vec![">".to_string()]), -// }), -// ..Default::default() -// }, -// ..Default::default() -// })) -// .await; -// client_a.language_registry().add(Arc::new(language)); - -// client_a -// .fs() -// .insert_tree( -// "/a", -// json!({ -// "main.rs": "fn main() { a }", -// "other.rs": "// Test file", -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); -// let project_b = client_b.build_remote_project(project_id, cx_b).await; - -// // Open a file in an editor as the guest. -// let buffer_b = project_b -// .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) -// .await -// .unwrap(); -// let window_b = cx_b.add_empty_window(); -// let editor_b = window_b.build_view(cx_b, |cx| { -// Editor::for_buffer(buffer_b, Some(project_b.clone()), cx) -// }); - -// let fake_language_server = fake_language_servers.next().await.unwrap(); -// executor.run_until_parked(); -// // Type a on type formatting trigger character as the guest. -// editor_b.update(cx_b, |editor, cx| { -// editor.change_selections(None, cx, |s| s.select_ranges([13..13])); -// editor.handle_input(":", cx); -// cx.focus(&editor_b); -// }); - -// // Receive an OnTypeFormatting request as the host's language server. -// // Return some formattings from the host's language server. -// cx_a.foreground().start_waiting(); -// fake_language_server -// .handle_request::(|params, _| async move { -// assert_eq!( -// params.text_document_position.text_document.uri, -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// ); -// assert_eq!( -// params.text_document_position.position, -// lsp::Position::new(0, 14), -// ); - -// Ok(Some(vec![lsp::TextEdit { -// new_text: "~:".to_string(), -// range: lsp::Range::new(lsp::Position::new(0, 14), lsp::Position::new(0, 14)), -// }])) -// }) -// .next() -// .await -// .unwrap(); -// cx_a.foreground().finish_waiting(); - -// // Open the buffer on the host and see that the formattings worked -// let buffer_a = project_a -// .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) -// .await -// .unwrap(); -// executor.run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// assert_eq!(buffer.text(), "fn main() { a:~: }") -// }); - -// // Undo should remove LSP edits first -// editor_b.update(cx_b, |editor, cx| { -// assert_eq!(editor.text(cx), "fn main() { a:~: }"); -// editor.undo(&Undo, cx); -// assert_eq!(editor.text(cx), "fn main() { a: }"); -// }); -// executor.run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// assert_eq!(buffer.text(), "fn main() { a: }") -// }); - -// editor_b.update(cx_b, |editor, cx| { -// assert_eq!(editor.text(cx), "fn main() { a: }"); -// editor.undo(&Undo, cx); -// assert_eq!(editor.text(cx), "fn main() { a }"); -// }); -// executor.run_until_parked(); - -// buffer_a.read_with(cx_a, |buffer, _| { -// assert_eq!(buffer.text(), "fn main() { a }") -// }); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_mutual_editor_inlay_hint_cache_update( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); -// let active_call_b = cx_b.read(ActiveCall::global); - -// cx_a.update(editor::init); -// cx_b.update(editor::init); - -// cx_a.update(|cx| { -// cx.update_global(|store: &mut SettingsStore, cx| { -// store.update_user_settings::(cx, |settings| { -// settings.defaults.inlay_hints = Some(InlayHintSettings { -// enabled: true, -// show_type_hints: true, -// show_parameter_hints: false, -// show_other_hints: true, -// }) -// }); -// }); -// }); -// cx_b.update(|cx| { -// cx.update_global(|store: &mut SettingsStore, cx| { -// store.update_user_settings::(cx, |settings| { -// settings.defaults.inlay_hints = Some(InlayHintSettings { -// enabled: true, -// show_type_hints: true, -// show_parameter_hints: false, -// show_other_hints: true, -// }) -// }); -// }); -// }); - -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language -// .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { -// capabilities: lsp::ServerCapabilities { -// inlay_hint_provider: Some(lsp::OneOf::Left(true)), -// ..Default::default() -// }, -// ..Default::default() -// })) -// .await; -// let language = Arc::new(language); -// client_a.language_registry().add(Arc::clone(&language)); -// client_b.language_registry().add(language); - -// // Client A opens a project. -// client_a -// .fs() -// .insert_tree( -// "/a", -// json!({ -// "main.rs": "fn main() { a } // and some long comment to ensure inlay hints are not trimmed out", -// "other.rs": "// Test file", -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; -// active_call_a -// .update(cx_a, |call, cx| call.set_location(Some(&project_a), cx)) -// .await -// .unwrap(); -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); - -// // Client B joins the project -// let project_b = client_b.build_remote_project(project_id, cx_b).await; -// active_call_b -// .update(cx_b, |call, cx| call.set_location(Some(&project_b), cx)) -// .await -// .unwrap(); - -// let workspace_a = client_a.build_workspace(&project_a, cx_a).root_view(cx_a); -// cx_a.foreground().start_waiting(); - -// // The host opens a rust file. -// let _buffer_a = project_a -// .update(cx_a, |project, cx| { -// project.open_local_buffer("/a/main.rs", cx) -// }) -// .await -// .unwrap(); -// let fake_language_server = fake_language_servers.next().await.unwrap(); -// let editor_a = workspace_a -// .update(cx_a, |workspace, cx| { -// workspace.open_path((worktree_id, "main.rs"), None, true, cx) -// }) -// .await -// .unwrap() -// .downcast::() -// .unwrap(); - -// // Set up the language server to return an additional inlay hint on each request. -// let edits_made = Arc::new(AtomicUsize::new(0)); -// let closure_edits_made = Arc::clone(&edits_made); -// fake_language_server -// .handle_request::(move |params, _| { -// let task_edits_made = Arc::clone(&closure_edits_made); -// async move { -// assert_eq!( -// params.text_document.uri, -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// ); -// let edits_made = task_edits_made.load(atomic::Ordering::Acquire); -// Ok(Some(vec![lsp::InlayHint { -// position: lsp::Position::new(0, edits_made as u32), -// label: lsp::InlayHintLabel::String(edits_made.to_string()), -// kind: None, -// text_edits: None, -// tooltip: None, -// padding_left: None, -// padding_right: None, -// data: None, -// }])) -// } -// }) -// .next() -// .await -// .unwrap(); - -// executor.run_until_parked(); - -// let initial_edit = edits_made.load(atomic::Ordering::Acquire); -// editor_a.update(cx_a, |editor, _| { -// assert_eq!( -// vec![initial_edit.to_string()], -// extract_hint_labels(editor), -// "Host should get its first hints when opens an editor" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 1, -// "Host editor update the cache version after every cache/view change", -// ); -// }); -// let workspace_b = client_b.build_workspace(&project_b, cx_b).root(cx_b); -// let editor_b = workspace_b -// .update(cx_b, |workspace, cx| { -// workspace.open_path((worktree_id, "main.rs"), None, true, cx) -// }) -// .await -// .unwrap() -// .downcast::() -// .unwrap(); - -// executor.run_until_parked(); -// editor_b.update(cx_b, |editor, _| { -// assert_eq!( -// vec![initial_edit.to_string()], -// extract_hint_labels(editor), -// "Client should get its first hints when opens an editor" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 1, -// "Guest editor update the cache version after every cache/view change" -// ); -// }); - -// let after_client_edit = edits_made.fetch_add(1, atomic::Ordering::Release) + 1; -// editor_b.update(cx_b, |editor, cx| { -// editor.change_selections(None, cx, |s| s.select_ranges([13..13].clone())); -// editor.handle_input(":", cx); -// cx.focus(&editor_b); -// }); - -// executor.run_until_parked(); -// editor_a.update(cx_a, |editor, _| { -// assert_eq!( -// vec![after_client_edit.to_string()], -// extract_hint_labels(editor), -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!(inlay_cache.version(), 2); -// }); -// editor_b.update(cx_b, |editor, _| { -// assert_eq!( -// vec![after_client_edit.to_string()], -// extract_hint_labels(editor), -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!(inlay_cache.version(), 2); -// }); - -// let after_host_edit = edits_made.fetch_add(1, atomic::Ordering::Release) + 1; -// editor_a.update(cx_a, |editor, cx| { -// editor.change_selections(None, cx, |s| s.select_ranges([13..13])); -// editor.handle_input("a change to increment both buffers' versions", cx); -// cx.focus(&editor_a); -// }); - -// executor.run_until_parked(); -// editor_a.update(cx_a, |editor, _| { -// assert_eq!( -// vec![after_host_edit.to_string()], -// extract_hint_labels(editor), -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!(inlay_cache.version(), 3); -// }); -// editor_b.update(cx_b, |editor, _| { -// assert_eq!( -// vec![after_host_edit.to_string()], -// extract_hint_labels(editor), -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!(inlay_cache.version(), 3); -// }); - -// let after_special_edit_for_refresh = edits_made.fetch_add(1, atomic::Ordering::Release) + 1; -// fake_language_server -// .request::(()) -// .await -// .expect("inlay refresh request failed"); - -// executor.run_until_parked(); -// editor_a.update(cx_a, |editor, _| { -// assert_eq!( -// vec![after_special_edit_for_refresh.to_string()], -// extract_hint_labels(editor), -// "Host should react to /refresh LSP request" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 4, -// "Host should accepted all edits and bump its cache version every time" -// ); -// }); -// editor_b.update(cx_b, |editor, _| { -// assert_eq!( -// vec![after_special_edit_for_refresh.to_string()], -// extract_hint_labels(editor), -// "Guest should get a /refresh LSP request propagated by host" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 4, -// "Guest should accepted all edits and bump its cache version every time" -// ); -// }); -// } - -// #[gpui::test(iterations = 10)] -// async fn test_inlay_hint_refresh_is_forwarded( -// executor: BackgroundExecutor, -// cx_a: &mut TestAppContext, -// cx_b: &mut TestAppContext, -// ) { -// let mut server = TestServer::start(&executor).await; -// let client_a = server.create_client(cx_a, "user_a").await; -// let client_b = server.create_client(cx_b, "user_b").await; -// server -// .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) -// .await; -// let active_call_a = cx_a.read(ActiveCall::global); -// let active_call_b = cx_b.read(ActiveCall::global); - -// cx_a.update(editor::init); -// cx_b.update(editor::init); - -// cx_a.update(|cx| { -// cx.update_global(|store: &mut SettingsStore, cx| { -// store.update_user_settings::(cx, |settings| { -// settings.defaults.inlay_hints = Some(InlayHintSettings { -// enabled: false, -// show_type_hints: false, -// show_parameter_hints: false, -// show_other_hints: false, -// }) -// }); -// }); -// }); -// cx_b.update(|cx| { -// cx.update_global(|store: &mut SettingsStore, cx| { -// store.update_user_settings::(cx, |settings| { -// settings.defaults.inlay_hints = Some(InlayHintSettings { -// enabled: true, -// show_type_hints: true, -// show_parameter_hints: true, -// show_other_hints: true, -// }) -// }); -// }); -// }); - -// let mut language = Language::new( -// LanguageConfig { -// name: "Rust".into(), -// path_suffixes: vec!["rs".to_string()], -// ..Default::default() -// }, -// Some(tree_sitter_rust::language()), -// ); -// let mut fake_language_servers = language -// .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { -// capabilities: lsp::ServerCapabilities { -// inlay_hint_provider: Some(lsp::OneOf::Left(true)), -// ..Default::default() -// }, -// ..Default::default() -// })) -// .await; -// let language = Arc::new(language); -// client_a.language_registry().add(Arc::clone(&language)); -// client_b.language_registry().add(language); - -// client_a -// .fs() -// .insert_tree( -// "/a", -// json!({ -// "main.rs": "fn main() { a } // and some long comment to ensure inlay hints are not trimmed out", -// "other.rs": "// Test file", -// }), -// ) -// .await; -// let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; -// active_call_a -// .update(cx_a, |call, cx| call.set_location(Some(&project_a), cx)) -// .await -// .unwrap(); -// let project_id = active_call_a -// .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) -// .await -// .unwrap(); - -// let project_b = client_b.build_remote_project(project_id, cx_b).await; -// active_call_b -// .update(cx_b, |call, cx| call.set_location(Some(&project_b), cx)) -// .await -// .unwrap(); - -// let workspace_a = client_a.build_workspace(&project_a, cx_a).root(cx_a); -// let workspace_b = client_b.build_workspace(&project_b, cx_b).root(cx_b); -// cx_a.foreground().start_waiting(); -// cx_b.foreground().start_waiting(); - -// let editor_a = workspace_a -// .update(cx_a, |workspace, cx| { -// workspace.open_path((worktree_id, "main.rs"), None, true, cx) -// }) -// .await -// .unwrap() -// .downcast::() -// .unwrap(); - -// let editor_b = workspace_b -// .update(cx_b, |workspace, cx| { -// workspace.open_path((worktree_id, "main.rs"), None, true, cx) -// }) -// .await -// .unwrap() -// .downcast::() -// .unwrap(); - -// let other_hints = Arc::new(AtomicBool::new(false)); -// let fake_language_server = fake_language_servers.next().await.unwrap(); -// let closure_other_hints = Arc::clone(&other_hints); -// fake_language_server -// .handle_request::(move |params, _| { -// let task_other_hints = Arc::clone(&closure_other_hints); -// async move { -// assert_eq!( -// params.text_document.uri, -// lsp::Url::from_file_path("/a/main.rs").unwrap(), -// ); -// let other_hints = task_other_hints.load(atomic::Ordering::Acquire); -// let character = if other_hints { 0 } else { 2 }; -// let label = if other_hints { -// "other hint" -// } else { -// "initial hint" -// }; -// Ok(Some(vec![lsp::InlayHint { -// position: lsp::Position::new(0, character), -// label: lsp::InlayHintLabel::String(label.to_string()), -// kind: None, -// text_edits: None, -// tooltip: None, -// padding_left: None, -// padding_right: None, -// data: None, -// }])) -// } -// }) -// .next() -// .await -// .unwrap(); -// cx_a.foreground().finish_waiting(); -// cx_b.foreground().finish_waiting(); - -// executor.run_until_parked(); -// editor_a.update(cx_a, |editor, _| { -// assert!( -// extract_hint_labels(editor).is_empty(), -// "Host should get no hints due to them turned off" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 0, -// "Turned off hints should not generate version updates" -// ); -// }); - -// executor.run_until_parked(); -// editor_b.update(cx_b, |editor, _| { -// assert_eq!( -// vec!["initial hint".to_string()], -// extract_hint_labels(editor), -// "Client should get its first hints when opens an editor" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 1, -// "Should update cache verison after first hints" -// ); -// }); - -// other_hints.fetch_or(true, atomic::Ordering::Release); -// fake_language_server -// .request::(()) -// .await -// .expect("inlay refresh request failed"); -// executor.run_until_parked(); -// editor_a.update(cx_a, |editor, _| { -// assert!( -// extract_hint_labels(editor).is_empty(), -// "Host should get nop hints due to them turned off, even after the /refresh" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 0, -// "Turned off hints should not generate version updates, again" -// ); -// }); - -// executor.run_until_parked(); -// editor_b.update(cx_b, |editor, _| { -// assert_eq!( -// vec!["other hint".to_string()], -// extract_hint_labels(editor), -// "Guest should get a /refresh LSP request propagated by host despite host hints are off" -// ); -// let inlay_cache = editor.inlay_hint_cache(); -// assert_eq!( -// inlay_cache.version(), -// 2, -// "Guest should accepted all edits and bump its cache version every time" -// ); -// }); -// } - -// fn extract_hint_labels(editor: &Editor) -> Vec { -// let mut labels = Vec::new(); -// for hint in editor.inlay_hint_cache().hints() { -// match hint.label { -// project::InlayHintLabel::String(s) => labels.push(s), -// _ => unreachable!(), -// } -// } -// labels -// } +use std::{ + path::Path, + sync::{ + atomic::{self, AtomicBool, AtomicUsize}, + Arc, + }, +}; + +use call::ActiveCall; +use editor::{ + test::editor_test_context::{AssertionContextManager, EditorTestContext}, + ConfirmCodeAction, ConfirmCompletion, ConfirmRename, Editor, Redo, Rename, ToggleCodeActions, + Undo, +}; +use futures::StreamExt; +use gpui::{TestAppContext, VisualContext, VisualTestContext}; +use indoc::indoc; +use language::{ + language_settings::{AllLanguageSettings, InlayHintSettings}, + tree_sitter_rust, FakeLspAdapter, Language, LanguageConfig, +}; +use rpc::RECEIVE_TIMEOUT; +use serde_json::json; +use settings::SettingsStore; +use text::Point; +use workspace::Workspace; + +use crate::{rpc::RECONNECT_TIMEOUT, tests::TestServer}; + +#[gpui::test(iterations = 10)] +async fn test_host_disconnect( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, + cx_c: &mut TestAppContext, +) { + let mut server = TestServer::start(cx_a.executor()).await; + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + let client_c = server.create_client(cx_c, "user_c").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b), (&client_c, cx_c)]) + .await; + + cx_b.update(editor::init); + + client_a + .fs() + .insert_tree( + "/a", + serde_json::json!({ + "a.txt": "a-contents", + "b.txt": "b-contents", + }), + ) + .await; + + let active_call_a = cx_a.read(ActiveCall::global); + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + + let worktree_a = project_a.read_with(cx_a, |project, _| project.worktrees().next().unwrap()); + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + + let project_b = client_b.build_remote_project(project_id, cx_b).await; + cx_a.background_executor.run_until_parked(); + + assert!(worktree_a.read_with(cx_a, |tree, _| tree.as_local().unwrap().is_shared())); + + let workspace_b = + cx_b.add_window(|cx| Workspace::new(0, project_b.clone(), client_b.app_state.clone(), cx)); + let cx_b = &mut VisualTestContext::from_window(*workspace_b, cx_b); + + let editor_b = workspace_b + .update(cx_b, |workspace, cx| { + workspace.open_path((worktree_id, "b.txt"), None, true, cx) + }) + .unwrap() + .await + .unwrap() + .downcast::() + .unwrap(); + + //TODO: focus + assert!(cx_b.update_view(&editor_b, |editor, cx| editor.is_focused(cx))); + editor_b.update(cx_b, |editor, cx| editor.insert("X", cx)); + //todo(is_edited) + // assert!(workspace_b.is_edited(cx_b)); + + // Drop client A's connection. Collaborators should disappear and the project should not be shown as shared. + server.forbid_connections(); + server.disconnect_client(client_a.peer_id().unwrap()); + cx_a.background_executor + .advance_clock(RECEIVE_TIMEOUT + RECONNECT_TIMEOUT); + + project_a.read_with(cx_a, |project, _| project.collaborators().is_empty()); + + project_a.read_with(cx_a, |project, _| assert!(!project.is_shared())); + + project_b.read_with(cx_b, |project, _| project.is_read_only()); + + assert!(worktree_a.read_with(cx_a, |tree, _| !tree.as_local().unwrap().is_shared())); + + // Ensure client B's edited state is reset and that the whole window is blurred. + + workspace_b + .update(cx_b, |_, cx| { + assert_eq!(cx.focused(), None); + }) + .unwrap(); + // assert!(!workspace_b.is_edited(cx_b)); + + // Ensure client B is not prompted to save edits when closing window after disconnecting. + let can_close = workspace_b + .update(cx_b, |workspace, cx| workspace.prepare_to_close(true, cx)) + .unwrap() + .await + .unwrap(); + assert!(can_close); + + // Allow client A to reconnect to the server. + server.allow_connections(); + cx_a.background_executor.advance_clock(RECEIVE_TIMEOUT); + + // Client B calls client A again after they reconnected. + let active_call_b = cx_b.read(ActiveCall::global); + active_call_b + .update(cx_b, |call, cx| { + call.invite(client_a.user_id().unwrap(), None, cx) + }) + .await + .unwrap(); + cx_a.background_executor.run_until_parked(); + active_call_a + .update(cx_a, |call, cx| call.accept_incoming(cx)) + .await + .unwrap(); + + active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + + // Drop client A's connection again. We should still unshare it successfully. + server.forbid_connections(); + server.disconnect_client(client_a.peer_id().unwrap()); + cx_a.background_executor + .advance_clock(RECEIVE_TIMEOUT + RECONNECT_TIMEOUT); + + project_a.read_with(cx_a, |project, _| assert!(!project.is_shared())); +} + +#[gpui::test] +async fn test_newline_above_or_below_does_not_move_guest_cursor( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, +) { + let mut server = TestServer::start(cx_a.executor()).await; + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + let executor = cx_a.executor(); + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + + client_a + .fs() + .insert_tree("/dir", json!({ "a.txt": "Some text\n" })) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/dir", cx_a).await; + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + + let project_b = client_b.build_remote_project(project_id, cx_b).await; + + // Open a buffer as client A + let buffer_a = project_a + .update(cx_a, |p, cx| p.open_buffer((worktree_id, "a.txt"), cx)) + .await + .unwrap(); + let window_a = cx_a.add_empty_window(); + let editor_a = + window_a.build_view(cx_a, |cx| Editor::for_buffer(buffer_a, Some(project_a), cx)); + + let mut editor_cx_a = EditorTestContext { + cx: VisualTestContext::from_window(window_a, cx_a), + window: window_a.into(), + editor: editor_a, + assertion_cx: AssertionContextManager::new(), + }; + + let window_b = cx_b.add_empty_window(); + let mut cx_b = VisualTestContext::from_window(window_b, cx_b); + + // Open a buffer as client B + let buffer_b = project_b + .update(&mut cx_b, |p, cx| p.open_buffer((worktree_id, "a.txt"), cx)) + .await + .unwrap(); + let editor_b = window_b.build_view(&mut cx_b, |cx| { + Editor::for_buffer(buffer_b, Some(project_b), cx) + }); + let mut editor_cx_b = EditorTestContext { + cx: cx_b, + window: window_b.into(), + editor: editor_b, + assertion_cx: AssertionContextManager::new(), + }; + + // Test newline above + editor_cx_a.set_selections_state(indoc! {" + Some textˇ + "}); + editor_cx_b.set_selections_state(indoc! {" + Some textˇ + "}); + editor_cx_a.update_editor(|editor, cx| editor.newline_above(&editor::NewlineAbove, cx)); + executor.run_until_parked(); + editor_cx_a.assert_editor_state(indoc! {" + ˇ + Some text + "}); + editor_cx_b.assert_editor_state(indoc! {" + + Some textˇ + "}); + + // Test newline below + editor_cx_a.set_selections_state(indoc! {" + + Some textˇ + "}); + editor_cx_b.set_selections_state(indoc! {" + + Some textˇ + "}); + editor_cx_a.update_editor(|editor, cx| editor.newline_below(&editor::NewlineBelow, cx)); + executor.run_until_parked(); + editor_cx_a.assert_editor_state(indoc! {" + + Some text + ˇ + "}); + editor_cx_b.assert_editor_state(indoc! {" + + Some textˇ + + "}); +} + +#[gpui::test(iterations = 10)] +async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { + let mut server = TestServer::start(cx_a.executor()).await; + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + + // Set up a fake language server. + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + capabilities: lsp::ServerCapabilities { + completion_provider: Some(lsp::CompletionOptions { + trigger_characters: Some(vec![".".to_string()]), + resolve_provider: Some(true), + ..Default::default() + }), + ..Default::default() + }, + ..Default::default() + })) + .await; + client_a.language_registry().add(Arc::new(language)); + + client_a + .fs() + .insert_tree( + "/a", + json!({ + "main.rs": "fn main() { a }", + "other.rs": "", + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + let project_b = client_b.build_remote_project(project_id, cx_b).await; + + // Open a file in an editor as the guest. + let buffer_b = project_b + .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) + .await + .unwrap(); + let window_b = cx_b.add_empty_window(); + let editor_b = window_b.build_view(cx_b, |cx| { + Editor::for_buffer(buffer_b.clone(), Some(project_b.clone()), cx) + }); + + let fake_language_server = fake_language_servers.next().await.unwrap(); + cx_a.background_executor.run_until_parked(); + + buffer_b.read_with(cx_b, |buffer, _| { + assert!(!buffer.completion_triggers().is_empty()) + }); + + let mut cx_b = VisualTestContext::from_window(window_b, cx_b); + + // Type a completion trigger character as the guest. + editor_b.update(&mut cx_b, |editor, cx| { + editor.change_selections(None, cx, |s| s.select_ranges([13..13])); + editor.handle_input(".", cx); + editor_b.focus_handle(cx).focus(cx); + }); + + // Receive a completion request as the host's language server. + // Return some completions from the host's language server. + cx_a.executor().start_waiting(); + fake_language_server + .handle_request::(|params, _| async move { + assert_eq!( + params.text_document_position.text_document.uri, + lsp::Url::from_file_path("/a/main.rs").unwrap(), + ); + assert_eq!( + params.text_document_position.position, + lsp::Position::new(0, 14), + ); + + Ok(Some(lsp::CompletionResponse::Array(vec![ + lsp::CompletionItem { + label: "first_method(…)".into(), + detail: Some("fn(&mut self, B) -> C".into()), + text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit { + new_text: "first_method($1)".to_string(), + range: lsp::Range::new( + lsp::Position::new(0, 14), + lsp::Position::new(0, 14), + ), + })), + insert_text_format: Some(lsp::InsertTextFormat::SNIPPET), + ..Default::default() + }, + lsp::CompletionItem { + label: "second_method(…)".into(), + detail: Some("fn(&mut self, C) -> D".into()), + text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit { + new_text: "second_method()".to_string(), + range: lsp::Range::new( + lsp::Position::new(0, 14), + lsp::Position::new(0, 14), + ), + })), + insert_text_format: Some(lsp::InsertTextFormat::SNIPPET), + ..Default::default() + }, + ]))) + }) + .next() + .await + .unwrap(); + cx_a.executor().finish_waiting(); + + // Open the buffer on the host. + let buffer_a = project_a + .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) + .await + .unwrap(); + cx_a.executor().run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + assert_eq!(buffer.text(), "fn main() { a. }") + }); + + // Confirm a completion on the guest. + + editor_b.update(&mut cx_b, |editor, cx| { + assert!(editor.context_menu_visible()); + editor.confirm_completion(&ConfirmCompletion { item_ix: Some(0) }, cx); + assert_eq!(editor.text(cx), "fn main() { a.first_method() }"); + }); + + // Return a resolved completion from the host's language server. + // The resolved completion has an additional text edit. + fake_language_server.handle_request::( + |params, _| async move { + assert_eq!(params.label, "first_method(…)"); + Ok(lsp::CompletionItem { + label: "first_method(…)".into(), + detail: Some("fn(&mut self, B) -> C".into()), + text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit { + new_text: "first_method($1)".to_string(), + range: lsp::Range::new(lsp::Position::new(0, 14), lsp::Position::new(0, 14)), + })), + additional_text_edits: Some(vec![lsp::TextEdit { + new_text: "use d::SomeTrait;\n".to_string(), + range: lsp::Range::new(lsp::Position::new(0, 0), lsp::Position::new(0, 0)), + }]), + insert_text_format: Some(lsp::InsertTextFormat::SNIPPET), + ..Default::default() + }) + }, + ); + + // The additional edit is applied. + cx_a.executor().run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + assert_eq!( + buffer.text(), + "use d::SomeTrait;\nfn main() { a.first_method() }" + ); + }); + + buffer_b.read_with(&mut cx_b, |buffer, _| { + assert_eq!( + buffer.text(), + "use d::SomeTrait;\nfn main() { a.first_method() }" + ); + }); +} + +#[gpui::test(iterations = 10)] +async fn test_collaborating_with_code_actions( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, +) { + let mut server = TestServer::start(cx_a.executor()).await; + let client_a = server.create_client(cx_a, "user_a").await; + // + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + + cx_b.update(editor::init); + + // Set up a fake language server. + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await; + client_a.language_registry().add(Arc::new(language)); + + client_a + .fs() + .insert_tree( + "/a", + json!({ + "main.rs": "mod other;\nfn main() { let foo = other::foo(); }", + "other.rs": "pub fn foo() -> usize { 4 }", + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + + // Join the project as client B. + let project_b = client_b.build_remote_project(project_id, cx_b).await; + let (workspace_b, cx_b) = client_b.build_workspace(&project_b, cx_b); + let editor_b = workspace_b + .update(cx_b, |workspace, cx| { + workspace.open_path((worktree_id, "main.rs"), None, true, cx) + }) + .await + .unwrap() + .downcast::() + .unwrap(); + + let mut fake_language_server = fake_language_servers.next().await.unwrap(); + let mut requests = fake_language_server + .handle_request::(|params, _| async move { + assert_eq!( + params.text_document.uri, + lsp::Url::from_file_path("/a/main.rs").unwrap(), + ); + assert_eq!(params.range.start, lsp::Position::new(0, 0)); + assert_eq!(params.range.end, lsp::Position::new(0, 0)); + Ok(None) + }); + cx_a.background_executor + .advance_clock(editor::CODE_ACTIONS_DEBOUNCE_TIMEOUT * 2); + requests.next().await; + + // Move cursor to a location that contains code actions. + editor_b.update(cx_b, |editor, cx| { + editor.change_selections(None, cx, |s| { + s.select_ranges([Point::new(1, 31)..Point::new(1, 31)]) + }); + }); + cx_b.focus_view(&editor_b); + + let mut requests = fake_language_server + .handle_request::(|params, _| async move { + assert_eq!( + params.text_document.uri, + lsp::Url::from_file_path("/a/main.rs").unwrap(), + ); + assert_eq!(params.range.start, lsp::Position::new(1, 31)); + assert_eq!(params.range.end, lsp::Position::new(1, 31)); + + Ok(Some(vec![lsp::CodeActionOrCommand::CodeAction( + lsp::CodeAction { + title: "Inline into all callers".to_string(), + edit: Some(lsp::WorkspaceEdit { + changes: Some( + [ + ( + lsp::Url::from_file_path("/a/main.rs").unwrap(), + vec![lsp::TextEdit::new( + lsp::Range::new( + lsp::Position::new(1, 22), + lsp::Position::new(1, 34), + ), + "4".to_string(), + )], + ), + ( + lsp::Url::from_file_path("/a/other.rs").unwrap(), + vec![lsp::TextEdit::new( + lsp::Range::new( + lsp::Position::new(0, 0), + lsp::Position::new(0, 27), + ), + "".to_string(), + )], + ), + ] + .into_iter() + .collect(), + ), + ..Default::default() + }), + data: Some(json!({ + "codeActionParams": { + "range": { + "start": {"line": 1, "column": 31}, + "end": {"line": 1, "column": 31}, + } + } + })), + ..Default::default() + }, + )])) + }); + cx_a.background_executor + .advance_clock(editor::CODE_ACTIONS_DEBOUNCE_TIMEOUT * 2); + requests.next().await; + + // Toggle code actions and wait for them to display. + editor_b.update(cx_b, |editor, cx| { + editor.toggle_code_actions( + &ToggleCodeActions { + deployed_from_indicator: false, + }, + cx, + ); + }); + cx_a.background_executor.run_until_parked(); + + editor_b.update(cx_b, |editor, _| assert!(editor.context_menu_visible())); + + fake_language_server.remove_request_handler::(); + + // Confirming the code action will trigger a resolve request. + let confirm_action = editor_b + .update(cx_b, |editor, cx| { + Editor::confirm_code_action(editor, &ConfirmCodeAction { item_ix: Some(0) }, cx) + }) + .unwrap(); + fake_language_server.handle_request::( + |_, _| async move { + Ok(lsp::CodeAction { + title: "Inline into all callers".to_string(), + edit: Some(lsp::WorkspaceEdit { + changes: Some( + [ + ( + lsp::Url::from_file_path("/a/main.rs").unwrap(), + vec![lsp::TextEdit::new( + lsp::Range::new( + lsp::Position::new(1, 22), + lsp::Position::new(1, 34), + ), + "4".to_string(), + )], + ), + ( + lsp::Url::from_file_path("/a/other.rs").unwrap(), + vec![lsp::TextEdit::new( + lsp::Range::new( + lsp::Position::new(0, 0), + lsp::Position::new(0, 27), + ), + "".to_string(), + )], + ), + ] + .into_iter() + .collect(), + ), + ..Default::default() + }), + ..Default::default() + }) + }, + ); + + // After the action is confirmed, an editor containing both modified files is opened. + confirm_action.await.unwrap(); + + let code_action_editor = workspace_b.update(cx_b, |workspace, cx| { + workspace + .active_item(cx) + .unwrap() + .downcast::() + .unwrap() + }); + code_action_editor.update(cx_b, |editor, cx| { + assert_eq!(editor.text(cx), "mod other;\nfn main() { let foo = 4; }\n"); + editor.undo(&Undo, cx); + assert_eq!( + editor.text(cx), + "mod other;\nfn main() { let foo = other::foo(); }\npub fn foo() -> usize { 4 }" + ); + editor.redo(&Redo, cx); + assert_eq!(editor.text(cx), "mod other;\nfn main() { let foo = 4; }\n"); + }); +} + +#[gpui::test(iterations = 10)] +async fn test_collaborating_with_renames(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { + let mut server = TestServer::start(cx_a.executor()).await; + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + + cx_b.update(editor::init); + + // Set up a fake language server. + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + capabilities: lsp::ServerCapabilities { + rename_provider: Some(lsp::OneOf::Right(lsp::RenameOptions { + prepare_provider: Some(true), + work_done_progress_options: Default::default(), + })), + ..Default::default() + }, + ..Default::default() + })) + .await; + client_a.language_registry().add(Arc::new(language)); + + client_a + .fs() + .insert_tree( + "/dir", + json!({ + "one.rs": "const ONE: usize = 1;", + "two.rs": "const TWO: usize = one::ONE + one::ONE;" + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/dir", cx_a).await; + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + let project_b = client_b.build_remote_project(project_id, cx_b).await; + + let (workspace_b, cx_b) = client_b.build_workspace(&project_b, cx_b); + let editor_b = workspace_b + .update(cx_b, |workspace, cx| { + workspace.open_path((worktree_id, "one.rs"), None, true, cx) + }) + .await + .unwrap() + .downcast::() + .unwrap(); + let fake_language_server = fake_language_servers.next().await.unwrap(); + + // Move cursor to a location that can be renamed. + let prepare_rename = editor_b.update(cx_b, |editor, cx| { + editor.change_selections(None, cx, |s| s.select_ranges([7..7])); + editor.rename(&Rename, cx).unwrap() + }); + + fake_language_server + .handle_request::(|params, _| async move { + assert_eq!(params.text_document.uri.as_str(), "file:///dir/one.rs"); + assert_eq!(params.position, lsp::Position::new(0, 7)); + Ok(Some(lsp::PrepareRenameResponse::Range(lsp::Range::new( + lsp::Position::new(0, 6), + lsp::Position::new(0, 9), + )))) + }) + .next() + .await + .unwrap(); + prepare_rename.await.unwrap(); + editor_b.update(cx_b, |editor, cx| { + use editor::ToOffset; + let rename = editor.pending_rename().unwrap(); + let buffer = editor.buffer().read(cx).snapshot(cx); + assert_eq!( + rename.range.start.to_offset(&buffer)..rename.range.end.to_offset(&buffer), + 6..9 + ); + rename.editor.update(cx, |rename_editor, cx| { + rename_editor.buffer().update(cx, |rename_buffer, cx| { + rename_buffer.edit([(0..3, "THREE")], None, cx); + }); + }); + }); + + let confirm_rename = editor_b.update(cx_b, |editor, cx| { + Editor::confirm_rename(editor, &ConfirmRename, cx).unwrap() + }); + fake_language_server + .handle_request::(|params, _| async move { + assert_eq!( + params.text_document_position.text_document.uri.as_str(), + "file:///dir/one.rs" + ); + assert_eq!( + params.text_document_position.position, + lsp::Position::new(0, 6) + ); + assert_eq!(params.new_name, "THREE"); + Ok(Some(lsp::WorkspaceEdit { + changes: Some( + [ + ( + lsp::Url::from_file_path("/dir/one.rs").unwrap(), + vec![lsp::TextEdit::new( + lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)), + "THREE".to_string(), + )], + ), + ( + lsp::Url::from_file_path("/dir/two.rs").unwrap(), + vec![ + lsp::TextEdit::new( + lsp::Range::new( + lsp::Position::new(0, 24), + lsp::Position::new(0, 27), + ), + "THREE".to_string(), + ), + lsp::TextEdit::new( + lsp::Range::new( + lsp::Position::new(0, 35), + lsp::Position::new(0, 38), + ), + "THREE".to_string(), + ), + ], + ), + ] + .into_iter() + .collect(), + ), + ..Default::default() + })) + }) + .next() + .await + .unwrap(); + confirm_rename.await.unwrap(); + + let rename_editor = workspace_b.update(cx_b, |workspace, cx| { + workspace.active_item_as::(cx).unwrap() + }); + + rename_editor.update(cx_b, |editor, cx| { + assert_eq!( + editor.text(cx), + "const THREE: usize = 1;\nconst TWO: usize = one::THREE + one::THREE;" + ); + editor.undo(&Undo, cx); + assert_eq!( + editor.text(cx), + "const ONE: usize = 1;\nconst TWO: usize = one::ONE + one::ONE;" + ); + editor.redo(&Redo, cx); + assert_eq!( + editor.text(cx), + "const THREE: usize = 1;\nconst TWO: usize = one::THREE + one::THREE;" + ); + }); + + // Ensure temporary rename edits cannot be undone/redone. + editor_b.update(cx_b, |editor, cx| { + editor.undo(&Undo, cx); + assert_eq!(editor.text(cx), "const ONE: usize = 1;"); + editor.undo(&Undo, cx); + assert_eq!(editor.text(cx), "const ONE: usize = 1;"); + editor.redo(&Redo, cx); + assert_eq!(editor.text(cx), "const THREE: usize = 1;"); + }) +} + +#[gpui::test(iterations = 10)] +async fn test_language_server_statuses(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { + let mut server = TestServer::start(cx_a.executor()).await; + let executor = cx_a.executor(); + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + + cx_b.update(editor::init); + + // Set up a fake language server. + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + name: "the-language-server", + ..Default::default() + })) + .await; + client_a.language_registry().add(Arc::new(language)); + + client_a + .fs() + .insert_tree( + "/dir", + json!({ + "main.rs": "const ONE: usize = 1;", + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/dir", cx_a).await; + + let _buffer_a = project_a + .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) + .await + .unwrap(); + + let fake_language_server = fake_language_servers.next().await.unwrap(); + fake_language_server.start_progress("the-token").await; + fake_language_server.notify::(lsp::ProgressParams { + token: lsp::NumberOrString::String("the-token".to_string()), + value: lsp::ProgressParamsValue::WorkDone(lsp::WorkDoneProgress::Report( + lsp::WorkDoneProgressReport { + message: Some("the-message".to_string()), + ..Default::default() + }, + )), + }); + executor.run_until_parked(); + + project_a.read_with(cx_a, |project, _| { + let status = project.language_server_statuses().next().unwrap(); + assert_eq!(status.name, "the-language-server"); + assert_eq!(status.pending_work.len(), 1); + assert_eq!( + status.pending_work["the-token"].message.as_ref().unwrap(), + "the-message" + ); + }); + + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + executor.run_until_parked(); + let project_b = client_b.build_remote_project(project_id, cx_b).await; + + project_b.read_with(cx_b, |project, _| { + let status = project.language_server_statuses().next().unwrap(); + assert_eq!(status.name, "the-language-server"); + }); + + fake_language_server.notify::(lsp::ProgressParams { + token: lsp::NumberOrString::String("the-token".to_string()), + value: lsp::ProgressParamsValue::WorkDone(lsp::WorkDoneProgress::Report( + lsp::WorkDoneProgressReport { + message: Some("the-message-2".to_string()), + ..Default::default() + }, + )), + }); + executor.run_until_parked(); + + project_a.read_with(cx_a, |project, _| { + let status = project.language_server_statuses().next().unwrap(); + assert_eq!(status.name, "the-language-server"); + assert_eq!(status.pending_work.len(), 1); + assert_eq!( + status.pending_work["the-token"].message.as_ref().unwrap(), + "the-message-2" + ); + }); + + project_b.read_with(cx_b, |project, _| { + let status = project.language_server_statuses().next().unwrap(); + assert_eq!(status.name, "the-language-server"); + assert_eq!(status.pending_work.len(), 1); + assert_eq!( + status.pending_work["the-token"].message.as_ref().unwrap(), + "the-message-2" + ); + }); +} + +#[gpui::test(iterations = 10)] +async fn test_share_project( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, + cx_c: &mut TestAppContext, +) { + let executor = cx_a.executor(); + let window_b = cx_b.add_empty_window(); + let mut server = TestServer::start(executor.clone()).await; + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + let client_c = server.create_client(cx_c, "user_c").await; + server + .make_contacts(&mut [(&client_a, cx_a), (&client_b, cx_b), (&client_c, cx_c)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + let active_call_b = cx_b.read(ActiveCall::global); + let active_call_c = cx_c.read(ActiveCall::global); + + client_a + .fs() + .insert_tree( + "/a", + json!({ + ".gitignore": "ignored-dir", + "a.txt": "a-contents", + "b.txt": "b-contents", + "ignored-dir": { + "c.txt": "", + "d.txt": "", + } + }), + ) + .await; + + // Invite client B to collaborate on a project + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + active_call_a + .update(cx_a, |call, cx| { + call.invite(client_b.user_id().unwrap(), Some(project_a.clone()), cx) + }) + .await + .unwrap(); + + // Join that project as client B + + let incoming_call_b = active_call_b.read_with(cx_b, |call, _| call.incoming()); + executor.run_until_parked(); + let call = incoming_call_b.borrow().clone().unwrap(); + assert_eq!(call.calling_user.github_login, "user_a"); + let initial_project = call.initial_project.unwrap(); + active_call_b + .update(cx_b, |call, cx| call.accept_incoming(cx)) + .await + .unwrap(); + let client_b_peer_id = client_b.peer_id().unwrap(); + let project_b = client_b + .build_remote_project(initial_project.id, cx_b) + .await; + + let replica_id_b = project_b.read_with(cx_b, |project, _| project.replica_id()); + + executor.run_until_parked(); + + project_a.read_with(cx_a, |project, _| { + let client_b_collaborator = project.collaborators().get(&client_b_peer_id).unwrap(); + assert_eq!(client_b_collaborator.replica_id, replica_id_b); + }); + + project_b.read_with(cx_b, |project, cx| { + let worktree = project.worktrees().next().unwrap().read(cx); + assert_eq!( + worktree.paths().map(AsRef::as_ref).collect::>(), + [ + Path::new(".gitignore"), + Path::new("a.txt"), + Path::new("b.txt"), + Path::new("ignored-dir"), + ] + ); + }); + + project_b + .update(cx_b, |project, cx| { + let worktree = project.worktrees().next().unwrap(); + let entry = worktree.read(cx).entry_for_path("ignored-dir").unwrap(); + project.expand_entry(worktree_id, entry.id, cx).unwrap() + }) + .await + .unwrap(); + + project_b.read_with(cx_b, |project, cx| { + let worktree = project.worktrees().next().unwrap().read(cx); + assert_eq!( + worktree.paths().map(AsRef::as_ref).collect::>(), + [ + Path::new(".gitignore"), + Path::new("a.txt"), + Path::new("b.txt"), + Path::new("ignored-dir"), + Path::new("ignored-dir/c.txt"), + Path::new("ignored-dir/d.txt"), + ] + ); + }); + + // Open the same file as client B and client A. + let buffer_b = project_b + .update(cx_b, |p, cx| p.open_buffer((worktree_id, "b.txt"), cx)) + .await + .unwrap(); + + buffer_b.read_with(cx_b, |buf, _| assert_eq!(buf.text(), "b-contents")); + + project_a.read_with(cx_a, |project, cx| { + assert!(project.has_open_buffer((worktree_id, "b.txt"), cx)) + }); + let buffer_a = project_a + .update(cx_a, |p, cx| p.open_buffer((worktree_id, "b.txt"), cx)) + .await + .unwrap(); + + let editor_b = window_b.build_view(cx_b, |cx| Editor::for_buffer(buffer_b, None, cx)); + + // Client A sees client B's selection + executor.run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + buffer + .snapshot() + .remote_selections_in_range(text::Anchor::MIN..text::Anchor::MAX) + .count() + == 1 + }); + + // Edit the buffer as client B and see that edit as client A. + let mut cx_b = VisualTestContext::from_window(window_b, cx_b); + editor_b.update(&mut cx_b, |editor, cx| editor.handle_input("ok, ", cx)); + executor.run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + assert_eq!(buffer.text(), "ok, b-contents") + }); + + // Client B can invite client C on a project shared by client A. + active_call_b + .update(&mut cx_b, |call, cx| { + call.invite(client_c.user_id().unwrap(), Some(project_b.clone()), cx) + }) + .await + .unwrap(); + + let incoming_call_c = active_call_c.read_with(cx_c, |call, _| call.incoming()); + executor.run_until_parked(); + let call = incoming_call_c.borrow().clone().unwrap(); + assert_eq!(call.calling_user.github_login, "user_b"); + let initial_project = call.initial_project.unwrap(); + active_call_c + .update(cx_c, |call, cx| call.accept_incoming(cx)) + .await + .unwrap(); + let _project_c = client_c + .build_remote_project(initial_project.id, cx_c) + .await; + + // Client B closes the editor, and client A sees client B's selections removed. + cx_b.update(move |_| drop(editor_b)); + executor.run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + buffer + .snapshot() + .remote_selections_in_range(text::Anchor::MIN..text::Anchor::MAX) + .count() + == 0 + }); +} + +#[gpui::test(iterations = 10)] +async fn test_on_input_format_from_host_to_guest( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, +) { + let mut server = TestServer::start(cx_a.executor()).await; + let executor = cx_a.executor(); + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + + // Set up a fake language server. + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + capabilities: lsp::ServerCapabilities { + document_on_type_formatting_provider: Some(lsp::DocumentOnTypeFormattingOptions { + first_trigger_character: ":".to_string(), + more_trigger_character: Some(vec![">".to_string()]), + }), + ..Default::default() + }, + ..Default::default() + })) + .await; + client_a.language_registry().add(Arc::new(language)); + + client_a + .fs() + .insert_tree( + "/a", + json!({ + "main.rs": "fn main() { a }", + "other.rs": "// Test file", + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + let project_b = client_b.build_remote_project(project_id, cx_b).await; + + // Open a file in an editor as the host. + let buffer_a = project_a + .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) + .await + .unwrap(); + let window_a = cx_a.add_empty_window(); + let editor_a = window_a + .update(cx_a, |_, cx| { + cx.new_view(|cx| Editor::for_buffer(buffer_a, Some(project_a.clone()), cx)) + }) + .unwrap(); + + let fake_language_server = fake_language_servers.next().await.unwrap(); + executor.run_until_parked(); + + // Receive an OnTypeFormatting request as the host's language server. + // Return some formattings from the host's language server. + fake_language_server.handle_request::( + |params, _| async move { + assert_eq!( + params.text_document_position.text_document.uri, + lsp::Url::from_file_path("/a/main.rs").unwrap(), + ); + assert_eq!( + params.text_document_position.position, + lsp::Position::new(0, 14), + ); + + Ok(Some(vec![lsp::TextEdit { + new_text: "~<".to_string(), + range: lsp::Range::new(lsp::Position::new(0, 14), lsp::Position::new(0, 14)), + }])) + }, + ); + + // Open the buffer on the guest and see that the formattings worked + let buffer_b = project_b + .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) + .await + .unwrap(); + + let mut cx_a = VisualTestContext::from_window(window_a, cx_a); + // Type a on type formatting trigger character as the guest. + cx_a.focus_view(&editor_a); + editor_a.update(&mut cx_a, |editor, cx| { + editor.change_selections(None, cx, |s| s.select_ranges([13..13])); + editor.handle_input(">", cx); + }); + + executor.run_until_parked(); + + buffer_b.read_with(cx_b, |buffer, _| { + assert_eq!(buffer.text(), "fn main() { a>~< }") + }); + + // Undo should remove LSP edits first + editor_a.update(&mut cx_a, |editor, cx| { + assert_eq!(editor.text(cx), "fn main() { a>~< }"); + editor.undo(&Undo, cx); + assert_eq!(editor.text(cx), "fn main() { a> }"); + }); + executor.run_until_parked(); + + buffer_b.read_with(cx_b, |buffer, _| { + assert_eq!(buffer.text(), "fn main() { a> }") + }); + + editor_a.update(&mut cx_a, |editor, cx| { + assert_eq!(editor.text(cx), "fn main() { a> }"); + editor.undo(&Undo, cx); + assert_eq!(editor.text(cx), "fn main() { a }"); + }); + executor.run_until_parked(); + + buffer_b.read_with(cx_b, |buffer, _| { + assert_eq!(buffer.text(), "fn main() { a }") + }); +} + +#[gpui::test(iterations = 10)] +async fn test_on_input_format_from_guest_to_host( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, +) { + let mut server = TestServer::start(cx_a.executor()).await; + let executor = cx_a.executor(); + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + + // Set up a fake language server. + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + capabilities: lsp::ServerCapabilities { + document_on_type_formatting_provider: Some(lsp::DocumentOnTypeFormattingOptions { + first_trigger_character: ":".to_string(), + more_trigger_character: Some(vec![">".to_string()]), + }), + ..Default::default() + }, + ..Default::default() + })) + .await; + client_a.language_registry().add(Arc::new(language)); + + client_a + .fs() + .insert_tree( + "/a", + json!({ + "main.rs": "fn main() { a }", + "other.rs": "// Test file", + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + let project_b = client_b.build_remote_project(project_id, cx_b).await; + + // Open a file in an editor as the guest. + let buffer_b = project_b + .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) + .await + .unwrap(); + let window_b = cx_b.add_empty_window(); + let editor_b = window_b.build_view(cx_b, |cx| { + Editor::for_buffer(buffer_b, Some(project_b.clone()), cx) + }); + + let fake_language_server = fake_language_servers.next().await.unwrap(); + executor.run_until_parked(); + let mut cx_b = VisualTestContext::from_window(window_b, cx_b); + // Type a on type formatting trigger character as the guest. + cx_b.focus_view(&editor_b); + editor_b.update(&mut cx_b, |editor, cx| { + editor.change_selections(None, cx, |s| s.select_ranges([13..13])); + editor.handle_input(":", cx); + }); + + // Receive an OnTypeFormatting request as the host's language server. + // Return some formattings from the host's language server. + executor.start_waiting(); + fake_language_server + .handle_request::(|params, _| async move { + assert_eq!( + params.text_document_position.text_document.uri, + lsp::Url::from_file_path("/a/main.rs").unwrap(), + ); + assert_eq!( + params.text_document_position.position, + lsp::Position::new(0, 14), + ); + + Ok(Some(vec![lsp::TextEdit { + new_text: "~:".to_string(), + range: lsp::Range::new(lsp::Position::new(0, 14), lsp::Position::new(0, 14)), + }])) + }) + .next() + .await + .unwrap(); + executor.finish_waiting(); + + // Open the buffer on the host and see that the formattings worked + let buffer_a = project_a + .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) + .await + .unwrap(); + executor.run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + assert_eq!(buffer.text(), "fn main() { a:~: }") + }); + + // Undo should remove LSP edits first + editor_b.update(&mut cx_b, |editor, cx| { + assert_eq!(editor.text(cx), "fn main() { a:~: }"); + editor.undo(&Undo, cx); + assert_eq!(editor.text(cx), "fn main() { a: }"); + }); + executor.run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + assert_eq!(buffer.text(), "fn main() { a: }") + }); + + editor_b.update(&mut cx_b, |editor, cx| { + assert_eq!(editor.text(cx), "fn main() { a: }"); + editor.undo(&Undo, cx); + assert_eq!(editor.text(cx), "fn main() { a }"); + }); + executor.run_until_parked(); + + buffer_a.read_with(cx_a, |buffer, _| { + assert_eq!(buffer.text(), "fn main() { a }") + }); +} + +#[gpui::test(iterations = 10)] +async fn test_mutual_editor_inlay_hint_cache_update( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, +) { + let mut server = TestServer::start(cx_a.executor()).await; + let executor = cx_a.executor(); + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + let active_call_b = cx_b.read(ActiveCall::global); + + cx_a.update(editor::init); + cx_b.update(editor::init); + + cx_a.update(|cx| { + cx.update_global(|store: &mut SettingsStore, cx| { + store.update_user_settings::(cx, |settings| { + settings.defaults.inlay_hints = Some(InlayHintSettings { + enabled: true, + show_type_hints: true, + show_parameter_hints: false, + show_other_hints: true, + }) + }); + }); + }); + cx_b.update(|cx| { + cx.update_global(|store: &mut SettingsStore, cx| { + store.update_user_settings::(cx, |settings| { + settings.defaults.inlay_hints = Some(InlayHintSettings { + enabled: true, + show_type_hints: true, + show_parameter_hints: false, + show_other_hints: true, + }) + }); + }); + }); + + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + capabilities: lsp::ServerCapabilities { + inlay_hint_provider: Some(lsp::OneOf::Left(true)), + ..Default::default() + }, + ..Default::default() + })) + .await; + let language = Arc::new(language); + client_a.language_registry().add(Arc::clone(&language)); + client_b.language_registry().add(language); + + // Client A opens a project. + client_a + .fs() + .insert_tree( + "/a", + json!({ + "main.rs": "fn main() { a } // and some long comment to ensure inlay hints are not trimmed out", + "other.rs": "// Test file", + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + active_call_a + .update(cx_a, |call, cx| call.set_location(Some(&project_a), cx)) + .await + .unwrap(); + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + + // Client B joins the project + let project_b = client_b.build_remote_project(project_id, cx_b).await; + active_call_b + .update(cx_b, |call, cx| call.set_location(Some(&project_b), cx)) + .await + .unwrap(); + + let (workspace_a, cx_a) = client_a.build_workspace(&project_a, cx_a); + executor.start_waiting(); + + // The host opens a rust file. + let _buffer_a = project_a + .update(cx_a, |project, cx| { + project.open_local_buffer("/a/main.rs", cx) + }) + .await + .unwrap(); + let fake_language_server = fake_language_servers.next().await.unwrap(); + let editor_a = workspace_a + .update(cx_a, |workspace, cx| { + workspace.open_path((worktree_id, "main.rs"), None, true, cx) + }) + .await + .unwrap() + .downcast::() + .unwrap(); + + // Set up the language server to return an additional inlay hint on each request. + let edits_made = Arc::new(AtomicUsize::new(0)); + let closure_edits_made = Arc::clone(&edits_made); + fake_language_server + .handle_request::(move |params, _| { + let task_edits_made = Arc::clone(&closure_edits_made); + async move { + assert_eq!( + params.text_document.uri, + lsp::Url::from_file_path("/a/main.rs").unwrap(), + ); + let edits_made = task_edits_made.load(atomic::Ordering::Acquire); + Ok(Some(vec![lsp::InlayHint { + position: lsp::Position::new(0, edits_made as u32), + label: lsp::InlayHintLabel::String(edits_made.to_string()), + kind: None, + text_edits: None, + tooltip: None, + padding_left: None, + padding_right: None, + data: None, + }])) + } + }) + .next() + .await + .unwrap(); + + executor.run_until_parked(); + + let initial_edit = edits_made.load(atomic::Ordering::Acquire); + editor_a.update(cx_a, |editor, _| { + assert_eq!( + vec![initial_edit.to_string()], + extract_hint_labels(editor), + "Host should get its first hints when opens an editor" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 1, + "Host editor update the cache version after every cache/view change", + ); + }); + let (workspace_b, cx_b) = client_b.build_workspace(&project_b, cx_b); + let editor_b = workspace_b + .update(cx_b, |workspace, cx| { + workspace.open_path((worktree_id, "main.rs"), None, true, cx) + }) + .await + .unwrap() + .downcast::() + .unwrap(); + + executor.run_until_parked(); + editor_b.update(cx_b, |editor, _| { + assert_eq!( + vec![initial_edit.to_string()], + extract_hint_labels(editor), + "Client should get its first hints when opens an editor" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 1, + "Guest editor update the cache version after every cache/view change" + ); + }); + + let after_client_edit = edits_made.fetch_add(1, atomic::Ordering::Release) + 1; + editor_b.update(cx_b, |editor, cx| { + editor.change_selections(None, cx, |s| s.select_ranges([13..13].clone())); + editor.handle_input(":", cx); + }); + cx_b.focus_view(&editor_b); + + executor.run_until_parked(); + editor_a.update(cx_a, |editor, _| { + assert_eq!( + vec![after_client_edit.to_string()], + extract_hint_labels(editor), + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!(inlay_cache.version(), 2); + }); + editor_b.update(cx_b, |editor, _| { + assert_eq!( + vec![after_client_edit.to_string()], + extract_hint_labels(editor), + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!(inlay_cache.version(), 2); + }); + + let after_host_edit = edits_made.fetch_add(1, atomic::Ordering::Release) + 1; + editor_a.update(cx_a, |editor, cx| { + editor.change_selections(None, cx, |s| s.select_ranges([13..13])); + editor.handle_input("a change to increment both buffers' versions", cx); + }); + cx_a.focus_view(&editor_a); + + executor.run_until_parked(); + editor_a.update(cx_a, |editor, _| { + assert_eq!( + vec![after_host_edit.to_string()], + extract_hint_labels(editor), + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!(inlay_cache.version(), 3); + }); + editor_b.update(cx_b, |editor, _| { + assert_eq!( + vec![after_host_edit.to_string()], + extract_hint_labels(editor), + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!(inlay_cache.version(), 3); + }); + + let after_special_edit_for_refresh = edits_made.fetch_add(1, atomic::Ordering::Release) + 1; + fake_language_server + .request::(()) + .await + .expect("inlay refresh request failed"); + + executor.run_until_parked(); + editor_a.update(cx_a, |editor, _| { + assert_eq!( + vec![after_special_edit_for_refresh.to_string()], + extract_hint_labels(editor), + "Host should react to /refresh LSP request" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 4, + "Host should accepted all edits and bump its cache version every time" + ); + }); + editor_b.update(cx_b, |editor, _| { + assert_eq!( + vec![after_special_edit_for_refresh.to_string()], + extract_hint_labels(editor), + "Guest should get a /refresh LSP request propagated by host" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 4, + "Guest should accepted all edits and bump its cache version every time" + ); + }); +} + +#[gpui::test(iterations = 10)] +async fn test_inlay_hint_refresh_is_forwarded( + cx_a: &mut TestAppContext, + cx_b: &mut TestAppContext, +) { + let mut server = TestServer::start(cx_a.executor()).await; + let executor = cx_a.executor(); + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + server + .create_room(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + let active_call_a = cx_a.read(ActiveCall::global); + let active_call_b = cx_b.read(ActiveCall::global); + + cx_a.update(editor::init); + cx_b.update(editor::init); + + cx_a.update(|cx| { + cx.update_global(|store: &mut SettingsStore, cx| { + store.update_user_settings::(cx, |settings| { + settings.defaults.inlay_hints = Some(InlayHintSettings { + enabled: false, + show_type_hints: false, + show_parameter_hints: false, + show_other_hints: false, + }) + }); + }); + }); + cx_b.update(|cx| { + cx.update_global(|store: &mut SettingsStore, cx| { + store.update_user_settings::(cx, |settings| { + settings.defaults.inlay_hints = Some(InlayHintSettings { + enabled: true, + show_type_hints: true, + show_parameter_hints: true, + show_other_hints: true, + }) + }); + }); + }); + + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_language_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + capabilities: lsp::ServerCapabilities { + inlay_hint_provider: Some(lsp::OneOf::Left(true)), + ..Default::default() + }, + ..Default::default() + })) + .await; + let language = Arc::new(language); + client_a.language_registry().add(Arc::clone(&language)); + client_b.language_registry().add(language); + + client_a + .fs() + .insert_tree( + "/a", + json!({ + "main.rs": "fn main() { a } // and some long comment to ensure inlay hints are not trimmed out", + "other.rs": "// Test file", + }), + ) + .await; + let (project_a, worktree_id) = client_a.build_local_project("/a", cx_a).await; + active_call_a + .update(cx_a, |call, cx| call.set_location(Some(&project_a), cx)) + .await + .unwrap(); + let project_id = active_call_a + .update(cx_a, |call, cx| call.share_project(project_a.clone(), cx)) + .await + .unwrap(); + + let project_b = client_b.build_remote_project(project_id, cx_b).await; + active_call_b + .update(cx_b, |call, cx| call.set_location(Some(&project_b), cx)) + .await + .unwrap(); + + let (workspace_a, cx_a) = client_a.build_workspace(&project_a, cx_a); + let (workspace_b, cx_b) = client_b.build_workspace(&project_b, cx_b); + + cx_a.background_executor.start_waiting(); + + let editor_a = workspace_a + .update(cx_a, |workspace, cx| { + workspace.open_path((worktree_id, "main.rs"), None, true, cx) + }) + .await + .unwrap() + .downcast::() + .unwrap(); + + let editor_b = workspace_b + .update(cx_b, |workspace, cx| { + workspace.open_path((worktree_id, "main.rs"), None, true, cx) + }) + .await + .unwrap() + .downcast::() + .unwrap(); + + let other_hints = Arc::new(AtomicBool::new(false)); + let fake_language_server = fake_language_servers.next().await.unwrap(); + let closure_other_hints = Arc::clone(&other_hints); + fake_language_server + .handle_request::(move |params, _| { + let task_other_hints = Arc::clone(&closure_other_hints); + async move { + assert_eq!( + params.text_document.uri, + lsp::Url::from_file_path("/a/main.rs").unwrap(), + ); + let other_hints = task_other_hints.load(atomic::Ordering::Acquire); + let character = if other_hints { 0 } else { 2 }; + let label = if other_hints { + "other hint" + } else { + "initial hint" + }; + Ok(Some(vec![lsp::InlayHint { + position: lsp::Position::new(0, character), + label: lsp::InlayHintLabel::String(label.to_string()), + kind: None, + text_edits: None, + tooltip: None, + padding_left: None, + padding_right: None, + data: None, + }])) + } + }) + .next() + .await + .unwrap(); + executor.finish_waiting(); + + executor.run_until_parked(); + editor_a.update(cx_a, |editor, _| { + assert!( + extract_hint_labels(editor).is_empty(), + "Host should get no hints due to them turned off" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 0, + "Turned off hints should not generate version updates" + ); + }); + + executor.run_until_parked(); + editor_b.update(cx_b, |editor, _| { + assert_eq!( + vec!["initial hint".to_string()], + extract_hint_labels(editor), + "Client should get its first hints when opens an editor" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 1, + "Should update cache verison after first hints" + ); + }); + + other_hints.fetch_or(true, atomic::Ordering::Release); + fake_language_server + .request::(()) + .await + .expect("inlay refresh request failed"); + executor.run_until_parked(); + editor_a.update(cx_a, |editor, _| { + assert!( + extract_hint_labels(editor).is_empty(), + "Host should get nop hints due to them turned off, even after the /refresh" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 0, + "Turned off hints should not generate version updates, again" + ); + }); + + executor.run_until_parked(); + editor_b.update(cx_b, |editor, _| { + assert_eq!( + vec!["other hint".to_string()], + extract_hint_labels(editor), + "Guest should get a /refresh LSP request propagated by host despite host hints are off" + ); + let inlay_cache = editor.inlay_hint_cache(); + assert_eq!( + inlay_cache.version(), + 2, + "Guest should accepted all edits and bump its cache version every time" + ); + }); +} + +fn extract_hint_labels(editor: &Editor) -> Vec { + let mut labels = Vec::new(); + for hint in editor.inlay_hint_cache().hints() { + match hint.label { + project::InlayHintLabel::String(s) => labels.push(s), + _ => unreachable!(), + } + } + labels +} From 5e3d4885bff7dbebd683a565899983d0b39a393f Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 4 Jan 2024 13:04:17 -0800 Subject: [PATCH 32/74] Fix some bugs in keymap handling (#3895) - `base_keymap` setting was not respected, now it is - without a `~/.config/zed/keymap.json` file, we would fail to load the *default* keymap Co-authored-by: Marshall --- crates/command_palette/src/command_palette.rs | 16 ++++- crates/gpui/src/app.rs | 16 +++-- crates/settings/src/settings_file.rs | 14 +--- crates/zed/src/zed.rs | 66 ++++++++++++------- 4 files changed, 71 insertions(+), 41 deletions(-) diff --git a/crates/command_palette/src/command_palette.rs b/crates/command_palette/src/command_palette.rs index b7a1dbfd3dd48abc08a05e6a151a24fa3ef4af83..bbc2cd412305aff870f712187c4b7e13d916303d 100644 --- a/crates/command_palette/src/command_palette.rs +++ b/crates/command_palette/src/command_palette.rs @@ -370,6 +370,7 @@ mod tests { use gpui::TestAppContext; use language::Point; use project::Project; + use settings::KeymapFile; use workspace::{AppState, Workspace}; #[test] @@ -503,7 +504,20 @@ mod tests { workspace::init(app_state.clone(), cx); init(cx); Project::init_settings(cx); - settings::load_default_keymap(cx); + KeymapFile::parse( + r#"[ + { + "bindings": { + "cmd-n": "workspace::NewFile", + "enter": "menu::Confirm", + "cmd-shift-p": "command_palette::Toggle" + } + } + ]"#, + ) + .unwrap() + .add_to_cx(cx) + .unwrap(); app_state }) } diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index f8da622b53bcc1beb4e1e33c3f3cd860696801b7..4ad9540043e1058ee9ab9f5e9df9ef9bbce92057 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -327,6 +327,7 @@ impl AppContext { pub fn refresh(&mut self) { self.pending_effects.push_back(Effect::Refresh); } + pub(crate) fn update(&mut self, update: impl FnOnce(&mut Self) -> R) -> R { self.pending_updates += 1; let result = update(self); @@ -840,10 +841,12 @@ impl AppContext { /// Update the global of the given type with a closure. Unlike `global_mut`, this method provides /// your closure with mutable access to the `AppContext` and the global simultaneously. pub fn update_global(&mut self, f: impl FnOnce(&mut G, &mut Self) -> R) -> R { - let mut global = self.lease_global::(); - let result = f(&mut global, self); - self.end_global_lease(global); - result + self.update(|cx| { + let mut global = cx.lease_global::(); + let result = f(&mut global, cx); + cx.end_global_lease(global); + result + }) } /// Register a callback to be invoked when a global of the given type is updated. @@ -941,6 +944,11 @@ impl AppContext { self.pending_effects.push_back(Effect::Refresh); } + pub fn clear_key_bindings(&mut self) { + self.keymap.lock().clear(); + self.pending_effects.push_back(Effect::Refresh); + } + /// Register a global listener for actions invoked via the keyboard. pub fn on_action(&mut self, listener: impl Fn(&A, &mut Self) + 'static) { self.global_action_listeners diff --git a/crates/settings/src/settings_file.rs b/crates/settings/src/settings_file.rs index 590079c51b52fe77a2c83ec4a862b27a0202ad1a..3a43e3f9dd6a22a5c6e8d74dece4a7982231af4e 100644 --- a/crates/settings/src/settings_file.rs +++ b/crates/settings/src/settings_file.rs @@ -1,4 +1,4 @@ -use crate::{settings_store::SettingsStore, KeymapFile, Settings}; +use crate::{settings_store::SettingsStore, Settings}; use anyhow::Result; use fs::Fs; use futures::{channel::mpsc, StreamExt}; @@ -77,7 +77,6 @@ pub fn handle_settings_file_changes( }); cx.spawn(move |mut cx| async move { while let Some(user_settings_content) = user_settings_file_rx.next().await { - eprintln!("settings file changed"); let result = cx.update_global(|store: &mut SettingsStore, cx| { store .set_user_settings(&user_settings_content, cx) @@ -121,14 +120,3 @@ pub fn update_settings_file( }) .detach_and_log_err(cx); } - -pub fn load_default_keymap(cx: &mut AppContext) { - for path in ["keymaps/default.json", "keymaps/vim.json"] { - KeymapFile::load_asset(path, cx).unwrap(); - } - - // todo!() - // if let Some(asset_path) = settings::get::(cx).asset_path() { - // KeymapFile::load_asset(asset_path, cx).unwrap(); - // } -} diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index fb85b1fc012085720dd7e11c1863cefcae84723a..fea84c296419c2a7f41a538ec026cdececeee99f 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -18,11 +18,11 @@ pub use only_instance::*; pub use open_listener::*; use anyhow::{anyhow, Context as _}; -use futures::{channel::mpsc, StreamExt}; +use futures::{channel::mpsc, select_biased, StreamExt}; use project_panel::ProjectPanel; use quick_action_bar::QuickActionBar; use search::project_search::ProjectSearchBar; -use settings::{initial_local_settings_content, load_default_keymap, KeymapFile, Settings}; +use settings::{initial_local_settings_content, KeymapFile, Settings, SettingsStore}; use std::{borrow::Cow, ops::Deref, sync::Arc}; use terminal_view::terminal_panel::TerminalPanel; use util::{ @@ -32,6 +32,7 @@ use util::{ ResultExt, }; use uuid::Uuid; +use welcome::BaseKeymap; use workspace::Pane; use workspace::{ create_and_open_local_file, notifications::simple_message_notification::MessageNotification, @@ -399,8 +400,7 @@ pub fn initialize_workspace(app_state: Arc, cx: &mut AppContext) { }); workspace.focus_handle(cx).focus(cx); - //todo!() - // load_default_keymap(cx); + load_default_keymap(cx); }) .detach(); } @@ -558,38 +558,58 @@ pub fn handle_keymap_file_changes( mut user_keymap_file_rx: mpsc::UnboundedReceiver, cx: &mut AppContext, ) { + BaseKeymap::register(cx); + + let (base_keymap_tx, mut base_keymap_rx) = mpsc::unbounded(); + let mut old_base_keymap = *BaseKeymap::get_global(cx); + cx.observe_global::(move |cx| { + let new_base_keymap = *BaseKeymap::get_global(cx); + if new_base_keymap != old_base_keymap { + old_base_keymap = new_base_keymap.clone(); + base_keymap_tx.unbounded_send(()).unwrap(); + } + }) + .detach(); + cx.spawn(move |cx| async move { - // let mut settings_subscription = None; - while let Some(user_keymap_content) = user_keymap_file_rx.next().await { - if let Some(keymap_content) = KeymapFile::parse(&user_keymap_content).log_err() { - cx.update(|cx| reload_keymaps(cx, &keymap_content)).ok(); - - // todo!() - // let mut old_base_keymap = cx.read(|cx| *settings::get::(cx)); - // drop(settings_subscription); - // settings_subscription = Some(cx.update(|cx| { - // cx.observe_global::(move |cx| { - // let new_base_keymap = *settings::get::(cx); - // if new_base_keymap != old_base_keymap { - // old_base_keymap = new_base_keymap.clone(); - // reload_keymaps(cx, &keymap_content); - // } - // }) - // })); + let mut user_keymap = KeymapFile::default(); + loop { + select_biased! { + _ = base_keymap_rx.next() => {} + user_keymap_content = user_keymap_file_rx.next() => { + if let Some(user_keymap_content) = user_keymap_content { + if let Some(keymap_content) = KeymapFile::parse(&user_keymap_content).log_err() { + user_keymap = keymap_content; + } else { + continue + } + } + } } + + cx.update(|cx| reload_keymaps(cx, &user_keymap)).ok(); } }) .detach(); } fn reload_keymaps(cx: &mut AppContext, keymap_content: &KeymapFile) { - // todo!() - // cx.clear_bindings(); + cx.clear_key_bindings(); load_default_keymap(cx); keymap_content.clone().add_to_cx(cx).log_err(); cx.set_menus(app_menus()); } +pub fn load_default_keymap(cx: &mut AppContext) { + for path in ["keymaps/default.json", "keymaps/vim.json"] { + KeymapFile::load_asset(path, cx).unwrap(); + } + + if let Some(asset_path) = BaseKeymap::get_global(cx).asset_path() { + KeymapFile::load_asset(asset_path, cx).unwrap(); + } +} + fn open_local_settings_file( workspace: &mut Workspace, _: &OpenLocalSettings, From 0c4e2ef4195fe57b4b847490d3ac579037c9a0a7 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 4 Jan 2024 14:08:18 -0800 Subject: [PATCH 33/74] Fix terminal selection when cursor leaves terminal bounds --- crates/terminal_view/src/terminal_element.rs | 53 +++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index 328a6a1c4e8cd37dcc698ada592a60e7c9767628..ffdca7d8135d2702a3cbc9b4d42070e8ec4e41a4 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -2,10 +2,11 @@ use editor::{Cursor, HighlightedRange, HighlightedRangeLine}; use gpui::{ div, fill, point, px, red, relative, AnyElement, AsyncWindowContext, AvailableSpace, BorrowWindow, Bounds, DispatchPhase, Element, ElementId, ExternalPaths, FocusHandle, Font, - FontStyle, FontWeight, HighlightStyle, Hsla, InteractiveElement, InteractiveElementState, - Interactivity, IntoElement, LayoutId, Model, ModelContext, ModifiersChangedEvent, MouseButton, - Pixels, PlatformInputHandler, Point, ShapedLine, StatefulInteractiveElement, StyleRefinement, - Styled, TextRun, TextStyle, TextSystem, UnderlineStyle, WhiteSpace, WindowContext, + FontStyle, FontWeight, HighlightStyle, Hsla, InteractiveBounds, InteractiveElement, + InteractiveElementState, Interactivity, IntoElement, LayoutId, Model, ModelContext, + ModifiersChangedEvent, MouseButton, MouseMoveEvent, Pixels, PlatformInputHandler, Point, + ShapedLine, StatefulInteractiveElement, StyleRefinement, Styled, TextRun, TextStyle, + TextSystem, UnderlineStyle, WhiteSpace, WindowContext, }; use itertools::Itertools; use language::CursorShape; @@ -598,33 +599,48 @@ impl TerminalElement { ) { let focus = self.focus.clone(); let terminal = self.terminal.clone(); + let interactive_bounds = InteractiveBounds { + bounds: bounds.intersect(&cx.content_mask().bounds), + stacking_order: cx.stacking_order().clone(), + }; self.interactivity.on_mouse_down(MouseButton::Left, { let terminal = terminal.clone(); let focus = focus.clone(); move |e, cx| { cx.focus(&focus); - //todo!(context menu) - // v.context_menu.update(cx, |menu, _cx| menu.delay_cancel()); terminal.update(cx, |terminal, cx| { terminal.mouse_down(&e, origin); - cx.notify(); }) } }); - self.interactivity.on_mouse_move({ - let terminal = terminal.clone(); - let focus = focus.clone(); - move |e, cx| { - if e.pressed_button.is_some() && focus.is_focused(cx) && !cx.has_active_drag() { + + cx.on_mouse_event({ + let bounds = bounds.clone(); + let focus = self.focus.clone(); + let terminal = self.terminal.clone(); + move |e: &MouseMoveEvent, phase, cx| { + if phase != DispatchPhase::Bubble || !focus.is_focused(cx) { + return; + } + + if e.pressed_button.is_some() && !cx.has_active_drag() { terminal.update(cx, |terminal, cx| { terminal.mouse_drag(e, origin, bounds); cx.notify(); }) } + + if interactive_bounds.visibly_contains(&e.position, cx) { + terminal.update(cx, |terminal, cx| { + terminal.mouse_move(&e, origin); + cx.notify(); + }) + } } }); + self.interactivity.on_mouse_up( MouseButton::Left, TerminalElement::generic_button_handler( @@ -651,19 +667,6 @@ impl TerminalElement { } } }); - - self.interactivity.on_mouse_move({ - let terminal = terminal.clone(); - let focus = focus.clone(); - move |e, cx| { - if focus.is_focused(cx) { - terminal.update(cx, |terminal, cx| { - terminal.mouse_move(&e, origin); - cx.notify(); - }) - } - } - }); self.interactivity.on_scroll_wheel({ let terminal = terminal.clone(); move |e, cx| { From 32cd4d778a43c1b697da4a9f6d796a606a6ae169 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 4 Jan 2024 17:10:08 -0500 Subject: [PATCH 34/74] Render an empty placeholder when not showing file icons in the project panel (#3897) This PR makes it so when we're not showing file icons in the project panel we render an empty placeholder instead of nothing. This prevents the indentation of the items in the file tree from changing based on the presence of the icon. Release Notes: - Fixed layout shift when `project_panel.file_icons` is set to `false`. --- crates/project_panel/src/project_panel.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index e0bee14df27479021634d3400b13850d44fa51a9..6662014c465909d782c91f45e0cb81b9c7e7053d 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -1395,7 +1395,7 @@ impl ProjectPanel { .child(if let Some(icon) = &icon { div().child(IconElement::from_path(icon.to_string()).color(Color::Muted)) } else { - div() + div().size(IconSize::default().rems()).invisible() }) .child( if let (Some(editor), true) = (Some(&self.filename_editor), show_editor) { From 47476faef1e0121f66791f8e0aad906e1f263273 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 4 Jan 2024 17:25:11 -0500 Subject: [PATCH 35/74] Fix label color for inactive tabs (#3899) This PR fixes an issue where certain tabs were not using the correct color for their labels when they were inactive. Release Notes: - Fixed an issue where some inactive tabs were not using the correct label color. --- crates/diagnostics/src/diagnostics.rs | 9 +++++++-- crates/language_tools/src/lsp_log.rs | 12 +++++++++--- crates/language_tools/src/syntax_tree_view.rs | 10 ++++++++-- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 77e6a7673ff838f3f4a5ac3029b9d5bddacbb9ee..9d5a62cff19eea509aaa05c716a9188bd90a43c9 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -641,8 +641,13 @@ impl Item for ProjectDiagnosticsEditor { fn tab_content(&self, _detail: Option, selected: bool, _: &WindowContext) -> AnyElement { if self.summary.error_count == 0 && self.summary.warning_count == 0 { - let label = Label::new("No problems"); - label.into_any_element() + Label::new("No problems") + .color(if selected { + Color::Default + } else { + Color::Muted + }) + .into_any_element() } else { h_stack() .gap_1() diff --git a/crates/language_tools/src/lsp_log.rs b/crates/language_tools/src/lsp_log.rs index e38de7d3734a9e95cb301c4139dc6b998f033bbd..123149eae2e184df4e1b2871ea8c25125eda711f 100644 --- a/crates/language_tools/src/lsp_log.rs +++ b/crates/language_tools/src/lsp_log.rs @@ -10,7 +10,7 @@ use language::{LanguageServerId, LanguageServerName}; use lsp::IoKind; use project::{search::SearchQuery, Project}; use std::{borrow::Cow, sync::Arc}; -use ui::{h_stack, popover_menu, Button, Checkbox, Clickable, ContextMenu, Label, Selection}; +use ui::{popover_menu, prelude::*, Button, Checkbox, ContextMenu, Label, Selection}; use workspace::{ item::{Item, ItemHandle}, searchable::{SearchEvent, SearchableItem, SearchableItemHandle}, @@ -614,8 +614,14 @@ impl Item for LspLogView { Editor::to_item_events(event, f) } - fn tab_content(&self, _: Option, _: bool, _: &WindowContext<'_>) -> AnyElement { - Label::new("LSP Logs").into_any_element() + fn tab_content(&self, _: Option, selected: bool, _: &WindowContext<'_>) -> AnyElement { + Label::new("LSP Logs") + .color(if selected { + Color::Default + } else { + Color::Muted + }) + .into_any_element() } fn as_searchable(&self, handle: &View) -> Option> { diff --git a/crates/language_tools/src/syntax_tree_view.rs b/crates/language_tools/src/syntax_tree_view.rs index a36264261e8840a20ccb89c4ca7ca28fcd1b3851..c30564e9bfe3f8c0e0fd1f5c2f6827a4f070fd81 100644 --- a/crates/language_tools/src/syntax_tree_view.rs +++ b/crates/language_tools/src/syntax_tree_view.rs @@ -405,8 +405,14 @@ impl Item for SyntaxTreeView { fn to_item_events(_: &Self::Event, _: impl FnMut(workspace::item::ItemEvent)) {} - fn tab_content(&self, _: Option, _: bool, _: &WindowContext<'_>) -> AnyElement { - Label::new("Syntax Tree").into_any_element() + fn tab_content(&self, _: Option, selected: bool, _: &WindowContext<'_>) -> AnyElement { + Label::new("Syntax Tree") + .color(if selected { + Color::Default + } else { + Color::Muted + }) + .into_any_element() } fn clone_on_split( From a8efb41e56dc7ae412e948aa3599cbe4bc9f97f2 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 4 Jan 2024 17:28:07 -0500 Subject: [PATCH 36/74] Remove outdated TODOs --- crates/zed/src/app_menus.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/crates/zed/src/app_menus.rs b/crates/zed/src/app_menus.rs index a4b0e21d6e20ee93b7d995b7f04ad58df279b316..2aff05d884265aac2538973bf9d7b65ed3d54385 100644 --- a/crates/zed/src/app_menus.rs +++ b/crates/zed/src/app_menus.rs @@ -150,14 +150,6 @@ pub fn app_menus() -> Vec> { MenuItem::action("View Dependency Licenses", crate::OpenLicenses), MenuItem::action("Show Welcome", workspace::Welcome), MenuItem::separator(), - // todo!(): Needs `feedback` crate. - // MenuItem::action("Give us feedback", feedback::feedback_editor::GiveFeedback), - // MenuItem::action( - // "Copy System Specs Into Clipboard", - // feedback::CopySystemSpecsIntoClipboard, - // ), - // MenuItem::action("File Bug Report", feedback::FileBugReport), - // MenuItem::action("Request Feature", feedback::RequestFeature), MenuItem::separator(), MenuItem::action( "Documentation", From 269b6656189be1262fcbe0413c524914e395cc39 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 4 Jan 2024 17:32:00 -0500 Subject: [PATCH 37/74] Remove outdated TODO --- crates/terminal_view/src/terminal_panel.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 9e193e83b7d54cad1d7ca0d6a7cbc5ab857a95a8..526cdf391ae331aad67088cd2462cb1b704e3889 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -410,11 +410,6 @@ impl Panel for TerminalPanel { "TerminalPanel" } - // todo!() - // fn icon_tooltip(&self) -> (String, Option>) { - // ("Terminal Panel".into(), Some(Box::new(ToggleFocus))) - // } - fn icon(&self, _cx: &WindowContext) -> Option { Some(Icon::Terminal) } From e5af1cb9a26ba4cb426074bcca7e907d38be76be Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 4 Jan 2024 17:35:18 -0500 Subject: [PATCH 38/74] Remove unneeded branches --- .../ui/src/components/button/button_like.rs | 48 +++---------------- 1 file changed, 7 insertions(+), 41 deletions(-) diff --git a/crates/ui/src/components/button/button_like.rs b/crates/ui/src/components/button/button_like.rs index 47aae89dfd983df876bcf7bfe4d86c656ed73f18..c3d871fe154a3b3d510f23b9d7d184a88793ebd8 100644 --- a/crates/ui/src/components/button/button_like.rs +++ b/crates/ui/src/components/button/button_like.rs @@ -46,7 +46,7 @@ pub enum TintColor { } impl TintColor { - fn button_style(self, cx: &mut WindowContext) -> ButtonLikeStyles { + fn button_like_style(self, cx: &mut WindowContext) -> ButtonLikeStyles { match self { TintColor::Accent => ButtonLikeStyles { background: cx.theme().status().info_background, @@ -54,6 +54,7 @@ impl TintColor { label_color: cx.theme().colors().text, icon_color: cx.theme().colors().text, }, + // TODO: Finish tint colors. _ => ButtonLikeStyles { background: gpui::red(), border_color: gpui::red(), @@ -112,14 +113,7 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), - // TODO: Finish tint colors - ButtonStyle::Tinted(_) => ButtonLikeStyles { - background: gpui::red(), - border_color: gpui::red(), - label_color: gpui::red(), - icon_color: gpui::red(), - }, + ButtonStyle::Tinted(tint) => tint.button_like_style(cx), ButtonStyle::Subtle => ButtonLikeStyles { background: cx.theme().colors().ghost_element_background, border_color: transparent_black(), @@ -143,14 +137,7 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), - // TODO: Finish tint colors - ButtonStyle::Tinted(_) => ButtonLikeStyles { - background: gpui::red(), - border_color: gpui::red(), - label_color: gpui::red(), - icon_color: gpui::red(), - }, + ButtonStyle::Tinted(tint) => tint.button_like_style(cx), ButtonStyle::Subtle => ButtonLikeStyles { background: cx.theme().colors().ghost_element_hover, border_color: transparent_black(), @@ -176,14 +163,7 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), - // TODO: Finish tint colors - ButtonStyle::Tinted(_) => ButtonLikeStyles { - background: gpui::red(), - border_color: gpui::red(), - label_color: gpui::red(), - icon_color: gpui::red(), - }, + ButtonStyle::Tinted(tint) => tint.button_like_style(cx), ButtonStyle::Subtle => ButtonLikeStyles { background: cx.theme().colors().ghost_element_active, border_color: transparent_black(), @@ -210,14 +190,7 @@ impl ButtonStyle { label_color: Color::Default.color(cx), icon_color: Color::Default.color(cx), }, - ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), - // TODO: Finish tint colors - ButtonStyle::Tinted(_) => ButtonLikeStyles { - background: gpui::red(), - border_color: gpui::red(), - label_color: gpui::red(), - icon_color: gpui::red(), - }, + ButtonStyle::Tinted(tint) => tint.button_like_style(cx), ButtonStyle::Subtle => ButtonLikeStyles { background: cx.theme().colors().ghost_element_background, border_color: cx.theme().colors().border_focused, @@ -242,14 +215,7 @@ impl ButtonStyle { label_color: Color::Disabled.color(cx), icon_color: Color::Disabled.color(cx), }, - ButtonStyle::Tinted(TintColor::Accent) => TintColor::Accent.button_style(cx), - // TODO: Finish tint colors - ButtonStyle::Tinted(_) => ButtonLikeStyles { - background: gpui::red(), - border_color: gpui::red(), - label_color: gpui::red(), - icon_color: gpui::red(), - }, + ButtonStyle::Tinted(tint) => tint.button_like_style(cx), ButtonStyle::Subtle => ButtonLikeStyles { background: cx.theme().colors().ghost_element_disabled, border_color: cx.theme().colors().border_disabled, From 61db60b3e21a9a562d22afc222bdb152b9767286 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 4 Jan 2024 14:55:45 -0800 Subject: [PATCH 39/74] Fix incorrect placement of terminal selection when dragging Co-authored-by: Mikayla --- crates/terminal/src/mappings/mouse.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/crates/terminal/src/mappings/mouse.rs b/crates/terminal/src/mappings/mouse.rs index a32d83d28ddb99416cff22a85322184acabb2ac9..19c699216a77d47ce173cff06d7258f6fafa1649 100644 --- a/crates/terminal/src/mappings/mouse.rs +++ b/crates/terminal/src/mappings/mouse.rs @@ -162,22 +162,20 @@ pub fn mouse_side( pos: Point, cur_size: TerminalSize, ) -> alacritty_terminal::index::Direction { - let cell_width = cur_size.cell_width.floor(); + let cell_width = cur_size.cell_width; if cell_width == px(0.) { return Side::Right; } - let x = pos.x.floor(); - - let cell_x = cmp::max(px(0.), x - cell_width) % cell_width; - let half_cell_width = (cur_size.cell_width / 2.0).floor(); + let cell_x = cmp::max(px(0.), pos.x) % cell_width; + let half_cell_width = cur_size.cell_width / 2.0; let additional_padding = (cur_size.width() - cur_size.cell_width * 2.) % cur_size.cell_width; let end_of_grid = cur_size.width() - cur_size.cell_width - additional_padding; //Width: Pixels or columns? if cell_x > half_cell_width // Edge case when mouse leaves the window. - || x >= end_of_grid + || pos.x >= end_of_grid { Side::Right } else { From ba13540c77bb8a1e755b304150ea9d5d590b737d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 4 Jan 2024 15:05:39 -0800 Subject: [PATCH 40/74] Fix inconsistent selection start when dragging outside of terminal bounds Co-authored-by: Mikayla --- crates/terminal/src/mappings/mouse.rs | 50 +++++++++++++++------------ crates/terminal/src/terminal.rs | 15 +++----- 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/crates/terminal/src/mappings/mouse.rs b/crates/terminal/src/mappings/mouse.rs index 19c699216a77d47ce173cff06d7258f6fafa1649..af3e6b640fd64fe6dc3e2e2364a08107bf3634e4 100644 --- a/crates/terminal/src/mappings/mouse.rs +++ b/crates/terminal/src/mappings/mouse.rs @@ -158,37 +158,41 @@ pub fn mouse_moved_report(point: AlacPoint, e: &MouseMoveEvent, mode: TermMode) } } -pub fn mouse_side( +pub fn grid_point(pos: Point, cur_size: TerminalSize, display_offset: usize) -> AlacPoint { + grid_point_and_side(pos, cur_size, display_offset).0 +} + +pub fn grid_point_and_side( pos: Point, cur_size: TerminalSize, -) -> alacritty_terminal::index::Direction { - let cell_width = cur_size.cell_width; - if cell_width == px(0.) { - return Side::Right; - } - - let cell_x = cmp::max(px(0.), pos.x) % cell_width; + display_offset: usize, +) -> (AlacPoint, Side) { + let mut col = GridCol((pos.x / cur_size.cell_width) as usize); + let cell_x = cmp::max(px(0.), pos.x) % cur_size.cell_width; let half_cell_width = cur_size.cell_width / 2.0; - let additional_padding = (cur_size.width() - cur_size.cell_width * 2.) % cur_size.cell_width; - let end_of_grid = cur_size.width() - cur_size.cell_width - additional_padding; - - //Width: Pixels or columns? - if cell_x > half_cell_width - // Edge case when mouse leaves the window. - || pos.x >= end_of_grid - { + let mut side = if cell_x > half_cell_width { Side::Right } else { Side::Left - } -} + }; -pub fn grid_point(pos: Point, cur_size: TerminalSize, display_offset: usize) -> AlacPoint { - let col = GridCol((pos.x / cur_size.cell_width) as usize); + if col > cur_size.last_column() { + col = cur_size.last_column(); + side = Side::Right; + } let col = min(col, cur_size.last_column()); - let line = (pos.y / cur_size.line_height) as i32; - let line = min(line, cur_size.bottommost_line().0); - AlacPoint::new(GridLine(line - display_offset as i32), col) + let mut line = (pos.y / cur_size.line_height) as i32; + if line > cur_size.bottommost_line() { + line = cur_size.bottommost_line().0 as i32; + side = Side::Right; + } else if line < 0 { + side = Side::Left; + } + + ( + AlacPoint::new(GridLine(line - display_offset as i32), col), + side, + ) } ///Generate the bytes to send to the terminal, from the cell location, a mouse event, and the terminal mode diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index b15bd7c6d659cc7794b770934e95775c0ae41507..70fceae66a5b8be562513843e03a1675ff66f3be 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -28,7 +28,8 @@ use futures::{ }; use mappings::mouse::{ - alt_scroll, grid_point, mouse_button_report, mouse_moved_report, mouse_side, scroll_report, + alt_scroll, grid_point, grid_point_and_side, mouse_button_report, mouse_moved_report, + scroll_report, }; use procinfo::LocalProcessInfo; @@ -704,14 +705,12 @@ impl Terminal { } InternalEvent::UpdateSelection(position) => { if let Some(mut selection) = term.selection.take() { - let point = grid_point( + let (point, side) = grid_point_and_side( *position, self.last_content.size, term.grid().display_offset(), ); - let side = mouse_side(*position, self.last_content.size); - selection.update(point, side); term.selection = Some(selection); @@ -1088,12 +1087,11 @@ impl Terminal { let position = e.position - origin; self.last_mouse_position = Some(position); if self.mouse_mode(e.modifiers.shift) { - let point = grid_point( + let (point, side) = grid_point_and_side( position, self.last_content.size, self.last_content.display_offset, ); - let side = mouse_side(position, self.last_content.size); if self.mouse_changed(point, side) { if let Some(bytes) = mouse_moved_report(point, e, self.last_content.mode) { @@ -1175,15 +1173,12 @@ impl Terminal { } } else if e.button == MouseButton::Left { let position = e.position - origin; - let point = grid_point( + let (point, side) = grid_point_and_side( position, self.last_content.size, self.last_content.display_offset, ); - // Use .opposite so that selection is inclusive of the cell clicked. - let side = mouse_side(position, self.last_content.size); - let selection_type = match e.click_count { 0 => return, //This is a release 1 => Some(SelectionType::Simple), From 3f06a050608f63f2c93aca1d90c96e7385d3b27e Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 4 Jan 2024 18:08:28 -0500 Subject: [PATCH 41/74] Iterate on collab panel filter input style (#3900) This PR takes another pass at the collab panel filter input to improve its styling. Release Notes: - Improved the look of the filter input in the collab panel. --- crates/collab_ui/src/collab_panel.rs | 60 ++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/crates/collab_ui/src/collab_panel.rs b/crates/collab_ui/src/collab_panel.rs index 3ed07e5bd1b8b3985f58d8ca89dd04e676f5425a..f4856b22017cc2bcd5cfc76cfb1dedb291fe2fe2 100644 --- a/crates/collab_ui/src/collab_panel.rs +++ b/crates/collab_ui/src/collab_panel.rs @@ -11,15 +11,16 @@ use channel::{Channel, ChannelEvent, ChannelId, ChannelStore}; use client::{Client, Contact, User, UserStore}; use contact_finder::ContactFinder; use db::kvp::KEY_VALUE_STORE; -use editor::Editor; +use editor::{Editor, EditorElement, EditorStyle}; use feature_flags::{ChannelsAlpha, FeatureFlagAppExt, FeatureFlagViewExt}; use fuzzy::{match_strings, StringMatchCandidate}; use gpui::{ actions, canvas, div, fill, list, overlay, point, prelude::*, px, serde_json, AnyElement, AppContext, AsyncWindowContext, Bounds, ClipboardItem, DismissEvent, Div, EventEmitter, - FocusHandle, FocusableView, InteractiveElement, IntoElement, ListOffset, ListState, Model, - MouseDownEvent, ParentElement, Pixels, Point, PromptLevel, Render, RenderOnce, SharedString, - Styled, Subscription, Task, View, ViewContext, VisualContext, WeakView, + FocusHandle, FocusableView, FontStyle, FontWeight, InteractiveElement, IntoElement, ListOffset, + ListState, Model, MouseDownEvent, ParentElement, Pixels, Point, PromptLevel, Render, + RenderOnce, SharedString, Styled, Subscription, Task, TextStyle, View, ViewContext, + VisualContext, WeakView, WhiteSpace, }; use menu::{Cancel, Confirm, SelectNext, SelectPrev}; use project::{Fs, Project}; @@ -29,10 +30,9 @@ use settings::{Settings, SettingsStore}; use smallvec::SmallVec; use std::{mem, sync::Arc}; use theme::{ActiveTheme, ThemeSettings}; -use ui::prelude::*; use ui::{ - h_stack, v_stack, Avatar, Button, Color, ContextMenu, Icon, IconButton, IconElement, IconSize, - Label, ListHeader, ListItem, Tooltip, + prelude::*, Avatar, Button, Color, ContextMenu, Icon, IconButton, IconElement, IconSize, Label, + ListHeader, ListItem, Tooltip, }; use util::{maybe, ResultExt, TryFutureExt}; use workspace::{ @@ -1749,15 +1749,49 @@ impl CollabPanel { .size_full() .child(list(self.list_state.clone()).full()) .child( - v_stack().p_2().child( - v_stack() - .border_primary(cx) - .border_t() - .child(self.filter_editor.clone()), - ), + v_stack() + .child(div().mx_2().border_primary(cx).border_t()) + .child( + v_stack() + .p_2() + .child(self.render_filter_input(&self.filter_editor, cx)), + ), ) } + fn render_filter_input( + &self, + editor: &View, + cx: &mut ViewContext, + ) -> impl IntoElement { + let settings = ThemeSettings::get_global(cx); + let text_style = TextStyle { + color: if editor.read(cx).read_only() { + cx.theme().colors().text_disabled + } else { + cx.theme().colors().text + }, + font_family: settings.ui_font.family.clone(), + font_features: settings.ui_font.features, + font_size: rems(0.875).into(), + font_weight: FontWeight::NORMAL, + font_style: FontStyle::Normal, + line_height: relative(1.3).into(), + background_color: None, + underline: None, + white_space: WhiteSpace::Normal, + }; + + EditorElement::new( + editor, + EditorStyle { + local_player: cx.theme().players().local(), + text: text_style, + ..Default::default() + }, + ) + } + fn render_header( &self, section: Section, From b3d8b2313901b29402cb145578b4fce2b22cb435 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 12:17:38 +0100 Subject: [PATCH 42/74] terminal/search: Partially fix search in terminal. There are two issues with search in terminal as is: - terminal's pane is not registered as a "legit" pane, so we dispatch buffer search bar::Deploy on the most recent "legit" pane. By legit I mean that workspace::active_pane will *never* return terminal pane as active. - We've had the implementation of as_searchable commented out. Duh! This commit fixes second issue. That means that if you drag the terminal over to the main editor pane (so that it's in a "legit" pane), it'll work. 1st issue still stands though. --- Cargo.lock | 1 + crates/terminal_view/Cargo.toml | 2 +- crates/terminal_view/src/terminal_panel.rs | 6 +++--- crates/terminal_view/src/terminal_view.rs | 9 ++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 13d4be62337ae0557fbc59538db4a4bdceacd22e..4371742056075385f342917ae078a0b48698506f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7762,6 +7762,7 @@ dependencies = [ "procinfo", "project", "rand 0.8.5", + "search", "serde", "serde_derive", "settings", diff --git a/crates/terminal_view/Cargo.toml b/crates/terminal_view/Cargo.toml index 110199a8d4b979734fda44c6d15ce03b583ed16f..d84846018346dc530465eb66835f9a9cc894ac59 100644 --- a/crates/terminal_view/Cargo.toml +++ b/crates/terminal_view/Cargo.toml @@ -13,7 +13,7 @@ editor = { path = "../editor" } language = { path = "../language" } gpui = { path = "../gpui" } project = { path = "../project" } -# search = { path = "../search" } +search = { path = "../search" } settings = { path = "../settings" } theme = { path = "../theme" } util = { path = "../util" } diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 526cdf391ae331aad67088cd2462cb1b704e3889..f5179d39a971dcc2ebab3191dec9075806b5bc2a 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -101,9 +101,9 @@ impl TerminalPanel { }) .into_any_element() }); - // let buffer_search_bar = cx.build_view(search::BufferSearchBar::new); - // pane.toolbar() - // .update(cx, |toolbar, cx| toolbar.add_item(buffer_search_bar, cx)); + let buffer_search_bar = cx.add_view(search::BufferSearchBar::new); + pane.toolbar() + .update(cx, |toolbar, cx| toolbar.add_item(buffer_search_bar, cx)); pane }); let subscriptions = vec![ diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index d4dea29b49e71e66604ec56799d166778792ae9a..521efef7906c621e4ffabc9a6060aae50fd2e8dd 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -28,7 +28,7 @@ use workspace::{ item::{BreadcrumbText, Item, ItemEvent}, notifications::NotifyResultExt, register_deserializable_item, - searchable::{SearchEvent, SearchOptions, SearchableItem}, + searchable::{SearchEvent, SearchOptions, SearchableItem, SearchableItemHandle}, CloseActiveItem, NewCenterTerminal, Pane, ToolbarItemLocation, Workspace, WorkspaceId, }; @@ -714,10 +714,9 @@ impl Item for TerminalView { false } - // todo!(search) - // fn as_searchable(&self, handle: &View) -> Option> { - // Some(Box::new(handle.clone())) - // } + fn as_searchable(&self, handle: &View) -> Option> { + Some(Box::new(handle.clone())) + } fn breadcrumb_location(&self) -> ToolbarItemLocation { ToolbarItemLocation::PrimaryLeft From cd0b15e23d9b68249a6dc544c01fff101e140456 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 12:18:48 +0100 Subject: [PATCH 43/74] fixup! terminal/search: Partially fix search in terminal. There are two issues with search in terminal as is: - terminal's pane is not registered as a "legit" pane, so we dispatch buffer search bar::Deploy on the most recent "legit" pane. By legit I mean that workspace::active_pane will *never* return terminal pane as active. - We've had the implementation of as_searchable commented out. Duh! --- crates/terminal_view/src/terminal_panel.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index f5179d39a971dcc2ebab3191dec9075806b5bc2a..7118d6f767b37ea9a21f73e51a88407c8a4c8c65 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -101,7 +101,7 @@ impl TerminalPanel { }) .into_any_element() }); - let buffer_search_bar = cx.add_view(search::BufferSearchBar::new); + let buffer_search_bar = cx.new_view(search::BufferSearchBar::new); pane.toolbar() .update(cx, |toolbar, cx| toolbar.add_item(buffer_search_bar, cx)); pane From f70eddc988dfcfa0c83db6d2a16ca80b820ae68e Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 14:56:35 +0100 Subject: [PATCH 44/74] Explore registrar-based API for search bar. This commit adds a Registrar trait for use by search crate. Registrar can register actions on some target and search can utilize that trait to opaquely add actions on that target. Notably, search is now opt-in (it always was in zed2 actually). Having editor doesn't make it searchable straight out of the gate. You might have to call BufferSearchBar::new a bunch more. --- crates/search/src/buffer_search.rs | 154 ++++++++++++--------- crates/terminal_view/src/terminal_panel.rs | 40 +++++- 2 files changed, 125 insertions(+), 69 deletions(-) diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 67aa4955bc692483faafb9b6291e9e8550dac859..3521b1e8490d88c21ec66323ce9f03825ea6677f 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -422,89 +422,115 @@ impl ToolbarItemView for BufferSearchBar { } } +/// Registrar inverts the dependency between search and it's downstream user, allowing said downstream user to register search action without knowing exactly what those actions are. +pub trait SearchActionsRegistrar { + fn register_handler( + &mut self, + callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), + ); +} + impl BufferSearchBar { - fn register(workspace: &mut Workspace) { - workspace.register_action(move |workspace, deploy: &Deploy, cx| { - let pane = workspace.active_pane(); - - pane.update(cx, |this, cx| { - this.toolbar().update(cx, |this, cx| { - if let Some(search_bar) = this.item_of_type::() { - search_bar.update(cx, |this, cx| { - this.deploy(deploy, cx); - }); - return; - } - let view = cx.new_view(|cx| BufferSearchBar::new(cx)); - this.add_item(view.clone(), cx); - view.update(cx, |this, cx| this.deploy(deploy, cx)); - cx.notify(); - }) + pub fn register_inner( + registrar: &mut impl SearchActionsRegistrar, + supported_options: &workspace::searchable::SearchOptions, + ) { + // supported_options controls whether the action is registered in the first place, + // but we still perform dynamic checks as e.g. if a view (like Workspace) uses SearchableItemHandle, they cannot know in advance + // whether a given option is supported. + if supported_options.case { + registrar.register_handler(|this, action: &ToggleCaseSensitive, cx| { + if this.supported_options().case { + this.toggle_case_sensitive(action, cx); + } }); - }); - fn register_action( - workspace: &mut Workspace, - update: fn(&mut BufferSearchBar, &A, &mut ViewContext), - ) { - workspace.register_action(move |workspace, action: &A, cx| { - let pane = workspace.active_pane(); - pane.update(cx, move |this, cx| { - this.toolbar().update(cx, move |this, cx| { - if let Some(search_bar) = this.item_of_type::() { - search_bar.update(cx, move |this, cx| update(this, action, cx)); - cx.notify(); - } - }) - }); + } + if supported_options.word { + registrar.register_handler(|this, action: &ToggleWholeWord, cx| { + if this.supported_options().word { + this.toggle_whole_word(action, cx); + } }); } - register_action(workspace, |this, action: &ToggleCaseSensitive, cx| { - if this.supported_options().case { - this.toggle_case_sensitive(action, cx); - } - }); - register_action(workspace, |this, action: &ToggleWholeWord, cx| { - if this.supported_options().word { - this.toggle_whole_word(action, cx); - } - }); - register_action(workspace, |this, action: &ToggleReplace, cx| { - if this.supported_options().replacement { - this.toggle_replace(action, cx); - } - }); - register_action(workspace, |this, _: &ActivateRegexMode, cx| { - if this.supported_options().regex { - this.activate_search_mode(SearchMode::Regex, cx); - } - }); - register_action(workspace, |this, _: &ActivateTextMode, cx| { + if supported_options.replacement { + registrar.register_handler(|this, action: &ToggleReplace, cx| { + if this.supported_options().replacement { + this.toggle_replace(action, cx); + } + }); + } + + if supported_options.regex { + registrar.register_handler(|this, _: &ActivateRegexMode, cx| { + if this.supported_options().regex { + this.activate_search_mode(SearchMode::Regex, cx); + } + }); + } + + registrar.register_handler(|this, _: &ActivateTextMode, cx| { this.activate_search_mode(SearchMode::Text, cx); }); - register_action(workspace, |this, action: &CycleMode, cx| { - if this.supported_options().regex { - // If regex is not supported then search has just one mode (text) - in that case there's no point in supporting - // cycling. - this.cycle_mode(action, cx) - } - }); - register_action(workspace, |this, action: &SelectNextMatch, cx| { + + if supported_options.regex { + registrar.register_handler(|this, action: &CycleMode, cx| { + if this.supported_options().regex { + // If regex is not supported then search has just one mode (text) - in that case there's no point in supporting + // cycling. + this.cycle_mode(action, cx) + } + }); + } + + registrar.register_handler(|this, action: &SelectNextMatch, cx| { this.select_next_match(action, cx); }); - register_action(workspace, |this, action: &SelectPrevMatch, cx| { + registrar.register_handler(|this, action: &SelectPrevMatch, cx| { this.select_prev_match(action, cx); }); - register_action(workspace, |this, action: &SelectAllMatches, cx| { + registrar.register_handler(|this, action: &SelectAllMatches, cx| { this.select_all_matches(action, cx); }); - register_action(workspace, |this, _: &editor::Cancel, cx| { + registrar.register_handler(|this, _: &editor::Cancel, cx| { if !this.dismissed { this.dismiss(&Dismiss, cx); return; } cx.propagate(); }); + registrar.register_handler(|this, deploy, cx| { + this.deploy(deploy, cx); + }) + } + fn register(workspace: &mut Workspace) { + impl SearchActionsRegistrar for Workspace { + fn register_handler( + &mut self, + callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), + ) { + self.register_action(move |workspace, action: &A, cx| { + let pane = workspace.active_pane(); + pane.update(cx, move |this, cx| { + this.toolbar().update(cx, move |this, cx| { + if let Some(search_bar) = this.item_of_type::() { + search_bar.update(cx, move |this, cx| callback(this, action, cx)); + cx.notify(); + } + }) + }); + }); + } + } + Self::register_inner( + workspace, + &workspace::searchable::SearchOptions { + case: true, + word: true, + regex: true, + replacement: true, + }, + ); } pub fn new(cx: &mut ViewContext) -> Self { let query_editor = cx.new_view(|cx| Editor::single_line(cx)); diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 7118d6f767b37ea9a21f73e51a88407c8a4c8c65..f363c5228bc7ad0056b2ece3321a60b34305b55d 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -3,11 +3,13 @@ use std::{path::PathBuf, sync::Arc}; use crate::TerminalView; use db::kvp::KEY_VALUE_STORE; use gpui::{ - actions, div, serde_json, AppContext, AsyncWindowContext, Entity, EventEmitter, ExternalPaths, - FocusHandle, FocusableView, IntoElement, ParentElement, Pixels, Render, Styled, Subscription, - Task, View, ViewContext, VisualContext, WeakView, WindowContext, + actions, div, serde_json, AppContext, AsyncWindowContext, Div, Entity, EventEmitter, + ExternalPaths, FocusHandle, FocusableView, InteractiveElement, IntoElement, ParentElement, + Pixels, Render, Styled, Subscription, Task, View, ViewContext, VisualContext, WeakView, + WindowContext, }; use project::Fs; +use search::{buffer_search::SearchActionsRegistrar, BufferSearchBar}; use serde::{Deserialize, Serialize}; use settings::{Settings, SettingsStore}; use terminal::terminal_settings::{TerminalDockPosition, TerminalSettings}; @@ -17,6 +19,7 @@ use workspace::{ dock::{DockPosition, Panel, PanelEvent}, item::Item, pane, + searchable::SearchableItem, ui::Icon, Pane, Workspace, }; @@ -328,9 +331,36 @@ impl TerminalPanel { impl EventEmitter for TerminalPanel {} +struct ActionsRegistrar<'a, 'b> +where + 'b: 'a, +{ + div: Option
, + cx: &'a mut ViewContext<'b, TerminalPanel>, +} +impl SearchActionsRegistrar for ActionsRegistrar<'_, '_> { + fn register_handler( + &mut self, + callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), + ) { + self.div = self.div.take().map(|div| { + div.on_action(self.cx.listener(move |this, action, cx| { + this.pane + .read(cx) + .toolbar() + .read(cx) + .item_of_type::() + .map(|search_bar| search_bar.update(cx, |this, cx| callback(this, action, cx))); + })) + }); + } +} impl Render for TerminalPanel { - fn render(&mut self, _cx: &mut ViewContext) -> impl IntoElement { - div().size_full().child(self.pane.clone()) + fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { + let div = div(); + let mut registrar = ActionsRegistrar { div: Some(div), cx }; + BufferSearchBar::register_inner(&mut registrar, &TerminalView::supported_options()); + registrar.div.unwrap().size_full().child(self.pane.clone()) } } From 5ad125a9e93dd8223b4ca10823cf41cdf6b9078b Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 15:51:56 +0100 Subject: [PATCH 45/74] Touchups to registrar API --- Cargo.lock | 1 - crates/feedback/Cargo.toml | 1 - crates/search/src/buffer_search.rs | 84 ++++++++-------------- crates/terminal_view/src/terminal_panel.rs | 3 +- 4 files changed, 32 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4371742056075385f342917ae078a0b48698506f..0316c343cb4ea5922897d9fc8ab417793e770ade 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2486,7 +2486,6 @@ dependencies = [ "postage", "project", "regex", - "search", "serde", "serde_derive", "settings", diff --git a/crates/feedback/Cargo.toml b/crates/feedback/Cargo.toml index c6c8b9f4b24c80793ca1d177d0fe9eb0682bbf69..e14df6a2d48264b37686a5bb942cc9ce9dcb7504 100644 --- a/crates/feedback/Cargo.toml +++ b/crates/feedback/Cargo.toml @@ -18,7 +18,6 @@ gpui = { path = "../gpui" } language = { path = "../language" } menu = { path = "../menu" } project = { path = "../project" } -search = { path = "../search" } settings = { path = "../settings" } theme = { path = "../theme" } ui = { path = "../ui" } diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 3521b1e8490d88c21ec66323ce9f03825ea6677f..afd0f6c615649a2ef61f997e0edd6a330ffea5a2 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -431,57 +431,42 @@ pub trait SearchActionsRegistrar { } impl BufferSearchBar { - pub fn register_inner( - registrar: &mut impl SearchActionsRegistrar, - supported_options: &workspace::searchable::SearchOptions, - ) { - // supported_options controls whether the action is registered in the first place, - // but we still perform dynamic checks as e.g. if a view (like Workspace) uses SearchableItemHandle, they cannot know in advance - // whether a given option is supported. - if supported_options.case { - registrar.register_handler(|this, action: &ToggleCaseSensitive, cx| { - if this.supported_options().case { - this.toggle_case_sensitive(action, cx); - } - }); - } - if supported_options.word { - registrar.register_handler(|this, action: &ToggleWholeWord, cx| { - if this.supported_options().word { - this.toggle_whole_word(action, cx); - } - }); - } + pub fn register_inner(registrar: &mut impl SearchActionsRegistrar) { + registrar.register_handler(|this, action: &ToggleCaseSensitive, cx| { + if this.supported_options().case { + this.toggle_case_sensitive(action, cx); + } + }); - if supported_options.replacement { - registrar.register_handler(|this, action: &ToggleReplace, cx| { - if this.supported_options().replacement { - this.toggle_replace(action, cx); - } - }); - } + registrar.register_handler(|this, action: &ToggleWholeWord, cx| { + if this.supported_options().word { + this.toggle_whole_word(action, cx); + } + }); - if supported_options.regex { - registrar.register_handler(|this, _: &ActivateRegexMode, cx| { - if this.supported_options().regex { - this.activate_search_mode(SearchMode::Regex, cx); - } - }); - } + registrar.register_handler(|this, action: &ToggleReplace, cx| { + if this.supported_options().replacement { + this.toggle_replace(action, cx); + } + }); + + registrar.register_handler(|this, _: &ActivateRegexMode, cx| { + if this.supported_options().regex { + this.activate_search_mode(SearchMode::Regex, cx); + } + }); registrar.register_handler(|this, _: &ActivateTextMode, cx| { this.activate_search_mode(SearchMode::Text, cx); }); - if supported_options.regex { - registrar.register_handler(|this, action: &CycleMode, cx| { - if this.supported_options().regex { - // If regex is not supported then search has just one mode (text) - in that case there's no point in supporting - // cycling. - this.cycle_mode(action, cx) - } - }); - } + registrar.register_handler(|this, action: &CycleMode, cx| { + if this.supported_options().regex { + // If regex is not supported then search has just one mode (text) - in that case there's no point in supporting + // cycling. + this.cycle_mode(action, cx) + } + }); registrar.register_handler(|this, action: &SelectNextMatch, cx| { this.select_next_match(action, cx); @@ -500,6 +485,7 @@ impl BufferSearchBar { cx.propagate(); }); registrar.register_handler(|this, deploy, cx| { + dbg!("Deploying?"); this.deploy(deploy, cx); }) } @@ -522,15 +508,7 @@ impl BufferSearchBar { }); } } - Self::register_inner( - workspace, - &workspace::searchable::SearchOptions { - case: true, - word: true, - regex: true, - replacement: true, - }, - ); + Self::register_inner(workspace); } pub fn new(cx: &mut ViewContext) -> Self { let query_editor = cx.new_view(|cx| Editor::single_line(cx)); diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index f363c5228bc7ad0056b2ece3321a60b34305b55d..ed228faba8c7810657d27e6274235dfaa2ae405b 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -19,7 +19,6 @@ use workspace::{ dock::{DockPosition, Panel, PanelEvent}, item::Item, pane, - searchable::SearchableItem, ui::Icon, Pane, Workspace, }; @@ -359,7 +358,7 @@ impl Render for TerminalPanel { fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { let div = div(); let mut registrar = ActionsRegistrar { div: Some(div), cx }; - BufferSearchBar::register_inner(&mut registrar, &TerminalView::supported_options()); + BufferSearchBar::register_inner(&mut registrar); registrar.div.unwrap().size_full().child(self.pane.clone()) } } From 9cdcdbea419ef5c62bcc25c876da63268ed8c4f1 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 16:07:18 +0100 Subject: [PATCH 46/74] Use Registrar in Assistant Panel. This fixes various actions like "Activate regex mode" that were dispatched onto main pane instead of assistant search bar. --- crates/assistant/src/assistant_panel.rs | 34 +++++++++++++++++++++++-- crates/search/src/buffer_search.rs | 1 - 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 9221d87f60fda92990997a1401bf54325a099c6b..7ab6aba227dc1cccb9957afe02144d33981ab404 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -38,7 +38,7 @@ use gpui::{ }; use language::{language_settings::SoftWrap, Buffer, LanguageRegistry, ToOffset as _}; use project::Project; -use search::BufferSearchBar; +use search::{buffer_search::SearchActionsRegistrar, BufferSearchBar}; use semantic_index::{SemanticIndex, SemanticIndexStatus}; use settings::{Settings, SettingsStore}; use std::{ @@ -1100,6 +1100,26 @@ fn build_api_key_editor(cx: &mut ViewContext) -> View { }) } +struct SearchRegistrar<'a, 'b> { + div: Option
, + cx: &'a mut ViewContext<'b, AssistantPanel>, +} + +impl SearchActionsRegistrar for SearchRegistrar<'_, '_> { + fn register_handler( + &mut self, + callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), + ) { + self.div = self.div.take().map(|div| { + div.on_action(self.cx.listener(move |this, action, cx| { + this.toolbar + .read(cx) + .item_of_type::() + .map(|search_bar| search_bar.update(cx, |this, cx| callback(this, action, cx))); + })) + }); + } +} impl Render for AssistantPanel { fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { if let Some(api_key_editor) = self.api_key_editor.clone() { @@ -1156,6 +1176,16 @@ impl Render for AssistantPanel { div() }); + let contents = if self.active_editor().is_some() { + let mut registrar = SearchRegistrar { + div: Some(div()), + cx, + }; + BufferSearchBar::register_inner(&mut registrar); + registrar.div.unwrap() + } else { + div() + }; v_stack() .key_context("AssistantPanel") .size_full() @@ -1176,7 +1206,7 @@ impl Render for AssistantPanel { Some(self.toolbar.clone()) }) .child( - div() + contents .flex_1() .child(if let Some(editor) = self.active_editor() { editor.clone().into_any_element() diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index afd0f6c615649a2ef61f997e0edd6a330ffea5a2..6e44db60c54d3dd6b048894d841b0bc7bdbde55a 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -485,7 +485,6 @@ impl BufferSearchBar { cx.propagate(); }); registrar.register_handler(|this, deploy, cx| { - dbg!("Deploying?"); this.deploy(deploy, cx); }) } From b6655def70599bb3d6aa8d8985b1c2e104206a26 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:03:22 +0100 Subject: [PATCH 47/74] Add DivRegistrar to reduce code duplication --- crates/assistant/src/assistant_panel.rs | 30 +++------------ crates/search/src/buffer_search.rs | 40 ++++++++++++++++++++ crates/terminal_view/src/terminal_panel.rs | 44 +++++++--------------- 3 files changed, 59 insertions(+), 55 deletions(-) diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 7ab6aba227dc1cccb9957afe02144d33981ab404..371cc9007a8c1f2bc5fd013573294bcb024cc1d9 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -38,7 +38,7 @@ use gpui::{ }; use language::{language_settings::SoftWrap, Buffer, LanguageRegistry, ToOffset as _}; use project::Project; -use search::{buffer_search::SearchActionsRegistrar, BufferSearchBar}; +use search::{buffer_search::DivRegistrar, BufferSearchBar}; use semantic_index::{SemanticIndex, SemanticIndexStatus}; use settings::{Settings, SettingsStore}; use std::{ @@ -1100,26 +1100,6 @@ fn build_api_key_editor(cx: &mut ViewContext) -> View { }) } -struct SearchRegistrar<'a, 'b> { - div: Option
, - cx: &'a mut ViewContext<'b, AssistantPanel>, -} - -impl SearchActionsRegistrar for SearchRegistrar<'_, '_> { - fn register_handler( - &mut self, - callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), - ) { - self.div = self.div.take().map(|div| { - div.on_action(self.cx.listener(move |this, action, cx| { - this.toolbar - .read(cx) - .item_of_type::() - .map(|search_bar| search_bar.update(cx, |this, cx| callback(this, action, cx))); - })) - }); - } -} impl Render for AssistantPanel { fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { if let Some(api_key_editor) = self.api_key_editor.clone() { @@ -1177,12 +1157,12 @@ impl Render for AssistantPanel { }); let contents = if self.active_editor().is_some() { - let mut registrar = SearchRegistrar { - div: Some(div()), + let mut registrar = DivRegistrar::new( + |panel, cx| panel.toolbar.read(cx).item_of_type::(), cx, - }; + ); BufferSearchBar::register_inner(&mut registrar); - registrar.div.unwrap() + registrar.into_div() } else { div() }; diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 6e44db60c54d3dd6b048894d841b0bc7bdbde55a..371037e0478f62d0edd084470388c331ef29d586 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -430,6 +430,46 @@ pub trait SearchActionsRegistrar { ); } +type GetSearchBar = + for<'a, 'b> fn(&'a T, &'a mut ViewContext<'b, T>) -> Option>; + +/// Registers search actions on a div that can be taken out. +pub struct DivRegistrar<'a, 'b, T: 'static> { + div: Option
, + cx: &'a mut ViewContext<'b, T>, + search_getter: GetSearchBar, +} + +impl<'a, 'b, T: 'static> DivRegistrar<'a, 'b, T> { + pub fn new(search_getter: GetSearchBar, cx: &'a mut ViewContext<'b, T>) -> Self { + Self { + div: Some(div()), + cx, + search_getter, + } + } + pub fn into_div(self) -> Div { + // This option is always Some; it's an option in the first place because we want to call methods + // on div that require ownership. + self.div.unwrap() + } +} + +impl SearchActionsRegistrar for DivRegistrar<'_, '_, T> { + fn register_handler( + &mut self, + callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), + ) { + let getter = self.search_getter; + self.div = self.div.take().map(|div| { + div.on_action(self.cx.listener(move |this, action, cx| { + (getter)(this, cx) + .clone() + .map(|search_bar| search_bar.update(cx, |this, cx| callback(this, action, cx))); + })) + }); + } +} impl BufferSearchBar { pub fn register_inner(registrar: &mut impl SearchActionsRegistrar) { registrar.register_handler(|this, action: &ToggleCaseSensitive, cx| { diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index ed228faba8c7810657d27e6274235dfaa2ae405b..82d7208ef88ba625d8430e8f5d314a9b00cb7719 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -3,13 +3,12 @@ use std::{path::PathBuf, sync::Arc}; use crate::TerminalView; use db::kvp::KEY_VALUE_STORE; use gpui::{ - actions, div, serde_json, AppContext, AsyncWindowContext, Div, Entity, EventEmitter, - ExternalPaths, FocusHandle, FocusableView, InteractiveElement, IntoElement, ParentElement, - Pixels, Render, Styled, Subscription, Task, View, ViewContext, VisualContext, WeakView, - WindowContext, + actions, serde_json, AppContext, AsyncWindowContext, Entity, EventEmitter, ExternalPaths, + FocusHandle, FocusableView, IntoElement, ParentElement, Pixels, Render, Styled, Subscription, + Task, View, ViewContext, VisualContext, WeakView, WindowContext, }; use project::Fs; -use search::{buffer_search::SearchActionsRegistrar, BufferSearchBar}; +use search::{buffer_search::DivRegistrar, BufferSearchBar}; use serde::{Deserialize, Serialize}; use settings::{Settings, SettingsStore}; use terminal::terminal_settings::{TerminalDockPosition, TerminalSettings}; @@ -330,36 +329,21 @@ impl TerminalPanel { impl EventEmitter for TerminalPanel {} -struct ActionsRegistrar<'a, 'b> -where - 'b: 'a, -{ - div: Option
, - cx: &'a mut ViewContext<'b, TerminalPanel>, -} -impl SearchActionsRegistrar for ActionsRegistrar<'_, '_> { - fn register_handler( - &mut self, - callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), - ) { - self.div = self.div.take().map(|div| { - div.on_action(self.cx.listener(move |this, action, cx| { - this.pane +impl Render for TerminalPanel { + fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { + let mut registrar = DivRegistrar::new( + |panel, cx| { + panel + .pane .read(cx) .toolbar() .read(cx) .item_of_type::() - .map(|search_bar| search_bar.update(cx, |this, cx| callback(this, action, cx))); - })) - }); - } -} -impl Render for TerminalPanel { - fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { - let div = div(); - let mut registrar = ActionsRegistrar { div: Some(div), cx }; + }, + cx, + ); BufferSearchBar::register_inner(&mut registrar); - registrar.div.unwrap().size_full().child(self.pane.clone()) + registrar.into_div().size_full().child(self.pane.clone()) } } From 783256c80e6222acd39015fb6ca85f977dacc1b1 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:04:28 +0100 Subject: [PATCH 48/74] Move Registrar implementation for Workspace to outer scope. This fixes various actions like "Activate regex mode" that were dispatched onto main pane instead of assistant search bar. --- crates/search/src/buffer_search.rs | 38 ++++++++++++++++-------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 371037e0478f62d0edd084470388c331ef29d586..7cce3c71c6c1b61ee0679be22d8e4260dc73a17d 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -470,6 +470,26 @@ impl SearchActionsRegistrar for DivRegistrar<'_, '_, T> { }); } } + +/// Register actions for an active pane. +impl SearchActionsRegistrar for Workspace { + fn register_handler( + &mut self, + callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), + ) { + self.register_action(move |workspace, action: &A, cx| { + let pane = workspace.active_pane(); + pane.update(cx, move |this, cx| { + this.toolbar().update(cx, move |this, cx| { + if let Some(search_bar) = this.item_of_type::() { + search_bar.update(cx, move |this, cx| callback(this, action, cx)); + cx.notify(); + } + }) + }); + }); + } +} impl BufferSearchBar { pub fn register_inner(registrar: &mut impl SearchActionsRegistrar) { registrar.register_handler(|this, action: &ToggleCaseSensitive, cx| { @@ -529,24 +549,6 @@ impl BufferSearchBar { }) } fn register(workspace: &mut Workspace) { - impl SearchActionsRegistrar for Workspace { - fn register_handler( - &mut self, - callback: fn(&mut BufferSearchBar, &A, &mut ViewContext), - ) { - self.register_action(move |workspace, action: &A, cx| { - let pane = workspace.active_pane(); - pane.update(cx, move |this, cx| { - this.toolbar().update(cx, move |this, cx| { - if let Some(search_bar) = this.item_of_type::() { - search_bar.update(cx, move |this, cx| callback(this, action, cx)); - cx.notify(); - } - }) - }); - }); - } - } Self::register_inner(workspace); } pub fn new(cx: &mut ViewContext) -> Self { From ad20bc39c5fcf23018fe3fa9d616675b069db579 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 4 Jan 2024 15:31:00 -0800 Subject: [PATCH 49/74] Fix accidental load of default keymap *after* loading user keymap Co-authored-by: Mikayla Co-authored-by: Marshall --- crates/zed/src/zed.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index fea84c296419c2a7f41a538ec026cdececeee99f..c7d30230ea035b29121ceb487e4ea3ce483d5d54 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -400,7 +400,6 @@ pub fn initialize_workspace(app_state: Arc, cx: &mut AppContext) { }); workspace.focus_handle(cx).focus(cx); - load_default_keymap(cx); }) .detach(); } @@ -571,6 +570,8 @@ pub fn handle_keymap_file_changes( }) .detach(); + load_default_keymap(cx); + cx.spawn(move |cx| async move { let mut user_keymap = KeymapFile::default(); loop { From 4a7233f8f01d68d38b75be2f1997e5966e866e18 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 19:43:12 -0700 Subject: [PATCH 50/74] Fixy fix --- crates/collab/src/tests/editor_tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/collab/src/tests/editor_tests.rs b/crates/collab/src/tests/editor_tests.rs index c6577014618cfd7fec29c76fb97cf8a10d14a617..6f06e9f10faadf77d44eecbf43f6026c2799adca 100644 --- a/crates/collab/src/tests/editor_tests.rs +++ b/crates/collab/src/tests/editor_tests.rs @@ -326,8 +326,8 @@ async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mu editor_b.update(&mut cx_b, |editor, cx| { editor.change_selections(None, cx, |s| s.select_ranges([13..13])); editor.handle_input(".", cx); - editor_b.focus_handle(cx).focus(cx); }); + cx_b.focus_view(&editor_b); // Receive a completion request as the host's language server. // Return some completions from the host's language server. From 5037cca7ece59844beb2f5ce942b1be31cac0f89 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 20:16:25 -0700 Subject: [PATCH 51/74] Add LeakDetector for gpui2 Co-Authored-By: Julia --- crates/gpui/src/app/entity_map.rs | 124 +++++++++++++++++++++++++++++- crates/gpui/src/view.rs | 5 ++ 2 files changed, 126 insertions(+), 3 deletions(-) diff --git a/crates/gpui/src/app/entity_map.rs b/crates/gpui/src/app/entity_map.rs index f71cfbdebcd615daaa5758132d59f73aadd7cacd..3bab9d00f90db20ef8216cffbc118a848f5eec00 100644 --- a/crates/gpui/src/app/entity_map.rs +++ b/crates/gpui/src/app/entity_map.rs @@ -1,6 +1,8 @@ use crate::{private::Sealed, AppContext, Context, Entity, ModelContext}; use anyhow::{anyhow, Result}; +use collections::HashMap; use derive_more::{Deref, DerefMut}; +use lazy_static::lazy_static; use parking_lot::{RwLock, RwLockUpgradableReadGuard}; use slotmap::{SecondaryMap, SlotMap}; use std::{ @@ -38,6 +40,8 @@ pub(crate) struct EntityMap { struct EntityRefCounts { counts: SlotMap, dropped_entity_ids: Vec, + #[cfg(any(test, feature = "test-support"))] + leak_detector: LeakDetector, } impl EntityMap { @@ -47,6 +51,11 @@ impl EntityMap { ref_counts: Arc::new(RwLock::new(EntityRefCounts { counts: SlotMap::with_key(), dropped_entity_ids: Vec::new(), + #[cfg(any(test, feature = "test-support"))] + leak_detector: LeakDetector { + next_handle_id: 0, + entity_handles: HashMap::default(), + }, })), } } @@ -156,6 +165,8 @@ pub struct AnyModel { pub(crate) entity_id: EntityId, pub(crate) entity_type: TypeId, entity_map: Weak>, + #[cfg(any(test, feature = "test-support"))] + handle_id: HandleId, } impl AnyModel { @@ -163,7 +174,14 @@ impl AnyModel { Self { entity_id: id, entity_type, - entity_map, + entity_map: entity_map.clone(), + #[cfg(any(test, feature = "test-support"))] + handle_id: entity_map + .upgrade() + .unwrap() + .write() + .leak_detector + .handle_created(id), } } @@ -207,11 +225,20 @@ impl Clone for AnyModel { assert_ne!(prev_count, 0, "Detected over-release of a model."); } - Self { + let this = Self { entity_id: self.entity_id, entity_type: self.entity_type, entity_map: self.entity_map.clone(), - } + #[cfg(any(test, feature = "test-support"))] + handle_id: self + .entity_map + .upgrade() + .unwrap() + .write() + .leak_detector + .handle_created(self.entity_id), + }; + this } } @@ -231,6 +258,14 @@ impl Drop for AnyModel { entity_map.dropped_entity_ids.push(self.entity_id); } } + + #[cfg(any(test, feature = "test-support"))] + if let Some(entity_map) = self.entity_map.upgrade() { + entity_map + .write() + .leak_detector + .handle_dropped(self.entity_id, self.handle_id) + } } } @@ -423,13 +458,43 @@ impl AnyWeakModel { return None; } ref_count.fetch_add(1, SeqCst); + drop(ref_counts); Some(AnyModel { entity_id: self.entity_id, entity_type: self.entity_type, entity_map: self.entity_ref_counts.clone(), + #[cfg(any(test, feature = "test-support"))] + handle_id: self + .entity_ref_counts + .upgrade() + .unwrap() + .write() + .leak_detector + .handle_created(self.entity_id), }) } + + #[cfg(any(test, feature = "test-support"))] + pub fn assert_dropped(&self) { + self.entity_ref_counts + .upgrade() + .unwrap() + .write() + .leak_detector + .assert_dropped(self.entity_id); + + if self + .entity_ref_counts + .upgrade() + .and_then(|ref_counts| Some(ref_counts.read().counts.get(self.entity_id)?.load(SeqCst))) + .is_some() + { + panic!( + "entity was recently dropped but resources are retained until the end of the effect cycle." + ) + } + } } impl From> for AnyWeakModel { @@ -534,6 +599,59 @@ impl PartialEq> for WeakModel { } } +#[cfg(any(test, feature = "test-support"))] +lazy_static! { + static ref LEAK_BACKTRACE: bool = + std::env::var("LEAK_BACKTRACE").map_or(false, |b| !b.is_empty()); +} + +#[cfg(any(test, feature = "test-support"))] +#[derive(Clone, Copy, Debug, Default, Hash, PartialEq, Eq)] +pub struct HandleId { + id: u64, // id of the handle itself, not the pointed at object +} + +#[cfg(any(test, feature = "test-support"))] +pub struct LeakDetector { + next_handle_id: u64, + entity_handles: HashMap>>, +} + +#[cfg(any(test, feature = "test-support"))] +impl LeakDetector { + #[track_caller] + pub fn handle_created(&mut self, entity_id: EntityId) -> HandleId { + let id = util::post_inc(&mut self.next_handle_id); + let handle_id = HandleId { id }; + let handles = self.entity_handles.entry(entity_id).or_default(); + handles.insert( + handle_id, + LEAK_BACKTRACE.then(|| backtrace::Backtrace::new_unresolved()), + ); + handle_id + } + + pub fn handle_dropped(&mut self, entity_id: EntityId, handle_id: HandleId) { + let handles = self.entity_handles.entry(entity_id).or_default(); + handles.remove(&handle_id); + } + + pub fn assert_dropped(&mut self, entity_id: EntityId) { + let handles = self.entity_handles.entry(entity_id).or_default(); + if !handles.is_empty() { + for (_, backtrace) in handles { + if let Some(mut backtrace) = backtrace.take() { + backtrace.resolve(); + eprintln!("Leaked handle: {:#?}", backtrace); + } else { + eprintln!("Leaked handle: export LEAK_BACKTRACE to find allocation site"); + } + } + panic!(); + } + } +} + #[cfg(test)] mod test { use crate::EntityMap; diff --git a/crates/gpui/src/view.rs b/crates/gpui/src/view.rs index 6b9b452cbb196f43ca0d0b43c5a8cbc28ba3cffe..88e564d27fe27b77967a5af86da10fa3b7798ea5 100644 --- a/crates/gpui/src/view.rs +++ b/crates/gpui/src/view.rs @@ -143,6 +143,11 @@ impl WeakView { let view = self.upgrade().context("error upgrading view")?; Ok(view.update(cx, f)).flatten() } + + #[cfg(any(test, feature = "test-support"))] + pub fn assert_dropped(&self) { + self.model.assert_dropped() + } } impl Clone for WeakView { From 319bfff14e21ffdcfe4fc6440ae320ba540426d4 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 21:34:56 -0700 Subject: [PATCH 52/74] Fix more tests broken by timing change --- crates/diagnostics/src/diagnostics.rs | 1 + crates/project_symbols/src/project_symbols.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 77e6a7673ff838f3f4a5ac3029b9d5bddacbb9ee..d89ceb62e8ce27239d0ef66f659e8e34dad1406c 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -1567,6 +1567,7 @@ mod tests { workspace::init_settings(cx); Project::init_settings(cx); crate::init(cx); + editor::init(cx); }); } diff --git a/crates/project_symbols/src/project_symbols.rs b/crates/project_symbols/src/project_symbols.rs index 578a47f95ad4878af683daf187197a6d2390dffd..3c2760f720c02f411da1ef08f1d8e8bad926716f 100644 --- a/crates/project_symbols/src/project_symbols.rs +++ b/crates/project_symbols/src/project_symbols.rs @@ -395,6 +395,7 @@ mod tests { language::init(cx); Project::init_settings(cx); workspace::init_settings(cx); + editor::init(cx); }); } From 1f09f98c9be5f9739267444b4d2695a3d2fe042d Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 22:06:12 -0700 Subject: [PATCH 53/74] Remove un-needed change --- script/sqlx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/sqlx b/script/sqlx index a575efbcb619bced63c5d29b29f4d69c7e1221ae..cf2fa8d405f0b108c7131533257a859b842fdfd4 100755 --- a/script/sqlx +++ b/script/sqlx @@ -8,7 +8,7 @@ set -e cd crates/collab # Export contents of .env.toml -eval "$(cargo run --quiet --bin dotenv2)" +eval "$(cargo run --quiet --bin dotenv)" # Run sqlx command sqlx $@ From fff415e3e908f55e05e8218d99163e459c35a083 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Jan 2024 21:59:36 -0700 Subject: [PATCH 54/74] Improve deactivate simulation --- crates/editor/src/link_go_to_definition.rs | 5 +--- crates/gpui/src/app/test_context.rs | 15 ++++------- crates/gpui/src/platform/test/platform.rs | 22 ++++++++++++++++ crates/gpui/src/platform/test/window.rs | 29 +++------------------- crates/workspace/src/workspace.rs | 8 +++--- 5 files changed, 35 insertions(+), 44 deletions(-) diff --git a/crates/editor/src/link_go_to_definition.rs b/crates/editor/src/link_go_to_definition.rs index 42f502daeda6a308070763bb4bb9936f74aef210..04dcf9301500024230e55e30d8b20ee4b04b2c9f 100644 --- a/crates/editor/src/link_go_to_definition.rs +++ b/crates/editor/src/link_go_to_definition.rs @@ -930,10 +930,7 @@ mod tests { fn do_work() { «test»(); } "}); - // Deactivating the window dismisses the highlight - cx.update_workspace(|workspace, cx| { - workspace.on_window_activation_changed(cx); - }); + cx.cx.cx.deactivate_window(); cx.assert_editor_text_highlights::(indoc! {" fn test() { do_work(); } fn do_work() { test(); } diff --git a/crates/gpui/src/app/test_context.rs b/crates/gpui/src/app/test_context.rs index dfbffaf2e59282f2878bf3aee7cea5aeac0d09fa..a5f66be09b2f2ab15ad4e7a465876071d0b01414 100644 --- a/crates/gpui/src/app/test_context.rs +++ b/crates/gpui/src/app/test_context.rs @@ -519,16 +519,11 @@ impl<'a> VisualTestContext<'a> { self.cx.simulate_input(self.window, input) } - pub fn simulate_activation(&mut self) { - self.cx - .test_window(self.window) - .simulate_active_status_change(true) - } - - pub fn simulate_deactivation(&mut self) { - self.cx - .test_window(self.window) - .simulate_active_status_change(false) + pub fn deactivate_window(&mut self) { + if Some(self.window) == self.test_platform.active_window() { + self.test_platform.set_active_window(None) + } + self.background_executor.run_until_parked(); } } diff --git a/crates/gpui/src/platform/test/platform.rs b/crates/gpui/src/platform/test/platform.rs index 889e8b971e9232ad2d64baf01104758a4af6575a..111fb839211b89c7c47b6d65f7448a92a5997675 100644 --- a/crates/gpui/src/platform/test/platform.rs +++ b/crates/gpui/src/platform/test/platform.rs @@ -79,6 +79,28 @@ impl TestPlatform { self.prompts.borrow_mut().multiple_choice.push_back(tx); rx } + + pub(crate) fn set_active_window(&self, window: Option) { + let executor = self.foreground_executor().clone(); + let previous_window = self.active_window.borrow_mut().take(); + *self.active_window.borrow_mut() = window.clone(); + + executor + .spawn(async move { + if let Some(previous_window) = previous_window { + if let Some(window) = window.as_ref() { + if Arc::ptr_eq(&previous_window.0, &window.0) { + return; + } + } + previous_window.simulate_active_status_change(false); + } + if let Some(window) = window { + window.simulate_active_status_change(true); + } + }) + .detach(); + } } // todo!("implement out what our tests needed in GPUI 1") diff --git a/crates/gpui/src/platform/test/window.rs b/crates/gpui/src/platform/test/window.rs index eee2cf93c76515b176a811fc0f985f4b69dc7daa..e0128d2129737dd4c057e24d61b6b8f32efdacf6 100644 --- a/crates/gpui/src/platform/test/window.rs +++ b/crates/gpui/src/platform/test/window.rs @@ -1,6 +1,6 @@ use crate::{ px, AnyWindowHandle, AtlasKey, AtlasTextureId, AtlasTile, Bounds, InputEvent, KeyDownEvent, - Keystroke, Pixels, Platform, PlatformAtlas, PlatformDisplay, PlatformInputHandler, + Keystroke, Pixels, PlatformAtlas, PlatformDisplay, PlatformInputHandler, PlatformWindow, Point, Size, TestPlatform, TileId, WindowAppearance, WindowBounds, WindowOptions, }; @@ -76,7 +76,7 @@ impl TestWindow { self.0.lock().resize_callback = Some(callback); } - pub fn simulate_active_status_change(&self, active: bool) { + pub(crate) fn simulate_active_status_change(&self, active: bool) { let mut lock = self.0.lock(); let Some(mut callback) = lock.active_status_change_callback.take() else { return; @@ -184,33 +184,12 @@ impl PlatformWindow for TestWindow { } fn activate(&self) { - let this = self.clone(); - let executor = self - .0 + self.0 .lock() .platform .upgrade() .unwrap() - .foreground_executor() - .clone(); - - executor - .spawn(async move { - let state = this.0.lock(); - let platform = state.platform.upgrade().unwrap(); - let previous_window = platform.active_window.borrow_mut().replace(this.clone()); - drop(state); - drop(platform); - if let Some(previous_window) = previous_window { - if Arc::ptr_eq(&previous_window.0, &this.0) { - return; - } - previous_window.simulate_active_status_change(false); - } - - this.simulate_active_status_change(true); - }) - .detach(); + .set_active_window(Some(self.clone())) } fn set_title(&mut self, title: &str) { diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 6c31366f93c663cfe8c0cd0bd5b4f9ad82ce023e..37bf224d4f3d8d5b995f26a2f1ccf56668977b77 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -4763,8 +4763,7 @@ mod tests { }); // Deactivating the window saves the file. - cx.simulate_deactivation(); - cx.executor().run_until_parked(); + cx.deactivate_window(); item.update(cx, |item, _| assert_eq!(item.save_count, 1)); // Autosave on focus change. @@ -4784,14 +4783,13 @@ mod tests { item.update(cx, |item, _| assert_eq!(item.save_count, 2)); // Deactivating the window still saves the file. - cx.simulate_activation(); + cx.update(|cx| cx.activate_window()); item.update(cx, |item, cx| { cx.focus_self(); item.is_dirty = true; }); - cx.simulate_deactivation(); + cx.deactivate_window(); - cx.executor().run_until_parked(); item.update(cx, |item, _| assert_eq!(item.save_count, 3)); // Autosave after delay. From cf03ea2da9f3912a88264cf9a0bf8caf771edce2 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 5 Jan 2024 10:55:33 +0100 Subject: [PATCH 55/74] Don't shift pane content when following someone --- crates/workspace/src/pane_group.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/workspace/src/pane_group.rs b/crates/workspace/src/pane_group.rs index c6eaa71663b0a8a4619e95e602b37ea85a06808a..a7368f61360ce6639dffa26ffd31f2114cd2216b 100644 --- a/crates/workspace/src/pane_group.rs +++ b/crates/workspace/src/pane_group.rs @@ -246,7 +246,15 @@ impl Member { .size_full() .child(pane.clone()) .when_some(leader_border, |this, color| { - this.border_2().border_color(color) + this.child( + div() + .absolute() + .size_full() + .left_0() + .top_0() + .border_2() + .border_color(color), + ) }) .when_some(leader_status_box, |this, status_box| { this.child( From 3070a6ef2674a912cc6320f48275a2f47581e7c2 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 5 Jan 2024 12:38:42 +0200 Subject: [PATCH 56/74] Return back git status colors for tab labels --- crates/editor/src/items.rs | 33 ++++++++++++++++++++++++------- crates/gpui/src/app/entity_map.rs | 7 ++++--- crates/workspace/src/pane.rs | 7 ++++++- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 31c4e24659fb5a691f379e0979ce4cc5a7546aa1..9e198fa2fdca3be5efdd403cf80b22ff8beb5951 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -15,9 +15,11 @@ use language::{ proto::serialize_anchor as serialize_text_anchor, Bias, Buffer, CharKind, OffsetRangeExt, Point, SelectionGoal, }; +use project::repository::GitFileStatus; use project::{search::SearchQuery, FormatTrigger, Item as _, Project, ProjectPath}; use rpc::proto::{self, update_view, PeerId}; use settings::Settings; +use workspace::item::ItemSettings; use std::fmt::Write; use std::{ @@ -29,7 +31,7 @@ use std::{ sync::Arc, }; use text::Selection; -use theme::{ActiveTheme, Theme}; +use theme::Theme; use ui::{h_stack, prelude::*, Label}; use util::{paths::PathExt, paths::FILE_ROW_COLUMN_DELIMITER, ResultExt, TryFutureExt}; use workspace::{ @@ -579,7 +581,28 @@ impl Item for Editor { } fn tab_content(&self, detail: Option, selected: bool, cx: &WindowContext) -> AnyElement { - let _theme = cx.theme(); + let git_status = if ItemSettings::get_global(cx).git_status { + self.buffer() + .read(cx) + .as_singleton() + .and_then(|buffer| buffer.read(cx).project_path(cx)) + .and_then(|path| self.project.as_ref()?.read(cx).entry_for_path(&path, cx)) + .and_then(|entry| entry.git_status()) + } else { + None + }; + let label_color = match git_status { + Some(GitFileStatus::Added) => Color::Created, + Some(GitFileStatus::Modified) => Color::Modified, + Some(GitFileStatus::Conflict) => Color::Conflict, + None => { + if selected { + Color::Default + } else { + Color::Muted + } + } + }; let description = detail.and_then(|detail| { let path = path_for_buffer(&self.buffer, detail, false, cx)?; @@ -595,11 +618,7 @@ impl Item for Editor { h_stack() .gap_2() - .child(Label::new(self.title(cx).to_string()).color(if selected { - Color::Default - } else { - Color::Muted - })) + .child(Label::new(self.title(cx).to_string()).color(label_color)) .when_some(description, |this, description| { this.child( Label::new(description) diff --git a/crates/gpui/src/app/entity_map.rs b/crates/gpui/src/app/entity_map.rs index 3bab9d00f90db20ef8216cffbc118a848f5eec00..97f680560a3cabd0e7fb88e5da8ca691fd31364e 100644 --- a/crates/gpui/src/app/entity_map.rs +++ b/crates/gpui/src/app/entity_map.rs @@ -1,8 +1,6 @@ use crate::{private::Sealed, AppContext, Context, Entity, ModelContext}; use anyhow::{anyhow, Result}; -use collections::HashMap; use derive_more::{Deref, DerefMut}; -use lazy_static::lazy_static; use parking_lot::{RwLock, RwLockUpgradableReadGuard}; use slotmap::{SecondaryMap, SlotMap}; use std::{ @@ -18,6 +16,9 @@ use std::{ thread::panicking, }; +#[cfg(any(test, feature = "test-support"))] +use collections::HashMap; + slotmap::new_key_type! { pub struct EntityId; } impl EntityId { @@ -600,7 +601,7 @@ impl PartialEq> for WeakModel { } #[cfg(any(test, feature = "test-support"))] -lazy_static! { +lazy_static::lazy_static! { static ref LEAK_BACKTRACE: bool = std::env::var("LEAK_BACKTRACE").map_or(false, |b| !b.is_empty()); } diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 21c5962bebb92904935b2a2c2207cda622e29dda..91e2890adb17cfc8204b458bbd47eb049fe6e0fc 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -1128,7 +1128,12 @@ impl Pane { if self.items.len() == 1 && should_activate { self.focus_handle.focus(cx); } else { - self.activate_item(index_to_activate, should_activate, should_activate, cx); + self.activate_item( + dbg!(index_to_activate), + dbg!(should_activate), + should_activate, + cx, + ); } } From a984a158fc4f1ba5a235aba3f1a4906185721afe Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Thu, 4 Jan 2024 11:39:52 +0100 Subject: [PATCH 57/74] gpui: Use async-task 4.7 --- Cargo.lock | 5 +++-- Cargo.toml | 1 - crates/gpui/Cargo.toml | 2 +- crates/gpui/src/platform/mac/dispatcher.rs | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0316c343cb4ea5922897d9fc8ab417793e770ade..32954a86aea2d0d2d083edc0f22fc30c427836d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -576,8 +576,9 @@ dependencies = [ [[package]] name = "async-task" -version = "4.0.3" -source = "git+https://github.com/zed-industries/async-task?rev=341b57d6de98cdfd7b418567b8de2022ca993a6e#341b57d6de98cdfd7b418567b8de2022ca993a6e" +version = "4.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" [[package]] name = "async-tls" diff --git a/Cargo.toml b/Cargo.toml index 9f2bc145901cdcfa4fc7c02649edcdbbbb73dc07..3e3c9e9999c70ad28cfb344e3f12bc6471c8ba87 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -164,7 +164,6 @@ tree-sitter-uiua = {git = "https://github.com/shnarazk/tree-sitter-uiua", rev = [patch.crates-io] tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "31c40449749c4263a91a43593831b82229049a4c" } -async-task = { git = "https://github.com/zed-industries/async-task", rev = "341b57d6de98cdfd7b418567b8de2022ca993a6e" } # wasmtime = { git = "https://github.com/bytecodealliance/wasmtime", rev = "v16.0.0" } # TODO - Remove when a version is released with this PR: https://github.com/servo/core-foundation-rs/pull/457 diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index 7cf6889054a5ed4c8a80d5aa7cd6b40b502375ba..d654131a56cbf4c8388cb754410af11cf2777812 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -19,7 +19,7 @@ gpui_macros = { path = "../gpui_macros" } util = { path = "../util" } sum_tree = { path = "../sum_tree" } sqlez = { path = "../sqlez" } -async-task = "4.0.3" +async-task = "4.7" backtrace = { version = "0.3", optional = true } ctor.workspace = true linkme = "0.3" diff --git a/crates/gpui/src/platform/mac/dispatcher.rs b/crates/gpui/src/platform/mac/dispatcher.rs index feb8925426f85e5e82e99273fab7220e59e3374f..06bef49b7a96644695874a0aff2aca43f939a209 100644 --- a/crates/gpui/src/platform/mac/dispatcher.rs +++ b/crates/gpui/src/platform/mac/dispatcher.rs @@ -11,7 +11,7 @@ use objc::{ }; use parking::{Parker, Unparker}; use parking_lot::Mutex; -use std::{ffi::c_void, sync::Arc, time::Duration}; +use std::{ffi::c_void, ptr::NonNull, sync::Arc, time::Duration}; include!(concat!(env!("OUT_DIR"), "/dispatch_sys.rs")); @@ -47,7 +47,7 @@ impl PlatformDispatcher for MacDispatcher { unsafe { dispatch_async_f( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT.try_into().unwrap(), 0), - runnable.into_raw() as *mut c_void, + runnable.into_raw().as_ptr() as *mut c_void, Some(trampoline), ); } @@ -57,7 +57,7 @@ impl PlatformDispatcher for MacDispatcher { unsafe { dispatch_async_f( dispatch_get_main_queue(), - runnable.into_raw() as *mut c_void, + runnable.into_raw().as_ptr() as *mut c_void, Some(trampoline), ); } @@ -71,7 +71,7 @@ impl PlatformDispatcher for MacDispatcher { dispatch_after_f( when, queue, - runnable.into_raw() as *mut c_void, + runnable.into_raw().as_ptr() as *mut c_void, Some(trampoline), ); } @@ -91,6 +91,6 @@ impl PlatformDispatcher for MacDispatcher { } extern "C" fn trampoline(runnable: *mut c_void) { - let task = unsafe { Runnable::from_raw(runnable as *mut ()) }; + let task = unsafe { Runnable::<()>::from_raw(NonNull::new_unchecked(runnable as *mut ())) }; task.run(); } From b8539373aa18f704d4eb3d3c4ac706036d6fa3d4 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 5 Jan 2024 15:54:23 +0100 Subject: [PATCH 58/74] Avoid leaking `TerminalPanel`, which would in turn leak `Project` --- crates/terminal_view/src/terminal_panel.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 82d7208ef88ba625d8430e8f5d314a9b00cb7719..32bad620ba03b0b42b59257c9af9f3686e104b38 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -53,7 +53,7 @@ pub struct TerminalPanel { impl TerminalPanel { fn new(workspace: &Workspace, cx: &mut ViewContext) -> Self { - let terminal_panel = cx.view().clone(); + let terminal_panel = cx.view().downgrade(); let pane = cx.new_view(|cx| { let mut pane = Pane::new( workspace.weak_handle(), @@ -77,14 +77,17 @@ impl TerminalPanel { pane.set_can_navigate(false, cx); pane.display_nav_history_buttons(false); pane.set_render_tab_bar_buttons(cx, move |pane, cx| { + let terminal_panel = terminal_panel.clone(); h_stack() .gap_2() .child( IconButton::new("plus", Icon::Plus) .icon_size(IconSize::Small) - .on_click(cx.listener_for(&terminal_panel, |terminal_panel, _, cx| { - terminal_panel.add_terminal(None, cx); - })) + .on_click(move |_, cx| { + terminal_panel + .update(cx, |panel, cx| panel.add_terminal(None, cx)) + .log_err(); + }) .tooltip(|cx| Tooltip::text("New Terminal", cx)), ) .child({ From bf11a04410c58e009532925da9dc76bdc3f94237 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 5 Jan 2024 17:48:07 +0200 Subject: [PATCH 59/74] Remove extra dbg!'s --- crates/workspace/src/pane.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 91e2890adb17cfc8204b458bbd47eb049fe6e0fc..21c5962bebb92904935b2a2c2207cda622e29dda 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -1128,12 +1128,7 @@ impl Pane { if self.items.len() == 1 && should_activate { self.focus_handle.focus(cx); } else { - self.activate_item( - dbg!(index_to_activate), - dbg!(should_activate), - should_activate, - cx, - ); + self.activate_item(index_to_activate, should_activate, should_activate, cx); } } From c8dcc80a1f1a39ae49d03fb1a85210bf4c486d59 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 5 Jan 2024 11:17:29 -0500 Subject: [PATCH 60/74] Respect the setting to show/hide the assistant and chat panels (#3909) This PR makes it so we respect the setting to show/hide the assistant and chat panels. Resolves https://github.com/zed-industries/community/issues/2370. Release Notes: - Fixed an issue where the settings to show/hide certain panels were not respected. --- crates/assistant/src/assistant_panel.rs | 4 ++-- crates/collab_ui/src/chat_panel.rs | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 371cc9007a8c1f2bc5fd013573294bcb024cc1d9..82ea9326e7dfff5aa85b8adcbf71d9de4f1e0d9d 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -1286,8 +1286,8 @@ impl Panel for AssistantPanel { } } - fn icon(&self, _cx: &WindowContext) -> Option { - Some(Icon::Ai) + fn icon(&self, cx: &WindowContext) -> Option { + Some(Icon::Ai).filter(|_| AssistantSettings::get_global(cx).button) } fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> { diff --git a/crates/collab_ui/src/chat_panel.rs b/crates/collab_ui/src/chat_panel.rs index 19acb17673cedd92def75e8edf82a6258ceb940b..b142fcbe7f93146ede3d6ba6edff8e03de1540e7 100644 --- a/crates/collab_ui/src/chat_panel.rs +++ b/crates/collab_ui/src/chat_panel.rs @@ -607,8 +607,12 @@ impl Panel for ChatPanel { "ChatPanel" } - fn icon(&self, _cx: &WindowContext) -> Option { - Some(ui::Icon::MessageBubbles) + fn icon(&self, cx: &WindowContext) -> Option { + if !is_channels_feature_enabled(cx) { + return None; + } + + Some(ui::Icon::MessageBubbles).filter(|_| ChatPanelSettings::get_global(cx).button) } fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> { From 9d4d58a915e9d26f95f1b763652bb6167981bc70 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Fri, 5 Jan 2024 11:19:58 -0500 Subject: [PATCH 61/74] Implement Tinted buttons and selected_style for buttons --- crates/ui/src/components/button/button.rs | 7 +++ .../ui/src/components/button/button_icon.rs | 11 ++++ .../ui/src/components/button/button_like.rs | 62 ++++++++++++++++--- .../ui/src/components/button/icon_button.rs | 11 +++- .../ui/src/components/button/toggle_button.rs | 7 +++ crates/ui/src/prelude.rs | 2 +- 6 files changed, 88 insertions(+), 12 deletions(-) diff --git a/crates/ui/src/components/button/button.rs b/crates/ui/src/components/button/button.rs index 958aa66ede0809ca0fde22d09e27654aff34791e..1e60aae03b11e84eda1a2041565c6b75a5fae79f 100644 --- a/crates/ui/src/components/button/button.rs +++ b/crates/ui/src/components/button/button.rs @@ -92,6 +92,13 @@ impl Selectable for Button { } } +impl SelectableButton for Button { + fn selected_style(mut self, style: ButtonStyle) -> Self { + self.base = self.base.selected_style(style); + self + } +} + impl Disableable for Button { fn disabled(mut self, disabled: bool) -> Self { self.base = self.base.disabled(disabled); diff --git a/crates/ui/src/components/button/button_icon.rs b/crates/ui/src/components/button/button_icon.rs index 29b23747b22eed50a112ba2a378b9620c4021443..15538bb24d79b9f17c3fcef8c4de37466e84fc66 100644 --- a/crates/ui/src/components/button/button_icon.rs +++ b/crates/ui/src/components/button/button_icon.rs @@ -12,6 +12,7 @@ pub(super) struct ButtonIcon { disabled: bool, selected: bool, selected_icon: Option, + selected_style: Option, } impl ButtonIcon { @@ -23,6 +24,7 @@ impl ButtonIcon { disabled: false, selected: false, selected_icon: None, + selected_style: None, } } @@ -62,6 +64,13 @@ impl Selectable for ButtonIcon { } } +impl SelectableButton for ButtonIcon { + fn selected_style(mut self, style: ButtonStyle) -> Self { + self.selected_style = Some(style); + self + } +} + impl RenderOnce for ButtonIcon { fn render(self, _cx: &mut WindowContext) -> impl IntoElement { let icon = self @@ -71,6 +80,8 @@ impl RenderOnce for ButtonIcon { let icon_color = if self.disabled { Color::Disabled + } else if self.selected_style.is_some() && self.selected { + self.selected_style.unwrap().into() } else if self.selected { Color::Selected } else { diff --git a/crates/ui/src/components/button/button_like.rs b/crates/ui/src/components/button/button_like.rs index c3d871fe154a3b3d510f23b9d7d184a88793ebd8..431286073fb33b263fd08c27ba1c07e44fe82c01 100644 --- a/crates/ui/src/components/button/button_like.rs +++ b/crates/ui/src/components/button/button_like.rs @@ -4,6 +4,10 @@ use smallvec::SmallVec; use crate::prelude::*; +pub trait SelectableButton: Selectable { + fn selected_style(self, style: ButtonStyle) -> Self; +} + pub trait ButtonCommon: Clickable + Disableable { /// A unique element ID to identify the button. fn id(&self) -> &ElementId; @@ -41,7 +45,6 @@ pub enum TintColor { #[default] Accent, Negative, - Positive, Warning, } @@ -54,17 +57,42 @@ impl TintColor { label_color: cx.theme().colors().text, icon_color: cx.theme().colors().text, }, - // TODO: Finish tint colors. - _ => ButtonLikeStyles { - background: gpui::red(), - border_color: gpui::red(), - label_color: gpui::red(), - icon_color: gpui::red(), + TintColor::Negative => ButtonLikeStyles { + background: cx.theme().status().error_background, + border_color: cx.theme().status().error_border, + label_color: cx.theme().colors().text, + icon_color: cx.theme().colors().text, + }, + TintColor::Warning => ButtonLikeStyles { + background: cx.theme().status().warning_background, + border_color: cx.theme().status().warning_border, + label_color: cx.theme().colors().text, + icon_color: cx.theme().colors().text, }, } } } +impl From for Color { + fn from(tint: TintColor) -> Self { + match tint { + TintColor::Accent => Color::Accent, + TintColor::Negative => Color::Error, + TintColor::Warning => Color::Warning, + } + } +} + +// Used to go from ButtonStyle -> Color through tint colors. +impl From for Color { + fn from(style: ButtonStyle) -> Self { + match style { + ButtonStyle::Tinted(tint) => tint.into(), + _ => Color::Default, + } + } +} + #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Default)] pub enum ButtonStyle { /// A filled button with a solid background color. Provides emphasis versus @@ -266,6 +294,7 @@ pub struct ButtonLike { pub(super) style: ButtonStyle, pub(super) disabled: bool, pub(super) selected: bool, + pub(super) selected_style: Option, pub(super) width: Option, size: ButtonSize, rounding: Option, @@ -282,6 +311,7 @@ impl ButtonLike { style: ButtonStyle::default(), disabled: false, selected: false, + selected_style: None, width: None, size: ButtonSize::Default, rounding: Some(ButtonLikeRounding::All), @@ -311,6 +341,13 @@ impl Selectable for ButtonLike { } } +impl SelectableButton for ButtonLike { + fn selected_style(mut self, style: ButtonStyle) -> Self { + self.selected_style = Some(style); + self + } +} + impl Clickable for ButtonLike { fn on_click(mut self, handler: impl Fn(&ClickEvent, &mut WindowContext) + 'static) -> Self { self.on_click = Some(Box::new(handler)); @@ -366,6 +403,11 @@ impl ParentElement for ButtonLike { impl RenderOnce for ButtonLike { fn render(self, cx: &mut WindowContext) -> impl IntoElement { + let style = self + .selected_style + .filter(|_| self.selected) + .unwrap_or(self.style); + self.base .h_flex() .id(self.id.clone()) @@ -384,12 +426,12 @@ impl RenderOnce for ButtonLike { ButtonSize::Default | ButtonSize::Compact => this.px_1(), ButtonSize::None => this, }) - .bg(self.style.enabled(cx).background) + .bg(style.enabled(cx).background) .when(self.disabled, |this| this.cursor_not_allowed()) .when(!self.disabled, |this| { this.cursor_pointer() - .hover(|hover| hover.bg(self.style.hovered(cx).background)) - .active(|active| active.bg(self.style.active(cx).background)) + .hover(|hover| hover.bg(style.hovered(cx).background)) + .active(|active| active.bg(style.active(cx).background)) }) .when_some( self.on_click.filter(|_| !self.disabled), diff --git a/crates/ui/src/components/button/icon_button.rs b/crates/ui/src/components/button/icon_button.rs index 0a75f361cfe10eae59c7da0d0540cac46c81e9c8..d9ed6ccb5d86a2c5122ef6cd2fd364be235566bc 100644 --- a/crates/ui/src/components/button/icon_button.rs +++ b/crates/ui/src/components/button/icon_button.rs @@ -1,6 +1,6 @@ use gpui::{AnyView, DefiniteLength}; -use crate::prelude::*; +use crate::{prelude::*, SelectableButton}; use crate::{ButtonCommon, ButtonLike, ButtonSize, ButtonStyle, Icon, IconSize}; use super::button_icon::ButtonIcon; @@ -55,6 +55,13 @@ impl Selectable for IconButton { } } +impl SelectableButton for IconButton { + fn selected_style(mut self, style: ButtonStyle) -> Self { + self.base = self.base.selected_style(style); + self + } +} + impl Clickable for IconButton { fn on_click( mut self, @@ -109,12 +116,14 @@ impl RenderOnce for IconButton { fn render(self, _cx: &mut WindowContext) -> impl IntoElement { let is_disabled = self.base.disabled; let is_selected = self.base.selected; + let selected_style = self.base.selected_style; self.base.child( ButtonIcon::new(self.icon) .disabled(is_disabled) .selected(is_selected) .selected_icon(self.selected_icon) + .when_some(selected_style, |this, style| this.selected_style(style)) .size(self.icon_size) .color(self.icon_color), ) diff --git a/crates/ui/src/components/button/toggle_button.rs b/crates/ui/src/components/button/toggle_button.rs index f97498b0d837539f7a46a9def47e8040d8a429dc..e458c636eceab71b889fd008ab78934b6b243e0b 100644 --- a/crates/ui/src/components/button/toggle_button.rs +++ b/crates/ui/src/components/button/toggle_button.rs @@ -63,6 +63,13 @@ impl Selectable for ToggleButton { } } +impl SelectableButton for ToggleButton { + fn selected_style(mut self, style: ButtonStyle) -> Self { + self.base.selected_style = Some(style); + self + } +} + impl Disableable for ToggleButton { fn disabled(mut self, disabled: bool) -> Self { self.base = self.base.disabled(disabled); diff --git a/crates/ui/src/prelude.rs b/crates/ui/src/prelude.rs index dbf3c79b7173c1c6d018216cb4e11aab444d2e54..63d6c4b46a498bbce2573814cd645ec1d1b7bccd 100644 --- a/crates/ui/src/prelude.rs +++ b/crates/ui/src/prelude.rs @@ -12,7 +12,7 @@ pub use crate::selectable::*; pub use crate::styles::{vh, vw}; pub use crate::visible_on_hover::*; pub use crate::{h_stack, v_stack}; -pub use crate::{Button, ButtonSize, ButtonStyle, IconButton}; +pub use crate::{Button, ButtonSize, ButtonStyle, IconButton, SelectableButton}; pub use crate::{ButtonCommon, Color, StyledExt}; pub use crate::{Icon, IconElement, IconPosition, IconSize}; pub use crate::{Label, LabelCommon, LabelSize, LineHeightStyle}; From 6c4350933f768143d6616e0a90684b52dd93d2de Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Fri, 5 Jan 2024 11:20:24 -0500 Subject: [PATCH 62/74] Update titlebar call status icons --- crates/collab_ui/src/collab_titlebar_item.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index 8150fe1e4ddf19bb422697d17cf0edf4ade0aed5..c013f8d43221476279c08df8eeec496f473d90e4 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -14,7 +14,7 @@ use std::sync::Arc; use theme::{ActiveTheme, PlayerColors}; use ui::{ h_stack, popover_menu, prelude::*, Avatar, Button, ButtonLike, ButtonStyle, ContextMenu, Icon, - IconButton, IconElement, Tooltip, + IconButton, IconElement, TintColor, Tooltip, }; use util::ResultExt; use vcs_menu::{build_branch_list, BranchList, OpenRecent as ToggleVcsMenu}; @@ -183,6 +183,8 @@ impl Render for CollabTitlebarItem { if is_shared { "Unshare" } else { "Share" }, ) .style(ButtonStyle::Subtle) + .selected_style(ButtonStyle::Tinted(TintColor::Accent)) + .selected(is_shared) .label_size(LabelSize::Small) .on_click(cx.listener( move |this, _, cx| { @@ -215,6 +217,7 @@ impl Render for CollabTitlebarItem { }, ) .style(ButtonStyle::Subtle) + .selected_style(ButtonStyle::Tinted(TintColor::Negative)) .icon_size(IconSize::Small) .selected(is_muted) .on_click(move |_, cx| crate::toggle_mute(&Default::default(), cx)), @@ -229,6 +232,7 @@ impl Render for CollabTitlebarItem { }, ) .style(ButtonStyle::Subtle) + .selected_style(ButtonStyle::Tinted(TintColor::Negative)) .icon_size(IconSize::Small) .selected(is_deafened) .tooltip(move |cx| { @@ -239,6 +243,7 @@ impl Render for CollabTitlebarItem { .child( IconButton::new("screen-share", ui::Icon::Screen) .style(ButtonStyle::Subtle) + .selected_style(ButtonStyle::Tinted(TintColor::Accent)) .icon_size(IconSize::Small) .selected(is_screen_sharing) .on_click(move |_, cx| { From 0083ca38e39cb187166f41791194cbc75e27b519 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 5 Jan 2024 11:34:32 -0500 Subject: [PATCH 63/74] Use the `editor_background` color for the welcome screen's background (#3910) This PR updates the welcome screen to use the same background color as the editor. Screenshot 2024-01-05 at 11 28 19 AM Release Notes: - Updated the background color of the welcome screen to match the editor background. --- crates/welcome/src/welcome.rs | 292 +++++++++++++++++----------------- 1 file changed, 149 insertions(+), 143 deletions(-) diff --git a/crates/welcome/src/welcome.rs b/crates/welcome/src/welcome.rs index 4839f9791a79c1f1a266fe15a8fbcea4a65f086f..d096248a28935224de782dcdd9b62d440d50730f 100644 --- a/crates/welcome/src/welcome.rs +++ b/crates/welcome/src/welcome.rs @@ -59,153 +59,159 @@ pub struct WelcomePage { impl Render for WelcomePage { fn render(&mut self, cx: &mut gpui::ViewContext) -> impl IntoElement { - h_stack().full().track_focus(&self.focus_handle).child( - v_stack() - .w_96() - .gap_4() - .mx_auto() - .child( - svg() - .path("icons/logo_96.svg") - .text_color(gpui::white()) - .w(px(96.)) - .h(px(96.)) - .mx_auto(), - ) - .child( - h_stack() - .justify_center() - .child(Label::new("Code at the speed of thought")), - ) - .child( - v_stack() - .gap_2() - .child( - Button::new("choose-theme", "Choose a theme") - .full_width() - .on_click(cx.listener(|this, _, cx| { - this.workspace - .update(cx, |workspace, cx| { - theme_selector::toggle( - workspace, - &Default::default(), - cx, - ) - }) - .ok(); - })), - ) - .child( - Button::new("choose-keymap", "Choose a keymap") - .full_width() - .on_click(cx.listener(|this, _, cx| { - this.workspace - .update(cx, |workspace, cx| { - base_keymap_picker::toggle( - workspace, - &Default::default(), - cx, - ) - }) - .ok(); - })), - ) - .child( - Button::new("install-cli", "Install the CLI") - .full_width() - .on_click(cx.listener(|_, _, cx| { - cx.app_mut() - .spawn( - |cx| async move { install_cli::install_cli(&cx).await }, + h_stack() + .full() + .bg(cx.theme().colors().editor_background) + .track_focus(&self.focus_handle) + .child( + v_stack() + .w_96() + .gap_4() + .mx_auto() + .child( + svg() + .path("icons/logo_96.svg") + .text_color(gpui::white()) + .w(px(96.)) + .h(px(96.)) + .mx_auto(), + ) + .child( + h_stack() + .justify_center() + .child(Label::new("Code at the speed of thought")), + ) + .child( + v_stack() + .gap_2() + .child( + Button::new("choose-theme", "Choose a theme") + .full_width() + .on_click(cx.listener(|this, _, cx| { + this.workspace + .update(cx, |workspace, cx| { + theme_selector::toggle( + workspace, + &Default::default(), + cx, + ) + }) + .ok(); + })), + ) + .child( + Button::new("choose-keymap", "Choose a keymap") + .full_width() + .on_click(cx.listener(|this, _, cx| { + this.workspace + .update(cx, |workspace, cx| { + base_keymap_picker::toggle( + workspace, + &Default::default(), + cx, + ) + }) + .ok(); + })), + ) + .child( + Button::new("install-cli", "Install the CLI") + .full_width() + .on_click(cx.listener(|_, _, cx| { + cx.app_mut() + .spawn(|cx| async move { + install_cli::install_cli(&cx).await + }) + .detach_and_log_err(cx); + })), + ), + ) + .child( + v_stack() + .p_3() + .gap_2() + .bg(cx.theme().colors().elevated_surface_background) + .border_1() + .border_color(cx.theme().colors().border) + .rounded_md() + .child( + h_stack() + .gap_2() + .child( + Checkbox::new( + "enable-vim", + if VimModeSetting::get_global(cx).0 { + ui::Selection::Selected + } else { + ui::Selection::Unselected + }, ) - .detach_and_log_err(cx); - })), - ), - ) - .child( - v_stack() - .p_3() - .gap_2() - .bg(cx.theme().colors().elevated_surface_background) - .border_1() - .border_color(cx.theme().colors().border) - .rounded_md() - .child( - h_stack() - .gap_2() - .child( - Checkbox::new( - "enable-vim", - if VimModeSetting::get_global(cx).0 { - ui::Selection::Selected - } else { - ui::Selection::Unselected - }, + .on_click( + cx.listener(move |this, selection, cx| { + this.update_settings::( + selection, + cx, + |setting, value| *setting = Some(value), + ); + }), + ), ) - .on_click(cx.listener( - move |this, selection, cx| { - this.update_settings::( - selection, - cx, - |setting, value| *setting = Some(value), - ); - }, - )), - ) - .child(Label::new("Enable vim mode")), - ) - .child( - h_stack() - .gap_2() - .child( - Checkbox::new( - "enable-telemetry", - if TelemetrySettings::get_global(cx).metrics { - ui::Selection::Selected - } else { - ui::Selection::Unselected - }, + .child(Label::new("Enable vim mode")), + ) + .child( + h_stack() + .gap_2() + .child( + Checkbox::new( + "enable-telemetry", + if TelemetrySettings::get_global(cx).metrics { + ui::Selection::Selected + } else { + ui::Selection::Unselected + }, + ) + .on_click( + cx.listener(move |this, selection, cx| { + this.update_settings::( + selection, + cx, + |settings, value| { + settings.metrics = Some(value) + }, + ); + }), + ), ) - .on_click(cx.listener( - move |this, selection, cx| { - this.update_settings::( - selection, - cx, - |settings, value| settings.metrics = Some(value), - ); - }, - )), - ) - .child(Label::new("Send anonymous usage data")), - ) - .child( - h_stack() - .gap_2() - .child( - Checkbox::new( - "enable-crash", - if TelemetrySettings::get_global(cx).diagnostics { - ui::Selection::Selected - } else { - ui::Selection::Unselected - }, + .child(Label::new("Send anonymous usage data")), + ) + .child( + h_stack() + .gap_2() + .child( + Checkbox::new( + "enable-crash", + if TelemetrySettings::get_global(cx).diagnostics { + ui::Selection::Selected + } else { + ui::Selection::Unselected + }, + ) + .on_click( + cx.listener(move |this, selection, cx| { + this.update_settings::( + selection, + cx, + |settings, value| { + settings.diagnostics = Some(value) + }, + ); + }), + ), ) - .on_click(cx.listener( - move |this, selection, cx| { - this.update_settings::( - selection, - cx, - |settings, value| { - settings.diagnostics = Some(value) - }, - ); - }, - )), - ) - .child(Label::new("Send crash reports")), - ), - ), - ) + .child(Label::new("Send crash reports")), + ), + ), + ) } } From 6cc48b97ddc5723ba09bd7353dad8eb496ee183f Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 5 Jan 2024 18:41:40 +0200 Subject: [PATCH 64/74] Set a minimum size for the search input field --- crates/search/src/buffer_search.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 7cce3c71c6c1b61ee0679be22d8e4260dc73a17d..f2d019f2dc64c46f8d8d8780e9ec14af6e6243e2 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -223,6 +223,7 @@ impl Render for BufferSearchBar { .gap_2() .border_1() .border_color(editor_border) + .min_w(rems(384. / 16.)) .rounded_lg() .child(IconElement::new(Icon::MagnifyingGlass)) .child(self.render_text_input(&self.query_editor, cx)) From 319f18e9627bf0c6a998d9fbf97ee0997f9569bb Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 5 Jan 2024 11:42:40 -0500 Subject: [PATCH 65/74] Use the `editor_background` color for the project search empty state (#3911) This PR updates the project search empty state to use the same background color as the editor. Release Notes: - Updated the background color of the project search's empty state to match the editor background. --- crates/search/src/project_search.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index b6523bc3cda6e5c8e97b9c9d4d34a96db157e34d..f532ddb8e49101986169b7d389f627d17cac1dca 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -286,7 +286,6 @@ impl Render for ProjectSearchView { .size_full() .track_focus(&self.focus_handle) .child(self.results_editor.clone()) - .into_any() } else { let model = self.model.read(cx); let has_no_results = model.no_results.unwrap_or(false); @@ -363,6 +362,7 @@ impl Render for ProjectSearchView { .flex_1() .size_full() .justify_center() + .bg(cx.theme().colors().editor_background) .track_focus(&self.focus_handle) .child( h_stack() @@ -372,7 +372,6 @@ impl Render for ProjectSearchView { .child(v_stack().child(major_text).children(minor_text)) .child(h_stack().flex_1()), ) - .into_any() } } } From ea43d7a5c651f45d91987da48645a45070a4d70e Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 5 Jan 2024 11:48:52 -0500 Subject: [PATCH 66/74] Iterate on design of project search bar (#3913) This PR iterates on the design of the project search bar: - Mode selections have been updated to use `ToggleButton`s - Spacing has been added between the various elements. Release Notes: - Improved the look of the project search bar. --- crates/search/src/project_search.rs | 31 ++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index f532ddb8e49101986169b7d389f627d17cac1dca..2412921b3853b8741885d740fa5bb0b9733db61b 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -38,8 +38,8 @@ use std::{ use theme::ThemeSettings; use ui::{ - h_stack, prelude::*, v_stack, Button, Icon, IconButton, IconElement, Label, LabelCommon, - LabelSize, Selectable, Tooltip, + h_stack, prelude::*, v_stack, Icon, IconButton, IconElement, Label, LabelCommon, LabelSize, + Selectable, ToggleButton, Tooltip, }; use util::{paths::PathMatcher, ResultExt as _}; use workspace::{ @@ -1676,20 +1676,26 @@ impl Render for ProjectSearchBar { let mode_column = v_stack().items_start().justify_start().child( h_stack() + .gap_2() .child( h_stack() .child( - Button::new("project-search-text-button", "Text") + ToggleButton::new("project-search-text-button", "Text") + .style(ButtonStyle::Filled) + .size(ButtonSize::Large) .selected(search.current_mode == SearchMode::Text) .on_click(cx.listener(|this, _, cx| { this.activate_search_mode(SearchMode::Text, cx) })) .tooltip(|cx| { Tooltip::for_action("Toggle text search", &ActivateTextMode, cx) - }), + }) + .first(), ) .child( - Button::new("project-search-regex-button", "Regex") + ToggleButton::new("project-search-regex-button", "Regex") + .style(ButtonStyle::Filled) + .size(ButtonSize::Large) .selected(search.current_mode == SearchMode::Regex) .on_click(cx.listener(|this, _, cx| { this.activate_search_mode(SearchMode::Regex, cx) @@ -1700,11 +1706,20 @@ impl Render for ProjectSearchBar { &ActivateRegexMode, cx, ) + }) + .map(|this| { + if semantic_is_available { + this.middle() + } else { + this.last() + } }), ) .when(semantic_is_available, |this| { this.child( - Button::new("project-search-semantic-button", "Semantic") + ToggleButton::new("project-search-semantic-button", "Semantic") + .style(ButtonStyle::Filled) + .size(ButtonSize::Large) .selected(search.current_mode == SearchMode::Semantic) .on_click(cx.listener(|this, _, cx| { this.activate_search_mode(SearchMode::Semantic, cx) @@ -1715,7 +1730,8 @@ impl Render for ProjectSearchBar { &ActivateSemanticMode, cx, ) - }), + }) + .last(), ) }), ) @@ -1866,6 +1882,7 @@ impl Render for ProjectSearchBar { .child( h_stack() .justify_between() + .gap_2() .child(query_column) .child(mode_column) .child(replace_column) From 06ab98659957a2ed5269065331c33612381a61ce Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 5 Jan 2024 09:52:39 -0700 Subject: [PATCH 67/74] fmt --- crates/gpui/src/platform/test/window.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/gpui/src/platform/test/window.rs b/crates/gpui/src/platform/test/window.rs index e0128d2129737dd4c057e24d61b6b8f32efdacf6..f089531b0c94b556d48a1c9a8c6777b863649a10 100644 --- a/crates/gpui/src/platform/test/window.rs +++ b/crates/gpui/src/platform/test/window.rs @@ -1,8 +1,7 @@ use crate::{ px, AnyWindowHandle, AtlasKey, AtlasTextureId, AtlasTile, Bounds, InputEvent, KeyDownEvent, - Keystroke, Pixels, PlatformAtlas, PlatformDisplay, PlatformInputHandler, - PlatformWindow, Point, Size, TestPlatform, TileId, WindowAppearance, WindowBounds, - WindowOptions, + Keystroke, Pixels, PlatformAtlas, PlatformDisplay, PlatformInputHandler, PlatformWindow, Point, + Size, TestPlatform, TileId, WindowAppearance, WindowBounds, WindowOptions, }; use collections::HashMap; use parking_lot::Mutex; From c57a556c4cf23d2d6b85a3c28797b2771aa3950a Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 5 Jan 2024 11:57:26 -0500 Subject: [PATCH 68/74] Bump nu tree sitter dependency --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 32954a86aea2d0d2d083edc0f22fc30c427836d6..10f40e5ceb06b388033f78648f2162eea0bb1368 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8489,7 +8489,7 @@ dependencies = [ [[package]] name = "tree-sitter-nu" version = "0.0.1" -source = "git+https://github.com/nushell/tree-sitter-nu?rev=a0b80b2e21e5e39571252dc799e19eb89f1fc912#a0b80b2e21e5e39571252dc799e19eb89f1fc912" +source = "git+https://github.com/nushell/tree-sitter-nu?rev=26bbaecda0039df4067861ab38ea8ea169f7f5aa#26bbaecda0039df4067861ab38ea8ea169f7f5aa" dependencies = [ "cc", "tree-sitter", diff --git a/Cargo.toml b/Cargo.toml index 3e3c9e9999c70ad28cfb344e3f12bc6471c8ba87..cbd173d4c6b8b6c9ad02a204417888fcf26c4cc4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -158,7 +158,7 @@ tree-sitter-racket = { git = "https://github.com/zed-industries/tree-sitter-rack tree-sitter-yaml = { git = "https://github.com/zed-industries/tree-sitter-yaml", rev = "f545a41f57502e1b5ddf2a6668896c1b0620f930"} tree-sitter-lua = "0.0.14" tree-sitter-nix = { git = "https://github.com/nix-community/tree-sitter-nix", rev = "66e3e9ce9180ae08fc57372061006ef83f0abde7" } -tree-sitter-nu = { git = "https://github.com/nushell/tree-sitter-nu", rev = "a0b80b2e21e5e39571252dc799e19eb89f1fc912"} +tree-sitter-nu = { git = "https://github.com/nushell/tree-sitter-nu", rev = "26bbaecda0039df4067861ab38ea8ea169f7f5aa"} tree-sitter-vue = {git = "https://github.com/zed-industries/tree-sitter-vue", rev = "6608d9d60c386f19d80af7d8132322fa11199c42"} tree-sitter-uiua = {git = "https://github.com/shnarazk/tree-sitter-uiua", rev = "9260f11be5900beda4ee6d1a24ab8ddfaf5a19b2"} From fa73cf398367d57e693ccb51f3e90fa4fe92480a Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 5 Jan 2024 09:58:07 -0700 Subject: [PATCH 69/74] Correct dock menu names --- crates/workspace/src/dock.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/workspace/src/dock.rs b/crates/workspace/src/dock.rs index bd965f63d4cba742abdf3a405c04fd1929054ae3..236d96ef9fa547dd6ff35b8e2a44ee341ad3b0ba 100644 --- a/crates/workspace/src/dock.rs +++ b/crates/workspace/src/dock.rs @@ -651,9 +651,13 @@ impl Render for PanelButtons { && panel.position_is_valid(position, cx) { let panel = panel.clone(); - menu = menu.entry(position.to_label(), None, move |cx| { - panel.set_position(position, cx); - }) + menu = menu.entry( + format!("Dock {}", position.to_label()), + None, + move |cx| { + panel.set_position(position, cx); + }, + ) } } menu From 4644d55493aa1fa2b24fc55823713d9ede24ceac Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 5 Jan 2024 12:08:41 -0500 Subject: [PATCH 70/74] Upgrade `ctor` to v0.2.6 (#3915) This PR upgrades our version of `ctor` to v0.2.6. We were previously using a fork that contained this fix: https://github.com/mmastrac/rust-ctor/pull/295. A new version of `ctor` has now been released with that change, so we can switch back to the mainline version. I scanned through the diff between versions (since we're upgrading from effectively v0.1.20) and didn't notice anything that seemed obviously breaking: https://github.com/mmastrac/rust-ctor/compare/564b87f1dc13cf061ef9997ee501fa5378f35ba1...ee6b4b1c7bd3c9c1edad3b6f4d906e767767ba3d Release Notes: - N/A --- Cargo.lock | 7 ++++--- Cargo.toml | 5 +---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10f40e5ceb06b388033f78648f2162eea0bb1368..b33ea645e56a5720be95b889248c904fc8c0a5d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1926,11 +1926,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.20" -source = "git+https://github.com/zed-industries/rust-ctor?rev=7f824cf6a7943885a649b579f33f9ac53f0d1db6#7f824cf6a7943885a649b579f33f9ac53f0d1db6" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" dependencies = [ "quote", - "syn 1.0.109", + "syn 2.0.37", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index cbd173d4c6b8b6c9ad02a204417888fcf26c4cc4..9390bbb265806187a5f29170adfa5c499fc8ce99 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,10 +92,7 @@ resolver = "2" anyhow = { version = "1.0.57" } async-trait = { version = "0.1" } async-compression = { version = "0.4", features = ["gzip", "futures-io"] } -# TODO: Switch back to the published version of `ctor` once: -# 1. A new version of `ctor` is published with this change: https://github.com/mmastrac/rust-ctor/pull/295 -# 2. We've confirmed it's fine to update to the latest version of `ctor` (we're currently on v0.1.20). -ctor = { git = "https://github.com/zed-industries/rust-ctor", rev = "7f824cf6a7943885a649b579f33f9ac53f0d1db6" } +ctor = "0.2.6" derive_more = { version = "0.99.17" } env_logger = { version = "0.9" } futures = { version = "0.3" } From 12b5dbff68eb0e61f31af5f001a51efcd2aad2a0 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 5 Jan 2024 19:23:15 +0200 Subject: [PATCH 71/74] Fix current lsp logs menu item not shown as selected --- crates/language_tools/src/lsp_log.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/language_tools/src/lsp_log.rs b/crates/language_tools/src/lsp_log.rs index 123149eae2e184df4e1b2871ea8c25125eda711f..e3718267582b5331faa0dc71be3338a93022730f 100644 --- a/crates/language_tools/src/lsp_log.rs +++ b/crates/language_tools/src/lsp_log.rs @@ -772,9 +772,10 @@ impl Render for LspLogToolbarItemView { }), ); if server_selected && row.logs_selected { + let selected_ix = menu.select_last(); debug_assert_eq!( Some(ix * 3 + 1), - menu.select_last(), + selected_ix, "Could not scroll to a just added LSP menu item" ); } @@ -822,9 +823,10 @@ impl Render for LspLogToolbarItemView { }), ); if server_selected && row.rpc_trace_selected { + let selected_ix = menu.select_last(); debug_assert_eq!( Some(ix * 3 + 2), - menu.select_last(), + selected_ix, "Could not scroll to a just added LSP menu item" ); } From 15d8fed3785aa6652bae12eb33fb09115e6adb91 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 5 Jan 2024 11:30:00 -0700 Subject: [PATCH 72/74] collab 0.34.0 --- Cargo.lock | 2 +- crates/collab/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b33ea645e56a5720be95b889248c904fc8c0a5d3..0cbd9c7b675dd40b6c74d4efc0ea8d0618031789 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1441,7 +1441,7 @@ dependencies = [ [[package]] name = "collab" -version = "0.33.0" +version = "0.34.0" dependencies = [ "anyhow", "async-trait", diff --git a/crates/collab/Cargo.toml b/crates/collab/Cargo.toml index 49a4a2e693ae2af509d0f71796cf495b8640c1ee..498ded6d9a70f144bda9aa94259b62c129ecc568 100644 --- a/crates/collab/Cargo.toml +++ b/crates/collab/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Nathan Sobo "] default-run = "collab" edition = "2021" name = "collab" -version = "0.33.0" +version = "0.34.0" publish = false [[bin]] From 254a52d0a117b5947505b385b2c34886c15e5634 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Fri, 5 Jan 2024 19:36:55 +0100 Subject: [PATCH 73/74] gpui: Remove dependency on sqlez (#3871) This removes one of the path dependencies in gpui that's only really needed by `workspace` (which can work around lack of these implementations by itself). In theory it should also improve build scheduling (as gpui doesn't have to wait for main dependency of sqlez - libsqlite3 - to finish it's 25 seconds-long build in release), though in practice I didn't notice a substantial improvement. Moreover `sqlez` was unused by `settings` too, so that's removed as well. Release Notes: - N/A --- Cargo.lock | 3 +- crates/gpui/Cargo.toml | 1 - crates/gpui/src/geometry.rs | 45 ------- crates/gpui/src/platform.rs | 73 +----------- crates/settings/Cargo.toml | 1 - crates/workspace/Cargo.toml | 1 + crates/workspace/src/persistence.rs | 136 ++++++++++++++++++++-- crates/workspace/src/persistence/model.rs | 23 ++-- crates/workspace/src/workspace.rs | 17 ++- 9 files changed, 158 insertions(+), 142 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0cbd9c7b675dd40b6c74d4efc0ea8d0618031789..d4f4339d03edeac64b739235768f42751e764df3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3066,7 +3066,6 @@ dependencies = [ "slotmap", "smallvec", "smol", - "sqlez", "sum_tree", "taffy", "thiserror", @@ -6847,7 +6846,6 @@ dependencies = [ "serde_json", "serde_json_lenient", "smallvec", - "sqlez", "toml 0.5.11", "tree-sitter", "tree-sitter-json 0.19.0", @@ -9440,6 +9438,7 @@ dependencies = [ "serde_json", "settings", "smallvec", + "sqlez", "terminal", "theme", "ui", diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index d654131a56cbf4c8388cb754410af11cf2777812..6ea3524fcc4eb2a60ae2411f7eed6a2ef05a17a8 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -18,7 +18,6 @@ collections = { path = "../collections" } gpui_macros = { path = "../gpui_macros" } util = { path = "../util" } sum_tree = { path = "../sum_tree" } -sqlez = { path = "../sqlez" } async-task = "4.7" backtrace = { version = "0.3", optional = true } ctor.workspace = true diff --git a/crates/gpui/src/geometry.rs b/crates/gpui/src/geometry.rs index 4d2137c25763709d5fa84f391e2ec6feb8cae6ee..d68ab89f6c8c35d577f7be223db6f198546f717c 100644 --- a/crates/gpui/src/geometry.rs +++ b/crates/gpui/src/geometry.rs @@ -31,39 +31,6 @@ pub trait Along { fn apply_along(&self, axis: Axis, f: impl FnOnce(Self::Unit) -> Self::Unit) -> Self; } -impl sqlez::bindable::StaticColumnCount for Axis {} -impl sqlez::bindable::Bind for Axis { - fn bind( - &self, - statement: &sqlez::statement::Statement, - start_index: i32, - ) -> anyhow::Result { - match self { - Axis::Horizontal => "Horizontal", - Axis::Vertical => "Vertical", - } - .bind(statement, start_index) - } -} - -impl sqlez::bindable::Column for Axis { - fn column( - statement: &mut sqlez::statement::Statement, - start_index: i32, - ) -> anyhow::Result<(Self, i32)> { - String::column(statement, start_index).and_then(|(axis_text, next_index)| { - Ok(( - match axis_text.as_str() { - "Horizontal" => Axis::Horizontal, - "Vertical" => Axis::Vertical, - _ => anyhow::bail!("Stored serialized item kind is incorrect"), - }, - next_index, - )) - }) - } -} - /// Describes a location in a 2D cartesian coordinate space. /// /// It holds two public fields, `x` and `y`, which represent the coordinates in the space. @@ -2296,18 +2263,6 @@ impl From for GlobalPixels { } } -impl sqlez::bindable::StaticColumnCount for GlobalPixels {} - -impl sqlez::bindable::Bind for GlobalPixels { - fn bind( - &self, - statement: &sqlez::statement::Statement, - start_index: i32, - ) -> anyhow::Result { - self.0.bind(statement, start_index) - } -} - /// Represents a length in rems, a unit based on the font-size of the window, which can be assigned with [WindowContext::set_rem_size]. /// /// Rems are used for defining lengths that are scalable and consistent across different UI elements. diff --git a/crates/gpui/src/platform.rs b/crates/gpui/src/platform.rs index e7ee5f9e29876193451610d54e89dce227c1f5ca..0c4581904f42b19f99ac73300d8dd60721939fe4 100644 --- a/crates/gpui/src/platform.rs +++ b/crates/gpui/src/platform.rs @@ -6,19 +6,17 @@ mod mac; mod test; use crate::{ - point, size, Action, AnyWindowHandle, BackgroundExecutor, Bounds, DevicePixels, Font, FontId, - FontMetrics, FontRun, ForegroundExecutor, GlobalPixels, GlyphId, InputEvent, Keymap, - LineLayout, Pixels, Point, RenderGlyphParams, RenderImageParams, RenderSvgParams, Result, - Scene, SharedString, Size, TaskLabel, + Action, AnyWindowHandle, BackgroundExecutor, Bounds, DevicePixels, Font, FontId, FontMetrics, + FontRun, ForegroundExecutor, GlobalPixels, GlyphId, InputEvent, Keymap, LineLayout, Pixels, + Point, RenderGlyphParams, RenderImageParams, RenderSvgParams, Result, Scene, SharedString, + Size, TaskLabel, }; -use anyhow::{anyhow, bail}; +use anyhow::anyhow; use async_task::Runnable; use futures::channel::oneshot; use parking::Unparker; use seahash::SeaHasher; use serde::{Deserialize, Serialize}; -use sqlez::bindable::{Bind, Column, StaticColumnCount}; -use sqlez::statement::Statement; use std::borrow::Cow; use std::hash::{Hash, Hasher}; use std::time::Duration; @@ -396,67 +394,6 @@ pub enum WindowBounds { Fixed(Bounds), } -impl StaticColumnCount for WindowBounds { - fn column_count() -> usize { - 5 - } -} - -impl Bind for WindowBounds { - fn bind(&self, statement: &Statement, start_index: i32) -> Result { - let (region, next_index) = match self { - WindowBounds::Fullscreen => { - let next_index = statement.bind(&"Fullscreen", start_index)?; - (None, next_index) - } - WindowBounds::Maximized => { - let next_index = statement.bind(&"Maximized", start_index)?; - (None, next_index) - } - WindowBounds::Fixed(region) => { - let next_index = statement.bind(&"Fixed", start_index)?; - (Some(*region), next_index) - } - }; - - statement.bind( - ®ion.map(|region| { - ( - region.origin.x, - region.origin.y, - region.size.width, - region.size.height, - ) - }), - next_index, - ) - } -} - -impl Column for WindowBounds { - fn column(statement: &mut Statement, start_index: i32) -> Result<(Self, i32)> { - let (window_state, next_index) = String::column(statement, start_index)?; - let bounds = match window_state.as_str() { - "Fullscreen" => WindowBounds::Fullscreen, - "Maximized" => WindowBounds::Maximized, - "Fixed" => { - let ((x, y, width, height), _) = Column::column(statement, next_index)?; - let x: f64 = x; - let y: f64 = y; - let width: f64 = width; - let height: f64 = height; - WindowBounds::Fixed(Bounds { - origin: point(x.into(), y.into()), - size: size(width.into(), height.into()), - }) - } - _ => bail!("Window State did not have a valid string"), - }; - - Ok((bounds, next_index + 4)) - } -} - #[derive(Copy, Clone, Debug)] pub enum WindowAppearance { Light, diff --git a/crates/settings/Cargo.toml b/crates/settings/Cargo.toml index f89b80902d0f8e12aade715e7903e8191a8445dc..fe9dd3501973b82ef78ad45ada98173ef4c40764 100644 --- a/crates/settings/Cargo.toml +++ b/crates/settings/Cargo.toml @@ -14,7 +14,6 @@ test-support = ["gpui/test-support", "fs/test-support"] [dependencies] collections = { path = "../collections" } gpui = { path = "../gpui" } -sqlez = { path = "../sqlez" } fs = { path = "../fs" } feature_flags = { path = "../feature_flags" } util = { path = "../util" } diff --git a/crates/workspace/Cargo.toml b/crates/workspace/Cargo.toml index d600a290db398893669ae9b2ede1cf334cbd4880..9159fe2b3c502bedf96f2a933352c71f12870bd8 100644 --- a/crates/workspace/Cargo.toml +++ b/crates/workspace/Cargo.toml @@ -32,6 +32,7 @@ language = { path = "../language" } node_runtime = { path = "../node_runtime" } project = { path = "../project" } settings = { path = "../settings" } +sqlez = { path = "../sqlez" } terminal = { path = "../terminal" } theme = { path = "../theme" } util = { path = "../util" } diff --git a/crates/workspace/src/persistence.rs b/crates/workspace/src/persistence.rs index 5358ee3f4c656e732a29c061593c6ff55eee7aed..d03c7b3d0f73c21bde176d416060ccc200aaa62e 100644 --- a/crates/workspace/src/persistence.rs +++ b/crates/workspace/src/persistence.rs @@ -6,7 +6,12 @@ use std::path::Path; use anyhow::{anyhow, bail, Context, Result}; use db::{define_connection, query, sqlez::connection::Connection, sqlez_macros::sql}; -use gpui::{Axis, WindowBounds}; +use gpui::{point, size, Axis, Bounds, WindowBounds}; + +use sqlez::{ + bindable::{Bind, Column, StaticColumnCount}, + statement::Statement, +}; use util::{unzip_option, ResultExt}; use uuid::Uuid; @@ -20,6 +25,121 @@ use model::{ use self::model::DockStructure; +#[derive(Copy, Clone, Debug, PartialEq)] +pub(crate) struct SerializedAxis(pub(crate) gpui::Axis); +impl sqlez::bindable::StaticColumnCount for SerializedAxis {} +impl sqlez::bindable::Bind for SerializedAxis { + fn bind( + &self, + statement: &sqlez::statement::Statement, + start_index: i32, + ) -> anyhow::Result { + match self.0 { + gpui::Axis::Horizontal => "Horizontal", + gpui::Axis::Vertical => "Vertical", + } + .bind(statement, start_index) + } +} + +impl sqlez::bindable::Column for SerializedAxis { + fn column( + statement: &mut sqlez::statement::Statement, + start_index: i32, + ) -> anyhow::Result<(Self, i32)> { + String::column(statement, start_index).and_then(|(axis_text, next_index)| { + Ok(( + match axis_text.as_str() { + "Horizontal" => Self(Axis::Horizontal), + "Vertical" => Self(Axis::Vertical), + _ => anyhow::bail!("Stored serialized item kind is incorrect"), + }, + next_index, + )) + }) + } +} + +#[derive(Clone, Debug, PartialEq)] +pub(crate) struct SerializedWindowsBounds(pub(crate) WindowBounds); + +impl StaticColumnCount for SerializedWindowsBounds { + fn column_count() -> usize { + 5 + } +} + +impl Bind for SerializedWindowsBounds { + fn bind(&self, statement: &Statement, start_index: i32) -> Result { + let (region, next_index) = match self.0 { + WindowBounds::Fullscreen => { + let next_index = statement.bind(&"Fullscreen", start_index)?; + (None, next_index) + } + WindowBounds::Maximized => { + let next_index = statement.bind(&"Maximized", start_index)?; + (None, next_index) + } + WindowBounds::Fixed(region) => { + let next_index = statement.bind(&"Fixed", start_index)?; + (Some(region), next_index) + } + }; + + statement.bind( + ®ion.map(|region| { + ( + SerializedGlobalPixels(region.origin.x), + SerializedGlobalPixels(region.origin.y), + SerializedGlobalPixels(region.size.width), + SerializedGlobalPixels(region.size.height), + ) + }), + next_index, + ) + } +} + +impl Column for SerializedWindowsBounds { + fn column(statement: &mut Statement, start_index: i32) -> Result<(Self, i32)> { + let (window_state, next_index) = String::column(statement, start_index)?; + let bounds = match window_state.as_str() { + "Fullscreen" => SerializedWindowsBounds(WindowBounds::Fullscreen), + "Maximized" => SerializedWindowsBounds(WindowBounds::Maximized), + "Fixed" => { + let ((x, y, width, height), _) = Column::column(statement, next_index)?; + let x: f64 = x; + let y: f64 = y; + let width: f64 = width; + let height: f64 = height; + SerializedWindowsBounds(WindowBounds::Fixed(Bounds { + origin: point(x.into(), y.into()), + size: size(width.into(), height.into()), + })) + } + _ => bail!("Window State did not have a valid string"), + }; + + Ok((bounds, next_index + 4)) + } +} + +#[derive(Clone, Debug, PartialEq)] +struct SerializedGlobalPixels(gpui::GlobalPixels); +impl sqlez::bindable::StaticColumnCount for SerializedGlobalPixels {} + +impl sqlez::bindable::Bind for SerializedGlobalPixels { + fn bind( + &self, + statement: &sqlez::statement::Statement, + start_index: i32, + ) -> anyhow::Result { + let this: f64 = self.0.into(); + let this: f32 = this as _; + this.bind(statement, start_index) + } +} + define_connection! { // Current schema shape using pseudo-rust syntax: // @@ -181,7 +301,7 @@ impl WorkspaceDb { /// Returns a serialized workspace for the given worktree_roots. If the passed array /// is empty, the most recent workspace is returned instead. If no workspace for the /// passed roots is stored, returns none. - pub fn workspace_for_roots>( + pub(crate) fn workspace_for_roots>( &self, worktree_roots: &[P], ) -> Option { @@ -192,7 +312,7 @@ impl WorkspaceDb { let (workspace_id, workspace_location, bounds, display, docks): ( WorkspaceId, WorkspaceLocation, - Option, + Option, Option, DockStructure, ) = self @@ -230,7 +350,7 @@ impl WorkspaceDb { .get_center_pane_group(workspace_id) .context("Getting center group") .log_err()?, - bounds, + bounds: bounds.map(|bounds| bounds.0), display, docks, }) @@ -238,7 +358,7 @@ impl WorkspaceDb { /// Saves a workspace using the worktree roots. Will garbage collect any workspaces /// that used this workspace previously - pub async fn save_workspace(&self, workspace: SerializedWorkspace) { + pub(crate) async fn save_workspace(&self, workspace: SerializedWorkspace) { self.write(move |conn| { conn.with_savepoint("update_worktrees", || { // Clear out panes and pane_groups @@ -367,7 +487,7 @@ impl WorkspaceDb { type GroupKey = (Option, WorkspaceId); type GroupOrPane = ( Option, - Option, + Option, Option, Option, Option, @@ -536,7 +656,7 @@ impl WorkspaceDb { } query! { - pub async fn set_window_bounds(workspace_id: WorkspaceId, bounds: WindowBounds, display: Uuid) -> Result<()> { + pub(crate) async fn set_window_bounds(workspace_id: WorkspaceId, bounds: SerializedWindowsBounds, display: Uuid) -> Result<()> { UPDATE workspaces SET window_state = ?2, window_x = ?3, @@ -683,7 +803,7 @@ mod tests { fn group(axis: Axis, children: Vec) -> SerializedPaneGroup { SerializedPaneGroup::Group { - axis, + axis: SerializedAxis(axis), flexes: None, children, } diff --git a/crates/workspace/src/persistence/model.rs b/crates/workspace/src/persistence/model.rs index f204e5152c30fbcf0dc2a6ab9594d1c5a8af4d57..c75ea2f52f41037f13bd6241825bb9a261e36953 100644 --- a/crates/workspace/src/persistence/model.rs +++ b/crates/workspace/src/persistence/model.rs @@ -1,3 +1,4 @@ +use super::SerializedAxis; use crate::{item::ItemHandle, ItemDeserializers, Member, Pane, PaneAxis, Workspace, WorkspaceId}; use anyhow::{Context, Result}; use async_recursion::async_recursion; @@ -5,7 +6,7 @@ use db::sqlez::{ bindable::{Bind, Column, StaticColumnCount}, statement::Statement, }; -use gpui::{AsyncWindowContext, Axis, Model, Task, View, WeakView, WindowBounds}; +use gpui::{AsyncWindowContext, Model, Task, View, WeakView, WindowBounds}; use project::Project; use std::{ path::{Path, PathBuf}, @@ -54,13 +55,13 @@ impl Column for WorkspaceLocation { } #[derive(Debug, PartialEq, Clone)] -pub struct SerializedWorkspace { - pub id: WorkspaceId, - pub location: WorkspaceLocation, - pub center_group: SerializedPaneGroup, - pub bounds: Option, - pub display: Option, - pub docks: DockStructure, +pub(crate) struct SerializedWorkspace { + pub(crate) id: WorkspaceId, + pub(crate) location: WorkspaceLocation, + pub(crate) center_group: SerializedPaneGroup, + pub(crate) bounds: Option, + pub(crate) display: Option, + pub(crate) docks: DockStructure, } #[derive(Debug, PartialEq, Clone, Default)] @@ -126,9 +127,9 @@ impl Bind for DockData { } #[derive(Debug, PartialEq, Clone)] -pub enum SerializedPaneGroup { +pub(crate) enum SerializedPaneGroup { Group { - axis: Axis, + axis: SerializedAxis, flexes: Option>, children: Vec, }, @@ -183,7 +184,7 @@ impl SerializedPaneGroup { } Some(( - Member::Axis(PaneAxis::load(axis, members, flexes)), + Member::Axis(PaneAxis::load(axis.0, members, flexes)), current_active_pane, items, )) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index f46a1806e106f852c2b2d622e5d2534f65f8ba5b..474747c907d3ca1404bffcfb687aa0fcff257332 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -42,9 +42,9 @@ use node_runtime::NodeRuntime; use notifications::{simple_message_notification::MessageNotification, NotificationHandle}; pub use pane::*; pub use pane_group::*; -use persistence::DB; +use persistence::{model::SerializedWorkspace, SerializedWindowsBounds, DB}; pub use persistence::{ - model::{ItemId, SerializedWorkspace, WorkspaceLocation}, + model::{ItemId, WorkspaceLocation}, WorkspaceDb, DB as WORKSPACE_DB, }; use postage::stream::Stream; @@ -70,8 +70,9 @@ use util::ResultExt; use uuid::Uuid; pub use workspace_settings::{AutosaveSetting, WorkspaceSettings}; -use crate::persistence::model::{ - DockData, DockStructure, SerializedItem, SerializedPane, SerializedPaneGroup, +use crate::persistence::{ + model::{DockData, DockStructure, SerializedItem, SerializedPane, SerializedPaneGroup}, + SerializedAxis, }; lazy_static! { @@ -625,7 +626,11 @@ impl Workspace { if let Some(display_uuid) = display.uuid().log_err() { cx.background_executor() - .spawn(DB.set_window_bounds(workspace_id, bounds, display_uuid)) + .spawn(DB.set_window_bounds( + workspace_id, + SerializedWindowsBounds(bounds), + display_uuid, + )) .detach_and_log_err(cx); } } @@ -2989,7 +2994,7 @@ impl Workspace { flexes, bounding_boxes: _, }) => SerializedPaneGroup::Group { - axis: *axis, + axis: SerializedAxis(*axis), children: members .iter() .map(|member| build_serialized_pane_group(member, cx)) From c7c874a371f0a85ad4bc098340a239603f36cc85 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 5 Jan 2024 13:38:12 -0500 Subject: [PATCH 74/74] Decouple theme license generation from TypeScript theme definitions (#3917) This PR decouples the generation of licenses for the themes we ship from the TypeScript theme definitions. For now, we are embedding the license information for the themes in the `theme_importer`, and emit a combined `LICENSES` file in the `theme` crate whenever we import themes. This is also where we check that each theme has a valid license. We then use this `LICENSES` file when building up the global license file for Zed. This decoupling is one step towards us being able to delete the old Zed1 styles. Release Notes: - N/A --- Cargo.lock | 1 + crates/theme/src/themes/LICENSES | 1013 +++ crates/theme/src/themes/atelier.rs | 6782 ++++++++++---------- crates/theme/src/themes/gruvbox.rs | 1484 ++--- crates/theme/src/themes/one.rs | 686 +- crates/theme/src/themes/rose_pine.rs | 868 +-- crates/theme/src/themes/solarized.rs | 618 +- crates/theme_importer/Cargo.toml | 1 + crates/theme_importer/src/main.rs | 50 +- crates/theme_importer/src/zed1.rs | 2 + crates/theme_importer/src/zed1/licenses.rs | 1192 ++++ script/generate-licenses | 5 +- 12 files changed, 7476 insertions(+), 5226 deletions(-) create mode 100644 crates/theme/src/themes/LICENSES create mode 100644 crates/theme_importer/src/zed1/licenses.rs diff --git a/Cargo.lock b/Cargo.lock index d4f4339d03edeac64b739235768f42751e764df3..c22fe57b478db9e3dfbcc2fdf940a839910c3a55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7837,6 +7837,7 @@ dependencies = [ "convert_case 0.6.0", "gpui", "indexmap 1.9.3", + "indoc", "json_comments", "log", "palette", diff --git a/crates/theme/src/themes/LICENSES b/crates/theme/src/themes/LICENSES new file mode 100644 index 0000000000000000000000000000000000000000..f5d9c04a455398e3e09391b5e4ca89cc1ef7e28b --- /dev/null +++ b/crates/theme/src/themes/LICENSES @@ -0,0 +1,1013 @@ +## [Andromeda](https://github.com/EliverLara/Andromeda) + +The MIT License (MIT) + +Copyright (c) 2017 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Cave Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Cave Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Dune Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Dune Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Estuary Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Estuary Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Forest Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Forest Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Heath Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Heath Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Lakeside Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Lakeside Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Plateau Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Plateau Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Savanna Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Savanna Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Seaside Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Seaside Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Sulphurpool Dark](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Atelier Sulphurpool Light](https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/) + +The MIT License (MIT) + +Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Ayu Dark](https://github.com/dempfi/ayu) + +The MIT License (MIT) + +Copyright (c) 2016 Ike Ku + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Ayu Light](https://github.com/dempfi/ayu) + +The MIT License (MIT) + +Copyright (c) 2016 Ike Ku + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Ayu Mirage](https://github.com/dempfi/ayu) + +The MIT License (MIT) + +Copyright (c) 2016 Ike Ku + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Gruvbox Dark](https://github.com/morhetz/gruvbox) + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Gruvbox Dark Hard](https://github.com/morhetz/gruvbox) + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Gruvbox Dark Soft](https://github.com/morhetz/gruvbox) + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Gruvbox Light](https://github.com/morhetz/gruvbox) + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Gruvbox Light Hard](https://github.com/morhetz/gruvbox) + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Gruvbox Light Soft](https://github.com/morhetz/gruvbox) + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [One Dark](https://github.com/atom/atom/tree/master/packages/one-dark-ui) + +The MIT License (MIT) + +Copyright (c) 2014 GitHub Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [One Light](https://github.com/atom/atom/tree/master/packages/one-light-ui) + +The MIT License (MIT) + +Copyright (c) 2014 GitHub Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Rosé Pine](https://github.com/edunfelt/base16-rose-pine-scheme) + +The MIT License (MIT) + +Copyright (c) 2021 Emilia Dunfelt + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Rosé Pine Dawn](https://github.com/edunfelt/base16-rose-pine-scheme) + +The MIT License (MIT) + +Copyright (c) 2021 Emilia Dunfelt + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Rosé Pine Moon](https://github.com/edunfelt/base16-rose-pine-scheme) + +The MIT License (MIT) + +Copyright (c) 2021 Emilia Dunfelt + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Sandcastle](https://github.com/gessig/base16-sandcastle-scheme) + +The MIT License (MIT) + +Copyright (c) 2019 George Essig + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Solarized Dark](https://github.com/altercation/solarized) + +The MIT License (MIT) + +Copyright (c) 2011 Ethan Schoonover + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Solarized Light](https://github.com/altercation/solarized) + +The MIT License (MIT) + +Copyright (c) 2011 Ethan Schoonover + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** + +## [Summercamp](https://github.com/zoefiri/base16-sc) + +The MIT License (MIT) + +Copyright (c) 2019 Zoe FiriH + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +******************************************************************************** diff --git a/crates/theme/src/themes/atelier.rs b/crates/theme/src/themes/atelier.rs index 2d05a6b65be1daa7353ef6bb4775725d864b5dca..6848676e00734821a4bf44f5b6c6a67cd5bf54ac 100644 --- a/crates/theme/src/themes/atelier.rs +++ b/crates/theme/src/themes/atelier.rs @@ -16,170 +16,170 @@ pub fn atelier() -> UserThemeFamily { author: "Zed Industries".into(), themes: vec![ UserTheme { - name: "Atelier Estuary Light".into(), - appearance: Appearance::Light, + name: "Atelier Cave Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x969585ff).into()), - border_variant: Some(rgba(0xd1d0c6ff).into()), - border_focused: Some(rgba(0xbbddc6ff).into()), - border_selected: Some(rgba(0xbbddc6ff).into()), + border: Some(rgba(0x56505eff).into()), + border_variant: Some(rgba(0x332f38ff).into()), + border_focused: Some(rgba(0x222953ff).into()), + border_selected: Some(rgba(0x222953ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xadac9fff).into()), - elevated_surface_background: Some(rgba(0xebeae3ff).into()), - surface_background: Some(rgba(0xebeae3ff).into()), - background: Some(rgba(0xc5c4b9ff).into()), - panel_background: Some(rgba(0xebeae3ff).into()), - element_background: Some(rgba(0xebeae3ff).into()), - element_hover: Some(rgba(0xd1d0c6ff).into()), - element_active: Some(rgba(0x989788ff).into()), - element_selected: Some(rgba(0x989788ff).into()), - element_disabled: Some(rgba(0xebeae3ff).into()), - drop_target_background: Some(rgba(0x61604f80).into()), + border_disabled: Some(rgba(0x48434fff).into()), + elevated_surface_background: Some(rgba(0x221f26ff).into()), + surface_background: Some(rgba(0x221f26ff).into()), + background: Some(rgba(0x3a353fff).into()), + panel_background: Some(rgba(0x221f26ff).into()), + element_background: Some(rgba(0x221f26ff).into()), + element_hover: Some(rgba(0x332f38ff).into()), + element_active: Some(rgba(0x544f5cff).into()), + element_selected: Some(rgba(0x544f5cff).into()), + element_disabled: Some(rgba(0x221f26ff).into()), + drop_target_background: Some(rgba(0x89859180).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xd1d0c6ff).into()), - ghost_element_active: Some(rgba(0x989788ff).into()), - ghost_element_selected: Some(rgba(0x989788ff).into()), - ghost_element_disabled: Some(rgba(0xebeae3ff).into()), - text: Some(rgba(0x22221bff).into()), - text_muted: Some(rgba(0x61604fff).into()), - text_placeholder: Some(rgba(0x767463ff).into()), - text_disabled: Some(rgba(0x767463ff).into()), - text_accent: Some(rgba(0x38a166ff).into()), - icon: Some(rgba(0x22221bff).into()), - icon_muted: Some(rgba(0x61604fff).into()), - icon_disabled: Some(rgba(0x767463ff).into()), - icon_placeholder: Some(rgba(0x61604fff).into()), - icon_accent: Some(rgba(0x38a166ff).into()), - status_bar_background: Some(rgba(0xc5c4b9ff).into()), - title_bar_background: Some(rgba(0xc5c4b9ff).into()), - toolbar_background: Some(rgba(0xf4f3ecff).into()), - tab_bar_background: Some(rgba(0xebeae3ff).into()), - tab_inactive_background: Some(rgba(0xebeae3ff).into()), - tab_active_background: Some(rgba(0xf4f3ecff).into()), - scrollbar_thumb_background: Some(rgba(0x22221b4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xd1d0c6ff).into()), - scrollbar_thumb_border: Some(rgba(0xd1d0c6ff).into()), + ghost_element_hover: Some(rgba(0x332f38ff).into()), + ghost_element_active: Some(rgba(0x544f5cff).into()), + ghost_element_selected: Some(rgba(0x544f5cff).into()), + ghost_element_disabled: Some(rgba(0x221f26ff).into()), + text: Some(rgba(0xefecf4ff).into()), + text_muted: Some(rgba(0x898591ff).into()), + text_placeholder: Some(rgba(0x756f7eff).into()), + text_disabled: Some(rgba(0x756f7eff).into()), + text_accent: Some(rgba(0x576ddaff).into()), + icon: Some(rgba(0xefecf4ff).into()), + icon_muted: Some(rgba(0x898591ff).into()), + icon_disabled: Some(rgba(0x756f7eff).into()), + icon_placeholder: Some(rgba(0x898591ff).into()), + icon_accent: Some(rgba(0x576ddaff).into()), + status_bar_background: Some(rgba(0x3a353fff).into()), + title_bar_background: Some(rgba(0x3a353fff).into()), + toolbar_background: Some(rgba(0x19171cff).into()), + tab_bar_background: Some(rgba(0x221f26ff).into()), + tab_inactive_background: Some(rgba(0x221f26ff).into()), + tab_active_background: Some(rgba(0x19171cff).into()), + scrollbar_thumb_background: Some(rgba(0xefecf44c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x332f38ff).into()), + scrollbar_thumb_border: Some(rgba(0x332f38ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xedece5ff).into()), - editor_foreground: Some(rgba(0x302f27ff).into()), - editor_background: Some(rgba(0xf4f3ecff).into()), - editor_gutter_background: Some(rgba(0xf4f3ecff).into()), - editor_subheader_background: Some(rgba(0xebeae3ff).into()), - editor_active_line_background: Some(rgba(0xebeae3bf).into()), - editor_highlighted_line_background: Some(rgba(0xebeae3ff).into()), - editor_line_number: Some(rgba(0x22221b59).into()), - editor_active_line_number: Some(rgba(0x22221bff).into()), - editor_invisible: Some(rgba(0x61604fff).into()), - editor_wrap_guide: Some(rgba(0x22221b0d).into()), - editor_active_wrap_guide: Some(rgba(0x22221b1a).into()), - editor_document_highlight_read_background: Some(rgba(0x38a1661a).into()), - editor_document_highlight_write_background: Some(rgba(0x7a786766).into()), - terminal_background: Some(rgba(0xf4f3ecff).into()), - terminal_ansi_bright_black: Some(rgba(0x898775ff).into()), - terminal_ansi_bright_red: Some(rgba(0xe4af96ff).into()), - terminal_ansi_bright_green: Some(rgba(0xc0ca93ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd7ca8dff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa0d1b0ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xcfb4bcff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xaecea1ff).into()), - terminal_ansi_bright_white: Some(rgba(0x22221bff).into()), - terminal_ansi_black: Some(rgba(0xf4f3ecff).into()), - terminal_ansi_red: Some(rgba(0xba6337ff).into()), - terminal_ansi_green: Some(rgba(0x7d9728ff).into()), - terminal_ansi_yellow: Some(rgba(0xa59810ff).into()), - terminal_ansi_blue: Some(rgba(0x38a166ff).into()), - terminal_ansi_magenta: Some(rgba(0x9d6c7cff).into()), - terminal_ansi_cyan: Some(rgba(0x5c9d49ff).into()), - terminal_ansi_white: Some(rgba(0x22221bff).into()), - link_text_hover: Some(rgba(0x38a166ff).into()), + scrollbar_track_border: Some(rgba(0x201e24ff).into()), + editor_foreground: Some(rgba(0xe2dfe7ff).into()), + editor_background: Some(rgba(0x19171cff).into()), + editor_gutter_background: Some(rgba(0x19171cff).into()), + editor_subheader_background: Some(rgba(0x221f26ff).into()), + editor_active_line_background: Some(rgba(0x221f26bf).into()), + editor_highlighted_line_background: Some(rgba(0x221f26ff).into()), + editor_line_number: Some(rgba(0xefecf459).into()), + editor_active_line_number: Some(rgba(0xefecf4ff).into()), + editor_invisible: Some(rgba(0x898591ff).into()), + editor_wrap_guide: Some(rgba(0xefecf40d).into()), + editor_active_wrap_guide: Some(rgba(0xefecf41a).into()), + editor_document_highlight_read_background: Some(rgba(0x576dda1a).into()), + editor_document_highlight_write_background: Some(rgba(0x726c7a66).into()), + terminal_background: Some(rgba(0x19171cff).into()), + terminal_ansi_bright_black: Some(rgba(0x635d6bff).into()), + terminal_ansi_bright_red: Some(rgba(0x5c283cff).into()), + terminal_ansi_bright_green: Some(rgba(0x1f4747ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x2d376fff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x60255bff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x26445eff).into()), + terminal_ansi_bright_white: Some(rgba(0xefecf4ff).into()), + terminal_ansi_black: Some(rgba(0x19171cff).into()), + terminal_ansi_red: Some(rgba(0xbe4678ff).into()), + terminal_ansi_green: Some(rgba(0x2c9292ff).into()), + terminal_ansi_yellow: Some(rgba(0xa06e3bff).into()), + terminal_ansi_blue: Some(rgba(0x576ddaff).into()), + terminal_ansi_magenta: Some(rgba(0xbf41bfff).into()), + terminal_ansi_cyan: Some(rgba(0x3a8bc6ff).into()), + terminal_ansi_white: Some(rgba(0xefecf4ff).into()), + link_text_hover: Some(rgba(0x576ddaff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xa59810ff).into()), - conflict_background: Some(rgba(0xf0e9d1ff).into()), - conflict_border: Some(rgba(0xe3d8adff).into()), - created: Some(rgba(0x7d9728ff).into()), - created_background: Some(rgba(0xe6e9d3ff).into()), - created_border: Some(rgba(0xd2d8b1ff).into()), - deleted: Some(rgba(0xba6337ff).into()), - deleted_background: Some(rgba(0xf6ded4ff).into()), - deleted_border: Some(rgba(0xedc5b3ff).into()), - error: Some(rgba(0xba6337ff).into()), - error_background: Some(rgba(0xf6ded4ff).into()), - error_border: Some(rgba(0xedc5b3ff).into()), - hidden: Some(rgba(0x767463ff).into()), - hidden_background: Some(rgba(0xc5c4b9ff).into()), - hidden_border: Some(rgba(0xadac9fff).into()), - hint: Some(rgba(0x768962ff).into()), - hint_background: Some(rgba(0xd9ecdfff).into()), - hint_border: Some(rgba(0xbbddc6ff).into()), - ignored: Some(rgba(0x61604fff).into()), - ignored_background: Some(rgba(0xc5c4b9ff).into()), - ignored_border: Some(rgba(0x969585ff).into()), - info: Some(rgba(0x38a166ff).into()), - info_background: Some(rgba(0xd9ecdfff).into()), - info_border: Some(rgba(0xbbddc6ff).into()), - modified: Some(rgba(0xa59810ff).into()), - modified_background: Some(rgba(0xf0e9d1ff).into()), - modified_border: Some(rgba(0xe3d8adff).into()), - predictive: Some(rgba(0x879a72ff).into()), - predictive_background: Some(rgba(0xe6e9d3ff).into()), - predictive_border: Some(rgba(0xd2d8b1ff).into()), - renamed: Some(rgba(0x38a166ff).into()), - renamed_background: Some(rgba(0xd9ecdfff).into()), - renamed_border: Some(rgba(0xbbddc6ff).into()), - success: Some(rgba(0x7d9728ff).into()), - success_background: Some(rgba(0xe6e9d3ff).into()), - success_border: Some(rgba(0xd2d8b1ff).into()), - unreachable: Some(rgba(0x61604fff).into()), - unreachable_background: Some(rgba(0xc5c4b9ff).into()), - unreachable_border: Some(rgba(0x969585ff).into()), - warning: Some(rgba(0xa59810ff).into()), - warning_background: Some(rgba(0xf0e9d1ff).into()), - warning_border: Some(rgba(0xe3d8adff).into()), + conflict: Some(rgba(0xa06e3bff).into()), + conflict_background: Some(rgba(0x231a12ff).into()), + conflict_border: Some(rgba(0x392a1aff).into()), + created: Some(rgba(0x2c9292ff).into()), + created_background: Some(rgba(0x132020ff).into()), + created_border: Some(rgba(0x1a3434ff).into()), + deleted: Some(rgba(0xbe4678ff).into()), + deleted_background: Some(rgba(0x28151cff).into()), + deleted_border: Some(rgba(0x421f2dff).into()), + error: Some(rgba(0xbe4678ff).into()), + error_background: Some(rgba(0x28151cff).into()), + error_border: Some(rgba(0x421f2dff).into()), + hidden: Some(rgba(0x756f7eff).into()), + hidden_background: Some(rgba(0x3a353fff).into()), + hidden_border: Some(rgba(0x48434fff).into()), + hint: Some(rgba(0x716998ff).into()), + hint_background: Some(rgba(0x161a36ff).into()), + hint_border: Some(rgba(0x222953ff).into()), + ignored: Some(rgba(0x898591ff).into()), + ignored_background: Some(rgba(0x3a353fff).into()), + ignored_border: Some(rgba(0x56505eff).into()), + info: Some(rgba(0x576ddaff).into()), + info_background: Some(rgba(0x161a36ff).into()), + info_border: Some(rgba(0x222953ff).into()), + modified: Some(rgba(0xa06e3bff).into()), + modified_background: Some(rgba(0x231a12ff).into()), + modified_border: Some(rgba(0x392a1aff).into()), + predictive: Some(rgba(0x625887ff).into()), + predictive_background: Some(rgba(0x132020ff).into()), + predictive_border: Some(rgba(0x1a3434ff).into()), + renamed: Some(rgba(0x576ddaff).into()), + renamed_background: Some(rgba(0x161a36ff).into()), + renamed_border: Some(rgba(0x222953ff).into()), + success: Some(rgba(0x2c9292ff).into()), + success_background: Some(rgba(0x132020ff).into()), + success_border: Some(rgba(0x1a3434ff).into()), + unreachable: Some(rgba(0x898591ff).into()), + unreachable_background: Some(rgba(0x3a353fff).into()), + unreachable_border: Some(rgba(0x56505eff).into()), + warning: Some(rgba(0xa06e3bff).into()), + warning_background: Some(rgba(0x231a12ff).into()), + warning_border: Some(rgba(0x392a1aff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x38a166ff).into(), - background: rgba(0x38a166ff).into(), - selection: rgba(0x38a1663d).into(), + cursor: rgba(0x576ddaff).into(), + background: rgba(0x576ddaff).into(), + selection: rgba(0x576dda3d).into(), }, PlayerColor { - cursor: rgba(0x9d6c7cff).into(), - background: rgba(0x9d6c7cff).into(), - selection: rgba(0x9d6c7c3d).into(), + cursor: rgba(0xbf41bfff).into(), + background: rgba(0xbf41bfff).into(), + selection: rgba(0xbf41bf3d).into(), }, PlayerColor { - cursor: rgba(0xae7315ff).into(), - background: rgba(0xae7315ff).into(), - selection: rgba(0xae73153d).into(), + cursor: rgba(0xaa573cff).into(), + background: rgba(0xaa573cff).into(), + selection: rgba(0xaa573c3d).into(), }, PlayerColor { - cursor: rgba(0x609182ff).into(), - background: rgba(0x609182ff).into(), - selection: rgba(0x6091823d).into(), + cursor: rgba(0x955ae6ff).into(), + background: rgba(0x955ae6ff).into(), + selection: rgba(0x955ae63d).into(), }, PlayerColor { - cursor: rgba(0x5c9d49ff).into(), - background: rgba(0x5c9d49ff).into(), - selection: rgba(0x5c9d493d).into(), + cursor: rgba(0x3a8bc6ff).into(), + background: rgba(0x3a8bc6ff).into(), + selection: rgba(0x3a8bc63d).into(), }, PlayerColor { - cursor: rgba(0xba6337ff).into(), - background: rgba(0xba6337ff).into(), - selection: rgba(0xba63373d).into(), + cursor: rgba(0xbe4678ff).into(), + background: rgba(0xbe4678ff).into(), + selection: rgba(0xbe46783d).into(), }, PlayerColor { - cursor: rgba(0xa59810ff).into(), - background: rgba(0xa59810ff).into(), - selection: rgba(0xa598103d).into(), + cursor: rgba(0xa06e3bff).into(), + background: rgba(0xa06e3bff).into(), + selection: rgba(0xa06e3b3d).into(), }, PlayerColor { - cursor: rgba(0x7d9728ff).into(), - background: rgba(0x7d9728ff).into(), - selection: rgba(0x7d97283d).into(), + cursor: rgba(0x2c9292ff).into(), + background: rgba(0x2c9292ff).into(), + selection: rgba(0x2c92923d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -187,63 +187,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x38a166ff).into()), + color: Some(rgba(0x576ddaff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x7d9728ff).into()), + color: Some(rgba(0x2c9292ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x878573ff).into()), + color: Some(rgba(0x655f6dff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x5f5e4eff).into()), + color: Some(rgba(0x8b8792ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x7d9728ff).into()), + color: Some(rgba(0x2c9292ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x38a166ff).into()), + color: Some(rgba(0x576ddaff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x22221bff).into()), + color: Some(rgba(0xefecf4ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x38a166ff).into()), + color: Some(rgba(0x576ddaff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x38a166ff).into()), + color: Some(rgba(0x576ddaff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -251,35 +251,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xae7315ff).into()), + color: Some(rgba(0xaa573cff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x36a166ff).into()), + color: Some(rgba(0x576ddbff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x36a166ff).into()), + color: Some(rgba(0x576ddbff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xa5980dff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x768962ff).into()), + color: Some(rgba(0x716998ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -287,21 +287,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x5f9182ff).into()), + color: Some(rgba(0x955ae7ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x38a166ff).into()), + color: Some(rgba(0x576ddaff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xae7315ff).into()), + color: Some(rgba(0xaa573cff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -309,28 +309,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x7d9728ff).into()), + color: Some(rgba(0x2c9292ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xae7313ff).into()), + color: Some(rgba(0xaa573cff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x5f5e4eff).into()), + color: Some(rgba(0x8b8792ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x879a72ff).into()), + color: Some(rgba(0x625887ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -338,112 +338,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x22221bff).into()), + color: Some(rgba(0xefecf4ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x302f27ff).into()), + color: Some(rgba(0xe2dfe7ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xba6236ff).into()), + color: Some(rgba(0xbe4678ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x302f27ff).into()), + color: Some(rgba(0xe2dfe7ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x5f5e4eff).into()), + color: Some(rgba(0x8b8792ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x5f5e4eff).into()), + color: Some(rgba(0x8b8792ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x302f27ff).into()), + color: Some(rgba(0xe2dfe7ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x9d6c7cff).into()), + color: Some(rgba(0xbf40bfff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x7d9726ff).into()), + color: Some(rgba(0x2a9292ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x5f5e4eff).into()), + color: Some(rgba(0x8b8792ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x5b9d48ff).into()), + color: Some(rgba(0x398bc6ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x9d6c7cff).into()), + color: Some(rgba(0xbf40bfff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x7d9726ff).into()), + color: Some(rgba(0x2a9292ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x38a166ff).into()), + color: Some(rgba(0x576ddaff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xae7315ff).into()), + color: Some(rgba(0xaa573cff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x22221bff).into()), + color: Some(rgba(0xefecf4ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -451,28 +451,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xa5980dff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x302f27ff).into()), + color: Some(rgba(0xe2dfe7ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x5f9182ff).into()), + color: Some(rgba(0x955ae7ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xa5980dff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), @@ -481,170 +481,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Forest Dark".into(), - appearance: Appearance::Dark, + name: "Atelier Cave Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x665f5cff).into()), - border_variant: Some(rgba(0x3b3431ff).into()), - border_focused: Some(rgba(0x192e5bff).into()), - border_selected: Some(rgba(0x192e5bff).into()), + border: Some(rgba(0x8f8b96ff).into()), + border_variant: Some(rgba(0xcbc8d1ff).into()), + border_focused: Some(rgba(0xc9c8f3ff).into()), + border_selected: Some(rgba(0xc9c8f3ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x554e4bff).into()), - elevated_surface_background: Some(rgba(0x27211eff).into()), - surface_background: Some(rgba(0x27211eff).into()), - background: Some(rgba(0x443c39ff).into()), - panel_background: Some(rgba(0x27211eff).into()), - element_background: Some(rgba(0x27211eff).into()), - element_hover: Some(rgba(0x3b3431ff).into()), - element_active: Some(rgba(0x645d5aff).into()), - element_selected: Some(rgba(0x645d5aff).into()), - element_disabled: Some(rgba(0x27211eff).into()), - drop_target_background: Some(rgba(0xa79f9d80).into()), + border_disabled: Some(rgba(0xa7a3adff).into()), + elevated_surface_background: Some(rgba(0xe6e3ebff).into()), + surface_background: Some(rgba(0xe6e3ebff).into()), + background: Some(rgba(0xbfbcc5ff).into()), + panel_background: Some(rgba(0xe6e3ebff).into()), + element_background: Some(rgba(0xe6e3ebff).into()), + element_hover: Some(rgba(0xcbc8d1ff).into()), + element_active: Some(rgba(0x918d98ff).into()), + element_selected: Some(rgba(0x918d98ff).into()), + element_disabled: Some(rgba(0xe6e3ebff).into()), + drop_target_background: Some(rgba(0x5a546280).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x3b3431ff).into()), - ghost_element_active: Some(rgba(0x645d5aff).into()), - ghost_element_selected: Some(rgba(0x645d5aff).into()), - ghost_element_disabled: Some(rgba(0x27211eff).into()), - text: Some(rgba(0xf1efeeff).into()), - text_muted: Some(rgba(0xa79f9dff).into()), - text_placeholder: Some(rgba(0x8e8683ff).into()), - text_disabled: Some(rgba(0x8e8683ff).into()), - text_accent: Some(rgba(0x417ee6ff).into()), - icon: Some(rgba(0xf1efeeff).into()), - icon_muted: Some(rgba(0xa79f9dff).into()), - icon_disabled: Some(rgba(0x8e8683ff).into()), - icon_placeholder: Some(rgba(0xa79f9dff).into()), - icon_accent: Some(rgba(0x417ee6ff).into()), - status_bar_background: Some(rgba(0x443c39ff).into()), - title_bar_background: Some(rgba(0x443c39ff).into()), - toolbar_background: Some(rgba(0x1b1918ff).into()), - tab_bar_background: Some(rgba(0x27211eff).into()), - tab_inactive_background: Some(rgba(0x27211eff).into()), - tab_active_background: Some(rgba(0x1b1918ff).into()), - scrollbar_thumb_background: Some(rgba(0xf1efee4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x3b3431ff).into()), - scrollbar_thumb_border: Some(rgba(0x3b3431ff).into()), + ghost_element_hover: Some(rgba(0xcbc8d1ff).into()), + ghost_element_active: Some(rgba(0x918d98ff).into()), + ghost_element_selected: Some(rgba(0x918d98ff).into()), + ghost_element_disabled: Some(rgba(0xe6e3ebff).into()), + text: Some(rgba(0x19171cff).into()), + text_muted: Some(rgba(0x5a5462ff).into()), + text_placeholder: Some(rgba(0x6e6876ff).into()), + text_disabled: Some(rgba(0x6e6876ff).into()), + text_accent: Some(rgba(0x586ddaff).into()), + icon: Some(rgba(0x19171cff).into()), + icon_muted: Some(rgba(0x5a5462ff).into()), + icon_disabled: Some(rgba(0x6e6876ff).into()), + icon_placeholder: Some(rgba(0x5a5462ff).into()), + icon_accent: Some(rgba(0x586ddaff).into()), + status_bar_background: Some(rgba(0xbfbcc5ff).into()), + title_bar_background: Some(rgba(0xbfbcc5ff).into()), + toolbar_background: Some(rgba(0xefecf4ff).into()), + tab_bar_background: Some(rgba(0xe6e3ebff).into()), + tab_inactive_background: Some(rgba(0xe6e3ebff).into()), + tab_active_background: Some(rgba(0xefecf4ff).into()), + scrollbar_thumb_background: Some(rgba(0x19171c4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xcbc8d1ff).into()), + scrollbar_thumb_border: Some(rgba(0xcbc8d1ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x251f1dff).into()), - editor_foreground: Some(rgba(0xe6e2e0ff).into()), - editor_background: Some(rgba(0x1b1918ff).into()), - editor_gutter_background: Some(rgba(0x1b1918ff).into()), - editor_subheader_background: Some(rgba(0x27211eff).into()), - editor_active_line_background: Some(rgba(0x27211ebf).into()), - editor_highlighted_line_background: Some(rgba(0x27211eff).into()), - editor_line_number: Some(rgba(0xf1efee59).into()), - editor_active_line_number: Some(rgba(0xf1efeeff).into()), - editor_invisible: Some(rgba(0xa79f9dff).into()), - editor_wrap_guide: Some(rgba(0xf1efee0d).into()), - editor_active_wrap_guide: Some(rgba(0xf1efee1a).into()), - editor_document_highlight_read_background: Some(rgba(0x417ee61a).into()), - editor_document_highlight_write_background: Some(rgba(0x89817e66).into()), - terminal_background: Some(rgba(0x1b1918ff).into()), - terminal_ansi_bright_black: Some(rgba(0x746c69ff).into()), - terminal_ansi_bright_red: Some(rgba(0x8c1223ff).into()), - terminal_ansi_bright_green: Some(rgba(0x3e491aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x674115ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x213f78ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x662186ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x264958ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf1efeeff).into()), - terminal_ansi_black: Some(rgba(0x1b1918ff).into()), - terminal_ansi_red: Some(rgba(0xf22d40ff).into()), - terminal_ansi_green: Some(rgba(0x7b9727ff).into()), - terminal_ansi_yellow: Some(rgba(0xc38419ff).into()), - terminal_ansi_blue: Some(rgba(0x417ee6ff).into()), - terminal_ansi_magenta: Some(rgba(0xc340f2ff).into()), - terminal_ansi_cyan: Some(rgba(0x3e97b8ff).into()), - terminal_ansi_white: Some(rgba(0xf1efeeff).into()), - link_text_hover: Some(rgba(0x417ee6ff).into()), + scrollbar_track_border: Some(rgba(0xe8e5edff).into()), + editor_foreground: Some(rgba(0x26232aff).into()), + editor_background: Some(rgba(0xefecf4ff).into()), + editor_gutter_background: Some(rgba(0xefecf4ff).into()), + editor_subheader_background: Some(rgba(0xe6e3ebff).into()), + editor_active_line_background: Some(rgba(0xe6e3ebbf).into()), + editor_highlighted_line_background: Some(rgba(0xe6e3ebff).into()), + editor_line_number: Some(rgba(0x19171c59).into()), + editor_active_line_number: Some(rgba(0x19171cff).into()), + editor_invisible: Some(rgba(0x5a5462ff).into()), + editor_wrap_guide: Some(rgba(0x19171c0d).into()), + editor_active_wrap_guide: Some(rgba(0x19171c1a).into()), + editor_document_highlight_read_background: Some(rgba(0x586dda1a).into()), + editor_document_highlight_write_background: Some(rgba(0x726c7a66).into()), + terminal_background: Some(rgba(0xefecf4ff).into()), + terminal_ansi_bright_black: Some(rgba(0x807b89ff).into()), + terminal_ansi_bright_red: Some(rgba(0xe3a4b9ff).into()), + terminal_ansi_bright_green: Some(rgba(0x9dc8c8ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb3b3eeff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe3a4dfff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa6c4e3ff).into()), + terminal_ansi_bright_white: Some(rgba(0x19171cff).into()), + terminal_ansi_black: Some(rgba(0xefecf4ff).into()), + terminal_ansi_red: Some(rgba(0xbe4778ff).into()), + terminal_ansi_green: Some(rgba(0x2c9292ff).into()), + terminal_ansi_yellow: Some(rgba(0xa06e3cff).into()), + terminal_ansi_blue: Some(rgba(0x586ddaff).into()), + terminal_ansi_magenta: Some(rgba(0xbf41bfff).into()), + terminal_ansi_cyan: Some(rgba(0x3b8bc6ff).into()), + terminal_ansi_white: Some(rgba(0x19171cff).into()), + link_text_hover: Some(rgba(0x586ddaff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xc38419ff).into()), - conflict_background: Some(rgba(0x371d0dff).into()), - conflict_border: Some(rgba(0x4f2f12ff).into()), - created: Some(rgba(0x7b9727ff).into()), - created_background: Some(rgba(0x1d2110ff).into()), - created_border: Some(rgba(0x2e3516ff).into()), - deleted: Some(rgba(0xf22d40ff).into()), - deleted_background: Some(rgba(0x550512ff).into()), - deleted_border: Some(rgba(0x710c1bff).into()), - error: Some(rgba(0xf22d40ff).into()), - error_background: Some(rgba(0x550512ff).into()), - error_border: Some(rgba(0x710c1bff).into()), - hidden: Some(rgba(0x8e8683ff).into()), - hidden_background: Some(rgba(0x443c39ff).into()), - hidden_border: Some(rgba(0x554e4bff).into()), - hint: Some(rgba(0xa87187ff).into()), - hint_background: Some(rgba(0x0f1d3dff).into()), - hint_border: Some(rgba(0x192e5bff).into()), - ignored: Some(rgba(0xa79f9dff).into()), - ignored_background: Some(rgba(0x443c39ff).into()), - ignored_border: Some(rgba(0x665f5cff).into()), - info: Some(rgba(0x417ee6ff).into()), - info_background: Some(rgba(0x0f1d3dff).into()), - info_border: Some(rgba(0x192e5bff).into()), - modified: Some(rgba(0xc38419ff).into()), - modified_background: Some(rgba(0x371d0dff).into()), - modified_border: Some(rgba(0x4f2f12ff).into()), - predictive: Some(rgba(0x8f5b71ff).into()), - predictive_background: Some(rgba(0x1d2110ff).into()), - predictive_border: Some(rgba(0x2e3516ff).into()), - renamed: Some(rgba(0x417ee6ff).into()), - renamed_background: Some(rgba(0x0f1d3dff).into()), - renamed_border: Some(rgba(0x192e5bff).into()), - success: Some(rgba(0x7b9727ff).into()), - success_background: Some(rgba(0x1d2110ff).into()), - success_border: Some(rgba(0x2e3516ff).into()), - unreachable: Some(rgba(0xa79f9dff).into()), - unreachable_background: Some(rgba(0x443c39ff).into()), - unreachable_border: Some(rgba(0x665f5cff).into()), - warning: Some(rgba(0xc38419ff).into()), - warning_background: Some(rgba(0x371d0dff).into()), - warning_border: Some(rgba(0x4f2f12ff).into()), + conflict: Some(rgba(0xa06e3cff).into()), + conflict_background: Some(rgba(0xeee0d5ff).into()), + conflict_border: Some(rgba(0xe0c9b5ff).into()), + created: Some(rgba(0x2c9292ff).into()), + created_background: Some(rgba(0xd7e9e8ff).into()), + created_border: Some(rgba(0xb9d7d6ff).into()), + deleted: Some(rgba(0xbe4778ff).into()), + deleted_background: Some(rgba(0xf5dae2ff).into()), + deleted_border: Some(rgba(0xecbecdff).into()), + error: Some(rgba(0xbe4778ff).into()), + error_background: Some(rgba(0xf5dae2ff).into()), + error_border: Some(rgba(0xecbecdff).into()), + hidden: Some(rgba(0x6e6876ff).into()), + hidden_background: Some(rgba(0xbfbcc5ff).into()), + hidden_border: Some(rgba(0xa7a3adff).into()), + hint: Some(rgba(0x786e9dff).into()), + hint_background: Some(rgba(0xe1e0f9ff).into()), + hint_border: Some(rgba(0xc9c8f3ff).into()), + ignored: Some(rgba(0x5a5462ff).into()), + ignored_background: Some(rgba(0xbfbcc5ff).into()), + ignored_border: Some(rgba(0x8f8b96ff).into()), + info: Some(rgba(0x586ddaff).into()), + info_background: Some(rgba(0xe1e0f9ff).into()), + info_border: Some(rgba(0xc9c8f3ff).into()), + modified: Some(rgba(0xa06e3cff).into()), + modified_background: Some(rgba(0xeee0d5ff).into()), + modified_border: Some(rgba(0xe0c9b5ff).into()), + predictive: Some(rgba(0x887fafff).into()), + predictive_background: Some(rgba(0xd7e9e8ff).into()), + predictive_border: Some(rgba(0xb9d7d6ff).into()), + renamed: Some(rgba(0x586ddaff).into()), + renamed_background: Some(rgba(0xe1e0f9ff).into()), + renamed_border: Some(rgba(0xc9c8f3ff).into()), + success: Some(rgba(0x2c9292ff).into()), + success_background: Some(rgba(0xd7e9e8ff).into()), + success_border: Some(rgba(0xb9d7d6ff).into()), + unreachable: Some(rgba(0x5a5462ff).into()), + unreachable_background: Some(rgba(0xbfbcc5ff).into()), + unreachable_border: Some(rgba(0x8f8b96ff).into()), + warning: Some(rgba(0xa06e3cff).into()), + warning_background: Some(rgba(0xeee0d5ff).into()), + warning_border: Some(rgba(0xe0c9b5ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x417ee6ff).into(), - background: rgba(0x417ee6ff).into(), - selection: rgba(0x417ee63d).into(), + cursor: rgba(0x586ddaff).into(), + background: rgba(0x586ddaff).into(), + selection: rgba(0x586dda3d).into(), }, PlayerColor { - cursor: rgba(0xc340f2ff).into(), - background: rgba(0xc340f2ff).into(), - selection: rgba(0xc340f23d).into(), + cursor: rgba(0xbf41bfff).into(), + background: rgba(0xbf41bfff).into(), + selection: rgba(0xbf41bf3d).into(), }, PlayerColor { - cursor: rgba(0xdf5321ff).into(), - background: rgba(0xdf5321ff).into(), - selection: rgba(0xdf53213d).into(), + cursor: rgba(0xaa583dff).into(), + background: rgba(0xaa583dff).into(), + selection: rgba(0xaa583d3d).into(), }, PlayerColor { - cursor: rgba(0x6666e9ff).into(), - background: rgba(0x6666e9ff).into(), - selection: rgba(0x6666e93d).into(), + cursor: rgba(0x955be6ff).into(), + background: rgba(0x955be6ff).into(), + selection: rgba(0x955be63d).into(), }, PlayerColor { - cursor: rgba(0x3e97b8ff).into(), - background: rgba(0x3e97b8ff).into(), - selection: rgba(0x3e97b83d).into(), + cursor: rgba(0x3b8bc6ff).into(), + background: rgba(0x3b8bc6ff).into(), + selection: rgba(0x3b8bc63d).into(), }, PlayerColor { - cursor: rgba(0xf22d40ff).into(), - background: rgba(0xf22d40ff).into(), - selection: rgba(0xf22d403d).into(), + cursor: rgba(0xbe4778ff).into(), + background: rgba(0xbe4778ff).into(), + selection: rgba(0xbe47783d).into(), }, PlayerColor { - cursor: rgba(0xc38419ff).into(), - background: rgba(0xc38419ff).into(), - selection: rgba(0xc384193d).into(), + cursor: rgba(0xa06e3cff).into(), + background: rgba(0xa06e3cff).into(), + selection: rgba(0xa06e3c3d).into(), }, PlayerColor { - cursor: rgba(0x7b9727ff).into(), - background: rgba(0x7b9727ff).into(), - selection: rgba(0x7b97273d).into(), + cursor: rgba(0x2c9292ff).into(), + background: rgba(0x2c9292ff).into(), + selection: rgba(0x2c92923d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -652,63 +652,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x586ddaff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x7b9727ff).into()), + color: Some(rgba(0x2c9292ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x766e6bff).into()), + color: Some(rgba(0x7e7887ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0xa8a19fff).into()), + color: Some(rgba(0x585260ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x7b9727ff).into()), + color: Some(rgba(0x2c9292ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x586ddaff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xf1efeeff).into()), + color: Some(rgba(0x19171cff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x586ddaff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x586ddaff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -716,35 +716,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xdf5321ff).into()), + color: Some(rgba(0xaa583dff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x407ee7ff).into()), + color: Some(rgba(0x576ddbff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x407ee7ff).into()), + color: Some(rgba(0x576ddbff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xc38418ff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0xa87187ff).into()), + color: Some(rgba(0x786e9dff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -752,21 +752,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x6666eaff).into()), + color: Some(rgba(0x955ae7ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x586ddaff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xdf5321ff).into()), + color: Some(rgba(0xaa583dff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -774,28 +774,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x7b9727ff).into()), + color: Some(rgba(0x2c9292ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xdf5320ff).into()), + color: Some(rgba(0xaa573cff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0xa8a19fff).into()), + color: Some(rgba(0x585260ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x8f5b71ff).into()), + color: Some(rgba(0x887fafff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -803,112 +803,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xf1efeeff).into()), + color: Some(rgba(0x19171cff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xe6e2e0ff).into()), + color: Some(rgba(0x26232aff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xf22c40ff).into()), + color: Some(rgba(0xbe4678ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xe6e2e0ff).into()), + color: Some(rgba(0x26232aff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xa8a19fff).into()), + color: Some(rgba(0x585260ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xa8a19fff).into()), + color: Some(rgba(0x585260ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xe6e2e0ff).into()), + color: Some(rgba(0x26232aff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xc33ff3ff).into()), + color: Some(rgba(0xbf40bfff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x7b9726ff).into()), + color: Some(rgba(0x2a9292ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0xa8a19fff).into()), + color: Some(rgba(0x585260ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x3d97b8ff).into()), + color: Some(rgba(0x398bc6ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xc33ff3ff).into()), + color: Some(rgba(0xbf40bfff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x7b9726ff).into()), + color: Some(rgba(0x2a9292ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x586ddaff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xdf5321ff).into()), + color: Some(rgba(0xaa583dff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xf1efeeff).into()), + color: Some(rgba(0x19171cff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -916,28 +916,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xc38418ff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xe6e2e0ff).into()), + color: Some(rgba(0x26232aff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x6666eaff).into()), + color: Some(rgba(0x955ae7ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xc38418ff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), @@ -946,170 +946,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Savanna Light".into(), - appearance: Appearance::Light, + name: "Atelier Dune Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x8b968eff).into()), - border_variant: Some(rgba(0xc8d1cbff).into()), - border_focused: Some(rgba(0xbed4d6ff).into()), - border_selected: Some(rgba(0xbed4d6ff).into()), + border: Some(rgba(0x6c695cff).into()), + border_variant: Some(rgba(0x3b3933ff).into()), + border_focused: Some(rgba(0x263056ff).into()), + border_selected: Some(rgba(0x263056ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xa3ada6ff).into()), - elevated_surface_background: Some(rgba(0xe3ebe6ff).into()), - surface_background: Some(rgba(0xe3ebe6ff).into()), - background: Some(rgba(0xbcc5bfff).into()), - panel_background: Some(rgba(0xe3ebe6ff).into()), - element_background: Some(rgba(0xe3ebe6ff).into()), - element_hover: Some(rgba(0xc8d1cbff).into()), - element_active: Some(rgba(0x8d9890ff).into()), - element_selected: Some(rgba(0x8d9890ff).into()), - element_disabled: Some(rgba(0xe3ebe6ff).into()), - drop_target_background: Some(rgba(0x54625980).into()), + border_disabled: Some(rgba(0x58564bff).into()), + elevated_surface_background: Some(rgba(0x262622ff).into()), + surface_background: Some(rgba(0x262622ff).into()), + background: Some(rgba(0x45433bff).into()), + panel_background: Some(rgba(0x262622ff).into()), + element_background: Some(rgba(0x262622ff).into()), + element_hover: Some(rgba(0x3b3933ff).into()), + element_active: Some(rgba(0x6a675aff).into()), + element_selected: Some(rgba(0x6a675aff).into()), + element_disabled: Some(rgba(0x262622ff).into()), + drop_target_background: Some(rgba(0xa4a08b80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xc8d1cbff).into()), - ghost_element_active: Some(rgba(0x8d9890ff).into()), - ghost_element_selected: Some(rgba(0x8d9890ff).into()), - ghost_element_disabled: Some(rgba(0xe3ebe6ff).into()), - text: Some(rgba(0x171c19ff).into()), - text_muted: Some(rgba(0x546259ff).into()), - text_placeholder: Some(rgba(0x68766dff).into()), - text_disabled: Some(rgba(0x68766dff).into()), - text_accent: Some(rgba(0x488c90ff).into()), - icon: Some(rgba(0x171c19ff).into()), - icon_muted: Some(rgba(0x546259ff).into()), - icon_disabled: Some(rgba(0x68766dff).into()), - icon_placeholder: Some(rgba(0x546259ff).into()), - icon_accent: Some(rgba(0x488c90ff).into()), - status_bar_background: Some(rgba(0xbcc5bfff).into()), - title_bar_background: Some(rgba(0xbcc5bfff).into()), - toolbar_background: Some(rgba(0xecf4eeff).into()), - tab_bar_background: Some(rgba(0xe3ebe6ff).into()), - tab_inactive_background: Some(rgba(0xe3ebe6ff).into()), - tab_active_background: Some(rgba(0xecf4eeff).into()), - scrollbar_thumb_background: Some(rgba(0x171c194c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xc8d1cbff).into()), - scrollbar_thumb_border: Some(rgba(0xc8d1cbff).into()), + ghost_element_hover: Some(rgba(0x3b3933ff).into()), + ghost_element_active: Some(rgba(0x6a675aff).into()), + ghost_element_selected: Some(rgba(0x6a675aff).into()), + ghost_element_disabled: Some(rgba(0x262622ff).into()), + text: Some(rgba(0xfefbecff).into()), + text_muted: Some(rgba(0xa4a08bff).into()), + text_placeholder: Some(rgba(0x8f8b77ff).into()), + text_disabled: Some(rgba(0x8f8b77ff).into()), + text_accent: Some(rgba(0x6684e0ff).into()), + icon: Some(rgba(0xfefbecff).into()), + icon_muted: Some(rgba(0xa4a08bff).into()), + icon_disabled: Some(rgba(0x8f8b77ff).into()), + icon_placeholder: Some(rgba(0xa4a08bff).into()), + icon_accent: Some(rgba(0x6684e0ff).into()), + status_bar_background: Some(rgba(0x45433bff).into()), + title_bar_background: Some(rgba(0x45433bff).into()), + toolbar_background: Some(rgba(0x20201dff).into()), + tab_bar_background: Some(rgba(0x262622ff).into()), + tab_inactive_background: Some(rgba(0x262622ff).into()), + tab_active_background: Some(rgba(0x20201dff).into()), + scrollbar_thumb_background: Some(rgba(0xfefbec4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x3b3933ff).into()), + scrollbar_thumb_border: Some(rgba(0x3b3933ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xe5ede7ff).into()), - editor_foreground: Some(rgba(0x232a25ff).into()), - editor_background: Some(rgba(0xecf4eeff).into()), - editor_gutter_background: Some(rgba(0xecf4eeff).into()), - editor_subheader_background: Some(rgba(0xe3ebe6ff).into()), - editor_active_line_background: Some(rgba(0xe3ebe6bf).into()), - editor_highlighted_line_background: Some(rgba(0xe3ebe6ff).into()), - editor_line_number: Some(rgba(0x171c1959).into()), - editor_active_line_number: Some(rgba(0x171c19ff).into()), - editor_invisible: Some(rgba(0x546259ff).into()), - editor_wrap_guide: Some(rgba(0x171c190d).into()), - editor_active_wrap_guide: Some(rgba(0x171c191a).into()), - editor_document_highlight_read_background: Some(rgba(0x488c901a).into()), - editor_document_highlight_write_background: Some(rgba(0x6c7a7166).into()), - terminal_background: Some(rgba(0xecf4eeff).into()), - terminal_ansi_bright_black: Some(rgba(0x7b897fff).into()), - terminal_ansi_bright_red: Some(rgba(0xdeae97ff).into()), - terminal_ansi_bright_green: Some(rgba(0xa5ccafff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd3bd9aff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa5c5c6ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xc2b7b1ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9dcdcfff).into()), - terminal_ansi_bright_white: Some(rgba(0x171c19ff).into()), - terminal_ansi_black: Some(rgba(0xecf4eeff).into()), - terminal_ansi_red: Some(rgba(0xb1623aff).into()), - terminal_ansi_green: Some(rgba(0x499963ff).into()), - terminal_ansi_yellow: Some(rgba(0xa07e3cff).into()), - terminal_ansi_blue: Some(rgba(0x488c90ff).into()), - terminal_ansi_magenta: Some(rgba(0x867469ff).into()), - terminal_ansi_cyan: Some(rgba(0x1f9aa0ff).into()), - terminal_ansi_white: Some(rgba(0x171c19ff).into()), - link_text_hover: Some(rgba(0x488c90ff).into()), - ..Default::default() - }, - status: StatusColorsRefinement { - conflict: Some(rgba(0xa07e3cff).into()), - conflict_background: Some(rgba(0xeee4d5ff).into()), - conflict_border: Some(rgba(0xdfcfb6ff).into()), - created: Some(rgba(0x499963ff).into()), - created_background: Some(rgba(0xdaeadeff).into()), - created_border: Some(rgba(0xbedac5ff).into()), - deleted: Some(rgba(0xb1623aff).into()), - deleted_background: Some(rgba(0xf3ded4ff).into()), - deleted_border: Some(rgba(0xe8c5b4ff).into()), - error: Some(rgba(0xb1623aff).into()), - error_background: Some(rgba(0xf3ded4ff).into()), - error_border: Some(rgba(0xe8c5b4ff).into()), - hidden: Some(rgba(0x68766dff).into()), - hidden_background: Some(rgba(0xbcc5bfff).into()), - hidden_border: Some(rgba(0xa3ada6ff).into()), - hint: Some(rgba(0x66847cff).into()), - hint_background: Some(rgba(0xdae7e8ff).into()), - hint_border: Some(rgba(0xbed4d6ff).into()), - ignored: Some(rgba(0x546259ff).into()), - ignored_background: Some(rgba(0xbcc5bfff).into()), - ignored_border: Some(rgba(0x8b968eff).into()), - info: Some(rgba(0x488c90ff).into()), - info_background: Some(rgba(0xdae7e8ff).into()), - info_border: Some(rgba(0xbed4d6ff).into()), - modified: Some(rgba(0xa07e3cff).into()), - modified_background: Some(rgba(0xeee4d5ff).into()), - modified_border: Some(rgba(0xdfcfb6ff).into()), - predictive: Some(rgba(0x76958cff).into()), - predictive_background: Some(rgba(0xdaeadeff).into()), - predictive_border: Some(rgba(0xbedac5ff).into()), - renamed: Some(rgba(0x488c90ff).into()), - renamed_background: Some(rgba(0xdae7e8ff).into()), - renamed_border: Some(rgba(0xbed4d6ff).into()), - success: Some(rgba(0x499963ff).into()), - success_background: Some(rgba(0xdaeadeff).into()), - success_border: Some(rgba(0xbedac5ff).into()), - unreachable: Some(rgba(0x546259ff).into()), - unreachable_background: Some(rgba(0xbcc5bfff).into()), - unreachable_border: Some(rgba(0x8b968eff).into()), - warning: Some(rgba(0xa07e3cff).into()), - warning_background: Some(rgba(0xeee4d5ff).into()), - warning_border: Some(rgba(0xdfcfb6ff).into()), + scrollbar_track_border: Some(rgba(0x252521ff).into()), + editor_foreground: Some(rgba(0xe8e4cfff).into()), + editor_background: Some(rgba(0x20201dff).into()), + editor_gutter_background: Some(rgba(0x20201dff).into()), + editor_subheader_background: Some(rgba(0x262622ff).into()), + editor_active_line_background: Some(rgba(0x262622bf).into()), + editor_highlighted_line_background: Some(rgba(0x262622ff).into()), + editor_line_number: Some(rgba(0xfefbec59).into()), + editor_active_line_number: Some(rgba(0xfefbecff).into()), + editor_invisible: Some(rgba(0xa4a08bff).into()), + editor_wrap_guide: Some(rgba(0xfefbec0d).into()), + editor_active_wrap_guide: Some(rgba(0xfefbec1a).into()), + editor_document_highlight_read_background: Some(rgba(0x6684e01a).into()), + editor_document_highlight_write_background: Some(rgba(0x8b887466).into()), + terminal_background: Some(rgba(0x20201dff).into()), + terminal_ansi_bright_black: Some(rgba(0x7a7766ff).into()), + terminal_ansi_bright_red: Some(rgba(0x781c1fff).into()), + terminal_ansi_bright_green: Some(rgba(0x335322ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x574815ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x334173ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x721d2bff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1e5341ff).into()), + terminal_ansi_bright_white: Some(rgba(0xfefbecff).into()), + terminal_ansi_black: Some(rgba(0x20201dff).into()), + terminal_ansi_red: Some(rgba(0xd73837ff).into()), + terminal_ansi_green: Some(rgba(0x60ac3aff).into()), + terminal_ansi_yellow: Some(rgba(0xae9515ff).into()), + terminal_ansi_blue: Some(rgba(0x6684e0ff).into()), + terminal_ansi_magenta: Some(rgba(0xd43652ff).into()), + terminal_ansi_cyan: Some(rgba(0x21ad83ff).into()), + terminal_ansi_white: Some(rgba(0xfefbecff).into()), + link_text_hover: Some(rgba(0x6684e0ff).into()), + ..Default::default() + }, + status: StatusColorsRefinement { + conflict: Some(rgba(0xae9515ff).into()), + conflict_background: Some(rgba(0x2a200eff).into()), + conflict_border: Some(rgba(0x413513ff).into()), + created: Some(rgba(0x60ac3aff).into()), + created_background: Some(rgba(0x1a2413ff).into()), + created_border: Some(rgba(0x273c1bff).into()), + deleted: Some(rgba(0xd73837ff).into()), + deleted_background: Some(rgba(0x450d11ff).into()), + deleted_border: Some(rgba(0x5f1519ff).into()), + error: Some(rgba(0xd73837ff).into()), + error_background: Some(rgba(0x450d11ff).into()), + error_border: Some(rgba(0x5f1519ff).into()), + hidden: Some(rgba(0x8f8b77ff).into()), + hidden_background: Some(rgba(0x45433bff).into()), + hidden_border: Some(rgba(0x58564bff).into()), + hint: Some(rgba(0xb17272ff).into()), + hint_background: Some(rgba(0x171e39ff).into()), + hint_border: Some(rgba(0x263056ff).into()), + ignored: Some(rgba(0xa4a08bff).into()), + ignored_background: Some(rgba(0x45433bff).into()), + ignored_border: Some(rgba(0x6c695cff).into()), + info: Some(rgba(0x6684e0ff).into()), + info_background: Some(rgba(0x171e39ff).into()), + info_border: Some(rgba(0x263056ff).into()), + modified: Some(rgba(0xae9515ff).into()), + modified_background: Some(rgba(0x2a200eff).into()), + modified_border: Some(rgba(0x413513ff).into()), + predictive: Some(rgba(0x9c6262ff).into()), + predictive_background: Some(rgba(0x1a2413ff).into()), + predictive_border: Some(rgba(0x273c1bff).into()), + renamed: Some(rgba(0x6684e0ff).into()), + renamed_background: Some(rgba(0x171e39ff).into()), + renamed_border: Some(rgba(0x263056ff).into()), + success: Some(rgba(0x60ac3aff).into()), + success_background: Some(rgba(0x1a2413ff).into()), + success_border: Some(rgba(0x273c1bff).into()), + unreachable: Some(rgba(0xa4a08bff).into()), + unreachable_background: Some(rgba(0x45433bff).into()), + unreachable_border: Some(rgba(0x6c695cff).into()), + warning: Some(rgba(0xae9515ff).into()), + warning_background: Some(rgba(0x2a200eff).into()), + warning_border: Some(rgba(0x413513ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x488c90ff).into(), - background: rgba(0x488c90ff).into(), - selection: rgba(0x488c903d).into(), + cursor: rgba(0x6684e0ff).into(), + background: rgba(0x6684e0ff).into(), + selection: rgba(0x6684e03d).into(), }, PlayerColor { - cursor: rgba(0x867469ff).into(), - background: rgba(0x867469ff).into(), - selection: rgba(0x8674693d).into(), + cursor: rgba(0xd43652ff).into(), + background: rgba(0xd43652ff).into(), + selection: rgba(0xd436523d).into(), }, PlayerColor { - cursor: rgba(0x9f713dff).into(), - background: rgba(0x9f713dff).into(), - selection: rgba(0x9f713d3d).into(), + cursor: rgba(0xb65612ff).into(), + background: rgba(0xb65612ff).into(), + selection: rgba(0xb656123d).into(), }, PlayerColor { - cursor: rgba(0x56859bff).into(), - background: rgba(0x56859bff).into(), - selection: rgba(0x56859b3d).into(), + cursor: rgba(0xb854d3ff).into(), + background: rgba(0xb854d3ff).into(), + selection: rgba(0xb854d33d).into(), }, PlayerColor { - cursor: rgba(0x1f9aa0ff).into(), - background: rgba(0x1f9aa0ff).into(), - selection: rgba(0x1f9aa03d).into(), + cursor: rgba(0x21ad83ff).into(), + background: rgba(0x21ad83ff).into(), + selection: rgba(0x21ad833d).into(), }, PlayerColor { - cursor: rgba(0xb1623aff).into(), - background: rgba(0xb1623aff).into(), - selection: rgba(0xb1623a3d).into(), + cursor: rgba(0xd73837ff).into(), + background: rgba(0xd73837ff).into(), + selection: rgba(0xd738373d).into(), }, PlayerColor { - cursor: rgba(0xa07e3cff).into(), - background: rgba(0xa07e3cff).into(), - selection: rgba(0xa07e3c3d).into(), + cursor: rgba(0xae9515ff).into(), + background: rgba(0xae9515ff).into(), + selection: rgba(0xae95153d).into(), }, PlayerColor { - cursor: rgba(0x499963ff).into(), - background: rgba(0x499963ff).into(), - selection: rgba(0x4999633d).into(), + cursor: rgba(0x60ac3aff).into(), + background: rgba(0x60ac3aff).into(), + selection: rgba(0x60ac3a3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -1117,63 +1117,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x488c90ff).into()), + color: Some(rgba(0x6684e0ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x499963ff).into()), + color: Some(rgba(0x60ac3aff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x78877dff).into()), + color: Some(rgba(0x7d7a68ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x526057ff).into()), + color: Some(rgba(0xa6a28cff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x499963ff).into()), + color: Some(rgba(0x60ac3aff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x488c90ff).into()), + color: Some(rgba(0x6684e0ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x171c19ff).into()), + color: Some(rgba(0xfefbecff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x488c90ff).into()), + color: Some(rgba(0x6684e0ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x488c90ff).into()), + color: Some(rgba(0x6684e0ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1181,35 +1181,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0x9f713dff).into()), + color: Some(rgba(0xb65612ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x6684e1ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x6684e1ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xa07e3bff).into()), + color: Some(rgba(0xae9513ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x66847cff).into()), + color: Some(rgba(0xb17272ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1217,21 +1217,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x55859bff).into()), + color: Some(rgba(0xb854d4ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x488c90ff).into()), + color: Some(rgba(0x6684e0ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x9f713dff).into()), + color: Some(rgba(0xb65612ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1239,28 +1239,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x499963ff).into()), + color: Some(rgba(0x60ac3aff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x9f713cff).into()), + color: Some(rgba(0xb65611ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x526057ff).into()), + color: Some(rgba(0xa6a28cff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x76958cff).into()), + color: Some(rgba(0x9c6262ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1268,112 +1268,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x171c19ff).into()), + color: Some(rgba(0xfefbecff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x232a25ff).into()), + color: Some(rgba(0xe8e4cfff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xb16139ff).into()), + color: Some(rgba(0xd73737ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x232a25ff).into()), + color: Some(rgba(0xe8e4cfff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x526057ff).into()), + color: Some(rgba(0xa6a28cff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x526057ff).into()), + color: Some(rgba(0xa6a28cff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x232a25ff).into()), + color: Some(rgba(0xe8e4cfff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x867469ff).into()), + color: Some(rgba(0xd43552ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x489963ff).into()), + color: Some(rgba(0x60ac39ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x526057ff).into()), + color: Some(rgba(0xa6a28cff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x1c9aa0ff).into()), + color: Some(rgba(0x1fad83ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x867469ff).into()), + color: Some(rgba(0xd43552ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x489963ff).into()), + color: Some(rgba(0x60ac39ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x488c90ff).into()), + color: Some(rgba(0x6684e0ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x9f713dff).into()), + color: Some(rgba(0xb65612ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x171c19ff).into()), + color: Some(rgba(0xfefbecff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1381,28 +1381,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xa07e3bff).into()), + color: Some(rgba(0xae9513ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x232a25ff).into()), + color: Some(rgba(0xe8e4cfff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x55859bff).into()), + color: Some(rgba(0xb854d4ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xa07e3bff).into()), + color: Some(rgba(0xae9513ff).into()), ..Default::default() }, ), @@ -1411,170 +1411,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Cave Dark".into(), - appearance: Appearance::Dark, + name: "Atelier Dune Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x56505eff).into()), - border_variant: Some(rgba(0x332f38ff).into()), - border_focused: Some(rgba(0x222953ff).into()), - border_selected: Some(rgba(0x222953ff).into()), + border: Some(rgba(0xa8a48eff).into()), + border_variant: Some(rgba(0xd7d3beff).into()), + border_focused: Some(rgba(0xcdd1f5ff).into()), + border_selected: Some(rgba(0xcdd1f5ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x48434fff).into()), - elevated_surface_background: Some(rgba(0x221f26ff).into()), - surface_background: Some(rgba(0x221f26ff).into()), - background: Some(rgba(0x3a353fff).into()), - panel_background: Some(rgba(0x221f26ff).into()), - element_background: Some(rgba(0x221f26ff).into()), - element_hover: Some(rgba(0x332f38ff).into()), - element_active: Some(rgba(0x544f5cff).into()), - element_selected: Some(rgba(0x544f5cff).into()), - element_disabled: Some(rgba(0x221f26ff).into()), - drop_target_background: Some(rgba(0x89859180).into()), + border_disabled: Some(rgba(0xbbb7a1ff).into()), + elevated_surface_background: Some(rgba(0xeeebd7ff).into()), + surface_background: Some(rgba(0xeeebd7ff).into()), + background: Some(rgba(0xcecab4ff).into()), + panel_background: Some(rgba(0xeeebd7ff).into()), + element_background: Some(rgba(0xeeebd7ff).into()), + element_hover: Some(rgba(0xd7d3beff).into()), + element_active: Some(rgba(0xaaa690ff).into()), + element_selected: Some(rgba(0xaaa690ff).into()), + element_disabled: Some(rgba(0xeeebd7ff).into()), + drop_target_background: Some(rgba(0x706d5f80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x332f38ff).into()), - ghost_element_active: Some(rgba(0x544f5cff).into()), - ghost_element_selected: Some(rgba(0x544f5cff).into()), - ghost_element_disabled: Some(rgba(0x221f26ff).into()), - text: Some(rgba(0xefecf4ff).into()), - text_muted: Some(rgba(0x898591ff).into()), - text_placeholder: Some(rgba(0x756f7eff).into()), - text_disabled: Some(rgba(0x756f7eff).into()), - text_accent: Some(rgba(0x576ddaff).into()), - icon: Some(rgba(0xefecf4ff).into()), - icon_muted: Some(rgba(0x898591ff).into()), - icon_disabled: Some(rgba(0x756f7eff).into()), - icon_placeholder: Some(rgba(0x898591ff).into()), - icon_accent: Some(rgba(0x576ddaff).into()), - status_bar_background: Some(rgba(0x3a353fff).into()), - title_bar_background: Some(rgba(0x3a353fff).into()), - toolbar_background: Some(rgba(0x19171cff).into()), - tab_bar_background: Some(rgba(0x221f26ff).into()), - tab_inactive_background: Some(rgba(0x221f26ff).into()), - tab_active_background: Some(rgba(0x19171cff).into()), - scrollbar_thumb_background: Some(rgba(0xefecf44c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x332f38ff).into()), - scrollbar_thumb_border: Some(rgba(0x332f38ff).into()), + ghost_element_hover: Some(rgba(0xd7d3beff).into()), + ghost_element_active: Some(rgba(0xaaa690ff).into()), + ghost_element_selected: Some(rgba(0xaaa690ff).into()), + ghost_element_disabled: Some(rgba(0xeeebd7ff).into()), + text: Some(rgba(0x20201dff).into()), + text_muted: Some(rgba(0x706d5fff).into()), + text_placeholder: Some(rgba(0x878471ff).into()), + text_disabled: Some(rgba(0x878471ff).into()), + text_accent: Some(rgba(0x6784e0ff).into()), + icon: Some(rgba(0x20201dff).into()), + icon_muted: Some(rgba(0x706d5fff).into()), + icon_disabled: Some(rgba(0x878471ff).into()), + icon_placeholder: Some(rgba(0x706d5fff).into()), + icon_accent: Some(rgba(0x6784e0ff).into()), + status_bar_background: Some(rgba(0xcecab4ff).into()), + title_bar_background: Some(rgba(0xcecab4ff).into()), + toolbar_background: Some(rgba(0xfefbecff).into()), + tab_bar_background: Some(rgba(0xeeebd7ff).into()), + tab_inactive_background: Some(rgba(0xeeebd7ff).into()), + tab_active_background: Some(rgba(0xfefbecff).into()), + scrollbar_thumb_background: Some(rgba(0x20201d4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xd7d3beff).into()), + scrollbar_thumb_border: Some(rgba(0xd7d3beff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x201e24ff).into()), - editor_foreground: Some(rgba(0xe2dfe7ff).into()), - editor_background: Some(rgba(0x19171cff).into()), - editor_gutter_background: Some(rgba(0x19171cff).into()), - editor_subheader_background: Some(rgba(0x221f26ff).into()), - editor_active_line_background: Some(rgba(0x221f26bf).into()), - editor_highlighted_line_background: Some(rgba(0x221f26ff).into()), - editor_line_number: Some(rgba(0xefecf459).into()), - editor_active_line_number: Some(rgba(0xefecf4ff).into()), - editor_invisible: Some(rgba(0x898591ff).into()), - editor_wrap_guide: Some(rgba(0xefecf40d).into()), - editor_active_wrap_guide: Some(rgba(0xefecf41a).into()), - editor_document_highlight_read_background: Some(rgba(0x576dda1a).into()), - editor_document_highlight_write_background: Some(rgba(0x726c7a66).into()), - terminal_background: Some(rgba(0x19171cff).into()), - terminal_ansi_bright_black: Some(rgba(0x635d6bff).into()), - terminal_ansi_bright_red: Some(rgba(0x5c283cff).into()), - terminal_ansi_bright_green: Some(rgba(0x1f4747ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x2d376fff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x60255bff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x26445eff).into()), - terminal_ansi_bright_white: Some(rgba(0xefecf4ff).into()), - terminal_ansi_black: Some(rgba(0x19171cff).into()), - terminal_ansi_red: Some(rgba(0xbe4678ff).into()), - terminal_ansi_green: Some(rgba(0x2c9292ff).into()), - terminal_ansi_yellow: Some(rgba(0xa06e3bff).into()), - terminal_ansi_blue: Some(rgba(0x576ddaff).into()), - terminal_ansi_magenta: Some(rgba(0xbf41bfff).into()), - terminal_ansi_cyan: Some(rgba(0x3a8bc6ff).into()), - terminal_ansi_white: Some(rgba(0xefecf4ff).into()), - link_text_hover: Some(rgba(0x576ddaff).into()), + scrollbar_track_border: Some(rgba(0xf2eedcff).into()), + editor_foreground: Some(rgba(0x292824ff).into()), + editor_background: Some(rgba(0xfefbecff).into()), + editor_gutter_background: Some(rgba(0xfefbecff).into()), + editor_subheader_background: Some(rgba(0xeeebd7ff).into()), + editor_active_line_background: Some(rgba(0xeeebd7bf).into()), + editor_highlighted_line_background: Some(rgba(0xeeebd7ff).into()), + editor_line_number: Some(rgba(0x20201d59).into()), + editor_active_line_number: Some(rgba(0x20201dff).into()), + editor_invisible: Some(rgba(0x706d5fff).into()), + editor_wrap_guide: Some(rgba(0x20201d0d).into()), + editor_active_wrap_guide: Some(rgba(0x20201d1a).into()), + editor_document_highlight_read_background: Some(rgba(0x6784e01a).into()), + editor_document_highlight_write_background: Some(rgba(0x8b887466).into()), + terminal_background: Some(rgba(0xfefbecff).into()), + terminal_ansi_bright_black: Some(rgba(0x9b9782ff).into()), + terminal_ansi_bright_red: Some(rgba(0xf7a195ff).into()), + terminal_ansi_bright_green: Some(rgba(0xb3d69cff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xdcc98eff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb8c0f1ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xf3a0a4ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9ed7c0ff).into()), + terminal_ansi_bright_white: Some(rgba(0x20201dff).into()), + terminal_ansi_black: Some(rgba(0xfefbecff).into()), + terminal_ansi_red: Some(rgba(0xd73838ff).into()), + terminal_ansi_green: Some(rgba(0x61ac3aff).into()), + terminal_ansi_yellow: Some(rgba(0xae9515ff).into()), + terminal_ansi_blue: Some(rgba(0x6784e0ff).into()), + terminal_ansi_magenta: Some(rgba(0xd43753ff).into()), + terminal_ansi_cyan: Some(rgba(0x22ad83ff).into()), + terminal_ansi_white: Some(rgba(0x20201dff).into()), + link_text_hover: Some(rgba(0x6784e0ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xa06e3bff).into()), - conflict_background: Some(rgba(0x231a12ff).into()), - conflict_border: Some(rgba(0x392a1aff).into()), - created: Some(rgba(0x2c9292ff).into()), - created_background: Some(rgba(0x132020ff).into()), - created_border: Some(rgba(0x1a3434ff).into()), - deleted: Some(rgba(0xbe4678ff).into()), - deleted_background: Some(rgba(0x28151cff).into()), - deleted_border: Some(rgba(0x421f2dff).into()), - error: Some(rgba(0xbe4678ff).into()), - error_background: Some(rgba(0x28151cff).into()), - error_border: Some(rgba(0x421f2dff).into()), - hidden: Some(rgba(0x756f7eff).into()), - hidden_background: Some(rgba(0x3a353fff).into()), - hidden_border: Some(rgba(0x48434fff).into()), - hint: Some(rgba(0x716998ff).into()), - hint_background: Some(rgba(0x161a36ff).into()), - hint_border: Some(rgba(0x222953ff).into()), - ignored: Some(rgba(0x898591ff).into()), - ignored_background: Some(rgba(0x3a353fff).into()), - ignored_border: Some(rgba(0x56505eff).into()), - info: Some(rgba(0x576ddaff).into()), - info_background: Some(rgba(0x161a36ff).into()), - info_border: Some(rgba(0x222953ff).into()), - modified: Some(rgba(0xa06e3bff).into()), - modified_background: Some(rgba(0x231a12ff).into()), - modified_border: Some(rgba(0x392a1aff).into()), - predictive: Some(rgba(0x625887ff).into()), - predictive_background: Some(rgba(0x132020ff).into()), - predictive_border: Some(rgba(0x1a3434ff).into()), - renamed: Some(rgba(0x576ddaff).into()), - renamed_background: Some(rgba(0x161a36ff).into()), - renamed_border: Some(rgba(0x222953ff).into()), - success: Some(rgba(0x2c9292ff).into()), - success_background: Some(rgba(0x132020ff).into()), - success_border: Some(rgba(0x1a3434ff).into()), - unreachable: Some(rgba(0x898591ff).into()), - unreachable_background: Some(rgba(0x3a353fff).into()), - unreachable_border: Some(rgba(0x56505eff).into()), - warning: Some(rgba(0xa06e3bff).into()), - warning_background: Some(rgba(0x231a12ff).into()), - warning_border: Some(rgba(0x392a1aff).into()), + conflict: Some(rgba(0xae9515ff).into()), + conflict_background: Some(rgba(0xf2e8d1ff).into()), + conflict_border: Some(rgba(0xe7d7aeff).into()), + created: Some(rgba(0x61ac3aff).into()), + created_background: Some(rgba(0xe0eed6ff).into()), + created_border: Some(rgba(0xc9e1b7ff).into()), + deleted: Some(rgba(0xd73838ff).into()), + deleted_background: Some(rgba(0xffd9d4ff).into()), + deleted_border: Some(rgba(0xfcbcb2ff).into()), + error: Some(rgba(0xd73838ff).into()), + error_background: Some(rgba(0xffd9d4ff).into()), + error_border: Some(rgba(0xfcbcb2ff).into()), + hidden: Some(rgba(0x878471ff).into()), + hidden_background: Some(rgba(0xcecab4ff).into()), + hidden_border: Some(rgba(0xbbb7a1ff).into()), + hint: Some(rgba(0xb37979ff).into()), + hint_background: Some(rgba(0xe3e5faff).into()), + hint_border: Some(rgba(0xcdd1f5ff).into()), + ignored: Some(rgba(0x706d5fff).into()), + ignored_background: Some(rgba(0xcecab4ff).into()), + ignored_border: Some(rgba(0xa8a48eff).into()), + info: Some(rgba(0x6784e0ff).into()), + info_background: Some(rgba(0xe3e5faff).into()), + info_border: Some(rgba(0xcdd1f5ff).into()), + modified: Some(rgba(0xae9515ff).into()), + modified_background: Some(rgba(0xf2e8d1ff).into()), + modified_border: Some(rgba(0xe7d7aeff).into()), + predictive: Some(rgba(0xc88a8aff).into()), + predictive_background: Some(rgba(0xe0eed6ff).into()), + predictive_border: Some(rgba(0xc9e1b7ff).into()), + renamed: Some(rgba(0x6784e0ff).into()), + renamed_background: Some(rgba(0xe3e5faff).into()), + renamed_border: Some(rgba(0xcdd1f5ff).into()), + success: Some(rgba(0x61ac3aff).into()), + success_background: Some(rgba(0xe0eed6ff).into()), + success_border: Some(rgba(0xc9e1b7ff).into()), + unreachable: Some(rgba(0x706d5fff).into()), + unreachable_background: Some(rgba(0xcecab4ff).into()), + unreachable_border: Some(rgba(0xa8a48eff).into()), + warning: Some(rgba(0xae9515ff).into()), + warning_background: Some(rgba(0xf2e8d1ff).into()), + warning_border: Some(rgba(0xe7d7aeff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x576ddaff).into(), - background: rgba(0x576ddaff).into(), - selection: rgba(0x576dda3d).into(), + cursor: rgba(0x6784e0ff).into(), + background: rgba(0x6784e0ff).into(), + selection: rgba(0x6784e03d).into(), }, PlayerColor { - cursor: rgba(0xbf41bfff).into(), - background: rgba(0xbf41bfff).into(), - selection: rgba(0xbf41bf3d).into(), + cursor: rgba(0xd43753ff).into(), + background: rgba(0xd43753ff).into(), + selection: rgba(0xd437533d).into(), }, PlayerColor { - cursor: rgba(0xaa573cff).into(), - background: rgba(0xaa573cff).into(), - selection: rgba(0xaa573c3d).into(), + cursor: rgba(0xb65713ff).into(), + background: rgba(0xb65713ff).into(), + selection: rgba(0xb657133d).into(), }, PlayerColor { - cursor: rgba(0x955ae6ff).into(), - background: rgba(0x955ae6ff).into(), - selection: rgba(0x955ae63d).into(), + cursor: rgba(0xb855d3ff).into(), + background: rgba(0xb855d3ff).into(), + selection: rgba(0xb855d33d).into(), }, PlayerColor { - cursor: rgba(0x3a8bc6ff).into(), - background: rgba(0x3a8bc6ff).into(), - selection: rgba(0x3a8bc63d).into(), + cursor: rgba(0x22ad83ff).into(), + background: rgba(0x22ad83ff).into(), + selection: rgba(0x22ad833d).into(), }, PlayerColor { - cursor: rgba(0xbe4678ff).into(), - background: rgba(0xbe4678ff).into(), - selection: rgba(0xbe46783d).into(), + cursor: rgba(0xd73838ff).into(), + background: rgba(0xd73838ff).into(), + selection: rgba(0xd738383d).into(), }, PlayerColor { - cursor: rgba(0xa06e3bff).into(), - background: rgba(0xa06e3bff).into(), - selection: rgba(0xa06e3b3d).into(), + cursor: rgba(0xae9515ff).into(), + background: rgba(0xae9515ff).into(), + selection: rgba(0xae95153d).into(), }, PlayerColor { - cursor: rgba(0x2c9292ff).into(), - background: rgba(0x2c9292ff).into(), - selection: rgba(0x2c92923d).into(), + cursor: rgba(0x61ac3aff).into(), + background: rgba(0x61ac3aff).into(), + selection: rgba(0x61ac3a3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -1582,63 +1582,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x576ddaff).into()), + color: Some(rgba(0x6784e0ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x2c9292ff).into()), + color: Some(rgba(0x61ac3aff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x655f6dff).into()), + color: Some(rgba(0x999580ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x8b8792ff).into()), + color: Some(rgba(0x6e6b5eff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x2c9292ff).into()), + color: Some(rgba(0x61ac3aff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x576ddaff).into()), + color: Some(rgba(0x6784e0ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xefecf4ff).into()), + color: Some(rgba(0x20201dff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x576ddaff).into()), + color: Some(rgba(0x6784e0ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x576ddaff).into()), + color: Some(rgba(0x6784e0ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1646,35 +1646,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xaa573cff).into()), + color: Some(rgba(0xb65713ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x576ddbff).into()), + color: Some(rgba(0x6684e1ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x576ddbff).into()), + color: Some(rgba(0x6684e1ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xae9513ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x716998ff).into()), + color: Some(rgba(0xb37979ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1682,21 +1682,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x955ae7ff).into()), + color: Some(rgba(0xb854d4ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x576ddaff).into()), + color: Some(rgba(0x6784e0ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xaa573cff).into()), + color: Some(rgba(0xb65713ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1704,28 +1704,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x2c9292ff).into()), + color: Some(rgba(0x61ac3aff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xaa573cff).into()), + color: Some(rgba(0xb65611ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x8b8792ff).into()), + color: Some(rgba(0x6e6b5eff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x625887ff).into()), + color: Some(rgba(0xc88a8aff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1733,112 +1733,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xefecf4ff).into()), + color: Some(rgba(0x20201dff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xe2dfe7ff).into()), + color: Some(rgba(0x292824ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xbe4678ff).into()), + color: Some(rgba(0xd73737ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xe2dfe7ff).into()), + color: Some(rgba(0x292824ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x8b8792ff).into()), + color: Some(rgba(0x6e6b5eff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x8b8792ff).into()), + color: Some(rgba(0x6e6b5eff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xe2dfe7ff).into()), + color: Some(rgba(0x292824ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xbf40bfff).into()), + color: Some(rgba(0xd43552ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x2a9292ff).into()), + color: Some(rgba(0x60ac39ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x8b8792ff).into()), + color: Some(rgba(0x6e6b5eff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x398bc6ff).into()), + color: Some(rgba(0x1fad83ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xbf40bfff).into()), + color: Some(rgba(0xd43552ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x2a9292ff).into()), + color: Some(rgba(0x60ac39ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x576ddaff).into()), + color: Some(rgba(0x6784e0ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xaa573cff).into()), + color: Some(rgba(0xb65713ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xefecf4ff).into()), + color: Some(rgba(0x20201dff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1846,28 +1846,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xae9513ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xe2dfe7ff).into()), + color: Some(rgba(0x292824ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x955ae7ff).into()), + color: Some(rgba(0xb854d4ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xae9513ff).into()), ..Default::default() }, ), @@ -2341,170 +2341,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Sulphurpool Dark".into(), - appearance: Appearance::Dark, + name: "Atelier Estuary Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x5c6485ff).into()), - border_variant: Some(rgba(0x363f62ff).into()), - border_focused: Some(rgba(0x203348ff).into()), - border_selected: Some(rgba(0x203348ff).into()), + border: Some(rgba(0x969585ff).into()), + border_variant: Some(rgba(0xd1d0c6ff).into()), + border_focused: Some(rgba(0xbbddc6ff).into()), + border_selected: Some(rgba(0xbbddc6ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x4d5577ff).into()), - elevated_surface_background: Some(rgba(0x262f51ff).into()), - surface_background: Some(rgba(0x262f51ff).into()), - background: Some(rgba(0x3e4769ff).into()), - panel_background: Some(rgba(0x262f51ff).into()), - element_background: Some(rgba(0x262f51ff).into()), - element_hover: Some(rgba(0x363f62ff).into()), - element_active: Some(rgba(0x5a6284ff).into()), - element_selected: Some(rgba(0x5a6284ff).into()), - element_disabled: Some(rgba(0x262f51ff).into()), - drop_target_background: Some(rgba(0x959bb280).into()), + border_disabled: Some(rgba(0xadac9fff).into()), + elevated_surface_background: Some(rgba(0xebeae3ff).into()), + surface_background: Some(rgba(0xebeae3ff).into()), + background: Some(rgba(0xc5c4b9ff).into()), + panel_background: Some(rgba(0xebeae3ff).into()), + element_background: Some(rgba(0xebeae3ff).into()), + element_hover: Some(rgba(0xd1d0c6ff).into()), + element_active: Some(rgba(0x989788ff).into()), + element_selected: Some(rgba(0x989788ff).into()), + element_disabled: Some(rgba(0xebeae3ff).into()), + drop_target_background: Some(rgba(0x61604f80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x363f62ff).into()), - ghost_element_active: Some(rgba(0x5a6284ff).into()), - ghost_element_selected: Some(rgba(0x5a6284ff).into()), - ghost_element_disabled: Some(rgba(0x262f51ff).into()), - text: Some(rgba(0xf5f7ffff).into()), - text_muted: Some(rgba(0x959bb2ff).into()), - text_placeholder: Some(rgba(0x7e849eff).into()), - text_disabled: Some(rgba(0x7e849eff).into()), - text_accent: Some(rgba(0x3e8fd0ff).into()), - icon: Some(rgba(0xf5f7ffff).into()), - icon_muted: Some(rgba(0x959bb2ff).into()), - icon_disabled: Some(rgba(0x7e849eff).into()), - icon_placeholder: Some(rgba(0x959bb2ff).into()), - icon_accent: Some(rgba(0x3e8fd0ff).into()), - status_bar_background: Some(rgba(0x3e4769ff).into()), - title_bar_background: Some(rgba(0x3e4769ff).into()), - toolbar_background: Some(rgba(0x202746ff).into()), - tab_bar_background: Some(rgba(0x262f51ff).into()), - tab_inactive_background: Some(rgba(0x262f51ff).into()), - tab_active_background: Some(rgba(0x202746ff).into()), - scrollbar_thumb_background: Some(rgba(0xf5f7ff4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x363f62ff).into()), - scrollbar_thumb_border: Some(rgba(0x363f62ff).into()), + ghost_element_hover: Some(rgba(0xd1d0c6ff).into()), + ghost_element_active: Some(rgba(0x989788ff).into()), + ghost_element_selected: Some(rgba(0x989788ff).into()), + ghost_element_disabled: Some(rgba(0xebeae3ff).into()), + text: Some(rgba(0x22221bff).into()), + text_muted: Some(rgba(0x61604fff).into()), + text_placeholder: Some(rgba(0x767463ff).into()), + text_disabled: Some(rgba(0x767463ff).into()), + text_accent: Some(rgba(0x38a166ff).into()), + icon: Some(rgba(0x22221bff).into()), + icon_muted: Some(rgba(0x61604fff).into()), + icon_disabled: Some(rgba(0x767463ff).into()), + icon_placeholder: Some(rgba(0x61604fff).into()), + icon_accent: Some(rgba(0x38a166ff).into()), + status_bar_background: Some(rgba(0xc5c4b9ff).into()), + title_bar_background: Some(rgba(0xc5c4b9ff).into()), + toolbar_background: Some(rgba(0xf4f3ecff).into()), + tab_bar_background: Some(rgba(0xebeae3ff).into()), + tab_inactive_background: Some(rgba(0xebeae3ff).into()), + tab_active_background: Some(rgba(0xf4f3ecff).into()), + scrollbar_thumb_background: Some(rgba(0x22221b4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xd1d0c6ff).into()), + scrollbar_thumb_border: Some(rgba(0xd1d0c6ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x252d4fff).into()), - editor_foreground: Some(rgba(0xdfe2f1ff).into()), - editor_background: Some(rgba(0x202746ff).into()), - editor_gutter_background: Some(rgba(0x202746ff).into()), - editor_subheader_background: Some(rgba(0x262f51ff).into()), - editor_active_line_background: Some(rgba(0x262f51bf).into()), - editor_highlighted_line_background: Some(rgba(0x262f51ff).into()), - editor_line_number: Some(rgba(0xf5f7ff59).into()), - editor_active_line_number: Some(rgba(0xf5f7ffff).into()), - editor_invisible: Some(rgba(0x959bb2ff).into()), - editor_wrap_guide: Some(rgba(0xf5f7ff0d).into()), - editor_active_wrap_guide: Some(rgba(0xf5f7ff1a).into()), - editor_document_highlight_read_background: Some(rgba(0x3e8fd01a).into()), - editor_document_highlight_write_background: Some(rgba(0x7a819c66).into()), - terminal_background: Some(rgba(0x202746ff).into()), - terminal_ansi_bright_black: Some(rgba(0x697192ff).into()), - terminal_ansi_bright_red: Some(rgba(0x6d2616ff).into()), - terminal_ansi_bright_green: Some(rgba(0x534921ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x63441eff).into()), - terminal_ansi_bright_blue: Some(rgba(0x274664ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x4c333dff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x214e5fff).into()), - terminal_ansi_bright_white: Some(rgba(0xf5f7ffff).into()), - terminal_ansi_black: Some(rgba(0x202746ff).into()), - terminal_ansi_red: Some(rgba(0xc94923ff).into()), - terminal_ansi_green: Some(rgba(0xac973aff).into()), - terminal_ansi_yellow: Some(rgba(0xc08b31ff).into()), - terminal_ansi_blue: Some(rgba(0x3e8fd0ff).into()), - terminal_ansi_magenta: Some(rgba(0x9c637aff).into()), - terminal_ansi_cyan: Some(rgba(0x25a2c9ff).into()), - terminal_ansi_white: Some(rgba(0xf5f7ffff).into()), - link_text_hover: Some(rgba(0x3e8fd0ff).into()), + scrollbar_track_border: Some(rgba(0xedece5ff).into()), + editor_foreground: Some(rgba(0x302f27ff).into()), + editor_background: Some(rgba(0xf4f3ecff).into()), + editor_gutter_background: Some(rgba(0xf4f3ecff).into()), + editor_subheader_background: Some(rgba(0xebeae3ff).into()), + editor_active_line_background: Some(rgba(0xebeae3bf).into()), + editor_highlighted_line_background: Some(rgba(0xebeae3ff).into()), + editor_line_number: Some(rgba(0x22221b59).into()), + editor_active_line_number: Some(rgba(0x22221bff).into()), + editor_invisible: Some(rgba(0x61604fff).into()), + editor_wrap_guide: Some(rgba(0x22221b0d).into()), + editor_active_wrap_guide: Some(rgba(0x22221b1a).into()), + editor_document_highlight_read_background: Some(rgba(0x38a1661a).into()), + editor_document_highlight_write_background: Some(rgba(0x7a786766).into()), + terminal_background: Some(rgba(0xf4f3ecff).into()), + terminal_ansi_bright_black: Some(rgba(0x898775ff).into()), + terminal_ansi_bright_red: Some(rgba(0xe4af96ff).into()), + terminal_ansi_bright_green: Some(rgba(0xc0ca93ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd7ca8dff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa0d1b0ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xcfb4bcff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xaecea1ff).into()), + terminal_ansi_bright_white: Some(rgba(0x22221bff).into()), + terminal_ansi_black: Some(rgba(0xf4f3ecff).into()), + terminal_ansi_red: Some(rgba(0xba6337ff).into()), + terminal_ansi_green: Some(rgba(0x7d9728ff).into()), + terminal_ansi_yellow: Some(rgba(0xa59810ff).into()), + terminal_ansi_blue: Some(rgba(0x38a166ff).into()), + terminal_ansi_magenta: Some(rgba(0x9d6c7cff).into()), + terminal_ansi_cyan: Some(rgba(0x5c9d49ff).into()), + terminal_ansi_white: Some(rgba(0x22221bff).into()), + link_text_hover: Some(rgba(0x38a166ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xc08b31ff).into()), - conflict_background: Some(rgba(0x311e11ff).into()), - conflict_border: Some(rgba(0x4b3218ff).into()), - created: Some(rgba(0xac973aff).into()), - created_background: Some(rgba(0x252113ff).into()), - created_border: Some(rgba(0x3d351bff).into()), - deleted: Some(rgba(0xc94923ff).into()), - deleted_background: Some(rgba(0x3c120dff).into()), - deleted_border: Some(rgba(0x551c13ff).into()), - error: Some(rgba(0xc94923ff).into()), - error_background: Some(rgba(0x3c120dff).into()), - error_border: Some(rgba(0x551c13ff).into()), - hidden: Some(rgba(0x7e849eff).into()), - hidden_background: Some(rgba(0x3e4769ff).into()), - hidden_border: Some(rgba(0x4d5577ff).into()), - hint: Some(rgba(0x6d82a6ff).into()), - hint_background: Some(rgba(0x161f2bff).into()), - hint_border: Some(rgba(0x203348ff).into()), - ignored: Some(rgba(0x959bb2ff).into()), - ignored_background: Some(rgba(0x3e4769ff).into()), - ignored_border: Some(rgba(0x5c6485ff).into()), - info: Some(rgba(0x3e8fd0ff).into()), - info_background: Some(rgba(0x161f2bff).into()), - info_border: Some(rgba(0x203348ff).into()), - modified: Some(rgba(0xc08b31ff).into()), - modified_background: Some(rgba(0x311e11ff).into()), - modified_border: Some(rgba(0x4b3218ff).into()), - predictive: Some(rgba(0x58709aff).into()), - predictive_background: Some(rgba(0x252113ff).into()), - predictive_border: Some(rgba(0x3d351bff).into()), - renamed: Some(rgba(0x3e8fd0ff).into()), - renamed_background: Some(rgba(0x161f2bff).into()), - renamed_border: Some(rgba(0x203348ff).into()), - success: Some(rgba(0xac973aff).into()), - success_background: Some(rgba(0x252113ff).into()), - success_border: Some(rgba(0x3d351bff).into()), - unreachable: Some(rgba(0x959bb2ff).into()), - unreachable_background: Some(rgba(0x3e4769ff).into()), - unreachable_border: Some(rgba(0x5c6485ff).into()), - warning: Some(rgba(0xc08b31ff).into()), - warning_background: Some(rgba(0x311e11ff).into()), - warning_border: Some(rgba(0x4b3218ff).into()), + conflict: Some(rgba(0xa59810ff).into()), + conflict_background: Some(rgba(0xf0e9d1ff).into()), + conflict_border: Some(rgba(0xe3d8adff).into()), + created: Some(rgba(0x7d9728ff).into()), + created_background: Some(rgba(0xe6e9d3ff).into()), + created_border: Some(rgba(0xd2d8b1ff).into()), + deleted: Some(rgba(0xba6337ff).into()), + deleted_background: Some(rgba(0xf6ded4ff).into()), + deleted_border: Some(rgba(0xedc5b3ff).into()), + error: Some(rgba(0xba6337ff).into()), + error_background: Some(rgba(0xf6ded4ff).into()), + error_border: Some(rgba(0xedc5b3ff).into()), + hidden: Some(rgba(0x767463ff).into()), + hidden_background: Some(rgba(0xc5c4b9ff).into()), + hidden_border: Some(rgba(0xadac9fff).into()), + hint: Some(rgba(0x768962ff).into()), + hint_background: Some(rgba(0xd9ecdfff).into()), + hint_border: Some(rgba(0xbbddc6ff).into()), + ignored: Some(rgba(0x61604fff).into()), + ignored_background: Some(rgba(0xc5c4b9ff).into()), + ignored_border: Some(rgba(0x969585ff).into()), + info: Some(rgba(0x38a166ff).into()), + info_background: Some(rgba(0xd9ecdfff).into()), + info_border: Some(rgba(0xbbddc6ff).into()), + modified: Some(rgba(0xa59810ff).into()), + modified_background: Some(rgba(0xf0e9d1ff).into()), + modified_border: Some(rgba(0xe3d8adff).into()), + predictive: Some(rgba(0x879a72ff).into()), + predictive_background: Some(rgba(0xe6e9d3ff).into()), + predictive_border: Some(rgba(0xd2d8b1ff).into()), + renamed: Some(rgba(0x38a166ff).into()), + renamed_background: Some(rgba(0xd9ecdfff).into()), + renamed_border: Some(rgba(0xbbddc6ff).into()), + success: Some(rgba(0x7d9728ff).into()), + success_background: Some(rgba(0xe6e9d3ff).into()), + success_border: Some(rgba(0xd2d8b1ff).into()), + unreachable: Some(rgba(0x61604fff).into()), + unreachable_background: Some(rgba(0xc5c4b9ff).into()), + unreachable_border: Some(rgba(0x969585ff).into()), + warning: Some(rgba(0xa59810ff).into()), + warning_background: Some(rgba(0xf0e9d1ff).into()), + warning_border: Some(rgba(0xe3d8adff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x3e8fd0ff).into(), - background: rgba(0x3e8fd0ff).into(), - selection: rgba(0x3e8fd03d).into(), + cursor: rgba(0x38a166ff).into(), + background: rgba(0x38a166ff).into(), + selection: rgba(0x38a1663d).into(), }, PlayerColor { - cursor: rgba(0x9c637aff).into(), - background: rgba(0x9c637aff).into(), - selection: rgba(0x9c637a3d).into(), + cursor: rgba(0x9d6c7cff).into(), + background: rgba(0x9d6c7cff).into(), + selection: rgba(0x9d6c7c3d).into(), }, PlayerColor { - cursor: rgba(0xc76b2aff).into(), - background: rgba(0xc76b2aff).into(), - selection: rgba(0xc76b2a3d).into(), + cursor: rgba(0xae7315ff).into(), + background: rgba(0xae7315ff).into(), + selection: rgba(0xae73153d).into(), }, PlayerColor { - cursor: rgba(0x6679ccff).into(), - background: rgba(0x6679ccff).into(), - selection: rgba(0x6679cc3d).into(), + cursor: rgba(0x609182ff).into(), + background: rgba(0x609182ff).into(), + selection: rgba(0x6091823d).into(), }, PlayerColor { - cursor: rgba(0x25a2c9ff).into(), - background: rgba(0x25a2c9ff).into(), - selection: rgba(0x25a2c93d).into(), + cursor: rgba(0x5c9d49ff).into(), + background: rgba(0x5c9d49ff).into(), + selection: rgba(0x5c9d493d).into(), }, PlayerColor { - cursor: rgba(0xc94923ff).into(), - background: rgba(0xc94923ff).into(), - selection: rgba(0xc949233d).into(), + cursor: rgba(0xba6337ff).into(), + background: rgba(0xba6337ff).into(), + selection: rgba(0xba63373d).into(), }, PlayerColor { - cursor: rgba(0xc08b31ff).into(), - background: rgba(0xc08b31ff).into(), - selection: rgba(0xc08b313d).into(), + cursor: rgba(0xa59810ff).into(), + background: rgba(0xa59810ff).into(), + selection: rgba(0xa598103d).into(), }, PlayerColor { - cursor: rgba(0xac973aff).into(), - background: rgba(0xac973aff).into(), - selection: rgba(0xac973a3d).into(), + cursor: rgba(0x7d9728ff).into(), + background: rgba(0x7d9728ff).into(), + selection: rgba(0x7d97283d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -2512,63 +2512,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fd0ff).into()), + color: Some(rgba(0x38a166ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xac973aff).into()), + color: Some(rgba(0x7d9728ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x6b7394ff).into()), + color: Some(rgba(0x878573ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x979db4ff).into()), + color: Some(rgba(0x5f5e4eff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0xac973aff).into()), + color: Some(rgba(0x7d9728ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fd0ff).into()), + color: Some(rgba(0x38a166ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xf5f7ffff).into()), + color: Some(rgba(0x22221bff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fd0ff).into()), + color: Some(rgba(0x38a166ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fd0ff).into()), + color: Some(rgba(0x38a166ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -2576,35 +2576,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xc76b2aff).into()), + color: Some(rgba(0xae7315ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x3d8fd1ff).into()), + color: Some(rgba(0x36a166ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x3d8fd1ff).into()), + color: Some(rgba(0x36a166ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xc08b30ff).into()), + color: Some(rgba(0xa5980dff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x6d82a6ff).into()), + color: Some(rgba(0x768962ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -2612,21 +2612,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x6679ccff).into()), + color: Some(rgba(0x5f9182ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fd0ff).into()), + color: Some(rgba(0x38a166ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xc76b2aff).into()), + color: Some(rgba(0xae7315ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -2634,28 +2634,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0xac973aff).into()), + color: Some(rgba(0x7d9728ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xc76b29ff).into()), + color: Some(rgba(0xae7313ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x979db4ff).into()), + color: Some(rgba(0x5f5e4eff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x58709aff).into()), + color: Some(rgba(0x879a72ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -2663,112 +2663,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xf5f7ffff).into()), + color: Some(rgba(0x22221bff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xdfe2f1ff).into()), + color: Some(rgba(0x302f27ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xc94922ff).into()), + color: Some(rgba(0xba6236ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xdfe2f1ff).into()), + color: Some(rgba(0x302f27ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x979db4ff).into()), + color: Some(rgba(0x5f5e4eff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x979db4ff).into()), + color: Some(rgba(0x5f5e4eff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xdfe2f1ff).into()), + color: Some(rgba(0x302f27ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x9c637aff).into()), + color: Some(rgba(0x9d6c7cff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xac9739ff).into()), + color: Some(rgba(0x7d9726ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x979db4ff).into()), + color: Some(rgba(0x5f5e4eff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x22a2c9ff).into()), + color: Some(rgba(0x5b9d48ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x9c637aff).into()), + color: Some(rgba(0x9d6c7cff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0xac9739ff).into()), + color: Some(rgba(0x7d9726ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fd0ff).into()), + color: Some(rgba(0x38a166ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xc76b2aff).into()), + color: Some(rgba(0xae7315ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xf5f7ffff).into()), + color: Some(rgba(0x22221bff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -2776,28 +2776,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xc08b30ff).into()), + color: Some(rgba(0xa5980dff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xdfe2f1ff).into()), + color: Some(rgba(0x302f27ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x6679ccff).into()), + color: Some(rgba(0x5f9182ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xc08b30ff).into()), + color: Some(rgba(0xa5980dff).into()), ..Default::default() }, ), @@ -2806,170 +2806,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Sulphurpool Light".into(), - appearance: Appearance::Light, + name: "Atelier Forest Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x9a9fb6ff).into()), - border_variant: Some(rgba(0xccd0e1ff).into()), - border_focused: Some(rgba(0xc2d5efff).into()), - border_selected: Some(rgba(0xc2d5efff).into()), + border: Some(rgba(0x665f5cff).into()), + border_variant: Some(rgba(0x3b3431ff).into()), + border_focused: Some(rgba(0x192e5bff).into()), + border_selected: Some(rgba(0x192e5bff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xaeb3c7ff).into()), - elevated_surface_background: Some(rgba(0xe5e8f5ff).into()), - surface_background: Some(rgba(0xe5e8f5ff).into()), - background: Some(rgba(0xc2c6d9ff).into()), - panel_background: Some(rgba(0xe5e8f5ff).into()), - element_background: Some(rgba(0xe5e8f5ff).into()), - element_hover: Some(rgba(0xccd0e1ff).into()), - element_active: Some(rgba(0x9ca1b8ff).into()), - element_selected: Some(rgba(0x9ca1b8ff).into()), - element_disabled: Some(rgba(0xe5e8f5ff).into()), - drop_target_background: Some(rgba(0x60688980).into()), + border_disabled: Some(rgba(0x554e4bff).into()), + elevated_surface_background: Some(rgba(0x27211eff).into()), + surface_background: Some(rgba(0x27211eff).into()), + background: Some(rgba(0x443c39ff).into()), + panel_background: Some(rgba(0x27211eff).into()), + element_background: Some(rgba(0x27211eff).into()), + element_hover: Some(rgba(0x3b3431ff).into()), + element_active: Some(rgba(0x645d5aff).into()), + element_selected: Some(rgba(0x645d5aff).into()), + element_disabled: Some(rgba(0x27211eff).into()), + drop_target_background: Some(rgba(0xa79f9d80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xccd0e1ff).into()), - ghost_element_active: Some(rgba(0x9ca1b8ff).into()), - ghost_element_selected: Some(rgba(0x9ca1b8ff).into()), - ghost_element_disabled: Some(rgba(0xe5e8f5ff).into()), - text: Some(rgba(0x202746ff).into()), - text_muted: Some(rgba(0x606889ff).into()), - text_placeholder: Some(rgba(0x767d9aff).into()), - text_disabled: Some(rgba(0x767d9aff).into()), - text_accent: Some(rgba(0x3f8fd0ff).into()), - icon: Some(rgba(0x202746ff).into()), - icon_muted: Some(rgba(0x606889ff).into()), - icon_disabled: Some(rgba(0x767d9aff).into()), - icon_placeholder: Some(rgba(0x606889ff).into()), - icon_accent: Some(rgba(0x3f8fd0ff).into()), - status_bar_background: Some(rgba(0xc2c6d9ff).into()), - title_bar_background: Some(rgba(0xc2c6d9ff).into()), - toolbar_background: Some(rgba(0xf5f7ffff).into()), - tab_bar_background: Some(rgba(0xe5e8f5ff).into()), - tab_inactive_background: Some(rgba(0xe5e8f5ff).into()), - tab_active_background: Some(rgba(0xf5f7ffff).into()), - scrollbar_thumb_background: Some(rgba(0x2027464c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xccd0e1ff).into()), - scrollbar_thumb_border: Some(rgba(0xccd0e1ff).into()), + ghost_element_hover: Some(rgba(0x3b3431ff).into()), + ghost_element_active: Some(rgba(0x645d5aff).into()), + ghost_element_selected: Some(rgba(0x645d5aff).into()), + ghost_element_disabled: Some(rgba(0x27211eff).into()), + text: Some(rgba(0xf1efeeff).into()), + text_muted: Some(rgba(0xa79f9dff).into()), + text_placeholder: Some(rgba(0x8e8683ff).into()), + text_disabled: Some(rgba(0x8e8683ff).into()), + text_accent: Some(rgba(0x417ee6ff).into()), + icon: Some(rgba(0xf1efeeff).into()), + icon_muted: Some(rgba(0xa79f9dff).into()), + icon_disabled: Some(rgba(0x8e8683ff).into()), + icon_placeholder: Some(rgba(0xa79f9dff).into()), + icon_accent: Some(rgba(0x417ee6ff).into()), + status_bar_background: Some(rgba(0x443c39ff).into()), + title_bar_background: Some(rgba(0x443c39ff).into()), + toolbar_background: Some(rgba(0x1b1918ff).into()), + tab_bar_background: Some(rgba(0x27211eff).into()), + tab_inactive_background: Some(rgba(0x27211eff).into()), + tab_active_background: Some(rgba(0x1b1918ff).into()), + scrollbar_thumb_background: Some(rgba(0xf1efee4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x3b3431ff).into()), + scrollbar_thumb_border: Some(rgba(0x3b3431ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xe9ebf7ff).into()), - editor_foreground: Some(rgba(0x293256ff).into()), - editor_background: Some(rgba(0xf5f7ffff).into()), - editor_gutter_background: Some(rgba(0xf5f7ffff).into()), - editor_subheader_background: Some(rgba(0xe5e8f5ff).into()), - editor_active_line_background: Some(rgba(0xe5e8f5bf).into()), - editor_highlighted_line_background: Some(rgba(0xe5e8f5ff).into()), - editor_line_number: Some(rgba(0x20274659).into()), - editor_active_line_number: Some(rgba(0x202746ff).into()), - editor_invisible: Some(rgba(0x606889ff).into()), - editor_wrap_guide: Some(rgba(0x2027460d).into()), - editor_active_wrap_guide: Some(rgba(0x2027461a).into()), - editor_document_highlight_read_background: Some(rgba(0x3f8fd01a).into()), - editor_document_highlight_write_background: Some(rgba(0x7a819c66).into()), - terminal_background: Some(rgba(0xf5f7ffff).into()), - terminal_ansi_bright_black: Some(rgba(0x8b91a7ff).into()), - terminal_ansi_bright_red: Some(rgba(0xefa58cff).into()), - terminal_ansi_bright_green: Some(rgba(0xd9ca9bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe5c497ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa9c6e8ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xcfafbbff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa4d0e4ff).into()), - terminal_ansi_bright_white: Some(rgba(0x202746ff).into()), - terminal_ansi_black: Some(rgba(0xf5f7ffff).into()), - terminal_ansi_red: Some(rgba(0xc94a23ff).into()), - terminal_ansi_green: Some(rgba(0xac973aff).into()), - terminal_ansi_yellow: Some(rgba(0xc08b31ff).into()), - terminal_ansi_blue: Some(rgba(0x3f8fd0ff).into()), - terminal_ansi_magenta: Some(rgba(0x9c637aff).into()), - terminal_ansi_cyan: Some(rgba(0x25a2c9ff).into()), - terminal_ansi_white: Some(rgba(0x202746ff).into()), - link_text_hover: Some(rgba(0x3f8fd0ff).into()), + scrollbar_track_border: Some(rgba(0x251f1dff).into()), + editor_foreground: Some(rgba(0xe6e2e0ff).into()), + editor_background: Some(rgba(0x1b1918ff).into()), + editor_gutter_background: Some(rgba(0x1b1918ff).into()), + editor_subheader_background: Some(rgba(0x27211eff).into()), + editor_active_line_background: Some(rgba(0x27211ebf).into()), + editor_highlighted_line_background: Some(rgba(0x27211eff).into()), + editor_line_number: Some(rgba(0xf1efee59).into()), + editor_active_line_number: Some(rgba(0xf1efeeff).into()), + editor_invisible: Some(rgba(0xa79f9dff).into()), + editor_wrap_guide: Some(rgba(0xf1efee0d).into()), + editor_active_wrap_guide: Some(rgba(0xf1efee1a).into()), + editor_document_highlight_read_background: Some(rgba(0x417ee61a).into()), + editor_document_highlight_write_background: Some(rgba(0x89817e66).into()), + terminal_background: Some(rgba(0x1b1918ff).into()), + terminal_ansi_bright_black: Some(rgba(0x746c69ff).into()), + terminal_ansi_bright_red: Some(rgba(0x8c1223ff).into()), + terminal_ansi_bright_green: Some(rgba(0x3e491aff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x674115ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x213f78ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x662186ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x264958ff).into()), + terminal_ansi_bright_white: Some(rgba(0xf1efeeff).into()), + terminal_ansi_black: Some(rgba(0x1b1918ff).into()), + terminal_ansi_red: Some(rgba(0xf22d40ff).into()), + terminal_ansi_green: Some(rgba(0x7b9727ff).into()), + terminal_ansi_yellow: Some(rgba(0xc38419ff).into()), + terminal_ansi_blue: Some(rgba(0x417ee6ff).into()), + terminal_ansi_magenta: Some(rgba(0xc340f2ff).into()), + terminal_ansi_cyan: Some(rgba(0x3e97b8ff).into()), + terminal_ansi_white: Some(rgba(0xf1efeeff).into()), + link_text_hover: Some(rgba(0x417ee6ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xc08b31ff).into()), - conflict_background: Some(rgba(0xf6e6d4ff).into()), - conflict_border: Some(rgba(0xeed4b3ff).into()), - created: Some(rgba(0xac973aff).into()), - created_background: Some(rgba(0xf1e9d6ff).into()), - created_border: Some(rgba(0xe4d8b7ff).into()), - deleted: Some(rgba(0xc94a23ff).into()), - deleted_background: Some(rgba(0xfcdad0ff).into()), - deleted_border: Some(rgba(0xf6beabff).into()), - error: Some(rgba(0xc94a23ff).into()), - error_background: Some(rgba(0xfcdad0ff).into()), - error_border: Some(rgba(0xf6beabff).into()), - hidden: Some(rgba(0x767d9aff).into()), - hidden_background: Some(rgba(0xc2c6d9ff).into()), - hidden_border: Some(rgba(0xaeb3c7ff).into()), - hint: Some(rgba(0x7087b2ff).into()), - hint_background: Some(rgba(0xdde7f6ff).into()), - hint_border: Some(rgba(0xc2d5efff).into()), - ignored: Some(rgba(0x606889ff).into()), - ignored_background: Some(rgba(0xc2c6d9ff).into()), - ignored_border: Some(rgba(0x9a9fb6ff).into()), - info: Some(rgba(0x3f8fd0ff).into()), - info_background: Some(rgba(0xdde7f6ff).into()), - info_border: Some(rgba(0xc2d5efff).into()), - modified: Some(rgba(0xc08b31ff).into()), - modified_background: Some(rgba(0xf6e6d4ff).into()), - modified_border: Some(rgba(0xeed4b3ff).into()), - predictive: Some(rgba(0x8599beff).into()), - predictive_background: Some(rgba(0xf1e9d6ff).into()), - predictive_border: Some(rgba(0xe4d8b7ff).into()), - renamed: Some(rgba(0x3f8fd0ff).into()), - renamed_background: Some(rgba(0xdde7f6ff).into()), - renamed_border: Some(rgba(0xc2d5efff).into()), - success: Some(rgba(0xac973aff).into()), - success_background: Some(rgba(0xf1e9d6ff).into()), - success_border: Some(rgba(0xe4d8b7ff).into()), - unreachable: Some(rgba(0x606889ff).into()), - unreachable_background: Some(rgba(0xc2c6d9ff).into()), - unreachable_border: Some(rgba(0x9a9fb6ff).into()), - warning: Some(rgba(0xc08b31ff).into()), - warning_background: Some(rgba(0xf6e6d4ff).into()), - warning_border: Some(rgba(0xeed4b3ff).into()), + conflict: Some(rgba(0xc38419ff).into()), + conflict_background: Some(rgba(0x371d0dff).into()), + conflict_border: Some(rgba(0x4f2f12ff).into()), + created: Some(rgba(0x7b9727ff).into()), + created_background: Some(rgba(0x1d2110ff).into()), + created_border: Some(rgba(0x2e3516ff).into()), + deleted: Some(rgba(0xf22d40ff).into()), + deleted_background: Some(rgba(0x550512ff).into()), + deleted_border: Some(rgba(0x710c1bff).into()), + error: Some(rgba(0xf22d40ff).into()), + error_background: Some(rgba(0x550512ff).into()), + error_border: Some(rgba(0x710c1bff).into()), + hidden: Some(rgba(0x8e8683ff).into()), + hidden_background: Some(rgba(0x443c39ff).into()), + hidden_border: Some(rgba(0x554e4bff).into()), + hint: Some(rgba(0xa87187ff).into()), + hint_background: Some(rgba(0x0f1d3dff).into()), + hint_border: Some(rgba(0x192e5bff).into()), + ignored: Some(rgba(0xa79f9dff).into()), + ignored_background: Some(rgba(0x443c39ff).into()), + ignored_border: Some(rgba(0x665f5cff).into()), + info: Some(rgba(0x417ee6ff).into()), + info_background: Some(rgba(0x0f1d3dff).into()), + info_border: Some(rgba(0x192e5bff).into()), + modified: Some(rgba(0xc38419ff).into()), + modified_background: Some(rgba(0x371d0dff).into()), + modified_border: Some(rgba(0x4f2f12ff).into()), + predictive: Some(rgba(0x8f5b71ff).into()), + predictive_background: Some(rgba(0x1d2110ff).into()), + predictive_border: Some(rgba(0x2e3516ff).into()), + renamed: Some(rgba(0x417ee6ff).into()), + renamed_background: Some(rgba(0x0f1d3dff).into()), + renamed_border: Some(rgba(0x192e5bff).into()), + success: Some(rgba(0x7b9727ff).into()), + success_background: Some(rgba(0x1d2110ff).into()), + success_border: Some(rgba(0x2e3516ff).into()), + unreachable: Some(rgba(0xa79f9dff).into()), + unreachable_background: Some(rgba(0x443c39ff).into()), + unreachable_border: Some(rgba(0x665f5cff).into()), + warning: Some(rgba(0xc38419ff).into()), + warning_background: Some(rgba(0x371d0dff).into()), + warning_border: Some(rgba(0x4f2f12ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x3f8fd0ff).into(), - background: rgba(0x3f8fd0ff).into(), - selection: rgba(0x3f8fd03d).into(), + cursor: rgba(0x417ee6ff).into(), + background: rgba(0x417ee6ff).into(), + selection: rgba(0x417ee63d).into(), }, PlayerColor { - cursor: rgba(0x9c637aff).into(), - background: rgba(0x9c637aff).into(), - selection: rgba(0x9c637a3d).into(), + cursor: rgba(0xc340f2ff).into(), + background: rgba(0xc340f2ff).into(), + selection: rgba(0xc340f23d).into(), }, PlayerColor { - cursor: rgba(0xc76b2aff).into(), - background: rgba(0xc76b2aff).into(), - selection: rgba(0xc76b2a3d).into(), + cursor: rgba(0xdf5321ff).into(), + background: rgba(0xdf5321ff).into(), + selection: rgba(0xdf53213d).into(), }, PlayerColor { - cursor: rgba(0x6779ccff).into(), - background: rgba(0x6779ccff).into(), - selection: rgba(0x6779cc3d).into(), + cursor: rgba(0x6666e9ff).into(), + background: rgba(0x6666e9ff).into(), + selection: rgba(0x6666e93d).into(), }, PlayerColor { - cursor: rgba(0x25a2c9ff).into(), - background: rgba(0x25a2c9ff).into(), - selection: rgba(0x25a2c93d).into(), + cursor: rgba(0x3e97b8ff).into(), + background: rgba(0x3e97b8ff).into(), + selection: rgba(0x3e97b83d).into(), }, PlayerColor { - cursor: rgba(0xc94a23ff).into(), - background: rgba(0xc94a23ff).into(), - selection: rgba(0xc94a233d).into(), + cursor: rgba(0xf22d40ff).into(), + background: rgba(0xf22d40ff).into(), + selection: rgba(0xf22d403d).into(), }, PlayerColor { - cursor: rgba(0xc08b31ff).into(), - background: rgba(0xc08b31ff).into(), - selection: rgba(0xc08b313d).into(), + cursor: rgba(0xc38419ff).into(), + background: rgba(0xc38419ff).into(), + selection: rgba(0xc384193d).into(), }, PlayerColor { - cursor: rgba(0xac973aff).into(), - background: rgba(0xac973aff).into(), - selection: rgba(0xac973a3d).into(), + cursor: rgba(0x7b9727ff).into(), + background: rgba(0x7b9727ff).into(), + selection: rgba(0x7b97273d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -2977,63 +2977,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x3f8fd0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xac973aff).into()), + color: Some(rgba(0x7b9727ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x898ea4ff).into()), + color: Some(rgba(0x766e6bff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x5e6687ff).into()), + color: Some(rgba(0xa8a19fff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0xac973aff).into()), + color: Some(rgba(0x7b9727ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x3f8fd0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x202746ff).into()), + color: Some(rgba(0xf1efeeff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x3f8fd0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x3f8fd0ff).into()), + color: Some(rgba(0x417ee6ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -3041,35 +3041,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xc76b2aff).into()), + color: Some(rgba(0xdf5321ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x3d8fd1ff).into()), + color: Some(rgba(0x407ee7ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x3d8fd1ff).into()), + color: Some(rgba(0x407ee7ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xc08b30ff).into()), + color: Some(rgba(0xc38418ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x7087b2ff).into()), + color: Some(rgba(0xa87187ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -3077,21 +3077,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x6679ccff).into()), + color: Some(rgba(0x6666eaff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x3f8fd0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xc76b2aff).into()), + color: Some(rgba(0xdf5321ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -3099,28 +3099,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0xac973aff).into()), + color: Some(rgba(0x7b9727ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xc76b29ff).into()), + color: Some(rgba(0xdf5320ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x5e6687ff).into()), + color: Some(rgba(0xa8a19fff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x8599beff).into()), + color: Some(rgba(0x8f5b71ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -3128,112 +3128,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x202746ff).into()), + color: Some(rgba(0xf1efeeff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x293256ff).into()), + color: Some(rgba(0xe6e2e0ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xc94922ff).into()), + color: Some(rgba(0xf22c40ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x293256ff).into()), + color: Some(rgba(0xe6e2e0ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x5e6687ff).into()), + color: Some(rgba(0xa8a19fff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x5e6687ff).into()), + color: Some(rgba(0xa8a19fff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x293256ff).into()), + color: Some(rgba(0xe6e2e0ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x9c637aff).into()), + color: Some(rgba(0xc33ff3ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xac9739ff).into()), + color: Some(rgba(0x7b9726ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x5e6687ff).into()), + color: Some(rgba(0xa8a19fff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x22a2c9ff).into()), + color: Some(rgba(0x3d97b8ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x9c637aff).into()), + color: Some(rgba(0xc33ff3ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0xac9739ff).into()), + color: Some(rgba(0x7b9726ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x3f8fd0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xc76b2aff).into()), + color: Some(rgba(0xdf5321ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x202746ff).into()), + color: Some(rgba(0xf1efeeff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -3241,28 +3241,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xc08b30ff).into()), + color: Some(rgba(0xc38418ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x293256ff).into()), + color: Some(rgba(0xe6e2e0ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x6679ccff).into()), + color: Some(rgba(0x6666eaff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xc08b30ff).into()), + color: Some(rgba(0xc38418ff).into()), ..Default::default() }, ), @@ -3271,170 +3271,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Dune Dark".into(), - appearance: Appearance::Dark, + name: "Atelier Forest Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x6c695cff).into()), - border_variant: Some(rgba(0x3b3933ff).into()), - border_focused: Some(rgba(0x263056ff).into()), - border_selected: Some(rgba(0x263056ff).into()), - border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x58564bff).into()), - elevated_surface_background: Some(rgba(0x262622ff).into()), - surface_background: Some(rgba(0x262622ff).into()), - background: Some(rgba(0x45433bff).into()), - panel_background: Some(rgba(0x262622ff).into()), - element_background: Some(rgba(0x262622ff).into()), - element_hover: Some(rgba(0x3b3933ff).into()), - element_active: Some(rgba(0x6a675aff).into()), - element_selected: Some(rgba(0x6a675aff).into()), - element_disabled: Some(rgba(0x262622ff).into()), - drop_target_background: Some(rgba(0xa4a08b80).into()), + border: Some(rgba(0xaaa3a1ff).into()), + border_variant: Some(rgba(0xd6d1cfff).into()), + border_focused: Some(rgba(0xc6cef7ff).into()), + border_selected: Some(rgba(0xc6cef7ff).into()), + border_transparent: Some(rgba(0x00000000).into()), + border_disabled: Some(rgba(0xbcb6b4ff).into()), + elevated_surface_background: Some(rgba(0xe9e6e4ff).into()), + surface_background: Some(rgba(0xe9e6e4ff).into()), + background: Some(rgba(0xcdc8c6ff).into()), + panel_background: Some(rgba(0xe9e6e4ff).into()), + element_background: Some(rgba(0xe9e6e4ff).into()), + element_hover: Some(rgba(0xd6d1cfff).into()), + element_active: Some(rgba(0xaca5a3ff).into()), + element_selected: Some(rgba(0xaca5a3ff).into()), + element_disabled: Some(rgba(0xe9e6e4ff).into()), + drop_target_background: Some(rgba(0x6a636080).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x3b3933ff).into()), - ghost_element_active: Some(rgba(0x6a675aff).into()), - ghost_element_selected: Some(rgba(0x6a675aff).into()), - ghost_element_disabled: Some(rgba(0x262622ff).into()), - text: Some(rgba(0xfefbecff).into()), - text_muted: Some(rgba(0xa4a08bff).into()), - text_placeholder: Some(rgba(0x8f8b77ff).into()), - text_disabled: Some(rgba(0x8f8b77ff).into()), - text_accent: Some(rgba(0x6684e0ff).into()), - icon: Some(rgba(0xfefbecff).into()), - icon_muted: Some(rgba(0xa4a08bff).into()), - icon_disabled: Some(rgba(0x8f8b77ff).into()), - icon_placeholder: Some(rgba(0xa4a08bff).into()), - icon_accent: Some(rgba(0x6684e0ff).into()), - status_bar_background: Some(rgba(0x45433bff).into()), - title_bar_background: Some(rgba(0x45433bff).into()), - toolbar_background: Some(rgba(0x20201dff).into()), - tab_bar_background: Some(rgba(0x262622ff).into()), - tab_inactive_background: Some(rgba(0x262622ff).into()), - tab_active_background: Some(rgba(0x20201dff).into()), - scrollbar_thumb_background: Some(rgba(0xfefbec4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x3b3933ff).into()), - scrollbar_thumb_border: Some(rgba(0x3b3933ff).into()), + ghost_element_hover: Some(rgba(0xd6d1cfff).into()), + ghost_element_active: Some(rgba(0xaca5a3ff).into()), + ghost_element_selected: Some(rgba(0xaca5a3ff).into()), + ghost_element_disabled: Some(rgba(0xe9e6e4ff).into()), + text: Some(rgba(0x1b1918ff).into()), + text_muted: Some(rgba(0x6a6360ff).into()), + text_placeholder: Some(rgba(0x847c79ff).into()), + text_disabled: Some(rgba(0x847c79ff).into()), + text_accent: Some(rgba(0x417ee6ff).into()), + icon: Some(rgba(0x1b1918ff).into()), + icon_muted: Some(rgba(0x6a6360ff).into()), + icon_disabled: Some(rgba(0x847c79ff).into()), + icon_placeholder: Some(rgba(0x6a6360ff).into()), + icon_accent: Some(rgba(0x417ee6ff).into()), + status_bar_background: Some(rgba(0xcdc8c6ff).into()), + title_bar_background: Some(rgba(0xcdc8c6ff).into()), + toolbar_background: Some(rgba(0xf1efeeff).into()), + tab_bar_background: Some(rgba(0xe9e6e4ff).into()), + tab_inactive_background: Some(rgba(0xe9e6e4ff).into()), + tab_active_background: Some(rgba(0xf1efeeff).into()), + scrollbar_thumb_background: Some(rgba(0x1b19184c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xd6d1cfff).into()), + scrollbar_thumb_border: Some(rgba(0xd6d1cfff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x252521ff).into()), - editor_foreground: Some(rgba(0xe8e4cfff).into()), - editor_background: Some(rgba(0x20201dff).into()), - editor_gutter_background: Some(rgba(0x20201dff).into()), - editor_subheader_background: Some(rgba(0x262622ff).into()), - editor_active_line_background: Some(rgba(0x262622bf).into()), - editor_highlighted_line_background: Some(rgba(0x262622ff).into()), - editor_line_number: Some(rgba(0xfefbec59).into()), - editor_active_line_number: Some(rgba(0xfefbecff).into()), - editor_invisible: Some(rgba(0xa4a08bff).into()), - editor_wrap_guide: Some(rgba(0xfefbec0d).into()), - editor_active_wrap_guide: Some(rgba(0xfefbec1a).into()), - editor_document_highlight_read_background: Some(rgba(0x6684e01a).into()), - editor_document_highlight_write_background: Some(rgba(0x8b887466).into()), - terminal_background: Some(rgba(0x20201dff).into()), - terminal_ansi_bright_black: Some(rgba(0x7a7766ff).into()), - terminal_ansi_bright_red: Some(rgba(0x781c1fff).into()), - terminal_ansi_bright_green: Some(rgba(0x335322ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x574815ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x334173ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x721d2bff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1e5341ff).into()), - terminal_ansi_bright_white: Some(rgba(0xfefbecff).into()), - terminal_ansi_black: Some(rgba(0x20201dff).into()), - terminal_ansi_red: Some(rgba(0xd73837ff).into()), - terminal_ansi_green: Some(rgba(0x60ac3aff).into()), - terminal_ansi_yellow: Some(rgba(0xae9515ff).into()), - terminal_ansi_blue: Some(rgba(0x6684e0ff).into()), - terminal_ansi_magenta: Some(rgba(0xd43652ff).into()), - terminal_ansi_cyan: Some(rgba(0x21ad83ff).into()), - terminal_ansi_white: Some(rgba(0xfefbecff).into()), - link_text_hover: Some(rgba(0x6684e0ff).into()), + scrollbar_track_border: Some(rgba(0xebe8e6ff).into()), + editor_foreground: Some(rgba(0x2c2421ff).into()), + editor_background: Some(rgba(0xf1efeeff).into()), + editor_gutter_background: Some(rgba(0xf1efeeff).into()), + editor_subheader_background: Some(rgba(0xe9e6e4ff).into()), + editor_active_line_background: Some(rgba(0xe9e6e4bf).into()), + editor_highlighted_line_background: Some(rgba(0xe9e6e4ff).into()), + editor_line_number: Some(rgba(0x1b191859).into()), + editor_active_line_number: Some(rgba(0x1b1918ff).into()), + editor_invisible: Some(rgba(0x6a6360ff).into()), + editor_wrap_guide: Some(rgba(0x1b19180d).into()), + editor_active_wrap_guide: Some(rgba(0x1b19181a).into()), + editor_document_highlight_read_background: Some(rgba(0x417ee61a).into()), + editor_document_highlight_write_background: Some(rgba(0x89817e66).into()), + terminal_background: Some(rgba(0xf1efeeff).into()), + terminal_ansi_bright_black: Some(rgba(0x9e9693ff).into()), + terminal_ansi_bright_red: Some(rgba(0xffa29aff).into()), + terminal_ansi_bright_green: Some(rgba(0xbfca93ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe9c08eff).into()), + terminal_ansi_bright_blue: Some(rgba(0xaebcf4ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe7a6fbff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa6cadbff).into()), + terminal_ansi_bright_white: Some(rgba(0x1b1918ff).into()), + terminal_ansi_black: Some(rgba(0xf1efeeff).into()), + terminal_ansi_red: Some(rgba(0xf22e41ff).into()), + terminal_ansi_green: Some(rgba(0x7b9728ff).into()), + terminal_ansi_yellow: Some(rgba(0xc3841aff).into()), + terminal_ansi_blue: Some(rgba(0x417ee6ff).into()), + terminal_ansi_magenta: Some(rgba(0xc340f2ff).into()), + terminal_ansi_cyan: Some(rgba(0x3f97b8ff).into()), + terminal_ansi_white: Some(rgba(0x1b1918ff).into()), + link_text_hover: Some(rgba(0x417ee6ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xae9515ff).into()), - conflict_background: Some(rgba(0x2a200eff).into()), - conflict_border: Some(rgba(0x413513ff).into()), - created: Some(rgba(0x60ac3aff).into()), - created_background: Some(rgba(0x1a2413ff).into()), - created_border: Some(rgba(0x273c1bff).into()), - deleted: Some(rgba(0xd73837ff).into()), - deleted_background: Some(rgba(0x450d11ff).into()), - deleted_border: Some(rgba(0x5f1519ff).into()), - error: Some(rgba(0xd73837ff).into()), - error_background: Some(rgba(0x450d11ff).into()), - error_border: Some(rgba(0x5f1519ff).into()), - hidden: Some(rgba(0x8f8b77ff).into()), - hidden_background: Some(rgba(0x45433bff).into()), - hidden_border: Some(rgba(0x58564bff).into()), - hint: Some(rgba(0xb17272ff).into()), - hint_background: Some(rgba(0x171e39ff).into()), - hint_border: Some(rgba(0x263056ff).into()), - ignored: Some(rgba(0xa4a08bff).into()), - ignored_background: Some(rgba(0x45433bff).into()), - ignored_border: Some(rgba(0x6c695cff).into()), - info: Some(rgba(0x6684e0ff).into()), - info_background: Some(rgba(0x171e39ff).into()), - info_border: Some(rgba(0x263056ff).into()), - modified: Some(rgba(0xae9515ff).into()), - modified_background: Some(rgba(0x2a200eff).into()), - modified_border: Some(rgba(0x413513ff).into()), - predictive: Some(rgba(0x9c6262ff).into()), - predictive_background: Some(rgba(0x1a2413ff).into()), - predictive_border: Some(rgba(0x273c1bff).into()), - renamed: Some(rgba(0x6684e0ff).into()), - renamed_background: Some(rgba(0x171e39ff).into()), - renamed_border: Some(rgba(0x263056ff).into()), - success: Some(rgba(0x60ac3aff).into()), - success_background: Some(rgba(0x1a2413ff).into()), - success_border: Some(rgba(0x273c1bff).into()), - unreachable: Some(rgba(0xa4a08bff).into()), - unreachable_background: Some(rgba(0x45433bff).into()), - unreachable_border: Some(rgba(0x6c695cff).into()), - warning: Some(rgba(0xae9515ff).into()), - warning_background: Some(rgba(0x2a200eff).into()), - warning_border: Some(rgba(0x413513ff).into()), + conflict: Some(rgba(0xc3841aff).into()), + conflict_background: Some(rgba(0xf8e5d1ff).into()), + conflict_border: Some(rgba(0xf0d1adff).into()), + created: Some(rgba(0x7b9728ff).into()), + created_background: Some(rgba(0xe5e9d3ff).into()), + created_border: Some(rgba(0xd1d8b1ff).into()), + deleted: Some(rgba(0xf22e41ff).into()), + deleted_background: Some(rgba(0xffdad5ff).into()), + deleted_border: Some(rgba(0xffbdb6ff).into()), + error: Some(rgba(0xf22e41ff).into()), + error_background: Some(rgba(0xffdad5ff).into()), + error_border: Some(rgba(0xffbdb6ff).into()), + hidden: Some(rgba(0x847c79ff).into()), + hidden_background: Some(rgba(0xcdc8c6ff).into()), + hidden_border: Some(rgba(0xbcb6b4ff).into()), + hint: Some(rgba(0xa67287ff).into()), + hint_background: Some(rgba(0xdfe3fbff).into()), + hint_border: Some(rgba(0xc6cef7ff).into()), + ignored: Some(rgba(0x6a6360ff).into()), + ignored_background: Some(rgba(0xcdc8c6ff).into()), + ignored_border: Some(rgba(0xaaa3a1ff).into()), + info: Some(rgba(0x417ee6ff).into()), + info_background: Some(rgba(0xdfe3fbff).into()), + info_border: Some(rgba(0xc6cef7ff).into()), + modified: Some(rgba(0xc3841aff).into()), + modified_background: Some(rgba(0xf8e5d1ff).into()), + modified_border: Some(rgba(0xf0d1adff).into()), + predictive: Some(rgba(0xbe899eff).into()), + predictive_background: Some(rgba(0xe5e9d3ff).into()), + predictive_border: Some(rgba(0xd1d8b1ff).into()), + renamed: Some(rgba(0x417ee6ff).into()), + renamed_background: Some(rgba(0xdfe3fbff).into()), + renamed_border: Some(rgba(0xc6cef7ff).into()), + success: Some(rgba(0x7b9728ff).into()), + success_background: Some(rgba(0xe5e9d3ff).into()), + success_border: Some(rgba(0xd1d8b1ff).into()), + unreachable: Some(rgba(0x6a6360ff).into()), + unreachable_background: Some(rgba(0xcdc8c6ff).into()), + unreachable_border: Some(rgba(0xaaa3a1ff).into()), + warning: Some(rgba(0xc3841aff).into()), + warning_background: Some(rgba(0xf8e5d1ff).into()), + warning_border: Some(rgba(0xf0d1adff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x6684e0ff).into(), - background: rgba(0x6684e0ff).into(), - selection: rgba(0x6684e03d).into(), + cursor: rgba(0x417ee6ff).into(), + background: rgba(0x417ee6ff).into(), + selection: rgba(0x417ee63d).into(), }, PlayerColor { - cursor: rgba(0xd43652ff).into(), - background: rgba(0xd43652ff).into(), - selection: rgba(0xd436523d).into(), + cursor: rgba(0xc340f2ff).into(), + background: rgba(0xc340f2ff).into(), + selection: rgba(0xc340f23d).into(), }, PlayerColor { - cursor: rgba(0xb65612ff).into(), - background: rgba(0xb65612ff).into(), - selection: rgba(0xb656123d).into(), + cursor: rgba(0xdf5421ff).into(), + background: rgba(0xdf5421ff).into(), + selection: rgba(0xdf54213d).into(), }, PlayerColor { - cursor: rgba(0xb854d3ff).into(), - background: rgba(0xb854d3ff).into(), - selection: rgba(0xb854d33d).into(), + cursor: rgba(0x6766e9ff).into(), + background: rgba(0x6766e9ff).into(), + selection: rgba(0x6766e93d).into(), }, PlayerColor { - cursor: rgba(0x21ad83ff).into(), - background: rgba(0x21ad83ff).into(), - selection: rgba(0x21ad833d).into(), + cursor: rgba(0x3f97b8ff).into(), + background: rgba(0x3f97b8ff).into(), + selection: rgba(0x3f97b83d).into(), }, PlayerColor { - cursor: rgba(0xd73837ff).into(), - background: rgba(0xd73837ff).into(), - selection: rgba(0xd738373d).into(), + cursor: rgba(0xf22e41ff).into(), + background: rgba(0xf22e41ff).into(), + selection: rgba(0xf22e413d).into(), }, PlayerColor { - cursor: rgba(0xae9515ff).into(), - background: rgba(0xae9515ff).into(), - selection: rgba(0xae95153d).into(), + cursor: rgba(0xc3841aff).into(), + background: rgba(0xc3841aff).into(), + selection: rgba(0xc3841a3d).into(), }, - PlayerColor { - cursor: rgba(0x60ac3aff).into(), - background: rgba(0x60ac3aff).into(), - selection: rgba(0x60ac3a3d).into(), + PlayerColor { + cursor: rgba(0x7b9728ff).into(), + background: rgba(0x7b9728ff).into(), + selection: rgba(0x7b97283d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -3442,63 +3442,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x6684e0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x60ac3aff).into()), + color: Some(rgba(0x7b9728ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x7d7a68ff).into()), + color: Some(rgba(0x9c9491ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0xa6a28cff).into()), + color: Some(rgba(0x68615eff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x60ac3aff).into()), + color: Some(rgba(0x7b9728ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x6684e0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xfefbecff).into()), + color: Some(rgba(0x1b1918ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x6684e0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x6684e0ff).into()), + color: Some(rgba(0x417ee6ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -3506,35 +3506,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xb65612ff).into()), + color: Some(rgba(0xdf5421ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x6684e1ff).into()), + color: Some(rgba(0x407ee7ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x6684e1ff).into()), + color: Some(rgba(0x407ee7ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xae9513ff).into()), + color: Some(rgba(0xc38418ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0xb17272ff).into()), + color: Some(rgba(0xa67287ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -3542,21 +3542,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0xb854d4ff).into()), + color: Some(rgba(0x6666eaff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x6684e0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xb65612ff).into()), + color: Some(rgba(0xdf5421ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -3564,28 +3564,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x60ac3aff).into()), + color: Some(rgba(0x7b9728ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xb65611ff).into()), + color: Some(rgba(0xdf5320ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0xa6a28cff).into()), + color: Some(rgba(0x68615eff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x9c6262ff).into()), + color: Some(rgba(0xbe899eff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -3593,112 +3593,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xfefbecff).into()), + color: Some(rgba(0x1b1918ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xe8e4cfff).into()), + color: Some(rgba(0x2c2421ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xd73737ff).into()), + color: Some(rgba(0xf22c40ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xe8e4cfff).into()), + color: Some(rgba(0x2c2421ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xa6a28cff).into()), + color: Some(rgba(0x68615eff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xa6a28cff).into()), + color: Some(rgba(0x68615eff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xe8e4cfff).into()), + color: Some(rgba(0x2c2421ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xd43552ff).into()), + color: Some(rgba(0xc33ff3ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x60ac39ff).into()), + color: Some(rgba(0x7b9726ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0xa6a28cff).into()), + color: Some(rgba(0x68615eff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x1fad83ff).into()), + color: Some(rgba(0x3d97b8ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xd43552ff).into()), + color: Some(rgba(0xc33ff3ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x60ac39ff).into()), + color: Some(rgba(0x7b9726ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x6684e0ff).into()), + color: Some(rgba(0x417ee6ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xb65612ff).into()), + color: Some(rgba(0xdf5421ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xfefbecff).into()), + color: Some(rgba(0x1b1918ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -3706,28 +3706,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xae9513ff).into()), + color: Some(rgba(0xc38418ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xe8e4cfff).into()), + color: Some(rgba(0x2c2421ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0xb854d4ff).into()), + color: Some(rgba(0x6666eaff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xae9513ff).into()), + color: Some(rgba(0xc38418ff).into()), ..Default::default() }, ), @@ -3736,170 +3736,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Seaside Dark".into(), + name: "Atelier Heath Dark".into(), appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x5c6c5cff).into()), - border_variant: Some(rgba(0x333b33ff).into()), - border_focused: Some(rgba(0x102668ff).into()), - border_selected: Some(rgba(0x102668ff).into()), + border: Some(rgba(0x675b67ff).into()), + border_variant: Some(rgba(0x393239ff).into()), + border_focused: Some(rgba(0x1a2961ff).into()), + border_selected: Some(rgba(0x1a2961ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x4b584bff).into()), - elevated_surface_background: Some(rgba(0x1f231fff).into()), - surface_background: Some(rgba(0x1f231fff).into()), - background: Some(rgba(0x3b453bff).into()), - panel_background: Some(rgba(0x1f231fff).into()), - element_background: Some(rgba(0x1f231fff).into()), - element_hover: Some(rgba(0x333b33ff).into()), - element_active: Some(rgba(0x5a6a5aff).into()), - element_selected: Some(rgba(0x5a6a5aff).into()), - element_disabled: Some(rgba(0x1f231fff).into()), - drop_target_background: Some(rgba(0x8ba48b80).into()), + border_disabled: Some(rgba(0x554a55ff).into()), + elevated_surface_background: Some(rgba(0x252025ff).into()), + surface_background: Some(rgba(0x252025ff).into()), + background: Some(rgba(0x433a43ff).into()), + panel_background: Some(rgba(0x252025ff).into()), + element_background: Some(rgba(0x252025ff).into()), + element_hover: Some(rgba(0x393239ff).into()), + element_active: Some(rgba(0x655965ff).into()), + element_selected: Some(rgba(0x655965ff).into()), + element_disabled: Some(rgba(0x252025ff).into()), + drop_target_background: Some(rgba(0xa99aa980).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x333b33ff).into()), - ghost_element_active: Some(rgba(0x5a6a5aff).into()), - ghost_element_selected: Some(rgba(0x5a6a5aff).into()), - ghost_element_disabled: Some(rgba(0x1f231fff).into()), - text: Some(rgba(0xf4fbf4ff).into()), - text_muted: Some(rgba(0x8ba48bff).into()), - text_placeholder: Some(rgba(0x778f77ff).into()), - text_disabled: Some(rgba(0x778f77ff).into()), - text_accent: Some(rgba(0x3e62f4ff).into()), - icon: Some(rgba(0xf4fbf4ff).into()), - icon_muted: Some(rgba(0x8ba48bff).into()), - icon_disabled: Some(rgba(0x778f77ff).into()), - icon_placeholder: Some(rgba(0x8ba48bff).into()), - icon_accent: Some(rgba(0x3e62f4ff).into()), - status_bar_background: Some(rgba(0x3b453bff).into()), - title_bar_background: Some(rgba(0x3b453bff).into()), - toolbar_background: Some(rgba(0x131513ff).into()), - tab_bar_background: Some(rgba(0x1f231fff).into()), - tab_inactive_background: Some(rgba(0x1f231fff).into()), - tab_active_background: Some(rgba(0x131513ff).into()), - scrollbar_thumb_background: Some(rgba(0xf4fbf44c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x333b33ff).into()), - scrollbar_thumb_border: Some(rgba(0x333b33ff).into()), + ghost_element_hover: Some(rgba(0x393239ff).into()), + ghost_element_active: Some(rgba(0x655965ff).into()), + ghost_element_selected: Some(rgba(0x655965ff).into()), + ghost_element_disabled: Some(rgba(0x252025ff).into()), + text: Some(rgba(0xf7f3f7ff).into()), + text_muted: Some(rgba(0xa99aa9ff).into()), + text_placeholder: Some(rgba(0x908190ff).into()), + text_disabled: Some(rgba(0x908190ff).into()), + text_accent: Some(rgba(0x526aebff).into()), + icon: Some(rgba(0xf7f3f7ff).into()), + icon_muted: Some(rgba(0xa99aa9ff).into()), + icon_disabled: Some(rgba(0x908190ff).into()), + icon_placeholder: Some(rgba(0xa99aa9ff).into()), + icon_accent: Some(rgba(0x526aebff).into()), + status_bar_background: Some(rgba(0x433a43ff).into()), + title_bar_background: Some(rgba(0x433a43ff).into()), + toolbar_background: Some(rgba(0x1b181bff).into()), + tab_bar_background: Some(rgba(0x252025ff).into()), + tab_inactive_background: Some(rgba(0x252025ff).into()), + tab_active_background: Some(rgba(0x1b181bff).into()), + scrollbar_thumb_background: Some(rgba(0xf7f3f74c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x393239ff).into()), + scrollbar_thumb_border: Some(rgba(0x393239ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x1d201dff).into()), - editor_foreground: Some(rgba(0xcfe8cfff).into()), - editor_background: Some(rgba(0x131513ff).into()), - editor_gutter_background: Some(rgba(0x131513ff).into()), - editor_subheader_background: Some(rgba(0x1f231fff).into()), - editor_active_line_background: Some(rgba(0x1f231fbf).into()), - editor_highlighted_line_background: Some(rgba(0x1f231fff).into()), - editor_line_number: Some(rgba(0xf4fbf459).into()), - editor_active_line_number: Some(rgba(0xf4fbf4ff).into()), - editor_invisible: Some(rgba(0x8ba48bff).into()), - editor_wrap_guide: Some(rgba(0xf4fbf40d).into()), - editor_active_wrap_guide: Some(rgba(0xf4fbf41a).into()), - editor_document_highlight_read_background: Some(rgba(0x3e62f41a).into()), - editor_document_highlight_write_background: Some(rgba(0x748b7466).into()), - terminal_background: Some(rgba(0x131513ff).into()), - terminal_ansi_bright_black: Some(rgba(0x667a66ff).into()), - terminal_ansi_bright_red: Some(rgba(0x840b21ff).into()), - terminal_ansi_bright_green: Some(rgba(0x204f1bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4b4a17ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x193385ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x810e60ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1d4a56ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf4fbf4ff).into()), - terminal_ansi_black: Some(rgba(0x131513ff).into()), - terminal_ansi_red: Some(rgba(0xe61c3cff).into()), - terminal_ansi_green: Some(rgba(0x2ba32aff).into()), - terminal_ansi_yellow: Some(rgba(0x98981cff).into()), - terminal_ansi_blue: Some(rgba(0x3e62f4ff).into()), - terminal_ansi_magenta: Some(rgba(0xe61cc3ff).into()), - terminal_ansi_cyan: Some(rgba(0x1c99b3ff).into()), - terminal_ansi_white: Some(rgba(0xf4fbf4ff).into()), - link_text_hover: Some(rgba(0x3e62f4ff).into()), - ..Default::default() - }, - status: StatusColorsRefinement { - conflict: Some(rgba(0x98981cff).into()), - conflict_background: Some(rgba(0x22210fff).into()), - conflict_border: Some(rgba(0x373614ff).into()), - created: Some(rgba(0x2ba32aff).into()), - created_background: Some(rgba(0x142310ff).into()), - created_border: Some(rgba(0x1b3917ff).into()), - deleted: Some(rgba(0xe61c3cff).into()), - deleted_background: Some(rgba(0x500412ff).into()), - deleted_border: Some(rgba(0x6b071aff).into()), - error: Some(rgba(0xe61c3cff).into()), - error_background: Some(rgba(0x500412ff).into()), - error_border: Some(rgba(0x6b071aff).into()), - hidden: Some(rgba(0x778f77ff).into()), - hidden_background: Some(rgba(0x3b453bff).into()), - hidden_border: Some(rgba(0x4b584bff).into()), - hint: Some(rgba(0x008b9fff).into()), - hint_background: Some(rgba(0x061949ff).into()), - hint_border: Some(rgba(0x102668ff).into()), - ignored: Some(rgba(0x8ba48bff).into()), - ignored_background: Some(rgba(0x3b453bff).into()), - ignored_border: Some(rgba(0x5c6c5cff).into()), - info: Some(rgba(0x3e62f4ff).into()), - info_background: Some(rgba(0x061949ff).into()), - info_border: Some(rgba(0x102668ff).into()), - modified: Some(rgba(0x98981cff).into()), - modified_background: Some(rgba(0x22210fff).into()), - modified_border: Some(rgba(0x373614ff).into()), - predictive: Some(rgba(0x00788bff).into()), - predictive_background: Some(rgba(0x142310ff).into()), - predictive_border: Some(rgba(0x1b3917ff).into()), - renamed: Some(rgba(0x3e62f4ff).into()), - renamed_background: Some(rgba(0x061949ff).into()), - renamed_border: Some(rgba(0x102668ff).into()), - success: Some(rgba(0x2ba32aff).into()), - success_background: Some(rgba(0x142310ff).into()), - success_border: Some(rgba(0x1b3917ff).into()), - unreachable: Some(rgba(0x8ba48bff).into()), - unreachable_background: Some(rgba(0x3b453bff).into()), - unreachable_border: Some(rgba(0x5c6c5cff).into()), - warning: Some(rgba(0x98981cff).into()), - warning_background: Some(rgba(0x22210fff).into()), - warning_border: Some(rgba(0x373614ff).into()), + scrollbar_track_border: Some(rgba(0x231e23ff).into()), + editor_foreground: Some(rgba(0xd8cad8ff).into()), + editor_background: Some(rgba(0x1b181bff).into()), + editor_gutter_background: Some(rgba(0x1b181bff).into()), + editor_subheader_background: Some(rgba(0x252025ff).into()), + editor_active_line_background: Some(rgba(0x252025bf).into()), + editor_highlighted_line_background: Some(rgba(0x252025ff).into()), + editor_line_number: Some(rgba(0xf7f3f759).into()), + editor_active_line_number: Some(rgba(0xf7f3f7ff).into()), + editor_invisible: Some(rgba(0xa99aa9ff).into()), + editor_wrap_guide: Some(rgba(0xf7f3f70d).into()), + editor_active_wrap_guide: Some(rgba(0xf7f3f71a).into()), + editor_document_highlight_read_background: Some(rgba(0x526aeb1a).into()), + editor_document_highlight_write_background: Some(rgba(0x8b7c8b66).into()), + terminal_background: Some(rgba(0x1b181bff).into()), + terminal_ansi_bright_black: Some(rgba(0x756775ff).into()), + terminal_ansi_bright_red: Some(rgba(0x6d221aff).into()), + terminal_ansi_bright_green: Some(rgba(0x474422ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x5e441fff).into()), + terminal_ansi_bright_blue: Some(rgba(0x26367eff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x6c1e67ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1a4848ff).into()), + terminal_ansi_bright_white: Some(rgba(0xf7f3f7ff).into()), + terminal_ansi_black: Some(rgba(0x1b181bff).into()), + terminal_ansi_red: Some(rgba(0xca402cff).into()), + terminal_ansi_green: Some(rgba(0x918b3bff).into()), + terminal_ansi_yellow: Some(rgba(0xbb8a36ff).into()), + terminal_ansi_blue: Some(rgba(0x526aebff).into()), + terminal_ansi_magenta: Some(rgba(0xcc34ccff).into()), + terminal_ansi_cyan: Some(rgba(0x189393ff).into()), + terminal_ansi_white: Some(rgba(0xf7f3f7ff).into()), + link_text_hover: Some(rgba(0x526aebff).into()), + ..Default::default() + }, + status: StatusColorsRefinement { + conflict: Some(rgba(0xbb8a36ff).into()), + conflict_background: Some(rgba(0x2d1e12ff).into()), + conflict_border: Some(rgba(0x463219ff).into()), + created: Some(rgba(0x918b3bff).into()), + created_background: Some(rgba(0x211f12ff).into()), + created_border: Some(rgba(0x34321bff).into()), + deleted: Some(rgba(0xca402cff).into()), + deleted_background: Some(rgba(0x3c110eff).into()), + deleted_border: Some(rgba(0x551a15ff).into()), + error: Some(rgba(0xca402cff).into()), + error_background: Some(rgba(0x3c110eff).into()), + error_border: Some(rgba(0x551a15ff).into()), + hidden: Some(rgba(0x908190ff).into()), + hidden_background: Some(rgba(0x433a43ff).into()), + hidden_border: Some(rgba(0x554a55ff).into()), + hint: Some(rgba(0x8d70a8ff).into()), + hint_background: Some(rgba(0x0e1a43ff).into()), + hint_border: Some(rgba(0x1a2961ff).into()), + ignored: Some(rgba(0xa99aa9ff).into()), + ignored_background: Some(rgba(0x433a43ff).into()), + ignored_border: Some(rgba(0x675b67ff).into()), + info: Some(rgba(0x526aebff).into()), + info_background: Some(rgba(0x0e1a43ff).into()), + info_border: Some(rgba(0x1a2961ff).into()), + modified: Some(rgba(0xbb8a36ff).into()), + modified_background: Some(rgba(0x2d1e12ff).into()), + modified_border: Some(rgba(0x463219ff).into()), + predictive: Some(rgba(0x765990ff).into()), + predictive_background: Some(rgba(0x211f12ff).into()), + predictive_border: Some(rgba(0x34321bff).into()), + renamed: Some(rgba(0x526aebff).into()), + renamed_background: Some(rgba(0x0e1a43ff).into()), + renamed_border: Some(rgba(0x1a2961ff).into()), + success: Some(rgba(0x918b3bff).into()), + success_background: Some(rgba(0x211f12ff).into()), + success_border: Some(rgba(0x34321bff).into()), + unreachable: Some(rgba(0xa99aa9ff).into()), + unreachable_background: Some(rgba(0x433a43ff).into()), + unreachable_border: Some(rgba(0x675b67ff).into()), + warning: Some(rgba(0xbb8a36ff).into()), + warning_background: Some(rgba(0x2d1e12ff).into()), + warning_border: Some(rgba(0x463219ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x3e62f4ff).into(), - background: rgba(0x3e62f4ff).into(), - selection: rgba(0x3e62f43d).into(), + cursor: rgba(0x526aebff).into(), + background: rgba(0x526aebff).into(), + selection: rgba(0x526aeb3d).into(), }, PlayerColor { - cursor: rgba(0xe61cc3ff).into(), - background: rgba(0xe61cc3ff).into(), - selection: rgba(0xe61cc33d).into(), + cursor: rgba(0xcc34ccff).into(), + background: rgba(0xcc34ccff).into(), + selection: rgba(0xcc34cc3d).into(), }, PlayerColor { - cursor: rgba(0x87711eff).into(), - background: rgba(0x87711eff).into(), - selection: rgba(0x87711e3d).into(), + cursor: rgba(0xa65927ff).into(), + background: rgba(0xa65927ff).into(), + selection: rgba(0xa659273d).into(), }, PlayerColor { - cursor: rgba(0xad2dedff).into(), - background: rgba(0xad2dedff).into(), - selection: rgba(0xad2ded3d).into(), + cursor: rgba(0x7b59c0ff).into(), + background: rgba(0x7b59c0ff).into(), + selection: rgba(0x7b59c03d).into(), }, PlayerColor { - cursor: rgba(0x1c99b3ff).into(), - background: rgba(0x1c99b3ff).into(), - selection: rgba(0x1c99b33d).into(), + cursor: rgba(0x189393ff).into(), + background: rgba(0x189393ff).into(), + selection: rgba(0x1893933d).into(), }, PlayerColor { - cursor: rgba(0xe61c3cff).into(), - background: rgba(0xe61c3cff).into(), - selection: rgba(0xe61c3c3d).into(), + cursor: rgba(0xca402cff).into(), + background: rgba(0xca402cff).into(), + selection: rgba(0xca402c3d).into(), }, PlayerColor { - cursor: rgba(0x98981cff).into(), - background: rgba(0x98981cff).into(), - selection: rgba(0x98981c3d).into(), + cursor: rgba(0xbb8a36ff).into(), + background: rgba(0xbb8a36ff).into(), + selection: rgba(0xbb8a363d).into(), }, PlayerColor { - cursor: rgba(0x2ba32aff).into(), - background: rgba(0x2ba32aff).into(), - selection: rgba(0x2ba32a3d).into(), + cursor: rgba(0x918b3bff).into(), + background: rgba(0x918b3bff).into(), + selection: rgba(0x918b3b3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -3907,63 +3907,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x3e62f4ff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x2ba32aff).into()), + color: Some(rgba(0x918b3bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x687d68ff).into()), + color: Some(rgba(0x776977ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x8ca68cff).into()), + color: Some(rgba(0xab9babff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x2ba32aff).into()), + color: Some(rgba(0x918b3bff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x3e62f4ff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xf4fbf4ff).into()), + color: Some(rgba(0xf7f3f7ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x3e62f4ff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x3e62f4ff).into()), + color: Some(rgba(0x526aebff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -3971,35 +3971,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0x87711eff).into()), + color: Some(rgba(0xa65927ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x3d62f5ff).into()), + color: Some(rgba(0x516aecff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x3d62f5ff).into()), + color: Some(rgba(0x516aecff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0x98981bff).into()), + color: Some(rgba(0xbb8a35ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x008b9fff).into()), + color: Some(rgba(0x8d70a8ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -4007,21 +4007,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0xad2beeff).into()), + color: Some(rgba(0x7b59c0ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x3e62f4ff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x87711eff).into()), + color: Some(rgba(0xa65927ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -4029,28 +4029,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x2ba32aff).into()), + color: Some(rgba(0x918b3bff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x87711dff).into()), + color: Some(rgba(0xa65926ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x8ca68cff).into()), + color: Some(rgba(0xab9babff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x00788bff).into()), + color: Some(rgba(0x765990ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -4058,112 +4058,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xf4fbf4ff).into()), + color: Some(rgba(0xf7f3f7ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xcfe8cfff).into()), + color: Some(rgba(0xd8cad8ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xe6193cff).into()), + color: Some(rgba(0xca402bff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xcfe8cfff).into()), + color: Some(rgba(0xd8cad8ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x8ca68cff).into()), + color: Some(rgba(0xab9babff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x8ca68cff).into()), + color: Some(rgba(0xab9babff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xcfe8cfff).into()), + color: Some(rgba(0xd8cad8ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xe619c3ff).into()), + color: Some(rgba(0xcc33ccff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x29a329ff).into()), + color: Some(rgba(0x918b3bff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x8ca68cff).into()), + color: Some(rgba(0xab9babff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x1999b3ff).into()), + color: Some(rgba(0x159393ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xe619c3ff).into()), + color: Some(rgba(0xcc33ccff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x29a329ff).into()), + color: Some(rgba(0x918b3bff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x3e62f4ff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x87711eff).into()), + color: Some(rgba(0xa65927ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xf4fbf4ff).into()), + color: Some(rgba(0xf7f3f7ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -4171,28 +4171,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0x98981bff).into()), + color: Some(rgba(0xbb8a35ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xcfe8cfff).into()), + color: Some(rgba(0xd8cad8ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0xad2beeff).into()), + color: Some(rgba(0x7b59c0ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x98981bff).into()), + color: Some(rgba(0xbb8a35ff).into()), ..Default::default() }, ), @@ -4201,170 +4201,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Cave Light".into(), + name: "Atelier Heath Light".into(), appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x8f8b96ff).into()), - border_variant: Some(rgba(0xcbc8d1ff).into()), - border_focused: Some(rgba(0xc9c8f3ff).into()), - border_selected: Some(rgba(0xc9c8f3ff).into()), + border: Some(rgba(0xad9dadff).into()), + border_variant: Some(rgba(0xcdbecdff).into()), + border_focused: Some(rgba(0xcac7faff).into()), + border_selected: Some(rgba(0xcac7faff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xa7a3adff).into()), - elevated_surface_background: Some(rgba(0xe6e3ebff).into()), - surface_background: Some(rgba(0xe6e3ebff).into()), - background: Some(rgba(0xbfbcc5ff).into()), - panel_background: Some(rgba(0xe6e3ebff).into()), - element_background: Some(rgba(0xe6e3ebff).into()), - element_hover: Some(rgba(0xcbc8d1ff).into()), - element_active: Some(rgba(0x918d98ff).into()), - element_selected: Some(rgba(0x918d98ff).into()), - element_disabled: Some(rgba(0xe6e3ebff).into()), - drop_target_background: Some(rgba(0x5a546280).into()), + border_disabled: Some(rgba(0xbaaabaff).into()), + elevated_surface_background: Some(rgba(0xe1d6e1ff).into()), + surface_background: Some(rgba(0xe1d6e1ff).into()), + background: Some(rgba(0xc6b8c6ff).into()), + panel_background: Some(rgba(0xe1d6e1ff).into()), + element_background: Some(rgba(0xe1d6e1ff).into()), + element_hover: Some(rgba(0xcdbecdff).into()), + element_active: Some(rgba(0xae9eaeff).into()), + element_selected: Some(rgba(0xae9eaeff).into()), + element_disabled: Some(rgba(0xe1d6e1ff).into()), + drop_target_background: Some(rgba(0x6b5e6b80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xcbc8d1ff).into()), - ghost_element_active: Some(rgba(0x918d98ff).into()), - ghost_element_selected: Some(rgba(0x918d98ff).into()), - ghost_element_disabled: Some(rgba(0xe6e3ebff).into()), - text: Some(rgba(0x19171cff).into()), - text_muted: Some(rgba(0x5a5462ff).into()), - text_placeholder: Some(rgba(0x6e6876ff).into()), - text_disabled: Some(rgba(0x6e6876ff).into()), - text_accent: Some(rgba(0x586ddaff).into()), - icon: Some(rgba(0x19171cff).into()), - icon_muted: Some(rgba(0x5a5462ff).into()), - icon_disabled: Some(rgba(0x6e6876ff).into()), - icon_placeholder: Some(rgba(0x5a5462ff).into()), - icon_accent: Some(rgba(0x586ddaff).into()), - status_bar_background: Some(rgba(0xbfbcc5ff).into()), - title_bar_background: Some(rgba(0xbfbcc5ff).into()), - toolbar_background: Some(rgba(0xefecf4ff).into()), - tab_bar_background: Some(rgba(0xe6e3ebff).into()), - tab_inactive_background: Some(rgba(0xe6e3ebff).into()), - tab_active_background: Some(rgba(0xefecf4ff).into()), - scrollbar_thumb_background: Some(rgba(0x19171c4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xcbc8d1ff).into()), - scrollbar_thumb_border: Some(rgba(0xcbc8d1ff).into()), + ghost_element_hover: Some(rgba(0xcdbecdff).into()), + ghost_element_active: Some(rgba(0xae9eaeff).into()), + ghost_element_selected: Some(rgba(0xae9eaeff).into()), + ghost_element_disabled: Some(rgba(0xe1d6e1ff).into()), + text: Some(rgba(0x1b181bff).into()), + text_muted: Some(rgba(0x6b5e6bff).into()), + text_placeholder: Some(rgba(0x857785ff).into()), + text_disabled: Some(rgba(0x857785ff).into()), + text_accent: Some(rgba(0x526aebff).into()), + icon: Some(rgba(0x1b181bff).into()), + icon_muted: Some(rgba(0x6b5e6bff).into()), + icon_disabled: Some(rgba(0x857785ff).into()), + icon_placeholder: Some(rgba(0x6b5e6bff).into()), + icon_accent: Some(rgba(0x526aebff).into()), + status_bar_background: Some(rgba(0xc6b8c6ff).into()), + title_bar_background: Some(rgba(0xc6b8c6ff).into()), + toolbar_background: Some(rgba(0xf7f3f7ff).into()), + tab_bar_background: Some(rgba(0xe1d6e1ff).into()), + tab_inactive_background: Some(rgba(0xe1d6e1ff).into()), + tab_active_background: Some(rgba(0xf7f3f7ff).into()), + scrollbar_thumb_background: Some(rgba(0x1b181b4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xcdbecdff).into()), + scrollbar_thumb_border: Some(rgba(0xcdbecdff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xe8e5edff).into()), - editor_foreground: Some(rgba(0x26232aff).into()), - editor_background: Some(rgba(0xefecf4ff).into()), - editor_gutter_background: Some(rgba(0xefecf4ff).into()), - editor_subheader_background: Some(rgba(0xe6e3ebff).into()), - editor_active_line_background: Some(rgba(0xe6e3ebbf).into()), - editor_highlighted_line_background: Some(rgba(0xe6e3ebff).into()), - editor_line_number: Some(rgba(0x19171c59).into()), - editor_active_line_number: Some(rgba(0x19171cff).into()), - editor_invisible: Some(rgba(0x5a5462ff).into()), - editor_wrap_guide: Some(rgba(0x19171c0d).into()), - editor_active_wrap_guide: Some(rgba(0x19171c1a).into()), - editor_document_highlight_read_background: Some(rgba(0x586dda1a).into()), - editor_document_highlight_write_background: Some(rgba(0x726c7a66).into()), - terminal_background: Some(rgba(0xefecf4ff).into()), - terminal_ansi_bright_black: Some(rgba(0x807b89ff).into()), - terminal_ansi_bright_red: Some(rgba(0xe3a4b9ff).into()), - terminal_ansi_bright_green: Some(rgba(0x9dc8c8ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb3b3eeff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe3a4dfff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa6c4e3ff).into()), - terminal_ansi_bright_white: Some(rgba(0x19171cff).into()), - terminal_ansi_black: Some(rgba(0xefecf4ff).into()), - terminal_ansi_red: Some(rgba(0xbe4778ff).into()), - terminal_ansi_green: Some(rgba(0x2c9292ff).into()), - terminal_ansi_yellow: Some(rgba(0xa06e3cff).into()), - terminal_ansi_blue: Some(rgba(0x586ddaff).into()), - terminal_ansi_magenta: Some(rgba(0xbf41bfff).into()), - terminal_ansi_cyan: Some(rgba(0x3b8bc6ff).into()), - terminal_ansi_white: Some(rgba(0x19171cff).into()), - link_text_hover: Some(rgba(0x586ddaff).into()), + scrollbar_track_border: Some(rgba(0xe5dce5ff).into()), + editor_foreground: Some(rgba(0x292329ff).into()), + editor_background: Some(rgba(0xf7f3f7ff).into()), + editor_gutter_background: Some(rgba(0xf7f3f7ff).into()), + editor_subheader_background: Some(rgba(0xe1d6e1ff).into()), + editor_active_line_background: Some(rgba(0xe1d6e1bf).into()), + editor_highlighted_line_background: Some(rgba(0xe1d6e1ff).into()), + editor_line_number: Some(rgba(0x1b181b59).into()), + editor_active_line_number: Some(rgba(0x1b181bff).into()), + editor_invisible: Some(rgba(0x6b5e6bff).into()), + editor_wrap_guide: Some(rgba(0x1b181b0d).into()), + editor_active_wrap_guide: Some(rgba(0x1b181b1a).into()), + editor_document_highlight_read_background: Some(rgba(0x526aeb1a).into()), + editor_document_highlight_write_background: Some(rgba(0x8b7c8b66).into()), + terminal_background: Some(rgba(0xf7f3f7ff).into()), + terminal_ansi_bright_black: Some(rgba(0xa091a0ff).into()), + terminal_ansi_bright_red: Some(rgba(0xf0a28fff).into()), + terminal_ansi_bright_green: Some(rgba(0xcac49aff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe2c398ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb4b2f7ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xeba2e6ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9ac9c8ff).into()), + terminal_ansi_bright_white: Some(rgba(0x1b181bff).into()), + terminal_ansi_black: Some(rgba(0xf7f3f7ff).into()), + terminal_ansi_red: Some(rgba(0xca412cff).into()), + terminal_ansi_green: Some(rgba(0x918b3cff).into()), + terminal_ansi_yellow: Some(rgba(0xbb8a36ff).into()), + terminal_ansi_blue: Some(rgba(0x526aebff).into()), + terminal_ansi_magenta: Some(rgba(0xcc35ccff).into()), + terminal_ansi_cyan: Some(rgba(0x199393ff).into()), + terminal_ansi_white: Some(rgba(0x1b181bff).into()), + link_text_hover: Some(rgba(0x526aebff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xa06e3cff).into()), - conflict_background: Some(rgba(0xeee0d5ff).into()), - conflict_border: Some(rgba(0xe0c9b5ff).into()), - created: Some(rgba(0x2c9292ff).into()), - created_background: Some(rgba(0xd7e9e8ff).into()), - created_border: Some(rgba(0xb9d7d6ff).into()), - deleted: Some(rgba(0xbe4778ff).into()), - deleted_background: Some(rgba(0xf5dae2ff).into()), - deleted_border: Some(rgba(0xecbecdff).into()), - error: Some(rgba(0xbe4778ff).into()), - error_background: Some(rgba(0xf5dae2ff).into()), - error_border: Some(rgba(0xecbecdff).into()), - hidden: Some(rgba(0x6e6876ff).into()), - hidden_background: Some(rgba(0xbfbcc5ff).into()), - hidden_border: Some(rgba(0xa7a3adff).into()), - hint: Some(rgba(0x786e9dff).into()), - hint_background: Some(rgba(0xe1e0f9ff).into()), - hint_border: Some(rgba(0xc9c8f3ff).into()), - ignored: Some(rgba(0x5a5462ff).into()), - ignored_background: Some(rgba(0xbfbcc5ff).into()), - ignored_border: Some(rgba(0x8f8b96ff).into()), - info: Some(rgba(0x586ddaff).into()), - info_background: Some(rgba(0xe1e0f9ff).into()), - info_border: Some(rgba(0xc9c8f3ff).into()), - modified: Some(rgba(0xa06e3cff).into()), - modified_background: Some(rgba(0xeee0d5ff).into()), - modified_border: Some(rgba(0xe0c9b5ff).into()), - predictive: Some(rgba(0x887fafff).into()), - predictive_background: Some(rgba(0xd7e9e8ff).into()), - predictive_border: Some(rgba(0xb9d7d6ff).into()), - renamed: Some(rgba(0x586ddaff).into()), - renamed_background: Some(rgba(0xe1e0f9ff).into()), - renamed_border: Some(rgba(0xc9c8f3ff).into()), - success: Some(rgba(0x2c9292ff).into()), - success_background: Some(rgba(0xd7e9e8ff).into()), - success_border: Some(rgba(0xb9d7d6ff).into()), - unreachable: Some(rgba(0x5a5462ff).into()), - unreachable_background: Some(rgba(0xbfbcc5ff).into()), - unreachable_border: Some(rgba(0x8f8b96ff).into()), - warning: Some(rgba(0xa06e3cff).into()), - warning_background: Some(rgba(0xeee0d5ff).into()), - warning_border: Some(rgba(0xe0c9b5ff).into()), + conflict: Some(rgba(0xbb8a36ff).into()), + conflict_background: Some(rgba(0xf5e6d5ff).into()), + conflict_border: Some(rgba(0xebd3b5ff).into()), + created: Some(rgba(0x918b3cff).into()), + created_background: Some(rgba(0xeae6d6ff).into()), + created_border: Some(rgba(0xd9d4b6ff).into()), + deleted: Some(rgba(0xca412cff).into()), + deleted_background: Some(rgba(0xfcd9d1ff).into()), + deleted_border: Some(rgba(0xf7bcaeff).into()), + error: Some(rgba(0xca412cff).into()), + error_background: Some(rgba(0xfcd9d1ff).into()), + error_border: Some(rgba(0xf7bcaeff).into()), + hidden: Some(rgba(0x857785ff).into()), + hidden_background: Some(rgba(0xc6b8c6ff).into()), + hidden_border: Some(rgba(0xbaaabaff).into()), + hint: Some(rgba(0x8c70a6ff).into()), + hint_background: Some(rgba(0xe2dffcff).into()), + hint_border: Some(rgba(0xcac7faff).into()), + ignored: Some(rgba(0x6b5e6bff).into()), + ignored_background: Some(rgba(0xc6b8c6ff).into()), + ignored_border: Some(rgba(0xad9dadff).into()), + info: Some(rgba(0x526aebff).into()), + info_background: Some(rgba(0xe2dffcff).into()), + info_border: Some(rgba(0xcac7faff).into()), + modified: Some(rgba(0xbb8a36ff).into()), + modified_background: Some(rgba(0xf5e6d5ff).into()), + modified_border: Some(rgba(0xebd3b5ff).into()), + predictive: Some(rgba(0xa587bfff).into()), + predictive_background: Some(rgba(0xeae6d6ff).into()), + predictive_border: Some(rgba(0xd9d4b6ff).into()), + renamed: Some(rgba(0x526aebff).into()), + renamed_background: Some(rgba(0xe2dffcff).into()), + renamed_border: Some(rgba(0xcac7faff).into()), + success: Some(rgba(0x918b3cff).into()), + success_background: Some(rgba(0xeae6d6ff).into()), + success_border: Some(rgba(0xd9d4b6ff).into()), + unreachable: Some(rgba(0x6b5e6bff).into()), + unreachable_background: Some(rgba(0xc6b8c6ff).into()), + unreachable_border: Some(rgba(0xad9dadff).into()), + warning: Some(rgba(0xbb8a36ff).into()), + warning_background: Some(rgba(0xf5e6d5ff).into()), + warning_border: Some(rgba(0xebd3b5ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x586ddaff).into(), - background: rgba(0x586ddaff).into(), - selection: rgba(0x586dda3d).into(), + cursor: rgba(0x526aebff).into(), + background: rgba(0x526aebff).into(), + selection: rgba(0x526aeb3d).into(), }, PlayerColor { - cursor: rgba(0xbf41bfff).into(), - background: rgba(0xbf41bfff).into(), - selection: rgba(0xbf41bf3d).into(), + cursor: rgba(0xcc35ccff).into(), + background: rgba(0xcc35ccff).into(), + selection: rgba(0xcc35cc3d).into(), }, PlayerColor { - cursor: rgba(0xaa583dff).into(), - background: rgba(0xaa583dff).into(), - selection: rgba(0xaa583d3d).into(), + cursor: rgba(0xa65a27ff).into(), + background: rgba(0xa65a27ff).into(), + selection: rgba(0xa65a273d).into(), }, PlayerColor { - cursor: rgba(0x955be6ff).into(), - background: rgba(0x955be6ff).into(), - selection: rgba(0x955be63d).into(), + cursor: rgba(0x7b5ac0ff).into(), + background: rgba(0x7b5ac0ff).into(), + selection: rgba(0x7b5ac03d).into(), }, PlayerColor { - cursor: rgba(0x3b8bc6ff).into(), - background: rgba(0x3b8bc6ff).into(), - selection: rgba(0x3b8bc63d).into(), + cursor: rgba(0x199393ff).into(), + background: rgba(0x199393ff).into(), + selection: rgba(0x1993933d).into(), }, PlayerColor { - cursor: rgba(0xbe4778ff).into(), - background: rgba(0xbe4778ff).into(), - selection: rgba(0xbe47783d).into(), + cursor: rgba(0xca412cff).into(), + background: rgba(0xca412cff).into(), + selection: rgba(0xca412c3d).into(), }, PlayerColor { - cursor: rgba(0xa06e3cff).into(), - background: rgba(0xa06e3cff).into(), - selection: rgba(0xa06e3c3d).into(), + cursor: rgba(0xbb8a36ff).into(), + background: rgba(0xbb8a36ff).into(), + selection: rgba(0xbb8a363d).into(), }, PlayerColor { - cursor: rgba(0x2c9292ff).into(), - background: rgba(0x2c9292ff).into(), - selection: rgba(0x2c92923d).into(), + cursor: rgba(0x918b3cff).into(), + background: rgba(0x918b3cff).into(), + selection: rgba(0x918b3c3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -4372,63 +4372,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x586ddaff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x2c9292ff).into()), + color: Some(rgba(0x918b3cff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x7e7887ff).into()), + color: Some(rgba(0x9e8f9eff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x585260ff).into()), + color: Some(rgba(0x695d69ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x2c9292ff).into()), + color: Some(rgba(0x918b3cff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x586ddaff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x19171cff).into()), + color: Some(rgba(0x1b181bff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x586ddaff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x586ddaff).into()), + color: Some(rgba(0x526aebff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -4436,35 +4436,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xaa583dff).into()), + color: Some(rgba(0xa65a27ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x576ddbff).into()), + color: Some(rgba(0x516aecff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x576ddbff).into()), + color: Some(rgba(0x516aecff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xbb8a35ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x786e9dff).into()), + color: Some(rgba(0x8c70a6ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -4472,21 +4472,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x955ae7ff).into()), + color: Some(rgba(0x7b59c0ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x586ddaff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xaa583dff).into()), + color: Some(rgba(0xa65a27ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -4494,28 +4494,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x2c9292ff).into()), + color: Some(rgba(0x918b3cff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xaa573cff).into()), + color: Some(rgba(0xa65926ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x585260ff).into()), + color: Some(rgba(0x695d69ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x887fafff).into()), + color: Some(rgba(0xa587bfff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -4523,112 +4523,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x19171cff).into()), + color: Some(rgba(0x1b181bff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x26232aff).into()), + color: Some(rgba(0x292329ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xbe4678ff).into()), + color: Some(rgba(0xca402bff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x26232aff).into()), + color: Some(rgba(0x292329ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x585260ff).into()), + color: Some(rgba(0x695d69ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x585260ff).into()), + color: Some(rgba(0x695d69ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x26232aff).into()), + color: Some(rgba(0x292329ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xbf40bfff).into()), + color: Some(rgba(0xcc33ccff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x2a9292ff).into()), + color: Some(rgba(0x918b3bff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x585260ff).into()), + color: Some(rgba(0x695d69ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x398bc6ff).into()), + color: Some(rgba(0x159393ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xbf40bfff).into()), + color: Some(rgba(0xcc33ccff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x2a9292ff).into()), + color: Some(rgba(0x918b3bff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x586ddaff).into()), + color: Some(rgba(0x526aebff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xaa583dff).into()), + color: Some(rgba(0xa65a27ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x19171cff).into()), + color: Some(rgba(0x1b181bff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -4636,28 +4636,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xbb8a35ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x26232aff).into()), + color: Some(rgba(0x292329ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x955ae7ff).into()), + color: Some(rgba(0x7b59c0ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xbb8a35ff).into()), ..Default::default() }, ), @@ -4666,170 +4666,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Plateau Dark".into(), + name: "Atelier Lakeside Dark".into(), appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x564e4eff).into()), - border_variant: Some(rgba(0x352f2fff).into()), - border_focused: Some(rgba(0x2c2b45ff).into()), - border_selected: Some(rgba(0x2c2b45ff).into()), + border: Some(rgba(0x4f6b78ff).into()), + border_variant: Some(rgba(0x2c3b42ff).into()), + border_focused: Some(rgba(0x1a2f3cff).into()), + border_selected: Some(rgba(0x1a2f3cff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x494242ff).into()), - elevated_surface_background: Some(rgba(0x252020ff).into()), - surface_background: Some(rgba(0x252020ff).into()), - background: Some(rgba(0x3b3535ff).into()), - panel_background: Some(rgba(0x252020ff).into()), - element_background: Some(rgba(0x252020ff).into()), - element_hover: Some(rgba(0x352f2fff).into()), - element_active: Some(rgba(0x554d4dff).into()), - element_selected: Some(rgba(0x554d4dff).into()), - element_disabled: Some(rgba(0x252020ff).into()), - drop_target_background: Some(rgba(0x89838380).into()), + border_disabled: Some(rgba(0x415763ff).into()), + elevated_surface_background: Some(rgba(0x1c2529ff).into()), + surface_background: Some(rgba(0x1c2529ff).into()), + background: Some(rgba(0x33444dff).into()), + panel_background: Some(rgba(0x1c2529ff).into()), + element_background: Some(rgba(0x1c2529ff).into()), + element_hover: Some(rgba(0x2c3b42ff).into()), + element_active: Some(rgba(0x4d6976ff).into()), + element_selected: Some(rgba(0x4d6976ff).into()), + element_disabled: Some(rgba(0x1c2529ff).into()), + drop_target_background: Some(rgba(0x7ca0b380).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x352f2fff).into()), - ghost_element_active: Some(rgba(0x554d4dff).into()), - ghost_element_selected: Some(rgba(0x554d4dff).into()), - ghost_element_disabled: Some(rgba(0x252020ff).into()), - text: Some(rgba(0xf4ececff).into()), - text_muted: Some(rgba(0x898383ff).into()), - text_placeholder: Some(rgba(0x756e6eff).into()), - text_disabled: Some(rgba(0x756e6eff).into()), - text_accent: Some(rgba(0x7272caff).into()), - icon: Some(rgba(0xf4ececff).into()), - icon_muted: Some(rgba(0x898383ff).into()), - icon_disabled: Some(rgba(0x756e6eff).into()), - icon_placeholder: Some(rgba(0x898383ff).into()), - icon_accent: Some(rgba(0x7272caff).into()), - status_bar_background: Some(rgba(0x3b3535ff).into()), - title_bar_background: Some(rgba(0x3b3535ff).into()), - toolbar_background: Some(rgba(0x1b1818ff).into()), - tab_bar_background: Some(rgba(0x252020ff).into()), - tab_inactive_background: Some(rgba(0x252020ff).into()), - tab_active_background: Some(rgba(0x1b1818ff).into()), - scrollbar_thumb_background: Some(rgba(0xf4ecec4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x352f2fff).into()), - scrollbar_thumb_border: Some(rgba(0x352f2fff).into()), + ghost_element_hover: Some(rgba(0x2c3b42ff).into()), + ghost_element_active: Some(rgba(0x4d6976ff).into()), + ghost_element_selected: Some(rgba(0x4d6976ff).into()), + ghost_element_disabled: Some(rgba(0x1c2529ff).into()), + text: Some(rgba(0xebf8ffff).into()), + text_muted: Some(rgba(0x7ca0b3ff).into()), + text_placeholder: Some(rgba(0x698c9eff).into()), + text_disabled: Some(rgba(0x698c9eff).into()), + text_accent: Some(rgba(0x277fadff).into()), + icon: Some(rgba(0xebf8ffff).into()), + icon_muted: Some(rgba(0x7ca0b3ff).into()), + icon_disabled: Some(rgba(0x698c9eff).into()), + icon_placeholder: Some(rgba(0x7ca0b3ff).into()), + icon_accent: Some(rgba(0x277fadff).into()), + status_bar_background: Some(rgba(0x33444dff).into()), + title_bar_background: Some(rgba(0x33444dff).into()), + toolbar_background: Some(rgba(0x161b1dff).into()), + tab_bar_background: Some(rgba(0x1c2529ff).into()), + tab_inactive_background: Some(rgba(0x1c2529ff).into()), + tab_active_background: Some(rgba(0x161b1dff).into()), + scrollbar_thumb_background: Some(rgba(0xebf8ff4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x2c3b42ff).into()), + scrollbar_thumb_border: Some(rgba(0x2c3b42ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x231f1fff).into()), - editor_foreground: Some(rgba(0xe7dfdfff).into()), - editor_background: Some(rgba(0x1b1818ff).into()), - editor_gutter_background: Some(rgba(0x1b1818ff).into()), - editor_subheader_background: Some(rgba(0x252020ff).into()), - editor_active_line_background: Some(rgba(0x252020bf).into()), - editor_highlighted_line_background: Some(rgba(0x252020ff).into()), - editor_line_number: Some(rgba(0xf4ecec59).into()), - editor_active_line_number: Some(rgba(0xf4ececff).into()), - editor_invisible: Some(rgba(0x898383ff).into()), - editor_wrap_guide: Some(rgba(0xf4ecec0d).into()), - editor_active_wrap_guide: Some(rgba(0xf4ecec1a).into()), - editor_document_highlight_read_background: Some(rgba(0x7272ca1a).into()), - editor_document_highlight_write_background: Some(rgba(0x726a6a66).into()), - terminal_background: Some(rgba(0x1b1818ff).into()), - terminal_ansi_bright_black: Some(rgba(0x635b5bff).into()), - terminal_ansi_bright_red: Some(rgba(0x692727ff).into()), - terminal_ansi_bright_green: Some(rgba(0x2a4444ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x3b3960ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x5b2c42ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x2e4257ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf4ececff).into()), - terminal_ansi_black: Some(rgba(0x1b1818ff).into()), - terminal_ansi_red: Some(rgba(0xca4949ff).into()), - terminal_ansi_green: Some(rgba(0x4b8b8bff).into()), - terminal_ansi_yellow: Some(rgba(0xa06e3bff).into()), - terminal_ansi_blue: Some(rgba(0x7272caff).into()), - terminal_ansi_magenta: Some(rgba(0xbd5187ff).into()), - terminal_ansi_cyan: Some(rgba(0x5485b6ff).into()), - terminal_ansi_white: Some(rgba(0xf4ececff).into()), - link_text_hover: Some(rgba(0x7272caff).into()), + scrollbar_track_border: Some(rgba(0x1b2327ff).into()), + editor_foreground: Some(rgba(0xc1e4f6ff).into()), + editor_background: Some(rgba(0x161b1dff).into()), + editor_gutter_background: Some(rgba(0x161b1dff).into()), + editor_subheader_background: Some(rgba(0x1c2529ff).into()), + editor_active_line_background: Some(rgba(0x1c2529bf).into()), + editor_highlighted_line_background: Some(rgba(0x1c2529ff).into()), + editor_line_number: Some(rgba(0xebf8ff59).into()), + editor_active_line_number: Some(rgba(0xebf8ffff).into()), + editor_invisible: Some(rgba(0x7ca0b3ff).into()), + editor_wrap_guide: Some(rgba(0xebf8ff0d).into()), + editor_active_wrap_guide: Some(rgba(0xebf8ff1a).into()), + editor_document_highlight_read_background: Some(rgba(0x277fad1a).into()), + editor_document_highlight_write_background: Some(rgba(0x66889a66).into()), + terminal_background: Some(rgba(0x161b1dff).into()), + terminal_ansi_bright_black: Some(rgba(0x587989ff).into()), + terminal_ansi_bright_red: Some(rgba(0x6f1c3aff).into()), + terminal_ansi_bright_green: Some(rgba(0x2e4522ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x454413ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x1e3f53ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x5c1e6bff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1f4638ff).into()), + terminal_ansi_bright_white: Some(rgba(0xebf8ffff).into()), + terminal_ansi_black: Some(rgba(0x161b1dff).into()), + terminal_ansi_red: Some(rgba(0xd22e72ff).into()), + terminal_ansi_green: Some(rgba(0x568c3bff).into()), + terminal_ansi_yellow: Some(rgba(0x8a8a11ff).into()), + terminal_ansi_blue: Some(rgba(0x277fadff).into()), + terminal_ansi_magenta: Some(rgba(0xb72ed2ff).into()), + terminal_ansi_cyan: Some(rgba(0x2e8f6fff).into()), + terminal_ansi_white: Some(rgba(0xebf8ffff).into()), + link_text_hover: Some(rgba(0x277fadff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xa06e3bff).into()), - conflict_background: Some(rgba(0x231a12ff).into()), - conflict_border: Some(rgba(0x392a1aff).into()), - created: Some(rgba(0x4b8b8bff).into()), - created_background: Some(rgba(0x161f1fff).into()), - created_border: Some(rgba(0x203232ff).into()), - deleted: Some(rgba(0xca4949ff).into()), - deleted_background: Some(rgba(0x361414ff).into()), - deleted_border: Some(rgba(0x501e1eff).into()), - error: Some(rgba(0xca4949ff).into()), - error_background: Some(rgba(0x361414ff).into()), - error_border: Some(rgba(0x501e1eff).into()), - hidden: Some(rgba(0x756e6eff).into()), - hidden_background: Some(rgba(0x3b3535ff).into()), - hidden_border: Some(rgba(0x494242ff).into()), - hint: Some(rgba(0x8a647aff).into()), - hint_background: Some(rgba(0x1c1b29ff).into()), - hint_border: Some(rgba(0x2c2b45ff).into()), - ignored: Some(rgba(0x898383ff).into()), - ignored_background: Some(rgba(0x3b3535ff).into()), - ignored_border: Some(rgba(0x564e4eff).into()), - info: Some(rgba(0x7272caff).into()), - info_background: Some(rgba(0x1c1b29ff).into()), - info_border: Some(rgba(0x2c2b45ff).into()), - modified: Some(rgba(0xa06e3bff).into()), - modified_background: Some(rgba(0x231a12ff).into()), - modified_border: Some(rgba(0x392a1aff).into()), - predictive: Some(rgba(0x795369ff).into()), - predictive_background: Some(rgba(0x161f1fff).into()), - predictive_border: Some(rgba(0x203232ff).into()), - renamed: Some(rgba(0x7272caff).into()), - renamed_background: Some(rgba(0x1c1b29ff).into()), - renamed_border: Some(rgba(0x2c2b45ff).into()), - success: Some(rgba(0x4b8b8bff).into()), - success_background: Some(rgba(0x161f1fff).into()), - success_border: Some(rgba(0x203232ff).into()), - unreachable: Some(rgba(0x898383ff).into()), - unreachable_background: Some(rgba(0x3b3535ff).into()), - unreachable_border: Some(rgba(0x564e4eff).into()), - warning: Some(rgba(0xa06e3bff).into()), - warning_background: Some(rgba(0x231a12ff).into()), - warning_border: Some(rgba(0x392a1aff).into()), + conflict: Some(rgba(0x8a8a11ff).into()), + conflict_background: Some(rgba(0x201f0cff).into()), + conflict_border: Some(rgba(0x333211ff).into()), + created: Some(rgba(0x568c3bff).into()), + created_background: Some(rgba(0x171f12ff).into()), + created_border: Some(rgba(0x23321bff).into()), + deleted: Some(rgba(0xd22e72ff).into()), + deleted_background: Some(rgba(0x3a101bff).into()), + deleted_border: Some(rgba(0x55162bff).into()), + error: Some(rgba(0xd22e72ff).into()), + error_background: Some(rgba(0x3a101bff).into()), + error_border: Some(rgba(0x55162bff).into()), + hidden: Some(rgba(0x698c9eff).into()), + hidden_background: Some(rgba(0x33444dff).into()), + hidden_border: Some(rgba(0x415763ff).into()), + hint: Some(rgba(0x52809aff).into()), + hint_background: Some(rgba(0x131d24ff).into()), + hint_border: Some(rgba(0x1a2f3cff).into()), + ignored: Some(rgba(0x7ca0b3ff).into()), + ignored_background: Some(rgba(0x33444dff).into()), + ignored_border: Some(rgba(0x4f6b78ff).into()), + info: Some(rgba(0x277fadff).into()), + info_background: Some(rgba(0x131d24ff).into()), + info_border: Some(rgba(0x1a2f3cff).into()), + modified: Some(rgba(0x8a8a11ff).into()), + modified_background: Some(rgba(0x201f0cff).into()), + modified_border: Some(rgba(0x333211ff).into()), + predictive: Some(rgba(0x427088ff).into()), + predictive_background: Some(rgba(0x171f12ff).into()), + predictive_border: Some(rgba(0x23321bff).into()), + renamed: Some(rgba(0x277fadff).into()), + renamed_background: Some(rgba(0x131d24ff).into()), + renamed_border: Some(rgba(0x1a2f3cff).into()), + success: Some(rgba(0x568c3bff).into()), + success_background: Some(rgba(0x171f12ff).into()), + success_border: Some(rgba(0x23321bff).into()), + unreachable: Some(rgba(0x7ca0b3ff).into()), + unreachable_background: Some(rgba(0x33444dff).into()), + unreachable_border: Some(rgba(0x4f6b78ff).into()), + warning: Some(rgba(0x8a8a11ff).into()), + warning_background: Some(rgba(0x201f0cff).into()), + warning_border: Some(rgba(0x333211ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x7272caff).into(), - background: rgba(0x7272caff).into(), - selection: rgba(0x7272ca3d).into(), + cursor: rgba(0x277fadff).into(), + background: rgba(0x277fadff).into(), + selection: rgba(0x277fad3d).into(), }, PlayerColor { - cursor: rgba(0xbd5187ff).into(), - background: rgba(0xbd5187ff).into(), - selection: rgba(0xbd51873d).into(), + cursor: rgba(0xb72ed2ff).into(), + background: rgba(0xb72ed2ff).into(), + selection: rgba(0xb72ed23d).into(), }, PlayerColor { - cursor: rgba(0xb45a3cff).into(), - background: rgba(0xb45a3cff).into(), - selection: rgba(0xb45a3c3d).into(), + cursor: rgba(0x935c26ff).into(), + background: rgba(0x935c26ff).into(), + selection: rgba(0x935c263d).into(), }, PlayerColor { - cursor: rgba(0x8464c4ff).into(), - background: rgba(0x8464c4ff).into(), - selection: rgba(0x8464c43d).into(), + cursor: rgba(0x6b6bb8ff).into(), + background: rgba(0x6b6bb8ff).into(), + selection: rgba(0x6b6bb83d).into(), }, PlayerColor { - cursor: rgba(0x5485b6ff).into(), - background: rgba(0x5485b6ff).into(), - selection: rgba(0x5485b63d).into(), + cursor: rgba(0x2e8f6fff).into(), + background: rgba(0x2e8f6fff).into(), + selection: rgba(0x2e8f6f3d).into(), }, PlayerColor { - cursor: rgba(0xca4949ff).into(), - background: rgba(0xca4949ff).into(), - selection: rgba(0xca49493d).into(), + cursor: rgba(0xd22e72ff).into(), + background: rgba(0xd22e72ff).into(), + selection: rgba(0xd22e723d).into(), }, PlayerColor { - cursor: rgba(0xa06e3bff).into(), - background: rgba(0xa06e3bff).into(), - selection: rgba(0xa06e3b3d).into(), + cursor: rgba(0x8a8a11ff).into(), + background: rgba(0x8a8a11ff).into(), + selection: rgba(0x8a8a113d).into(), }, PlayerColor { - cursor: rgba(0x4b8b8bff).into(), - background: rgba(0x4b8b8bff).into(), - selection: rgba(0x4b8b8b3d).into(), + cursor: rgba(0x568c3bff).into(), + background: rgba(0x568c3bff).into(), + selection: rgba(0x568c3b3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -4837,63 +4837,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x4b8b8bff).into()), + color: Some(rgba(0x568c3bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x655d5dff).into()), + color: Some(rgba(0x5a7b8cff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x8a8585ff).into()), + color: Some(rgba(0x7ea2b4ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x4b8b8bff).into()), + color: Some(rgba(0x568c3bff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xf4ececff).into()), + color: Some(rgba(0xebf8ffff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x277fadff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -4901,35 +4901,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xb45a3cff).into()), + color: Some(rgba(0x935c26ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x257fadff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x257fadff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0x8a8a0fff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x8a647aff).into()), + color: Some(rgba(0x52809aff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -4937,21 +4937,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x8464c4ff).into()), + color: Some(rgba(0x6b6bb8ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xb45a3cff).into()), + color: Some(rgba(0x935c26ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -4959,28 +4959,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x4b8b8bff).into()), + color: Some(rgba(0x568c3bff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xb45a3cff).into()), + color: Some(rgba(0x935c25ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x8a8585ff).into()), + color: Some(rgba(0x7ea2b4ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x795369ff).into()), + color: Some(rgba(0x427088ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -4988,112 +4988,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xf4ececff).into()), + color: Some(rgba(0xebf8ffff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xe7dfdfff).into()), + color: Some(rgba(0xc1e4f6ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xca4949ff).into()), + color: Some(rgba(0xd22d72ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xe7dfdfff).into()), + color: Some(rgba(0xc1e4f6ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x8a8585ff).into()), + color: Some(rgba(0x7ea2b4ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x8a8585ff).into()), + color: Some(rgba(0x7ea2b4ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xe7dfdfff).into()), + color: Some(rgba(0xc1e4f6ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xbd5187ff).into()), + color: Some(rgba(0xb72dd2ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x4b8b8bff).into()), + color: Some(rgba(0x568c3bff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x8a8585ff).into()), + color: Some(rgba(0x7ea2b4ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x5485b6ff).into()), + color: Some(rgba(0x2d8f6fff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xbd5187ff).into()), + color: Some(rgba(0xb72dd2ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x4b8b8bff).into()), + color: Some(rgba(0x568c3bff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xb45a3cff).into()), + color: Some(rgba(0x935c26ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xf4ececff).into()), + color: Some(rgba(0xebf8ffff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -5101,28 +5101,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0x8a8a0fff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xe7dfdfff).into()), + color: Some(rgba(0xc1e4f6ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x8464c4ff).into()), + color: Some(rgba(0x6b6bb8ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0x8a8a0fff).into()), ..Default::default() }, ), @@ -5131,170 +5131,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Heath Dark".into(), - appearance: Appearance::Dark, + name: "Atelier Lakeside Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x675b67ff).into()), - border_variant: Some(rgba(0x393239ff).into()), - border_focused: Some(rgba(0x1a2961ff).into()), - border_selected: Some(rgba(0x1a2961ff).into()), + border: Some(rgba(0x80a4b6ff).into()), + border_variant: Some(rgba(0xb0d3e5ff).into()), + border_focused: Some(rgba(0xbacfe1ff).into()), + border_selected: Some(rgba(0xbacfe1ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x554a55ff).into()), - elevated_surface_background: Some(rgba(0x252025ff).into()), - surface_background: Some(rgba(0x252025ff).into()), - background: Some(rgba(0x433a43ff).into()), - panel_background: Some(rgba(0x252025ff).into()), - element_background: Some(rgba(0x252025ff).into()), - element_hover: Some(rgba(0x393239ff).into()), - element_active: Some(rgba(0x655965ff).into()), - element_selected: Some(rgba(0x655965ff).into()), - element_disabled: Some(rgba(0x252025ff).into()), - drop_target_background: Some(rgba(0xa99aa980).into()), + border_disabled: Some(rgba(0x93b7c9ff).into()), + elevated_surface_background: Some(rgba(0xcdeaf9ff).into()), + surface_background: Some(rgba(0xcdeaf9ff).into()), + background: Some(rgba(0xa6cadcff).into()), + panel_background: Some(rgba(0xcdeaf9ff).into()), + element_background: Some(rgba(0xcdeaf9ff).into()), + element_hover: Some(rgba(0xb0d3e5ff).into()), + element_active: Some(rgba(0x82a6b8ff).into()), + element_selected: Some(rgba(0x82a6b8ff).into()), + element_disabled: Some(rgba(0xcdeaf9ff).into()), + drop_target_background: Some(rgba(0x526f7d80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x393239ff).into()), - ghost_element_active: Some(rgba(0x655965ff).into()), - ghost_element_selected: Some(rgba(0x655965ff).into()), - ghost_element_disabled: Some(rgba(0x252025ff).into()), - text: Some(rgba(0xf7f3f7ff).into()), - text_muted: Some(rgba(0xa99aa9ff).into()), - text_placeholder: Some(rgba(0x908190ff).into()), - text_disabled: Some(rgba(0x908190ff).into()), - text_accent: Some(rgba(0x526aebff).into()), - icon: Some(rgba(0xf7f3f7ff).into()), - icon_muted: Some(rgba(0xa99aa9ff).into()), - icon_disabled: Some(rgba(0x908190ff).into()), - icon_placeholder: Some(rgba(0xa99aa9ff).into()), - icon_accent: Some(rgba(0x526aebff).into()), - status_bar_background: Some(rgba(0x433a43ff).into()), - title_bar_background: Some(rgba(0x433a43ff).into()), - toolbar_background: Some(rgba(0x1b181bff).into()), - tab_bar_background: Some(rgba(0x252025ff).into()), - tab_inactive_background: Some(rgba(0x252025ff).into()), - tab_active_background: Some(rgba(0x1b181bff).into()), - scrollbar_thumb_background: Some(rgba(0xf7f3f74c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x393239ff).into()), - scrollbar_thumb_border: Some(rgba(0x393239ff).into()), + ghost_element_hover: Some(rgba(0xb0d3e5ff).into()), + ghost_element_active: Some(rgba(0x82a6b8ff).into()), + ghost_element_selected: Some(rgba(0x82a6b8ff).into()), + ghost_element_disabled: Some(rgba(0xcdeaf9ff).into()), + text: Some(rgba(0x161b1dff).into()), + text_muted: Some(rgba(0x526f7dff).into()), + text_placeholder: Some(rgba(0x628496ff).into()), + text_disabled: Some(rgba(0x628496ff).into()), + text_accent: Some(rgba(0x277fadff).into()), + icon: Some(rgba(0x161b1dff).into()), + icon_muted: Some(rgba(0x526f7dff).into()), + icon_disabled: Some(rgba(0x628496ff).into()), + icon_placeholder: Some(rgba(0x526f7dff).into()), + icon_accent: Some(rgba(0x277fadff).into()), + status_bar_background: Some(rgba(0xa6cadcff).into()), + title_bar_background: Some(rgba(0xa6cadcff).into()), + toolbar_background: Some(rgba(0xebf8ffff).into()), + tab_bar_background: Some(rgba(0xcdeaf9ff).into()), + tab_inactive_background: Some(rgba(0xcdeaf9ff).into()), + tab_active_background: Some(rgba(0xebf8ffff).into()), + scrollbar_thumb_background: Some(rgba(0x161b1d4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xb0d3e5ff).into()), + scrollbar_thumb_border: Some(rgba(0xb0d3e5ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x231e23ff).into()), - editor_foreground: Some(rgba(0xd8cad8ff).into()), - editor_background: Some(rgba(0x1b181bff).into()), - editor_gutter_background: Some(rgba(0x1b181bff).into()), - editor_subheader_background: Some(rgba(0x252025ff).into()), - editor_active_line_background: Some(rgba(0x252025bf).into()), - editor_highlighted_line_background: Some(rgba(0x252025ff).into()), - editor_line_number: Some(rgba(0xf7f3f759).into()), - editor_active_line_number: Some(rgba(0xf7f3f7ff).into()), - editor_invisible: Some(rgba(0xa99aa9ff).into()), - editor_wrap_guide: Some(rgba(0xf7f3f70d).into()), - editor_active_wrap_guide: Some(rgba(0xf7f3f71a).into()), - editor_document_highlight_read_background: Some(rgba(0x526aeb1a).into()), - editor_document_highlight_write_background: Some(rgba(0x8b7c8b66).into()), - terminal_background: Some(rgba(0x1b181bff).into()), - terminal_ansi_bright_black: Some(rgba(0x756775ff).into()), - terminal_ansi_bright_red: Some(rgba(0x6d221aff).into()), - terminal_ansi_bright_green: Some(rgba(0x474422ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x5e441fff).into()), - terminal_ansi_bright_blue: Some(rgba(0x26367eff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x6c1e67ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1a4848ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf7f3f7ff).into()), - terminal_ansi_black: Some(rgba(0x1b181bff).into()), - terminal_ansi_red: Some(rgba(0xca402cff).into()), - terminal_ansi_green: Some(rgba(0x918b3bff).into()), - terminal_ansi_yellow: Some(rgba(0xbb8a36ff).into()), - terminal_ansi_blue: Some(rgba(0x526aebff).into()), - terminal_ansi_magenta: Some(rgba(0xcc34ccff).into()), - terminal_ansi_cyan: Some(rgba(0x189393ff).into()), - terminal_ansi_white: Some(rgba(0xf7f3f7ff).into()), - link_text_hover: Some(rgba(0x526aebff).into()), + scrollbar_track_border: Some(rgba(0xd3edfaff).into()), + editor_foreground: Some(rgba(0x1f292eff).into()), + editor_background: Some(rgba(0xebf8ffff).into()), + editor_gutter_background: Some(rgba(0xebf8ffff).into()), + editor_subheader_background: Some(rgba(0xcdeaf9ff).into()), + editor_active_line_background: Some(rgba(0xcdeaf9bf).into()), + editor_highlighted_line_background: Some(rgba(0xcdeaf9ff).into()), + editor_line_number: Some(rgba(0x161b1d59).into()), + editor_active_line_number: Some(rgba(0x161b1dff).into()), + editor_invisible: Some(rgba(0x526f7dff).into()), + editor_wrap_guide: Some(rgba(0x161b1d0d).into()), + editor_active_wrap_guide: Some(rgba(0x161b1d1a).into()), + editor_document_highlight_read_background: Some(rgba(0x277fad1a).into()), + editor_document_highlight_write_background: Some(rgba(0x66889a66).into()), + terminal_background: Some(rgba(0xebf8ffff).into()), + terminal_ansi_bright_black: Some(rgba(0x7397aaff).into()), + terminal_ansi_bright_red: Some(rgba(0xf09fb6ff).into()), + terminal_ansi_bright_green: Some(rgba(0xabc59aff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xc8c38bff).into()), + terminal_ansi_bright_blue: Some(rgba(0x9ebdd6ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe09fe9ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9bc7b5ff).into()), + terminal_ansi_bright_white: Some(rgba(0x161b1dff).into()), + terminal_ansi_black: Some(rgba(0xebf8ffff).into()), + terminal_ansi_red: Some(rgba(0xd22f72ff).into()), + terminal_ansi_green: Some(rgba(0x578c3cff).into()), + terminal_ansi_yellow: Some(rgba(0x8a8a11ff).into()), + terminal_ansi_blue: Some(rgba(0x277fadff).into()), + terminal_ansi_magenta: Some(rgba(0xb72fd2ff).into()), + terminal_ansi_cyan: Some(rgba(0x2f8f6fff).into()), + terminal_ansi_white: Some(rgba(0x161b1dff).into()), + link_text_hover: Some(rgba(0x277fadff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xbb8a36ff).into()), - conflict_background: Some(rgba(0x2d1e12ff).into()), - conflict_border: Some(rgba(0x463219ff).into()), - created: Some(rgba(0x918b3bff).into()), - created_background: Some(rgba(0x211f12ff).into()), - created_border: Some(rgba(0x34321bff).into()), - deleted: Some(rgba(0xca402cff).into()), - deleted_background: Some(rgba(0x3c110eff).into()), - deleted_border: Some(rgba(0x551a15ff).into()), - error: Some(rgba(0xca402cff).into()), - error_background: Some(rgba(0x3c110eff).into()), - error_border: Some(rgba(0x551a15ff).into()), - hidden: Some(rgba(0x908190ff).into()), - hidden_background: Some(rgba(0x433a43ff).into()), - hidden_border: Some(rgba(0x554a55ff).into()), - hint: Some(rgba(0x8d70a8ff).into()), - hint_background: Some(rgba(0x0e1a43ff).into()), - hint_border: Some(rgba(0x1a2961ff).into()), - ignored: Some(rgba(0xa99aa9ff).into()), - ignored_background: Some(rgba(0x433a43ff).into()), - ignored_border: Some(rgba(0x675b67ff).into()), - info: Some(rgba(0x526aebff).into()), - info_background: Some(rgba(0x0e1a43ff).into()), - info_border: Some(rgba(0x1a2961ff).into()), - modified: Some(rgba(0xbb8a36ff).into()), - modified_background: Some(rgba(0x2d1e12ff).into()), - modified_border: Some(rgba(0x463219ff).into()), - predictive: Some(rgba(0x765990ff).into()), - predictive_background: Some(rgba(0x211f12ff).into()), - predictive_border: Some(rgba(0x34321bff).into()), - renamed: Some(rgba(0x526aebff).into()), - renamed_background: Some(rgba(0x0e1a43ff).into()), - renamed_border: Some(rgba(0x1a2961ff).into()), - success: Some(rgba(0x918b3bff).into()), - success_background: Some(rgba(0x211f12ff).into()), - success_border: Some(rgba(0x34321bff).into()), - unreachable: Some(rgba(0xa99aa9ff).into()), - unreachable_background: Some(rgba(0x433a43ff).into()), - unreachable_border: Some(rgba(0x675b67ff).into()), - warning: Some(rgba(0xbb8a36ff).into()), - warning_background: Some(rgba(0x2d1e12ff).into()), - warning_border: Some(rgba(0x463219ff).into()), + conflict: Some(rgba(0x8a8a11ff).into()), + conflict_background: Some(rgba(0xeae6d0ff).into()), + conflict_border: Some(rgba(0xd8d3abff).into()), + created: Some(rgba(0x578c3cff).into()), + created_background: Some(rgba(0xdde7d5ff).into()), + created_border: Some(rgba(0xc2d5b6ff).into()), + deleted: Some(rgba(0xd22f72ff).into()), + deleted_background: Some(rgba(0xfbd8e1ff).into()), + deleted_border: Some(rgba(0xf6bacaff).into()), + error: Some(rgba(0xd22f72ff).into()), + error_background: Some(rgba(0xfbd8e1ff).into()), + error_border: Some(rgba(0xf6bacaff).into()), + hidden: Some(rgba(0x628496ff).into()), + hidden_background: Some(rgba(0xa6cadcff).into()), + hidden_border: Some(rgba(0x93b7c9ff).into()), + hint: Some(rgba(0x5a87a0ff).into()), + hint_background: Some(rgba(0xd8e4eeff).into()), + hint_border: Some(rgba(0xbacfe1ff).into()), + ignored: Some(rgba(0x526f7dff).into()), + ignored_background: Some(rgba(0xa6cadcff).into()), + ignored_border: Some(rgba(0x80a4b6ff).into()), + info: Some(rgba(0x277fadff).into()), + info_background: Some(rgba(0xd8e4eeff).into()), + info_border: Some(rgba(0xbacfe1ff).into()), + modified: Some(rgba(0x8a8a11ff).into()), + modified_background: Some(rgba(0xeae6d0ff).into()), + modified_border: Some(rgba(0xd8d3abff).into()), + predictive: Some(rgba(0x6a97b2ff).into()), + predictive_background: Some(rgba(0xdde7d5ff).into()), + predictive_border: Some(rgba(0xc2d5b6ff).into()), + renamed: Some(rgba(0x277fadff).into()), + renamed_background: Some(rgba(0xd8e4eeff).into()), + renamed_border: Some(rgba(0xbacfe1ff).into()), + success: Some(rgba(0x578c3cff).into()), + success_background: Some(rgba(0xdde7d5ff).into()), + success_border: Some(rgba(0xc2d5b6ff).into()), + unreachable: Some(rgba(0x526f7dff).into()), + unreachable_background: Some(rgba(0xa6cadcff).into()), + unreachable_border: Some(rgba(0x80a4b6ff).into()), + warning: Some(rgba(0x8a8a11ff).into()), + warning_background: Some(rgba(0xeae6d0ff).into()), + warning_border: Some(rgba(0xd8d3abff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x526aebff).into(), - background: rgba(0x526aebff).into(), - selection: rgba(0x526aeb3d).into(), + cursor: rgba(0x277fadff).into(), + background: rgba(0x277fadff).into(), + selection: rgba(0x277fad3d).into(), }, PlayerColor { - cursor: rgba(0xcc34ccff).into(), - background: rgba(0xcc34ccff).into(), - selection: rgba(0xcc34cc3d).into(), + cursor: rgba(0xb72fd2ff).into(), + background: rgba(0xb72fd2ff).into(), + selection: rgba(0xb72fd23d).into(), }, PlayerColor { - cursor: rgba(0xa65927ff).into(), - background: rgba(0xa65927ff).into(), - selection: rgba(0xa659273d).into(), + cursor: rgba(0x935d26ff).into(), + background: rgba(0x935d26ff).into(), + selection: rgba(0x935d263d).into(), }, PlayerColor { - cursor: rgba(0x7b59c0ff).into(), - background: rgba(0x7b59c0ff).into(), - selection: rgba(0x7b59c03d).into(), + cursor: rgba(0x6c6bb8ff).into(), + background: rgba(0x6c6bb8ff).into(), + selection: rgba(0x6c6bb83d).into(), }, PlayerColor { - cursor: rgba(0x189393ff).into(), - background: rgba(0x189393ff).into(), - selection: rgba(0x1893933d).into(), + cursor: rgba(0x2f8f6fff).into(), + background: rgba(0x2f8f6fff).into(), + selection: rgba(0x2f8f6f3d).into(), }, PlayerColor { - cursor: rgba(0xca402cff).into(), - background: rgba(0xca402cff).into(), - selection: rgba(0xca402c3d).into(), + cursor: rgba(0xd22f72ff).into(), + background: rgba(0xd22f72ff).into(), + selection: rgba(0xd22f723d).into(), }, PlayerColor { - cursor: rgba(0xbb8a36ff).into(), - background: rgba(0xbb8a36ff).into(), - selection: rgba(0xbb8a363d).into(), + cursor: rgba(0x8a8a11ff).into(), + background: rgba(0x8a8a11ff).into(), + selection: rgba(0x8a8a113d).into(), }, PlayerColor { - cursor: rgba(0x918b3bff).into(), - background: rgba(0x918b3bff).into(), - selection: rgba(0x918b3b3d).into(), + cursor: rgba(0x578c3cff).into(), + background: rgba(0x578c3cff).into(), + selection: rgba(0x578c3c3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -5302,63 +5302,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x918b3bff).into()), + color: Some(rgba(0x578c3cff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x776977ff).into()), + color: Some(rgba(0x7195a8ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0xab9babff).into()), + color: Some(rgba(0x516d7bff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x918b3bff).into()), + color: Some(rgba(0x578c3cff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xf7f3f7ff).into()), + color: Some(rgba(0x161b1dff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x277fadff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -5366,35 +5366,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xa65927ff).into()), + color: Some(rgba(0x935d26ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x516aecff).into()), + color: Some(rgba(0x257fadff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x516aecff).into()), + color: Some(rgba(0x257fadff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xbb8a35ff).into()), + color: Some(rgba(0x8a8a0fff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x8d70a8ff).into()), + color: Some(rgba(0x5a87a0ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -5402,21 +5402,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x7b59c0ff).into()), + color: Some(rgba(0x6b6bb8ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xa65927ff).into()), + color: Some(rgba(0x935d26ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -5424,28 +5424,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x918b3bff).into()), + color: Some(rgba(0x578c3cff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xa65926ff).into()), + color: Some(rgba(0x935c25ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0xab9babff).into()), + color: Some(rgba(0x516d7bff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x765990ff).into()), + color: Some(rgba(0x6a97b2ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -5453,112 +5453,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xf7f3f7ff).into()), + color: Some(rgba(0x161b1dff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xd8cad8ff).into()), + color: Some(rgba(0x1f292eff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xca402bff).into()), + color: Some(rgba(0xd22d72ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xd8cad8ff).into()), + color: Some(rgba(0x1f292eff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xab9babff).into()), + color: Some(rgba(0x516d7bff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xab9babff).into()), + color: Some(rgba(0x516d7bff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xd8cad8ff).into()), + color: Some(rgba(0x1f292eff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xcc33ccff).into()), + color: Some(rgba(0xb72dd2ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x918b3bff).into()), + color: Some(rgba(0x568c3bff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0xab9babff).into()), + color: Some(rgba(0x516d7bff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x159393ff).into()), + color: Some(rgba(0x2d8f6fff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xcc33ccff).into()), + color: Some(rgba(0xb72dd2ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x918b3bff).into()), + color: Some(rgba(0x568c3bff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x277fadff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xa65927ff).into()), + color: Some(rgba(0x935d26ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xf7f3f7ff).into()), + color: Some(rgba(0x161b1dff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -5566,28 +5566,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xbb8a35ff).into()), + color: Some(rgba(0x8a8a0fff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xd8cad8ff).into()), + color: Some(rgba(0x1f292eff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x7b59c0ff).into()), + color: Some(rgba(0x6b6bb8ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xbb8a35ff).into()), + color: Some(rgba(0x8a8a0fff).into()), ..Default::default() }, ), @@ -5596,170 +5596,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Lakeside Dark".into(), + name: "Atelier Plateau Dark".into(), appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x4f6b78ff).into()), - border_variant: Some(rgba(0x2c3b42ff).into()), - border_focused: Some(rgba(0x1a2f3cff).into()), - border_selected: Some(rgba(0x1a2f3cff).into()), - border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x415763ff).into()), - elevated_surface_background: Some(rgba(0x1c2529ff).into()), - surface_background: Some(rgba(0x1c2529ff).into()), - background: Some(rgba(0x33444dff).into()), - panel_background: Some(rgba(0x1c2529ff).into()), - element_background: Some(rgba(0x1c2529ff).into()), - element_hover: Some(rgba(0x2c3b42ff).into()), - element_active: Some(rgba(0x4d6976ff).into()), - element_selected: Some(rgba(0x4d6976ff).into()), - element_disabled: Some(rgba(0x1c2529ff).into()), - drop_target_background: Some(rgba(0x7ca0b380).into()), + border: Some(rgba(0x564e4eff).into()), + border_variant: Some(rgba(0x352f2fff).into()), + border_focused: Some(rgba(0x2c2b45ff).into()), + border_selected: Some(rgba(0x2c2b45ff).into()), + border_transparent: Some(rgba(0x00000000).into()), + border_disabled: Some(rgba(0x494242ff).into()), + elevated_surface_background: Some(rgba(0x252020ff).into()), + surface_background: Some(rgba(0x252020ff).into()), + background: Some(rgba(0x3b3535ff).into()), + panel_background: Some(rgba(0x252020ff).into()), + element_background: Some(rgba(0x252020ff).into()), + element_hover: Some(rgba(0x352f2fff).into()), + element_active: Some(rgba(0x554d4dff).into()), + element_selected: Some(rgba(0x554d4dff).into()), + element_disabled: Some(rgba(0x252020ff).into()), + drop_target_background: Some(rgba(0x89838380).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x2c3b42ff).into()), - ghost_element_active: Some(rgba(0x4d6976ff).into()), - ghost_element_selected: Some(rgba(0x4d6976ff).into()), - ghost_element_disabled: Some(rgba(0x1c2529ff).into()), - text: Some(rgba(0xebf8ffff).into()), - text_muted: Some(rgba(0x7ca0b3ff).into()), - text_placeholder: Some(rgba(0x698c9eff).into()), - text_disabled: Some(rgba(0x698c9eff).into()), - text_accent: Some(rgba(0x277fadff).into()), - icon: Some(rgba(0xebf8ffff).into()), - icon_muted: Some(rgba(0x7ca0b3ff).into()), - icon_disabled: Some(rgba(0x698c9eff).into()), - icon_placeholder: Some(rgba(0x7ca0b3ff).into()), - icon_accent: Some(rgba(0x277fadff).into()), - status_bar_background: Some(rgba(0x33444dff).into()), - title_bar_background: Some(rgba(0x33444dff).into()), - toolbar_background: Some(rgba(0x161b1dff).into()), - tab_bar_background: Some(rgba(0x1c2529ff).into()), - tab_inactive_background: Some(rgba(0x1c2529ff).into()), - tab_active_background: Some(rgba(0x161b1dff).into()), - scrollbar_thumb_background: Some(rgba(0xebf8ff4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x2c3b42ff).into()), - scrollbar_thumb_border: Some(rgba(0x2c3b42ff).into()), + ghost_element_hover: Some(rgba(0x352f2fff).into()), + ghost_element_active: Some(rgba(0x554d4dff).into()), + ghost_element_selected: Some(rgba(0x554d4dff).into()), + ghost_element_disabled: Some(rgba(0x252020ff).into()), + text: Some(rgba(0xf4ececff).into()), + text_muted: Some(rgba(0x898383ff).into()), + text_placeholder: Some(rgba(0x756e6eff).into()), + text_disabled: Some(rgba(0x756e6eff).into()), + text_accent: Some(rgba(0x7272caff).into()), + icon: Some(rgba(0xf4ececff).into()), + icon_muted: Some(rgba(0x898383ff).into()), + icon_disabled: Some(rgba(0x756e6eff).into()), + icon_placeholder: Some(rgba(0x898383ff).into()), + icon_accent: Some(rgba(0x7272caff).into()), + status_bar_background: Some(rgba(0x3b3535ff).into()), + title_bar_background: Some(rgba(0x3b3535ff).into()), + toolbar_background: Some(rgba(0x1b1818ff).into()), + tab_bar_background: Some(rgba(0x252020ff).into()), + tab_inactive_background: Some(rgba(0x252020ff).into()), + tab_active_background: Some(rgba(0x1b1818ff).into()), + scrollbar_thumb_background: Some(rgba(0xf4ecec4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x352f2fff).into()), + scrollbar_thumb_border: Some(rgba(0x352f2fff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x1b2327ff).into()), - editor_foreground: Some(rgba(0xc1e4f6ff).into()), - editor_background: Some(rgba(0x161b1dff).into()), - editor_gutter_background: Some(rgba(0x161b1dff).into()), - editor_subheader_background: Some(rgba(0x1c2529ff).into()), - editor_active_line_background: Some(rgba(0x1c2529bf).into()), - editor_highlighted_line_background: Some(rgba(0x1c2529ff).into()), - editor_line_number: Some(rgba(0xebf8ff59).into()), - editor_active_line_number: Some(rgba(0xebf8ffff).into()), - editor_invisible: Some(rgba(0x7ca0b3ff).into()), - editor_wrap_guide: Some(rgba(0xebf8ff0d).into()), - editor_active_wrap_guide: Some(rgba(0xebf8ff1a).into()), - editor_document_highlight_read_background: Some(rgba(0x277fad1a).into()), - editor_document_highlight_write_background: Some(rgba(0x66889a66).into()), - terminal_background: Some(rgba(0x161b1dff).into()), - terminal_ansi_bright_black: Some(rgba(0x587989ff).into()), - terminal_ansi_bright_red: Some(rgba(0x6f1c3aff).into()), - terminal_ansi_bright_green: Some(rgba(0x2e4522ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x454413ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x1e3f53ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x5c1e6bff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1f4638ff).into()), - terminal_ansi_bright_white: Some(rgba(0xebf8ffff).into()), - terminal_ansi_black: Some(rgba(0x161b1dff).into()), - terminal_ansi_red: Some(rgba(0xd22e72ff).into()), - terminal_ansi_green: Some(rgba(0x568c3bff).into()), - terminal_ansi_yellow: Some(rgba(0x8a8a11ff).into()), - terminal_ansi_blue: Some(rgba(0x277fadff).into()), - terminal_ansi_magenta: Some(rgba(0xb72ed2ff).into()), - terminal_ansi_cyan: Some(rgba(0x2e8f6fff).into()), - terminal_ansi_white: Some(rgba(0xebf8ffff).into()), - link_text_hover: Some(rgba(0x277fadff).into()), + scrollbar_track_border: Some(rgba(0x231f1fff).into()), + editor_foreground: Some(rgba(0xe7dfdfff).into()), + editor_background: Some(rgba(0x1b1818ff).into()), + editor_gutter_background: Some(rgba(0x1b1818ff).into()), + editor_subheader_background: Some(rgba(0x252020ff).into()), + editor_active_line_background: Some(rgba(0x252020bf).into()), + editor_highlighted_line_background: Some(rgba(0x252020ff).into()), + editor_line_number: Some(rgba(0xf4ecec59).into()), + editor_active_line_number: Some(rgba(0xf4ececff).into()), + editor_invisible: Some(rgba(0x898383ff).into()), + editor_wrap_guide: Some(rgba(0xf4ecec0d).into()), + editor_active_wrap_guide: Some(rgba(0xf4ecec1a).into()), + editor_document_highlight_read_background: Some(rgba(0x7272ca1a).into()), + editor_document_highlight_write_background: Some(rgba(0x726a6a66).into()), + terminal_background: Some(rgba(0x1b1818ff).into()), + terminal_ansi_bright_black: Some(rgba(0x635b5bff).into()), + terminal_ansi_bright_red: Some(rgba(0x692727ff).into()), + terminal_ansi_bright_green: Some(rgba(0x2a4444ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x3b3960ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x5b2c42ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x2e4257ff).into()), + terminal_ansi_bright_white: Some(rgba(0xf4ececff).into()), + terminal_ansi_black: Some(rgba(0x1b1818ff).into()), + terminal_ansi_red: Some(rgba(0xca4949ff).into()), + terminal_ansi_green: Some(rgba(0x4b8b8bff).into()), + terminal_ansi_yellow: Some(rgba(0xa06e3bff).into()), + terminal_ansi_blue: Some(rgba(0x7272caff).into()), + terminal_ansi_magenta: Some(rgba(0xbd5187ff).into()), + terminal_ansi_cyan: Some(rgba(0x5485b6ff).into()), + terminal_ansi_white: Some(rgba(0xf4ececff).into()), + link_text_hover: Some(rgba(0x7272caff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0x8a8a11ff).into()), - conflict_background: Some(rgba(0x201f0cff).into()), - conflict_border: Some(rgba(0x333211ff).into()), - created: Some(rgba(0x568c3bff).into()), - created_background: Some(rgba(0x171f12ff).into()), - created_border: Some(rgba(0x23321bff).into()), - deleted: Some(rgba(0xd22e72ff).into()), - deleted_background: Some(rgba(0x3a101bff).into()), - deleted_border: Some(rgba(0x55162bff).into()), - error: Some(rgba(0xd22e72ff).into()), - error_background: Some(rgba(0x3a101bff).into()), - error_border: Some(rgba(0x55162bff).into()), - hidden: Some(rgba(0x698c9eff).into()), - hidden_background: Some(rgba(0x33444dff).into()), - hidden_border: Some(rgba(0x415763ff).into()), - hint: Some(rgba(0x52809aff).into()), - hint_background: Some(rgba(0x131d24ff).into()), - hint_border: Some(rgba(0x1a2f3cff).into()), - ignored: Some(rgba(0x7ca0b3ff).into()), - ignored_background: Some(rgba(0x33444dff).into()), - ignored_border: Some(rgba(0x4f6b78ff).into()), - info: Some(rgba(0x277fadff).into()), - info_background: Some(rgba(0x131d24ff).into()), - info_border: Some(rgba(0x1a2f3cff).into()), - modified: Some(rgba(0x8a8a11ff).into()), - modified_background: Some(rgba(0x201f0cff).into()), - modified_border: Some(rgba(0x333211ff).into()), - predictive: Some(rgba(0x427088ff).into()), - predictive_background: Some(rgba(0x171f12ff).into()), - predictive_border: Some(rgba(0x23321bff).into()), - renamed: Some(rgba(0x277fadff).into()), - renamed_background: Some(rgba(0x131d24ff).into()), - renamed_border: Some(rgba(0x1a2f3cff).into()), - success: Some(rgba(0x568c3bff).into()), - success_background: Some(rgba(0x171f12ff).into()), - success_border: Some(rgba(0x23321bff).into()), - unreachable: Some(rgba(0x7ca0b3ff).into()), - unreachable_background: Some(rgba(0x33444dff).into()), - unreachable_border: Some(rgba(0x4f6b78ff).into()), - warning: Some(rgba(0x8a8a11ff).into()), - warning_background: Some(rgba(0x201f0cff).into()), - warning_border: Some(rgba(0x333211ff).into()), + conflict: Some(rgba(0xa06e3bff).into()), + conflict_background: Some(rgba(0x231a12ff).into()), + conflict_border: Some(rgba(0x392a1aff).into()), + created: Some(rgba(0x4b8b8bff).into()), + created_background: Some(rgba(0x161f1fff).into()), + created_border: Some(rgba(0x203232ff).into()), + deleted: Some(rgba(0xca4949ff).into()), + deleted_background: Some(rgba(0x361414ff).into()), + deleted_border: Some(rgba(0x501e1eff).into()), + error: Some(rgba(0xca4949ff).into()), + error_background: Some(rgba(0x361414ff).into()), + error_border: Some(rgba(0x501e1eff).into()), + hidden: Some(rgba(0x756e6eff).into()), + hidden_background: Some(rgba(0x3b3535ff).into()), + hidden_border: Some(rgba(0x494242ff).into()), + hint: Some(rgba(0x8a647aff).into()), + hint_background: Some(rgba(0x1c1b29ff).into()), + hint_border: Some(rgba(0x2c2b45ff).into()), + ignored: Some(rgba(0x898383ff).into()), + ignored_background: Some(rgba(0x3b3535ff).into()), + ignored_border: Some(rgba(0x564e4eff).into()), + info: Some(rgba(0x7272caff).into()), + info_background: Some(rgba(0x1c1b29ff).into()), + info_border: Some(rgba(0x2c2b45ff).into()), + modified: Some(rgba(0xa06e3bff).into()), + modified_background: Some(rgba(0x231a12ff).into()), + modified_border: Some(rgba(0x392a1aff).into()), + predictive: Some(rgba(0x795369ff).into()), + predictive_background: Some(rgba(0x161f1fff).into()), + predictive_border: Some(rgba(0x203232ff).into()), + renamed: Some(rgba(0x7272caff).into()), + renamed_background: Some(rgba(0x1c1b29ff).into()), + renamed_border: Some(rgba(0x2c2b45ff).into()), + success: Some(rgba(0x4b8b8bff).into()), + success_background: Some(rgba(0x161f1fff).into()), + success_border: Some(rgba(0x203232ff).into()), + unreachable: Some(rgba(0x898383ff).into()), + unreachable_background: Some(rgba(0x3b3535ff).into()), + unreachable_border: Some(rgba(0x564e4eff).into()), + warning: Some(rgba(0xa06e3bff).into()), + warning_background: Some(rgba(0x231a12ff).into()), + warning_border: Some(rgba(0x392a1aff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x277fadff).into(), - background: rgba(0x277fadff).into(), - selection: rgba(0x277fad3d).into(), + cursor: rgba(0x7272caff).into(), + background: rgba(0x7272caff).into(), + selection: rgba(0x7272ca3d).into(), }, PlayerColor { - cursor: rgba(0xb72ed2ff).into(), - background: rgba(0xb72ed2ff).into(), - selection: rgba(0xb72ed23d).into(), + cursor: rgba(0xbd5187ff).into(), + background: rgba(0xbd5187ff).into(), + selection: rgba(0xbd51873d).into(), }, PlayerColor { - cursor: rgba(0x935c26ff).into(), - background: rgba(0x935c26ff).into(), - selection: rgba(0x935c263d).into(), + cursor: rgba(0xb45a3cff).into(), + background: rgba(0xb45a3cff).into(), + selection: rgba(0xb45a3c3d).into(), }, PlayerColor { - cursor: rgba(0x6b6bb8ff).into(), - background: rgba(0x6b6bb8ff).into(), - selection: rgba(0x6b6bb83d).into(), + cursor: rgba(0x8464c4ff).into(), + background: rgba(0x8464c4ff).into(), + selection: rgba(0x8464c43d).into(), }, PlayerColor { - cursor: rgba(0x2e8f6fff).into(), - background: rgba(0x2e8f6fff).into(), - selection: rgba(0x2e8f6f3d).into(), + cursor: rgba(0x5485b6ff).into(), + background: rgba(0x5485b6ff).into(), + selection: rgba(0x5485b63d).into(), }, PlayerColor { - cursor: rgba(0xd22e72ff).into(), - background: rgba(0xd22e72ff).into(), - selection: rgba(0xd22e723d).into(), + cursor: rgba(0xca4949ff).into(), + background: rgba(0xca4949ff).into(), + selection: rgba(0xca49493d).into(), }, PlayerColor { - cursor: rgba(0x8a8a11ff).into(), - background: rgba(0x8a8a11ff).into(), - selection: rgba(0x8a8a113d).into(), + cursor: rgba(0xa06e3bff).into(), + background: rgba(0xa06e3bff).into(), + selection: rgba(0xa06e3b3d).into(), }, PlayerColor { - cursor: rgba(0x568c3bff).into(), - background: rgba(0x568c3bff).into(), - selection: rgba(0x568c3b3d).into(), + cursor: rgba(0x4b8b8bff).into(), + background: rgba(0x4b8b8bff).into(), + selection: rgba(0x4b8b8b3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -5767,63 +5767,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x568c3bff).into()), + color: Some(rgba(0x4b8b8bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x5a7b8cff).into()), + color: Some(rgba(0x655d5dff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x7ea2b4ff).into()), + color: Some(rgba(0x8a8585ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x568c3bff).into()), + color: Some(rgba(0x4b8b8bff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xebf8ffff).into()), + color: Some(rgba(0xf4ececff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x7272caff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -5831,35 +5831,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0x935c26ff).into()), + color: Some(rgba(0xb45a3cff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x257fadff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x257fadff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0x8a8a0fff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x52809aff).into()), + color: Some(rgba(0x8a647aff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -5867,21 +5867,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x6b6bb8ff).into()), + color: Some(rgba(0x8464c4ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x935c26ff).into()), + color: Some(rgba(0xb45a3cff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -5889,28 +5889,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x568c3bff).into()), + color: Some(rgba(0x4b8b8bff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x935c25ff).into()), + color: Some(rgba(0xb45a3cff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x7ea2b4ff).into()), + color: Some(rgba(0x8a8585ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x427088ff).into()), + color: Some(rgba(0x795369ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -5918,112 +5918,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xebf8ffff).into()), + color: Some(rgba(0xf4ececff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xc1e4f6ff).into()), + color: Some(rgba(0xe7dfdfff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xd22d72ff).into()), + color: Some(rgba(0xca4949ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xc1e4f6ff).into()), + color: Some(rgba(0xe7dfdfff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x7ea2b4ff).into()), + color: Some(rgba(0x8a8585ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x7ea2b4ff).into()), + color: Some(rgba(0x8a8585ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xc1e4f6ff).into()), + color: Some(rgba(0xe7dfdfff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xb72dd2ff).into()), + color: Some(rgba(0xbd5187ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x568c3bff).into()), + color: Some(rgba(0x4b8b8bff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x7ea2b4ff).into()), + color: Some(rgba(0x8a8585ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x2d8f6fff).into()), + color: Some(rgba(0x5485b6ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xb72dd2ff).into()), + color: Some(rgba(0xbd5187ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x568c3bff).into()), + color: Some(rgba(0x4b8b8bff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x935c26ff).into()), + color: Some(rgba(0xb45a3cff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xebf8ffff).into()), + color: Some(rgba(0xf4ececff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -6031,28 +6031,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0x8a8a0fff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xc1e4f6ff).into()), + color: Some(rgba(0xe7dfdfff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x6b6bb8ff).into()), + color: Some(rgba(0x8464c4ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x8a8a0fff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), @@ -6061,170 +6061,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Forest Light".into(), + name: "Atelier Plateau Light".into(), appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0xaaa3a1ff).into()), - border_variant: Some(rgba(0xd6d1cfff).into()), - border_focused: Some(rgba(0xc6cef7ff).into()), - border_selected: Some(rgba(0xc6cef7ff).into()), + border: Some(rgba(0x8e8989ff).into()), + border_variant: Some(rgba(0xcfc7c7ff).into()), + border_focused: Some(rgba(0xcecaecff).into()), + border_selected: Some(rgba(0xcecaecff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xbcb6b4ff).into()), - elevated_surface_background: Some(rgba(0xe9e6e4ff).into()), - surface_background: Some(rgba(0xe9e6e4ff).into()), - background: Some(rgba(0xcdc8c6ff).into()), - panel_background: Some(rgba(0xe9e6e4ff).into()), - element_background: Some(rgba(0xe9e6e4ff).into()), - element_hover: Some(rgba(0xd6d1cfff).into()), - element_active: Some(rgba(0xaca5a3ff).into()), - element_selected: Some(rgba(0xaca5a3ff).into()), - element_disabled: Some(rgba(0xe9e6e4ff).into()), - drop_target_background: Some(rgba(0x6a636080).into()), + border_disabled: Some(rgba(0xa8a2a2ff).into()), + elevated_surface_background: Some(rgba(0xebe3e3ff).into()), + surface_background: Some(rgba(0xebe3e3ff).into()), + background: Some(rgba(0xc1bbbbff).into()), + panel_background: Some(rgba(0xebe3e3ff).into()), + element_background: Some(rgba(0xebe3e3ff).into()), + element_hover: Some(rgba(0xcfc7c7ff).into()), + element_active: Some(rgba(0x908b8bff).into()), + element_selected: Some(rgba(0x908b8bff).into()), + element_disabled: Some(rgba(0xebe3e3ff).into()), + drop_target_background: Some(rgba(0x5a525280).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xd6d1cfff).into()), - ghost_element_active: Some(rgba(0xaca5a3ff).into()), - ghost_element_selected: Some(rgba(0xaca5a3ff).into()), - ghost_element_disabled: Some(rgba(0xe9e6e4ff).into()), - text: Some(rgba(0x1b1918ff).into()), - text_muted: Some(rgba(0x6a6360ff).into()), - text_placeholder: Some(rgba(0x847c79ff).into()), - text_disabled: Some(rgba(0x847c79ff).into()), - text_accent: Some(rgba(0x417ee6ff).into()), - icon: Some(rgba(0x1b1918ff).into()), - icon_muted: Some(rgba(0x6a6360ff).into()), - icon_disabled: Some(rgba(0x847c79ff).into()), - icon_placeholder: Some(rgba(0x6a6360ff).into()), - icon_accent: Some(rgba(0x417ee6ff).into()), - status_bar_background: Some(rgba(0xcdc8c6ff).into()), - title_bar_background: Some(rgba(0xcdc8c6ff).into()), - toolbar_background: Some(rgba(0xf1efeeff).into()), - tab_bar_background: Some(rgba(0xe9e6e4ff).into()), - tab_inactive_background: Some(rgba(0xe9e6e4ff).into()), - tab_active_background: Some(rgba(0xf1efeeff).into()), - scrollbar_thumb_background: Some(rgba(0x1b19184c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xd6d1cfff).into()), - scrollbar_thumb_border: Some(rgba(0xd6d1cfff).into()), + ghost_element_hover: Some(rgba(0xcfc7c7ff).into()), + ghost_element_active: Some(rgba(0x908b8bff).into()), + ghost_element_selected: Some(rgba(0x908b8bff).into()), + ghost_element_disabled: Some(rgba(0xebe3e3ff).into()), + text: Some(rgba(0x1b1818ff).into()), + text_muted: Some(rgba(0x5a5252ff).into()), + text_placeholder: Some(rgba(0x6e6666ff).into()), + text_disabled: Some(rgba(0x6e6666ff).into()), + text_accent: Some(rgba(0x7372caff).into()), + icon: Some(rgba(0x1b1818ff).into()), + icon_muted: Some(rgba(0x5a5252ff).into()), + icon_disabled: Some(rgba(0x6e6666ff).into()), + icon_placeholder: Some(rgba(0x5a5252ff).into()), + icon_accent: Some(rgba(0x7372caff).into()), + status_bar_background: Some(rgba(0xc1bbbbff).into()), + title_bar_background: Some(rgba(0xc1bbbbff).into()), + toolbar_background: Some(rgba(0xf4ececff).into()), + tab_bar_background: Some(rgba(0xebe3e3ff).into()), + tab_inactive_background: Some(rgba(0xebe3e3ff).into()), + tab_active_background: Some(rgba(0xf4ececff).into()), + scrollbar_thumb_background: Some(rgba(0x1b18184c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xcfc7c7ff).into()), + scrollbar_thumb_border: Some(rgba(0xcfc7c7ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xebe8e6ff).into()), - editor_foreground: Some(rgba(0x2c2421ff).into()), - editor_background: Some(rgba(0xf1efeeff).into()), - editor_gutter_background: Some(rgba(0xf1efeeff).into()), - editor_subheader_background: Some(rgba(0xe9e6e4ff).into()), - editor_active_line_background: Some(rgba(0xe9e6e4bf).into()), - editor_highlighted_line_background: Some(rgba(0xe9e6e4ff).into()), - editor_line_number: Some(rgba(0x1b191859).into()), - editor_active_line_number: Some(rgba(0x1b1918ff).into()), - editor_invisible: Some(rgba(0x6a6360ff).into()), - editor_wrap_guide: Some(rgba(0x1b19180d).into()), - editor_active_wrap_guide: Some(rgba(0x1b19181a).into()), - editor_document_highlight_read_background: Some(rgba(0x417ee61a).into()), - editor_document_highlight_write_background: Some(rgba(0x89817e66).into()), - terminal_background: Some(rgba(0xf1efeeff).into()), - terminal_ansi_bright_black: Some(rgba(0x9e9693ff).into()), - terminal_ansi_bright_red: Some(rgba(0xffa29aff).into()), - terminal_ansi_bright_green: Some(rgba(0xbfca93ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe9c08eff).into()), - terminal_ansi_bright_blue: Some(rgba(0xaebcf4ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe7a6fbff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa6cadbff).into()), - terminal_ansi_bright_white: Some(rgba(0x1b1918ff).into()), - terminal_ansi_black: Some(rgba(0xf1efeeff).into()), - terminal_ansi_red: Some(rgba(0xf22e41ff).into()), - terminal_ansi_green: Some(rgba(0x7b9728ff).into()), - terminal_ansi_yellow: Some(rgba(0xc3841aff).into()), - terminal_ansi_blue: Some(rgba(0x417ee6ff).into()), - terminal_ansi_magenta: Some(rgba(0xc340f2ff).into()), - terminal_ansi_cyan: Some(rgba(0x3f97b8ff).into()), - terminal_ansi_white: Some(rgba(0x1b1918ff).into()), - link_text_hover: Some(rgba(0x417ee6ff).into()), - ..Default::default() - }, - status: StatusColorsRefinement { - conflict: Some(rgba(0xc3841aff).into()), - conflict_background: Some(rgba(0xf8e5d1ff).into()), - conflict_border: Some(rgba(0xf0d1adff).into()), - created: Some(rgba(0x7b9728ff).into()), - created_background: Some(rgba(0xe5e9d3ff).into()), - created_border: Some(rgba(0xd1d8b1ff).into()), - deleted: Some(rgba(0xf22e41ff).into()), - deleted_background: Some(rgba(0xffdad5ff).into()), - deleted_border: Some(rgba(0xffbdb6ff).into()), - error: Some(rgba(0xf22e41ff).into()), - error_background: Some(rgba(0xffdad5ff).into()), - error_border: Some(rgba(0xffbdb6ff).into()), - hidden: Some(rgba(0x847c79ff).into()), - hidden_background: Some(rgba(0xcdc8c6ff).into()), - hidden_border: Some(rgba(0xbcb6b4ff).into()), - hint: Some(rgba(0xa67287ff).into()), - hint_background: Some(rgba(0xdfe3fbff).into()), - hint_border: Some(rgba(0xc6cef7ff).into()), - ignored: Some(rgba(0x6a6360ff).into()), - ignored_background: Some(rgba(0xcdc8c6ff).into()), - ignored_border: Some(rgba(0xaaa3a1ff).into()), - info: Some(rgba(0x417ee6ff).into()), - info_background: Some(rgba(0xdfe3fbff).into()), - info_border: Some(rgba(0xc6cef7ff).into()), - modified: Some(rgba(0xc3841aff).into()), - modified_background: Some(rgba(0xf8e5d1ff).into()), - modified_border: Some(rgba(0xf0d1adff).into()), - predictive: Some(rgba(0xbe899eff).into()), - predictive_background: Some(rgba(0xe5e9d3ff).into()), - predictive_border: Some(rgba(0xd1d8b1ff).into()), - renamed: Some(rgba(0x417ee6ff).into()), - renamed_background: Some(rgba(0xdfe3fbff).into()), - renamed_border: Some(rgba(0xc6cef7ff).into()), - success: Some(rgba(0x7b9728ff).into()), - success_background: Some(rgba(0xe5e9d3ff).into()), - success_border: Some(rgba(0xd1d8b1ff).into()), - unreachable: Some(rgba(0x6a6360ff).into()), - unreachable_background: Some(rgba(0xcdc8c6ff).into()), - unreachable_border: Some(rgba(0xaaa3a1ff).into()), - warning: Some(rgba(0xc3841aff).into()), - warning_background: Some(rgba(0xf8e5d1ff).into()), - warning_border: Some(rgba(0xf0d1adff).into()), + scrollbar_track_border: Some(rgba(0xede5e5ff).into()), + editor_foreground: Some(rgba(0x292424ff).into()), + editor_background: Some(rgba(0xf4ececff).into()), + editor_gutter_background: Some(rgba(0xf4ececff).into()), + editor_subheader_background: Some(rgba(0xebe3e3ff).into()), + editor_active_line_background: Some(rgba(0xebe3e3bf).into()), + editor_highlighted_line_background: Some(rgba(0xebe3e3ff).into()), + editor_line_number: Some(rgba(0x1b181859).into()), + editor_active_line_number: Some(rgba(0x1b1818ff).into()), + editor_invisible: Some(rgba(0x5a5252ff).into()), + editor_wrap_guide: Some(rgba(0x1b18180d).into()), + editor_active_wrap_guide: Some(rgba(0x1b18181a).into()), + editor_document_highlight_read_background: Some(rgba(0x7372ca1a).into()), + editor_document_highlight_write_background: Some(rgba(0x726a6a66).into()), + terminal_background: Some(rgba(0xf4ececff).into()), + terminal_ansi_bright_black: Some(rgba(0x807979ff).into()), + terminal_ansi_bright_red: Some(rgba(0xeda69fff).into()), + terminal_ansi_bright_green: Some(rgba(0xa6c4c4ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xbbb6e5ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe2a9c2ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xacc0daff).into()), + terminal_ansi_bright_white: Some(rgba(0x1b1818ff).into()), + terminal_ansi_black: Some(rgba(0xf4ececff).into()), + terminal_ansi_red: Some(rgba(0xca4a4aff).into()), + terminal_ansi_green: Some(rgba(0x4c8b8bff).into()), + terminal_ansi_yellow: Some(rgba(0xa06e3cff).into()), + terminal_ansi_blue: Some(rgba(0x7372caff).into()), + terminal_ansi_magenta: Some(rgba(0xbd5287ff).into()), + terminal_ansi_cyan: Some(rgba(0x5585b6ff).into()), + terminal_ansi_white: Some(rgba(0x1b1818ff).into()), + link_text_hover: Some(rgba(0x7372caff).into()), + ..Default::default() + }, + status: StatusColorsRefinement { + conflict: Some(rgba(0xa06e3cff).into()), + conflict_background: Some(rgba(0xeee0d5ff).into()), + conflict_border: Some(rgba(0xe0c9b5ff).into()), + created: Some(rgba(0x4c8b8bff).into()), + created_background: Some(rgba(0xdae7e7ff).into()), + created_border: Some(rgba(0xbfd4d4ff).into()), + deleted: Some(rgba(0xca4a4aff).into()), + deleted_background: Some(rgba(0xfadbd7ff).into()), + deleted_border: Some(rgba(0xf4bfbaff).into()), + error: Some(rgba(0xca4a4aff).into()), + error_background: Some(rgba(0xfadbd7ff).into()), + error_border: Some(rgba(0xf4bfbaff).into()), + hidden: Some(rgba(0x6e6666ff).into()), + hidden_background: Some(rgba(0xc1bbbbff).into()), + hidden_border: Some(rgba(0xa8a2a2ff).into()), + hint: Some(rgba(0x916a80ff).into()), + hint_background: Some(rgba(0xe4e1f5ff).into()), + hint_border: Some(rgba(0xcecaecff).into()), + ignored: Some(rgba(0x5a5252ff).into()), + ignored_background: Some(rgba(0xc1bbbbff).into()), + ignored_border: Some(rgba(0x8e8989ff).into()), + info: Some(rgba(0x7372caff).into()), + info_background: Some(rgba(0xe4e1f5ff).into()), + info_border: Some(rgba(0xcecaecff).into()), + modified: Some(rgba(0xa06e3cff).into()), + modified_background: Some(rgba(0xeee0d5ff).into()), + modified_border: Some(rgba(0xe0c9b5ff).into()), + predictive: Some(rgba(0xa27a91ff).into()), + predictive_background: Some(rgba(0xdae7e7ff).into()), + predictive_border: Some(rgba(0xbfd4d4ff).into()), + renamed: Some(rgba(0x7372caff).into()), + renamed_background: Some(rgba(0xe4e1f5ff).into()), + renamed_border: Some(rgba(0xcecaecff).into()), + success: Some(rgba(0x4c8b8bff).into()), + success_background: Some(rgba(0xdae7e7ff).into()), + success_border: Some(rgba(0xbfd4d4ff).into()), + unreachable: Some(rgba(0x5a5252ff).into()), + unreachable_background: Some(rgba(0xc1bbbbff).into()), + unreachable_border: Some(rgba(0x8e8989ff).into()), + warning: Some(rgba(0xa06e3cff).into()), + warning_background: Some(rgba(0xeee0d5ff).into()), + warning_border: Some(rgba(0xe0c9b5ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x417ee6ff).into(), - background: rgba(0x417ee6ff).into(), - selection: rgba(0x417ee63d).into(), + cursor: rgba(0x7372caff).into(), + background: rgba(0x7372caff).into(), + selection: rgba(0x7372ca3d).into(), }, PlayerColor { - cursor: rgba(0xc340f2ff).into(), - background: rgba(0xc340f2ff).into(), - selection: rgba(0xc340f23d).into(), + cursor: rgba(0xbd5287ff).into(), + background: rgba(0xbd5287ff).into(), + selection: rgba(0xbd52873d).into(), }, PlayerColor { - cursor: rgba(0xdf5421ff).into(), - background: rgba(0xdf5421ff).into(), - selection: rgba(0xdf54213d).into(), + cursor: rgba(0xb45b3dff).into(), + background: rgba(0xb45b3dff).into(), + selection: rgba(0xb45b3d3d).into(), }, PlayerColor { - cursor: rgba(0x6766e9ff).into(), - background: rgba(0x6766e9ff).into(), - selection: rgba(0x6766e93d).into(), + cursor: rgba(0x8464c4ff).into(), + background: rgba(0x8464c4ff).into(), + selection: rgba(0x8464c43d).into(), }, PlayerColor { - cursor: rgba(0x3f97b8ff).into(), - background: rgba(0x3f97b8ff).into(), - selection: rgba(0x3f97b83d).into(), + cursor: rgba(0x5585b6ff).into(), + background: rgba(0x5585b6ff).into(), + selection: rgba(0x5585b63d).into(), }, PlayerColor { - cursor: rgba(0xf22e41ff).into(), - background: rgba(0xf22e41ff).into(), - selection: rgba(0xf22e413d).into(), + cursor: rgba(0xca4a4aff).into(), + background: rgba(0xca4a4aff).into(), + selection: rgba(0xca4a4a3d).into(), }, PlayerColor { - cursor: rgba(0xc3841aff).into(), - background: rgba(0xc3841aff).into(), - selection: rgba(0xc3841a3d).into(), + cursor: rgba(0xa06e3cff).into(), + background: rgba(0xa06e3cff).into(), + selection: rgba(0xa06e3c3d).into(), }, PlayerColor { - cursor: rgba(0x7b9728ff).into(), - background: rgba(0x7b9728ff).into(), - selection: rgba(0x7b97283d).into(), + cursor: rgba(0x4c8b8bff).into(), + background: rgba(0x4c8b8bff).into(), + selection: rgba(0x4c8b8b3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -6232,63 +6232,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x7372caff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x7b9728ff).into()), + color: Some(rgba(0x4c8b8bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x9c9491ff).into()), + color: Some(rgba(0x7e7777ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x68615eff).into()), + color: Some(rgba(0x585050ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x7b9728ff).into()), + color: Some(rgba(0x4c8b8bff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x7372caff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x1b1918ff).into()), + color: Some(rgba(0x1b1818ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x7372caff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x7372caff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -6296,35 +6296,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xdf5421ff).into()), + color: Some(rgba(0xb45b3dff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x407ee7ff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x407ee7ff).into()), + color: Some(rgba(0x7272caff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xc38418ff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0xa67287ff).into()), + color: Some(rgba(0x916a80ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -6332,21 +6332,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x6666eaff).into()), + color: Some(rgba(0x8464c4ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x7372caff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xdf5421ff).into()), + color: Some(rgba(0xb45b3dff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -6354,28 +6354,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x7b9728ff).into()), + color: Some(rgba(0x4c8b8bff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xdf5320ff).into()), + color: Some(rgba(0xb45a3cff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x68615eff).into()), + color: Some(rgba(0x585050ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0xbe899eff).into()), + color: Some(rgba(0xa27a91ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -6383,112 +6383,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x1b1918ff).into()), + color: Some(rgba(0x1b1818ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x2c2421ff).into()), + color: Some(rgba(0x292424ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xf22c40ff).into()), + color: Some(rgba(0xca4949ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x2c2421ff).into()), + color: Some(rgba(0x292424ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x68615eff).into()), + color: Some(rgba(0x585050ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x68615eff).into()), + color: Some(rgba(0x585050ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x2c2421ff).into()), + color: Some(rgba(0x292424ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xc33ff3ff).into()), + color: Some(rgba(0xbd5187ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x7b9726ff).into()), + color: Some(rgba(0x4b8b8bff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x68615eff).into()), + color: Some(rgba(0x585050ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x3d97b8ff).into()), + color: Some(rgba(0x5485b6ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xc33ff3ff).into()), + color: Some(rgba(0xbd5187ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x7b9726ff).into()), + color: Some(rgba(0x4b8b8bff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x417ee6ff).into()), + color: Some(rgba(0x7372caff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xdf5421ff).into()), + color: Some(rgba(0xb45b3dff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x1b1918ff).into()), + color: Some(rgba(0x1b1818ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -6496,28 +6496,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xc38418ff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x2c2421ff).into()), + color: Some(rgba(0x292424ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x6666eaff).into()), + color: Some(rgba(0x8464c4ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xc38418ff).into()), + color: Some(rgba(0xa06e3bff).into()), ..Default::default() }, ), @@ -6526,170 +6526,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Dune Light".into(), - appearance: Appearance::Light, + name: "Atelier Savanna Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0xa8a48eff).into()), - border_variant: Some(rgba(0xd7d3beff).into()), - border_focused: Some(rgba(0xcdd1f5ff).into()), - border_selected: Some(rgba(0xcdd1f5ff).into()), + border: Some(rgba(0x505e55ff).into()), + border_variant: Some(rgba(0x2f3832ff).into()), + border_focused: Some(rgba(0x1f3233ff).into()), + border_selected: Some(rgba(0x1f3233ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xbbb7a1ff).into()), - elevated_surface_background: Some(rgba(0xeeebd7ff).into()), - surface_background: Some(rgba(0xeeebd7ff).into()), - background: Some(rgba(0xcecab4ff).into()), - panel_background: Some(rgba(0xeeebd7ff).into()), - element_background: Some(rgba(0xeeebd7ff).into()), - element_hover: Some(rgba(0xd7d3beff).into()), - element_active: Some(rgba(0xaaa690ff).into()), - element_selected: Some(rgba(0xaaa690ff).into()), - element_disabled: Some(rgba(0xeeebd7ff).into()), - drop_target_background: Some(rgba(0x706d5f80).into()), + border_disabled: Some(rgba(0x434f47ff).into()), + elevated_surface_background: Some(rgba(0x1f2621ff).into()), + surface_background: Some(rgba(0x1f2621ff).into()), + background: Some(rgba(0x353f39ff).into()), + panel_background: Some(rgba(0x1f2621ff).into()), + element_background: Some(rgba(0x1f2621ff).into()), + element_hover: Some(rgba(0x2f3832ff).into()), + element_active: Some(rgba(0x4f5c53ff).into()), + element_selected: Some(rgba(0x4f5c53ff).into()), + element_disabled: Some(rgba(0x1f2621ff).into()), + drop_target_background: Some(rgba(0x85918880).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xd7d3beff).into()), - ghost_element_active: Some(rgba(0xaaa690ff).into()), - ghost_element_selected: Some(rgba(0xaaa690ff).into()), - ghost_element_disabled: Some(rgba(0xeeebd7ff).into()), - text: Some(rgba(0x20201dff).into()), - text_muted: Some(rgba(0x706d5fff).into()), - text_placeholder: Some(rgba(0x878471ff).into()), - text_disabled: Some(rgba(0x878471ff).into()), - text_accent: Some(rgba(0x6784e0ff).into()), - icon: Some(rgba(0x20201dff).into()), - icon_muted: Some(rgba(0x706d5fff).into()), - icon_disabled: Some(rgba(0x878471ff).into()), - icon_placeholder: Some(rgba(0x706d5fff).into()), - icon_accent: Some(rgba(0x6784e0ff).into()), - status_bar_background: Some(rgba(0xcecab4ff).into()), - title_bar_background: Some(rgba(0xcecab4ff).into()), - toolbar_background: Some(rgba(0xfefbecff).into()), - tab_bar_background: Some(rgba(0xeeebd7ff).into()), - tab_inactive_background: Some(rgba(0xeeebd7ff).into()), - tab_active_background: Some(rgba(0xfefbecff).into()), - scrollbar_thumb_background: Some(rgba(0x20201d4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xd7d3beff).into()), - scrollbar_thumb_border: Some(rgba(0xd7d3beff).into()), + ghost_element_hover: Some(rgba(0x2f3832ff).into()), + ghost_element_active: Some(rgba(0x4f5c53ff).into()), + ghost_element_selected: Some(rgba(0x4f5c53ff).into()), + ghost_element_disabled: Some(rgba(0x1f2621ff).into()), + text: Some(rgba(0xecf4eeff).into()), + text_muted: Some(rgba(0x859188ff).into()), + text_placeholder: Some(rgba(0x6f7e74ff).into()), + text_disabled: Some(rgba(0x6f7e74ff).into()), + text_accent: Some(rgba(0x478c90ff).into()), + icon: Some(rgba(0xecf4eeff).into()), + icon_muted: Some(rgba(0x859188ff).into()), + icon_disabled: Some(rgba(0x6f7e74ff).into()), + icon_placeholder: Some(rgba(0x859188ff).into()), + icon_accent: Some(rgba(0x478c90ff).into()), + status_bar_background: Some(rgba(0x353f39ff).into()), + title_bar_background: Some(rgba(0x353f39ff).into()), + toolbar_background: Some(rgba(0x171c19ff).into()), + tab_bar_background: Some(rgba(0x1f2621ff).into()), + tab_inactive_background: Some(rgba(0x1f2621ff).into()), + tab_active_background: Some(rgba(0x171c19ff).into()), + scrollbar_thumb_background: Some(rgba(0xecf4ee4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x2f3832ff).into()), + scrollbar_thumb_border: Some(rgba(0x2f3832ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xf2eedcff).into()), - editor_foreground: Some(rgba(0x292824ff).into()), - editor_background: Some(rgba(0xfefbecff).into()), - editor_gutter_background: Some(rgba(0xfefbecff).into()), - editor_subheader_background: Some(rgba(0xeeebd7ff).into()), - editor_active_line_background: Some(rgba(0xeeebd7bf).into()), - editor_highlighted_line_background: Some(rgba(0xeeebd7ff).into()), - editor_line_number: Some(rgba(0x20201d59).into()), - editor_active_line_number: Some(rgba(0x20201dff).into()), - editor_invisible: Some(rgba(0x706d5fff).into()), - editor_wrap_guide: Some(rgba(0x20201d0d).into()), - editor_active_wrap_guide: Some(rgba(0x20201d1a).into()), - editor_document_highlight_read_background: Some(rgba(0x6784e01a).into()), - editor_document_highlight_write_background: Some(rgba(0x8b887466).into()), - terminal_background: Some(rgba(0xfefbecff).into()), - terminal_ansi_bright_black: Some(rgba(0x9b9782ff).into()), - terminal_ansi_bright_red: Some(rgba(0xf7a195ff).into()), - terminal_ansi_bright_green: Some(rgba(0xb3d69cff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xdcc98eff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb8c0f1ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xf3a0a4ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9ed7c0ff).into()), - terminal_ansi_bright_white: Some(rgba(0x20201dff).into()), - terminal_ansi_black: Some(rgba(0xfefbecff).into()), - terminal_ansi_red: Some(rgba(0xd73838ff).into()), - terminal_ansi_green: Some(rgba(0x61ac3aff).into()), - terminal_ansi_yellow: Some(rgba(0xae9515ff).into()), - terminal_ansi_blue: Some(rgba(0x6784e0ff).into()), - terminal_ansi_magenta: Some(rgba(0xd43753ff).into()), - terminal_ansi_cyan: Some(rgba(0x22ad83ff).into()), - terminal_ansi_white: Some(rgba(0x20201dff).into()), - link_text_hover: Some(rgba(0x6784e0ff).into()), + scrollbar_track_border: Some(rgba(0x1e2420ff).into()), + editor_foreground: Some(rgba(0xdfe7e2ff).into()), + editor_background: Some(rgba(0x171c19ff).into()), + editor_gutter_background: Some(rgba(0x171c19ff).into()), + editor_subheader_background: Some(rgba(0x1f2621ff).into()), + editor_active_line_background: Some(rgba(0x1f2621bf).into()), + editor_highlighted_line_background: Some(rgba(0x1f2621ff).into()), + editor_line_number: Some(rgba(0xecf4ee59).into()), + editor_active_line_number: Some(rgba(0xecf4eeff).into()), + editor_invisible: Some(rgba(0x859188ff).into()), + editor_wrap_guide: Some(rgba(0xecf4ee0d).into()), + editor_active_wrap_guide: Some(rgba(0xecf4ee1a).into()), + editor_document_highlight_read_background: Some(rgba(0x478c901a).into()), + editor_document_highlight_write_background: Some(rgba(0x6c7a7166).into()), + terminal_background: Some(rgba(0x171c19ff).into()), + terminal_ansi_bright_black: Some(rgba(0x5d6b62ff).into()), + terminal_ansi_bright_red: Some(rgba(0x563220ff).into()), + terminal_ansi_bright_green: Some(rgba(0x294a33ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4e3f22ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x284546ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x423a36ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1d4b4dff).into()), + terminal_ansi_bright_white: Some(rgba(0xecf4eeff).into()), + terminal_ansi_black: Some(rgba(0x171c19ff).into()), + terminal_ansi_red: Some(rgba(0xb16139ff).into()), + terminal_ansi_green: Some(rgba(0x489963ff).into()), + terminal_ansi_yellow: Some(rgba(0xa07e3bff).into()), + terminal_ansi_blue: Some(rgba(0x478c90ff).into()), + terminal_ansi_magenta: Some(rgba(0x867469ff).into()), + terminal_ansi_cyan: Some(rgba(0x1e9aa0ff).into()), + terminal_ansi_white: Some(rgba(0xecf4eeff).into()), + link_text_hover: Some(rgba(0x478c90ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xae9515ff).into()), - conflict_background: Some(rgba(0xf2e8d1ff).into()), - conflict_border: Some(rgba(0xe7d7aeff).into()), - created: Some(rgba(0x61ac3aff).into()), - created_background: Some(rgba(0xe0eed6ff).into()), - created_border: Some(rgba(0xc9e1b7ff).into()), - deleted: Some(rgba(0xd73838ff).into()), - deleted_background: Some(rgba(0xffd9d4ff).into()), - deleted_border: Some(rgba(0xfcbcb2ff).into()), - error: Some(rgba(0xd73838ff).into()), - error_background: Some(rgba(0xffd9d4ff).into()), - error_border: Some(rgba(0xfcbcb2ff).into()), - hidden: Some(rgba(0x878471ff).into()), - hidden_background: Some(rgba(0xcecab4ff).into()), - hidden_border: Some(rgba(0xbbb7a1ff).into()), - hint: Some(rgba(0xb37979ff).into()), - hint_background: Some(rgba(0xe3e5faff).into()), - hint_border: Some(rgba(0xcdd1f5ff).into()), - ignored: Some(rgba(0x706d5fff).into()), - ignored_background: Some(rgba(0xcecab4ff).into()), - ignored_border: Some(rgba(0xa8a48eff).into()), - info: Some(rgba(0x6784e0ff).into()), - info_background: Some(rgba(0xe3e5faff).into()), - info_border: Some(rgba(0xcdd1f5ff).into()), - modified: Some(rgba(0xae9515ff).into()), - modified_background: Some(rgba(0xf2e8d1ff).into()), - modified_border: Some(rgba(0xe7d7aeff).into()), - predictive: Some(rgba(0xc88a8aff).into()), - predictive_background: Some(rgba(0xe0eed6ff).into()), - predictive_border: Some(rgba(0xc9e1b7ff).into()), - renamed: Some(rgba(0x6784e0ff).into()), - renamed_background: Some(rgba(0xe3e5faff).into()), - renamed_border: Some(rgba(0xcdd1f5ff).into()), - success: Some(rgba(0x61ac3aff).into()), - success_background: Some(rgba(0xe0eed6ff).into()), - success_border: Some(rgba(0xc9e1b7ff).into()), - unreachable: Some(rgba(0x706d5fff).into()), - unreachable_background: Some(rgba(0xcecab4ff).into()), - unreachable_border: Some(rgba(0xa8a48eff).into()), - warning: Some(rgba(0xae9515ff).into()), - warning_background: Some(rgba(0xf2e8d1ff).into()), - warning_border: Some(rgba(0xe7d7aeff).into()), + conflict: Some(rgba(0xa07e3bff).into()), + conflict_background: Some(rgba(0x231d12ff).into()), + conflict_border: Some(rgba(0x392e1aff).into()), + created: Some(rgba(0x489963ff).into()), + created_background: Some(rgba(0x162119ff).into()), + created_border: Some(rgba(0x203626ff).into()), + deleted: Some(rgba(0xb16139ff).into()), + deleted_background: Some(rgba(0x261811ff).into()), + deleted_border: Some(rgba(0x3f2619ff).into()), + error: Some(rgba(0xb16139ff).into()), + error_background: Some(rgba(0x261811ff).into()), + error_border: Some(rgba(0x3f2619ff).into()), + hidden: Some(rgba(0x6f7e74ff).into()), + hidden_background: Some(rgba(0x353f39ff).into()), + hidden_border: Some(rgba(0x434f47ff).into()), + hint: Some(rgba(0x607e76ff).into()), + hint_background: Some(rgba(0x151f20ff).into()), + hint_border: Some(rgba(0x1f3233ff).into()), + ignored: Some(rgba(0x859188ff).into()), + ignored_background: Some(rgba(0x353f39ff).into()), + ignored_border: Some(rgba(0x505e55ff).into()), + info: Some(rgba(0x478c90ff).into()), + info_background: Some(rgba(0x151f20ff).into()), + info_border: Some(rgba(0x1f3233ff).into()), + modified: Some(rgba(0xa07e3bff).into()), + modified_background: Some(rgba(0x231d12ff).into()), + modified_border: Some(rgba(0x392e1aff).into()), + predictive: Some(rgba(0x506d66ff).into()), + predictive_background: Some(rgba(0x162119ff).into()), + predictive_border: Some(rgba(0x203626ff).into()), + renamed: Some(rgba(0x478c90ff).into()), + renamed_background: Some(rgba(0x151f20ff).into()), + renamed_border: Some(rgba(0x1f3233ff).into()), + success: Some(rgba(0x489963ff).into()), + success_background: Some(rgba(0x162119ff).into()), + success_border: Some(rgba(0x203626ff).into()), + unreachable: Some(rgba(0x859188ff).into()), + unreachable_background: Some(rgba(0x353f39ff).into()), + unreachable_border: Some(rgba(0x505e55ff).into()), + warning: Some(rgba(0xa07e3bff).into()), + warning_background: Some(rgba(0x231d12ff).into()), + warning_border: Some(rgba(0x392e1aff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x6784e0ff).into(), - background: rgba(0x6784e0ff).into(), - selection: rgba(0x6784e03d).into(), + cursor: rgba(0x478c90ff).into(), + background: rgba(0x478c90ff).into(), + selection: rgba(0x478c903d).into(), }, PlayerColor { - cursor: rgba(0xd43753ff).into(), - background: rgba(0xd43753ff).into(), - selection: rgba(0xd437533d).into(), + cursor: rgba(0x867469ff).into(), + background: rgba(0x867469ff).into(), + selection: rgba(0x8674693d).into(), }, PlayerColor { - cursor: rgba(0xb65713ff).into(), - background: rgba(0xb65713ff).into(), - selection: rgba(0xb657133d).into(), + cursor: rgba(0x9f713cff).into(), + background: rgba(0x9f713cff).into(), + selection: rgba(0x9f713c3d).into(), }, PlayerColor { - cursor: rgba(0xb855d3ff).into(), - background: rgba(0xb855d3ff).into(), - selection: rgba(0xb855d33d).into(), + cursor: rgba(0x55859bff).into(), + background: rgba(0x55859bff).into(), + selection: rgba(0x55859b3d).into(), }, PlayerColor { - cursor: rgba(0x22ad83ff).into(), - background: rgba(0x22ad83ff).into(), - selection: rgba(0x22ad833d).into(), + cursor: rgba(0x1e9aa0ff).into(), + background: rgba(0x1e9aa0ff).into(), + selection: rgba(0x1e9aa03d).into(), }, PlayerColor { - cursor: rgba(0xd73838ff).into(), - background: rgba(0xd73838ff).into(), - selection: rgba(0xd738383d).into(), + cursor: rgba(0xb16139ff).into(), + background: rgba(0xb16139ff).into(), + selection: rgba(0xb161393d).into(), }, PlayerColor { - cursor: rgba(0xae9515ff).into(), - background: rgba(0xae9515ff).into(), - selection: rgba(0xae95153d).into(), + cursor: rgba(0xa07e3bff).into(), + background: rgba(0xa07e3bff).into(), + selection: rgba(0xa07e3b3d).into(), }, PlayerColor { - cursor: rgba(0x61ac3aff).into(), - background: rgba(0x61ac3aff).into(), - selection: rgba(0x61ac3a3d).into(), + cursor: rgba(0x489963ff).into(), + background: rgba(0x489963ff).into(), + selection: rgba(0x4899633d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -6697,63 +6697,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x6784e0ff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x61ac3aff).into()), + color: Some(rgba(0x489963ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x999580ff).into()), + color: Some(rgba(0x5f6d64ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x6e6b5eff).into()), + color: Some(rgba(0x87928aff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x61ac3aff).into()), + color: Some(rgba(0x489963ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x6784e0ff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x20201dff).into()), + color: Some(rgba(0xecf4eeff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x6784e0ff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x6784e0ff).into()), + color: Some(rgba(0x478c90ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -6761,35 +6761,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xb65713ff).into()), + color: Some(rgba(0x9f713cff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x6684e1ff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x6684e1ff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xae9513ff).into()), + color: Some(rgba(0xa07e3bff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0xb37979ff).into()), + color: Some(rgba(0x607e76ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -6797,21 +6797,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0xb854d4ff).into()), + color: Some(rgba(0x55859bff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x6784e0ff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xb65713ff).into()), + color: Some(rgba(0x9f713cff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -6819,28 +6819,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x61ac3aff).into()), + color: Some(rgba(0x489963ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xb65611ff).into()), + color: Some(rgba(0x9f713cff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x6e6b5eff).into()), + color: Some(rgba(0x87928aff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0xc88a8aff).into()), + color: Some(rgba(0x506d66ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -6848,112 +6848,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x20201dff).into()), + color: Some(rgba(0xecf4eeff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x292824ff).into()), + color: Some(rgba(0xdfe7e2ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xd73737ff).into()), + color: Some(rgba(0xb16139ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x292824ff).into()), + color: Some(rgba(0xdfe7e2ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x6e6b5eff).into()), + color: Some(rgba(0x87928aff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x6e6b5eff).into()), + color: Some(rgba(0x87928aff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x292824ff).into()), + color: Some(rgba(0xdfe7e2ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xd43552ff).into()), + color: Some(rgba(0x867469ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x60ac39ff).into()), + color: Some(rgba(0x489963ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x6e6b5eff).into()), + color: Some(rgba(0x87928aff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x1fad83ff).into()), + color: Some(rgba(0x1c9aa0ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xd43552ff).into()), + color: Some(rgba(0x867469ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x60ac39ff).into()), + color: Some(rgba(0x489963ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x6784e0ff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xb65713ff).into()), + color: Some(rgba(0x9f713cff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x20201dff).into()), + color: Some(rgba(0xecf4eeff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -6961,28 +6961,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xae9513ff).into()), + color: Some(rgba(0xa07e3bff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x292824ff).into()), + color: Some(rgba(0xdfe7e2ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0xb854d4ff).into()), + color: Some(rgba(0x55859bff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xae9513ff).into()), + color: Some(rgba(0xa07e3bff).into()), ..Default::default() }, ), @@ -6991,170 +6991,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Plateau Light".into(), + name: "Atelier Savanna Light".into(), appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x8e8989ff).into()), - border_variant: Some(rgba(0xcfc7c7ff).into()), - border_focused: Some(rgba(0xcecaecff).into()), - border_selected: Some(rgba(0xcecaecff).into()), + border: Some(rgba(0x8b968eff).into()), + border_variant: Some(rgba(0xc8d1cbff).into()), + border_focused: Some(rgba(0xbed4d6ff).into()), + border_selected: Some(rgba(0xbed4d6ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xa8a2a2ff).into()), - elevated_surface_background: Some(rgba(0xebe3e3ff).into()), - surface_background: Some(rgba(0xebe3e3ff).into()), - background: Some(rgba(0xc1bbbbff).into()), - panel_background: Some(rgba(0xebe3e3ff).into()), - element_background: Some(rgba(0xebe3e3ff).into()), - element_hover: Some(rgba(0xcfc7c7ff).into()), - element_active: Some(rgba(0x908b8bff).into()), - element_selected: Some(rgba(0x908b8bff).into()), - element_disabled: Some(rgba(0xebe3e3ff).into()), - drop_target_background: Some(rgba(0x5a525280).into()), + border_disabled: Some(rgba(0xa3ada6ff).into()), + elevated_surface_background: Some(rgba(0xe3ebe6ff).into()), + surface_background: Some(rgba(0xe3ebe6ff).into()), + background: Some(rgba(0xbcc5bfff).into()), + panel_background: Some(rgba(0xe3ebe6ff).into()), + element_background: Some(rgba(0xe3ebe6ff).into()), + element_hover: Some(rgba(0xc8d1cbff).into()), + element_active: Some(rgba(0x8d9890ff).into()), + element_selected: Some(rgba(0x8d9890ff).into()), + element_disabled: Some(rgba(0xe3ebe6ff).into()), + drop_target_background: Some(rgba(0x54625980).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xcfc7c7ff).into()), - ghost_element_active: Some(rgba(0x908b8bff).into()), - ghost_element_selected: Some(rgba(0x908b8bff).into()), - ghost_element_disabled: Some(rgba(0xebe3e3ff).into()), - text: Some(rgba(0x1b1818ff).into()), - text_muted: Some(rgba(0x5a5252ff).into()), - text_placeholder: Some(rgba(0x6e6666ff).into()), - text_disabled: Some(rgba(0x6e6666ff).into()), - text_accent: Some(rgba(0x7372caff).into()), - icon: Some(rgba(0x1b1818ff).into()), - icon_muted: Some(rgba(0x5a5252ff).into()), - icon_disabled: Some(rgba(0x6e6666ff).into()), - icon_placeholder: Some(rgba(0x5a5252ff).into()), - icon_accent: Some(rgba(0x7372caff).into()), - status_bar_background: Some(rgba(0xc1bbbbff).into()), - title_bar_background: Some(rgba(0xc1bbbbff).into()), - toolbar_background: Some(rgba(0xf4ececff).into()), - tab_bar_background: Some(rgba(0xebe3e3ff).into()), - tab_inactive_background: Some(rgba(0xebe3e3ff).into()), - tab_active_background: Some(rgba(0xf4ececff).into()), - scrollbar_thumb_background: Some(rgba(0x1b18184c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xcfc7c7ff).into()), - scrollbar_thumb_border: Some(rgba(0xcfc7c7ff).into()), + ghost_element_hover: Some(rgba(0xc8d1cbff).into()), + ghost_element_active: Some(rgba(0x8d9890ff).into()), + ghost_element_selected: Some(rgba(0x8d9890ff).into()), + ghost_element_disabled: Some(rgba(0xe3ebe6ff).into()), + text: Some(rgba(0x171c19ff).into()), + text_muted: Some(rgba(0x546259ff).into()), + text_placeholder: Some(rgba(0x68766dff).into()), + text_disabled: Some(rgba(0x68766dff).into()), + text_accent: Some(rgba(0x488c90ff).into()), + icon: Some(rgba(0x171c19ff).into()), + icon_muted: Some(rgba(0x546259ff).into()), + icon_disabled: Some(rgba(0x68766dff).into()), + icon_placeholder: Some(rgba(0x546259ff).into()), + icon_accent: Some(rgba(0x488c90ff).into()), + status_bar_background: Some(rgba(0xbcc5bfff).into()), + title_bar_background: Some(rgba(0xbcc5bfff).into()), + toolbar_background: Some(rgba(0xecf4eeff).into()), + tab_bar_background: Some(rgba(0xe3ebe6ff).into()), + tab_inactive_background: Some(rgba(0xe3ebe6ff).into()), + tab_active_background: Some(rgba(0xecf4eeff).into()), + scrollbar_thumb_background: Some(rgba(0x171c194c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xc8d1cbff).into()), + scrollbar_thumb_border: Some(rgba(0xc8d1cbff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xede5e5ff).into()), - editor_foreground: Some(rgba(0x292424ff).into()), - editor_background: Some(rgba(0xf4ececff).into()), - editor_gutter_background: Some(rgba(0xf4ececff).into()), - editor_subheader_background: Some(rgba(0xebe3e3ff).into()), - editor_active_line_background: Some(rgba(0xebe3e3bf).into()), - editor_highlighted_line_background: Some(rgba(0xebe3e3ff).into()), - editor_line_number: Some(rgba(0x1b181859).into()), - editor_active_line_number: Some(rgba(0x1b1818ff).into()), - editor_invisible: Some(rgba(0x5a5252ff).into()), - editor_wrap_guide: Some(rgba(0x1b18180d).into()), - editor_active_wrap_guide: Some(rgba(0x1b18181a).into()), - editor_document_highlight_read_background: Some(rgba(0x7372ca1a).into()), - editor_document_highlight_write_background: Some(rgba(0x726a6a66).into()), - terminal_background: Some(rgba(0xf4ececff).into()), - terminal_ansi_bright_black: Some(rgba(0x807979ff).into()), - terminal_ansi_bright_red: Some(rgba(0xeda69fff).into()), - terminal_ansi_bright_green: Some(rgba(0xa6c4c4ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xbbb6e5ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe2a9c2ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xacc0daff).into()), - terminal_ansi_bright_white: Some(rgba(0x1b1818ff).into()), - terminal_ansi_black: Some(rgba(0xf4ececff).into()), - terminal_ansi_red: Some(rgba(0xca4a4aff).into()), - terminal_ansi_green: Some(rgba(0x4c8b8bff).into()), - terminal_ansi_yellow: Some(rgba(0xa06e3cff).into()), - terminal_ansi_blue: Some(rgba(0x7372caff).into()), - terminal_ansi_magenta: Some(rgba(0xbd5287ff).into()), - terminal_ansi_cyan: Some(rgba(0x5585b6ff).into()), - terminal_ansi_white: Some(rgba(0x1b1818ff).into()), - link_text_hover: Some(rgba(0x7372caff).into()), + scrollbar_track_border: Some(rgba(0xe5ede7ff).into()), + editor_foreground: Some(rgba(0x232a25ff).into()), + editor_background: Some(rgba(0xecf4eeff).into()), + editor_gutter_background: Some(rgba(0xecf4eeff).into()), + editor_subheader_background: Some(rgba(0xe3ebe6ff).into()), + editor_active_line_background: Some(rgba(0xe3ebe6bf).into()), + editor_highlighted_line_background: Some(rgba(0xe3ebe6ff).into()), + editor_line_number: Some(rgba(0x171c1959).into()), + editor_active_line_number: Some(rgba(0x171c19ff).into()), + editor_invisible: Some(rgba(0x546259ff).into()), + editor_wrap_guide: Some(rgba(0x171c190d).into()), + editor_active_wrap_guide: Some(rgba(0x171c191a).into()), + editor_document_highlight_read_background: Some(rgba(0x488c901a).into()), + editor_document_highlight_write_background: Some(rgba(0x6c7a7166).into()), + terminal_background: Some(rgba(0xecf4eeff).into()), + terminal_ansi_bright_black: Some(rgba(0x7b897fff).into()), + terminal_ansi_bright_red: Some(rgba(0xdeae97ff).into()), + terminal_ansi_bright_green: Some(rgba(0xa5ccafff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd3bd9aff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa5c5c6ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xc2b7b1ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9dcdcfff).into()), + terminal_ansi_bright_white: Some(rgba(0x171c19ff).into()), + terminal_ansi_black: Some(rgba(0xecf4eeff).into()), + terminal_ansi_red: Some(rgba(0xb1623aff).into()), + terminal_ansi_green: Some(rgba(0x499963ff).into()), + terminal_ansi_yellow: Some(rgba(0xa07e3cff).into()), + terminal_ansi_blue: Some(rgba(0x488c90ff).into()), + terminal_ansi_magenta: Some(rgba(0x867469ff).into()), + terminal_ansi_cyan: Some(rgba(0x1f9aa0ff).into()), + terminal_ansi_white: Some(rgba(0x171c19ff).into()), + link_text_hover: Some(rgba(0x488c90ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xa06e3cff).into()), - conflict_background: Some(rgba(0xeee0d5ff).into()), - conflict_border: Some(rgba(0xe0c9b5ff).into()), - created: Some(rgba(0x4c8b8bff).into()), - created_background: Some(rgba(0xdae7e7ff).into()), - created_border: Some(rgba(0xbfd4d4ff).into()), - deleted: Some(rgba(0xca4a4aff).into()), - deleted_background: Some(rgba(0xfadbd7ff).into()), - deleted_border: Some(rgba(0xf4bfbaff).into()), - error: Some(rgba(0xca4a4aff).into()), - error_background: Some(rgba(0xfadbd7ff).into()), - error_border: Some(rgba(0xf4bfbaff).into()), - hidden: Some(rgba(0x6e6666ff).into()), - hidden_background: Some(rgba(0xc1bbbbff).into()), - hidden_border: Some(rgba(0xa8a2a2ff).into()), - hint: Some(rgba(0x916a80ff).into()), - hint_background: Some(rgba(0xe4e1f5ff).into()), - hint_border: Some(rgba(0xcecaecff).into()), - ignored: Some(rgba(0x5a5252ff).into()), - ignored_background: Some(rgba(0xc1bbbbff).into()), - ignored_border: Some(rgba(0x8e8989ff).into()), - info: Some(rgba(0x7372caff).into()), - info_background: Some(rgba(0xe4e1f5ff).into()), - info_border: Some(rgba(0xcecaecff).into()), - modified: Some(rgba(0xa06e3cff).into()), - modified_background: Some(rgba(0xeee0d5ff).into()), - modified_border: Some(rgba(0xe0c9b5ff).into()), - predictive: Some(rgba(0xa27a91ff).into()), - predictive_background: Some(rgba(0xdae7e7ff).into()), - predictive_border: Some(rgba(0xbfd4d4ff).into()), - renamed: Some(rgba(0x7372caff).into()), - renamed_background: Some(rgba(0xe4e1f5ff).into()), - renamed_border: Some(rgba(0xcecaecff).into()), - success: Some(rgba(0x4c8b8bff).into()), - success_background: Some(rgba(0xdae7e7ff).into()), - success_border: Some(rgba(0xbfd4d4ff).into()), - unreachable: Some(rgba(0x5a5252ff).into()), - unreachable_background: Some(rgba(0xc1bbbbff).into()), - unreachable_border: Some(rgba(0x8e8989ff).into()), - warning: Some(rgba(0xa06e3cff).into()), - warning_background: Some(rgba(0xeee0d5ff).into()), - warning_border: Some(rgba(0xe0c9b5ff).into()), + conflict: Some(rgba(0xa07e3cff).into()), + conflict_background: Some(rgba(0xeee4d5ff).into()), + conflict_border: Some(rgba(0xdfcfb6ff).into()), + created: Some(rgba(0x499963ff).into()), + created_background: Some(rgba(0xdaeadeff).into()), + created_border: Some(rgba(0xbedac5ff).into()), + deleted: Some(rgba(0xb1623aff).into()), + deleted_background: Some(rgba(0xf3ded4ff).into()), + deleted_border: Some(rgba(0xe8c5b4ff).into()), + error: Some(rgba(0xb1623aff).into()), + error_background: Some(rgba(0xf3ded4ff).into()), + error_border: Some(rgba(0xe8c5b4ff).into()), + hidden: Some(rgba(0x68766dff).into()), + hidden_background: Some(rgba(0xbcc5bfff).into()), + hidden_border: Some(rgba(0xa3ada6ff).into()), + hint: Some(rgba(0x66847cff).into()), + hint_background: Some(rgba(0xdae7e8ff).into()), + hint_border: Some(rgba(0xbed4d6ff).into()), + ignored: Some(rgba(0x546259ff).into()), + ignored_background: Some(rgba(0xbcc5bfff).into()), + ignored_border: Some(rgba(0x8b968eff).into()), + info: Some(rgba(0x488c90ff).into()), + info_background: Some(rgba(0xdae7e8ff).into()), + info_border: Some(rgba(0xbed4d6ff).into()), + modified: Some(rgba(0xa07e3cff).into()), + modified_background: Some(rgba(0xeee4d5ff).into()), + modified_border: Some(rgba(0xdfcfb6ff).into()), + predictive: Some(rgba(0x76958cff).into()), + predictive_background: Some(rgba(0xdaeadeff).into()), + predictive_border: Some(rgba(0xbedac5ff).into()), + renamed: Some(rgba(0x488c90ff).into()), + renamed_background: Some(rgba(0xdae7e8ff).into()), + renamed_border: Some(rgba(0xbed4d6ff).into()), + success: Some(rgba(0x499963ff).into()), + success_background: Some(rgba(0xdaeadeff).into()), + success_border: Some(rgba(0xbedac5ff).into()), + unreachable: Some(rgba(0x546259ff).into()), + unreachable_background: Some(rgba(0xbcc5bfff).into()), + unreachable_border: Some(rgba(0x8b968eff).into()), + warning: Some(rgba(0xa07e3cff).into()), + warning_background: Some(rgba(0xeee4d5ff).into()), + warning_border: Some(rgba(0xdfcfb6ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x7372caff).into(), - background: rgba(0x7372caff).into(), - selection: rgba(0x7372ca3d).into(), + cursor: rgba(0x488c90ff).into(), + background: rgba(0x488c90ff).into(), + selection: rgba(0x488c903d).into(), }, PlayerColor { - cursor: rgba(0xbd5287ff).into(), - background: rgba(0xbd5287ff).into(), - selection: rgba(0xbd52873d).into(), + cursor: rgba(0x867469ff).into(), + background: rgba(0x867469ff).into(), + selection: rgba(0x8674693d).into(), }, PlayerColor { - cursor: rgba(0xb45b3dff).into(), - background: rgba(0xb45b3dff).into(), - selection: rgba(0xb45b3d3d).into(), + cursor: rgba(0x9f713dff).into(), + background: rgba(0x9f713dff).into(), + selection: rgba(0x9f713d3d).into(), }, PlayerColor { - cursor: rgba(0x8464c4ff).into(), - background: rgba(0x8464c4ff).into(), - selection: rgba(0x8464c43d).into(), + cursor: rgba(0x56859bff).into(), + background: rgba(0x56859bff).into(), + selection: rgba(0x56859b3d).into(), }, PlayerColor { - cursor: rgba(0x5585b6ff).into(), - background: rgba(0x5585b6ff).into(), - selection: rgba(0x5585b63d).into(), + cursor: rgba(0x1f9aa0ff).into(), + background: rgba(0x1f9aa0ff).into(), + selection: rgba(0x1f9aa03d).into(), }, PlayerColor { - cursor: rgba(0xca4a4aff).into(), - background: rgba(0xca4a4aff).into(), - selection: rgba(0xca4a4a3d).into(), + cursor: rgba(0xb1623aff).into(), + background: rgba(0xb1623aff).into(), + selection: rgba(0xb1623a3d).into(), }, PlayerColor { - cursor: rgba(0xa06e3cff).into(), - background: rgba(0xa06e3cff).into(), - selection: rgba(0xa06e3c3d).into(), + cursor: rgba(0xa07e3cff).into(), + background: rgba(0xa07e3cff).into(), + selection: rgba(0xa07e3c3d).into(), }, PlayerColor { - cursor: rgba(0x4c8b8bff).into(), - background: rgba(0x4c8b8bff).into(), - selection: rgba(0x4c8b8b3d).into(), + cursor: rgba(0x499963ff).into(), + background: rgba(0x499963ff).into(), + selection: rgba(0x4999633d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -7162,63 +7162,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x7372caff).into()), + color: Some(rgba(0x488c90ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x4c8b8bff).into()), + color: Some(rgba(0x499963ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x7e7777ff).into()), + color: Some(rgba(0x78877dff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x585050ff).into()), + color: Some(rgba(0x526057ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x4c8b8bff).into()), + color: Some(rgba(0x499963ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x7372caff).into()), + color: Some(rgba(0x488c90ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x1b1818ff).into()), + color: Some(rgba(0x171c19ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x7372caff).into()), + color: Some(rgba(0x488c90ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x7372caff).into()), + color: Some(rgba(0x488c90ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -7226,35 +7226,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xb45b3dff).into()), + color: Some(rgba(0x9f713dff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x7272caff).into()), + color: Some(rgba(0x478c90ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xa07e3bff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x916a80ff).into()), + color: Some(rgba(0x66847cff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -7262,21 +7262,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x8464c4ff).into()), + color: Some(rgba(0x55859bff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x7372caff).into()), + color: Some(rgba(0x488c90ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xb45b3dff).into()), + color: Some(rgba(0x9f713dff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -7284,28 +7284,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x4c8b8bff).into()), + color: Some(rgba(0x499963ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xb45a3cff).into()), + color: Some(rgba(0x9f713cff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x585050ff).into()), + color: Some(rgba(0x526057ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0xa27a91ff).into()), + color: Some(rgba(0x76958cff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -7313,112 +7313,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x1b1818ff).into()), + color: Some(rgba(0x171c19ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x292424ff).into()), + color: Some(rgba(0x232a25ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xca4949ff).into()), + color: Some(rgba(0xb16139ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x292424ff).into()), + color: Some(rgba(0x232a25ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x585050ff).into()), + color: Some(rgba(0x526057ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x585050ff).into()), + color: Some(rgba(0x526057ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x292424ff).into()), + color: Some(rgba(0x232a25ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xbd5187ff).into()), + color: Some(rgba(0x867469ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x4b8b8bff).into()), + color: Some(rgba(0x489963ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x585050ff).into()), + color: Some(rgba(0x526057ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x5485b6ff).into()), + color: Some(rgba(0x1c9aa0ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xbd5187ff).into()), + color: Some(rgba(0x867469ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x4b8b8bff).into()), + color: Some(rgba(0x489963ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x7372caff).into()), + color: Some(rgba(0x488c90ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xb45b3dff).into()), + color: Some(rgba(0x9f713dff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x1b1818ff).into()), + color: Some(rgba(0x171c19ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -7426,28 +7426,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xa07e3bff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x292424ff).into()), + color: Some(rgba(0x232a25ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x8464c4ff).into()), + color: Some(rgba(0x55859bff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xa06e3bff).into()), + color: Some(rgba(0xa07e3bff).into()), ..Default::default() }, ), @@ -7456,145 +7456,145 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Seaside Light".into(), - appearance: Appearance::Light, + name: "Atelier Seaside Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x8ea88eff).into()), - border_variant: Some(rgba(0xbed7beff).into()), - border_focused: Some(rgba(0xc9c4fdff).into()), - border_selected: Some(rgba(0xc9c4fdff).into()), + border: Some(rgba(0x5c6c5cff).into()), + border_variant: Some(rgba(0x333b33ff).into()), + border_focused: Some(rgba(0x102668ff).into()), + border_selected: Some(rgba(0x102668ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xa1bba1ff).into()), - elevated_surface_background: Some(rgba(0xdaeedaff).into()), - surface_background: Some(rgba(0xdaeedaff).into()), - background: Some(rgba(0xb4ceb4ff).into()), - panel_background: Some(rgba(0xdaeedaff).into()), - element_background: Some(rgba(0xdaeedaff).into()), - element_hover: Some(rgba(0xbed7beff).into()), - element_active: Some(rgba(0x90aa90ff).into()), - element_selected: Some(rgba(0x90aa90ff).into()), - element_disabled: Some(rgba(0xdaeedaff).into()), - drop_target_background: Some(rgba(0x5f705f80).into()), + border_disabled: Some(rgba(0x4b584bff).into()), + elevated_surface_background: Some(rgba(0x1f231fff).into()), + surface_background: Some(rgba(0x1f231fff).into()), + background: Some(rgba(0x3b453bff).into()), + panel_background: Some(rgba(0x1f231fff).into()), + element_background: Some(rgba(0x1f231fff).into()), + element_hover: Some(rgba(0x333b33ff).into()), + element_active: Some(rgba(0x5a6a5aff).into()), + element_selected: Some(rgba(0x5a6a5aff).into()), + element_disabled: Some(rgba(0x1f231fff).into()), + drop_target_background: Some(rgba(0x8ba48b80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xbed7beff).into()), - ghost_element_active: Some(rgba(0x90aa90ff).into()), - ghost_element_selected: Some(rgba(0x90aa90ff).into()), - ghost_element_disabled: Some(rgba(0xdaeedaff).into()), - text: Some(rgba(0x131513ff).into()), - text_muted: Some(rgba(0x5f705fff).into()), - text_placeholder: Some(rgba(0x718771ff).into()), - text_disabled: Some(rgba(0x718771ff).into()), - text_accent: Some(rgba(0x3f62f4ff).into()), - icon: Some(rgba(0x131513ff).into()), - icon_muted: Some(rgba(0x5f705fff).into()), - icon_disabled: Some(rgba(0x718771ff).into()), - icon_placeholder: Some(rgba(0x5f705fff).into()), - icon_accent: Some(rgba(0x3f62f4ff).into()), - status_bar_background: Some(rgba(0xb4ceb4ff).into()), - title_bar_background: Some(rgba(0xb4ceb4ff).into()), - toolbar_background: Some(rgba(0xf4fbf4ff).into()), - tab_bar_background: Some(rgba(0xdaeedaff).into()), - tab_inactive_background: Some(rgba(0xdaeedaff).into()), - tab_active_background: Some(rgba(0xf4fbf4ff).into()), - scrollbar_thumb_background: Some(rgba(0x1315134c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xbed7beff).into()), - scrollbar_thumb_border: Some(rgba(0xbed7beff).into()), + ghost_element_hover: Some(rgba(0x333b33ff).into()), + ghost_element_active: Some(rgba(0x5a6a5aff).into()), + ghost_element_selected: Some(rgba(0x5a6a5aff).into()), + ghost_element_disabled: Some(rgba(0x1f231fff).into()), + text: Some(rgba(0xf4fbf4ff).into()), + text_muted: Some(rgba(0x8ba48bff).into()), + text_placeholder: Some(rgba(0x778f77ff).into()), + text_disabled: Some(rgba(0x778f77ff).into()), + text_accent: Some(rgba(0x3e62f4ff).into()), + icon: Some(rgba(0xf4fbf4ff).into()), + icon_muted: Some(rgba(0x8ba48bff).into()), + icon_disabled: Some(rgba(0x778f77ff).into()), + icon_placeholder: Some(rgba(0x8ba48bff).into()), + icon_accent: Some(rgba(0x3e62f4ff).into()), + status_bar_background: Some(rgba(0x3b453bff).into()), + title_bar_background: Some(rgba(0x3b453bff).into()), + toolbar_background: Some(rgba(0x131513ff).into()), + tab_bar_background: Some(rgba(0x1f231fff).into()), + tab_inactive_background: Some(rgba(0x1f231fff).into()), + tab_active_background: Some(rgba(0x131513ff).into()), + scrollbar_thumb_background: Some(rgba(0xf4fbf44c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x333b33ff).into()), + scrollbar_thumb_border: Some(rgba(0x333b33ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xdff0dfff).into()), - editor_foreground: Some(rgba(0x242924ff).into()), - editor_background: Some(rgba(0xf4fbf4ff).into()), - editor_gutter_background: Some(rgba(0xf4fbf4ff).into()), - editor_subheader_background: Some(rgba(0xdaeedaff).into()), - editor_active_line_background: Some(rgba(0xdaeedabf).into()), - editor_highlighted_line_background: Some(rgba(0xdaeedaff).into()), - editor_line_number: Some(rgba(0x13151359).into()), - editor_active_line_number: Some(rgba(0x131513ff).into()), - editor_invisible: Some(rgba(0x5f705fff).into()), - editor_wrap_guide: Some(rgba(0x1315130d).into()), - editor_active_wrap_guide: Some(rgba(0x1315131a).into()), - editor_document_highlight_read_background: Some(rgba(0x3f62f41a).into()), - editor_document_highlight_write_background: Some(rgba(0x748b7466).into()), - terminal_background: Some(rgba(0xf4fbf4ff).into()), - terminal_ansi_bright_black: Some(rgba(0x829b82ff).into()), - terminal_ansi_bright_red: Some(rgba(0xff9d98ff).into()), - terminal_ansi_bright_green: Some(rgba(0xa0d294ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd0ca90ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb1adfcff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xf9a1e1ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fccd9ff).into()), - terminal_ansi_bright_white: Some(rgba(0x131513ff).into()), - terminal_ansi_black: Some(rgba(0xf4fbf4ff).into()), - terminal_ansi_red: Some(rgba(0xe61c3dff).into()), - terminal_ansi_green: Some(rgba(0x2ba32bff).into()), - terminal_ansi_yellow: Some(rgba(0x98981dff).into()), - terminal_ansi_blue: Some(rgba(0x3f62f4ff).into()), - terminal_ansi_magenta: Some(rgba(0xe61dc3ff).into()), - terminal_ansi_cyan: Some(rgba(0x1d99b3ff).into()), - terminal_ansi_white: Some(rgba(0x131513ff).into()), - link_text_hover: Some(rgba(0x3f62f4ff).into()), + scrollbar_track_border: Some(rgba(0x1d201dff).into()), + editor_foreground: Some(rgba(0xcfe8cfff).into()), + editor_background: Some(rgba(0x131513ff).into()), + editor_gutter_background: Some(rgba(0x131513ff).into()), + editor_subheader_background: Some(rgba(0x1f231fff).into()), + editor_active_line_background: Some(rgba(0x1f231fbf).into()), + editor_highlighted_line_background: Some(rgba(0x1f231fff).into()), + editor_line_number: Some(rgba(0xf4fbf459).into()), + editor_active_line_number: Some(rgba(0xf4fbf4ff).into()), + editor_invisible: Some(rgba(0x8ba48bff).into()), + editor_wrap_guide: Some(rgba(0xf4fbf40d).into()), + editor_active_wrap_guide: Some(rgba(0xf4fbf41a).into()), + editor_document_highlight_read_background: Some(rgba(0x3e62f41a).into()), + editor_document_highlight_write_background: Some(rgba(0x748b7466).into()), + terminal_background: Some(rgba(0x131513ff).into()), + terminal_ansi_bright_black: Some(rgba(0x667a66ff).into()), + terminal_ansi_bright_red: Some(rgba(0x840b21ff).into()), + terminal_ansi_bright_green: Some(rgba(0x204f1bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4b4a17ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x193385ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x810e60ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1d4a56ff).into()), + terminal_ansi_bright_white: Some(rgba(0xf4fbf4ff).into()), + terminal_ansi_black: Some(rgba(0x131513ff).into()), + terminal_ansi_red: Some(rgba(0xe61c3cff).into()), + terminal_ansi_green: Some(rgba(0x2ba32aff).into()), + terminal_ansi_yellow: Some(rgba(0x98981cff).into()), + terminal_ansi_blue: Some(rgba(0x3e62f4ff).into()), + terminal_ansi_magenta: Some(rgba(0xe61cc3ff).into()), + terminal_ansi_cyan: Some(rgba(0x1c99b3ff).into()), + terminal_ansi_white: Some(rgba(0xf4fbf4ff).into()), + link_text_hover: Some(rgba(0x3e62f4ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0x98981dff).into()), - conflict_background: Some(rgba(0xede9d2ff).into()), - conflict_border: Some(rgba(0xddd8afff).into()), - created: Some(rgba(0x2ba32bff).into()), - created_background: Some(rgba(0xd9edd4ff).into()), - created_border: Some(rgba(0xbbdeb2ff).into()), - deleted: Some(rgba(0xe61c3dff).into()), - deleted_background: Some(rgba(0xffd8d4ff).into()), - deleted_border: Some(rgba(0xffb9b4ff).into()), - error: Some(rgba(0xe61c3dff).into()), - error_background: Some(rgba(0xffd8d4ff).into()), - error_border: Some(rgba(0xffb9b4ff).into()), - hidden: Some(rgba(0x718771ff).into()), - hidden_background: Some(rgba(0xb4ceb4ff).into()), - hidden_border: Some(rgba(0xa1bba1ff).into()), - hint: Some(rgba(0x008fa1ff).into()), - hint_background: Some(rgba(0xe1ddfeff).into()), - hint_border: Some(rgba(0xc9c4fdff).into()), - ignored: Some(rgba(0x5f705fff).into()), - ignored_background: Some(rgba(0xb4ceb4ff).into()), - ignored_border: Some(rgba(0x8ea88eff).into()), - info: Some(rgba(0x3f62f4ff).into()), - info_background: Some(rgba(0xe1ddfeff).into()), - info_border: Some(rgba(0xc9c4fdff).into()), - modified: Some(rgba(0x98981dff).into()), - modified_background: Some(rgba(0xede9d2ff).into()), - modified_border: Some(rgba(0xddd8afff).into()), - predictive: Some(rgba(0x00a2b5ff).into()), - predictive_background: Some(rgba(0xd9edd4ff).into()), - predictive_border: Some(rgba(0xbbdeb2ff).into()), - renamed: Some(rgba(0x3f62f4ff).into()), - renamed_background: Some(rgba(0xe1ddfeff).into()), - renamed_border: Some(rgba(0xc9c4fdff).into()), - success: Some(rgba(0x2ba32bff).into()), - success_background: Some(rgba(0xd9edd4ff).into()), - success_border: Some(rgba(0xbbdeb2ff).into()), - unreachable: Some(rgba(0x5f705fff).into()), - unreachable_background: Some(rgba(0xb4ceb4ff).into()), - unreachable_border: Some(rgba(0x8ea88eff).into()), - warning: Some(rgba(0x98981dff).into()), - warning_background: Some(rgba(0xede9d2ff).into()), - warning_border: Some(rgba(0xddd8afff).into()), + conflict: Some(rgba(0x98981cff).into()), + conflict_background: Some(rgba(0x22210fff).into()), + conflict_border: Some(rgba(0x373614ff).into()), + created: Some(rgba(0x2ba32aff).into()), + created_background: Some(rgba(0x142310ff).into()), + created_border: Some(rgba(0x1b3917ff).into()), + deleted: Some(rgba(0xe61c3cff).into()), + deleted_background: Some(rgba(0x500412ff).into()), + deleted_border: Some(rgba(0x6b071aff).into()), + error: Some(rgba(0xe61c3cff).into()), + error_background: Some(rgba(0x500412ff).into()), + error_border: Some(rgba(0x6b071aff).into()), + hidden: Some(rgba(0x778f77ff).into()), + hidden_background: Some(rgba(0x3b453bff).into()), + hidden_border: Some(rgba(0x4b584bff).into()), + hint: Some(rgba(0x008b9fff).into()), + hint_background: Some(rgba(0x061949ff).into()), + hint_border: Some(rgba(0x102668ff).into()), + ignored: Some(rgba(0x8ba48bff).into()), + ignored_background: Some(rgba(0x3b453bff).into()), + ignored_border: Some(rgba(0x5c6c5cff).into()), + info: Some(rgba(0x3e62f4ff).into()), + info_background: Some(rgba(0x061949ff).into()), + info_border: Some(rgba(0x102668ff).into()), + modified: Some(rgba(0x98981cff).into()), + modified_background: Some(rgba(0x22210fff).into()), + modified_border: Some(rgba(0x373614ff).into()), + predictive: Some(rgba(0x00788bff).into()), + predictive_background: Some(rgba(0x142310ff).into()), + predictive_border: Some(rgba(0x1b3917ff).into()), + renamed: Some(rgba(0x3e62f4ff).into()), + renamed_background: Some(rgba(0x061949ff).into()), + renamed_border: Some(rgba(0x102668ff).into()), + success: Some(rgba(0x2ba32aff).into()), + success_background: Some(rgba(0x142310ff).into()), + success_border: Some(rgba(0x1b3917ff).into()), + unreachable: Some(rgba(0x8ba48bff).into()), + unreachable_background: Some(rgba(0x3b453bff).into()), + unreachable_border: Some(rgba(0x5c6c5cff).into()), + warning: Some(rgba(0x98981cff).into()), + warning_background: Some(rgba(0x22210fff).into()), + warning_border: Some(rgba(0x373614ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x3f62f4ff).into(), - background: rgba(0x3f62f4ff).into(), - selection: rgba(0x3f62f43d).into(), + cursor: rgba(0x3e62f4ff).into(), + background: rgba(0x3e62f4ff).into(), + selection: rgba(0x3e62f43d).into(), }, PlayerColor { - cursor: rgba(0xe61dc3ff).into(), - background: rgba(0xe61dc3ff).into(), - selection: rgba(0xe61dc33d).into(), + cursor: rgba(0xe61cc3ff).into(), + background: rgba(0xe61cc3ff).into(), + selection: rgba(0xe61cc33d).into(), }, PlayerColor { - cursor: rgba(0x87711fff).into(), - background: rgba(0x87711fff).into(), - selection: rgba(0x87711f3d).into(), + cursor: rgba(0x87711eff).into(), + background: rgba(0x87711eff).into(), + selection: rgba(0x87711e3d).into(), }, PlayerColor { cursor: rgba(0xad2dedff).into(), @@ -7602,24 +7602,24 @@ pub fn atelier() -> UserThemeFamily { selection: rgba(0xad2ded3d).into(), }, PlayerColor { - cursor: rgba(0x1d99b3ff).into(), - background: rgba(0x1d99b3ff).into(), - selection: rgba(0x1d99b33d).into(), + cursor: rgba(0x1c99b3ff).into(), + background: rgba(0x1c99b3ff).into(), + selection: rgba(0x1c99b33d).into(), }, PlayerColor { - cursor: rgba(0xe61c3dff).into(), - background: rgba(0xe61c3dff).into(), - selection: rgba(0xe61c3d3d).into(), + cursor: rgba(0xe61c3cff).into(), + background: rgba(0xe61c3cff).into(), + selection: rgba(0xe61c3c3d).into(), }, PlayerColor { - cursor: rgba(0x98981dff).into(), - background: rgba(0x98981dff).into(), - selection: rgba(0x98981d3d).into(), + cursor: rgba(0x98981cff).into(), + background: rgba(0x98981cff).into(), + selection: rgba(0x98981c3d).into(), }, PlayerColor { - cursor: rgba(0x2ba32bff).into(), - background: rgba(0x2ba32bff).into(), - selection: rgba(0x2ba32b3d).into(), + cursor: rgba(0x2ba32aff).into(), + background: rgba(0x2ba32aff).into(), + selection: rgba(0x2ba32a3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -7627,63 +7627,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x3f62f4ff).into()), + color: Some(rgba(0x3e62f4ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x2ba32bff).into()), + color: Some(rgba(0x2ba32aff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x809980ff).into()), + color: Some(rgba(0x687d68ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x5e6e5eff).into()), + color: Some(rgba(0x8ca68cff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x2ba32bff).into()), + color: Some(rgba(0x2ba32aff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x3f62f4ff).into()), + color: Some(rgba(0x3e62f4ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x131513ff).into()), + color: Some(rgba(0xf4fbf4ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x3f62f4ff).into()), + color: Some(rgba(0x3e62f4ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x3f62f4ff).into()), + color: Some(rgba(0x3e62f4ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -7691,7 +7691,7 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0x87711fff).into()), + color: Some(rgba(0x87711eff).into()), ..Default::default() }, ), @@ -7719,7 +7719,7 @@ pub fn atelier() -> UserThemeFamily { ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x008fa1ff).into()), + color: Some(rgba(0x008b9fff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -7734,14 +7734,14 @@ pub fn atelier() -> UserThemeFamily { ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x3f62f4ff).into()), + color: Some(rgba(0x3e62f4ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x87711fff).into()), + color: Some(rgba(0x87711eff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -7749,7 +7749,7 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x2ba32bff).into()), + color: Some(rgba(0x2ba32aff).into()), ..Default::default() }, ), @@ -7763,14 +7763,14 @@ pub fn atelier() -> UserThemeFamily { ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x5e6e5eff).into()), + color: Some(rgba(0x8ca68cff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x00a2b5ff).into()), + color: Some(rgba(0x00788bff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -7778,14 +7778,14 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x131513ff).into()), + color: Some(rgba(0xf4fbf4ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x242924ff).into()), + color: Some(rgba(0xcfe8cfff).into()), ..Default::default() }, ), @@ -7799,28 +7799,28 @@ pub fn atelier() -> UserThemeFamily { ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x242924ff).into()), + color: Some(rgba(0xcfe8cfff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x5e6e5eff).into()), + color: Some(rgba(0x8ca68cff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x5e6e5eff).into()), + color: Some(rgba(0x8ca68cff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x242924ff).into()), + color: Some(rgba(0xcfe8cfff).into()), ..Default::default() }, ), @@ -7841,7 +7841,7 @@ pub fn atelier() -> UserThemeFamily { ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x5e6e5eff).into()), + color: Some(rgba(0x8ca68cff).into()), ..Default::default() }, ), @@ -7869,21 +7869,21 @@ pub fn atelier() -> UserThemeFamily { ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x3f62f4ff).into()), + color: Some(rgba(0x3e62f4ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x87711fff).into()), + color: Some(rgba(0x87711eff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x131513ff).into()), + color: Some(rgba(0xf4fbf4ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -7898,7 +7898,7 @@ pub fn atelier() -> UserThemeFamily { ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x242924ff).into()), + color: Some(rgba(0xcfe8cfff).into()), ..Default::default() }, ), @@ -7921,170 +7921,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Savanna Dark".into(), - appearance: Appearance::Dark, + name: "Atelier Seaside Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x505e55ff).into()), - border_variant: Some(rgba(0x2f3832ff).into()), - border_focused: Some(rgba(0x1f3233ff).into()), - border_selected: Some(rgba(0x1f3233ff).into()), + border: Some(rgba(0x8ea88eff).into()), + border_variant: Some(rgba(0xbed7beff).into()), + border_focused: Some(rgba(0xc9c4fdff).into()), + border_selected: Some(rgba(0xc9c4fdff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x434f47ff).into()), - elevated_surface_background: Some(rgba(0x1f2621ff).into()), - surface_background: Some(rgba(0x1f2621ff).into()), - background: Some(rgba(0x353f39ff).into()), - panel_background: Some(rgba(0x1f2621ff).into()), - element_background: Some(rgba(0x1f2621ff).into()), - element_hover: Some(rgba(0x2f3832ff).into()), - element_active: Some(rgba(0x4f5c53ff).into()), - element_selected: Some(rgba(0x4f5c53ff).into()), - element_disabled: Some(rgba(0x1f2621ff).into()), - drop_target_background: Some(rgba(0x85918880).into()), - ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x2f3832ff).into()), - ghost_element_active: Some(rgba(0x4f5c53ff).into()), - ghost_element_selected: Some(rgba(0x4f5c53ff).into()), - ghost_element_disabled: Some(rgba(0x1f2621ff).into()), - text: Some(rgba(0xecf4eeff).into()), - text_muted: Some(rgba(0x859188ff).into()), - text_placeholder: Some(rgba(0x6f7e74ff).into()), - text_disabled: Some(rgba(0x6f7e74ff).into()), - text_accent: Some(rgba(0x478c90ff).into()), - icon: Some(rgba(0xecf4eeff).into()), - icon_muted: Some(rgba(0x859188ff).into()), - icon_disabled: Some(rgba(0x6f7e74ff).into()), - icon_placeholder: Some(rgba(0x859188ff).into()), - icon_accent: Some(rgba(0x478c90ff).into()), - status_bar_background: Some(rgba(0x353f39ff).into()), - title_bar_background: Some(rgba(0x353f39ff).into()), - toolbar_background: Some(rgba(0x171c19ff).into()), - tab_bar_background: Some(rgba(0x1f2621ff).into()), - tab_inactive_background: Some(rgba(0x1f2621ff).into()), - tab_active_background: Some(rgba(0x171c19ff).into()), - scrollbar_thumb_background: Some(rgba(0xecf4ee4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x2f3832ff).into()), - scrollbar_thumb_border: Some(rgba(0x2f3832ff).into()), + border_disabled: Some(rgba(0xa1bba1ff).into()), + elevated_surface_background: Some(rgba(0xdaeedaff).into()), + surface_background: Some(rgba(0xdaeedaff).into()), + background: Some(rgba(0xb4ceb4ff).into()), + panel_background: Some(rgba(0xdaeedaff).into()), + element_background: Some(rgba(0xdaeedaff).into()), + element_hover: Some(rgba(0xbed7beff).into()), + element_active: Some(rgba(0x90aa90ff).into()), + element_selected: Some(rgba(0x90aa90ff).into()), + element_disabled: Some(rgba(0xdaeedaff).into()), + drop_target_background: Some(rgba(0x5f705f80).into()), + ghost_element_background: Some(rgba(0x00000000).into()), + ghost_element_hover: Some(rgba(0xbed7beff).into()), + ghost_element_active: Some(rgba(0x90aa90ff).into()), + ghost_element_selected: Some(rgba(0x90aa90ff).into()), + ghost_element_disabled: Some(rgba(0xdaeedaff).into()), + text: Some(rgba(0x131513ff).into()), + text_muted: Some(rgba(0x5f705fff).into()), + text_placeholder: Some(rgba(0x718771ff).into()), + text_disabled: Some(rgba(0x718771ff).into()), + text_accent: Some(rgba(0x3f62f4ff).into()), + icon: Some(rgba(0x131513ff).into()), + icon_muted: Some(rgba(0x5f705fff).into()), + icon_disabled: Some(rgba(0x718771ff).into()), + icon_placeholder: Some(rgba(0x5f705fff).into()), + icon_accent: Some(rgba(0x3f62f4ff).into()), + status_bar_background: Some(rgba(0xb4ceb4ff).into()), + title_bar_background: Some(rgba(0xb4ceb4ff).into()), + toolbar_background: Some(rgba(0xf4fbf4ff).into()), + tab_bar_background: Some(rgba(0xdaeedaff).into()), + tab_inactive_background: Some(rgba(0xdaeedaff).into()), + tab_active_background: Some(rgba(0xf4fbf4ff).into()), + scrollbar_thumb_background: Some(rgba(0x1315134c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xbed7beff).into()), + scrollbar_thumb_border: Some(rgba(0xbed7beff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x1e2420ff).into()), - editor_foreground: Some(rgba(0xdfe7e2ff).into()), - editor_background: Some(rgba(0x171c19ff).into()), - editor_gutter_background: Some(rgba(0x171c19ff).into()), - editor_subheader_background: Some(rgba(0x1f2621ff).into()), - editor_active_line_background: Some(rgba(0x1f2621bf).into()), - editor_highlighted_line_background: Some(rgba(0x1f2621ff).into()), - editor_line_number: Some(rgba(0xecf4ee59).into()), - editor_active_line_number: Some(rgba(0xecf4eeff).into()), - editor_invisible: Some(rgba(0x859188ff).into()), - editor_wrap_guide: Some(rgba(0xecf4ee0d).into()), - editor_active_wrap_guide: Some(rgba(0xecf4ee1a).into()), - editor_document_highlight_read_background: Some(rgba(0x478c901a).into()), - editor_document_highlight_write_background: Some(rgba(0x6c7a7166).into()), - terminal_background: Some(rgba(0x171c19ff).into()), - terminal_ansi_bright_black: Some(rgba(0x5d6b62ff).into()), - terminal_ansi_bright_red: Some(rgba(0x563220ff).into()), - terminal_ansi_bright_green: Some(rgba(0x294a33ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4e3f22ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x284546ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x423a36ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1d4b4dff).into()), - terminal_ansi_bright_white: Some(rgba(0xecf4eeff).into()), - terminal_ansi_black: Some(rgba(0x171c19ff).into()), - terminal_ansi_red: Some(rgba(0xb16139ff).into()), - terminal_ansi_green: Some(rgba(0x489963ff).into()), - terminal_ansi_yellow: Some(rgba(0xa07e3bff).into()), - terminal_ansi_blue: Some(rgba(0x478c90ff).into()), - terminal_ansi_magenta: Some(rgba(0x867469ff).into()), - terminal_ansi_cyan: Some(rgba(0x1e9aa0ff).into()), - terminal_ansi_white: Some(rgba(0xecf4eeff).into()), - link_text_hover: Some(rgba(0x478c90ff).into()), + scrollbar_track_border: Some(rgba(0xdff0dfff).into()), + editor_foreground: Some(rgba(0x242924ff).into()), + editor_background: Some(rgba(0xf4fbf4ff).into()), + editor_gutter_background: Some(rgba(0xf4fbf4ff).into()), + editor_subheader_background: Some(rgba(0xdaeedaff).into()), + editor_active_line_background: Some(rgba(0xdaeedabf).into()), + editor_highlighted_line_background: Some(rgba(0xdaeedaff).into()), + editor_line_number: Some(rgba(0x13151359).into()), + editor_active_line_number: Some(rgba(0x131513ff).into()), + editor_invisible: Some(rgba(0x5f705fff).into()), + editor_wrap_guide: Some(rgba(0x1315130d).into()), + editor_active_wrap_guide: Some(rgba(0x1315131a).into()), + editor_document_highlight_read_background: Some(rgba(0x3f62f41a).into()), + editor_document_highlight_write_background: Some(rgba(0x748b7466).into()), + terminal_background: Some(rgba(0xf4fbf4ff).into()), + terminal_ansi_bright_black: Some(rgba(0x829b82ff).into()), + terminal_ansi_bright_red: Some(rgba(0xff9d98ff).into()), + terminal_ansi_bright_green: Some(rgba(0xa0d294ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd0ca90ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb1adfcff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xf9a1e1ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fccd9ff).into()), + terminal_ansi_bright_white: Some(rgba(0x131513ff).into()), + terminal_ansi_black: Some(rgba(0xf4fbf4ff).into()), + terminal_ansi_red: Some(rgba(0xe61c3dff).into()), + terminal_ansi_green: Some(rgba(0x2ba32bff).into()), + terminal_ansi_yellow: Some(rgba(0x98981dff).into()), + terminal_ansi_blue: Some(rgba(0x3f62f4ff).into()), + terminal_ansi_magenta: Some(rgba(0xe61dc3ff).into()), + terminal_ansi_cyan: Some(rgba(0x1d99b3ff).into()), + terminal_ansi_white: Some(rgba(0x131513ff).into()), + link_text_hover: Some(rgba(0x3f62f4ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xa07e3bff).into()), - conflict_background: Some(rgba(0x231d12ff).into()), - conflict_border: Some(rgba(0x392e1aff).into()), - created: Some(rgba(0x489963ff).into()), - created_background: Some(rgba(0x162119ff).into()), - created_border: Some(rgba(0x203626ff).into()), - deleted: Some(rgba(0xb16139ff).into()), - deleted_background: Some(rgba(0x261811ff).into()), - deleted_border: Some(rgba(0x3f2619ff).into()), - error: Some(rgba(0xb16139ff).into()), - error_background: Some(rgba(0x261811ff).into()), - error_border: Some(rgba(0x3f2619ff).into()), - hidden: Some(rgba(0x6f7e74ff).into()), - hidden_background: Some(rgba(0x353f39ff).into()), - hidden_border: Some(rgba(0x434f47ff).into()), - hint: Some(rgba(0x607e76ff).into()), - hint_background: Some(rgba(0x151f20ff).into()), - hint_border: Some(rgba(0x1f3233ff).into()), - ignored: Some(rgba(0x859188ff).into()), - ignored_background: Some(rgba(0x353f39ff).into()), - ignored_border: Some(rgba(0x505e55ff).into()), - info: Some(rgba(0x478c90ff).into()), - info_background: Some(rgba(0x151f20ff).into()), - info_border: Some(rgba(0x1f3233ff).into()), - modified: Some(rgba(0xa07e3bff).into()), - modified_background: Some(rgba(0x231d12ff).into()), - modified_border: Some(rgba(0x392e1aff).into()), - predictive: Some(rgba(0x506d66ff).into()), - predictive_background: Some(rgba(0x162119ff).into()), - predictive_border: Some(rgba(0x203626ff).into()), - renamed: Some(rgba(0x478c90ff).into()), - renamed_background: Some(rgba(0x151f20ff).into()), - renamed_border: Some(rgba(0x1f3233ff).into()), - success: Some(rgba(0x489963ff).into()), - success_background: Some(rgba(0x162119ff).into()), - success_border: Some(rgba(0x203626ff).into()), - unreachable: Some(rgba(0x859188ff).into()), - unreachable_background: Some(rgba(0x353f39ff).into()), - unreachable_border: Some(rgba(0x505e55ff).into()), - warning: Some(rgba(0xa07e3bff).into()), - warning_background: Some(rgba(0x231d12ff).into()), - warning_border: Some(rgba(0x392e1aff).into()), + conflict: Some(rgba(0x98981dff).into()), + conflict_background: Some(rgba(0xede9d2ff).into()), + conflict_border: Some(rgba(0xddd8afff).into()), + created: Some(rgba(0x2ba32bff).into()), + created_background: Some(rgba(0xd9edd4ff).into()), + created_border: Some(rgba(0xbbdeb2ff).into()), + deleted: Some(rgba(0xe61c3dff).into()), + deleted_background: Some(rgba(0xffd8d4ff).into()), + deleted_border: Some(rgba(0xffb9b4ff).into()), + error: Some(rgba(0xe61c3dff).into()), + error_background: Some(rgba(0xffd8d4ff).into()), + error_border: Some(rgba(0xffb9b4ff).into()), + hidden: Some(rgba(0x718771ff).into()), + hidden_background: Some(rgba(0xb4ceb4ff).into()), + hidden_border: Some(rgba(0xa1bba1ff).into()), + hint: Some(rgba(0x008fa1ff).into()), + hint_background: Some(rgba(0xe1ddfeff).into()), + hint_border: Some(rgba(0xc9c4fdff).into()), + ignored: Some(rgba(0x5f705fff).into()), + ignored_background: Some(rgba(0xb4ceb4ff).into()), + ignored_border: Some(rgba(0x8ea88eff).into()), + info: Some(rgba(0x3f62f4ff).into()), + info_background: Some(rgba(0xe1ddfeff).into()), + info_border: Some(rgba(0xc9c4fdff).into()), + modified: Some(rgba(0x98981dff).into()), + modified_background: Some(rgba(0xede9d2ff).into()), + modified_border: Some(rgba(0xddd8afff).into()), + predictive: Some(rgba(0x00a2b5ff).into()), + predictive_background: Some(rgba(0xd9edd4ff).into()), + predictive_border: Some(rgba(0xbbdeb2ff).into()), + renamed: Some(rgba(0x3f62f4ff).into()), + renamed_background: Some(rgba(0xe1ddfeff).into()), + renamed_border: Some(rgba(0xc9c4fdff).into()), + success: Some(rgba(0x2ba32bff).into()), + success_background: Some(rgba(0xd9edd4ff).into()), + success_border: Some(rgba(0xbbdeb2ff).into()), + unreachable: Some(rgba(0x5f705fff).into()), + unreachable_background: Some(rgba(0xb4ceb4ff).into()), + unreachable_border: Some(rgba(0x8ea88eff).into()), + warning: Some(rgba(0x98981dff).into()), + warning_background: Some(rgba(0xede9d2ff).into()), + warning_border: Some(rgba(0xddd8afff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x478c90ff).into(), - background: rgba(0x478c90ff).into(), - selection: rgba(0x478c903d).into(), + cursor: rgba(0x3f62f4ff).into(), + background: rgba(0x3f62f4ff).into(), + selection: rgba(0x3f62f43d).into(), }, PlayerColor { - cursor: rgba(0x867469ff).into(), - background: rgba(0x867469ff).into(), - selection: rgba(0x8674693d).into(), + cursor: rgba(0xe61dc3ff).into(), + background: rgba(0xe61dc3ff).into(), + selection: rgba(0xe61dc33d).into(), }, PlayerColor { - cursor: rgba(0x9f713cff).into(), - background: rgba(0x9f713cff).into(), - selection: rgba(0x9f713c3d).into(), + cursor: rgba(0x87711fff).into(), + background: rgba(0x87711fff).into(), + selection: rgba(0x87711f3d).into(), }, PlayerColor { - cursor: rgba(0x55859bff).into(), - background: rgba(0x55859bff).into(), - selection: rgba(0x55859b3d).into(), + cursor: rgba(0xad2dedff).into(), + background: rgba(0xad2dedff).into(), + selection: rgba(0xad2ded3d).into(), }, PlayerColor { - cursor: rgba(0x1e9aa0ff).into(), - background: rgba(0x1e9aa0ff).into(), - selection: rgba(0x1e9aa03d).into(), + cursor: rgba(0x1d99b3ff).into(), + background: rgba(0x1d99b3ff).into(), + selection: rgba(0x1d99b33d).into(), }, PlayerColor { - cursor: rgba(0xb16139ff).into(), - background: rgba(0xb16139ff).into(), - selection: rgba(0xb161393d).into(), + cursor: rgba(0xe61c3dff).into(), + background: rgba(0xe61c3dff).into(), + selection: rgba(0xe61c3d3d).into(), }, PlayerColor { - cursor: rgba(0xa07e3bff).into(), - background: rgba(0xa07e3bff).into(), - selection: rgba(0xa07e3b3d).into(), + cursor: rgba(0x98981dff).into(), + background: rgba(0x98981dff).into(), + selection: rgba(0x98981d3d).into(), }, PlayerColor { - cursor: rgba(0x489963ff).into(), - background: rgba(0x489963ff).into(), - selection: rgba(0x4899633d).into(), + cursor: rgba(0x2ba32bff).into(), + background: rgba(0x2ba32bff).into(), + selection: rgba(0x2ba32b3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -8092,63 +8092,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3f62f4ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x489963ff).into()), + color: Some(rgba(0x2ba32bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x5f6d64ff).into()), + color: Some(rgba(0x809980ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x87928aff).into()), + color: Some(rgba(0x5e6e5eff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x489963ff).into()), + color: Some(rgba(0x2ba32bff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3f62f4ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xecf4eeff).into()), + color: Some(rgba(0x131513ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3f62f4ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3f62f4ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -8156,35 +8156,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0x9f713cff).into()), + color: Some(rgba(0x87711fff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3d62f5ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3d62f5ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xa07e3bff).into()), + color: Some(rgba(0x98981bff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x607e76ff).into()), + color: Some(rgba(0x008fa1ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -8192,21 +8192,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x55859bff).into()), + color: Some(rgba(0xad2beeff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3f62f4ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x9f713cff).into()), + color: Some(rgba(0x87711fff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -8214,28 +8214,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x489963ff).into()), + color: Some(rgba(0x2ba32bff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x9f713cff).into()), + color: Some(rgba(0x87711dff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x87928aff).into()), + color: Some(rgba(0x5e6e5eff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x506d66ff).into()), + color: Some(rgba(0x00a2b5ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -8243,112 +8243,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xecf4eeff).into()), + color: Some(rgba(0x131513ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xdfe7e2ff).into()), + color: Some(rgba(0x242924ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xb16139ff).into()), + color: Some(rgba(0xe6193cff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xdfe7e2ff).into()), + color: Some(rgba(0x242924ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x87928aff).into()), + color: Some(rgba(0x5e6e5eff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x87928aff).into()), + color: Some(rgba(0x5e6e5eff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xdfe7e2ff).into()), + color: Some(rgba(0x242924ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x867469ff).into()), + color: Some(rgba(0xe619c3ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x489963ff).into()), + color: Some(rgba(0x29a329ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x87928aff).into()), + color: Some(rgba(0x5e6e5eff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x1c9aa0ff).into()), + color: Some(rgba(0x1999b3ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x867469ff).into()), + color: Some(rgba(0xe619c3ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x489963ff).into()), + color: Some(rgba(0x29a329ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x478c90ff).into()), + color: Some(rgba(0x3f62f4ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x9f713cff).into()), + color: Some(rgba(0x87711fff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xecf4eeff).into()), + color: Some(rgba(0x131513ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -8356,28 +8356,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xa07e3bff).into()), + color: Some(rgba(0x98981bff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xdfe7e2ff).into()), + color: Some(rgba(0x242924ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x55859bff).into()), + color: Some(rgba(0xad2beeff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xa07e3bff).into()), + color: Some(rgba(0x98981bff).into()), ..Default::default() }, ), @@ -8386,170 +8386,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Heath Light".into(), - appearance: Appearance::Light, + name: "Atelier Sulphurpool Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0xad9dadff).into()), - border_variant: Some(rgba(0xcdbecdff).into()), - border_focused: Some(rgba(0xcac7faff).into()), - border_selected: Some(rgba(0xcac7faff).into()), + border: Some(rgba(0x5c6485ff).into()), + border_variant: Some(rgba(0x363f62ff).into()), + border_focused: Some(rgba(0x203348ff).into()), + border_selected: Some(rgba(0x203348ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xbaaabaff).into()), - elevated_surface_background: Some(rgba(0xe1d6e1ff).into()), - surface_background: Some(rgba(0xe1d6e1ff).into()), - background: Some(rgba(0xc6b8c6ff).into()), - panel_background: Some(rgba(0xe1d6e1ff).into()), - element_background: Some(rgba(0xe1d6e1ff).into()), - element_hover: Some(rgba(0xcdbecdff).into()), - element_active: Some(rgba(0xae9eaeff).into()), - element_selected: Some(rgba(0xae9eaeff).into()), - element_disabled: Some(rgba(0xe1d6e1ff).into()), - drop_target_background: Some(rgba(0x6b5e6b80).into()), + border_disabled: Some(rgba(0x4d5577ff).into()), + elevated_surface_background: Some(rgba(0x262f51ff).into()), + surface_background: Some(rgba(0x262f51ff).into()), + background: Some(rgba(0x3e4769ff).into()), + panel_background: Some(rgba(0x262f51ff).into()), + element_background: Some(rgba(0x262f51ff).into()), + element_hover: Some(rgba(0x363f62ff).into()), + element_active: Some(rgba(0x5a6284ff).into()), + element_selected: Some(rgba(0x5a6284ff).into()), + element_disabled: Some(rgba(0x262f51ff).into()), + drop_target_background: Some(rgba(0x959bb280).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xcdbecdff).into()), - ghost_element_active: Some(rgba(0xae9eaeff).into()), - ghost_element_selected: Some(rgba(0xae9eaeff).into()), - ghost_element_disabled: Some(rgba(0xe1d6e1ff).into()), - text: Some(rgba(0x1b181bff).into()), - text_muted: Some(rgba(0x6b5e6bff).into()), - text_placeholder: Some(rgba(0x857785ff).into()), - text_disabled: Some(rgba(0x857785ff).into()), - text_accent: Some(rgba(0x526aebff).into()), - icon: Some(rgba(0x1b181bff).into()), - icon_muted: Some(rgba(0x6b5e6bff).into()), - icon_disabled: Some(rgba(0x857785ff).into()), - icon_placeholder: Some(rgba(0x6b5e6bff).into()), - icon_accent: Some(rgba(0x526aebff).into()), - status_bar_background: Some(rgba(0xc6b8c6ff).into()), - title_bar_background: Some(rgba(0xc6b8c6ff).into()), - toolbar_background: Some(rgba(0xf7f3f7ff).into()), - tab_bar_background: Some(rgba(0xe1d6e1ff).into()), - tab_inactive_background: Some(rgba(0xe1d6e1ff).into()), - tab_active_background: Some(rgba(0xf7f3f7ff).into()), - scrollbar_thumb_background: Some(rgba(0x1b181b4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xcdbecdff).into()), - scrollbar_thumb_border: Some(rgba(0xcdbecdff).into()), + ghost_element_hover: Some(rgba(0x363f62ff).into()), + ghost_element_active: Some(rgba(0x5a6284ff).into()), + ghost_element_selected: Some(rgba(0x5a6284ff).into()), + ghost_element_disabled: Some(rgba(0x262f51ff).into()), + text: Some(rgba(0xf5f7ffff).into()), + text_muted: Some(rgba(0x959bb2ff).into()), + text_placeholder: Some(rgba(0x7e849eff).into()), + text_disabled: Some(rgba(0x7e849eff).into()), + text_accent: Some(rgba(0x3e8fd0ff).into()), + icon: Some(rgba(0xf5f7ffff).into()), + icon_muted: Some(rgba(0x959bb2ff).into()), + icon_disabled: Some(rgba(0x7e849eff).into()), + icon_placeholder: Some(rgba(0x959bb2ff).into()), + icon_accent: Some(rgba(0x3e8fd0ff).into()), + status_bar_background: Some(rgba(0x3e4769ff).into()), + title_bar_background: Some(rgba(0x3e4769ff).into()), + toolbar_background: Some(rgba(0x202746ff).into()), + tab_bar_background: Some(rgba(0x262f51ff).into()), + tab_inactive_background: Some(rgba(0x262f51ff).into()), + tab_active_background: Some(rgba(0x202746ff).into()), + scrollbar_thumb_background: Some(rgba(0xf5f7ff4c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x363f62ff).into()), + scrollbar_thumb_border: Some(rgba(0x363f62ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xe5dce5ff).into()), - editor_foreground: Some(rgba(0x292329ff).into()), - editor_background: Some(rgba(0xf7f3f7ff).into()), - editor_gutter_background: Some(rgba(0xf7f3f7ff).into()), - editor_subheader_background: Some(rgba(0xe1d6e1ff).into()), - editor_active_line_background: Some(rgba(0xe1d6e1bf).into()), - editor_highlighted_line_background: Some(rgba(0xe1d6e1ff).into()), - editor_line_number: Some(rgba(0x1b181b59).into()), - editor_active_line_number: Some(rgba(0x1b181bff).into()), - editor_invisible: Some(rgba(0x6b5e6bff).into()), - editor_wrap_guide: Some(rgba(0x1b181b0d).into()), - editor_active_wrap_guide: Some(rgba(0x1b181b1a).into()), - editor_document_highlight_read_background: Some(rgba(0x526aeb1a).into()), - editor_document_highlight_write_background: Some(rgba(0x8b7c8b66).into()), - terminal_background: Some(rgba(0xf7f3f7ff).into()), - terminal_ansi_bright_black: Some(rgba(0xa091a0ff).into()), - terminal_ansi_bright_red: Some(rgba(0xf0a28fff).into()), - terminal_ansi_bright_green: Some(rgba(0xcac49aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe2c398ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb4b2f7ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xeba2e6ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9ac9c8ff).into()), - terminal_ansi_bright_white: Some(rgba(0x1b181bff).into()), - terminal_ansi_black: Some(rgba(0xf7f3f7ff).into()), - terminal_ansi_red: Some(rgba(0xca412cff).into()), - terminal_ansi_green: Some(rgba(0x918b3cff).into()), - terminal_ansi_yellow: Some(rgba(0xbb8a36ff).into()), - terminal_ansi_blue: Some(rgba(0x526aebff).into()), - terminal_ansi_magenta: Some(rgba(0xcc35ccff).into()), - terminal_ansi_cyan: Some(rgba(0x199393ff).into()), - terminal_ansi_white: Some(rgba(0x1b181bff).into()), - link_text_hover: Some(rgba(0x526aebff).into()), + scrollbar_track_border: Some(rgba(0x252d4fff).into()), + editor_foreground: Some(rgba(0xdfe2f1ff).into()), + editor_background: Some(rgba(0x202746ff).into()), + editor_gutter_background: Some(rgba(0x202746ff).into()), + editor_subheader_background: Some(rgba(0x262f51ff).into()), + editor_active_line_background: Some(rgba(0x262f51bf).into()), + editor_highlighted_line_background: Some(rgba(0x262f51ff).into()), + editor_line_number: Some(rgba(0xf5f7ff59).into()), + editor_active_line_number: Some(rgba(0xf5f7ffff).into()), + editor_invisible: Some(rgba(0x959bb2ff).into()), + editor_wrap_guide: Some(rgba(0xf5f7ff0d).into()), + editor_active_wrap_guide: Some(rgba(0xf5f7ff1a).into()), + editor_document_highlight_read_background: Some(rgba(0x3e8fd01a).into()), + editor_document_highlight_write_background: Some(rgba(0x7a819c66).into()), + terminal_background: Some(rgba(0x202746ff).into()), + terminal_ansi_bright_black: Some(rgba(0x697192ff).into()), + terminal_ansi_bright_red: Some(rgba(0x6d2616ff).into()), + terminal_ansi_bright_green: Some(rgba(0x534921ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x63441eff).into()), + terminal_ansi_bright_blue: Some(rgba(0x274664ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x4c333dff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x214e5fff).into()), + terminal_ansi_bright_white: Some(rgba(0xf5f7ffff).into()), + terminal_ansi_black: Some(rgba(0x202746ff).into()), + terminal_ansi_red: Some(rgba(0xc94923ff).into()), + terminal_ansi_green: Some(rgba(0xac973aff).into()), + terminal_ansi_yellow: Some(rgba(0xc08b31ff).into()), + terminal_ansi_blue: Some(rgba(0x3e8fd0ff).into()), + terminal_ansi_magenta: Some(rgba(0x9c637aff).into()), + terminal_ansi_cyan: Some(rgba(0x25a2c9ff).into()), + terminal_ansi_white: Some(rgba(0xf5f7ffff).into()), + link_text_hover: Some(rgba(0x3e8fd0ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xbb8a36ff).into()), - conflict_background: Some(rgba(0xf5e6d5ff).into()), - conflict_border: Some(rgba(0xebd3b5ff).into()), - created: Some(rgba(0x918b3cff).into()), - created_background: Some(rgba(0xeae6d6ff).into()), - created_border: Some(rgba(0xd9d4b6ff).into()), - deleted: Some(rgba(0xca412cff).into()), - deleted_background: Some(rgba(0xfcd9d1ff).into()), - deleted_border: Some(rgba(0xf7bcaeff).into()), - error: Some(rgba(0xca412cff).into()), - error_background: Some(rgba(0xfcd9d1ff).into()), - error_border: Some(rgba(0xf7bcaeff).into()), - hidden: Some(rgba(0x857785ff).into()), - hidden_background: Some(rgba(0xc6b8c6ff).into()), - hidden_border: Some(rgba(0xbaaabaff).into()), - hint: Some(rgba(0x8c70a6ff).into()), - hint_background: Some(rgba(0xe2dffcff).into()), - hint_border: Some(rgba(0xcac7faff).into()), - ignored: Some(rgba(0x6b5e6bff).into()), - ignored_background: Some(rgba(0xc6b8c6ff).into()), - ignored_border: Some(rgba(0xad9dadff).into()), - info: Some(rgba(0x526aebff).into()), - info_background: Some(rgba(0xe2dffcff).into()), - info_border: Some(rgba(0xcac7faff).into()), - modified: Some(rgba(0xbb8a36ff).into()), - modified_background: Some(rgba(0xf5e6d5ff).into()), - modified_border: Some(rgba(0xebd3b5ff).into()), - predictive: Some(rgba(0xa587bfff).into()), - predictive_background: Some(rgba(0xeae6d6ff).into()), - predictive_border: Some(rgba(0xd9d4b6ff).into()), - renamed: Some(rgba(0x526aebff).into()), - renamed_background: Some(rgba(0xe2dffcff).into()), - renamed_border: Some(rgba(0xcac7faff).into()), - success: Some(rgba(0x918b3cff).into()), - success_background: Some(rgba(0xeae6d6ff).into()), - success_border: Some(rgba(0xd9d4b6ff).into()), - unreachable: Some(rgba(0x6b5e6bff).into()), - unreachable_background: Some(rgba(0xc6b8c6ff).into()), - unreachable_border: Some(rgba(0xad9dadff).into()), - warning: Some(rgba(0xbb8a36ff).into()), - warning_background: Some(rgba(0xf5e6d5ff).into()), - warning_border: Some(rgba(0xebd3b5ff).into()), + conflict: Some(rgba(0xc08b31ff).into()), + conflict_background: Some(rgba(0x311e11ff).into()), + conflict_border: Some(rgba(0x4b3218ff).into()), + created: Some(rgba(0xac973aff).into()), + created_background: Some(rgba(0x252113ff).into()), + created_border: Some(rgba(0x3d351bff).into()), + deleted: Some(rgba(0xc94923ff).into()), + deleted_background: Some(rgba(0x3c120dff).into()), + deleted_border: Some(rgba(0x551c13ff).into()), + error: Some(rgba(0xc94923ff).into()), + error_background: Some(rgba(0x3c120dff).into()), + error_border: Some(rgba(0x551c13ff).into()), + hidden: Some(rgba(0x7e849eff).into()), + hidden_background: Some(rgba(0x3e4769ff).into()), + hidden_border: Some(rgba(0x4d5577ff).into()), + hint: Some(rgba(0x6d82a6ff).into()), + hint_background: Some(rgba(0x161f2bff).into()), + hint_border: Some(rgba(0x203348ff).into()), + ignored: Some(rgba(0x959bb2ff).into()), + ignored_background: Some(rgba(0x3e4769ff).into()), + ignored_border: Some(rgba(0x5c6485ff).into()), + info: Some(rgba(0x3e8fd0ff).into()), + info_background: Some(rgba(0x161f2bff).into()), + info_border: Some(rgba(0x203348ff).into()), + modified: Some(rgba(0xc08b31ff).into()), + modified_background: Some(rgba(0x311e11ff).into()), + modified_border: Some(rgba(0x4b3218ff).into()), + predictive: Some(rgba(0x58709aff).into()), + predictive_background: Some(rgba(0x252113ff).into()), + predictive_border: Some(rgba(0x3d351bff).into()), + renamed: Some(rgba(0x3e8fd0ff).into()), + renamed_background: Some(rgba(0x161f2bff).into()), + renamed_border: Some(rgba(0x203348ff).into()), + success: Some(rgba(0xac973aff).into()), + success_background: Some(rgba(0x252113ff).into()), + success_border: Some(rgba(0x3d351bff).into()), + unreachable: Some(rgba(0x959bb2ff).into()), + unreachable_background: Some(rgba(0x3e4769ff).into()), + unreachable_border: Some(rgba(0x5c6485ff).into()), + warning: Some(rgba(0xc08b31ff).into()), + warning_background: Some(rgba(0x311e11ff).into()), + warning_border: Some(rgba(0x4b3218ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x526aebff).into(), - background: rgba(0x526aebff).into(), - selection: rgba(0x526aeb3d).into(), + cursor: rgba(0x3e8fd0ff).into(), + background: rgba(0x3e8fd0ff).into(), + selection: rgba(0x3e8fd03d).into(), }, PlayerColor { - cursor: rgba(0xcc35ccff).into(), - background: rgba(0xcc35ccff).into(), - selection: rgba(0xcc35cc3d).into(), + cursor: rgba(0x9c637aff).into(), + background: rgba(0x9c637aff).into(), + selection: rgba(0x9c637a3d).into(), }, PlayerColor { - cursor: rgba(0xa65a27ff).into(), - background: rgba(0xa65a27ff).into(), - selection: rgba(0xa65a273d).into(), + cursor: rgba(0xc76b2aff).into(), + background: rgba(0xc76b2aff).into(), + selection: rgba(0xc76b2a3d).into(), }, PlayerColor { - cursor: rgba(0x7b5ac0ff).into(), - background: rgba(0x7b5ac0ff).into(), - selection: rgba(0x7b5ac03d).into(), + cursor: rgba(0x6679ccff).into(), + background: rgba(0x6679ccff).into(), + selection: rgba(0x6679cc3d).into(), }, PlayerColor { - cursor: rgba(0x199393ff).into(), - background: rgba(0x199393ff).into(), - selection: rgba(0x1993933d).into(), + cursor: rgba(0x25a2c9ff).into(), + background: rgba(0x25a2c9ff).into(), + selection: rgba(0x25a2c93d).into(), }, PlayerColor { - cursor: rgba(0xca412cff).into(), - background: rgba(0xca412cff).into(), - selection: rgba(0xca412c3d).into(), + cursor: rgba(0xc94923ff).into(), + background: rgba(0xc94923ff).into(), + selection: rgba(0xc949233d).into(), }, PlayerColor { - cursor: rgba(0xbb8a36ff).into(), - background: rgba(0xbb8a36ff).into(), - selection: rgba(0xbb8a363d).into(), + cursor: rgba(0xc08b31ff).into(), + background: rgba(0xc08b31ff).into(), + selection: rgba(0xc08b313d).into(), }, PlayerColor { - cursor: rgba(0x918b3cff).into(), - background: rgba(0x918b3cff).into(), - selection: rgba(0x918b3c3d).into(), + cursor: rgba(0xac973aff).into(), + background: rgba(0xac973aff).into(), + selection: rgba(0xac973a3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -8557,63 +8557,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x3e8fd0ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x918b3cff).into()), + color: Some(rgba(0xac973aff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x9e8f9eff).into()), + color: Some(rgba(0x6b7394ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x695d69ff).into()), + color: Some(rgba(0x979db4ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x918b3cff).into()), + color: Some(rgba(0xac973aff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x3e8fd0ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x1b181bff).into()), + color: Some(rgba(0xf5f7ffff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x3e8fd0ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x3e8fd0ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -8621,35 +8621,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xa65a27ff).into()), + color: Some(rgba(0xc76b2aff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x516aecff).into()), + color: Some(rgba(0x3d8fd1ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x516aecff).into()), + color: Some(rgba(0x3d8fd1ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0xbb8a35ff).into()), + color: Some(rgba(0xc08b30ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x8c70a6ff).into()), + color: Some(rgba(0x6d82a6ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -8657,21 +8657,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x7b59c0ff).into()), + color: Some(rgba(0x6679ccff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x3e8fd0ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xa65a27ff).into()), + color: Some(rgba(0xc76b2aff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -8679,28 +8679,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x918b3cff).into()), + color: Some(rgba(0xac973aff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xa65926ff).into()), + color: Some(rgba(0xc76b29ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x695d69ff).into()), + color: Some(rgba(0x979db4ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0xa587bfff).into()), + color: Some(rgba(0x58709aff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -8708,112 +8708,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x1b181bff).into()), + color: Some(rgba(0xf5f7ffff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x292329ff).into()), + color: Some(rgba(0xdfe2f1ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xca402bff).into()), + color: Some(rgba(0xc94922ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x292329ff).into()), + color: Some(rgba(0xdfe2f1ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x695d69ff).into()), + color: Some(rgba(0x979db4ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x695d69ff).into()), + color: Some(rgba(0x979db4ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x292329ff).into()), + color: Some(rgba(0xdfe2f1ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xcc33ccff).into()), + color: Some(rgba(0x9c637aff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x918b3bff).into()), + color: Some(rgba(0xac9739ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x695d69ff).into()), + color: Some(rgba(0x979db4ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x159393ff).into()), + color: Some(rgba(0x22a2c9ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xcc33ccff).into()), + color: Some(rgba(0x9c637aff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x918b3bff).into()), + color: Some(rgba(0xac9739ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x526aebff).into()), + color: Some(rgba(0x3e8fd0ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xa65a27ff).into()), + color: Some(rgba(0xc76b2aff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x1b181bff).into()), + color: Some(rgba(0xf5f7ffff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -8821,28 +8821,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xbb8a35ff).into()), + color: Some(rgba(0xc08b30ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x292329ff).into()), + color: Some(rgba(0xdfe2f1ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x7b59c0ff).into()), + color: Some(rgba(0x6679ccff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0xbb8a35ff).into()), + color: Some(rgba(0xc08b30ff).into()), ..Default::default() }, ), @@ -8851,170 +8851,170 @@ pub fn atelier() -> UserThemeFamily { }, }, UserTheme { - name: "Atelier Lakeside Light".into(), + name: "Atelier Sulphurpool Light".into(), appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x80a4b6ff).into()), - border_variant: Some(rgba(0xb0d3e5ff).into()), - border_focused: Some(rgba(0xbacfe1ff).into()), - border_selected: Some(rgba(0xbacfe1ff).into()), + border: Some(rgba(0x9a9fb6ff).into()), + border_variant: Some(rgba(0xccd0e1ff).into()), + border_focused: Some(rgba(0xc2d5efff).into()), + border_selected: Some(rgba(0xc2d5efff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x93b7c9ff).into()), - elevated_surface_background: Some(rgba(0xcdeaf9ff).into()), - surface_background: Some(rgba(0xcdeaf9ff).into()), - background: Some(rgba(0xa6cadcff).into()), - panel_background: Some(rgba(0xcdeaf9ff).into()), - element_background: Some(rgba(0xcdeaf9ff).into()), - element_hover: Some(rgba(0xb0d3e5ff).into()), - element_active: Some(rgba(0x82a6b8ff).into()), - element_selected: Some(rgba(0x82a6b8ff).into()), - element_disabled: Some(rgba(0xcdeaf9ff).into()), - drop_target_background: Some(rgba(0x526f7d80).into()), + border_disabled: Some(rgba(0xaeb3c7ff).into()), + elevated_surface_background: Some(rgba(0xe5e8f5ff).into()), + surface_background: Some(rgba(0xe5e8f5ff).into()), + background: Some(rgba(0xc2c6d9ff).into()), + panel_background: Some(rgba(0xe5e8f5ff).into()), + element_background: Some(rgba(0xe5e8f5ff).into()), + element_hover: Some(rgba(0xccd0e1ff).into()), + element_active: Some(rgba(0x9ca1b8ff).into()), + element_selected: Some(rgba(0x9ca1b8ff).into()), + element_disabled: Some(rgba(0xe5e8f5ff).into()), + drop_target_background: Some(rgba(0x60688980).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xb0d3e5ff).into()), - ghost_element_active: Some(rgba(0x82a6b8ff).into()), - ghost_element_selected: Some(rgba(0x82a6b8ff).into()), - ghost_element_disabled: Some(rgba(0xcdeaf9ff).into()), - text: Some(rgba(0x161b1dff).into()), - text_muted: Some(rgba(0x526f7dff).into()), - text_placeholder: Some(rgba(0x628496ff).into()), - text_disabled: Some(rgba(0x628496ff).into()), - text_accent: Some(rgba(0x277fadff).into()), - icon: Some(rgba(0x161b1dff).into()), - icon_muted: Some(rgba(0x526f7dff).into()), - icon_disabled: Some(rgba(0x628496ff).into()), - icon_placeholder: Some(rgba(0x526f7dff).into()), - icon_accent: Some(rgba(0x277fadff).into()), - status_bar_background: Some(rgba(0xa6cadcff).into()), - title_bar_background: Some(rgba(0xa6cadcff).into()), - toolbar_background: Some(rgba(0xebf8ffff).into()), - tab_bar_background: Some(rgba(0xcdeaf9ff).into()), - tab_inactive_background: Some(rgba(0xcdeaf9ff).into()), - tab_active_background: Some(rgba(0xebf8ffff).into()), - scrollbar_thumb_background: Some(rgba(0x161b1d4c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xb0d3e5ff).into()), - scrollbar_thumb_border: Some(rgba(0xb0d3e5ff).into()), - scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xd3edfaff).into()), - editor_foreground: Some(rgba(0x1f292eff).into()), - editor_background: Some(rgba(0xebf8ffff).into()), - editor_gutter_background: Some(rgba(0xebf8ffff).into()), - editor_subheader_background: Some(rgba(0xcdeaf9ff).into()), - editor_active_line_background: Some(rgba(0xcdeaf9bf).into()), - editor_highlighted_line_background: Some(rgba(0xcdeaf9ff).into()), - editor_line_number: Some(rgba(0x161b1d59).into()), - editor_active_line_number: Some(rgba(0x161b1dff).into()), - editor_invisible: Some(rgba(0x526f7dff).into()), - editor_wrap_guide: Some(rgba(0x161b1d0d).into()), - editor_active_wrap_guide: Some(rgba(0x161b1d1a).into()), - editor_document_highlight_read_background: Some(rgba(0x277fad1a).into()), - editor_document_highlight_write_background: Some(rgba(0x66889a66).into()), - terminal_background: Some(rgba(0xebf8ffff).into()), - terminal_ansi_bright_black: Some(rgba(0x7397aaff).into()), - terminal_ansi_bright_red: Some(rgba(0xf09fb6ff).into()), - terminal_ansi_bright_green: Some(rgba(0xabc59aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xc8c38bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x9ebdd6ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe09fe9ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9bc7b5ff).into()), - terminal_ansi_bright_white: Some(rgba(0x161b1dff).into()), - terminal_ansi_black: Some(rgba(0xebf8ffff).into()), - terminal_ansi_red: Some(rgba(0xd22f72ff).into()), - terminal_ansi_green: Some(rgba(0x578c3cff).into()), - terminal_ansi_yellow: Some(rgba(0x8a8a11ff).into()), - terminal_ansi_blue: Some(rgba(0x277fadff).into()), - terminal_ansi_magenta: Some(rgba(0xb72fd2ff).into()), - terminal_ansi_cyan: Some(rgba(0x2f8f6fff).into()), - terminal_ansi_white: Some(rgba(0x161b1dff).into()), - link_text_hover: Some(rgba(0x277fadff).into()), + ghost_element_hover: Some(rgba(0xccd0e1ff).into()), + ghost_element_active: Some(rgba(0x9ca1b8ff).into()), + ghost_element_selected: Some(rgba(0x9ca1b8ff).into()), + ghost_element_disabled: Some(rgba(0xe5e8f5ff).into()), + text: Some(rgba(0x202746ff).into()), + text_muted: Some(rgba(0x606889ff).into()), + text_placeholder: Some(rgba(0x767d9aff).into()), + text_disabled: Some(rgba(0x767d9aff).into()), + text_accent: Some(rgba(0x3f8fd0ff).into()), + icon: Some(rgba(0x202746ff).into()), + icon_muted: Some(rgba(0x606889ff).into()), + icon_disabled: Some(rgba(0x767d9aff).into()), + icon_placeholder: Some(rgba(0x606889ff).into()), + icon_accent: Some(rgba(0x3f8fd0ff).into()), + status_bar_background: Some(rgba(0xc2c6d9ff).into()), + title_bar_background: Some(rgba(0xc2c6d9ff).into()), + toolbar_background: Some(rgba(0xf5f7ffff).into()), + tab_bar_background: Some(rgba(0xe5e8f5ff).into()), + tab_inactive_background: Some(rgba(0xe5e8f5ff).into()), + tab_active_background: Some(rgba(0xf5f7ffff).into()), + scrollbar_thumb_background: Some(rgba(0x2027464c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xccd0e1ff).into()), + scrollbar_thumb_border: Some(rgba(0xccd0e1ff).into()), + scrollbar_track_background: Some(rgba(0x00000000).into()), + scrollbar_track_border: Some(rgba(0xe9ebf7ff).into()), + editor_foreground: Some(rgba(0x293256ff).into()), + editor_background: Some(rgba(0xf5f7ffff).into()), + editor_gutter_background: Some(rgba(0xf5f7ffff).into()), + editor_subheader_background: Some(rgba(0xe5e8f5ff).into()), + editor_active_line_background: Some(rgba(0xe5e8f5bf).into()), + editor_highlighted_line_background: Some(rgba(0xe5e8f5ff).into()), + editor_line_number: Some(rgba(0x20274659).into()), + editor_active_line_number: Some(rgba(0x202746ff).into()), + editor_invisible: Some(rgba(0x606889ff).into()), + editor_wrap_guide: Some(rgba(0x2027460d).into()), + editor_active_wrap_guide: Some(rgba(0x2027461a).into()), + editor_document_highlight_read_background: Some(rgba(0x3f8fd01a).into()), + editor_document_highlight_write_background: Some(rgba(0x7a819c66).into()), + terminal_background: Some(rgba(0xf5f7ffff).into()), + terminal_ansi_bright_black: Some(rgba(0x8b91a7ff).into()), + terminal_ansi_bright_red: Some(rgba(0xefa58cff).into()), + terminal_ansi_bright_green: Some(rgba(0xd9ca9bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe5c497ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa9c6e8ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xcfafbbff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa4d0e4ff).into()), + terminal_ansi_bright_white: Some(rgba(0x202746ff).into()), + terminal_ansi_black: Some(rgba(0xf5f7ffff).into()), + terminal_ansi_red: Some(rgba(0xc94a23ff).into()), + terminal_ansi_green: Some(rgba(0xac973aff).into()), + terminal_ansi_yellow: Some(rgba(0xc08b31ff).into()), + terminal_ansi_blue: Some(rgba(0x3f8fd0ff).into()), + terminal_ansi_magenta: Some(rgba(0x9c637aff).into()), + terminal_ansi_cyan: Some(rgba(0x25a2c9ff).into()), + terminal_ansi_white: Some(rgba(0x202746ff).into()), + link_text_hover: Some(rgba(0x3f8fd0ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0x8a8a11ff).into()), - conflict_background: Some(rgba(0xeae6d0ff).into()), - conflict_border: Some(rgba(0xd8d3abff).into()), - created: Some(rgba(0x578c3cff).into()), - created_background: Some(rgba(0xdde7d5ff).into()), - created_border: Some(rgba(0xc2d5b6ff).into()), - deleted: Some(rgba(0xd22f72ff).into()), - deleted_background: Some(rgba(0xfbd8e1ff).into()), - deleted_border: Some(rgba(0xf6bacaff).into()), - error: Some(rgba(0xd22f72ff).into()), - error_background: Some(rgba(0xfbd8e1ff).into()), - error_border: Some(rgba(0xf6bacaff).into()), - hidden: Some(rgba(0x628496ff).into()), - hidden_background: Some(rgba(0xa6cadcff).into()), - hidden_border: Some(rgba(0x93b7c9ff).into()), - hint: Some(rgba(0x5a87a0ff).into()), - hint_background: Some(rgba(0xd8e4eeff).into()), - hint_border: Some(rgba(0xbacfe1ff).into()), - ignored: Some(rgba(0x526f7dff).into()), - ignored_background: Some(rgba(0xa6cadcff).into()), - ignored_border: Some(rgba(0x80a4b6ff).into()), - info: Some(rgba(0x277fadff).into()), - info_background: Some(rgba(0xd8e4eeff).into()), - info_border: Some(rgba(0xbacfe1ff).into()), - modified: Some(rgba(0x8a8a11ff).into()), - modified_background: Some(rgba(0xeae6d0ff).into()), - modified_border: Some(rgba(0xd8d3abff).into()), - predictive: Some(rgba(0x6a97b2ff).into()), - predictive_background: Some(rgba(0xdde7d5ff).into()), - predictive_border: Some(rgba(0xc2d5b6ff).into()), - renamed: Some(rgba(0x277fadff).into()), - renamed_background: Some(rgba(0xd8e4eeff).into()), - renamed_border: Some(rgba(0xbacfe1ff).into()), - success: Some(rgba(0x578c3cff).into()), - success_background: Some(rgba(0xdde7d5ff).into()), - success_border: Some(rgba(0xc2d5b6ff).into()), - unreachable: Some(rgba(0x526f7dff).into()), - unreachable_background: Some(rgba(0xa6cadcff).into()), - unreachable_border: Some(rgba(0x80a4b6ff).into()), - warning: Some(rgba(0x8a8a11ff).into()), - warning_background: Some(rgba(0xeae6d0ff).into()), - warning_border: Some(rgba(0xd8d3abff).into()), + conflict: Some(rgba(0xc08b31ff).into()), + conflict_background: Some(rgba(0xf6e6d4ff).into()), + conflict_border: Some(rgba(0xeed4b3ff).into()), + created: Some(rgba(0xac973aff).into()), + created_background: Some(rgba(0xf1e9d6ff).into()), + created_border: Some(rgba(0xe4d8b7ff).into()), + deleted: Some(rgba(0xc94a23ff).into()), + deleted_background: Some(rgba(0xfcdad0ff).into()), + deleted_border: Some(rgba(0xf6beabff).into()), + error: Some(rgba(0xc94a23ff).into()), + error_background: Some(rgba(0xfcdad0ff).into()), + error_border: Some(rgba(0xf6beabff).into()), + hidden: Some(rgba(0x767d9aff).into()), + hidden_background: Some(rgba(0xc2c6d9ff).into()), + hidden_border: Some(rgba(0xaeb3c7ff).into()), + hint: Some(rgba(0x7087b2ff).into()), + hint_background: Some(rgba(0xdde7f6ff).into()), + hint_border: Some(rgba(0xc2d5efff).into()), + ignored: Some(rgba(0x606889ff).into()), + ignored_background: Some(rgba(0xc2c6d9ff).into()), + ignored_border: Some(rgba(0x9a9fb6ff).into()), + info: Some(rgba(0x3f8fd0ff).into()), + info_background: Some(rgba(0xdde7f6ff).into()), + info_border: Some(rgba(0xc2d5efff).into()), + modified: Some(rgba(0xc08b31ff).into()), + modified_background: Some(rgba(0xf6e6d4ff).into()), + modified_border: Some(rgba(0xeed4b3ff).into()), + predictive: Some(rgba(0x8599beff).into()), + predictive_background: Some(rgba(0xf1e9d6ff).into()), + predictive_border: Some(rgba(0xe4d8b7ff).into()), + renamed: Some(rgba(0x3f8fd0ff).into()), + renamed_background: Some(rgba(0xdde7f6ff).into()), + renamed_border: Some(rgba(0xc2d5efff).into()), + success: Some(rgba(0xac973aff).into()), + success_background: Some(rgba(0xf1e9d6ff).into()), + success_border: Some(rgba(0xe4d8b7ff).into()), + unreachable: Some(rgba(0x606889ff).into()), + unreachable_background: Some(rgba(0xc2c6d9ff).into()), + unreachable_border: Some(rgba(0x9a9fb6ff).into()), + warning: Some(rgba(0xc08b31ff).into()), + warning_background: Some(rgba(0xf6e6d4ff).into()), + warning_border: Some(rgba(0xeed4b3ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x277fadff).into(), - background: rgba(0x277fadff).into(), - selection: rgba(0x277fad3d).into(), + cursor: rgba(0x3f8fd0ff).into(), + background: rgba(0x3f8fd0ff).into(), + selection: rgba(0x3f8fd03d).into(), }, PlayerColor { - cursor: rgba(0xb72fd2ff).into(), - background: rgba(0xb72fd2ff).into(), - selection: rgba(0xb72fd23d).into(), + cursor: rgba(0x9c637aff).into(), + background: rgba(0x9c637aff).into(), + selection: rgba(0x9c637a3d).into(), }, PlayerColor { - cursor: rgba(0x935d26ff).into(), - background: rgba(0x935d26ff).into(), - selection: rgba(0x935d263d).into(), + cursor: rgba(0xc76b2aff).into(), + background: rgba(0xc76b2aff).into(), + selection: rgba(0xc76b2a3d).into(), }, PlayerColor { - cursor: rgba(0x6c6bb8ff).into(), - background: rgba(0x6c6bb8ff).into(), - selection: rgba(0x6c6bb83d).into(), + cursor: rgba(0x6779ccff).into(), + background: rgba(0x6779ccff).into(), + selection: rgba(0x6779cc3d).into(), }, PlayerColor { - cursor: rgba(0x2f8f6fff).into(), - background: rgba(0x2f8f6fff).into(), - selection: rgba(0x2f8f6f3d).into(), + cursor: rgba(0x25a2c9ff).into(), + background: rgba(0x25a2c9ff).into(), + selection: rgba(0x25a2c93d).into(), }, PlayerColor { - cursor: rgba(0xd22f72ff).into(), - background: rgba(0xd22f72ff).into(), - selection: rgba(0xd22f723d).into(), + cursor: rgba(0xc94a23ff).into(), + background: rgba(0xc94a23ff).into(), + selection: rgba(0xc94a233d).into(), }, PlayerColor { - cursor: rgba(0x8a8a11ff).into(), - background: rgba(0x8a8a11ff).into(), - selection: rgba(0x8a8a113d).into(), + cursor: rgba(0xc08b31ff).into(), + background: rgba(0xc08b31ff).into(), + selection: rgba(0xc08b313d).into(), }, PlayerColor { - cursor: rgba(0x578c3cff).into(), - background: rgba(0x578c3cff).into(), - selection: rgba(0x578c3c3d).into(), + cursor: rgba(0xac973aff).into(), + background: rgba(0xac973aff).into(), + selection: rgba(0xac973a3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -9022,63 +9022,63 @@ pub fn atelier() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x3f8fd0ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x578c3cff).into()), + color: Some(rgba(0xac973aff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x7195a8ff).into()), + color: Some(rgba(0x898ea4ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x516d7bff).into()), + color: Some(rgba(0x5e6687ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x578c3cff).into()), + color: Some(rgba(0xac973aff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x3f8fd0ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x161b1dff).into()), + color: Some(rgba(0x202746ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x3f8fd0ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x3f8fd0ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -9086,35 +9086,35 @@ pub fn atelier() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0x935d26ff).into()), + color: Some(rgba(0xc76b2aff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x257fadff).into()), + color: Some(rgba(0x3d8fd1ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0x257fadff).into()), + color: Some(rgba(0x3d8fd1ff).into()), ..Default::default() }, ), ( "function.special.definition".into(), UserHighlightStyle { - color: Some(rgba(0x8a8a0fff).into()), + color: Some(rgba(0xc08b30ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x5a87a0ff).into()), + color: Some(rgba(0x7087b2ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -9122,21 +9122,21 @@ pub fn atelier() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x6b6bb8ff).into()), + color: Some(rgba(0x6679ccff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x3f8fd0ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x935d26ff).into()), + color: Some(rgba(0xc76b2aff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -9144,28 +9144,28 @@ pub fn atelier() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x578c3cff).into()), + color: Some(rgba(0xac973aff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x935c25ff).into()), + color: Some(rgba(0xc76b29ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x516d7bff).into()), + color: Some(rgba(0x5e6687ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x6a97b2ff).into()), + color: Some(rgba(0x8599beff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -9173,112 +9173,112 @@ pub fn atelier() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x161b1dff).into()), + color: Some(rgba(0x202746ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x1f292eff).into()), + color: Some(rgba(0x293256ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xd22d72ff).into()), + color: Some(rgba(0xc94922ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x1f292eff).into()), + color: Some(rgba(0x293256ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x516d7bff).into()), + color: Some(rgba(0x5e6687ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x516d7bff).into()), + color: Some(rgba(0x5e6687ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x1f292eff).into()), + color: Some(rgba(0x293256ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xb72dd2ff).into()), + color: Some(rgba(0x9c637aff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x568c3bff).into()), + color: Some(rgba(0xac9739ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x516d7bff).into()), + color: Some(rgba(0x5e6687ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x2d8f6fff).into()), + color: Some(rgba(0x22a2c9ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xb72dd2ff).into()), + color: Some(rgba(0x9c637aff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x568c3bff).into()), + color: Some(rgba(0xac9739ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x277fadff).into()), + color: Some(rgba(0x3f8fd0ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x935d26ff).into()), + color: Some(rgba(0xc76b2aff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x161b1dff).into()), + color: Some(rgba(0x202746ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -9286,28 +9286,28 @@ pub fn atelier() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0x8a8a0fff).into()), + color: Some(rgba(0xc08b30ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x1f292eff).into()), + color: Some(rgba(0x293256ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0x6b6bb8ff).into()), + color: Some(rgba(0x6679ccff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x8a8a0fff).into()), + color: Some(rgba(0xc08b30ff).into()), ..Default::default() }, ), diff --git a/crates/theme/src/themes/gruvbox.rs b/crates/theme/src/themes/gruvbox.rs index b6b76bf47207918e289470471f715d2cfbfc1725..5a319aa37a69b07998fd06e082cf0f370376abb0 100644 --- a/crates/theme/src/themes/gruvbox.rs +++ b/crates/theme/src/themes/gruvbox.rs @@ -16,170 +16,170 @@ pub fn gruvbox() -> UserThemeFamily { author: "Zed Industries".into(), themes: vec![ UserTheme { - name: "Gruvbox Light Hard".into(), - appearance: Appearance::Light, + name: "Gruvbox Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0xc9b99aff).into()), - border_variant: Some(rgba(0xddcca7ff).into()), - border_focused: Some(rgba(0xaec6cdff).into()), - border_selected: Some(rgba(0xaec6cdff).into()), + border: Some(rgba(0x5b534dff).into()), + border_variant: Some(rgba(0x494340ff).into()), + border_focused: Some(rgba(0x303a36ff).into()), + border_selected: Some(rgba(0x303a36ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xd1c09eff).into()), - elevated_surface_background: Some(rgba(0xecddb5ff).into()), - surface_background: Some(rgba(0xecddb5ff).into()), - background: Some(rgba(0xd9c8a4ff).into()), - panel_background: Some(rgba(0xecddb5ff).into()), - element_background: Some(rgba(0xecddb5ff).into()), - element_hover: Some(rgba(0xddcca7ff).into()), - element_active: Some(rgba(0xc9b99aff).into()), - element_selected: Some(rgba(0xc9b99aff).into()), - element_disabled: Some(rgba(0xecddb5ff).into()), - drop_target_background: Some(rgba(0x5f565080).into()), + border_disabled: Some(rgba(0x544c48ff).into()), + elevated_surface_background: Some(rgba(0x3a3735ff).into()), + surface_background: Some(rgba(0x3a3735ff).into()), + background: Some(rgba(0x4c4642ff).into()), + panel_background: Some(rgba(0x3a3735ff).into()), + element_background: Some(rgba(0x3a3735ff).into()), + element_hover: Some(rgba(0x494340ff).into()), + element_active: Some(rgba(0x5b524cff).into()), + element_selected: Some(rgba(0x5b524cff).into()), + element_disabled: Some(rgba(0x3a3735ff).into()), + drop_target_background: Some(rgba(0xc5b59780).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xddcca7ff).into()), - ghost_element_active: Some(rgba(0xc9b99aff).into()), - ghost_element_selected: Some(rgba(0xc9b99aff).into()), - ghost_element_disabled: Some(rgba(0xecddb5ff).into()), - text: Some(rgba(0x282828ff).into()), - text_muted: Some(rgba(0x5f5650ff).into()), - text_placeholder: Some(rgba(0x8a7c6fff).into()), - text_disabled: Some(rgba(0x8a7c6fff).into()), - text_accent: Some(rgba(0x0b6678ff).into()), - icon: Some(rgba(0x282828ff).into()), - icon_muted: Some(rgba(0x5f5650ff).into()), - icon_disabled: Some(rgba(0x8a7c6fff).into()), - icon_placeholder: Some(rgba(0x5f5650ff).into()), - icon_accent: Some(rgba(0x0b6678ff).into()), - status_bar_background: Some(rgba(0xd9c8a4ff).into()), - title_bar_background: Some(rgba(0xd9c8a4ff).into()), - toolbar_background: Some(rgba(0xf9f5d7ff).into()), - tab_bar_background: Some(rgba(0xecddb5ff).into()), - tab_inactive_background: Some(rgba(0xecddb5ff).into()), - tab_active_background: Some(rgba(0xf9f5d7ff).into()), - scrollbar_thumb_background: Some(rgba(0x2828284c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xddcca7ff).into()), - scrollbar_thumb_border: Some(rgba(0xddcca7ff).into()), + ghost_element_hover: Some(rgba(0x494340ff).into()), + ghost_element_active: Some(rgba(0x5b524cff).into()), + ghost_element_selected: Some(rgba(0x5b524cff).into()), + ghost_element_disabled: Some(rgba(0x3a3735ff).into()), + text: Some(rgba(0xfbf1c7ff).into()), + text_muted: Some(rgba(0xc5b597ff).into()), + text_placeholder: Some(rgba(0x9a8c79ff).into()), + text_disabled: Some(rgba(0x9a8c79ff).into()), + text_accent: Some(rgba(0x83a598ff).into()), + icon: Some(rgba(0xfbf1c7ff).into()), + icon_muted: Some(rgba(0xc5b597ff).into()), + icon_disabled: Some(rgba(0x9a8c79ff).into()), + icon_placeholder: Some(rgba(0xc5b597ff).into()), + icon_accent: Some(rgba(0x83a598ff).into()), + status_bar_background: Some(rgba(0x4c4642ff).into()), + title_bar_background: Some(rgba(0x4c4642ff).into()), + toolbar_background: Some(rgba(0x282828ff).into()), + tab_bar_background: Some(rgba(0x3a3735ff).into()), + tab_inactive_background: Some(rgba(0x3a3735ff).into()), + tab_active_background: Some(rgba(0x282828ff).into()), + scrollbar_thumb_background: Some(rgba(0xfbf1c74c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x494340ff).into()), + scrollbar_thumb_border: Some(rgba(0x494340ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xefe2bcff).into()), - editor_foreground: Some(rgba(0x282828ff).into()), - editor_background: Some(rgba(0xf9f5d7ff).into()), - editor_gutter_background: Some(rgba(0xf9f5d7ff).into()), - editor_subheader_background: Some(rgba(0xecddb5ff).into()), - editor_active_line_background: Some(rgba(0xecddb5bf).into()), - editor_highlighted_line_background: Some(rgba(0xecddb5ff).into()), - editor_line_number: Some(rgba(0x28282859).into()), - editor_active_line_number: Some(rgba(0x282828ff).into()), - editor_invisible: Some(rgba(0x5f5650ff).into()), - editor_wrap_guide: Some(rgba(0x2828280d).into()), - editor_active_wrap_guide: Some(rgba(0x2828281a).into()), - editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), + scrollbar_track_border: Some(rgba(0x373432ff).into()), + editor_foreground: Some(rgba(0xebdbb2ff).into()), + editor_background: Some(rgba(0x282828ff).into()), + editor_gutter_background: Some(rgba(0x282828ff).into()), + editor_subheader_background: Some(rgba(0x3a3735ff).into()), + editor_active_line_background: Some(rgba(0x3a3735bf).into()), + editor_highlighted_line_background: Some(rgba(0x3a3735ff).into()), + editor_line_number: Some(rgba(0xfbf1c759).into()), + editor_active_line_number: Some(rgba(0xfbf1c7ff).into()), + editor_invisible: Some(rgba(0xc5b597ff).into()), + editor_wrap_guide: Some(rgba(0xfbf1c70d).into()), + editor_active_wrap_guide: Some(rgba(0xfbf1c71a).into()), + editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), - terminal_background: Some(rgba(0xf9f5d7ff).into()), - terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), - terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), - terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), - terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), - terminal_ansi_black: Some(rgba(0xf9f5d7ff).into()), - terminal_ansi_red: Some(rgba(0x9d0408ff).into()), - terminal_ansi_green: Some(rgba(0x797410ff).into()), - terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), - terminal_ansi_blue: Some(rgba(0x0b6678ff).into()), - terminal_ansi_magenta: Some(rgba(0x7c6f64ff).into()), - terminal_ansi_cyan: Some(rgba(0x437b59ff).into()), - terminal_ansi_white: Some(rgba(0x282828ff).into()), - link_text_hover: Some(rgba(0x0b6678ff).into()), + terminal_background: Some(rgba(0x282828ff).into()), + terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), + terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), + terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), + terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), + terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_black: Some(rgba(0x282828ff).into()), + terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), + terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), + terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), + terminal_ansi_blue: Some(rgba(0x83a598ff).into()), + terminal_ansi_magenta: Some(rgba(0xa89984ff).into()), + terminal_ansi_cyan: Some(rgba(0x8ec07cff).into()), + terminal_ansi_white: Some(rgba(0xfbf1c7ff).into()), + link_text_hover: Some(rgba(0x83a598ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xb57616ff).into()), - conflict_background: Some(rgba(0xf5e2d0ff).into()), - conflict_border: Some(rgba(0xebccabff).into()), - created: Some(rgba(0x797410ff).into()), - created_background: Some(rgba(0xe5e1ceff).into()), - created_border: Some(rgba(0xd1cba8ff).into()), - deleted: Some(rgba(0x9d0408ff).into()), - deleted_background: Some(rgba(0xf4d1c9ff).into()), - deleted_border: Some(rgba(0xe8ac9eff).into()), - error: Some(rgba(0x9d0408ff).into()), - error_background: Some(rgba(0xf4d1c9ff).into()), - error_border: Some(rgba(0xe8ac9eff).into()), - hidden: Some(rgba(0x8a7c6fff).into()), - hidden_background: Some(rgba(0xd9c8a4ff).into()), - hidden_border: Some(rgba(0xd1c09eff).into()), - hint: Some(rgba(0x677562ff).into()), - hint_background: Some(rgba(0xd2dee2ff).into()), - hint_border: Some(rgba(0xaec6cdff).into()), - ignored: Some(rgba(0x5f5650ff).into()), - ignored_background: Some(rgba(0xd9c8a4ff).into()), - ignored_border: Some(rgba(0xc9b99aff).into()), - info: Some(rgba(0x0b6678ff).into()), - info_background: Some(rgba(0xd2dee2ff).into()), - info_border: Some(rgba(0xaec6cdff).into()), - modified: Some(rgba(0xb57616ff).into()), - modified_background: Some(rgba(0xf5e2d0ff).into()), - modified_border: Some(rgba(0xebccabff).into()), - predictive: Some(rgba(0x7d9881ff).into()), - predictive_background: Some(rgba(0xe5e1ceff).into()), - predictive_border: Some(rgba(0xd1cba8ff).into()), - renamed: Some(rgba(0x0b6678ff).into()), - renamed_background: Some(rgba(0xd2dee2ff).into()), - renamed_border: Some(rgba(0xaec6cdff).into()), - success: Some(rgba(0x797410ff).into()), - success_background: Some(rgba(0xe5e1ceff).into()), - success_border: Some(rgba(0xd1cba8ff).into()), - unreachable: Some(rgba(0x5f5650ff).into()), - unreachable_background: Some(rgba(0xd9c8a4ff).into()), - unreachable_border: Some(rgba(0xc9b99aff).into()), - warning: Some(rgba(0xb57616ff).into()), - warning_background: Some(rgba(0xf5e2d0ff).into()), - warning_border: Some(rgba(0xebccabff).into()), + conflict: Some(rgba(0xf9bd30ff).into()), + conflict_background: Some(rgba(0x582f10ff).into()), + conflict_border: Some(rgba(0x754916ff).into()), + created: Some(rgba(0xb8bb27ff).into()), + created_background: Some(rgba(0x332b11ff).into()), + created_border: Some(rgba(0x4a4516ff).into()), + deleted: Some(rgba(0xfb4a35ff).into()), + deleted_background: Some(rgba(0x5a0a10ff).into()), + deleted_border: Some(rgba(0x771618ff).into()), + error: Some(rgba(0xfb4a35ff).into()), + error_background: Some(rgba(0x5a0a10ff).into()), + error_border: Some(rgba(0x771618ff).into()), + hidden: Some(rgba(0x9a8c79ff).into()), + hidden_background: Some(rgba(0x4c4642ff).into()), + hidden_border: Some(rgba(0x544c48ff).into()), + hint: Some(rgba(0x8d957eff).into()), + hint_background: Some(rgba(0x1e2321ff).into()), + hint_border: Some(rgba(0x303a36ff).into()), + ignored: Some(rgba(0xc5b597ff).into()), + ignored_background: Some(rgba(0x4c4642ff).into()), + ignored_border: Some(rgba(0x5b534dff).into()), + info: Some(rgba(0x83a598ff).into()), + info_background: Some(rgba(0x1e2321ff).into()), + info_border: Some(rgba(0x303a36ff).into()), + modified: Some(rgba(0xf9bd30ff).into()), + modified_background: Some(rgba(0x582f10ff).into()), + modified_border: Some(rgba(0x754916ff).into()), + predictive: Some(rgba(0x717363ff).into()), + predictive_background: Some(rgba(0x332b11ff).into()), + predictive_border: Some(rgba(0x4a4516ff).into()), + renamed: Some(rgba(0x83a598ff).into()), + renamed_background: Some(rgba(0x1e2321ff).into()), + renamed_border: Some(rgba(0x303a36ff).into()), + success: Some(rgba(0xb8bb27ff).into()), + success_background: Some(rgba(0x332b11ff).into()), + success_border: Some(rgba(0x4a4516ff).into()), + unreachable: Some(rgba(0xc5b597ff).into()), + unreachable_background: Some(rgba(0x4c4642ff).into()), + unreachable_border: Some(rgba(0x5b534dff).into()), + warning: Some(rgba(0xf9bd30ff).into()), + warning_background: Some(rgba(0x582f10ff).into()), + warning_border: Some(rgba(0x754916ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x0b6678ff).into(), - background: rgba(0x0b6678ff).into(), - selection: rgba(0x0b66783d).into(), + cursor: rgba(0x83a598ff).into(), + background: rgba(0x83a598ff).into(), + selection: rgba(0x83a5983d).into(), }, PlayerColor { - cursor: rgba(0x7c6f64ff).into(), - background: rgba(0x7c6f64ff).into(), - selection: rgba(0x7c6f643d).into(), + cursor: rgba(0xa89984ff).into(), + background: rgba(0xa89984ff).into(), + selection: rgba(0xa899843d).into(), }, PlayerColor { - cursor: rgba(0xaf3b05ff).into(), - background: rgba(0xaf3b05ff).into(), - selection: rgba(0xaf3b053d).into(), + cursor: rgba(0xfd801bff).into(), + background: rgba(0xfd801bff).into(), + selection: rgba(0xfd801b3d).into(), }, PlayerColor { - cursor: rgba(0x8f4071ff).into(), - background: rgba(0x8f4071ff).into(), - selection: rgba(0x8f40713d).into(), + cursor: rgba(0xd3869bff).into(), + background: rgba(0xd3869bff).into(), + selection: rgba(0xd3869b3d).into(), }, PlayerColor { - cursor: rgba(0x437b59ff).into(), - background: rgba(0x437b59ff).into(), - selection: rgba(0x437b593d).into(), + cursor: rgba(0x8ec07cff).into(), + background: rgba(0x8ec07cff).into(), + selection: rgba(0x8ec07c3d).into(), }, PlayerColor { - cursor: rgba(0x9d0408ff).into(), - background: rgba(0x9d0408ff).into(), - selection: rgba(0x9d04083d).into(), + cursor: rgba(0xfb4a35ff).into(), + background: rgba(0xfb4a35ff).into(), + selection: rgba(0xfb4a353d).into(), }, PlayerColor { - cursor: rgba(0xb57616ff).into(), - background: rgba(0xb57616ff).into(), - selection: rgba(0xb576163d).into(), + cursor: rgba(0xf9bd30ff).into(), + background: rgba(0xf9bd30ff).into(), + selection: rgba(0xf9bd303d).into(), }, PlayerColor { - cursor: rgba(0x797410ff).into(), - background: rgba(0x797410ff).into(), - selection: rgba(0x7974103d).into(), + cursor: rgba(0xb8bb27ff).into(), + background: rgba(0xb8bb27ff).into(), + selection: rgba(0xb8bb273d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -187,63 +187,63 @@ pub fn gruvbox() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x7c6f64ff).into()), + color: Some(rgba(0xa89984ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x5d544eff).into()), + color: Some(rgba(0xc7b798ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0xb57614ff).into()), + color: Some(rgba(0xfabd2fff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -251,28 +251,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xaf3a03ff).into()), + color: Some(rgba(0xfe8019ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x79740eff).into()), + color: Some(rgba(0xb8bb26ff).into()), ..Default::default() }, ), ( "function.builtin".into(), UserHighlightStyle { - color: Some(rgba(0x9d0006ff).into()), + color: Some(rgba(0xfb4934ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x677562ff).into()), + color: Some(rgba(0x8d957eff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -280,21 +280,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x9d0006ff).into()), + color: Some(rgba(0xfb4934ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -302,28 +302,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x7d9881ff).into()), + color: Some(rgba(0x717363ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -331,112 +331,112 @@ pub fn gruvbox() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xfbf1c7ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xebdbb2ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xebdbb2ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x3c3836ff).into()), + color: Some(rgba(0xd5c4a1ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x665c54ff).into()), + color: Some(rgba(0xa89984ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x413d3aff).into()), + color: Some(rgba(0xe5d5adff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xebdbb2ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x413d3aff).into()), + color: Some(rgba(0xe5d5adff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x79740eff).into()), + color: Some(rgba(0xb8bb26ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x5d544eff).into()), + color: Some(rgba(0xc7b798ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xaf3a03ff).into()), + color: Some(rgba(0xfe8019ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x076678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x79740eff).into()), + color: Some(rgba(0xb8bb26ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -444,21 +444,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xb57614ff).into()), + color: Some(rgba(0xfabd2fff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x076678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), @@ -467,7 +467,7 @@ pub fn gruvbox() -> UserThemeFamily { }, }, UserTheme { - name: "Gruvbox Dark Soft".into(), + name: "Gruvbox Dark Hard".into(), appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { @@ -477,21 +477,21 @@ pub fn gruvbox() -> UserThemeFamily { border_selected: Some(rgba(0x303a36ff).into()), border_transparent: Some(rgba(0x00000000).into()), border_disabled: Some(rgba(0x544c48ff).into()), - elevated_surface_background: Some(rgba(0x3b3735ff).into()), - surface_background: Some(rgba(0x3b3735ff).into()), + elevated_surface_background: Some(rgba(0x393634ff).into()), + surface_background: Some(rgba(0x393634ff).into()), background: Some(rgba(0x4c4642ff).into()), - panel_background: Some(rgba(0x3b3735ff).into()), - element_background: Some(rgba(0x3b3735ff).into()), + panel_background: Some(rgba(0x393634ff).into()), + element_background: Some(rgba(0x393634ff).into()), element_hover: Some(rgba(0x494340ff).into()), element_active: Some(rgba(0x5b524cff).into()), element_selected: Some(rgba(0x5b524cff).into()), - element_disabled: Some(rgba(0x3b3735ff).into()), + element_disabled: Some(rgba(0x393634ff).into()), drop_target_background: Some(rgba(0xc5b59780).into()), ghost_element_background: Some(rgba(0x00000000).into()), ghost_element_hover: Some(rgba(0x494340ff).into()), ghost_element_active: Some(rgba(0x5b524cff).into()), ghost_element_selected: Some(rgba(0x5b524cff).into()), - ghost_element_disabled: Some(rgba(0x3b3735ff).into()), + ghost_element_disabled: Some(rgba(0x393634ff).into()), text: Some(rgba(0xfbf1c7ff).into()), text_muted: Some(rgba(0xc5b597ff).into()), text_placeholder: Some(rgba(0x9a8c79ff).into()), @@ -504,21 +504,21 @@ pub fn gruvbox() -> UserThemeFamily { icon_accent: Some(rgba(0x83a598ff).into()), status_bar_background: Some(rgba(0x4c4642ff).into()), title_bar_background: Some(rgba(0x4c4642ff).into()), - toolbar_background: Some(rgba(0x32302fff).into()), - tab_bar_background: Some(rgba(0x3b3735ff).into()), - tab_inactive_background: Some(rgba(0x3b3735ff).into()), - tab_active_background: Some(rgba(0x32302fff).into()), + toolbar_background: Some(rgba(0x1d2021ff).into()), + tab_bar_background: Some(rgba(0x393634ff).into()), + tab_inactive_background: Some(rgba(0x393634ff).into()), + tab_active_background: Some(rgba(0x1d2021ff).into()), scrollbar_thumb_background: Some(rgba(0xfbf1c74c).into()), scrollbar_thumb_hover_background: Some(rgba(0x494340ff).into()), scrollbar_thumb_border: Some(rgba(0x494340ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x393634ff).into()), + scrollbar_track_border: Some(rgba(0x343130ff).into()), editor_foreground: Some(rgba(0xebdbb2ff).into()), - editor_background: Some(rgba(0x32302fff).into()), - editor_gutter_background: Some(rgba(0x32302fff).into()), - editor_subheader_background: Some(rgba(0x3b3735ff).into()), - editor_active_line_background: Some(rgba(0x3b3735bf).into()), - editor_highlighted_line_background: Some(rgba(0x3b3735ff).into()), + editor_background: Some(rgba(0x1d2021ff).into()), + editor_gutter_background: Some(rgba(0x1d2021ff).into()), + editor_subheader_background: Some(rgba(0x393634ff).into()), + editor_active_line_background: Some(rgba(0x393634bf).into()), + editor_highlighted_line_background: Some(rgba(0x393634ff).into()), editor_line_number: Some(rgba(0xfbf1c759).into()), editor_active_line_number: Some(rgba(0xfbf1c7ff).into()), editor_invisible: Some(rgba(0xc5b597ff).into()), @@ -526,7 +526,7 @@ pub fn gruvbox() -> UserThemeFamily { editor_active_wrap_guide: Some(rgba(0xfbf1c71a).into()), editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), - terminal_background: Some(rgba(0x32302fff).into()), + terminal_background: Some(rgba(0x1d2021ff).into()), terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), @@ -535,7 +535,7 @@ pub fn gruvbox() -> UserThemeFamily { terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), - terminal_ansi_black: Some(rgba(0x32302fff).into()), + terminal_ansi_black: Some(rgba(0x1d2021ff).into()), terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), @@ -918,170 +918,170 @@ pub fn gruvbox() -> UserThemeFamily { }, }, UserTheme { - name: "Gruvbox Light".into(), - appearance: Appearance::Light, + name: "Gruvbox Dark Soft".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0xc9b99aff).into()), - border_variant: Some(rgba(0xddcca7ff).into()), - border_focused: Some(rgba(0xaec6cdff).into()), - border_selected: Some(rgba(0xaec6cdff).into()), + border: Some(rgba(0x5b534dff).into()), + border_variant: Some(rgba(0x494340ff).into()), + border_focused: Some(rgba(0x303a36ff).into()), + border_selected: Some(rgba(0x303a36ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xd1c09eff).into()), - elevated_surface_background: Some(rgba(0xecddb4ff).into()), - surface_background: Some(rgba(0xecddb4ff).into()), - background: Some(rgba(0xd9c8a4ff).into()), - panel_background: Some(rgba(0xecddb4ff).into()), - element_background: Some(rgba(0xecddb4ff).into()), - element_hover: Some(rgba(0xddcca7ff).into()), - element_active: Some(rgba(0xc9b99aff).into()), - element_selected: Some(rgba(0xc9b99aff).into()), - element_disabled: Some(rgba(0xecddb4ff).into()), - drop_target_background: Some(rgba(0x5f565080).into()), + border_disabled: Some(rgba(0x544c48ff).into()), + elevated_surface_background: Some(rgba(0x3b3735ff).into()), + surface_background: Some(rgba(0x3b3735ff).into()), + background: Some(rgba(0x4c4642ff).into()), + panel_background: Some(rgba(0x3b3735ff).into()), + element_background: Some(rgba(0x3b3735ff).into()), + element_hover: Some(rgba(0x494340ff).into()), + element_active: Some(rgba(0x5b524cff).into()), + element_selected: Some(rgba(0x5b524cff).into()), + element_disabled: Some(rgba(0x3b3735ff).into()), + drop_target_background: Some(rgba(0xc5b59780).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xddcca7ff).into()), - ghost_element_active: Some(rgba(0xc9b99aff).into()), - ghost_element_selected: Some(rgba(0xc9b99aff).into()), - ghost_element_disabled: Some(rgba(0xecddb4ff).into()), - text: Some(rgba(0x282828ff).into()), - text_muted: Some(rgba(0x5f5650ff).into()), - text_placeholder: Some(rgba(0x8a7c6fff).into()), - text_disabled: Some(rgba(0x8a7c6fff).into()), - text_accent: Some(rgba(0x0b6678ff).into()), - icon: Some(rgba(0x282828ff).into()), - icon_muted: Some(rgba(0x5f5650ff).into()), - icon_disabled: Some(rgba(0x8a7c6fff).into()), - icon_placeholder: Some(rgba(0x5f5650ff).into()), - icon_accent: Some(rgba(0x0b6678ff).into()), - status_bar_background: Some(rgba(0xd9c8a4ff).into()), - title_bar_background: Some(rgba(0xd9c8a4ff).into()), - toolbar_background: Some(rgba(0xfbf1c7ff).into()), - tab_bar_background: Some(rgba(0xecddb4ff).into()), - tab_inactive_background: Some(rgba(0xecddb4ff).into()), - tab_active_background: Some(rgba(0xfbf1c7ff).into()), - scrollbar_thumb_background: Some(rgba(0x2828284c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xddcca7ff).into()), - scrollbar_thumb_border: Some(rgba(0xddcca7ff).into()), + ghost_element_hover: Some(rgba(0x494340ff).into()), + ghost_element_active: Some(rgba(0x5b524cff).into()), + ghost_element_selected: Some(rgba(0x5b524cff).into()), + ghost_element_disabled: Some(rgba(0x3b3735ff).into()), + text: Some(rgba(0xfbf1c7ff).into()), + text_muted: Some(rgba(0xc5b597ff).into()), + text_placeholder: Some(rgba(0x9a8c79ff).into()), + text_disabled: Some(rgba(0x9a8c79ff).into()), + text_accent: Some(rgba(0x83a598ff).into()), + icon: Some(rgba(0xfbf1c7ff).into()), + icon_muted: Some(rgba(0xc5b597ff).into()), + icon_disabled: Some(rgba(0x9a8c79ff).into()), + icon_placeholder: Some(rgba(0xc5b597ff).into()), + icon_accent: Some(rgba(0x83a598ff).into()), + status_bar_background: Some(rgba(0x4c4642ff).into()), + title_bar_background: Some(rgba(0x4c4642ff).into()), + toolbar_background: Some(rgba(0x32302fff).into()), + tab_bar_background: Some(rgba(0x3b3735ff).into()), + tab_inactive_background: Some(rgba(0x3b3735ff).into()), + tab_active_background: Some(rgba(0x32302fff).into()), + scrollbar_thumb_background: Some(rgba(0xfbf1c74c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x494340ff).into()), + scrollbar_thumb_border: Some(rgba(0x494340ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xefe1b8ff).into()), - editor_foreground: Some(rgba(0x282828ff).into()), - editor_background: Some(rgba(0xfbf1c7ff).into()), - editor_gutter_background: Some(rgba(0xfbf1c7ff).into()), - editor_subheader_background: Some(rgba(0xecddb4ff).into()), - editor_active_line_background: Some(rgba(0xecddb4bf).into()), - editor_highlighted_line_background: Some(rgba(0xecddb4ff).into()), - editor_line_number: Some(rgba(0x28282859).into()), - editor_active_line_number: Some(rgba(0x282828ff).into()), - editor_invisible: Some(rgba(0x5f5650ff).into()), - editor_wrap_guide: Some(rgba(0x2828280d).into()), - editor_active_wrap_guide: Some(rgba(0x2828281a).into()), - editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), + scrollbar_track_border: Some(rgba(0x393634ff).into()), + editor_foreground: Some(rgba(0xebdbb2ff).into()), + editor_background: Some(rgba(0x32302fff).into()), + editor_gutter_background: Some(rgba(0x32302fff).into()), + editor_subheader_background: Some(rgba(0x3b3735ff).into()), + editor_active_line_background: Some(rgba(0x3b3735bf).into()), + editor_highlighted_line_background: Some(rgba(0x3b3735ff).into()), + editor_line_number: Some(rgba(0xfbf1c759).into()), + editor_active_line_number: Some(rgba(0xfbf1c7ff).into()), + editor_invisible: Some(rgba(0xc5b597ff).into()), + editor_wrap_guide: Some(rgba(0xfbf1c70d).into()), + editor_active_wrap_guide: Some(rgba(0xfbf1c71a).into()), + editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), - terminal_background: Some(rgba(0xfbf1c7ff).into()), - terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), - terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), - terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), - terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), - terminal_ansi_black: Some(rgba(0xfbf1c7ff).into()), - terminal_ansi_red: Some(rgba(0x9d0408ff).into()), - terminal_ansi_green: Some(rgba(0x797410ff).into()), - terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), - terminal_ansi_blue: Some(rgba(0x0b6678ff).into()), - terminal_ansi_magenta: Some(rgba(0x7c6f64ff).into()), - terminal_ansi_cyan: Some(rgba(0x437b59ff).into()), - terminal_ansi_white: Some(rgba(0x282828ff).into()), - link_text_hover: Some(rgba(0x0b6678ff).into()), + terminal_background: Some(rgba(0x32302fff).into()), + terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), + terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), + terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), + terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), + terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_black: Some(rgba(0x32302fff).into()), + terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), + terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), + terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), + terminal_ansi_blue: Some(rgba(0x83a598ff).into()), + terminal_ansi_magenta: Some(rgba(0xa89984ff).into()), + terminal_ansi_cyan: Some(rgba(0x8ec07cff).into()), + terminal_ansi_white: Some(rgba(0xfbf1c7ff).into()), + link_text_hover: Some(rgba(0x83a598ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xb57616ff).into()), - conflict_background: Some(rgba(0xf5e2d0ff).into()), - conflict_border: Some(rgba(0xebccabff).into()), - created: Some(rgba(0x797410ff).into()), - created_background: Some(rgba(0xe5e1ceff).into()), - created_border: Some(rgba(0xd1cba8ff).into()), - deleted: Some(rgba(0x9d0408ff).into()), - deleted_background: Some(rgba(0xf4d1c9ff).into()), - deleted_border: Some(rgba(0xe8ac9eff).into()), - error: Some(rgba(0x9d0408ff).into()), - error_background: Some(rgba(0xf4d1c9ff).into()), - error_border: Some(rgba(0xe8ac9eff).into()), - hidden: Some(rgba(0x8a7c6fff).into()), - hidden_background: Some(rgba(0xd9c8a4ff).into()), - hidden_border: Some(rgba(0xd1c09eff).into()), - hint: Some(rgba(0x677562ff).into()), - hint_background: Some(rgba(0xd2dee2ff).into()), - hint_border: Some(rgba(0xaec6cdff).into()), - ignored: Some(rgba(0x5f5650ff).into()), - ignored_background: Some(rgba(0xd9c8a4ff).into()), - ignored_border: Some(rgba(0xc9b99aff).into()), - info: Some(rgba(0x0b6678ff).into()), - info_background: Some(rgba(0xd2dee2ff).into()), - info_border: Some(rgba(0xaec6cdff).into()), - modified: Some(rgba(0xb57616ff).into()), - modified_background: Some(rgba(0xf5e2d0ff).into()), - modified_border: Some(rgba(0xebccabff).into()), - predictive: Some(rgba(0x7d9881ff).into()), - predictive_background: Some(rgba(0xe5e1ceff).into()), - predictive_border: Some(rgba(0xd1cba8ff).into()), - renamed: Some(rgba(0x0b6678ff).into()), - renamed_background: Some(rgba(0xd2dee2ff).into()), - renamed_border: Some(rgba(0xaec6cdff).into()), - success: Some(rgba(0x797410ff).into()), - success_background: Some(rgba(0xe5e1ceff).into()), - success_border: Some(rgba(0xd1cba8ff).into()), - unreachable: Some(rgba(0x5f5650ff).into()), - unreachable_background: Some(rgba(0xd9c8a4ff).into()), - unreachable_border: Some(rgba(0xc9b99aff).into()), - warning: Some(rgba(0xb57616ff).into()), - warning_background: Some(rgba(0xf5e2d0ff).into()), - warning_border: Some(rgba(0xebccabff).into()), + conflict: Some(rgba(0xf9bd30ff).into()), + conflict_background: Some(rgba(0x582f10ff).into()), + conflict_border: Some(rgba(0x754916ff).into()), + created: Some(rgba(0xb8bb27ff).into()), + created_background: Some(rgba(0x332b11ff).into()), + created_border: Some(rgba(0x4a4516ff).into()), + deleted: Some(rgba(0xfb4a35ff).into()), + deleted_background: Some(rgba(0x5a0a10ff).into()), + deleted_border: Some(rgba(0x771618ff).into()), + error: Some(rgba(0xfb4a35ff).into()), + error_background: Some(rgba(0x5a0a10ff).into()), + error_border: Some(rgba(0x771618ff).into()), + hidden: Some(rgba(0x9a8c79ff).into()), + hidden_background: Some(rgba(0x4c4642ff).into()), + hidden_border: Some(rgba(0x544c48ff).into()), + hint: Some(rgba(0x8d957eff).into()), + hint_background: Some(rgba(0x1e2321ff).into()), + hint_border: Some(rgba(0x303a36ff).into()), + ignored: Some(rgba(0xc5b597ff).into()), + ignored_background: Some(rgba(0x4c4642ff).into()), + ignored_border: Some(rgba(0x5b534dff).into()), + info: Some(rgba(0x83a598ff).into()), + info_background: Some(rgba(0x1e2321ff).into()), + info_border: Some(rgba(0x303a36ff).into()), + modified: Some(rgba(0xf9bd30ff).into()), + modified_background: Some(rgba(0x582f10ff).into()), + modified_border: Some(rgba(0x754916ff).into()), + predictive: Some(rgba(0x717363ff).into()), + predictive_background: Some(rgba(0x332b11ff).into()), + predictive_border: Some(rgba(0x4a4516ff).into()), + renamed: Some(rgba(0x83a598ff).into()), + renamed_background: Some(rgba(0x1e2321ff).into()), + renamed_border: Some(rgba(0x303a36ff).into()), + success: Some(rgba(0xb8bb27ff).into()), + success_background: Some(rgba(0x332b11ff).into()), + success_border: Some(rgba(0x4a4516ff).into()), + unreachable: Some(rgba(0xc5b597ff).into()), + unreachable_background: Some(rgba(0x4c4642ff).into()), + unreachable_border: Some(rgba(0x5b534dff).into()), + warning: Some(rgba(0xf9bd30ff).into()), + warning_background: Some(rgba(0x582f10ff).into()), + warning_border: Some(rgba(0x754916ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x0b6678ff).into(), - background: rgba(0x0b6678ff).into(), - selection: rgba(0x0b66783d).into(), + cursor: rgba(0x83a598ff).into(), + background: rgba(0x83a598ff).into(), + selection: rgba(0x83a5983d).into(), }, PlayerColor { - cursor: rgba(0x7c6f64ff).into(), - background: rgba(0x7c6f64ff).into(), - selection: rgba(0x7c6f643d).into(), + cursor: rgba(0xa89984ff).into(), + background: rgba(0xa89984ff).into(), + selection: rgba(0xa899843d).into(), }, PlayerColor { - cursor: rgba(0xaf3b05ff).into(), - background: rgba(0xaf3b05ff).into(), - selection: rgba(0xaf3b053d).into(), + cursor: rgba(0xfd801bff).into(), + background: rgba(0xfd801bff).into(), + selection: rgba(0xfd801b3d).into(), }, PlayerColor { - cursor: rgba(0x8f4071ff).into(), - background: rgba(0x8f4071ff).into(), - selection: rgba(0x8f40713d).into(), + cursor: rgba(0xd3869bff).into(), + background: rgba(0xd3869bff).into(), + selection: rgba(0xd3869b3d).into(), }, PlayerColor { - cursor: rgba(0x437b59ff).into(), - background: rgba(0x437b59ff).into(), - selection: rgba(0x437b593d).into(), + cursor: rgba(0x8ec07cff).into(), + background: rgba(0x8ec07cff).into(), + selection: rgba(0x8ec07c3d).into(), }, PlayerColor { - cursor: rgba(0x9d0408ff).into(), - background: rgba(0x9d0408ff).into(), - selection: rgba(0x9d04083d).into(), + cursor: rgba(0xfb4a35ff).into(), + background: rgba(0xfb4a35ff).into(), + selection: rgba(0xfb4a353d).into(), }, PlayerColor { - cursor: rgba(0xb57616ff).into(), - background: rgba(0xb57616ff).into(), - selection: rgba(0xb576163d).into(), + cursor: rgba(0xf9bd30ff).into(), + background: rgba(0xf9bd30ff).into(), + selection: rgba(0xf9bd303d).into(), }, PlayerColor { - cursor: rgba(0x797410ff).into(), - background: rgba(0x797410ff).into(), - selection: rgba(0x7974103d).into(), + cursor: rgba(0xb8bb27ff).into(), + background: rgba(0xb8bb27ff).into(), + selection: rgba(0xb8bb273d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -1089,63 +1089,63 @@ pub fn gruvbox() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x7c6f64ff).into()), + color: Some(rgba(0xa89984ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x5d544eff).into()), + color: Some(rgba(0xc7b798ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0xb57614ff).into()), + color: Some(rgba(0xfabd2fff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1153,28 +1153,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xaf3a03ff).into()), + color: Some(rgba(0xfe8019ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x79740eff).into()), + color: Some(rgba(0xb8bb26ff).into()), ..Default::default() }, ), ( "function.builtin".into(), UserHighlightStyle { - color: Some(rgba(0x9d0006ff).into()), + color: Some(rgba(0xfb4934ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x677562ff).into()), + color: Some(rgba(0x8d957eff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1182,21 +1182,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x9d0006ff).into()), + color: Some(rgba(0xfb4934ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1204,28 +1204,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x7d9881ff).into()), + color: Some(rgba(0x717363ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1233,112 +1233,112 @@ pub fn gruvbox() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xfbf1c7ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xebdbb2ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xebdbb2ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x3c3836ff).into()), + color: Some(rgba(0xd5c4a1ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x665c54ff).into()), + color: Some(rgba(0xa89984ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x413d3aff).into()), + color: Some(rgba(0xe5d5adff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x282828ff).into()), + color: Some(rgba(0xebdbb2ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x413d3aff).into()), + color: Some(rgba(0xe5d5adff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x79740eff).into()), + color: Some(rgba(0xb8bb26ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x5d544eff).into()), + color: Some(rgba(0xc7b798ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xaf3a03ff).into()), + color: Some(rgba(0xfe8019ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x8f3f71ff).into()), + color: Some(rgba(0xd3869bff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x427b58ff).into()), + color: Some(rgba(0x8ec07cff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x076678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x79740eff).into()), + color: Some(rgba(0xb8bb26ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1346,21 +1346,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xb57614ff).into()), + color: Some(rgba(0xfabd2fff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x076678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x0b6678ff).into()), + color: Some(rgba(0x83a598ff).into()), ..Default::default() }, ), @@ -1369,170 +1369,170 @@ pub fn gruvbox() -> UserThemeFamily { }, }, UserTheme { - name: "Gruvbox Dark".into(), - appearance: Appearance::Dark, + name: "Gruvbox Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x5b534dff).into()), - border_variant: Some(rgba(0x494340ff).into()), - border_focused: Some(rgba(0x303a36ff).into()), - border_selected: Some(rgba(0x303a36ff).into()), + border: Some(rgba(0xc9b99aff).into()), + border_variant: Some(rgba(0xddcca7ff).into()), + border_focused: Some(rgba(0xaec6cdff).into()), + border_selected: Some(rgba(0xaec6cdff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x544c48ff).into()), - elevated_surface_background: Some(rgba(0x3a3735ff).into()), - surface_background: Some(rgba(0x3a3735ff).into()), - background: Some(rgba(0x4c4642ff).into()), - panel_background: Some(rgba(0x3a3735ff).into()), - element_background: Some(rgba(0x3a3735ff).into()), - element_hover: Some(rgba(0x494340ff).into()), - element_active: Some(rgba(0x5b524cff).into()), - element_selected: Some(rgba(0x5b524cff).into()), - element_disabled: Some(rgba(0x3a3735ff).into()), - drop_target_background: Some(rgba(0xc5b59780).into()), + border_disabled: Some(rgba(0xd1c09eff).into()), + elevated_surface_background: Some(rgba(0xecddb4ff).into()), + surface_background: Some(rgba(0xecddb4ff).into()), + background: Some(rgba(0xd9c8a4ff).into()), + panel_background: Some(rgba(0xecddb4ff).into()), + element_background: Some(rgba(0xecddb4ff).into()), + element_hover: Some(rgba(0xddcca7ff).into()), + element_active: Some(rgba(0xc9b99aff).into()), + element_selected: Some(rgba(0xc9b99aff).into()), + element_disabled: Some(rgba(0xecddb4ff).into()), + drop_target_background: Some(rgba(0x5f565080).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x494340ff).into()), - ghost_element_active: Some(rgba(0x5b524cff).into()), - ghost_element_selected: Some(rgba(0x5b524cff).into()), - ghost_element_disabled: Some(rgba(0x3a3735ff).into()), - text: Some(rgba(0xfbf1c7ff).into()), - text_muted: Some(rgba(0xc5b597ff).into()), - text_placeholder: Some(rgba(0x9a8c79ff).into()), - text_disabled: Some(rgba(0x9a8c79ff).into()), - text_accent: Some(rgba(0x83a598ff).into()), - icon: Some(rgba(0xfbf1c7ff).into()), - icon_muted: Some(rgba(0xc5b597ff).into()), - icon_disabled: Some(rgba(0x9a8c79ff).into()), - icon_placeholder: Some(rgba(0xc5b597ff).into()), - icon_accent: Some(rgba(0x83a598ff).into()), - status_bar_background: Some(rgba(0x4c4642ff).into()), - title_bar_background: Some(rgba(0x4c4642ff).into()), - toolbar_background: Some(rgba(0x282828ff).into()), - tab_bar_background: Some(rgba(0x3a3735ff).into()), - tab_inactive_background: Some(rgba(0x3a3735ff).into()), - tab_active_background: Some(rgba(0x282828ff).into()), - scrollbar_thumb_background: Some(rgba(0xfbf1c74c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x494340ff).into()), - scrollbar_thumb_border: Some(rgba(0x494340ff).into()), + ghost_element_hover: Some(rgba(0xddcca7ff).into()), + ghost_element_active: Some(rgba(0xc9b99aff).into()), + ghost_element_selected: Some(rgba(0xc9b99aff).into()), + ghost_element_disabled: Some(rgba(0xecddb4ff).into()), + text: Some(rgba(0x282828ff).into()), + text_muted: Some(rgba(0x5f5650ff).into()), + text_placeholder: Some(rgba(0x8a7c6fff).into()), + text_disabled: Some(rgba(0x8a7c6fff).into()), + text_accent: Some(rgba(0x0b6678ff).into()), + icon: Some(rgba(0x282828ff).into()), + icon_muted: Some(rgba(0x5f5650ff).into()), + icon_disabled: Some(rgba(0x8a7c6fff).into()), + icon_placeholder: Some(rgba(0x5f5650ff).into()), + icon_accent: Some(rgba(0x0b6678ff).into()), + status_bar_background: Some(rgba(0xd9c8a4ff).into()), + title_bar_background: Some(rgba(0xd9c8a4ff).into()), + toolbar_background: Some(rgba(0xfbf1c7ff).into()), + tab_bar_background: Some(rgba(0xecddb4ff).into()), + tab_inactive_background: Some(rgba(0xecddb4ff).into()), + tab_active_background: Some(rgba(0xfbf1c7ff).into()), + scrollbar_thumb_background: Some(rgba(0x2828284c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xddcca7ff).into()), + scrollbar_thumb_border: Some(rgba(0xddcca7ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x373432ff).into()), - editor_foreground: Some(rgba(0xebdbb2ff).into()), - editor_background: Some(rgba(0x282828ff).into()), - editor_gutter_background: Some(rgba(0x282828ff).into()), - editor_subheader_background: Some(rgba(0x3a3735ff).into()), - editor_active_line_background: Some(rgba(0x3a3735bf).into()), - editor_highlighted_line_background: Some(rgba(0x3a3735ff).into()), - editor_line_number: Some(rgba(0xfbf1c759).into()), - editor_active_line_number: Some(rgba(0xfbf1c7ff).into()), - editor_invisible: Some(rgba(0xc5b597ff).into()), - editor_wrap_guide: Some(rgba(0xfbf1c70d).into()), - editor_active_wrap_guide: Some(rgba(0xfbf1c71a).into()), - editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), + scrollbar_track_border: Some(rgba(0xefe1b8ff).into()), + editor_foreground: Some(rgba(0x282828ff).into()), + editor_background: Some(rgba(0xfbf1c7ff).into()), + editor_gutter_background: Some(rgba(0xfbf1c7ff).into()), + editor_subheader_background: Some(rgba(0xecddb4ff).into()), + editor_active_line_background: Some(rgba(0xecddb4bf).into()), + editor_highlighted_line_background: Some(rgba(0xecddb4ff).into()), + editor_line_number: Some(rgba(0x28282859).into()), + editor_active_line_number: Some(rgba(0x282828ff).into()), + editor_invisible: Some(rgba(0x5f5650ff).into()), + editor_wrap_guide: Some(rgba(0x2828280d).into()), + editor_active_wrap_guide: Some(rgba(0x2828281a).into()), + editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), - terminal_background: Some(rgba(0x282828ff).into()), - terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), - terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), - terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), - terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), - terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), - terminal_ansi_black: Some(rgba(0x282828ff).into()), - terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), - terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), - terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), - terminal_ansi_blue: Some(rgba(0x83a598ff).into()), - terminal_ansi_magenta: Some(rgba(0xa89984ff).into()), - terminal_ansi_cyan: Some(rgba(0x8ec07cff).into()), - terminal_ansi_white: Some(rgba(0xfbf1c7ff).into()), - link_text_hover: Some(rgba(0x83a598ff).into()), + terminal_background: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), + terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), + terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), + terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), + terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_ansi_black: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_red: Some(rgba(0x9d0408ff).into()), + terminal_ansi_green: Some(rgba(0x797410ff).into()), + terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), + terminal_ansi_blue: Some(rgba(0x0b6678ff).into()), + terminal_ansi_magenta: Some(rgba(0x7c6f64ff).into()), + terminal_ansi_cyan: Some(rgba(0x437b59ff).into()), + terminal_ansi_white: Some(rgba(0x282828ff).into()), + link_text_hover: Some(rgba(0x0b6678ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xf9bd30ff).into()), - conflict_background: Some(rgba(0x582f10ff).into()), - conflict_border: Some(rgba(0x754916ff).into()), - created: Some(rgba(0xb8bb27ff).into()), - created_background: Some(rgba(0x332b11ff).into()), - created_border: Some(rgba(0x4a4516ff).into()), - deleted: Some(rgba(0xfb4a35ff).into()), - deleted_background: Some(rgba(0x5a0a10ff).into()), - deleted_border: Some(rgba(0x771618ff).into()), - error: Some(rgba(0xfb4a35ff).into()), - error_background: Some(rgba(0x5a0a10ff).into()), - error_border: Some(rgba(0x771618ff).into()), - hidden: Some(rgba(0x9a8c79ff).into()), - hidden_background: Some(rgba(0x4c4642ff).into()), - hidden_border: Some(rgba(0x544c48ff).into()), - hint: Some(rgba(0x8d957eff).into()), - hint_background: Some(rgba(0x1e2321ff).into()), - hint_border: Some(rgba(0x303a36ff).into()), - ignored: Some(rgba(0xc5b597ff).into()), - ignored_background: Some(rgba(0x4c4642ff).into()), - ignored_border: Some(rgba(0x5b534dff).into()), - info: Some(rgba(0x83a598ff).into()), - info_background: Some(rgba(0x1e2321ff).into()), - info_border: Some(rgba(0x303a36ff).into()), - modified: Some(rgba(0xf9bd30ff).into()), - modified_background: Some(rgba(0x582f10ff).into()), - modified_border: Some(rgba(0x754916ff).into()), - predictive: Some(rgba(0x717363ff).into()), - predictive_background: Some(rgba(0x332b11ff).into()), - predictive_border: Some(rgba(0x4a4516ff).into()), - renamed: Some(rgba(0x83a598ff).into()), - renamed_background: Some(rgba(0x1e2321ff).into()), - renamed_border: Some(rgba(0x303a36ff).into()), - success: Some(rgba(0xb8bb27ff).into()), - success_background: Some(rgba(0x332b11ff).into()), - success_border: Some(rgba(0x4a4516ff).into()), - unreachable: Some(rgba(0xc5b597ff).into()), - unreachable_background: Some(rgba(0x4c4642ff).into()), - unreachable_border: Some(rgba(0x5b534dff).into()), - warning: Some(rgba(0xf9bd30ff).into()), - warning_background: Some(rgba(0x582f10ff).into()), - warning_border: Some(rgba(0x754916ff).into()), + conflict: Some(rgba(0xb57616ff).into()), + conflict_background: Some(rgba(0xf5e2d0ff).into()), + conflict_border: Some(rgba(0xebccabff).into()), + created: Some(rgba(0x797410ff).into()), + created_background: Some(rgba(0xe5e1ceff).into()), + created_border: Some(rgba(0xd1cba8ff).into()), + deleted: Some(rgba(0x9d0408ff).into()), + deleted_background: Some(rgba(0xf4d1c9ff).into()), + deleted_border: Some(rgba(0xe8ac9eff).into()), + error: Some(rgba(0x9d0408ff).into()), + error_background: Some(rgba(0xf4d1c9ff).into()), + error_border: Some(rgba(0xe8ac9eff).into()), + hidden: Some(rgba(0x8a7c6fff).into()), + hidden_background: Some(rgba(0xd9c8a4ff).into()), + hidden_border: Some(rgba(0xd1c09eff).into()), + hint: Some(rgba(0x677562ff).into()), + hint_background: Some(rgba(0xd2dee2ff).into()), + hint_border: Some(rgba(0xaec6cdff).into()), + ignored: Some(rgba(0x5f5650ff).into()), + ignored_background: Some(rgba(0xd9c8a4ff).into()), + ignored_border: Some(rgba(0xc9b99aff).into()), + info: Some(rgba(0x0b6678ff).into()), + info_background: Some(rgba(0xd2dee2ff).into()), + info_border: Some(rgba(0xaec6cdff).into()), + modified: Some(rgba(0xb57616ff).into()), + modified_background: Some(rgba(0xf5e2d0ff).into()), + modified_border: Some(rgba(0xebccabff).into()), + predictive: Some(rgba(0x7d9881ff).into()), + predictive_background: Some(rgba(0xe5e1ceff).into()), + predictive_border: Some(rgba(0xd1cba8ff).into()), + renamed: Some(rgba(0x0b6678ff).into()), + renamed_background: Some(rgba(0xd2dee2ff).into()), + renamed_border: Some(rgba(0xaec6cdff).into()), + success: Some(rgba(0x797410ff).into()), + success_background: Some(rgba(0xe5e1ceff).into()), + success_border: Some(rgba(0xd1cba8ff).into()), + unreachable: Some(rgba(0x5f5650ff).into()), + unreachable_background: Some(rgba(0xd9c8a4ff).into()), + unreachable_border: Some(rgba(0xc9b99aff).into()), + warning: Some(rgba(0xb57616ff).into()), + warning_background: Some(rgba(0xf5e2d0ff).into()), + warning_border: Some(rgba(0xebccabff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x83a598ff).into(), - background: rgba(0x83a598ff).into(), - selection: rgba(0x83a5983d).into(), + cursor: rgba(0x0b6678ff).into(), + background: rgba(0x0b6678ff).into(), + selection: rgba(0x0b66783d).into(), }, PlayerColor { - cursor: rgba(0xa89984ff).into(), - background: rgba(0xa89984ff).into(), - selection: rgba(0xa899843d).into(), + cursor: rgba(0x7c6f64ff).into(), + background: rgba(0x7c6f64ff).into(), + selection: rgba(0x7c6f643d).into(), }, PlayerColor { - cursor: rgba(0xfd801bff).into(), - background: rgba(0xfd801bff).into(), - selection: rgba(0xfd801b3d).into(), + cursor: rgba(0xaf3b05ff).into(), + background: rgba(0xaf3b05ff).into(), + selection: rgba(0xaf3b053d).into(), }, PlayerColor { - cursor: rgba(0xd3869bff).into(), - background: rgba(0xd3869bff).into(), - selection: rgba(0xd3869b3d).into(), + cursor: rgba(0x8f4071ff).into(), + background: rgba(0x8f4071ff).into(), + selection: rgba(0x8f40713d).into(), }, PlayerColor { - cursor: rgba(0x8ec07cff).into(), - background: rgba(0x8ec07cff).into(), - selection: rgba(0x8ec07c3d).into(), + cursor: rgba(0x437b59ff).into(), + background: rgba(0x437b59ff).into(), + selection: rgba(0x437b593d).into(), }, PlayerColor { - cursor: rgba(0xfb4a35ff).into(), - background: rgba(0xfb4a35ff).into(), - selection: rgba(0xfb4a353d).into(), + cursor: rgba(0x9d0408ff).into(), + background: rgba(0x9d0408ff).into(), + selection: rgba(0x9d04083d).into(), }, PlayerColor { - cursor: rgba(0xf9bd30ff).into(), - background: rgba(0xf9bd30ff).into(), - selection: rgba(0xf9bd303d).into(), + cursor: rgba(0xb57616ff).into(), + background: rgba(0xb57616ff).into(), + selection: rgba(0xb576163d).into(), }, PlayerColor { - cursor: rgba(0xb8bb27ff).into(), - background: rgba(0xb8bb27ff).into(), - selection: rgba(0xb8bb273d).into(), + cursor: rgba(0x797410ff).into(), + background: rgba(0x797410ff).into(), + selection: rgba(0x7974103d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -1540,63 +1540,63 @@ pub fn gruvbox() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0xa89984ff).into()), + color: Some(rgba(0x7c6f64ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0xc7b798ff).into()), + color: Some(rgba(0x5d544eff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0xfabd2fff).into()), + color: Some(rgba(0xb57614ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1604,28 +1604,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xfe8019ff).into()), + color: Some(rgba(0xaf3a03ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0xb8bb26ff).into()), + color: Some(rgba(0x79740eff).into()), ..Default::default() }, ), ( "function.builtin".into(), UserHighlightStyle { - color: Some(rgba(0xfb4934ff).into()), + color: Some(rgba(0x9d0006ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x8d957eff).into()), + color: Some(rgba(0x677562ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1633,21 +1633,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0xfb4934ff).into()), + color: Some(rgba(0x9d0006ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1655,28 +1655,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x717363ff).into()), + color: Some(rgba(0x7d9881ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1684,112 +1684,112 @@ pub fn gruvbox() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xfbf1c7ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xebdbb2ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xebdbb2ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xd5c4a1ff).into()), + color: Some(rgba(0x3c3836ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xa89984ff).into()), + color: Some(rgba(0x665c54ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xe5d5adff).into()), + color: Some(rgba(0x413d3aff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xebdbb2ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xe5d5adff).into()), + color: Some(rgba(0x413d3aff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xb8bb26ff).into()), + color: Some(rgba(0x79740eff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0xc7b798ff).into()), + color: Some(rgba(0x5d544eff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xfe8019ff).into()), + color: Some(rgba(0xaf3a03ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x076678ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xb8bb26ff).into()), + color: Some(rgba(0x79740eff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1797,21 +1797,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xfabd2fff).into()), + color: Some(rgba(0xb57614ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x076678ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), @@ -1820,7 +1820,7 @@ pub fn gruvbox() -> UserThemeFamily { }, }, UserTheme { - name: "Gruvbox Light Soft".into(), + name: "Gruvbox Light Hard".into(), appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { @@ -1830,21 +1830,21 @@ pub fn gruvbox() -> UserThemeFamily { border_selected: Some(rgba(0xaec6cdff).into()), border_transparent: Some(rgba(0x00000000).into()), border_disabled: Some(rgba(0xd1c09eff).into()), - elevated_surface_background: Some(rgba(0xecdcb3ff).into()), - surface_background: Some(rgba(0xecdcb3ff).into()), + elevated_surface_background: Some(rgba(0xecddb5ff).into()), + surface_background: Some(rgba(0xecddb5ff).into()), background: Some(rgba(0xd9c8a4ff).into()), - panel_background: Some(rgba(0xecdcb3ff).into()), - element_background: Some(rgba(0xecdcb3ff).into()), + panel_background: Some(rgba(0xecddb5ff).into()), + element_background: Some(rgba(0xecddb5ff).into()), element_hover: Some(rgba(0xddcca7ff).into()), element_active: Some(rgba(0xc9b99aff).into()), element_selected: Some(rgba(0xc9b99aff).into()), - element_disabled: Some(rgba(0xecdcb3ff).into()), + element_disabled: Some(rgba(0xecddb5ff).into()), drop_target_background: Some(rgba(0x5f565080).into()), ghost_element_background: Some(rgba(0x00000000).into()), ghost_element_hover: Some(rgba(0xddcca7ff).into()), ghost_element_active: Some(rgba(0xc9b99aff).into()), ghost_element_selected: Some(rgba(0xc9b99aff).into()), - ghost_element_disabled: Some(rgba(0xecdcb3ff).into()), + ghost_element_disabled: Some(rgba(0xecddb5ff).into()), text: Some(rgba(0x282828ff).into()), text_muted: Some(rgba(0x5f5650ff).into()), text_placeholder: Some(rgba(0x8a7c6fff).into()), @@ -1857,21 +1857,21 @@ pub fn gruvbox() -> UserThemeFamily { icon_accent: Some(rgba(0x0b6678ff).into()), status_bar_background: Some(rgba(0xd9c8a4ff).into()), title_bar_background: Some(rgba(0xd9c8a4ff).into()), - toolbar_background: Some(rgba(0xf2e5bcff).into()), - tab_bar_background: Some(rgba(0xecdcb3ff).into()), - tab_inactive_background: Some(rgba(0xecdcb3ff).into()), - tab_active_background: Some(rgba(0xf2e5bcff).into()), + toolbar_background: Some(rgba(0xf9f5d7ff).into()), + tab_bar_background: Some(rgba(0xecddb5ff).into()), + tab_inactive_background: Some(rgba(0xecddb5ff).into()), + tab_active_background: Some(rgba(0xf9f5d7ff).into()), scrollbar_thumb_background: Some(rgba(0x2828284c).into()), scrollbar_thumb_hover_background: Some(rgba(0xddcca7ff).into()), scrollbar_thumb_border: Some(rgba(0xddcca7ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xeddeb5ff).into()), + scrollbar_track_border: Some(rgba(0xefe2bcff).into()), editor_foreground: Some(rgba(0x282828ff).into()), - editor_background: Some(rgba(0xf2e5bcff).into()), - editor_gutter_background: Some(rgba(0xf2e5bcff).into()), - editor_subheader_background: Some(rgba(0xecdcb3ff).into()), - editor_active_line_background: Some(rgba(0xecdcb3bf).into()), - editor_highlighted_line_background: Some(rgba(0xecdcb3ff).into()), + editor_background: Some(rgba(0xf9f5d7ff).into()), + editor_gutter_background: Some(rgba(0xf9f5d7ff).into()), + editor_subheader_background: Some(rgba(0xecddb5ff).into()), + editor_active_line_background: Some(rgba(0xecddb5bf).into()), + editor_highlighted_line_background: Some(rgba(0xecddb5ff).into()), editor_line_number: Some(rgba(0x28282859).into()), editor_active_line_number: Some(rgba(0x282828ff).into()), editor_invisible: Some(rgba(0x5f5650ff).into()), @@ -1879,7 +1879,7 @@ pub fn gruvbox() -> UserThemeFamily { editor_active_wrap_guide: Some(rgba(0x2828281a).into()), editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), - terminal_background: Some(rgba(0xf2e5bcff).into()), + terminal_background: Some(rgba(0xf9f5d7ff).into()), terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), @@ -1888,7 +1888,7 @@ pub fn gruvbox() -> UserThemeFamily { terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), - terminal_ansi_black: Some(rgba(0xf2e5bcff).into()), + terminal_ansi_black: Some(rgba(0xf9f5d7ff).into()), terminal_ansi_red: Some(rgba(0x9d0408ff).into()), terminal_ansi_green: Some(rgba(0x797410ff).into()), terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), @@ -2271,170 +2271,170 @@ pub fn gruvbox() -> UserThemeFamily { }, }, UserTheme { - name: "Gruvbox Dark Hard".into(), - appearance: Appearance::Dark, + name: "Gruvbox Light Soft".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x5b534dff).into()), - border_variant: Some(rgba(0x494340ff).into()), - border_focused: Some(rgba(0x303a36ff).into()), - border_selected: Some(rgba(0x303a36ff).into()), + border: Some(rgba(0xc9b99aff).into()), + border_variant: Some(rgba(0xddcca7ff).into()), + border_focused: Some(rgba(0xaec6cdff).into()), + border_selected: Some(rgba(0xaec6cdff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x544c48ff).into()), - elevated_surface_background: Some(rgba(0x393634ff).into()), - surface_background: Some(rgba(0x393634ff).into()), - background: Some(rgba(0x4c4642ff).into()), - panel_background: Some(rgba(0x393634ff).into()), - element_background: Some(rgba(0x393634ff).into()), - element_hover: Some(rgba(0x494340ff).into()), - element_active: Some(rgba(0x5b524cff).into()), - element_selected: Some(rgba(0x5b524cff).into()), - element_disabled: Some(rgba(0x393634ff).into()), - drop_target_background: Some(rgba(0xc5b59780).into()), + border_disabled: Some(rgba(0xd1c09eff).into()), + elevated_surface_background: Some(rgba(0xecdcb3ff).into()), + surface_background: Some(rgba(0xecdcb3ff).into()), + background: Some(rgba(0xd9c8a4ff).into()), + panel_background: Some(rgba(0xecdcb3ff).into()), + element_background: Some(rgba(0xecdcb3ff).into()), + element_hover: Some(rgba(0xddcca7ff).into()), + element_active: Some(rgba(0xc9b99aff).into()), + element_selected: Some(rgba(0xc9b99aff).into()), + element_disabled: Some(rgba(0xecdcb3ff).into()), + drop_target_background: Some(rgba(0x5f565080).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x494340ff).into()), - ghost_element_active: Some(rgba(0x5b524cff).into()), - ghost_element_selected: Some(rgba(0x5b524cff).into()), - ghost_element_disabled: Some(rgba(0x393634ff).into()), - text: Some(rgba(0xfbf1c7ff).into()), - text_muted: Some(rgba(0xc5b597ff).into()), - text_placeholder: Some(rgba(0x9a8c79ff).into()), - text_disabled: Some(rgba(0x9a8c79ff).into()), - text_accent: Some(rgba(0x83a598ff).into()), - icon: Some(rgba(0xfbf1c7ff).into()), - icon_muted: Some(rgba(0xc5b597ff).into()), - icon_disabled: Some(rgba(0x9a8c79ff).into()), - icon_placeholder: Some(rgba(0xc5b597ff).into()), - icon_accent: Some(rgba(0x83a598ff).into()), - status_bar_background: Some(rgba(0x4c4642ff).into()), - title_bar_background: Some(rgba(0x4c4642ff).into()), - toolbar_background: Some(rgba(0x1d2021ff).into()), - tab_bar_background: Some(rgba(0x393634ff).into()), - tab_inactive_background: Some(rgba(0x393634ff).into()), - tab_active_background: Some(rgba(0x1d2021ff).into()), - scrollbar_thumb_background: Some(rgba(0xfbf1c74c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x494340ff).into()), - scrollbar_thumb_border: Some(rgba(0x494340ff).into()), + ghost_element_hover: Some(rgba(0xddcca7ff).into()), + ghost_element_active: Some(rgba(0xc9b99aff).into()), + ghost_element_selected: Some(rgba(0xc9b99aff).into()), + ghost_element_disabled: Some(rgba(0xecdcb3ff).into()), + text: Some(rgba(0x282828ff).into()), + text_muted: Some(rgba(0x5f5650ff).into()), + text_placeholder: Some(rgba(0x8a7c6fff).into()), + text_disabled: Some(rgba(0x8a7c6fff).into()), + text_accent: Some(rgba(0x0b6678ff).into()), + icon: Some(rgba(0x282828ff).into()), + icon_muted: Some(rgba(0x5f5650ff).into()), + icon_disabled: Some(rgba(0x8a7c6fff).into()), + icon_placeholder: Some(rgba(0x5f5650ff).into()), + icon_accent: Some(rgba(0x0b6678ff).into()), + status_bar_background: Some(rgba(0xd9c8a4ff).into()), + title_bar_background: Some(rgba(0xd9c8a4ff).into()), + toolbar_background: Some(rgba(0xf2e5bcff).into()), + tab_bar_background: Some(rgba(0xecdcb3ff).into()), + tab_inactive_background: Some(rgba(0xecdcb3ff).into()), + tab_active_background: Some(rgba(0xf2e5bcff).into()), + scrollbar_thumb_background: Some(rgba(0x2828284c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xddcca7ff).into()), + scrollbar_thumb_border: Some(rgba(0xddcca7ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x343130ff).into()), - editor_foreground: Some(rgba(0xebdbb2ff).into()), - editor_background: Some(rgba(0x1d2021ff).into()), - editor_gutter_background: Some(rgba(0x1d2021ff).into()), - editor_subheader_background: Some(rgba(0x393634ff).into()), - editor_active_line_background: Some(rgba(0x393634bf).into()), - editor_highlighted_line_background: Some(rgba(0x393634ff).into()), - editor_line_number: Some(rgba(0xfbf1c759).into()), - editor_active_line_number: Some(rgba(0xfbf1c7ff).into()), - editor_invisible: Some(rgba(0xc5b597ff).into()), - editor_wrap_guide: Some(rgba(0xfbf1c70d).into()), - editor_active_wrap_guide: Some(rgba(0xfbf1c71a).into()), - editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), + scrollbar_track_border: Some(rgba(0xeddeb5ff).into()), + editor_foreground: Some(rgba(0x282828ff).into()), + editor_background: Some(rgba(0xf2e5bcff).into()), + editor_gutter_background: Some(rgba(0xf2e5bcff).into()), + editor_subheader_background: Some(rgba(0xecdcb3ff).into()), + editor_active_line_background: Some(rgba(0xecdcb3bf).into()), + editor_highlighted_line_background: Some(rgba(0xecdcb3ff).into()), + editor_line_number: Some(rgba(0x28282859).into()), + editor_active_line_number: Some(rgba(0x282828ff).into()), + editor_invisible: Some(rgba(0x5f5650ff).into()), + editor_wrap_guide: Some(rgba(0x2828280d).into()), + editor_active_wrap_guide: Some(rgba(0x2828281a).into()), + editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), - terminal_background: Some(rgba(0x1d2021ff).into()), - terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), - terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), - terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), - terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), - terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), - terminal_ansi_black: Some(rgba(0x1d2021ff).into()), - terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), - terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), - terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), - terminal_ansi_blue: Some(rgba(0x83a598ff).into()), - terminal_ansi_magenta: Some(rgba(0xa89984ff).into()), - terminal_ansi_cyan: Some(rgba(0x8ec07cff).into()), - terminal_ansi_white: Some(rgba(0xfbf1c7ff).into()), - link_text_hover: Some(rgba(0x83a598ff).into()), + terminal_background: Some(rgba(0xf2e5bcff).into()), + terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), + terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), + terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), + terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), + terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_ansi_black: Some(rgba(0xf2e5bcff).into()), + terminal_ansi_red: Some(rgba(0x9d0408ff).into()), + terminal_ansi_green: Some(rgba(0x797410ff).into()), + terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), + terminal_ansi_blue: Some(rgba(0x0b6678ff).into()), + terminal_ansi_magenta: Some(rgba(0x7c6f64ff).into()), + terminal_ansi_cyan: Some(rgba(0x437b59ff).into()), + terminal_ansi_white: Some(rgba(0x282828ff).into()), + link_text_hover: Some(rgba(0x0b6678ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xf9bd30ff).into()), - conflict_background: Some(rgba(0x582f10ff).into()), - conflict_border: Some(rgba(0x754916ff).into()), - created: Some(rgba(0xb8bb27ff).into()), - created_background: Some(rgba(0x332b11ff).into()), - created_border: Some(rgba(0x4a4516ff).into()), - deleted: Some(rgba(0xfb4a35ff).into()), - deleted_background: Some(rgba(0x5a0a10ff).into()), - deleted_border: Some(rgba(0x771618ff).into()), - error: Some(rgba(0xfb4a35ff).into()), - error_background: Some(rgba(0x5a0a10ff).into()), - error_border: Some(rgba(0x771618ff).into()), - hidden: Some(rgba(0x9a8c79ff).into()), - hidden_background: Some(rgba(0x4c4642ff).into()), - hidden_border: Some(rgba(0x544c48ff).into()), - hint: Some(rgba(0x8d957eff).into()), - hint_background: Some(rgba(0x1e2321ff).into()), - hint_border: Some(rgba(0x303a36ff).into()), - ignored: Some(rgba(0xc5b597ff).into()), - ignored_background: Some(rgba(0x4c4642ff).into()), - ignored_border: Some(rgba(0x5b534dff).into()), - info: Some(rgba(0x83a598ff).into()), - info_background: Some(rgba(0x1e2321ff).into()), - info_border: Some(rgba(0x303a36ff).into()), - modified: Some(rgba(0xf9bd30ff).into()), - modified_background: Some(rgba(0x582f10ff).into()), - modified_border: Some(rgba(0x754916ff).into()), - predictive: Some(rgba(0x717363ff).into()), - predictive_background: Some(rgba(0x332b11ff).into()), - predictive_border: Some(rgba(0x4a4516ff).into()), - renamed: Some(rgba(0x83a598ff).into()), - renamed_background: Some(rgba(0x1e2321ff).into()), - renamed_border: Some(rgba(0x303a36ff).into()), - success: Some(rgba(0xb8bb27ff).into()), - success_background: Some(rgba(0x332b11ff).into()), - success_border: Some(rgba(0x4a4516ff).into()), - unreachable: Some(rgba(0xc5b597ff).into()), - unreachable_background: Some(rgba(0x4c4642ff).into()), - unreachable_border: Some(rgba(0x5b534dff).into()), - warning: Some(rgba(0xf9bd30ff).into()), - warning_background: Some(rgba(0x582f10ff).into()), - warning_border: Some(rgba(0x754916ff).into()), + conflict: Some(rgba(0xb57616ff).into()), + conflict_background: Some(rgba(0xf5e2d0ff).into()), + conflict_border: Some(rgba(0xebccabff).into()), + created: Some(rgba(0x797410ff).into()), + created_background: Some(rgba(0xe5e1ceff).into()), + created_border: Some(rgba(0xd1cba8ff).into()), + deleted: Some(rgba(0x9d0408ff).into()), + deleted_background: Some(rgba(0xf4d1c9ff).into()), + deleted_border: Some(rgba(0xe8ac9eff).into()), + error: Some(rgba(0x9d0408ff).into()), + error_background: Some(rgba(0xf4d1c9ff).into()), + error_border: Some(rgba(0xe8ac9eff).into()), + hidden: Some(rgba(0x8a7c6fff).into()), + hidden_background: Some(rgba(0xd9c8a4ff).into()), + hidden_border: Some(rgba(0xd1c09eff).into()), + hint: Some(rgba(0x677562ff).into()), + hint_background: Some(rgba(0xd2dee2ff).into()), + hint_border: Some(rgba(0xaec6cdff).into()), + ignored: Some(rgba(0x5f5650ff).into()), + ignored_background: Some(rgba(0xd9c8a4ff).into()), + ignored_border: Some(rgba(0xc9b99aff).into()), + info: Some(rgba(0x0b6678ff).into()), + info_background: Some(rgba(0xd2dee2ff).into()), + info_border: Some(rgba(0xaec6cdff).into()), + modified: Some(rgba(0xb57616ff).into()), + modified_background: Some(rgba(0xf5e2d0ff).into()), + modified_border: Some(rgba(0xebccabff).into()), + predictive: Some(rgba(0x7d9881ff).into()), + predictive_background: Some(rgba(0xe5e1ceff).into()), + predictive_border: Some(rgba(0xd1cba8ff).into()), + renamed: Some(rgba(0x0b6678ff).into()), + renamed_background: Some(rgba(0xd2dee2ff).into()), + renamed_border: Some(rgba(0xaec6cdff).into()), + success: Some(rgba(0x797410ff).into()), + success_background: Some(rgba(0xe5e1ceff).into()), + success_border: Some(rgba(0xd1cba8ff).into()), + unreachable: Some(rgba(0x5f5650ff).into()), + unreachable_background: Some(rgba(0xd9c8a4ff).into()), + unreachable_border: Some(rgba(0xc9b99aff).into()), + warning: Some(rgba(0xb57616ff).into()), + warning_background: Some(rgba(0xf5e2d0ff).into()), + warning_border: Some(rgba(0xebccabff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x83a598ff).into(), - background: rgba(0x83a598ff).into(), - selection: rgba(0x83a5983d).into(), + cursor: rgba(0x0b6678ff).into(), + background: rgba(0x0b6678ff).into(), + selection: rgba(0x0b66783d).into(), }, PlayerColor { - cursor: rgba(0xa89984ff).into(), - background: rgba(0xa89984ff).into(), - selection: rgba(0xa899843d).into(), + cursor: rgba(0x7c6f64ff).into(), + background: rgba(0x7c6f64ff).into(), + selection: rgba(0x7c6f643d).into(), }, PlayerColor { - cursor: rgba(0xfd801bff).into(), - background: rgba(0xfd801bff).into(), - selection: rgba(0xfd801b3d).into(), + cursor: rgba(0xaf3b05ff).into(), + background: rgba(0xaf3b05ff).into(), + selection: rgba(0xaf3b053d).into(), }, PlayerColor { - cursor: rgba(0xd3869bff).into(), - background: rgba(0xd3869bff).into(), - selection: rgba(0xd3869b3d).into(), + cursor: rgba(0x8f4071ff).into(), + background: rgba(0x8f4071ff).into(), + selection: rgba(0x8f40713d).into(), }, PlayerColor { - cursor: rgba(0x8ec07cff).into(), - background: rgba(0x8ec07cff).into(), - selection: rgba(0x8ec07c3d).into(), + cursor: rgba(0x437b59ff).into(), + background: rgba(0x437b59ff).into(), + selection: rgba(0x437b593d).into(), }, PlayerColor { - cursor: rgba(0xfb4a35ff).into(), - background: rgba(0xfb4a35ff).into(), - selection: rgba(0xfb4a353d).into(), + cursor: rgba(0x9d0408ff).into(), + background: rgba(0x9d0408ff).into(), + selection: rgba(0x9d04083d).into(), }, PlayerColor { - cursor: rgba(0xf9bd30ff).into(), - background: rgba(0xf9bd30ff).into(), - selection: rgba(0xf9bd303d).into(), + cursor: rgba(0xb57616ff).into(), + background: rgba(0xb57616ff).into(), + selection: rgba(0xb576163d).into(), }, PlayerColor { - cursor: rgba(0xb8bb27ff).into(), - background: rgba(0xb8bb27ff).into(), - selection: rgba(0xb8bb273d).into(), + cursor: rgba(0x797410ff).into(), + background: rgba(0x797410ff).into(), + selection: rgba(0x7974103d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -2442,63 +2442,63 @@ pub fn gruvbox() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0xa89984ff).into()), + color: Some(rgba(0x7c6f64ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0xc7b798ff).into()), + color: Some(rgba(0x5d544eff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0xfabd2fff).into()), + color: Some(rgba(0xb57614ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -2506,28 +2506,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xfe8019ff).into()), + color: Some(rgba(0xaf3a03ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0xb8bb26ff).into()), + color: Some(rgba(0x79740eff).into()), ..Default::default() }, ), ( "function.builtin".into(), UserHighlightStyle { - color: Some(rgba(0xfb4934ff).into()), + color: Some(rgba(0x9d0006ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x8d957eff).into()), + color: Some(rgba(0x677562ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -2535,21 +2535,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0xfb4934ff).into()), + color: Some(rgba(0x9d0006ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -2557,28 +2557,28 @@ pub fn gruvbox() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x717363ff).into()), + color: Some(rgba(0x7d9881ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -2586,112 +2586,112 @@ pub fn gruvbox() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xfbf1c7ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xebdbb2ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xebdbb2ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xd5c4a1ff).into()), + color: Some(rgba(0x3c3836ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xa89984ff).into()), + color: Some(rgba(0x665c54ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xe5d5adff).into()), + color: Some(rgba(0x413d3aff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xebdbb2ff).into()), + color: Some(rgba(0x282828ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xe5d5adff).into()), + color: Some(rgba(0x413d3aff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xb8bb26ff).into()), + color: Some(rgba(0x79740eff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0xc7b798ff).into()), + color: Some(rgba(0x5d544eff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xfe8019ff).into()), + color: Some(rgba(0xaf3a03ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xd3869bff).into()), + color: Some(rgba(0x8f3f71ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x8ec07cff).into()), + color: Some(rgba(0x427b58ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x076678ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xb8bb26ff).into()), + color: Some(rgba(0x79740eff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -2699,21 +2699,21 @@ pub fn gruvbox() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0xfabd2fff).into()), + color: Some(rgba(0xb57614ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x076678ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x83a598ff).into()), + color: Some(rgba(0x0b6678ff).into()), ..Default::default() }, ), diff --git a/crates/theme/src/themes/one.rs b/crates/theme/src/themes/one.rs index c941fb294ddb32fd5638ee1ff92fe7a080121d4b..3c8eb1085f0380bdc2df70acb6f5cb5472c88af0 100644 --- a/crates/theme/src/themes/one.rs +++ b/crates/theme/src/themes/one.rs @@ -16,160 +16,160 @@ pub fn one() -> UserThemeFamily { author: "Zed Industries".into(), themes: vec![ UserTheme { - name: "One Light".into(), - appearance: Appearance::Light, + name: "One Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0xc9c9caff).into()), - border_variant: Some(rgba(0xdfdfe0ff).into()), - border_focused: Some(rgba(0xcbcdf6ff).into()), - border_selected: Some(rgba(0xcbcdf6ff).into()), + border: Some(rgba(0x464b57ff).into()), + border_variant: Some(rgba(0x363c46ff).into()), + border_focused: Some(rgba(0x293c5bff).into()), + border_selected: Some(rgba(0x293c5bff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xd3d3d4ff).into()), - elevated_surface_background: Some(rgba(0xebebecff).into()), - surface_background: Some(rgba(0xebebecff).into()), - background: Some(rgba(0xdcdcddff).into()), - panel_background: Some(rgba(0xebebecff).into()), - element_background: Some(rgba(0xebebecff).into()), - element_hover: Some(rgba(0xdfdfe0ff).into()), - element_active: Some(rgba(0xcacacaff).into()), - element_selected: Some(rgba(0xcacacaff).into()), - element_disabled: Some(rgba(0xebebecff).into()), - drop_target_background: Some(rgba(0x7f818880).into()), + border_disabled: Some(rgba(0x414754ff).into()), + elevated_surface_background: Some(rgba(0x2f343eff).into()), + surface_background: Some(rgba(0x2f343eff).into()), + background: Some(rgba(0x3b414dff).into()), + panel_background: Some(rgba(0x2f343eff).into()), + element_background: Some(rgba(0x2f343eff).into()), + element_hover: Some(rgba(0x363c46ff).into()), + element_active: Some(rgba(0x454a56ff).into()), + element_selected: Some(rgba(0x454a56ff).into()), + element_disabled: Some(rgba(0x2f343eff).into()), + drop_target_background: Some(rgba(0x83899480).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xdfdfe0ff).into()), - ghost_element_active: Some(rgba(0xcacacaff).into()), - ghost_element_selected: Some(rgba(0xcacacaff).into()), - ghost_element_disabled: Some(rgba(0xebebecff).into()), - text: Some(rgba(0x383a41ff).into()), - text_muted: Some(rgba(0x7f8188ff).into()), - text_placeholder: Some(rgba(0xa1a1a3ff).into()), - text_disabled: Some(rgba(0xa1a1a3ff).into()), - text_accent: Some(rgba(0x5c79e2ff).into()), - icon: Some(rgba(0x383a41ff).into()), - icon_muted: Some(rgba(0x7f8188ff).into()), - icon_disabled: Some(rgba(0xa1a1a3ff).into()), - icon_placeholder: Some(rgba(0x7f8188ff).into()), - icon_accent: Some(rgba(0x5c79e2ff).into()), - status_bar_background: Some(rgba(0xdcdcddff).into()), - title_bar_background: Some(rgba(0xdcdcddff).into()), - toolbar_background: Some(rgba(0xfafafaff).into()), - tab_bar_background: Some(rgba(0xebebecff).into()), - tab_inactive_background: Some(rgba(0xebebecff).into()), - tab_active_background: Some(rgba(0xfafafaff).into()), - scrollbar_thumb_background: Some(rgba(0x383a414c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xdfdfe0ff).into()), - scrollbar_thumb_border: Some(rgba(0xdfdfe0ff).into()), + ghost_element_hover: Some(rgba(0x363c46ff).into()), + ghost_element_active: Some(rgba(0x454a56ff).into()), + ghost_element_selected: Some(rgba(0x454a56ff).into()), + ghost_element_disabled: Some(rgba(0x2f343eff).into()), + text: Some(rgba(0xc8ccd4ff).into()), + text_muted: Some(rgba(0x838994ff).into()), + text_placeholder: Some(rgba(0x555a63ff).into()), + text_disabled: Some(rgba(0x555a63ff).into()), + text_accent: Some(rgba(0x74ade8ff).into()), + icon: Some(rgba(0xc8ccd4ff).into()), + icon_muted: Some(rgba(0x838994ff).into()), + icon_disabled: Some(rgba(0x555a63ff).into()), + icon_placeholder: Some(rgba(0x838994ff).into()), + icon_accent: Some(rgba(0x74ade8ff).into()), + status_bar_background: Some(rgba(0x3b414dff).into()), + title_bar_background: Some(rgba(0x3b414dff).into()), + toolbar_background: Some(rgba(0x282c34ff).into()), + tab_bar_background: Some(rgba(0x2f343eff).into()), + tab_inactive_background: Some(rgba(0x2f343eff).into()), + tab_active_background: Some(rgba(0x282c34ff).into()), + scrollbar_thumb_background: Some(rgba(0xc8ccd44c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x363c46ff).into()), + scrollbar_thumb_border: Some(rgba(0x363c46ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xeeeeeeff).into()), - editor_foreground: Some(rgba(0x383a41ff).into()), - editor_background: Some(rgba(0xfafafaff).into()), - editor_gutter_background: Some(rgba(0xfafafaff).into()), - editor_subheader_background: Some(rgba(0xebebecff).into()), - editor_active_line_background: Some(rgba(0xebebecbf).into()), - editor_highlighted_line_background: Some(rgba(0xebebecff).into()), - editor_line_number: Some(rgba(0x383a4159).into()), - editor_active_line_number: Some(rgba(0x383a41ff).into()), - editor_invisible: Some(rgba(0x7f8188ff).into()), - editor_wrap_guide: Some(rgba(0x383a410d).into()), - editor_active_wrap_guide: Some(rgba(0x383a411a).into()), - editor_document_highlight_read_background: Some(rgba(0x5c79e21a).into()), - editor_document_highlight_write_background: Some(rgba(0xa3a3a466).into()), - terminal_background: Some(rgba(0xfafafaff).into()), - terminal_ansi_bright_black: Some(rgba(0xaaaaaaff).into()), - terminal_ansi_bright_red: Some(rgba(0xf0b0a4ff).into()), - terminal_ansi_bright_green: Some(rgba(0xb2cfa9ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xf1dfc1ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb5baf2ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xcea6d3ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa4bfdbff).into()), - terminal_ansi_bright_white: Some(rgba(0x383a41ff).into()), - terminal_ansi_black: Some(rgba(0xfafafaff).into()), - terminal_ansi_red: Some(rgba(0xd36151ff).into()), - terminal_ansi_green: Some(rgba(0x669f59ff).into()), + scrollbar_track_border: Some(rgba(0x2e333cff).into()), + editor_foreground: Some(rgba(0xacb2beff).into()), + editor_background: Some(rgba(0x282c34ff).into()), + editor_gutter_background: Some(rgba(0x282c34ff).into()), + editor_subheader_background: Some(rgba(0x2f343eff).into()), + editor_active_line_background: Some(rgba(0x2f343ebf).into()), + editor_highlighted_line_background: Some(rgba(0x2f343eff).into()), + editor_line_number: Some(rgba(0xc8ccd459).into()), + editor_active_line_number: Some(rgba(0xc8ccd4ff).into()), + editor_invisible: Some(rgba(0x838994ff).into()), + editor_wrap_guide: Some(rgba(0xc8ccd40d).into()), + editor_active_wrap_guide: Some(rgba(0xc8ccd41a).into()), + editor_document_highlight_read_background: Some(rgba(0x74ade81a).into()), + editor_document_highlight_write_background: Some(rgba(0x555a6366).into()), + terminal_background: Some(rgba(0x282c34ff).into()), + terminal_ansi_bright_black: Some(rgba(0x525661ff).into()), + terminal_ansi_bright_red: Some(rgba(0x673a3cff).into()), + terminal_ansi_bright_green: Some(rgba(0x4d6140ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x786441ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x385378ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x5e2b26ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x3a565bff).into()), + terminal_ansi_bright_white: Some(rgba(0xc8ccd4ff).into()), + terminal_ansi_black: Some(rgba(0x282c34ff).into()), + terminal_ansi_red: Some(rgba(0xd07277ff).into()), + terminal_ansi_green: Some(rgba(0xa1c181ff).into()), terminal_ansi_yellow: Some(rgba(0xdec184ff).into()), - terminal_ansi_blue: Some(rgba(0x5c79e2ff).into()), - terminal_ansi_magenta: Some(rgba(0x994fa6ff).into()), - terminal_ansi_cyan: Some(rgba(0x3b82b7ff).into()), - terminal_ansi_white: Some(rgba(0x383a41ff).into()), - link_text_hover: Some(rgba(0x5c79e2ff).into()), + terminal_ansi_blue: Some(rgba(0x74ade8ff).into()), + terminal_ansi_magenta: Some(rgba(0xbe5046ff).into()), + terminal_ansi_cyan: Some(rgba(0x6fb4c0ff).into()), + terminal_ansi_white: Some(rgba(0xc8ccd4ff).into()), + link_text_hover: Some(rgba(0x74ade8ff).into()), ..Default::default() }, status: StatusColorsRefinement { conflict: Some(rgba(0xdec184ff).into()), - conflict_background: Some(rgba(0xfaf2e6ff).into()), - conflict_border: Some(rgba(0xf5e8d2ff).into()), - created: Some(rgba(0x669f59ff).into()), - created_background: Some(rgba(0xe0ebdcff).into()), - created_border: Some(rgba(0xc8dcc1ff).into()), - deleted: Some(rgba(0xd36151ff).into()), - deleted_background: Some(rgba(0xfbdfd9ff).into()), - deleted_border: Some(rgba(0xf6c6bdff).into()), - error: Some(rgba(0xd36151ff).into()), - error_background: Some(rgba(0xfbdfd9ff).into()), - error_border: Some(rgba(0xf6c6bdff).into()), - hidden: Some(rgba(0xa1a1a3ff).into()), - hidden_background: Some(rgba(0xdcdcddff).into()), - hidden_border: Some(rgba(0xd3d3d4ff).into()), - hint: Some(rgba(0x9295beff).into()), - hint_background: Some(rgba(0xe2e2faff).into()), - hint_border: Some(rgba(0xcbcdf6ff).into()), - ignored: Some(rgba(0x7f8188ff).into()), - ignored_background: Some(rgba(0xdcdcddff).into()), - ignored_border: Some(rgba(0xc9c9caff).into()), - info: Some(rgba(0x5c79e2ff).into()), - info_background: Some(rgba(0xe2e2faff).into()), - info_border: Some(rgba(0xcbcdf6ff).into()), + conflict_background: Some(rgba(0x41331dff).into()), + conflict_border: Some(rgba(0x5d4c2fff).into()), + created: Some(rgba(0xa1c181ff).into()), + created_background: Some(rgba(0x222e1dff).into()), + created_border: Some(rgba(0x38482fff).into()), + deleted: Some(rgba(0xd07277ff).into()), + deleted_background: Some(rgba(0x301b1cff).into()), + deleted_border: Some(rgba(0x4c2b2cff).into()), + error: Some(rgba(0xd07277ff).into()), + error_background: Some(rgba(0x301b1cff).into()), + error_border: Some(rgba(0x4c2b2cff).into()), + hidden: Some(rgba(0x555a63ff).into()), + hidden_background: Some(rgba(0x3b414dff).into()), + hidden_border: Some(rgba(0x414754ff).into()), + hint: Some(rgba(0x5b708aff).into()), + hint_background: Some(rgba(0x18243dff).into()), + hint_border: Some(rgba(0x293c5bff).into()), + ignored: Some(rgba(0x838994ff).into()), + ignored_background: Some(rgba(0x3b414dff).into()), + ignored_border: Some(rgba(0x464b57ff).into()), + info: Some(rgba(0x74ade8ff).into()), + info_background: Some(rgba(0x18243dff).into()), + info_border: Some(rgba(0x293c5bff).into()), modified: Some(rgba(0xdec184ff).into()), - modified_background: Some(rgba(0xfaf2e6ff).into()), - modified_border: Some(rgba(0xf5e8d2ff).into()), - predictive: Some(rgba(0x9c9fc7ff).into()), - predictive_background: Some(rgba(0xe0ebdcff).into()), - predictive_border: Some(rgba(0xc8dcc1ff).into()), - renamed: Some(rgba(0x5c79e2ff).into()), - renamed_background: Some(rgba(0xe2e2faff).into()), - renamed_border: Some(rgba(0xcbcdf6ff).into()), - success: Some(rgba(0x669f59ff).into()), - success_background: Some(rgba(0xe0ebdcff).into()), - success_border: Some(rgba(0xc8dcc1ff).into()), - unreachable: Some(rgba(0x7f8188ff).into()), - unreachable_background: Some(rgba(0xdcdcddff).into()), - unreachable_border: Some(rgba(0xc9c9caff).into()), + modified_background: Some(rgba(0x41331dff).into()), + modified_border: Some(rgba(0x5d4c2fff).into()), + predictive: Some(rgba(0x5b6b88ff).into()), + predictive_background: Some(rgba(0x222e1dff).into()), + predictive_border: Some(rgba(0x38482fff).into()), + renamed: Some(rgba(0x74ade8ff).into()), + renamed_background: Some(rgba(0x18243dff).into()), + renamed_border: Some(rgba(0x293c5bff).into()), + success: Some(rgba(0xa1c181ff).into()), + success_background: Some(rgba(0x222e1dff).into()), + success_border: Some(rgba(0x38482fff).into()), + unreachable: Some(rgba(0x838994ff).into()), + unreachable_background: Some(rgba(0x3b414dff).into()), + unreachable_border: Some(rgba(0x464b57ff).into()), warning: Some(rgba(0xdec184ff).into()), - warning_background: Some(rgba(0xfaf2e6ff).into()), - warning_border: Some(rgba(0xf5e8d2ff).into()), + warning_background: Some(rgba(0x41331dff).into()), + warning_border: Some(rgba(0x5d4c2fff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x5c79e2ff).into(), - background: rgba(0x5c79e2ff).into(), - selection: rgba(0x5c79e23d).into(), + cursor: rgba(0x74ade8ff).into(), + background: rgba(0x74ade8ff).into(), + selection: rgba(0x74ade83d).into(), }, PlayerColor { - cursor: rgba(0x994fa6ff).into(), - background: rgba(0x994fa6ff).into(), - selection: rgba(0x994fa63d).into(), + cursor: rgba(0xbe5046ff).into(), + background: rgba(0xbe5046ff).into(), + selection: rgba(0xbe50463d).into(), }, PlayerColor { - cursor: rgba(0xad6f27ff).into(), - background: rgba(0xad6f27ff).into(), - selection: rgba(0xad6f273d).into(), + cursor: rgba(0xc0966bff).into(), + background: rgba(0xc0966bff).into(), + selection: rgba(0xc0966b3d).into(), }, PlayerColor { - cursor: rgba(0xa44aabff).into(), - background: rgba(0xa44aabff).into(), - selection: rgba(0xa44aab3d).into(), + cursor: rgba(0xb478cfff).into(), + background: rgba(0xb478cfff).into(), + selection: rgba(0xb478cf3d).into(), }, PlayerColor { - cursor: rgba(0x3b82b7ff).into(), - background: rgba(0x3b82b7ff).into(), - selection: rgba(0x3b82b73d).into(), + cursor: rgba(0x6fb4c0ff).into(), + background: rgba(0x6fb4c0ff).into(), + selection: rgba(0x6fb4c03d).into(), }, PlayerColor { - cursor: rgba(0xd36151ff).into(), - background: rgba(0xd36151ff).into(), - selection: rgba(0xd361513d).into(), + cursor: rgba(0xd07277ff).into(), + background: rgba(0xd07277ff).into(), + selection: rgba(0xd072773d).into(), }, PlayerColor { cursor: rgba(0xdec184ff).into(), @@ -177,9 +177,9 @@ pub fn one() -> UserThemeFamily { selection: rgba(0xdec1843d).into(), }, PlayerColor { - cursor: rgba(0x669f59ff).into(), - background: rgba(0x669f59ff).into(), - selection: rgba(0x669f593d).into(), + cursor: rgba(0xa1c181ff).into(), + background: rgba(0xa1c181ff).into(), + selection: rgba(0xa1c1813d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -187,63 +187,63 @@ pub fn one() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x5c79e2ff).into()), + color: Some(rgba(0x74ade8ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xad6f26ff).into()), + color: Some(rgba(0xc0966bff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0xa2a3a7ff).into()), + color: Some(rgba(0x5d636fff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x7c7e86ff).into()), + color: Some(rgba(0x878e98ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x669f59ff).into()), + color: Some(rgba(0xdfc184ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x5c79e2ff).into()), + color: Some(rgba(0x74ade9ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x383a41ff).into()), + color: Some(rgba(0xc8ccd4ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x5c79e2ff).into()), + color: Some(rgba(0x74ade8ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0xad6f26ff).into()), + color: Some(rgba(0xc0966bff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -251,21 +251,21 @@ pub fn one() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xd36050ff).into()), + color: Some(rgba(0xd07277ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x5b79e3ff).into()), + color: Some(rgba(0x74ade9ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x9295beff).into()), + color: Some(rgba(0x5b708aff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -273,50 +273,50 @@ pub fn one() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0xa449abff).into()), + color: Some(rgba(0xb478cfff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x5c79e2ff).into()), + color: Some(rgba(0x74ade8ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x5b79e3ff).into()), - font_style: Some(UserFontStyle::Italic), + color: Some(rgba(0x74ade9ff).into()), + font_style: Some(UserFontStyle::Normal), ..Default::default() }, ), ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x3982b7ff).into()), + color: Some(rgba(0x6fb4c0ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xad6f26ff).into()), + color: Some(rgba(0xc0966bff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x3982b7ff).into()), + color: Some(rgba(0x6fb4c0ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x9c9fc7ff).into()), + color: Some(rgba(0x5b6b88ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -324,112 +324,112 @@ pub fn one() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x383a41ff).into()), + color: Some(rgba(0xc8ccd4ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x383a41ff).into()), + color: Some(rgba(0xacb2beff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xd36050ff).into()), + color: Some(rgba(0xd07277ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x383a41ff).into()), + color: Some(rgba(0xacb2beff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x4d4f52ff).into()), + color: Some(rgba(0xb2b9c6ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x4d4f52ff).into()), + color: Some(rgba(0xb2b9c6ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xd36050ff).into()), + color: Some(rgba(0xd07277ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xb92c46ff).into()), + color: Some(rgba(0xb1574bff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0x659f58ff).into()), + color: Some(rgba(0xa1c181ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x7c7e86ff).into()), + color: Some(rgba(0x878e98ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xad6f27ff).into()), + color: Some(rgba(0xc0966bff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xad6f27ff).into()), + color: Some(rgba(0xc0966bff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0xad6f27ff).into()), + color: Some(rgba(0xc0966bff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x5c79e2ff).into()), + color: Some(rgba(0x74ade8ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x659f58ff).into()), + color: Some(rgba(0xa1c181ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xd36050ff).into()), + color: Some(rgba(0xd07277ff).into()), font_weight: Some(UserFontWeight(400.0)), ..Default::default() }, @@ -437,28 +437,28 @@ pub fn one() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0x3982b7ff).into()), + color: Some(rgba(0x6fb4c0ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x383a41ff).into()), + color: Some(rgba(0xc8ccd4ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0xad6f26ff).into()), + color: Some(rgba(0xc0966bff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x5b79e3ff).into()), + color: Some(rgba(0x74ade9ff).into()), ..Default::default() }, ), @@ -467,160 +467,160 @@ pub fn one() -> UserThemeFamily { }, }, UserTheme { - name: "One Dark".into(), - appearance: Appearance::Dark, + name: "One Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x464b57ff).into()), - border_variant: Some(rgba(0x363c46ff).into()), - border_focused: Some(rgba(0x293c5bff).into()), - border_selected: Some(rgba(0x293c5bff).into()), + border: Some(rgba(0xc9c9caff).into()), + border_variant: Some(rgba(0xdfdfe0ff).into()), + border_focused: Some(rgba(0xcbcdf6ff).into()), + border_selected: Some(rgba(0xcbcdf6ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x414754ff).into()), - elevated_surface_background: Some(rgba(0x2f343eff).into()), - surface_background: Some(rgba(0x2f343eff).into()), - background: Some(rgba(0x3b414dff).into()), - panel_background: Some(rgba(0x2f343eff).into()), - element_background: Some(rgba(0x2f343eff).into()), - element_hover: Some(rgba(0x363c46ff).into()), - element_active: Some(rgba(0x454a56ff).into()), - element_selected: Some(rgba(0x454a56ff).into()), - element_disabled: Some(rgba(0x2f343eff).into()), - drop_target_background: Some(rgba(0x83899480).into()), + border_disabled: Some(rgba(0xd3d3d4ff).into()), + elevated_surface_background: Some(rgba(0xebebecff).into()), + surface_background: Some(rgba(0xebebecff).into()), + background: Some(rgba(0xdcdcddff).into()), + panel_background: Some(rgba(0xebebecff).into()), + element_background: Some(rgba(0xebebecff).into()), + element_hover: Some(rgba(0xdfdfe0ff).into()), + element_active: Some(rgba(0xcacacaff).into()), + element_selected: Some(rgba(0xcacacaff).into()), + element_disabled: Some(rgba(0xebebecff).into()), + drop_target_background: Some(rgba(0x7f818880).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x363c46ff).into()), - ghost_element_active: Some(rgba(0x454a56ff).into()), - ghost_element_selected: Some(rgba(0x454a56ff).into()), - ghost_element_disabled: Some(rgba(0x2f343eff).into()), - text: Some(rgba(0xc8ccd4ff).into()), - text_muted: Some(rgba(0x838994ff).into()), - text_placeholder: Some(rgba(0x555a63ff).into()), - text_disabled: Some(rgba(0x555a63ff).into()), - text_accent: Some(rgba(0x74ade8ff).into()), - icon: Some(rgba(0xc8ccd4ff).into()), - icon_muted: Some(rgba(0x838994ff).into()), - icon_disabled: Some(rgba(0x555a63ff).into()), - icon_placeholder: Some(rgba(0x838994ff).into()), - icon_accent: Some(rgba(0x74ade8ff).into()), - status_bar_background: Some(rgba(0x3b414dff).into()), - title_bar_background: Some(rgba(0x3b414dff).into()), - toolbar_background: Some(rgba(0x282c34ff).into()), - tab_bar_background: Some(rgba(0x2f343eff).into()), - tab_inactive_background: Some(rgba(0x2f343eff).into()), - tab_active_background: Some(rgba(0x282c34ff).into()), - scrollbar_thumb_background: Some(rgba(0xc8ccd44c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x363c46ff).into()), - scrollbar_thumb_border: Some(rgba(0x363c46ff).into()), - scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x2e333cff).into()), - editor_foreground: Some(rgba(0xacb2beff).into()), - editor_background: Some(rgba(0x282c34ff).into()), - editor_gutter_background: Some(rgba(0x282c34ff).into()), - editor_subheader_background: Some(rgba(0x2f343eff).into()), - editor_active_line_background: Some(rgba(0x2f343ebf).into()), - editor_highlighted_line_background: Some(rgba(0x2f343eff).into()), - editor_line_number: Some(rgba(0xc8ccd459).into()), - editor_active_line_number: Some(rgba(0xc8ccd4ff).into()), - editor_invisible: Some(rgba(0x838994ff).into()), - editor_wrap_guide: Some(rgba(0xc8ccd40d).into()), - editor_active_wrap_guide: Some(rgba(0xc8ccd41a).into()), - editor_document_highlight_read_background: Some(rgba(0x74ade81a).into()), - editor_document_highlight_write_background: Some(rgba(0x555a6366).into()), - terminal_background: Some(rgba(0x282c34ff).into()), - terminal_ansi_bright_black: Some(rgba(0x525661ff).into()), - terminal_ansi_bright_red: Some(rgba(0x673a3cff).into()), - terminal_ansi_bright_green: Some(rgba(0x4d6140ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x786441ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x385378ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x5e2b26ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x3a565bff).into()), - terminal_ansi_bright_white: Some(rgba(0xc8ccd4ff).into()), - terminal_ansi_black: Some(rgba(0x282c34ff).into()), - terminal_ansi_red: Some(rgba(0xd07277ff).into()), - terminal_ansi_green: Some(rgba(0xa1c181ff).into()), + ghost_element_hover: Some(rgba(0xdfdfe0ff).into()), + ghost_element_active: Some(rgba(0xcacacaff).into()), + ghost_element_selected: Some(rgba(0xcacacaff).into()), + ghost_element_disabled: Some(rgba(0xebebecff).into()), + text: Some(rgba(0x383a41ff).into()), + text_muted: Some(rgba(0x7f8188ff).into()), + text_placeholder: Some(rgba(0xa1a1a3ff).into()), + text_disabled: Some(rgba(0xa1a1a3ff).into()), + text_accent: Some(rgba(0x5c79e2ff).into()), + icon: Some(rgba(0x383a41ff).into()), + icon_muted: Some(rgba(0x7f8188ff).into()), + icon_disabled: Some(rgba(0xa1a1a3ff).into()), + icon_placeholder: Some(rgba(0x7f8188ff).into()), + icon_accent: Some(rgba(0x5c79e2ff).into()), + status_bar_background: Some(rgba(0xdcdcddff).into()), + title_bar_background: Some(rgba(0xdcdcddff).into()), + toolbar_background: Some(rgba(0xfafafaff).into()), + tab_bar_background: Some(rgba(0xebebecff).into()), + tab_inactive_background: Some(rgba(0xebebecff).into()), + tab_active_background: Some(rgba(0xfafafaff).into()), + scrollbar_thumb_background: Some(rgba(0x383a414c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xdfdfe0ff).into()), + scrollbar_thumb_border: Some(rgba(0xdfdfe0ff).into()), + scrollbar_track_background: Some(rgba(0x00000000).into()), + scrollbar_track_border: Some(rgba(0xeeeeeeff).into()), + editor_foreground: Some(rgba(0x383a41ff).into()), + editor_background: Some(rgba(0xfafafaff).into()), + editor_gutter_background: Some(rgba(0xfafafaff).into()), + editor_subheader_background: Some(rgba(0xebebecff).into()), + editor_active_line_background: Some(rgba(0xebebecbf).into()), + editor_highlighted_line_background: Some(rgba(0xebebecff).into()), + editor_line_number: Some(rgba(0x383a4159).into()), + editor_active_line_number: Some(rgba(0x383a41ff).into()), + editor_invisible: Some(rgba(0x7f8188ff).into()), + editor_wrap_guide: Some(rgba(0x383a410d).into()), + editor_active_wrap_guide: Some(rgba(0x383a411a).into()), + editor_document_highlight_read_background: Some(rgba(0x5c79e21a).into()), + editor_document_highlight_write_background: Some(rgba(0xa3a3a466).into()), + terminal_background: Some(rgba(0xfafafaff).into()), + terminal_ansi_bright_black: Some(rgba(0xaaaaaaff).into()), + terminal_ansi_bright_red: Some(rgba(0xf0b0a4ff).into()), + terminal_ansi_bright_green: Some(rgba(0xb2cfa9ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xf1dfc1ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb5baf2ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xcea6d3ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa4bfdbff).into()), + terminal_ansi_bright_white: Some(rgba(0x383a41ff).into()), + terminal_ansi_black: Some(rgba(0xfafafaff).into()), + terminal_ansi_red: Some(rgba(0xd36151ff).into()), + terminal_ansi_green: Some(rgba(0x669f59ff).into()), terminal_ansi_yellow: Some(rgba(0xdec184ff).into()), - terminal_ansi_blue: Some(rgba(0x74ade8ff).into()), - terminal_ansi_magenta: Some(rgba(0xbe5046ff).into()), - terminal_ansi_cyan: Some(rgba(0x6fb4c0ff).into()), - terminal_ansi_white: Some(rgba(0xc8ccd4ff).into()), - link_text_hover: Some(rgba(0x74ade8ff).into()), + terminal_ansi_blue: Some(rgba(0x5c79e2ff).into()), + terminal_ansi_magenta: Some(rgba(0x994fa6ff).into()), + terminal_ansi_cyan: Some(rgba(0x3b82b7ff).into()), + terminal_ansi_white: Some(rgba(0x383a41ff).into()), + link_text_hover: Some(rgba(0x5c79e2ff).into()), ..Default::default() }, status: StatusColorsRefinement { conflict: Some(rgba(0xdec184ff).into()), - conflict_background: Some(rgba(0x41331dff).into()), - conflict_border: Some(rgba(0x5d4c2fff).into()), - created: Some(rgba(0xa1c181ff).into()), - created_background: Some(rgba(0x222e1dff).into()), - created_border: Some(rgba(0x38482fff).into()), - deleted: Some(rgba(0xd07277ff).into()), - deleted_background: Some(rgba(0x301b1cff).into()), - deleted_border: Some(rgba(0x4c2b2cff).into()), - error: Some(rgba(0xd07277ff).into()), - error_background: Some(rgba(0x301b1cff).into()), - error_border: Some(rgba(0x4c2b2cff).into()), - hidden: Some(rgba(0x555a63ff).into()), - hidden_background: Some(rgba(0x3b414dff).into()), - hidden_border: Some(rgba(0x414754ff).into()), - hint: Some(rgba(0x5b708aff).into()), - hint_background: Some(rgba(0x18243dff).into()), - hint_border: Some(rgba(0x293c5bff).into()), - ignored: Some(rgba(0x838994ff).into()), - ignored_background: Some(rgba(0x3b414dff).into()), - ignored_border: Some(rgba(0x464b57ff).into()), - info: Some(rgba(0x74ade8ff).into()), - info_background: Some(rgba(0x18243dff).into()), - info_border: Some(rgba(0x293c5bff).into()), + conflict_background: Some(rgba(0xfaf2e6ff).into()), + conflict_border: Some(rgba(0xf5e8d2ff).into()), + created: Some(rgba(0x669f59ff).into()), + created_background: Some(rgba(0xe0ebdcff).into()), + created_border: Some(rgba(0xc8dcc1ff).into()), + deleted: Some(rgba(0xd36151ff).into()), + deleted_background: Some(rgba(0xfbdfd9ff).into()), + deleted_border: Some(rgba(0xf6c6bdff).into()), + error: Some(rgba(0xd36151ff).into()), + error_background: Some(rgba(0xfbdfd9ff).into()), + error_border: Some(rgba(0xf6c6bdff).into()), + hidden: Some(rgba(0xa1a1a3ff).into()), + hidden_background: Some(rgba(0xdcdcddff).into()), + hidden_border: Some(rgba(0xd3d3d4ff).into()), + hint: Some(rgba(0x9295beff).into()), + hint_background: Some(rgba(0xe2e2faff).into()), + hint_border: Some(rgba(0xcbcdf6ff).into()), + ignored: Some(rgba(0x7f8188ff).into()), + ignored_background: Some(rgba(0xdcdcddff).into()), + ignored_border: Some(rgba(0xc9c9caff).into()), + info: Some(rgba(0x5c79e2ff).into()), + info_background: Some(rgba(0xe2e2faff).into()), + info_border: Some(rgba(0xcbcdf6ff).into()), modified: Some(rgba(0xdec184ff).into()), - modified_background: Some(rgba(0x41331dff).into()), - modified_border: Some(rgba(0x5d4c2fff).into()), - predictive: Some(rgba(0x5b6b88ff).into()), - predictive_background: Some(rgba(0x222e1dff).into()), - predictive_border: Some(rgba(0x38482fff).into()), - renamed: Some(rgba(0x74ade8ff).into()), - renamed_background: Some(rgba(0x18243dff).into()), - renamed_border: Some(rgba(0x293c5bff).into()), - success: Some(rgba(0xa1c181ff).into()), - success_background: Some(rgba(0x222e1dff).into()), - success_border: Some(rgba(0x38482fff).into()), - unreachable: Some(rgba(0x838994ff).into()), - unreachable_background: Some(rgba(0x3b414dff).into()), - unreachable_border: Some(rgba(0x464b57ff).into()), + modified_background: Some(rgba(0xfaf2e6ff).into()), + modified_border: Some(rgba(0xf5e8d2ff).into()), + predictive: Some(rgba(0x9c9fc7ff).into()), + predictive_background: Some(rgba(0xe0ebdcff).into()), + predictive_border: Some(rgba(0xc8dcc1ff).into()), + renamed: Some(rgba(0x5c79e2ff).into()), + renamed_background: Some(rgba(0xe2e2faff).into()), + renamed_border: Some(rgba(0xcbcdf6ff).into()), + success: Some(rgba(0x669f59ff).into()), + success_background: Some(rgba(0xe0ebdcff).into()), + success_border: Some(rgba(0xc8dcc1ff).into()), + unreachable: Some(rgba(0x7f8188ff).into()), + unreachable_background: Some(rgba(0xdcdcddff).into()), + unreachable_border: Some(rgba(0xc9c9caff).into()), warning: Some(rgba(0xdec184ff).into()), - warning_background: Some(rgba(0x41331dff).into()), - warning_border: Some(rgba(0x5d4c2fff).into()), + warning_background: Some(rgba(0xfaf2e6ff).into()), + warning_border: Some(rgba(0xf5e8d2ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x74ade8ff).into(), - background: rgba(0x74ade8ff).into(), - selection: rgba(0x74ade83d).into(), + cursor: rgba(0x5c79e2ff).into(), + background: rgba(0x5c79e2ff).into(), + selection: rgba(0x5c79e23d).into(), }, PlayerColor { - cursor: rgba(0xbe5046ff).into(), - background: rgba(0xbe5046ff).into(), - selection: rgba(0xbe50463d).into(), + cursor: rgba(0x994fa6ff).into(), + background: rgba(0x994fa6ff).into(), + selection: rgba(0x994fa63d).into(), }, PlayerColor { - cursor: rgba(0xc0966bff).into(), - background: rgba(0xc0966bff).into(), - selection: rgba(0xc0966b3d).into(), + cursor: rgba(0xad6f27ff).into(), + background: rgba(0xad6f27ff).into(), + selection: rgba(0xad6f273d).into(), }, PlayerColor { - cursor: rgba(0xb478cfff).into(), - background: rgba(0xb478cfff).into(), - selection: rgba(0xb478cf3d).into(), + cursor: rgba(0xa44aabff).into(), + background: rgba(0xa44aabff).into(), + selection: rgba(0xa44aab3d).into(), }, PlayerColor { - cursor: rgba(0x6fb4c0ff).into(), - background: rgba(0x6fb4c0ff).into(), - selection: rgba(0x6fb4c03d).into(), + cursor: rgba(0x3b82b7ff).into(), + background: rgba(0x3b82b7ff).into(), + selection: rgba(0x3b82b73d).into(), }, PlayerColor { - cursor: rgba(0xd07277ff).into(), - background: rgba(0xd07277ff).into(), - selection: rgba(0xd072773d).into(), + cursor: rgba(0xd36151ff).into(), + background: rgba(0xd36151ff).into(), + selection: rgba(0xd361513d).into(), }, PlayerColor { cursor: rgba(0xdec184ff).into(), @@ -628,9 +628,9 @@ pub fn one() -> UserThemeFamily { selection: rgba(0xdec1843d).into(), }, PlayerColor { - cursor: rgba(0xa1c181ff).into(), - background: rgba(0xa1c181ff).into(), - selection: rgba(0xa1c1813d).into(), + cursor: rgba(0x669f59ff).into(), + background: rgba(0x669f59ff).into(), + selection: rgba(0x669f593d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -638,63 +638,63 @@ pub fn one() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x74ade8ff).into()), + color: Some(rgba(0x5c79e2ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xc0966bff).into()), + color: Some(rgba(0xad6f26ff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x5d636fff).into()), + color: Some(rgba(0xa2a3a7ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x878e98ff).into()), + color: Some(rgba(0x7c7e86ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0xdfc184ff).into()), + color: Some(rgba(0x669f59ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x74ade9ff).into()), + color: Some(rgba(0x5c79e2ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xc8ccd4ff).into()), + color: Some(rgba(0x383a41ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x74ade8ff).into()), + color: Some(rgba(0x5c79e2ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0xc0966bff).into()), + color: Some(rgba(0xad6f26ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -702,21 +702,21 @@ pub fn one() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xd07277ff).into()), + color: Some(rgba(0xd36050ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0x74ade9ff).into()), + color: Some(rgba(0x5b79e3ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x5b708aff).into()), + color: Some(rgba(0x9295beff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -724,50 +724,50 @@ pub fn one() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0xb478cfff).into()), + color: Some(rgba(0xa449abff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x74ade8ff).into()), + color: Some(rgba(0x5c79e2ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x74ade9ff).into()), - font_style: Some(UserFontStyle::Normal), + color: Some(rgba(0x5b79e3ff).into()), + font_style: Some(UserFontStyle::Italic), ..Default::default() }, ), ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0x6fb4c0ff).into()), + color: Some(rgba(0x3982b7ff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0xc0966bff).into()), + color: Some(rgba(0xad6f26ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x6fb4c0ff).into()), + color: Some(rgba(0x3982b7ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x5b6b88ff).into()), + color: Some(rgba(0x9c9fc7ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -775,112 +775,112 @@ pub fn one() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xc8ccd4ff).into()), + color: Some(rgba(0x383a41ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xacb2beff).into()), + color: Some(rgba(0x383a41ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0xd07277ff).into()), + color: Some(rgba(0xd36050ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xacb2beff).into()), + color: Some(rgba(0x383a41ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xb2b9c6ff).into()), + color: Some(rgba(0x4d4f52ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xb2b9c6ff).into()), + color: Some(rgba(0x4d4f52ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xd07277ff).into()), + color: Some(rgba(0xd36050ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xb1574bff).into()), + color: Some(rgba(0xb92c46ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xa1c181ff).into()), + color: Some(rgba(0x659f58ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x878e98ff).into()), + color: Some(rgba(0x7c7e86ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xc0966bff).into()), + color: Some(rgba(0xad6f27ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xc0966bff).into()), + color: Some(rgba(0xad6f27ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0xc0966bff).into()), + color: Some(rgba(0xad6f27ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x74ade8ff).into()), + color: Some(rgba(0x5c79e2ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xa1c181ff).into()), + color: Some(rgba(0x659f58ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xd07277ff).into()), + color: Some(rgba(0xd36050ff).into()), font_weight: Some(UserFontWeight(400.0)), ..Default::default() }, @@ -888,28 +888,28 @@ pub fn one() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0x6fb4c0ff).into()), + color: Some(rgba(0x3982b7ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xc8ccd4ff).into()), + color: Some(rgba(0x383a41ff).into()), ..Default::default() }, ), ( "variable.special".into(), UserHighlightStyle { - color: Some(rgba(0xc0966bff).into()), + color: Some(rgba(0xad6f26ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x74ade9ff).into()), + color: Some(rgba(0x5b79e3ff).into()), ..Default::default() }, ), diff --git a/crates/theme/src/themes/rose_pine.rs b/crates/theme/src/themes/rose_pine.rs index 59b8a924377b6f105e8610717935391f1f2c0682..fe3bddb2d0d6bdbf8d031001a6ef90359a102250 100644 --- a/crates/theme/src/themes/rose_pine.rs +++ b/crates/theme/src/themes/rose_pine.rs @@ -16,170 +16,170 @@ pub fn rose_pine() -> UserThemeFamily { author: "Zed Industries".into(), themes: vec![ UserTheme { - name: "Rosé Pine Dawn".into(), - appearance: Appearance::Light, + name: "Rosé Pine".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0xdcd6d5ff).into()), - border_variant: Some(rgba(0xe5e0dfff).into()), - border_focused: Some(rgba(0xc3d7dbff).into()), - border_selected: Some(rgba(0xc3d7dbff).into()), + border: Some(rgba(0x423f55ff).into()), + border_variant: Some(rgba(0x232132ff).into()), + border_focused: Some(rgba(0x435255ff).into()), + border_selected: Some(rgba(0x435255ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xd0cccfff).into()), - elevated_surface_background: Some(rgba(0xfef9f2ff).into()), - surface_background: Some(rgba(0xfef9f2ff).into()), - background: Some(rgba(0xdcd8d8ff).into()), - panel_background: Some(rgba(0xfef9f2ff).into()), - element_background: Some(rgba(0xfef9f2ff).into()), - element_hover: Some(rgba(0xe5e0dfff).into()), - element_active: Some(rgba(0xdbd5d4ff).into()), - element_selected: Some(rgba(0xdbd5d4ff).into()), - element_disabled: Some(rgba(0xfef9f2ff).into()), - drop_target_background: Some(rgba(0x706c8c80).into()), + border_disabled: Some(rgba(0x353347ff).into()), + elevated_surface_background: Some(rgba(0x1d1b2aff).into()), + surface_background: Some(rgba(0x1d1b2aff).into()), + background: Some(rgba(0x292739ff).into()), + panel_background: Some(rgba(0x1d1b2aff).into()), + element_background: Some(rgba(0x1d1b2aff).into()), + element_hover: Some(rgba(0x232132ff).into()), + element_active: Some(rgba(0x403e53ff).into()), + element_selected: Some(rgba(0x403e53ff).into()), + element_disabled: Some(rgba(0x1d1b2aff).into()), + drop_target_background: Some(rgba(0x75718e80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xe5e0dfff).into()), - ghost_element_active: Some(rgba(0xdbd5d4ff).into()), - ghost_element_selected: Some(rgba(0xdbd5d4ff).into()), - ghost_element_disabled: Some(rgba(0xfef9f2ff).into()), - text: Some(rgba(0x575279ff).into()), - text_muted: Some(rgba(0x706c8cff).into()), - text_placeholder: Some(rgba(0x938fa3ff).into()), - text_disabled: Some(rgba(0x938fa3ff).into()), - text_accent: Some(rgba(0x57949fff).into()), - icon: Some(rgba(0x575279ff).into()), - icon_muted: Some(rgba(0x706c8cff).into()), - icon_disabled: Some(rgba(0x938fa3ff).into()), - icon_placeholder: Some(rgba(0x706c8cff).into()), - icon_accent: Some(rgba(0x57949fff).into()), - status_bar_background: Some(rgba(0xdcd8d8ff).into()), - title_bar_background: Some(rgba(0xdcd8d8ff).into()), - toolbar_background: Some(rgba(0xfaf4edff).into()), - tab_bar_background: Some(rgba(0xfef9f2ff).into()), - tab_inactive_background: Some(rgba(0xfef9f2ff).into()), - tab_active_background: Some(rgba(0xfaf4edff).into()), - scrollbar_thumb_background: Some(rgba(0x5752794c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xe5e0dfff).into()), - scrollbar_thumb_border: Some(rgba(0xe5e0dfff).into()), + ghost_element_hover: Some(rgba(0x232132ff).into()), + ghost_element_active: Some(rgba(0x403e53ff).into()), + ghost_element_selected: Some(rgba(0x403e53ff).into()), + ghost_element_disabled: Some(rgba(0x1d1b2aff).into()), + text: Some(rgba(0xe0def4ff).into()), + text_muted: Some(rgba(0x75718eff).into()), + text_placeholder: Some(rgba(0x2f2b43ff).into()), + text_disabled: Some(rgba(0x2f2b43ff).into()), + text_accent: Some(rgba(0x9cced7ff).into()), + icon: Some(rgba(0xe0def4ff).into()), + icon_muted: Some(rgba(0x75718eff).into()), + icon_disabled: Some(rgba(0x2f2b43ff).into()), + icon_placeholder: Some(rgba(0x75718eff).into()), + icon_accent: Some(rgba(0x9cced7ff).into()), + status_bar_background: Some(rgba(0x292739ff).into()), + title_bar_background: Some(rgba(0x292739ff).into()), + toolbar_background: Some(rgba(0x191724ff).into()), + tab_bar_background: Some(rgba(0x1d1b2aff).into()), + tab_inactive_background: Some(rgba(0x1d1b2aff).into()), + tab_active_background: Some(rgba(0x191724ff).into()), + scrollbar_thumb_background: Some(rgba(0xe0def44c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x232132ff).into()), + scrollbar_thumb_border: Some(rgba(0x232132ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xfdf8f1ff).into()), - editor_foreground: Some(rgba(0x575279ff).into()), - editor_background: Some(rgba(0xfaf4edff).into()), - editor_gutter_background: Some(rgba(0xfaf4edff).into()), - editor_subheader_background: Some(rgba(0xfef9f2ff).into()), - editor_active_line_background: Some(rgba(0xfef9f2bf).into()), - editor_highlighted_line_background: Some(rgba(0xfef9f2ff).into()), - editor_line_number: Some(rgba(0x57527959).into()), - editor_active_line_number: Some(rgba(0x575279ff).into()), - editor_invisible: Some(rgba(0x706c8cff).into()), - editor_wrap_guide: Some(rgba(0x5752790d).into()), - editor_active_wrap_guide: Some(rgba(0x5752791a).into()), - editor_document_highlight_read_background: Some(rgba(0x57949f1a).into()), - editor_document_highlight_write_background: Some(rgba(0x9691a466).into()), - terminal_background: Some(rgba(0xfaf4edff).into()), - terminal_ansi_bright_black: Some(rgba(0xb8b2baff).into()), - terminal_ansi_bright_red: Some(rgba(0xdcb0bbff).into()), - terminal_ansi_bright_green: Some(rgba(0xa5d5c5ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xfccd9bff).into()), - terminal_ansi_bright_blue: Some(rgba(0xacc9ceff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xbcb1bdff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x97b1c0ff).into()), - terminal_ansi_bright_white: Some(rgba(0x575279ff).into()), - terminal_ansi_black: Some(rgba(0xfaf4edff).into()), - terminal_ansi_red: Some(rgba(0xb4647aff).into()), - terminal_ansi_green: Some(rgba(0x3eaa8eff).into()), - terminal_ansi_yellow: Some(rgba(0xe99d35ff).into()), - terminal_ansi_blue: Some(rgba(0x57949fff).into()), - terminal_ansi_magenta: Some(rgba(0x7c697fff).into()), - terminal_ansi_cyan: Some(rgba(0x2a6983ff).into()), - terminal_ansi_white: Some(rgba(0x575279ff).into()), - link_text_hover: Some(rgba(0x57949fff).into()), + scrollbar_track_border: Some(rgba(0x1c1a29ff).into()), + editor_foreground: Some(rgba(0xe0def4ff).into()), + editor_background: Some(rgba(0x191724ff).into()), + editor_gutter_background: Some(rgba(0x191724ff).into()), + editor_subheader_background: Some(rgba(0x1d1b2aff).into()), + editor_active_line_background: Some(rgba(0x1d1b2abf).into()), + editor_highlighted_line_background: Some(rgba(0x1d1b2aff).into()), + editor_line_number: Some(rgba(0xe0def459).into()), + editor_active_line_number: Some(rgba(0xe0def4ff).into()), + editor_invisible: Some(rgba(0x75718eff).into()), + editor_wrap_guide: Some(rgba(0xe0def40d).into()), + editor_active_wrap_guide: Some(rgba(0xe0def41a).into()), + editor_document_highlight_read_background: Some(rgba(0x9cced71a).into()), + editor_document_highlight_write_background: Some(rgba(0x28253c66).into()), + terminal_background: Some(rgba(0x191724ff).into()), + terminal_ansi_bright_black: Some(rgba(0x403d55ff).into()), + terminal_ansi_bright_red: Some(rgba(0x7e3647ff).into()), + terminal_ansi_bright_green: Some(rgba(0x31614fff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x8a653bff).into()), + terminal_ansi_bright_blue: Some(rgba(0x566c70ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x4c3b47ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x203a46ff).into()), + terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()), + terminal_ansi_black: Some(rgba(0x191724ff).into()), + terminal_ansi_red: Some(rgba(0xea6f92ff).into()), + terminal_ansi_green: Some(rgba(0x5dc2a3ff).into()), + terminal_ansi_yellow: Some(rgba(0xf5c177ff).into()), + terminal_ansi_blue: Some(rgba(0x9cced7ff).into()), + terminal_ansi_magenta: Some(rgba(0x9d7691ff).into()), + terminal_ansi_cyan: Some(rgba(0x32748fff).into()), + terminal_ansi_white: Some(rgba(0xe0def4ff).into()), + link_text_hover: Some(rgba(0x9cced7ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xe99d35ff).into()), - conflict_background: Some(rgba(0xffebd6ff).into()), - conflict_border: Some(rgba(0xffdab7ff).into()), - created: Some(rgba(0x3eaa8eff).into()), - created_background: Some(rgba(0xdbeee7ff).into()), - created_border: Some(rgba(0xbee0d5ff).into()), - deleted: Some(rgba(0xb4647aff).into()), - deleted_background: Some(rgba(0xf1dfe3ff).into()), - deleted_border: Some(rgba(0xe6c6cdff).into()), - error: Some(rgba(0xb4647aff).into()), - error_background: Some(rgba(0xf1dfe3ff).into()), - error_border: Some(rgba(0xe6c6cdff).into()), - hidden: Some(rgba(0x938fa3ff).into()), - hidden_background: Some(rgba(0xdcd8d8ff).into()), - hidden_border: Some(rgba(0xd0cccfff).into()), - hint: Some(rgba(0x7a92aaff).into()), - hint_background: Some(rgba(0xdde9ebff).into()), - hint_border: Some(rgba(0xc3d7dbff).into()), - ignored: Some(rgba(0x706c8cff).into()), - ignored_background: Some(rgba(0xdcd8d8ff).into()), - ignored_border: Some(rgba(0xdcd6d5ff).into()), - info: Some(rgba(0x57949fff).into()), - info_background: Some(rgba(0xdde9ebff).into()), - info_border: Some(rgba(0xc3d7dbff).into()), - modified: Some(rgba(0xe99d35ff).into()), - modified_background: Some(rgba(0xffebd6ff).into()), - modified_border: Some(rgba(0xffdab7ff).into()), - predictive: Some(rgba(0xa2acbeff).into()), - predictive_background: Some(rgba(0xdbeee7ff).into()), - predictive_border: Some(rgba(0xbee0d5ff).into()), - renamed: Some(rgba(0x57949fff).into()), - renamed_background: Some(rgba(0xdde9ebff).into()), - renamed_border: Some(rgba(0xc3d7dbff).into()), - success: Some(rgba(0x3eaa8eff).into()), - success_background: Some(rgba(0xdbeee7ff).into()), - success_border: Some(rgba(0xbee0d5ff).into()), - unreachable: Some(rgba(0x706c8cff).into()), - unreachable_background: Some(rgba(0xdcd8d8ff).into()), - unreachable_border: Some(rgba(0xdcd6d5ff).into()), - warning: Some(rgba(0xe99d35ff).into()), - warning_background: Some(rgba(0xffebd6ff).into()), - warning_border: Some(rgba(0xffdab7ff).into()), + conflict: Some(rgba(0xf5c177ff).into()), + conflict_background: Some(rgba(0x50341aff).into()), + conflict_border: Some(rgba(0x6d4d2bff).into()), + created: Some(rgba(0x5dc2a3ff).into()), + created_background: Some(rgba(0x182e23ff).into()), + created_border: Some(rgba(0x254839ff).into()), + deleted: Some(rgba(0xea6f92ff).into()), + deleted_background: Some(rgba(0x431820ff).into()), + deleted_border: Some(rgba(0x612834ff).into()), + error: Some(rgba(0xea6f92ff).into()), + error_background: Some(rgba(0x431820ff).into()), + error_border: Some(rgba(0x612834ff).into()), + hidden: Some(rgba(0x2f2b43ff).into()), + hidden_background: Some(rgba(0x292739ff).into()), + hidden_border: Some(rgba(0x353347ff).into()), + hint: Some(rgba(0x5e768cff).into()), + hint_background: Some(rgba(0x2f3739ff).into()), + hint_border: Some(rgba(0x435255ff).into()), + ignored: Some(rgba(0x75718eff).into()), + ignored_background: Some(rgba(0x292739ff).into()), + ignored_border: Some(rgba(0x423f55ff).into()), + info: Some(rgba(0x9cced7ff).into()), + info_background: Some(rgba(0x2f3739ff).into()), + info_border: Some(rgba(0x435255ff).into()), + modified: Some(rgba(0xf5c177ff).into()), + modified_background: Some(rgba(0x50341aff).into()), + modified_border: Some(rgba(0x6d4d2bff).into()), + predictive: Some(rgba(0x556b81ff).into()), + predictive_background: Some(rgba(0x182e23ff).into()), + predictive_border: Some(rgba(0x254839ff).into()), + renamed: Some(rgba(0x9cced7ff).into()), + renamed_background: Some(rgba(0x2f3739ff).into()), + renamed_border: Some(rgba(0x435255ff).into()), + success: Some(rgba(0x5dc2a3ff).into()), + success_background: Some(rgba(0x182e23ff).into()), + success_border: Some(rgba(0x254839ff).into()), + unreachable: Some(rgba(0x75718eff).into()), + unreachable_background: Some(rgba(0x292739ff).into()), + unreachable_border: Some(rgba(0x423f55ff).into()), + warning: Some(rgba(0xf5c177ff).into()), + warning_background: Some(rgba(0x50341aff).into()), + warning_border: Some(rgba(0x6d4d2bff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x57949fff).into(), - background: rgba(0x57949fff).into(), - selection: rgba(0x57949f3d).into(), + cursor: rgba(0x9cced7ff).into(), + background: rgba(0x9cced7ff).into(), + selection: rgba(0x9cced73d).into(), }, PlayerColor { - cursor: rgba(0x7c697fff).into(), - background: rgba(0x7c697fff).into(), - selection: rgba(0x7c697f3d).into(), + cursor: rgba(0x9d7691ff).into(), + background: rgba(0x9d7691ff).into(), + selection: rgba(0x9d76913d).into(), }, PlayerColor { - cursor: rgba(0x907aa9ff).into(), - background: rgba(0x907aa9ff).into(), - selection: rgba(0x907aa93d).into(), + cursor: rgba(0xc4a7e6ff).into(), + background: rgba(0xc4a7e6ff).into(), + selection: rgba(0xc4a7e63d).into(), }, PlayerColor { - cursor: rgba(0x907aa9ff).into(), - background: rgba(0x907aa9ff).into(), - selection: rgba(0x907aa93d).into(), + cursor: rgba(0xc4a7e6ff).into(), + background: rgba(0xc4a7e6ff).into(), + selection: rgba(0xc4a7e63d).into(), }, PlayerColor { - cursor: rgba(0x2a6983ff).into(), - background: rgba(0x2a6983ff).into(), - selection: rgba(0x2a69833d).into(), + cursor: rgba(0x32748fff).into(), + background: rgba(0x32748fff).into(), + selection: rgba(0x32748f3d).into(), }, PlayerColor { - cursor: rgba(0xb4647aff).into(), - background: rgba(0xb4647aff).into(), - selection: rgba(0xb4647a3d).into(), + cursor: rgba(0xea6f92ff).into(), + background: rgba(0xea6f92ff).into(), + selection: rgba(0xea6f923d).into(), }, PlayerColor { - cursor: rgba(0xe99d35ff).into(), - background: rgba(0xe99d35ff).into(), - selection: rgba(0xe99d353d).into(), + cursor: rgba(0xf5c177ff).into(), + background: rgba(0xf5c177ff).into(), + selection: rgba(0xf5c1773d).into(), }, PlayerColor { - cursor: rgba(0x3eaa8eff).into(), - background: rgba(0x3eaa8eff).into(), - selection: rgba(0x3eaa8e3d).into(), + cursor: rgba(0x5dc2a3ff).into(), + background: rgba(0x5dc2a3ff).into(), + selection: rgba(0x5dc2a33d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -187,63 +187,63 @@ pub fn rose_pine() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x57949fff).into()), + color: Some(rgba(0x9cced7ff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xd7827eff).into()), + color: Some(rgba(0xebbcbaff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x9893a5ff).into()), + color: Some(rgba(0x6e6a86ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x6f6b8cff).into()), + color: Some(rgba(0x777390ff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x3eaa8eff).into()), + color: Some(rgba(0x5dc2a3ff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x57949fff).into()), + color: Some(rgba(0x9cced7ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x575279ff).into()), + color: Some(rgba(0xe0def4ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x57949fff).into()), + color: Some(rgba(0x9cced7ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x57949fff).into()), + color: Some(rgba(0x9cced7ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -251,28 +251,28 @@ pub fn rose_pine() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0x907aa9ff).into()), + color: Some(rgba(0xc4a7e6ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0xd7827eff).into()), + color: Some(rgba(0xebbcbaff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0xd7827eff).into()), + color: Some(rgba(0xebbcbaff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x7a92aaff).into()), + color: Some(rgba(0x5e768cff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -280,21 +280,21 @@ pub fn rose_pine() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x286983ff).into()), + color: Some(rgba(0x31748fff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x57949fff).into()), + color: Some(rgba(0x9cced7ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x56949fff).into()), + color: Some(rgba(0x9ccfd8ff).into()), font_style: Some(UserFontStyle::Normal), ..Default::default() }, @@ -302,28 +302,28 @@ pub fn rose_pine() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0xd7827eff).into()), + color: Some(rgba(0xebbcbaff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x3eaa8eff).into()), + color: Some(rgba(0x5dc2a3ff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x286983ff).into()), + color: Some(rgba(0x31748fff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0xa2acbeff).into()), + color: Some(rgba(0x556b81ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -331,112 +331,112 @@ pub fn rose_pine() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x575279ff).into()), + color: Some(rgba(0xe0def4ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x575279ff).into()), + color: Some(rgba(0xe0def4ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0x57949fff).into()), + color: Some(rgba(0x9cced7ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x797593ff).into()), + color: Some(rgba(0x908caaff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x635e82ff).into()), + color: Some(rgba(0x9d99b6ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x635e82ff).into()), + color: Some(rgba(0x9d99b6ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x635e82ff).into()), + color: Some(rgba(0x9d99b6ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x635e82ff).into()), + color: Some(rgba(0x9d99b6ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xea9d34ff).into()), + color: Some(rgba(0xf6c177ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x6f6b8cff).into()), + color: Some(rgba(0x777390ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0x907aa9ff).into()), + color: Some(rgba(0xc4a7e6ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0x907aa9ff).into()), + color: Some(rgba(0xc4a7e6ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0x907aa9ff).into()), + color: Some(rgba(0xc4a7e6ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x56949fff).into()), + color: Some(rgba(0x9ccfd8ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0x907aa9ff).into()), + color: Some(rgba(0xc4a7e6ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xea9d34ff).into()), + color: Some(rgba(0xf6c177ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -444,28 +444,28 @@ pub fn rose_pine() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0x56949fff).into()), + color: Some(rgba(0x9ccfd8ff).into()), ..Default::default() }, ), ( "type.builtin".into(), UserHighlightStyle { - color: Some(rgba(0x56949fff).into()), + color: Some(rgba(0x9ccfd8ff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x575279ff).into()), + color: Some(rgba(0xe0def4ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x57949fff).into()), + color: Some(rgba(0x9cced7ff).into()), ..Default::default() }, ), @@ -474,170 +474,170 @@ pub fn rose_pine() -> UserThemeFamily { }, }, UserTheme { - name: "Rosé Pine Moon".into(), - appearance: Appearance::Dark, + name: "Rosé Pine Dawn".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x504c68ff).into()), - border_variant: Some(rgba(0x322f48ff).into()), - border_focused: Some(rgba(0x435255ff).into()), - border_selected: Some(rgba(0x435255ff).into()), + border: Some(rgba(0xdcd6d5ff).into()), + border_variant: Some(rgba(0xe5e0dfff).into()), + border_focused: Some(rgba(0xc3d7dbff).into()), + border_selected: Some(rgba(0xc3d7dbff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x44415bff).into()), - elevated_surface_background: Some(rgba(0x28253cff).into()), - surface_background: Some(rgba(0x28253cff).into()), - background: Some(rgba(0x38354eff).into()), - panel_background: Some(rgba(0x28253cff).into()), - element_background: Some(rgba(0x28253cff).into()), - element_hover: Some(rgba(0x322f48ff).into()), - element_active: Some(rgba(0x4f4b66ff).into()), - element_selected: Some(rgba(0x4f4b66ff).into()), - element_disabled: Some(rgba(0x28253cff).into()), - drop_target_background: Some(rgba(0x85819e80).into()), + border_disabled: Some(rgba(0xd0cccfff).into()), + elevated_surface_background: Some(rgba(0xfef9f2ff).into()), + surface_background: Some(rgba(0xfef9f2ff).into()), + background: Some(rgba(0xdcd8d8ff).into()), + panel_background: Some(rgba(0xfef9f2ff).into()), + element_background: Some(rgba(0xfef9f2ff).into()), + element_hover: Some(rgba(0xe5e0dfff).into()), + element_active: Some(rgba(0xdbd5d4ff).into()), + element_selected: Some(rgba(0xdbd5d4ff).into()), + element_disabled: Some(rgba(0xfef9f2ff).into()), + drop_target_background: Some(rgba(0x706c8c80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x322f48ff).into()), - ghost_element_active: Some(rgba(0x4f4b66ff).into()), - ghost_element_selected: Some(rgba(0x4f4b66ff).into()), - ghost_element_disabled: Some(rgba(0x28253cff).into()), - text: Some(rgba(0xe0def4ff).into()), - text_muted: Some(rgba(0x85819eff).into()), - text_placeholder: Some(rgba(0x615d7aff).into()), - text_disabled: Some(rgba(0x615d7aff).into()), - text_accent: Some(rgba(0x9cced7ff).into()), - icon: Some(rgba(0xe0def4ff).into()), - icon_muted: Some(rgba(0x85819eff).into()), - icon_disabled: Some(rgba(0x615d7aff).into()), - icon_placeholder: Some(rgba(0x85819eff).into()), - icon_accent: Some(rgba(0x9cced7ff).into()), - status_bar_background: Some(rgba(0x38354eff).into()), - title_bar_background: Some(rgba(0x38354eff).into()), - toolbar_background: Some(rgba(0x232136ff).into()), - tab_bar_background: Some(rgba(0x28253cff).into()), - tab_inactive_background: Some(rgba(0x28253cff).into()), - tab_active_background: Some(rgba(0x232136ff).into()), - scrollbar_thumb_background: Some(rgba(0xe0def44c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x322f48ff).into()), - scrollbar_thumb_border: Some(rgba(0x322f48ff).into()), + ghost_element_hover: Some(rgba(0xe5e0dfff).into()), + ghost_element_active: Some(rgba(0xdbd5d4ff).into()), + ghost_element_selected: Some(rgba(0xdbd5d4ff).into()), + ghost_element_disabled: Some(rgba(0xfef9f2ff).into()), + text: Some(rgba(0x575279ff).into()), + text_muted: Some(rgba(0x706c8cff).into()), + text_placeholder: Some(rgba(0x938fa3ff).into()), + text_disabled: Some(rgba(0x938fa3ff).into()), + text_accent: Some(rgba(0x57949fff).into()), + icon: Some(rgba(0x575279ff).into()), + icon_muted: Some(rgba(0x706c8cff).into()), + icon_disabled: Some(rgba(0x938fa3ff).into()), + icon_placeholder: Some(rgba(0x706c8cff).into()), + icon_accent: Some(rgba(0x57949fff).into()), + status_bar_background: Some(rgba(0xdcd8d8ff).into()), + title_bar_background: Some(rgba(0xdcd8d8ff).into()), + toolbar_background: Some(rgba(0xfaf4edff).into()), + tab_bar_background: Some(rgba(0xfef9f2ff).into()), + tab_inactive_background: Some(rgba(0xfef9f2ff).into()), + tab_active_background: Some(rgba(0xfaf4edff).into()), + scrollbar_thumb_background: Some(rgba(0x5752794c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xe5e0dfff).into()), + scrollbar_thumb_border: Some(rgba(0xe5e0dfff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x27243bff).into()), - editor_foreground: Some(rgba(0xe0def4ff).into()), - editor_background: Some(rgba(0x232136ff).into()), - editor_gutter_background: Some(rgba(0x232136ff).into()), - editor_subheader_background: Some(rgba(0x28253cff).into()), - editor_active_line_background: Some(rgba(0x28253cbf).into()), - editor_highlighted_line_background: Some(rgba(0x28253cff).into()), - editor_line_number: Some(rgba(0xe0def459).into()), - editor_active_line_number: Some(rgba(0xe0def4ff).into()), - editor_invisible: Some(rgba(0x85819eff).into()), - editor_wrap_guide: Some(rgba(0xe0def40d).into()), - editor_active_wrap_guide: Some(rgba(0xe0def41a).into()), - editor_document_highlight_read_background: Some(rgba(0x9cced71a).into()), - editor_document_highlight_write_background: Some(rgba(0x59557166).into()), - terminal_background: Some(rgba(0x232136ff).into()), - terminal_ansi_bright_black: Some(rgba(0x3f3b58ff).into()), - terminal_ansi_bright_red: Some(rgba(0x7e3647ff).into()), - terminal_ansi_bright_green: Some(rgba(0x31614fff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x8a653bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x566c70ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x51414eff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x264654ff).into()), - terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()), - terminal_ansi_black: Some(rgba(0x232136ff).into()), - terminal_ansi_red: Some(rgba(0xea6f92ff).into()), - terminal_ansi_green: Some(rgba(0x5dc2a3ff).into()), - terminal_ansi_yellow: Some(rgba(0xf5c177ff).into()), - terminal_ansi_blue: Some(rgba(0x9cced7ff).into()), - terminal_ansi_magenta: Some(rgba(0xa784a1ff).into()), - terminal_ansi_cyan: Some(rgba(0x3f8fb0ff).into()), - terminal_ansi_white: Some(rgba(0xe0def4ff).into()), - link_text_hover: Some(rgba(0x9cced7ff).into()), + scrollbar_track_border: Some(rgba(0xfdf8f1ff).into()), + editor_foreground: Some(rgba(0x575279ff).into()), + editor_background: Some(rgba(0xfaf4edff).into()), + editor_gutter_background: Some(rgba(0xfaf4edff).into()), + editor_subheader_background: Some(rgba(0xfef9f2ff).into()), + editor_active_line_background: Some(rgba(0xfef9f2bf).into()), + editor_highlighted_line_background: Some(rgba(0xfef9f2ff).into()), + editor_line_number: Some(rgba(0x57527959).into()), + editor_active_line_number: Some(rgba(0x575279ff).into()), + editor_invisible: Some(rgba(0x706c8cff).into()), + editor_wrap_guide: Some(rgba(0x5752790d).into()), + editor_active_wrap_guide: Some(rgba(0x5752791a).into()), + editor_document_highlight_read_background: Some(rgba(0x57949f1a).into()), + editor_document_highlight_write_background: Some(rgba(0x9691a466).into()), + terminal_background: Some(rgba(0xfaf4edff).into()), + terminal_ansi_bright_black: Some(rgba(0xb8b2baff).into()), + terminal_ansi_bright_red: Some(rgba(0xdcb0bbff).into()), + terminal_ansi_bright_green: Some(rgba(0xa5d5c5ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xfccd9bff).into()), + terminal_ansi_bright_blue: Some(rgba(0xacc9ceff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xbcb1bdff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x97b1c0ff).into()), + terminal_ansi_bright_white: Some(rgba(0x575279ff).into()), + terminal_ansi_black: Some(rgba(0xfaf4edff).into()), + terminal_ansi_red: Some(rgba(0xb4647aff).into()), + terminal_ansi_green: Some(rgba(0x3eaa8eff).into()), + terminal_ansi_yellow: Some(rgba(0xe99d35ff).into()), + terminal_ansi_blue: Some(rgba(0x57949fff).into()), + terminal_ansi_magenta: Some(rgba(0x7c697fff).into()), + terminal_ansi_cyan: Some(rgba(0x2a6983ff).into()), + terminal_ansi_white: Some(rgba(0x575279ff).into()), + link_text_hover: Some(rgba(0x57949fff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xf5c177ff).into()), - conflict_background: Some(rgba(0x50341aff).into()), - conflict_border: Some(rgba(0x6d4d2bff).into()), - created: Some(rgba(0x5dc2a3ff).into()), - created_background: Some(rgba(0x182e23ff).into()), - created_border: Some(rgba(0x254839ff).into()), - deleted: Some(rgba(0xea6f92ff).into()), - deleted_background: Some(rgba(0x431820ff).into()), - deleted_border: Some(rgba(0x612834ff).into()), - error: Some(rgba(0xea6f92ff).into()), - error_background: Some(rgba(0x431820ff).into()), - error_border: Some(rgba(0x612834ff).into()), - hidden: Some(rgba(0x615d7aff).into()), - hidden_background: Some(rgba(0x38354eff).into()), - hidden_border: Some(rgba(0x44415bff).into()), - hint: Some(rgba(0x728aa2ff).into()), - hint_background: Some(rgba(0x2f3739ff).into()), - hint_border: Some(rgba(0x435255ff).into()), - ignored: Some(rgba(0x85819eff).into()), - ignored_background: Some(rgba(0x38354eff).into()), - ignored_border: Some(rgba(0x504c68ff).into()), - info: Some(rgba(0x9cced7ff).into()), - info_background: Some(rgba(0x2f3739ff).into()), - info_border: Some(rgba(0x435255ff).into()), - modified: Some(rgba(0xf5c177ff).into()), - modified_background: Some(rgba(0x50341aff).into()), - modified_border: Some(rgba(0x6d4d2bff).into()), - predictive: Some(rgba(0x516b83ff).into()), - predictive_background: Some(rgba(0x182e23ff).into()), - predictive_border: Some(rgba(0x254839ff).into()), - renamed: Some(rgba(0x9cced7ff).into()), - renamed_background: Some(rgba(0x2f3739ff).into()), - renamed_border: Some(rgba(0x435255ff).into()), - success: Some(rgba(0x5dc2a3ff).into()), - success_background: Some(rgba(0x182e23ff).into()), - success_border: Some(rgba(0x254839ff).into()), - unreachable: Some(rgba(0x85819eff).into()), - unreachable_background: Some(rgba(0x38354eff).into()), - unreachable_border: Some(rgba(0x504c68ff).into()), - warning: Some(rgba(0xf5c177ff).into()), - warning_background: Some(rgba(0x50341aff).into()), - warning_border: Some(rgba(0x6d4d2bff).into()), + conflict: Some(rgba(0xe99d35ff).into()), + conflict_background: Some(rgba(0xffebd6ff).into()), + conflict_border: Some(rgba(0xffdab7ff).into()), + created: Some(rgba(0x3eaa8eff).into()), + created_background: Some(rgba(0xdbeee7ff).into()), + created_border: Some(rgba(0xbee0d5ff).into()), + deleted: Some(rgba(0xb4647aff).into()), + deleted_background: Some(rgba(0xf1dfe3ff).into()), + deleted_border: Some(rgba(0xe6c6cdff).into()), + error: Some(rgba(0xb4647aff).into()), + error_background: Some(rgba(0xf1dfe3ff).into()), + error_border: Some(rgba(0xe6c6cdff).into()), + hidden: Some(rgba(0x938fa3ff).into()), + hidden_background: Some(rgba(0xdcd8d8ff).into()), + hidden_border: Some(rgba(0xd0cccfff).into()), + hint: Some(rgba(0x7a92aaff).into()), + hint_background: Some(rgba(0xdde9ebff).into()), + hint_border: Some(rgba(0xc3d7dbff).into()), + ignored: Some(rgba(0x706c8cff).into()), + ignored_background: Some(rgba(0xdcd8d8ff).into()), + ignored_border: Some(rgba(0xdcd6d5ff).into()), + info: Some(rgba(0x57949fff).into()), + info_background: Some(rgba(0xdde9ebff).into()), + info_border: Some(rgba(0xc3d7dbff).into()), + modified: Some(rgba(0xe99d35ff).into()), + modified_background: Some(rgba(0xffebd6ff).into()), + modified_border: Some(rgba(0xffdab7ff).into()), + predictive: Some(rgba(0xa2acbeff).into()), + predictive_background: Some(rgba(0xdbeee7ff).into()), + predictive_border: Some(rgba(0xbee0d5ff).into()), + renamed: Some(rgba(0x57949fff).into()), + renamed_background: Some(rgba(0xdde9ebff).into()), + renamed_border: Some(rgba(0xc3d7dbff).into()), + success: Some(rgba(0x3eaa8eff).into()), + success_background: Some(rgba(0xdbeee7ff).into()), + success_border: Some(rgba(0xbee0d5ff).into()), + unreachable: Some(rgba(0x706c8cff).into()), + unreachable_background: Some(rgba(0xdcd8d8ff).into()), + unreachable_border: Some(rgba(0xdcd6d5ff).into()), + warning: Some(rgba(0xe99d35ff).into()), + warning_background: Some(rgba(0xffebd6ff).into()), + warning_border: Some(rgba(0xffdab7ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x9cced7ff).into(), - background: rgba(0x9cced7ff).into(), - selection: rgba(0x9cced73d).into(), + cursor: rgba(0x57949fff).into(), + background: rgba(0x57949fff).into(), + selection: rgba(0x57949f3d).into(), }, PlayerColor { - cursor: rgba(0xa784a1ff).into(), - background: rgba(0xa784a1ff).into(), - selection: rgba(0xa784a13d).into(), + cursor: rgba(0x7c697fff).into(), + background: rgba(0x7c697fff).into(), + selection: rgba(0x7c697f3d).into(), }, PlayerColor { - cursor: rgba(0xc4a7e6ff).into(), - background: rgba(0xc4a7e6ff).into(), - selection: rgba(0xc4a7e63d).into(), + cursor: rgba(0x907aa9ff).into(), + background: rgba(0x907aa9ff).into(), + selection: rgba(0x907aa93d).into(), }, PlayerColor { - cursor: rgba(0xc4a7e6ff).into(), - background: rgba(0xc4a7e6ff).into(), - selection: rgba(0xc4a7e63d).into(), + cursor: rgba(0x907aa9ff).into(), + background: rgba(0x907aa9ff).into(), + selection: rgba(0x907aa93d).into(), }, PlayerColor { - cursor: rgba(0x3f8fb0ff).into(), - background: rgba(0x3f8fb0ff).into(), - selection: rgba(0x3f8fb03d).into(), + cursor: rgba(0x2a6983ff).into(), + background: rgba(0x2a6983ff).into(), + selection: rgba(0x2a69833d).into(), }, PlayerColor { - cursor: rgba(0xea6f92ff).into(), - background: rgba(0xea6f92ff).into(), - selection: rgba(0xea6f923d).into(), + cursor: rgba(0xb4647aff).into(), + background: rgba(0xb4647aff).into(), + selection: rgba(0xb4647a3d).into(), }, PlayerColor { - cursor: rgba(0xf5c177ff).into(), - background: rgba(0xf5c177ff).into(), - selection: rgba(0xf5c1773d).into(), + cursor: rgba(0xe99d35ff).into(), + background: rgba(0xe99d35ff).into(), + selection: rgba(0xe99d353d).into(), }, PlayerColor { - cursor: rgba(0x5dc2a3ff).into(), - background: rgba(0x5dc2a3ff).into(), - selection: rgba(0x5dc2a33d).into(), + cursor: rgba(0x3eaa8eff).into(), + background: rgba(0x3eaa8eff).into(), + selection: rgba(0x3eaa8e3d).into(), }, ])), syntax: Some(UserSyntaxTheme { @@ -645,63 +645,63 @@ pub fn rose_pine() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x9cced7ff).into()), + color: Some(rgba(0x57949fff).into()), ..Default::default() }, ), ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xea9a97ff).into()), + color: Some(rgba(0xd7827eff).into()), ..Default::default() }, ), ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x6e6a86ff).into()), + color: Some(rgba(0x9893a5ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x8682a0ff).into()), + color: Some(rgba(0x6f6b8cff).into()), ..Default::default() }, ), ( "constant".into(), UserHighlightStyle { - color: Some(rgba(0x5dc2a3ff).into()), + color: Some(rgba(0x3eaa8eff).into()), ..Default::default() }, ), ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x9cced7ff).into()), + color: Some(rgba(0x57949fff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xe0def4ff).into()), + color: Some(rgba(0x575279ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x9cced7ff).into()), + color: Some(rgba(0x57949fff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x9cced7ff).into()), + color: Some(rgba(0x57949fff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -709,28 +709,28 @@ pub fn rose_pine() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xc4a7e6ff).into()), + color: Some(rgba(0x907aa9ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0xea9a97ff).into()), + color: Some(rgba(0xd7827eff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0xea9a97ff).into()), + color: Some(rgba(0xd7827eff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x728aa2ff).into()), + color: Some(rgba(0x7a92aaff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -738,21 +738,21 @@ pub fn rose_pine() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fb0ff).into()), + color: Some(rgba(0x286983ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x9cced7ff).into()), + color: Some(rgba(0x57949fff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0x9ccfd8ff).into()), + color: Some(rgba(0x56949fff).into()), font_style: Some(UserFontStyle::Normal), ..Default::default() }, @@ -760,28 +760,28 @@ pub fn rose_pine() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0xea9a97ff).into()), + color: Some(rgba(0xd7827eff).into()), ..Default::default() }, ), ( "number".into(), UserHighlightStyle { - color: Some(rgba(0x5dc2a3ff).into()), + color: Some(rgba(0x3eaa8eff).into()), ..Default::default() }, ), ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x3e8fb0ff).into()), + color: Some(rgba(0x286983ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x516b83ff).into()), + color: Some(rgba(0xa2acbeff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -789,112 +789,112 @@ pub fn rose_pine() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xe0def4ff).into()), + color: Some(rgba(0x575279ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xe0def4ff).into()), + color: Some(rgba(0x575279ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0x9cced7ff).into()), + color: Some(rgba(0x57949fff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x908caaff).into()), + color: Some(rgba(0x797593ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xaeabc6ff).into()), + color: Some(rgba(0x635e82ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xaeabc6ff).into()), + color: Some(rgba(0x635e82ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xaeabc6ff).into()), + color: Some(rgba(0x635e82ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xaeabc6ff).into()), + color: Some(rgba(0x635e82ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xf6c177ff).into()), + color: Some(rgba(0xea9d34ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x8682a0ff).into()), + color: Some(rgba(0x6f6b8cff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xc4a7e6ff).into()), + color: Some(rgba(0x907aa9ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xc4a7e6ff).into()), + color: Some(rgba(0x907aa9ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0xc4a7e6ff).into()), + color: Some(rgba(0x907aa9ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x9ccfd8ff).into()), + color: Some(rgba(0x56949fff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xc4a7e6ff).into()), + color: Some(rgba(0x907aa9ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xf6c177ff).into()), + color: Some(rgba(0xea9d34ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -902,28 +902,28 @@ pub fn rose_pine() -> UserThemeFamily { ( "type".into(), UserHighlightStyle { - color: Some(rgba(0x9ccfd8ff).into()), + color: Some(rgba(0x56949fff).into()), ..Default::default() }, ), ( "type.builtin".into(), UserHighlightStyle { - color: Some(rgba(0x9ccfd8ff).into()), + color: Some(rgba(0x56949fff).into()), ..Default::default() }, ), ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xe0def4ff).into()), + color: Some(rgba(0x575279ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x9cced7ff).into()), + color: Some(rgba(0x57949fff).into()), ..Default::default() }, ), @@ -932,81 +932,81 @@ pub fn rose_pine() -> UserThemeFamily { }, }, UserTheme { - name: "Rosé Pine".into(), + name: "Rosé Pine Moon".into(), appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x423f55ff).into()), - border_variant: Some(rgba(0x232132ff).into()), + border: Some(rgba(0x504c68ff).into()), + border_variant: Some(rgba(0x322f48ff).into()), border_focused: Some(rgba(0x435255ff).into()), border_selected: Some(rgba(0x435255ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x353347ff).into()), - elevated_surface_background: Some(rgba(0x1d1b2aff).into()), - surface_background: Some(rgba(0x1d1b2aff).into()), - background: Some(rgba(0x292739ff).into()), - panel_background: Some(rgba(0x1d1b2aff).into()), - element_background: Some(rgba(0x1d1b2aff).into()), - element_hover: Some(rgba(0x232132ff).into()), - element_active: Some(rgba(0x403e53ff).into()), - element_selected: Some(rgba(0x403e53ff).into()), - element_disabled: Some(rgba(0x1d1b2aff).into()), - drop_target_background: Some(rgba(0x75718e80).into()), + border_disabled: Some(rgba(0x44415bff).into()), + elevated_surface_background: Some(rgba(0x28253cff).into()), + surface_background: Some(rgba(0x28253cff).into()), + background: Some(rgba(0x38354eff).into()), + panel_background: Some(rgba(0x28253cff).into()), + element_background: Some(rgba(0x28253cff).into()), + element_hover: Some(rgba(0x322f48ff).into()), + element_active: Some(rgba(0x4f4b66ff).into()), + element_selected: Some(rgba(0x4f4b66ff).into()), + element_disabled: Some(rgba(0x28253cff).into()), + drop_target_background: Some(rgba(0x85819e80).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x232132ff).into()), - ghost_element_active: Some(rgba(0x403e53ff).into()), - ghost_element_selected: Some(rgba(0x403e53ff).into()), - ghost_element_disabled: Some(rgba(0x1d1b2aff).into()), + ghost_element_hover: Some(rgba(0x322f48ff).into()), + ghost_element_active: Some(rgba(0x4f4b66ff).into()), + ghost_element_selected: Some(rgba(0x4f4b66ff).into()), + ghost_element_disabled: Some(rgba(0x28253cff).into()), text: Some(rgba(0xe0def4ff).into()), - text_muted: Some(rgba(0x75718eff).into()), - text_placeholder: Some(rgba(0x2f2b43ff).into()), - text_disabled: Some(rgba(0x2f2b43ff).into()), + text_muted: Some(rgba(0x85819eff).into()), + text_placeholder: Some(rgba(0x615d7aff).into()), + text_disabled: Some(rgba(0x615d7aff).into()), text_accent: Some(rgba(0x9cced7ff).into()), icon: Some(rgba(0xe0def4ff).into()), - icon_muted: Some(rgba(0x75718eff).into()), - icon_disabled: Some(rgba(0x2f2b43ff).into()), - icon_placeholder: Some(rgba(0x75718eff).into()), + icon_muted: Some(rgba(0x85819eff).into()), + icon_disabled: Some(rgba(0x615d7aff).into()), + icon_placeholder: Some(rgba(0x85819eff).into()), icon_accent: Some(rgba(0x9cced7ff).into()), - status_bar_background: Some(rgba(0x292739ff).into()), - title_bar_background: Some(rgba(0x292739ff).into()), - toolbar_background: Some(rgba(0x191724ff).into()), - tab_bar_background: Some(rgba(0x1d1b2aff).into()), - tab_inactive_background: Some(rgba(0x1d1b2aff).into()), - tab_active_background: Some(rgba(0x191724ff).into()), + status_bar_background: Some(rgba(0x38354eff).into()), + title_bar_background: Some(rgba(0x38354eff).into()), + toolbar_background: Some(rgba(0x232136ff).into()), + tab_bar_background: Some(rgba(0x28253cff).into()), + tab_inactive_background: Some(rgba(0x28253cff).into()), + tab_active_background: Some(rgba(0x232136ff).into()), scrollbar_thumb_background: Some(rgba(0xe0def44c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x232132ff).into()), - scrollbar_thumb_border: Some(rgba(0x232132ff).into()), + scrollbar_thumb_hover_background: Some(rgba(0x322f48ff).into()), + scrollbar_thumb_border: Some(rgba(0x322f48ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x1c1a29ff).into()), + scrollbar_track_border: Some(rgba(0x27243bff).into()), editor_foreground: Some(rgba(0xe0def4ff).into()), - editor_background: Some(rgba(0x191724ff).into()), - editor_gutter_background: Some(rgba(0x191724ff).into()), - editor_subheader_background: Some(rgba(0x1d1b2aff).into()), - editor_active_line_background: Some(rgba(0x1d1b2abf).into()), - editor_highlighted_line_background: Some(rgba(0x1d1b2aff).into()), + editor_background: Some(rgba(0x232136ff).into()), + editor_gutter_background: Some(rgba(0x232136ff).into()), + editor_subheader_background: Some(rgba(0x28253cff).into()), + editor_active_line_background: Some(rgba(0x28253cbf).into()), + editor_highlighted_line_background: Some(rgba(0x28253cff).into()), editor_line_number: Some(rgba(0xe0def459).into()), editor_active_line_number: Some(rgba(0xe0def4ff).into()), - editor_invisible: Some(rgba(0x75718eff).into()), + editor_invisible: Some(rgba(0x85819eff).into()), editor_wrap_guide: Some(rgba(0xe0def40d).into()), editor_active_wrap_guide: Some(rgba(0xe0def41a).into()), editor_document_highlight_read_background: Some(rgba(0x9cced71a).into()), - editor_document_highlight_write_background: Some(rgba(0x28253c66).into()), - terminal_background: Some(rgba(0x191724ff).into()), - terminal_ansi_bright_black: Some(rgba(0x403d55ff).into()), + editor_document_highlight_write_background: Some(rgba(0x59557166).into()), + terminal_background: Some(rgba(0x232136ff).into()), + terminal_ansi_bright_black: Some(rgba(0x3f3b58ff).into()), terminal_ansi_bright_red: Some(rgba(0x7e3647ff).into()), terminal_ansi_bright_green: Some(rgba(0x31614fff).into()), terminal_ansi_bright_yellow: Some(rgba(0x8a653bff).into()), terminal_ansi_bright_blue: Some(rgba(0x566c70ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x4c3b47ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x203a46ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x51414eff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x264654ff).into()), terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()), - terminal_ansi_black: Some(rgba(0x191724ff).into()), + terminal_ansi_black: Some(rgba(0x232136ff).into()), terminal_ansi_red: Some(rgba(0xea6f92ff).into()), terminal_ansi_green: Some(rgba(0x5dc2a3ff).into()), terminal_ansi_yellow: Some(rgba(0xf5c177ff).into()), terminal_ansi_blue: Some(rgba(0x9cced7ff).into()), - terminal_ansi_magenta: Some(rgba(0x9d7691ff).into()), - terminal_ansi_cyan: Some(rgba(0x32748fff).into()), + terminal_ansi_magenta: Some(rgba(0xa784a1ff).into()), + terminal_ansi_cyan: Some(rgba(0x3f8fb0ff).into()), terminal_ansi_white: Some(rgba(0xe0def4ff).into()), link_text_hover: Some(rgba(0x9cced7ff).into()), ..Default::default() @@ -1024,22 +1024,22 @@ pub fn rose_pine() -> UserThemeFamily { error: Some(rgba(0xea6f92ff).into()), error_background: Some(rgba(0x431820ff).into()), error_border: Some(rgba(0x612834ff).into()), - hidden: Some(rgba(0x2f2b43ff).into()), - hidden_background: Some(rgba(0x292739ff).into()), - hidden_border: Some(rgba(0x353347ff).into()), - hint: Some(rgba(0x5e768cff).into()), + hidden: Some(rgba(0x615d7aff).into()), + hidden_background: Some(rgba(0x38354eff).into()), + hidden_border: Some(rgba(0x44415bff).into()), + hint: Some(rgba(0x728aa2ff).into()), hint_background: Some(rgba(0x2f3739ff).into()), hint_border: Some(rgba(0x435255ff).into()), - ignored: Some(rgba(0x75718eff).into()), - ignored_background: Some(rgba(0x292739ff).into()), - ignored_border: Some(rgba(0x423f55ff).into()), + ignored: Some(rgba(0x85819eff).into()), + ignored_background: Some(rgba(0x38354eff).into()), + ignored_border: Some(rgba(0x504c68ff).into()), info: Some(rgba(0x9cced7ff).into()), info_background: Some(rgba(0x2f3739ff).into()), info_border: Some(rgba(0x435255ff).into()), modified: Some(rgba(0xf5c177ff).into()), modified_background: Some(rgba(0x50341aff).into()), modified_border: Some(rgba(0x6d4d2bff).into()), - predictive: Some(rgba(0x556b81ff).into()), + predictive: Some(rgba(0x516b83ff).into()), predictive_background: Some(rgba(0x182e23ff).into()), predictive_border: Some(rgba(0x254839ff).into()), renamed: Some(rgba(0x9cced7ff).into()), @@ -1048,9 +1048,9 @@ pub fn rose_pine() -> UserThemeFamily { success: Some(rgba(0x5dc2a3ff).into()), success_background: Some(rgba(0x182e23ff).into()), success_border: Some(rgba(0x254839ff).into()), - unreachable: Some(rgba(0x75718eff).into()), - unreachable_background: Some(rgba(0x292739ff).into()), - unreachable_border: Some(rgba(0x423f55ff).into()), + unreachable: Some(rgba(0x85819eff).into()), + unreachable_background: Some(rgba(0x38354eff).into()), + unreachable_border: Some(rgba(0x504c68ff).into()), warning: Some(rgba(0xf5c177ff).into()), warning_background: Some(rgba(0x50341aff).into()), warning_border: Some(rgba(0x6d4d2bff).into()), @@ -1063,9 +1063,9 @@ pub fn rose_pine() -> UserThemeFamily { selection: rgba(0x9cced73d).into(), }, PlayerColor { - cursor: rgba(0x9d7691ff).into(), - background: rgba(0x9d7691ff).into(), - selection: rgba(0x9d76913d).into(), + cursor: rgba(0xa784a1ff).into(), + background: rgba(0xa784a1ff).into(), + selection: rgba(0xa784a13d).into(), }, PlayerColor { cursor: rgba(0xc4a7e6ff).into(), @@ -1078,9 +1078,9 @@ pub fn rose_pine() -> UserThemeFamily { selection: rgba(0xc4a7e63d).into(), }, PlayerColor { - cursor: rgba(0x32748fff).into(), - background: rgba(0x32748fff).into(), - selection: rgba(0x32748f3d).into(), + cursor: rgba(0x3f8fb0ff).into(), + background: rgba(0x3f8fb0ff).into(), + selection: rgba(0x3f8fb03d).into(), }, PlayerColor { cursor: rgba(0xea6f92ff).into(), @@ -1110,7 +1110,7 @@ pub fn rose_pine() -> UserThemeFamily { ( "boolean".into(), UserHighlightStyle { - color: Some(rgba(0xebbcbaff).into()), + color: Some(rgba(0xea9a97ff).into()), ..Default::default() }, ), @@ -1124,7 +1124,7 @@ pub fn rose_pine() -> UserThemeFamily { ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x777390ff).into()), + color: Some(rgba(0x8682a0ff).into()), ..Default::default() }, ), @@ -1174,21 +1174,21 @@ pub fn rose_pine() -> UserThemeFamily { ( "function".into(), UserHighlightStyle { - color: Some(rgba(0xebbcbaff).into()), + color: Some(rgba(0xea9a97ff).into()), ..Default::default() }, ), ( "function.method".into(), UserHighlightStyle { - color: Some(rgba(0xebbcbaff).into()), + color: Some(rgba(0xea9a97ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x5e768cff).into()), + color: Some(rgba(0x728aa2ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -1196,7 +1196,7 @@ pub fn rose_pine() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x31748fff).into()), + color: Some(rgba(0x3e8fb0ff).into()), ..Default::default() }, ), @@ -1218,7 +1218,7 @@ pub fn rose_pine() -> UserThemeFamily { ( "link_uri".into(), UserHighlightStyle { - color: Some(rgba(0xebbcbaff).into()), + color: Some(rgba(0xea9a97ff).into()), ..Default::default() }, ), @@ -1232,14 +1232,14 @@ pub fn rose_pine() -> UserThemeFamily { ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0x31748fff).into()), + color: Some(rgba(0x3e8fb0ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x556b81ff).into()), + color: Some(rgba(0x516b83ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -1275,28 +1275,28 @@ pub fn rose_pine() -> UserThemeFamily { ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x9d99b6ff).into()), + color: Some(rgba(0xaeabc6ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x9d99b6ff).into()), + color: Some(rgba(0xaeabc6ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x9d99b6ff).into()), + color: Some(rgba(0xaeabc6ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x9d99b6ff).into()), + color: Some(rgba(0xaeabc6ff).into()), ..Default::default() }, ), @@ -1310,7 +1310,7 @@ pub fn rose_pine() -> UserThemeFamily { ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x777390ff).into()), + color: Some(rgba(0x8682a0ff).into()), ..Default::default() }, ), diff --git a/crates/theme/src/themes/solarized.rs b/crates/theme/src/themes/solarized.rs index c925785b176018f2813e396a22a35569504aca85..8d4d7e1aa1c253ed3e3236ea90f6bbe8b4fd5e00 100644 --- a/crates/theme/src/themes/solarized.rs +++ b/crates/theme/src/themes/solarized.rs @@ -16,150 +16,150 @@ pub fn solarized() -> UserThemeFamily { author: "Zed Industries".into(), themes: vec![ UserTheme { - name: "Solarized Light".into(), - appearance: Appearance::Light, + name: "Solarized Dark".into(), + appearance: Appearance::Dark, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x9faaa8ff).into()), - border_variant: Some(rgba(0xdcdacbff).into()), - border_focused: Some(rgba(0xbfd3efff).into()), - border_selected: Some(rgba(0xbfd3efff).into()), + border: Some(rgba(0x2b4f58ff).into()), + border_variant: Some(rgba(0x063541ff).into()), + border_focused: Some(rgba(0x1c3249ff).into()), + border_selected: Some(rgba(0x1c3249ff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0xb7bdb6ff).into()), - elevated_surface_background: Some(rgba(0xf3eddaff).into()), - surface_background: Some(rgba(0xf3eddaff).into()), - background: Some(rgba(0xcfd0c4ff).into()), - panel_background: Some(rgba(0xf3eddaff).into()), - element_background: Some(rgba(0xf3eddaff).into()), - element_hover: Some(rgba(0xdcdacbff).into()), - element_active: Some(rgba(0xa2aca9ff).into()), - element_selected: Some(rgba(0xa2aca9ff).into()), - element_disabled: Some(rgba(0xf3eddaff).into()), - drop_target_background: Some(rgba(0x34555e80).into()), + border_disabled: Some(rgba(0x19424dff).into()), + elevated_surface_background: Some(rgba(0x04313cff).into()), + surface_background: Some(rgba(0x04313cff).into()), + background: Some(rgba(0x083743ff).into()), + panel_background: Some(rgba(0x04313cff).into()), + element_background: Some(rgba(0x04313cff).into()), + element_hover: Some(rgba(0x063541ff).into()), + element_active: Some(rgba(0x294e58ff).into()), + element_selected: Some(rgba(0x294e58ff).into()), + element_disabled: Some(rgba(0x04313cff).into()), + drop_target_background: Some(rgba(0x93a1a180).into()), ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0xdcdacbff).into()), - ghost_element_active: Some(rgba(0xa2aca9ff).into()), - ghost_element_selected: Some(rgba(0xa2aca9ff).into()), - ghost_element_disabled: Some(rgba(0xf3eddaff).into()), - text: Some(rgba(0x002b36ff).into()), - text_muted: Some(rgba(0x34555eff).into()), - text_placeholder: Some(rgba(0x6a7f86ff).into()), - text_disabled: Some(rgba(0x6a7f86ff).into()), - text_accent: Some(rgba(0x298bd1ff).into()), - icon: Some(rgba(0x002b36ff).into()), - icon_muted: Some(rgba(0x34555eff).into()), - icon_disabled: Some(rgba(0x6a7f86ff).into()), - icon_placeholder: Some(rgba(0x34555eff).into()), - icon_accent: Some(rgba(0x298bd1ff).into()), - status_bar_background: Some(rgba(0xcfd0c4ff).into()), - title_bar_background: Some(rgba(0xcfd0c4ff).into()), - toolbar_background: Some(rgba(0xfdf6e3ff).into()), - tab_bar_background: Some(rgba(0xf3eddaff).into()), - tab_inactive_background: Some(rgba(0xf3eddaff).into()), - tab_active_background: Some(rgba(0xfdf6e3ff).into()), - scrollbar_thumb_background: Some(rgba(0x002b364c).into()), - scrollbar_thumb_hover_background: Some(rgba(0xdcdacbff).into()), - scrollbar_thumb_border: Some(rgba(0xdcdacbff).into()), + ghost_element_hover: Some(rgba(0x063541ff).into()), + ghost_element_active: Some(rgba(0x294e58ff).into()), + ghost_element_selected: Some(rgba(0x294e58ff).into()), + ghost_element_disabled: Some(rgba(0x04313cff).into()), + text: Some(rgba(0xfdf6e3ff).into()), + text_muted: Some(rgba(0x93a1a1ff).into()), + text_placeholder: Some(rgba(0x6f8389ff).into()), + text_disabled: Some(rgba(0x6f8389ff).into()), + text_accent: Some(rgba(0x288bd1ff).into()), + icon: Some(rgba(0xfdf6e3ff).into()), + icon_muted: Some(rgba(0x93a1a1ff).into()), + icon_disabled: Some(rgba(0x6f8389ff).into()), + icon_placeholder: Some(rgba(0x93a1a1ff).into()), + icon_accent: Some(rgba(0x288bd1ff).into()), + status_bar_background: Some(rgba(0x083743ff).into()), + title_bar_background: Some(rgba(0x083743ff).into()), + toolbar_background: Some(rgba(0x002b36ff).into()), + tab_bar_background: Some(rgba(0x04313cff).into()), + tab_inactive_background: Some(rgba(0x04313cff).into()), + tab_active_background: Some(rgba(0x002b36ff).into()), + scrollbar_thumb_background: Some(rgba(0xfdf6e34c).into()), + scrollbar_thumb_hover_background: Some(rgba(0x063541ff).into()), + scrollbar_thumb_border: Some(rgba(0x063541ff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0xf5eedbff).into()), - editor_foreground: Some(rgba(0x002b36ff).into()), - editor_background: Some(rgba(0xfdf6e3ff).into()), - editor_gutter_background: Some(rgba(0xfdf6e3ff).into()), - editor_subheader_background: Some(rgba(0xf3eddaff).into()), - editor_active_line_background: Some(rgba(0xf3eddabf).into()), - editor_highlighted_line_background: Some(rgba(0xf3eddaff).into()), - editor_line_number: Some(rgba(0x002b3659).into()), - editor_active_line_number: Some(rgba(0x002b36ff).into()), - editor_invisible: Some(rgba(0x34555eff).into()), - editor_wrap_guide: Some(rgba(0x002b360d).into()), - editor_active_wrap_guide: Some(rgba(0x002b361a).into()), - editor_document_highlight_read_background: Some(rgba(0x298bd11a).into()), + scrollbar_track_border: Some(rgba(0x032f3bff).into()), + editor_foreground: Some(rgba(0xfdf6e3ff).into()), + editor_background: Some(rgba(0x002b36ff).into()), + editor_gutter_background: Some(rgba(0x002b36ff).into()), + editor_subheader_background: Some(rgba(0x04313cff).into()), + editor_active_line_background: Some(rgba(0x04313cbf).into()), + editor_highlighted_line_background: Some(rgba(0x04313cff).into()), + editor_line_number: Some(rgba(0xfdf6e359).into()), + editor_active_line_number: Some(rgba(0xfdf6e3ff).into()), + editor_invisible: Some(rgba(0x93a1a1ff).into()), + editor_wrap_guide: Some(rgba(0xfdf6e30d).into()), + editor_active_wrap_guide: Some(rgba(0xfdf6e31a).into()), + editor_document_highlight_read_background: Some(rgba(0x288bd11a).into()), editor_document_highlight_write_background: Some(rgba(0x6d828866).into()), - terminal_background: Some(rgba(0xfdf6e3ff).into()), - terminal_ansi_bright_black: Some(rgba(0x7b8e91ff).into()), - terminal_ansi_bright_red: Some(rgba(0xfaa091ff).into()), - terminal_ansi_bright_green: Some(rgba(0xc6cb8bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe1c28aff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa5c3e9ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xf0a2bfff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fd0cbff).into()), - terminal_ansi_bright_white: Some(rgba(0x002b36ff).into()), - terminal_ansi_black: Some(rgba(0xfdf6e3ff).into()), + terminal_background: Some(rgba(0x002b36ff).into()), + terminal_ansi_bright_black: Some(rgba(0x5c7279ff).into()), + terminal_ansi_bright_red: Some(rgba(0x7d181cff).into()), + terminal_ansi_bright_green: Some(rgba(0x434a11ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x5d4310ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x214465ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x6f1f40ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x204e4aff).into()), + terminal_ansi_bright_white: Some(rgba(0xfdf6e3ff).into()), + terminal_ansi_black: Some(rgba(0x002b36ff).into()), terminal_ansi_red: Some(rgba(0xdc3330ff).into()), terminal_ansi_green: Some(rgba(0x859904ff).into()), - terminal_ansi_yellow: Some(rgba(0xb58904ff).into()), - terminal_ansi_blue: Some(rgba(0x298bd1ff).into()), - terminal_ansi_magenta: Some(rgba(0xd33882ff).into()), + terminal_ansi_yellow: Some(rgba(0xb58903ff).into()), + terminal_ansi_blue: Some(rgba(0x288bd1ff).into()), + terminal_ansi_magenta: Some(rgba(0xd33782ff).into()), terminal_ansi_cyan: Some(rgba(0x2ca198ff).into()), - terminal_ansi_white: Some(rgba(0x002b36ff).into()), - link_text_hover: Some(rgba(0x298bd1ff).into()), + terminal_ansi_white: Some(rgba(0xfdf6e3ff).into()), + link_text_hover: Some(rgba(0x288bd1ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xb58904ff).into()), - conflict_background: Some(rgba(0xf5e6d0ff).into()), - conflict_border: Some(rgba(0xebd3aaff).into()), + conflict: Some(rgba(0xb58903ff).into()), + conflict_background: Some(rgba(0x2f1e0cff).into()), + conflict_border: Some(rgba(0x473110ff).into()), created: Some(rgba(0x859904ff).into()), - created_background: Some(rgba(0xe9ead0ff).into()), - created_border: Some(rgba(0xd6d9abff).into()), + created_background: Some(rgba(0x1f210cff).into()), + created_border: Some(rgba(0x323610ff).into()), deleted: Some(rgba(0xdc3330ff).into()), - deleted_background: Some(rgba(0xffd9d2ff).into()), - deleted_border: Some(rgba(0xffbbafff).into()), + deleted_background: Some(rgba(0x4a090fff).into()), + deleted_border: Some(rgba(0x641116ff).into()), error: Some(rgba(0xdc3330ff).into()), - error_background: Some(rgba(0xffd9d2ff).into()), - error_border: Some(rgba(0xffbbafff).into()), - hidden: Some(rgba(0x6a7f86ff).into()), - hidden_background: Some(rgba(0xcfd0c4ff).into()), - hidden_border: Some(rgba(0xb7bdb6ff).into()), - hint: Some(rgba(0x5889a3ff).into()), - hint_background: Some(rgba(0xdbe6f6ff).into()), - hint_border: Some(rgba(0xbfd3efff).into()), - ignored: Some(rgba(0x34555eff).into()), - ignored_background: Some(rgba(0xcfd0c4ff).into()), - ignored_border: Some(rgba(0x9faaa8ff).into()), - info: Some(rgba(0x298bd1ff).into()), - info_background: Some(rgba(0xdbe6f6ff).into()), - info_border: Some(rgba(0xbfd3efff).into()), - modified: Some(rgba(0xb58904ff).into()), - modified_background: Some(rgba(0xf5e6d0ff).into()), - modified_border: Some(rgba(0xebd3aaff).into()), - predictive: Some(rgba(0x679aafff).into()), - predictive_background: Some(rgba(0xe9ead0ff).into()), - predictive_border: Some(rgba(0xd6d9abff).into()), - renamed: Some(rgba(0x298bd1ff).into()), - renamed_background: Some(rgba(0xdbe6f6ff).into()), - renamed_border: Some(rgba(0xbfd3efff).into()), + error_background: Some(rgba(0x4a090fff).into()), + error_border: Some(rgba(0x641116ff).into()), + hidden: Some(rgba(0x6f8389ff).into()), + hidden_background: Some(rgba(0x083743ff).into()), + hidden_border: Some(rgba(0x19424dff).into()), + hint: Some(rgba(0x4f8297ff).into()), + hint_background: Some(rgba(0x141f2cff).into()), + hint_border: Some(rgba(0x1c3249ff).into()), + ignored: Some(rgba(0x93a1a1ff).into()), + ignored_background: Some(rgba(0x083743ff).into()), + ignored_border: Some(rgba(0x2b4f58ff).into()), + info: Some(rgba(0x288bd1ff).into()), + info_background: Some(rgba(0x141f2cff).into()), + info_border: Some(rgba(0x1c3249ff).into()), + modified: Some(rgba(0xb58903ff).into()), + modified_background: Some(rgba(0x2f1e0cff).into()), + modified_border: Some(rgba(0x473110ff).into()), + predictive: Some(rgba(0x40728bff).into()), + predictive_background: Some(rgba(0x1f210cff).into()), + predictive_border: Some(rgba(0x323610ff).into()), + renamed: Some(rgba(0x288bd1ff).into()), + renamed_background: Some(rgba(0x141f2cff).into()), + renamed_border: Some(rgba(0x1c3249ff).into()), success: Some(rgba(0x859904ff).into()), - success_background: Some(rgba(0xe9ead0ff).into()), - success_border: Some(rgba(0xd6d9abff).into()), - unreachable: Some(rgba(0x34555eff).into()), - unreachable_background: Some(rgba(0xcfd0c4ff).into()), - unreachable_border: Some(rgba(0x9faaa8ff).into()), - warning: Some(rgba(0xb58904ff).into()), - warning_background: Some(rgba(0xf5e6d0ff).into()), - warning_border: Some(rgba(0xebd3aaff).into()), + success_background: Some(rgba(0x1f210cff).into()), + success_border: Some(rgba(0x323610ff).into()), + unreachable: Some(rgba(0x93a1a1ff).into()), + unreachable_background: Some(rgba(0x083743ff).into()), + unreachable_border: Some(rgba(0x2b4f58ff).into()), + warning: Some(rgba(0xb58903ff).into()), + warning_background: Some(rgba(0x2f1e0cff).into()), + warning_border: Some(rgba(0x473110ff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x298bd1ff).into(), - background: rgba(0x298bd1ff).into(), - selection: rgba(0x298bd13d).into(), + cursor: rgba(0x288bd1ff).into(), + background: rgba(0x288bd1ff).into(), + selection: rgba(0x288bd13d).into(), }, PlayerColor { - cursor: rgba(0xd33882ff).into(), - background: rgba(0xd33882ff).into(), - selection: rgba(0xd338823d).into(), + cursor: rgba(0xd33782ff).into(), + background: rgba(0xd33782ff).into(), + selection: rgba(0xd337823d).into(), }, PlayerColor { - cursor: rgba(0xcb4c18ff).into(), - background: rgba(0xcb4c18ff).into(), - selection: rgba(0xcb4c183d).into(), + cursor: rgba(0xcb4b17ff).into(), + background: rgba(0xcb4b17ff).into(), + selection: rgba(0xcb4b173d).into(), }, PlayerColor { - cursor: rgba(0x6d71c4ff).into(), - background: rgba(0x6d71c4ff).into(), - selection: rgba(0x6d71c43d).into(), + cursor: rgba(0x6c71c4ff).into(), + background: rgba(0x6c71c4ff).into(), + selection: rgba(0x6c71c43d).into(), }, PlayerColor { cursor: rgba(0x2ca198ff).into(), @@ -172,9 +172,9 @@ pub fn solarized() -> UserThemeFamily { selection: rgba(0xdc33303d).into(), }, PlayerColor { - cursor: rgba(0xb58904ff).into(), - background: rgba(0xb58904ff).into(), - selection: rgba(0xb589043d).into(), + cursor: rgba(0xb58903ff).into(), + background: rgba(0xb58903ff).into(), + selection: rgba(0xb589033d).into(), }, PlayerColor { cursor: rgba(0x859904ff).into(), @@ -187,7 +187,7 @@ pub fn solarized() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), @@ -201,14 +201,14 @@ pub fn solarized() -> UserThemeFamily { ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x30525bff).into()), + color: Some(rgba(0x99a5a4ff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x30525bff).into()), + color: Some(rgba(0x99a5a4ff).into()), ..Default::default() }, ), @@ -222,28 +222,28 @@ pub fn solarized() -> UserThemeFamily { ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0x002b36ff).into()), + color: Some(rgba(0xfdf6e3ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -251,21 +251,21 @@ pub fn solarized() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0xb58904ff).into()), + color: Some(rgba(0xb58903ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x5889a3ff).into()), + color: Some(rgba(0x4f8297ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -273,21 +273,21 @@ pub fn solarized() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -309,14 +309,14 @@ pub fn solarized() -> UserThemeFamily { ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x679aafff).into()), + color: Some(rgba(0x40728bff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -324,112 +324,112 @@ pub fn solarized() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0x002b36ff).into()), + color: Some(rgba(0xfdf6e3ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0x002b36ff).into()), + color: Some(rgba(0xfdf6e3ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0x05333eff).into()), + color: Some(rgba(0xefe9d6ff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0x05333eff).into()), + color: Some(rgba(0xefe9d6ff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0x05333eff).into()), + color: Some(rgba(0xefe9d6ff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0x05333eff).into()), + color: Some(rgba(0xefe9d6ff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0x05333eff).into()), + color: Some(rgba(0xefe9d6ff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x30525bff).into()), + color: Some(rgba(0x99a5a4ff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xcb4c18ff).into()), + color: Some(rgba(0xcb4b17ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0x002b36ff).into()), + color: Some(rgba(0xfdf6e3ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -444,14 +444,14 @@ pub fn solarized() -> UserThemeFamily { ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0x002b36ff).into()), + color: Some(rgba(0xfdf6e3ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x298bd1ff).into()), + color: Some(rgba(0x288bd1ff).into()), ..Default::default() }, ), @@ -460,150 +460,150 @@ pub fn solarized() -> UserThemeFamily { }, }, UserTheme { - name: "Solarized Dark".into(), - appearance: Appearance::Dark, + name: "Solarized Light".into(), + appearance: Appearance::Light, styles: UserThemeStylesRefinement { colors: ThemeColorsRefinement { - border: Some(rgba(0x2b4f58ff).into()), - border_variant: Some(rgba(0x063541ff).into()), - border_focused: Some(rgba(0x1c3249ff).into()), - border_selected: Some(rgba(0x1c3249ff).into()), + border: Some(rgba(0x9faaa8ff).into()), + border_variant: Some(rgba(0xdcdacbff).into()), + border_focused: Some(rgba(0xbfd3efff).into()), + border_selected: Some(rgba(0xbfd3efff).into()), border_transparent: Some(rgba(0x00000000).into()), - border_disabled: Some(rgba(0x19424dff).into()), - elevated_surface_background: Some(rgba(0x04313cff).into()), - surface_background: Some(rgba(0x04313cff).into()), - background: Some(rgba(0x083743ff).into()), - panel_background: Some(rgba(0x04313cff).into()), - element_background: Some(rgba(0x04313cff).into()), - element_hover: Some(rgba(0x063541ff).into()), - element_active: Some(rgba(0x294e58ff).into()), - element_selected: Some(rgba(0x294e58ff).into()), - element_disabled: Some(rgba(0x04313cff).into()), - drop_target_background: Some(rgba(0x93a1a180).into()), - ghost_element_background: Some(rgba(0x00000000).into()), - ghost_element_hover: Some(rgba(0x063541ff).into()), - ghost_element_active: Some(rgba(0x294e58ff).into()), - ghost_element_selected: Some(rgba(0x294e58ff).into()), - ghost_element_disabled: Some(rgba(0x04313cff).into()), - text: Some(rgba(0xfdf6e3ff).into()), - text_muted: Some(rgba(0x93a1a1ff).into()), - text_placeholder: Some(rgba(0x6f8389ff).into()), - text_disabled: Some(rgba(0x6f8389ff).into()), - text_accent: Some(rgba(0x288bd1ff).into()), - icon: Some(rgba(0xfdf6e3ff).into()), - icon_muted: Some(rgba(0x93a1a1ff).into()), - icon_disabled: Some(rgba(0x6f8389ff).into()), - icon_placeholder: Some(rgba(0x93a1a1ff).into()), - icon_accent: Some(rgba(0x288bd1ff).into()), - status_bar_background: Some(rgba(0x083743ff).into()), - title_bar_background: Some(rgba(0x083743ff).into()), - toolbar_background: Some(rgba(0x002b36ff).into()), - tab_bar_background: Some(rgba(0x04313cff).into()), - tab_inactive_background: Some(rgba(0x04313cff).into()), - tab_active_background: Some(rgba(0x002b36ff).into()), - scrollbar_thumb_background: Some(rgba(0xfdf6e34c).into()), - scrollbar_thumb_hover_background: Some(rgba(0x063541ff).into()), - scrollbar_thumb_border: Some(rgba(0x063541ff).into()), + border_disabled: Some(rgba(0xb7bdb6ff).into()), + elevated_surface_background: Some(rgba(0xf3eddaff).into()), + surface_background: Some(rgba(0xf3eddaff).into()), + background: Some(rgba(0xcfd0c4ff).into()), + panel_background: Some(rgba(0xf3eddaff).into()), + element_background: Some(rgba(0xf3eddaff).into()), + element_hover: Some(rgba(0xdcdacbff).into()), + element_active: Some(rgba(0xa2aca9ff).into()), + element_selected: Some(rgba(0xa2aca9ff).into()), + element_disabled: Some(rgba(0xf3eddaff).into()), + drop_target_background: Some(rgba(0x34555e80).into()), + ghost_element_background: Some(rgba(0x00000000).into()), + ghost_element_hover: Some(rgba(0xdcdacbff).into()), + ghost_element_active: Some(rgba(0xa2aca9ff).into()), + ghost_element_selected: Some(rgba(0xa2aca9ff).into()), + ghost_element_disabled: Some(rgba(0xf3eddaff).into()), + text: Some(rgba(0x002b36ff).into()), + text_muted: Some(rgba(0x34555eff).into()), + text_placeholder: Some(rgba(0x6a7f86ff).into()), + text_disabled: Some(rgba(0x6a7f86ff).into()), + text_accent: Some(rgba(0x298bd1ff).into()), + icon: Some(rgba(0x002b36ff).into()), + icon_muted: Some(rgba(0x34555eff).into()), + icon_disabled: Some(rgba(0x6a7f86ff).into()), + icon_placeholder: Some(rgba(0x34555eff).into()), + icon_accent: Some(rgba(0x298bd1ff).into()), + status_bar_background: Some(rgba(0xcfd0c4ff).into()), + title_bar_background: Some(rgba(0xcfd0c4ff).into()), + toolbar_background: Some(rgba(0xfdf6e3ff).into()), + tab_bar_background: Some(rgba(0xf3eddaff).into()), + tab_inactive_background: Some(rgba(0xf3eddaff).into()), + tab_active_background: Some(rgba(0xfdf6e3ff).into()), + scrollbar_thumb_background: Some(rgba(0x002b364c).into()), + scrollbar_thumb_hover_background: Some(rgba(0xdcdacbff).into()), + scrollbar_thumb_border: Some(rgba(0xdcdacbff).into()), scrollbar_track_background: Some(rgba(0x00000000).into()), - scrollbar_track_border: Some(rgba(0x032f3bff).into()), - editor_foreground: Some(rgba(0xfdf6e3ff).into()), - editor_background: Some(rgba(0x002b36ff).into()), - editor_gutter_background: Some(rgba(0x002b36ff).into()), - editor_subheader_background: Some(rgba(0x04313cff).into()), - editor_active_line_background: Some(rgba(0x04313cbf).into()), - editor_highlighted_line_background: Some(rgba(0x04313cff).into()), - editor_line_number: Some(rgba(0xfdf6e359).into()), - editor_active_line_number: Some(rgba(0xfdf6e3ff).into()), - editor_invisible: Some(rgba(0x93a1a1ff).into()), - editor_wrap_guide: Some(rgba(0xfdf6e30d).into()), - editor_active_wrap_guide: Some(rgba(0xfdf6e31a).into()), - editor_document_highlight_read_background: Some(rgba(0x288bd11a).into()), + scrollbar_track_border: Some(rgba(0xf5eedbff).into()), + editor_foreground: Some(rgba(0x002b36ff).into()), + editor_background: Some(rgba(0xfdf6e3ff).into()), + editor_gutter_background: Some(rgba(0xfdf6e3ff).into()), + editor_subheader_background: Some(rgba(0xf3eddaff).into()), + editor_active_line_background: Some(rgba(0xf3eddabf).into()), + editor_highlighted_line_background: Some(rgba(0xf3eddaff).into()), + editor_line_number: Some(rgba(0x002b3659).into()), + editor_active_line_number: Some(rgba(0x002b36ff).into()), + editor_invisible: Some(rgba(0x34555eff).into()), + editor_wrap_guide: Some(rgba(0x002b360d).into()), + editor_active_wrap_guide: Some(rgba(0x002b361a).into()), + editor_document_highlight_read_background: Some(rgba(0x298bd11a).into()), editor_document_highlight_write_background: Some(rgba(0x6d828866).into()), - terminal_background: Some(rgba(0x002b36ff).into()), - terminal_ansi_bright_black: Some(rgba(0x5c7279ff).into()), - terminal_ansi_bright_red: Some(rgba(0x7d181cff).into()), - terminal_ansi_bright_green: Some(rgba(0x434a11ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x5d4310ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x214465ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x6f1f40ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x204e4aff).into()), - terminal_ansi_bright_white: Some(rgba(0xfdf6e3ff).into()), - terminal_ansi_black: Some(rgba(0x002b36ff).into()), + terminal_background: Some(rgba(0xfdf6e3ff).into()), + terminal_ansi_bright_black: Some(rgba(0x7b8e91ff).into()), + terminal_ansi_bright_red: Some(rgba(0xfaa091ff).into()), + terminal_ansi_bright_green: Some(rgba(0xc6cb8bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe1c28aff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa5c3e9ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xf0a2bfff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fd0cbff).into()), + terminal_ansi_bright_white: Some(rgba(0x002b36ff).into()), + terminal_ansi_black: Some(rgba(0xfdf6e3ff).into()), terminal_ansi_red: Some(rgba(0xdc3330ff).into()), terminal_ansi_green: Some(rgba(0x859904ff).into()), - terminal_ansi_yellow: Some(rgba(0xb58903ff).into()), - terminal_ansi_blue: Some(rgba(0x288bd1ff).into()), - terminal_ansi_magenta: Some(rgba(0xd33782ff).into()), + terminal_ansi_yellow: Some(rgba(0xb58904ff).into()), + terminal_ansi_blue: Some(rgba(0x298bd1ff).into()), + terminal_ansi_magenta: Some(rgba(0xd33882ff).into()), terminal_ansi_cyan: Some(rgba(0x2ca198ff).into()), - terminal_ansi_white: Some(rgba(0xfdf6e3ff).into()), - link_text_hover: Some(rgba(0x288bd1ff).into()), + terminal_ansi_white: Some(rgba(0x002b36ff).into()), + link_text_hover: Some(rgba(0x298bd1ff).into()), ..Default::default() }, status: StatusColorsRefinement { - conflict: Some(rgba(0xb58903ff).into()), - conflict_background: Some(rgba(0x2f1e0cff).into()), - conflict_border: Some(rgba(0x473110ff).into()), + conflict: Some(rgba(0xb58904ff).into()), + conflict_background: Some(rgba(0xf5e6d0ff).into()), + conflict_border: Some(rgba(0xebd3aaff).into()), created: Some(rgba(0x859904ff).into()), - created_background: Some(rgba(0x1f210cff).into()), - created_border: Some(rgba(0x323610ff).into()), + created_background: Some(rgba(0xe9ead0ff).into()), + created_border: Some(rgba(0xd6d9abff).into()), deleted: Some(rgba(0xdc3330ff).into()), - deleted_background: Some(rgba(0x4a090fff).into()), - deleted_border: Some(rgba(0x641116ff).into()), + deleted_background: Some(rgba(0xffd9d2ff).into()), + deleted_border: Some(rgba(0xffbbafff).into()), error: Some(rgba(0xdc3330ff).into()), - error_background: Some(rgba(0x4a090fff).into()), - error_border: Some(rgba(0x641116ff).into()), - hidden: Some(rgba(0x6f8389ff).into()), - hidden_background: Some(rgba(0x083743ff).into()), - hidden_border: Some(rgba(0x19424dff).into()), - hint: Some(rgba(0x4f8297ff).into()), - hint_background: Some(rgba(0x141f2cff).into()), - hint_border: Some(rgba(0x1c3249ff).into()), - ignored: Some(rgba(0x93a1a1ff).into()), - ignored_background: Some(rgba(0x083743ff).into()), - ignored_border: Some(rgba(0x2b4f58ff).into()), - info: Some(rgba(0x288bd1ff).into()), - info_background: Some(rgba(0x141f2cff).into()), - info_border: Some(rgba(0x1c3249ff).into()), - modified: Some(rgba(0xb58903ff).into()), - modified_background: Some(rgba(0x2f1e0cff).into()), - modified_border: Some(rgba(0x473110ff).into()), - predictive: Some(rgba(0x40728bff).into()), - predictive_background: Some(rgba(0x1f210cff).into()), - predictive_border: Some(rgba(0x323610ff).into()), - renamed: Some(rgba(0x288bd1ff).into()), - renamed_background: Some(rgba(0x141f2cff).into()), - renamed_border: Some(rgba(0x1c3249ff).into()), + error_background: Some(rgba(0xffd9d2ff).into()), + error_border: Some(rgba(0xffbbafff).into()), + hidden: Some(rgba(0x6a7f86ff).into()), + hidden_background: Some(rgba(0xcfd0c4ff).into()), + hidden_border: Some(rgba(0xb7bdb6ff).into()), + hint: Some(rgba(0x5889a3ff).into()), + hint_background: Some(rgba(0xdbe6f6ff).into()), + hint_border: Some(rgba(0xbfd3efff).into()), + ignored: Some(rgba(0x34555eff).into()), + ignored_background: Some(rgba(0xcfd0c4ff).into()), + ignored_border: Some(rgba(0x9faaa8ff).into()), + info: Some(rgba(0x298bd1ff).into()), + info_background: Some(rgba(0xdbe6f6ff).into()), + info_border: Some(rgba(0xbfd3efff).into()), + modified: Some(rgba(0xb58904ff).into()), + modified_background: Some(rgba(0xf5e6d0ff).into()), + modified_border: Some(rgba(0xebd3aaff).into()), + predictive: Some(rgba(0x679aafff).into()), + predictive_background: Some(rgba(0xe9ead0ff).into()), + predictive_border: Some(rgba(0xd6d9abff).into()), + renamed: Some(rgba(0x298bd1ff).into()), + renamed_background: Some(rgba(0xdbe6f6ff).into()), + renamed_border: Some(rgba(0xbfd3efff).into()), success: Some(rgba(0x859904ff).into()), - success_background: Some(rgba(0x1f210cff).into()), - success_border: Some(rgba(0x323610ff).into()), - unreachable: Some(rgba(0x93a1a1ff).into()), - unreachable_background: Some(rgba(0x083743ff).into()), - unreachable_border: Some(rgba(0x2b4f58ff).into()), - warning: Some(rgba(0xb58903ff).into()), - warning_background: Some(rgba(0x2f1e0cff).into()), - warning_border: Some(rgba(0x473110ff).into()), + success_background: Some(rgba(0xe9ead0ff).into()), + success_border: Some(rgba(0xd6d9abff).into()), + unreachable: Some(rgba(0x34555eff).into()), + unreachable_background: Some(rgba(0xcfd0c4ff).into()), + unreachable_border: Some(rgba(0x9faaa8ff).into()), + warning: Some(rgba(0xb58904ff).into()), + warning_background: Some(rgba(0xf5e6d0ff).into()), + warning_border: Some(rgba(0xebd3aaff).into()), ..Default::default() }, player: Some(PlayerColors(vec![ PlayerColor { - cursor: rgba(0x288bd1ff).into(), - background: rgba(0x288bd1ff).into(), - selection: rgba(0x288bd13d).into(), + cursor: rgba(0x298bd1ff).into(), + background: rgba(0x298bd1ff).into(), + selection: rgba(0x298bd13d).into(), }, PlayerColor { - cursor: rgba(0xd33782ff).into(), - background: rgba(0xd33782ff).into(), - selection: rgba(0xd337823d).into(), + cursor: rgba(0xd33882ff).into(), + background: rgba(0xd33882ff).into(), + selection: rgba(0xd338823d).into(), }, PlayerColor { - cursor: rgba(0xcb4b17ff).into(), - background: rgba(0xcb4b17ff).into(), - selection: rgba(0xcb4b173d).into(), + cursor: rgba(0xcb4c18ff).into(), + background: rgba(0xcb4c18ff).into(), + selection: rgba(0xcb4c183d).into(), }, PlayerColor { - cursor: rgba(0x6c71c4ff).into(), - background: rgba(0x6c71c4ff).into(), - selection: rgba(0x6c71c43d).into(), + cursor: rgba(0x6d71c4ff).into(), + background: rgba(0x6d71c4ff).into(), + selection: rgba(0x6d71c43d).into(), }, PlayerColor { cursor: rgba(0x2ca198ff).into(), @@ -616,9 +616,9 @@ pub fn solarized() -> UserThemeFamily { selection: rgba(0xdc33303d).into(), }, PlayerColor { - cursor: rgba(0xb58903ff).into(), - background: rgba(0xb58903ff).into(), - selection: rgba(0xb589033d).into(), + cursor: rgba(0xb58904ff).into(), + background: rgba(0xb58904ff).into(), + selection: rgba(0xb589043d).into(), }, PlayerColor { cursor: rgba(0x859904ff).into(), @@ -631,7 +631,7 @@ pub fn solarized() -> UserThemeFamily { ( "attribute".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), @@ -645,14 +645,14 @@ pub fn solarized() -> UserThemeFamily { ( "comment".into(), UserHighlightStyle { - color: Some(rgba(0x99a5a4ff).into()), + color: Some(rgba(0x30525bff).into()), ..Default::default() }, ), ( "comment.doc".into(), UserHighlightStyle { - color: Some(rgba(0x99a5a4ff).into()), + color: Some(rgba(0x30525bff).into()), ..Default::default() }, ), @@ -666,28 +666,28 @@ pub fn solarized() -> UserThemeFamily { ( "constructor".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), ( "embedded".into(), UserHighlightStyle { - color: Some(rgba(0xfdf6e3ff).into()), + color: Some(rgba(0x002b36ff).into()), ..Default::default() }, ), ( "emphasis".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), ( "emphasis.strong".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -695,21 +695,21 @@ pub fn solarized() -> UserThemeFamily { ( "enum".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), ..Default::default() }, ), ( "function".into(), UserHighlightStyle { - color: Some(rgba(0xb58903ff).into()), + color: Some(rgba(0xb58904ff).into()), ..Default::default() }, ), ( "hint".into(), UserHighlightStyle { - color: Some(rgba(0x4f8297ff).into()), + color: Some(rgba(0x5889a3ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -717,21 +717,21 @@ pub fn solarized() -> UserThemeFamily { ( "keyword".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), ( "label".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), ( "link_text".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -753,14 +753,14 @@ pub fn solarized() -> UserThemeFamily { ( "operator".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), ..Default::default() }, ), ( "predictive".into(), UserHighlightStyle { - color: Some(rgba(0x40728bff).into()), + color: Some(rgba(0x679aafff).into()), font_style: Some(UserFontStyle::Italic), ..Default::default() }, @@ -768,112 +768,112 @@ pub fn solarized() -> UserThemeFamily { ( "preproc".into(), UserHighlightStyle { - color: Some(rgba(0xfdf6e3ff).into()), + color: Some(rgba(0x002b36ff).into()), ..Default::default() }, ), ( "primary".into(), UserHighlightStyle { - color: Some(rgba(0xfdf6e3ff).into()), + color: Some(rgba(0x002b36ff).into()), ..Default::default() }, ), ( "property".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), ( "punctuation".into(), UserHighlightStyle { - color: Some(rgba(0xefe9d6ff).into()), + color: Some(rgba(0x05333eff).into()), ..Default::default() }, ), ( "punctuation.bracket".into(), UserHighlightStyle { - color: Some(rgba(0xefe9d6ff).into()), + color: Some(rgba(0x05333eff).into()), ..Default::default() }, ), ( "punctuation.delimiter".into(), UserHighlightStyle { - color: Some(rgba(0xefe9d6ff).into()), + color: Some(rgba(0x05333eff).into()), ..Default::default() }, ), ( "punctuation.list_marker".into(), UserHighlightStyle { - color: Some(rgba(0xefe9d6ff).into()), + color: Some(rgba(0x05333eff).into()), ..Default::default() }, ), ( "punctuation.special".into(), UserHighlightStyle { - color: Some(rgba(0xefe9d6ff).into()), + color: Some(rgba(0x05333eff).into()), ..Default::default() }, ), ( "string".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), ..Default::default() }, ), ( "string.escape".into(), UserHighlightStyle { - color: Some(rgba(0x99a5a4ff).into()), + color: Some(rgba(0x30525bff).into()), ..Default::default() }, ), ( "string.regex".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), ..Default::default() }, ), ( "string.special".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), ..Default::default() }, ), ( "string.special.symbol".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), ..Default::default() }, ), ( "tag".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), ( "text.literal".into(), UserHighlightStyle { - color: Some(rgba(0xcb4b17ff).into()), + color: Some(rgba(0xcb4c18ff).into()), ..Default::default() }, ), ( "title".into(), UserHighlightStyle { - color: Some(rgba(0xfdf6e3ff).into()), + color: Some(rgba(0x002b36ff).into()), font_weight: Some(UserFontWeight(700.0)), ..Default::default() }, @@ -888,14 +888,14 @@ pub fn solarized() -> UserThemeFamily { ( "variable".into(), UserHighlightStyle { - color: Some(rgba(0xfdf6e3ff).into()), + color: Some(rgba(0x002b36ff).into()), ..Default::default() }, ), ( "variant".into(), UserHighlightStyle { - color: Some(rgba(0x288bd1ff).into()), + color: Some(rgba(0x298bd1ff).into()), ..Default::default() }, ), diff --git a/crates/theme_importer/Cargo.toml b/crates/theme_importer/Cargo.toml index 5290b8a1a2ee378a5991e2587b2601e8c7e6ccc6..1b0c39fee72c2cb1fdf6b5d419934441b2643c0f 100644 --- a/crates/theme_importer/Cargo.toml +++ b/crates/theme_importer/Cargo.toml @@ -11,6 +11,7 @@ clap = { version = "4.4", features = ["derive"] } convert_case = "0.6.0" gpui = { path = "../gpui" } indexmap = { version = "1.6.2", features = ["serde"] } +indoc.workspace = true json_comments = "0.2.2" log.workspace = true palette = { version = "0.7.3", default-features = false, features = ["std"] } diff --git a/crates/theme_importer/src/main.rs b/crates/theme_importer/src/main.rs index 0cb5c22930c1ce8abafd44bcc398b4c8974ebe06..3a7e0b20d55e2ecd92ff627cb878af3faaae1775 100644 --- a/crates/theme_importer/src/main.rs +++ b/crates/theme_importer/src/main.rs @@ -18,6 +18,7 @@ use clap::Parser; use convert_case::{Case, Casing}; use gpui::serde_json; use indexmap::IndexMap; +use indoc::formatdoc; use json_comments::StripComments; use log::LevelFilter; use serde::Deserialize; @@ -28,7 +29,7 @@ use crate::theme_printer::UserThemeFamilyPrinter; use crate::vscode::VsCodeTheme; use crate::vscode::VsCodeThemeConverter; use crate::zed1::theme::Theme as Zed1Theme; -use crate::zed1::Zed1ThemeConverter; +use crate::zed1::{zed1_theme_licenses, Zed1ThemeConverter}; #[derive(Debug, Deserialize)] struct FamilyMetadata { @@ -200,7 +201,13 @@ fn main() -> Result<()> { "Summercamp", ]; - let mut zed1_themes_by_family: HashMap> = HashMap::from_iter( + let zed1_licenses_by_theme: HashMap = HashMap::from_iter( + zed1_theme_licenses() + .into_iter() + .map(|theme_license| (theme_license.theme.clone(), theme_license)), + ); + + let mut zed1_themes_by_family: IndexMap> = IndexMap::from_iter( zed1_theme_familes .into_iter() .map(|family| (family.to_string(), Vec::new())), @@ -254,13 +261,44 @@ fn main() -> Result<()> { themes_for_family.push(theme); } + zed1_themes_by_family.sort_keys(); + + let mut licenses = Vec::new(); + for (family, themes) in zed1_themes_by_family { - let theme_family = UserThemeFamily { + let mut theme_family = UserThemeFamily { name: family, author: "Zed Industries".to_string(), themes, }; + theme_family + .themes + .sort_unstable_by_key(|theme| theme.name.clone()); + + for theme in &theme_family.themes { + let license = zed1_licenses_by_theme + .get(&theme.name) + .ok_or_else(|| anyhow!("missing license for theme: '{}'", theme.name))?; + + let license_header = match license.license_url.as_ref() { + Some(license_url) => { + format!("[{theme_name}]({license_url})", theme_name = theme.name) + } + None => theme.name.clone(), + }; + + licenses.push(formatdoc!( + " + ## {license_header} + + {license_text} + ******************************************************************************** + ", + license_text = license.license_text + )); + } + theme_families.push(theme_family); } @@ -357,6 +395,12 @@ fn main() -> Result<()> { mod_rs_file.write_all(mod_rs_contents.as_bytes())?; + log::info!("Writing LICENSES file..."); + + let mut licenses_file = File::create(themes_output_path.join(format!("LICENSES")))?; + + licenses_file.write_all(licenses.join("\n").as_bytes())?; + log::info!("Formatting themes..."); let format_result = format_themes_crate() diff --git a/crates/theme_importer/src/zed1.rs b/crates/theme_importer/src/zed1.rs index 9d809e5cd0e4bb3e24d70b855bee0b27d663717d..6d4fd2b235bd77e370236580fb49b649c6b757a8 100644 --- a/crates/theme_importer/src/zed1.rs +++ b/crates/theme_importer/src/zed1.rs @@ -1,4 +1,6 @@ mod converter; +mod licenses; pub mod theme; pub use converter::*; +pub use licenses::*; diff --git a/crates/theme_importer/src/zed1/licenses.rs b/crates/theme_importer/src/zed1/licenses.rs new file mode 100644 index 0000000000000000000000000000000000000000..8085644714272e8173f9bdb43789b20ffae97a79 --- /dev/null +++ b/crates/theme_importer/src/zed1/licenses.rs @@ -0,0 +1,1192 @@ +use std::fmt::Display; + +use indoc::indoc; + +#[derive(Debug)] +pub enum License { + Mit, + // We don't currently have any themes using the Apache 2.0 license. + #[allow(unused)] + Apache2, +} + +impl Display for License { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + License::Mit => "MIT", + License::Apache2 => "Apache License 2.0", + } + ) + } +} + +pub struct Zed1ThemeLicense { + pub theme: String, + pub license: License, + pub license_url: Option, + pub license_text: &'static str, +} + +pub fn zed1_theme_licenses() -> Vec { + vec![ + Zed1ThemeLicense { + theme: "One Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://github.com/atom/atom/tree/master/packages/one-dark-ui".to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2014 GitHub Inc. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "One Light".to_string(), + license: License::Mit, + license_url: Some( + "https://github.com/atom/atom/tree/master/packages/one-light-ui".to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2014 GitHub Inc. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Ayu Light".to_string(), + license: License::Mit, + license_url: Some("https://github.com/dempfi/ayu".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2016 Ike Ku + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Ayu Dark".to_string(), + license: License::Mit, + license_url: Some("https://github.com/dempfi/ayu".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2016 Ike Ku + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Ayu Mirage".to_string(), + license: License::Mit, + license_url: Some("https://github.com/dempfi/ayu".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2016 Ike Ku + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Gruvbox Dark".to_string(), + license: License::Mit, + license_url: Some("https://github.com/morhetz/gruvbox".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Gruvbox Dark Hard".to_string(), + license: License::Mit, + license_url: Some("https://github.com/morhetz/gruvbox".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Gruvbox Dark Soft".to_string(), + license: License::Mit, + license_url: Some("https://github.com/morhetz/gruvbox".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Gruvbox Light".to_string(), + license: License::Mit, + license_url: Some("https://github.com/morhetz/gruvbox".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Gruvbox Light Hard".to_string(), + license: License::Mit, + license_url: Some("https://github.com/morhetz/gruvbox".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Gruvbox Light Soft".to_string(), + license: License::Mit, + license_url: Some("https://github.com/morhetz/gruvbox".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Rosé Pine".to_string(), + license: License::Mit, + license_url: Some("https://github.com/edunfelt/base16-rose-pine-scheme".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2021 Emilia Dunfelt + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Rosé Pine Dawn".to_string(), + license: License::Mit, + license_url: Some("https://github.com/edunfelt/base16-rose-pine-scheme".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2021 Emilia Dunfelt + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Rosé Pine Moon".to_string(), + license: License::Mit, + license_url: Some("https://github.com/edunfelt/base16-rose-pine-scheme".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2021 Emilia Dunfelt + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Sandcastle".to_string(), + license: License::Mit, + license_url: Some("https://github.com/gessig/base16-sandcastle-scheme".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2019 George Essig + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Solarized Dark".to_string(), + license: License::Mit, + license_url: Some("https://github.com/altercation/solarized".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2011 Ethan Schoonover + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Solarized Light".to_string(), + license: License::Mit, + license_url: Some("https://github.com/altercation/solarized".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2011 Ethan Schoonover + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Andromeda".to_string(), + license: License::Mit, + license_url: Some("https://github.com/EliverLara/Andromeda".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2017 + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Summercamp".to_string(), + license: License::Mit, + license_url: Some("https://github.com/zoefiri/base16-sc".to_string()), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2019 Zoe FiriH + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Cave Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Cave Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Dune Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Dune Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Estuary Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Estuary Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Forest Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Forest Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Heath Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Heath Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Lakeside Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Lakeside Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Plateau Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Plateau Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Savanna Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Savanna Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Seaside Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Seaside Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Sulphurpool Dark".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + Zed1ThemeLicense { + theme: "Atelier Sulphurpool Light".to_string(), + license: License::Mit, + license_url: Some( + "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/" + .to_string(), + ), + license_text: indoc! {r#" + The MIT License (MIT) + + Copyright (c) 2023 Bram de Haan, http://atelierbramdehaan.nl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + "#}, + }, + ] +} diff --git a/script/generate-licenses b/script/generate-licenses index 9a2fe8921a8fe06e4716b98bcec9b2b28af4a994..7c5ac372b1053ba6cc701e3edc723258a194d88a 100755 --- a/script/generate-licenses +++ b/script/generate-licenses @@ -9,10 +9,7 @@ OUTPUT_FILE=$(pwd)/assets/licenses.md echo -e "# ###### THEME LICENSES ######\n" >> $OUTPUT_FILE echo "Generating theme licenses" -cd styles -npm --silent ci -npm run --silent build-licenses >> $OUTPUT_FILE -cd .. +cat crates/theme/src/themes/LICENSES >> $OUTPUT_FILE echo -e "# ###### CODE LICENSES ######\n" >> $OUTPUT_FILE