Merge branch 'main' into completion-menu-detail-layout

Julia created

Change summary

Cargo.lock                                   |   2 
crates/assistant2/src/assistant_panel.rs     |   4 
crates/client/src/telemetry.rs               |  20 
crates/client2/src/telemetry.rs              |  36 +
crates/collab/k8s                            |   1 
crates/collab/k8s/environments/production.sh |   4 
crates/collab/k8s/environments/staging.sh    |   4 
crates/collab/k8s/manifest.template.yml      | 177 ------
crates/collab/k8s/migrate.template.yml       |  21 
crates/collab2/k8s/collab.template.yml       |  56 --
crates/collab2/k8s/environments/nightly.sh   |   2 
crates/collab2/k8s/postgrest.template.yml    |  55 ++
crates/collab_ui2/src/chat_panel.rs          |   4 
crates/collab_ui2/src/collab_panel.rs        |  21 
crates/collab_ui2/src/notification_panel.rs  |   4 
crates/diagnostics2/src/diagnostics.rs       |  34 
crates/editor2/src/display_map.rs            |   2 
crates/editor2/src/editor.rs                 |  37 
crates/editor2/src/element.rs                | 103 ++-
crates/editor2/src/hover_popover.rs          |  54 +
crates/gpui2/src/elements/overlay.rs         |   4 
crates/project_panel2/src/project_panel.rs   |   4 
crates/terminal_view2/src/terminal_panel.rs  |   4 
crates/theme2/src/one_themes.rs              |  28 +
crates/theme2/src/styles/status.rs           |  84 +++
crates/theme2/src/theme2.rs                  |  21 
crates/theme2/src/themes/andromeda.rs        |  30 +
crates/theme2/src/themes/atelier.rs          | 600 +++++++++++++++++++++
crates/theme2/src/themes/ayu.rs              |  90 +++
crates/theme2/src/themes/gruvbox.rs          | 180 ++++++
crates/theme2/src/themes/one.rs              |  60 ++
crates/theme2/src/themes/rose_pine.rs        |  90 +++
crates/theme2/src/themes/sandcastle.rs       |  30 +
crates/theme2/src/themes/solarized.rs        |  60 ++
crates/theme2/src/themes/summercamp.rs       |  30 +
crates/theme_importer/src/theme_printer.rs   |  28 +
crates/theme_importer/src/zed1/converter.rs  |  37 +
crates/theme_selector/Cargo.toml             |   1 
crates/theme_selector/src/theme_selector.rs  |  17 
crates/theme_selector2/Cargo.toml            |  11 
crates/theme_selector2/src/theme_selector.rs |  14 
crates/workspace2/src/dock.rs                |  14 
crates/zed/src/main.rs                       |   5 
crates/zed2/src/main.rs                      |   5 
script/deploy-collab                         |   7 
script/deploy-postgrest                      |  25 
46 files changed, 1,691 insertions(+), 429 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -9838,6 +9838,7 @@ dependencies = [
 name = "theme_selector"
 version = "0.1.0"
 dependencies = [
+ "client",
  "editor",
  "feature_flags",
  "fs",
@@ -9858,6 +9859,7 @@ dependencies = [
 name = "theme_selector2"
 version = "0.1.0"
 dependencies = [
+ "client2",
  "editor2",
  "feature_flags2",
  "fs2",

crates/assistant2/src/assistant_panel.rs 🔗

@@ -1281,6 +1281,10 @@ impl Panel for AssistantPanel {
         Some(Icon::Ai)
     }
 
+    fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> {
+        Some("Assistant Panel")
+    }
+
     fn toggle_action(&self) -> Box<dyn Action> {
         Box::new(ToggleFocus)
     }

crates/client/src/telemetry.rs 🔗

@@ -113,6 +113,11 @@ pub enum ClickhouseEvent {
         operation: &'static str,
         milliseconds_since_first_event: i64,
     },
+    Setting {
+        setting: &'static str,
+        value: String,
+        milliseconds_since_first_event: i64,
+    },
 }
 
 #[cfg(debug_assertions)]
@@ -354,6 +359,21 @@ impl Telemetry {
         self.report_clickhouse_event(event, telemetry_settings, immediate_flush)
     }
 
+    pub fn report_setting_event(
+        self: &Arc<Self>,
+        telemetry_settings: TelemetrySettings,
+        setting: &'static str,
+        value: String,
+    ) {
+        let event = ClickhouseEvent::Setting {
+            setting,
+            value,
+            milliseconds_since_first_event: self.milliseconds_since_first_event(),
+        };
+
+        self.report_clickhouse_event(event, telemetry_settings, false)
+    }
+
     fn milliseconds_since_first_event(&self) -> i64 {
         let mut state = self.state.lock();
         match state.first_event_datetime {

crates/client2/src/telemetry.rs 🔗

@@ -28,6 +28,7 @@ struct TelemetryState {
     app_metadata: AppMetadata,
     architecture: &'static str,
     clickhouse_events_queue: Vec<ClickhouseEventWrapper>,
+    flush_clickhouse_events_task: Option<Task<()>>,
     log_file: Option<NamedTempFile>,
     is_staff: Option<bool>,
     first_event_datetime: Option<DateTime<Utc>>,
@@ -111,6 +112,11 @@ pub enum ClickhouseEvent {
         operation: &'static str,
         milliseconds_since_first_event: i64,
     },
+    Setting {
+        setting: &'static str,
+        value: String,
+        milliseconds_since_first_event: i64,
+    },
 }
 
 #[cfg(debug_assertions)]
@@ -119,6 +125,12 @@ const MAX_QUEUE_LEN: usize = 1;
 #[cfg(not(debug_assertions))]
 const MAX_QUEUE_LEN: usize = 50;
 
+#[cfg(debug_assertions)]
+const DEBOUNCE_INTERVAL: Duration = Duration::from_secs(1);
+
+#[cfg(not(debug_assertions))]
+const DEBOUNCE_INTERVAL: Duration = Duration::from_secs(60 * 5);
+
 impl Telemetry {
     pub fn new(client: Arc<dyn HttpClient>, cx: &mut AppContext) -> Arc<Self> {
         let release_channel = if cx.has_global::<ReleaseChannel>() {
@@ -139,6 +151,7 @@ impl Telemetry {
                 metrics_id: None,
                 session_id: None,
                 clickhouse_events_queue: Default::default(),
+                flush_clickhouse_events_task: Default::default(),
                 log_file: None,
                 is_staff: None,
                 first_event_datetime: None,
@@ -370,6 +383,21 @@ impl Telemetry {
         self.report_clickhouse_event(event, telemetry_settings, immediate_flush)
     }
 
+    pub fn report_setting_event(
+        self: &Arc<Self>,
+        telemetry_settings: TelemetrySettings,
+        setting: &'static str,
+        value: String,
+    ) {
+        let event = ClickhouseEvent::Setting {
+            setting,
+            value,
+            milliseconds_since_first_event: self.milliseconds_since_first_event(),
+        };
+
+        self.report_clickhouse_event(event, telemetry_settings, false)
+    }
+
     fn milliseconds_since_first_event(&self) -> i64 {
         let mut state = self.state.lock();
         match state.first_event_datetime {
@@ -404,6 +432,13 @@ impl Telemetry {
             if immediate_flush || state.clickhouse_events_queue.len() >= MAX_QUEUE_LEN {
                 drop(state);
                 self.flush_clickhouse_events();
+            } else {
+                let this = self.clone();
+                let executor = self.executor.clone();
+                state.flush_clickhouse_events_task = Some(self.executor.spawn(async move {
+                    executor.timer(DEBOUNCE_INTERVAL).await;
+                    this.flush_clickhouse_events();
+                }));
             }
         }
     }
@@ -424,6 +459,7 @@ impl Telemetry {
         let mut state = self.state.lock();
         state.first_event_datetime = None;
         let mut events = mem::take(&mut state.clickhouse_events_queue);
+        state.flush_clickhouse_events_task.take();
         drop(state);
 
         let this = self.clone();

crates/collab/k8s/manifest.template.yml 🔗

@@ -1,177 +0,0 @@
----
-apiVersion: v1
-kind: Namespace
-metadata:
-  name: ${ZED_KUBE_NAMESPACE}
-
----
-kind: Service
-apiVersion: v1
-metadata:
-  namespace: ${ZED_KUBE_NAMESPACE}
-  name: collab
-  annotations:
-    service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
-    service.beta.kubernetes.io/do-loadbalancer-certificate-id: ${ZED_DO_CERTIFICATE_ID}
-spec:
-  type: LoadBalancer
-  selector:
-    app: collab
-  ports:
-    - name: web
-      protocol: TCP
-      port: 443
-      targetPort: 8080
-
----
-kind: Service
-apiVersion: v1
-metadata:
-  namespace: ${ZED_KUBE_NAMESPACE}
-  name: pgadmin
-  annotations:
-    service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
-    service.beta.kubernetes.io/do-loadbalancer-certificate-id: ${ZED_DO_CERTIFICATE_ID}
-spec:
-  type: LoadBalancer
-  selector:
-    app: postgrest
-  ports:
-    - name: web
-      protocol: TCP
-      port: 443
-      targetPort: 8080
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  namespace: ${ZED_KUBE_NAMESPACE}
-  name: collab
-
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: collab
-  template:
-    metadata:
-      labels:
-        app: collab
-      annotations:
-        ad.datadoghq.com/collab.check_names: |
-          ["openmetrics"]
-        ad.datadoghq.com/collab.init_configs: |
-          [{}]
-        ad.datadoghq.com/collab.instances: |
-          [
-              {
-              "openmetrics_endpoint": "http://%%host%%:%%port%%/metrics",
-              "namespace": "collab_${ZED_KUBE_NAMESPACE}",
-              "metrics": [".*"]
-              }
-          ]
-    spec:
-      containers:
-        - name: collab
-          image: "${ZED_IMAGE_ID}"
-          args:
-            - serve
-          ports:
-            - containerPort: 8080
-              protocol: TCP
-          livenessProbe:
-            httpGet:
-              path: /healthz
-              port: 8080
-            initialDelaySeconds: 5
-            periodSeconds: 5
-            timeoutSeconds: 5
-          readinessProbe:
-            httpGet:
-              path: /
-              port: 8080
-            initialDelaySeconds: 1
-            periodSeconds: 1
-          env:
-            - name: HTTP_PORT
-              value: "8080"
-            - name: DATABASE_URL
-              valueFrom:
-                secretKeyRef:
-                  name: database
-                  key: url
-            - name: DATABASE_MAX_CONNECTIONS
-              value: "${DATABASE_MAX_CONNECTIONS}"
-            - name: API_TOKEN
-              valueFrom:
-                secretKeyRef:
-                  name: api
-                  key: token
-            - name: LIVE_KIT_SERVER
-              valueFrom:
-                secretKeyRef:
-                  name: livekit
-                  key: server
-            - name: LIVE_KIT_KEY
-              valueFrom:
-                secretKeyRef:
-                  name: livekit
-                  key: key
-            - name: LIVE_KIT_SECRET
-              valueFrom:
-                secretKeyRef:
-                  name: livekit
-                  key: secret
-            - name: INVITE_LINK_PREFIX
-              value: ${INVITE_LINK_PREFIX}
-            - name: RUST_BACKTRACE
-              value: "1"
-            - name: RUST_LOG
-              value: ${RUST_LOG}
-            - name: LOG_JSON
-              value: "true"
-            - name: ZED_ENVIRONMENT
-              value: ${ZED_ENVIRONMENT}
-          securityContext:
-            capabilities:
-              # FIXME - Switch to the more restrictive `PERFMON` capability.
-              # This capability isn't yet available in a stable version of Debian.
-              add: ["SYS_ADMIN"]
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  namespace: ${ZED_KUBE_NAMESPACE}
-  name: postgrest
-
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: postgrest
-  template:
-    metadata:
-      labels:
-        app: postgrest
-    spec:
-      containers:
-        - name: postgrest
-          image: "postgrest/postgrest"
-          ports:
-            - containerPort: 8080
-              protocol: TCP
-          env:
-            - name: PGRST_SERVER_PORT
-              value: "8080"
-            - name: PGRST_DB_URI
-              valueFrom:
-                secretKeyRef:
-                  name: database
-                  key: url
-            - name: PGRST_JWT_SECRET
-              valueFrom:
-                secretKeyRef:
-                  name: postgrest
-                  key: jwt_secret

crates/collab/k8s/migrate.template.yml 🔗

@@ -1,21 +0,0 @@
-apiVersion: batch/v1
-kind: Job
-metadata:
-  namespace: ${ZED_KUBE_NAMESPACE}
-  name: ${ZED_MIGRATE_JOB_NAME}
-spec:
-  template:
-    spec:
-      restartPolicy: Never
-      containers:
-        - name: migrator
-          imagePullPolicy: Always
-          image: ${ZED_IMAGE_ID}
-          args:
-            - migrate
-          env:
-            - name: DATABASE_URL
-              valueFrom:
-                secretKeyRef:
-                  name: database
-                  key: url

crates/collab2/k8s/manifest.template.yml → crates/collab2/k8s/collab.template.yml 🔗

@@ -23,25 +23,6 @@ spec:
       port: 443
       targetPort: 8080
 
----
-kind: Service
-apiVersion: v1
-metadata:
-  namespace: ${ZED_KUBE_NAMESPACE}
-  name: pgadmin
-  annotations:
-    service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
-    service.beta.kubernetes.io/do-loadbalancer-certificate-id: ${ZED_DO_CERTIFICATE_ID}
-spec:
-  type: LoadBalancer
-  selector:
-    app: postgrest
-  ports:
-    - name: web
-      protocol: TCP
-      port: 443
-      targetPort: 8080
-
 ---
 apiVersion: apps/v1
 kind: Deployment
@@ -138,40 +119,3 @@ spec:
               # FIXME - Switch to the more restrictive `PERFMON` capability.
               # This capability isn't yet available in a stable version of Debian.
               add: ["SYS_ADMIN"]
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  namespace: ${ZED_KUBE_NAMESPACE}
-  name: postgrest
-
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: postgrest
-  template:
-    metadata:
-      labels:
-        app: postgrest
-    spec:
-      containers:
-        - name: postgrest
-          image: "postgrest/postgrest"
-          ports:
-            - containerPort: 8080
-              protocol: TCP
-          env:
-            - name: PGRST_SERVER_PORT
-              value: "8080"
-            - name: PGRST_DB_URI
-              valueFrom:
-                secretKeyRef:
-                  name: database
-                  key: url
-            - name: PGRST_JWT_SECRET
-              valueFrom:
-                secretKeyRef:
-                  name: postgrest
-                  key: jwt_secret

crates/collab/k8s/environments/preview.sh → crates/collab2/k8s/environments/nightly.sh 🔗

@@ -1,4 +1,4 @@
-ZED_ENVIRONMENT=preview
+ZED_ENVIRONMENT=nightly
 RUST_LOG=info
 INVITE_LINK_PREFIX=https://zed.dev/invites/
 DATABASE_MAX_CONNECTIONS=10

crates/collab2/k8s/postgrest.template.yml 🔗

@@ -0,0 +1,55 @@
+---
+kind: Service
+apiVersion: v1
+metadata:
+  namespace: ${ZED_KUBE_NAMESPACE}
+  name: postgrest
+  annotations:
+    service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
+    service.beta.kubernetes.io/do-loadbalancer-certificate-id: ${ZED_DO_CERTIFICATE_ID}
+spec:
+  type: LoadBalancer
+  selector:
+    app: postgrest
+  ports:
+    - name: web
+      protocol: TCP
+      port: 443
+      targetPort: 8080
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  namespace: ${ZED_KUBE_NAMESPACE}
+  name: postgrest
+
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: postgrest
+  template:
+    metadata:
+      labels:
+        app: postgrest
+    spec:
+      containers:
+        - name: postgrest
+          image: "postgrest/postgrest"
+          ports:
+            - containerPort: 8080
+              protocol: TCP
+          env:
+            - name: PGRST_SERVER_PORT
+              value: "8080"
+            - name: PGRST_DB_URI
+              valueFrom:
+                secretKeyRef:
+                  name: database
+                  key: url
+            - name: PGRST_JWT_SECRET
+              valueFrom:
+                secretKeyRef:
+                  name: postgrest
+                  key: jwt_secret

crates/collab_ui2/src/chat_panel.rs 🔗

@@ -611,6 +611,10 @@ impl Panel for ChatPanel {
         Some(ui::Icon::MessageBubbles)
     }
 
+    fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> {
+        Some("Chat Panel")
+    }
+
     fn toggle_action(&self) -> Box<dyn gpui::Action> {
         Box::new(ToggleFocus)
     }

crates/collab_ui2/src/collab_panel.rs 🔗

@@ -2163,18 +2163,33 @@ impl CollabPanel {
                     .child(
                         h_stack()
                             .id(channel_id as usize)
+                            // HACK: This is a dirty hack to help with the positioning of the button container.
+                            //
+                            // We're using a pixel width for the elements but then allowing the contents to
+                            // overflow. This means that the label and facepile will be shown, but will not
+                            // push the button container off the edge of the panel.
+                            .w_px()
                             .child(Label::new(channel.name.clone()))
                             .children(face_pile.map(|face_pile| face_pile.render(cx))),
                     )
                     .end_slot(
                         h_stack()
                             .absolute()
-                            .right_0()
+                            // We're using a negative coordinate for the right anchor to
+                            // counteract the padding of the `ListItem`.
+                            //
+                            // This prevents a gap from showing up between the background
+                            // of this element and the edge of the collab panel.
+                            .right(rems(-0.5))
                             // HACK: Without this the channel name clips on top of the icons, but I'm not sure why.
                             .z_index(10)
                             .bg(cx.theme().colors().panel_background)
+                            .when(is_selected || is_active, |this| {
+                                this.bg(cx.theme().colors().ghost_element_selected)
+                            })
                             .child(
                                 h_stack()
+                                    .px_1()
                                     // The element hover background has a slight transparency to it, so we
                                     // need to apply it to the inner element so that it blends with the solid
                                     // background color of the absolutely-positioned element.
@@ -2347,6 +2362,10 @@ impl Panel for CollabPanel {
             .then(|| ui::Icon::Collab)
     }
 
+    fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> {
+        Some("Collab Panel")
+    }
+
     fn toggle_action(&self) -> Box<dyn gpui::Action> {
         Box::new(ToggleFocus)
     }

crates/collab_ui2/src/notification_panel.rs 🔗

@@ -661,6 +661,10 @@ impl Panel for NotificationPanel {
             .then(|| Icon::Bell)
     }
 
+    fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> {
+        Some("Notification Panel")
+    }
+
     fn icon_label(&self, cx: &WindowContext) -> Option<String> {
         let count = self.notification_store.read(cx).unread_notification_count();
         if count == 0 {

crates/diagnostics2/src/diagnostics.rs 🔗

@@ -13,7 +13,7 @@ use editor::{
 };
 use futures::future::try_join_all;
 use gpui::{
-    actions, div, AnyElement, AnyView, AppContext, Context, EventEmitter, FocusHandle,
+    actions, div, svg, AnyElement, AnyView, AppContext, Context, EventEmitter, FocusHandle,
     FocusableView, HighlightStyle, InteractiveElement, IntoElement, Model, ParentElement, Render,
     SharedString, Styled, StyledText, Subscription, Task, View, ViewContext, VisualContext,
     WeakView, WindowContext,
@@ -800,12 +800,20 @@ fn diagnostic_header_renderer(diagnostic: Diagnostic) -> RenderBlock {
                 h_stack()
                     .gap_3()
                     .map(|stack| {
-                        let icon = if diagnostic.severity == DiagnosticSeverity::ERROR {
-                            IconElement::new(Icon::XCircle).color(Color::Error)
-                        } else {
-                            IconElement::new(Icon::ExclamationTriangle).color(Color::Warning)
-                        };
-                        stack.child(icon)
+                        stack.child(
+                            svg()
+                                .size(cx.text_style().font_size)
+                                .flex_none()
+                                .map(|icon| {
+                                    if diagnostic.severity == DiagnosticSeverity::ERROR {
+                                        icon.path(Icon::XCircle.path())
+                                            .text_color(Color::Error.color(cx))
+                                    } else {
+                                        icon.path(Icon::ExclamationTriangle.path())
+                                            .text_color(Color::Warning.color(cx))
+                                    }
+                                }),
+                        )
                     })
                     .child(
                         h_stack()
@@ -819,7 +827,11 @@ fn diagnostic_header_renderer(diagnostic: Diagnostic) -> RenderBlock {
                                 ),
                             )
                             .when_some(diagnostic.code.as_ref(), |stack, code| {
-                                stack.child(Label::new(format!("({code})")).color(Color::Muted))
+                                stack.child(
+                                    div()
+                                        .child(SharedString::from(format!("({code})")))
+                                        .text_color(cx.theme().colors().text_muted),
+                                )
                             }),
                     ),
             )
@@ -827,7 +839,11 @@ fn diagnostic_header_renderer(diagnostic: Diagnostic) -> RenderBlock {
                 h_stack()
                     .gap_1()
                     .when_some(diagnostic.source.as_ref(), |stack, source| {
-                        stack.child(Label::new(format!("{source}")).color(Color::Muted))
+                        stack.child(
+                            div()
+                                .child(SharedString::from(source.clone()))
+                                .text_color(cx.theme().colors().text_muted),
+                        )
                     }),
             )
             .into_any_element()

crates/editor2/src/display_map.rs 🔗

@@ -536,7 +536,7 @@ impl DisplaySnapshot {
                 // Omit underlines for HINT/INFO diagnostics on 'unnecessary' code.
                 if severity <= DiagnosticSeverity::WARNING || !chunk.is_unnecessary {
                     let diagnostic_color =
-                        super::diagnostic_style(severity, true, &editor_style.diagnostic_style);
+                        super::diagnostic_style(severity, true, &editor_style.status);
                     diagnostic_highlight.underline = Some(UnderlineStyle {
                         color: Some(diagnostic_color),
                         thickness: 1.0.into(),

crates/editor2/src/editor.rs 🔗

@@ -97,7 +97,7 @@ use std::{
 pub use sum_tree::Bias;
 use sum_tree::TreeMap;
 use text::{OffsetUtf16, Rope};
-use theme::{ActiveTheme, DiagnosticStyle, PlayerColor, SyntaxTheme, ThemeColors, ThemeSettings};
+use theme::{ActiveTheme, PlayerColor, StatusColors, SyntaxTheme, ThemeColors, ThemeSettings};
 use ui::{
     h_stack, ButtonSize, ButtonStyle, Icon, IconButton, ListItem, ListItemSpacing, Popover, Tooltip,
 };
@@ -514,7 +514,7 @@ pub struct EditorStyle {
     pub text: TextStyle,
     pub scrollbar_width: Pixels,
     pub syntax: Arc<SyntaxTheme>,
-    pub diagnostic_style: DiagnosticStyle,
+    pub status: StatusColors,
     pub inlays_style: HighlightStyle,
     pub suggestions_style: HighlightStyle,
 }
@@ -1197,7 +1197,6 @@ impl CompletionsMenu {
                     .min_w(px(260.))
                     .max_w(px(640.))
                     .w(px(500.))
-                    .text_ui()
                     .overflow_y_scroll()
                     // Prevent a mouse down on documentation from being propagated to the editor,
                     // because that would move the cursor.
@@ -1420,7 +1419,6 @@ impl CodeActionsMenu {
                         let colors = cx.theme().colors();
                         div()
                             .px_2()
-                            .text_ui()
                             .text_color(colors.text)
                             .when(selected, |style| {
                                 style
@@ -7657,10 +7655,7 @@ impl Editor {
                                                 text: text_style,
                                                 scrollbar_width: cx.editor_style.scrollbar_width,
                                                 syntax: cx.editor_style.syntax.clone(),
-                                                diagnostic_style: cx
-                                                    .editor_style
-                                                    .diagnostic_style
-                                                    .clone(),
+                                                status: cx.editor_style.status.clone(),
                                                 // todo!("what about the rest of the highlight style parts for inlays and suggestions?")
                                                 inlays_style: HighlightStyle {
                                                     color: Some(cx.theme().status().hint),
@@ -9330,7 +9325,7 @@ impl Render for Editor {
                 text: text_style,
                 scrollbar_width: px(12.),
                 syntax: cx.theme().syntax().clone(),
-                diagnostic_style: cx.theme().diagnostic_style(),
+                status: cx.theme().status().clone(),
                 // todo!("what about the rest of the highlight style parts?")
                 inlays_style: HighlightStyle {
                     color: Some(cx.theme().status().hint),
@@ -9784,21 +9779,17 @@ pub fn highlight_diagnostic_message(diagnostic: &Diagnostic) -> (SharedString, V
     (text_without_backticks.into(), code_ranges)
 }
 
-pub fn diagnostic_style(
-    severity: DiagnosticSeverity,
-    valid: bool,
-    style: &DiagnosticStyle,
-) -> Hsla {
+pub fn diagnostic_style(severity: DiagnosticSeverity, valid: bool, colors: &StatusColors) -> Hsla {
     match (severity, valid) {
-        (DiagnosticSeverity::ERROR, true) => style.error,
-        (DiagnosticSeverity::ERROR, false) => style.error,
-        (DiagnosticSeverity::WARNING, true) => style.warning,
-        (DiagnosticSeverity::WARNING, false) => style.warning,
-        (DiagnosticSeverity::INFORMATION, true) => style.info,
-        (DiagnosticSeverity::INFORMATION, false) => style.info,
-        (DiagnosticSeverity::HINT, true) => style.info,
-        (DiagnosticSeverity::HINT, false) => style.info,
-        _ => style.ignored,
+        (DiagnosticSeverity::ERROR, true) => colors.error,
+        (DiagnosticSeverity::ERROR, false) => colors.error,
+        (DiagnosticSeverity::WARNING, true) => colors.warning,
+        (DiagnosticSeverity::WARNING, false) => colors.warning,
+        (DiagnosticSeverity::INFORMATION, true) => colors.info,
+        (DiagnosticSeverity::INFORMATION, false) => colors.info,
+        (DiagnosticSeverity::HINT, true) => colors.info,
+        (DiagnosticSeverity::HINT, false) => colors.info,
+        _ => colors.ignored,
     }
 }
 

crates/editor2/src/element.rs 🔗

@@ -52,7 +52,7 @@ use std::{
 use sum_tree::Bias;
 use theme::{ActiveTheme, PlayerColor};
 use ui::prelude::*;
-use ui::{h_stack, ButtonLike, ButtonStyle, IconButton, Label, Tooltip};
+use ui::{h_stack, ButtonLike, ButtonStyle, IconButton, Tooltip};
 use util::ResultExt;
 use workspace::item::Item;
 
@@ -2305,13 +2305,17 @@ impl EditorElement {
                                         h_stack().gap_3().child(
                                             h_stack()
                                                 .gap_2()
-                                                .child(Label::new(
+                                                .child(
                                                     filename
                                                         .map(SharedString::from)
                                                         .unwrap_or_else(|| "untitled".into()),
-                                                ))
+                                                )
                                                 .when_some(parent_path, |then, path| {
-                                                    then.child(Label::new(path).color(Color::Muted))
+                                                    then.child(
+                                                        div().child(path).text_color(
+                                                            cx.theme().colors().text_muted,
+                                                        ),
+                                                    )
                                                 }),
                                         ),
                                     )
@@ -2373,8 +2377,6 @@ impl EditorElement {
                                     this.child(div().size_full().bg(gpui::green()))
                                 }
                             })
-                        // .child("⋯")
-                        // .children(jump_icon) // .p_x(gutter_padding)
                     };
                     element.into_any()
                 }
@@ -2811,50 +2813,65 @@ impl Element for EditorElement {
     ) {
         let editor = self.editor.clone();
 
-        let mut layout = self.compute_layout(bounds, cx);
-        let gutter_bounds = Bounds {
-            origin: bounds.origin,
-            size: layout.gutter_size,
-        };
-        let text_bounds = Bounds {
-            origin: gutter_bounds.upper_right(),
-            size: layout.text_size,
-        };
+        cx.with_text_style(
+            Some(gpui::TextStyleRefinement {
+                font_size: Some(self.style.text.font_size),
+                ..Default::default()
+            }),
+            |cx| {
+                let mut layout = self.compute_layout(bounds, cx);
+                let gutter_bounds = Bounds {
+                    origin: bounds.origin,
+                    size: layout.gutter_size,
+                };
+                let text_bounds = Bounds {
+                    origin: gutter_bounds.upper_right(),
+                    size: layout.text_size,
+                };
 
-        let focus_handle = editor.focus_handle(cx);
-        let key_context = self.editor.read(cx).key_context(cx);
-        cx.with_key_dispatch(Some(key_context), Some(focus_handle.clone()), |_, cx| {
-            self.register_actions(cx);
-            self.register_key_listeners(cx);
+                let focus_handle = editor.focus_handle(cx);
+                let key_context = self.editor.read(cx).key_context(cx);
+                cx.with_key_dispatch(Some(key_context), Some(focus_handle.clone()), |_, cx| {
+                    self.register_actions(cx);
+                    self.register_key_listeners(cx);
 
-            cx.with_content_mask(Some(ContentMask { bounds }), |cx| {
-                let input_handler = ElementInputHandler::new(bounds, self.editor.clone(), cx);
-                cx.handle_input(&focus_handle, input_handler);
+                    cx.with_content_mask(Some(ContentMask { bounds }), |cx| {
+                        let input_handler =
+                            ElementInputHandler::new(bounds, self.editor.clone(), cx);
+                        cx.handle_input(&focus_handle, input_handler);
 
-                self.paint_background(gutter_bounds, text_bounds, &layout, cx);
-                if layout.gutter_size.width > Pixels::ZERO {
-                    self.paint_gutter(gutter_bounds, &mut layout, cx);
-                }
-                self.paint_text(text_bounds, &mut layout, cx);
+                        self.paint_background(gutter_bounds, text_bounds, &layout, cx);
+                        if layout.gutter_size.width > Pixels::ZERO {
+                            self.paint_gutter(gutter_bounds, &mut layout, cx);
+                        }
+                        self.paint_text(text_bounds, &mut layout, cx);
 
-                cx.with_z_index(0, |cx| {
-                    self.paint_mouse_listeners(bounds, gutter_bounds, text_bounds, &layout, cx);
-                });
-                if !layout.blocks.is_empty() {
-                    cx.with_z_index(0, |cx| {
-                        cx.with_element_id(Some("editor_blocks"), |cx| {
-                            self.paint_blocks(bounds, &mut layout, cx);
+                        cx.with_z_index(0, |cx| {
+                            self.paint_mouse_listeners(
+                                bounds,
+                                gutter_bounds,
+                                text_bounds,
+                                &layout,
+                                cx,
+                            );
                         });
-                    })
-                }
+                        if !layout.blocks.is_empty() {
+                            cx.with_z_index(0, |cx| {
+                                cx.with_element_id(Some("editor_blocks"), |cx| {
+                                    self.paint_blocks(bounds, &mut layout, cx);
+                                });
+                            })
+                        }
 
-                cx.with_z_index(1, |cx| {
-                    self.paint_overlays(text_bounds, &mut layout, cx);
-                });
+                        cx.with_z_index(1, |cx| {
+                            self.paint_overlays(text_bounds, &mut layout, cx);
+                        });
 
-                cx.with_z_index(2, |cx| self.paint_scrollbar(bounds, &mut layout, cx));
-            });
-        })
+                        cx.with_z_index(2, |cx| self.paint_scrollbar(bounds, &mut layout, cx));
+                    });
+                })
+            },
+        );
     }
 }
 

crates/editor2/src/hover_popover.rs 🔗

@@ -6,12 +6,13 @@ use crate::{
 };
 use futures::FutureExt;
 use gpui::{
-    actions, div, px, AnyElement, CursorStyle, InteractiveElement, IntoElement, Model, MouseButton,
-    ParentElement, Pixels, SharedString, Size, StatefulInteractiveElement, Styled, Task,
-    ViewContext, WeakView,
+    actions, div, px, AnyElement, CursorStyle, Hsla, InteractiveElement, IntoElement, Model,
+    MouseButton, ParentElement, Pixels, SharedString, Size, StatefulInteractiveElement, Styled,
+    Task, ViewContext, WeakView,
 };
 use language::{markdown, Bias, DiagnosticEntry, Language, LanguageRegistry, ParsedMarkdown};
 
+use lsp::DiagnosticSeverity;
 use project::{HoverBlock, HoverBlockKind, InlayHintLabelPart, Project};
 use settings::Settings;
 use std::{ops::Range, sync::Arc, time::Duration};
@@ -477,7 +478,6 @@ impl InfoPopover {
         div()
             .id("info_popover")
             .elevation_2(cx)
-            .text_ui()
             .p_2()
             .overflow_y_scroll()
             .max_w(max_size.width)
@@ -514,16 +514,50 @@ impl DiagnosticPopover {
             None => self.local_diagnostic.diagnostic.message.clone(),
         };
 
-        let container_bg = crate::diagnostic_style(
-            self.local_diagnostic.diagnostic.severity,
-            true,
-            &style.diagnostic_style,
-        );
+        struct DiagnosticColors {
+            pub text: Hsla,
+            pub background: Hsla,
+            pub border: Hsla,
+        }
+
+        let diagnostic_colors = match self.local_diagnostic.diagnostic.severity {
+            DiagnosticSeverity::ERROR => DiagnosticColors {
+                text: style.status.error,
+                background: style.status.error_background,
+                border: style.status.error_border,
+            },
+            DiagnosticSeverity::WARNING => DiagnosticColors {
+                text: style.status.warning,
+                background: style.status.warning_background,
+                border: style.status.warning_border,
+            },
+            DiagnosticSeverity::INFORMATION => DiagnosticColors {
+                text: style.status.info,
+                background: style.status.info_background,
+                border: style.status.info_border,
+            },
+            DiagnosticSeverity::HINT => DiagnosticColors {
+                text: style.status.hint,
+                background: style.status.hint_background,
+                border: style.status.hint_border,
+            },
+            _ => DiagnosticColors {
+                text: style.status.ignored,
+                background: style.status.ignored_background,
+                border: style.status.ignored_border,
+            },
+        };
 
         div()
             .id("diagnostic")
             .overflow_y_scroll()
-            .bg(container_bg)
+            .px_2()
+            .py_1()
+            .bg(diagnostic_colors.background)
+            .text_color(diagnostic_colors.text)
+            .border_1()
+            .border_color(diagnostic_colors.border)
+            .rounded_md()
             .max_w(max_size.width)
             .max_h(max_size.height)
             .cursor(CursorStyle::PointingHand)

crates/gpui2/src/elements/overlay.rs 🔗

@@ -149,7 +149,9 @@ impl Element for Overlay {
             desired.origin.y = limits.origin.y;
         }
 
-        cx.with_element_offset(desired.origin - bounds.origin, |cx| {
+        let mut offset = cx.element_offset() + desired.origin - bounds.origin;
+        offset = point(offset.x.round(), offset.y.round());
+        cx.with_absolute_element_offset(offset, |cx| {
             cx.break_content_mask(|cx| {
                 for child in &mut self.children {
                     child.paint(cx);

crates/project_panel2/src/project_panel.rs 🔗

@@ -1612,6 +1612,10 @@ impl Panel for ProjectPanel {
         Some(ui::Icon::FileTree)
     }
 
+    fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> {
+        Some("Project Panel")
+    }
+
     fn toggle_action(&self) -> Box<dyn Action> {
         Box::new(ToggleFocus)
     }

crates/terminal_view2/src/terminal_panel.rs 🔗

@@ -419,6 +419,10 @@ impl Panel for TerminalPanel {
         Some(Icon::Terminal)
     }
 
+    fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> {
+        Some("Terminal Panel")
+    }
+
     fn toggle_action(&self) -> Box<dyn gpui::Action> {
         Box::new(ToggleFocus)
     }

crates/theme2/src/one_themes.rs 🔗

@@ -126,19 +126,47 @@ pub(crate) fn one_dark() -> Theme {
             },
             status: StatusColors {
                 conflict: yellow,
+                conflict_background: yellow,
+                conflict_border: yellow,
                 created: green,
+                created_background: green,
+                created_border: green,
                 deleted: red,
+                deleted_background: red,
+                deleted_border: red,
                 error: red,
+                error_background: red,
+                error_border: red,
                 hidden: gray,
+                hidden_background: gray,
+                hidden_border: gray,
                 hint: blue,
+                hint_background: blue,
+                hint_border: blue,
                 ignored: gray,
+                ignored_background: gray,
+                ignored_border: gray,
                 info: blue,
+                info_background: blue,
+                info_border: blue,
                 modified: yellow,
+                modified_background: yellow,
+                modified_border: yellow,
                 predictive: gray,
+                predictive_background: gray,
+                predictive_border: gray,
                 renamed: blue,
+                renamed_background: blue,
+                renamed_border: blue,
                 success: green,
+                success_background: green,
+                success_border: green,
                 unreachable: gray,
+                unreachable_background: gray,
+                unreachable_border: gray,
                 warning: yellow,
+                warning_background: yellow,
+                warning_border: yellow,
             },
             player: PlayerColors::dark(),
             syntax: Arc::new(SyntaxTheme {

crates/theme2/src/styles/status.rs 🔗

@@ -9,45 +9,73 @@ pub struct StatusColors {
     /// Indicates some kind of conflict, like a file changed on disk while it was open, or
     /// merge conflicts in a Git repository.
     pub conflict: Hsla,
+    pub conflict_background: Hsla,
+    pub conflict_border: Hsla,
 
     /// Indicates something new, like a new file added to a Git repository.
     pub created: Hsla,
+    pub created_background: Hsla,
+    pub created_border: Hsla,
 
     /// Indicates that something no longer exists, like a deleted file.
     pub deleted: Hsla,
+    pub deleted_background: Hsla,
+    pub deleted_border: Hsla,
 
     /// Indicates a system error, a failed operation or a diagnostic error.
     pub error: Hsla,
+    pub error_background: Hsla,
+    pub error_border: Hsla,
 
     /// Represents a hidden status, such as a file being hidden in a file tree.
     pub hidden: Hsla,
+    pub hidden_background: Hsla,
+    pub hidden_border: Hsla,
 
     /// Indicates a hint or some kind of additional information.
     pub hint: Hsla,
+    pub hint_background: Hsla,
+    pub hint_border: Hsla,
 
     /// Indicates that something is deliberately ignored, such as a file or operation ignored by Git.
     pub ignored: Hsla,
+    pub ignored_background: Hsla,
+    pub ignored_border: Hsla,
 
     /// Represents informational status updates or messages.
     pub info: Hsla,
+    pub info_background: Hsla,
+    pub info_border: Hsla,
 
     /// Indicates a changed or altered status, like a file that has been edited.
     pub modified: Hsla,
+    pub modified_background: Hsla,
+    pub modified_border: Hsla,
 
     /// Indicates something that is predicted, like automatic code completion, or generated code.
     pub predictive: Hsla,
+    pub predictive_background: Hsla,
+    pub predictive_border: Hsla,
 
     /// Represents a renamed status, such as a file that has been renamed.
     pub renamed: Hsla,
+    pub renamed_background: Hsla,
+    pub renamed_border: Hsla,
 
     /// Indicates a successful operation or task completion.
     pub success: Hsla,
+    pub success_background: Hsla,
+    pub success_border: Hsla,
 
     /// Indicates some kind of unreachable status, like a block of code that can never be reached.
     pub unreachable: Hsla,
+    pub unreachable_background: Hsla,
+    pub unreachable_border: Hsla,
 
     /// Represents a warning status, like an operation that is about to fail.
     pub warning: Hsla,
+    pub warning_background: Hsla,
+    pub warning_border: Hsla,
 }
 
 impl Default for StatusColors {
@@ -78,38 +106,94 @@ impl StatusColors {
     pub fn dark() -> Self {
         Self {
             conflict: red().dark().step_9(),
+            conflict_background: red().dark().step_9(),
+            conflict_border: red().dark().step_9(),
             created: grass().dark().step_9(),
+            created_background: grass().dark().step_9(),
+            created_border: grass().dark().step_9(),
             deleted: red().dark().step_9(),
+            deleted_background: red().dark().step_9(),
+            deleted_border: red().dark().step_9(),
             error: red().dark().step_9(),
+            error_background: red().dark().step_9(),
+            error_border: red().dark().step_9(),
             hidden: neutral().dark().step_9(),
+            hidden_background: neutral().dark().step_9(),
+            hidden_border: neutral().dark().step_9(),
             hint: blue().dark().step_9(),
+            hint_background: blue().dark().step_9(),
+            hint_border: blue().dark().step_9(),
             ignored: neutral().dark().step_9(),
+            ignored_background: neutral().dark().step_9(),
+            ignored_border: neutral().dark().step_9(),
             info: blue().dark().step_9(),
+            info_background: blue().dark().step_9(),
+            info_border: blue().dark().step_9(),
             modified: yellow().dark().step_9(),
+            modified_background: yellow().dark().step_9(),
+            modified_border: yellow().dark().step_9(),
             predictive: neutral().dark_alpha().step_9(),
+            predictive_background: neutral().dark_alpha().step_9(),
+            predictive_border: neutral().dark_alpha().step_9(),
             renamed: blue().dark().step_9(),
+            renamed_background: blue().dark().step_9(),
+            renamed_border: blue().dark().step_9(),
             success: grass().dark().step_9(),
+            success_background: grass().dark().step_9(),
+            success_border: grass().dark().step_9(),
             unreachable: neutral().dark().step_10(),
+            unreachable_background: neutral().dark().step_10(),
+            unreachable_border: neutral().dark().step_10(),
             warning: yellow().dark().step_9(),
+            warning_background: yellow().dark().step_9(),
+            warning_border: yellow().dark().step_9(),
         }
     }
 
     pub fn light() -> Self {
         Self {
             conflict: red().light().step_9(),
+            conflict_background: red().light().step_9(),
+            conflict_border: red().light().step_9(),
             created: grass().light().step_9(),
+            created_background: grass().light().step_9(),
+            created_border: grass().light().step_9(),
             deleted: red().light().step_9(),
+            deleted_background: red().light().step_9(),
+            deleted_border: red().light().step_9(),
             error: red().light().step_9(),
+            error_background: red().light().step_9(),
+            error_border: red().light().step_9(),
             hidden: neutral().light().step_9(),
+            hidden_background: neutral().light().step_9(),
+            hidden_border: neutral().light().step_9(),
             hint: blue().light().step_9(),
+            hint_background: blue().light().step_9(),
+            hint_border: blue().light().step_9(),
             ignored: neutral().light().step_9(),
+            ignored_background: neutral().light().step_9(),
+            ignored_border: neutral().light().step_9(),
             info: blue().light().step_9(),
+            info_background: blue().light().step_9(),
+            info_border: blue().light().step_9(),
             modified: yellow().light().step_9(),
+            modified_background: yellow().light().step_9(),
+            modified_border: yellow().light().step_9(),
             predictive: neutral().light_alpha().step_9(),
+            predictive_background: neutral().light_alpha().step_9(),
+            predictive_border: neutral().light_alpha().step_9(),
             renamed: blue().light().step_9(),
+            renamed_background: blue().light().step_9(),
+            renamed_border: blue().light().step_9(),
             success: grass().light().step_9(),
+            success_background: grass().light().step_9(),
+            success_border: grass().light().step_9(),
             unreachable: neutral().light().step_10(),
+            unreachable_background: neutral().light().step_10(),
+            unreachable_border: neutral().light().step_10(),
             warning: yellow().light().step_9(),
+            warning_background: yellow().light().step_9(),
+            warning_border: yellow().light().step_9(),
         }
     }
 

crates/theme2/src/theme2.rs 🔗

@@ -134,18 +134,6 @@ impl Theme {
         self.syntax().color(name)
     }
 
-    /// Returns the [`DiagnosticStyle`] for the theme.
-    #[inline(always)]
-    pub fn diagnostic_style(&self) -> DiagnosticStyle {
-        DiagnosticStyle {
-            error: self.status().error,
-            warning: self.status().warning,
-            info: self.status().info,
-            hint: self.status().info,
-            ignored: self.status().ignored,
-        }
-    }
-
     /// Returns the [`Appearance`] for the theme.
     #[inline(always)]
     pub fn appearance(&self) -> Appearance {
@@ -153,15 +141,6 @@ impl Theme {
     }
 }
 
-#[derive(Clone, Debug, Default)]
-pub struct DiagnosticStyle {
-    pub error: Hsla,
-    pub warning: Hsla,
-    pub info: Hsla,
-    pub hint: Hsla,
-    pub ignored: Hsla,
-}
-
 pub fn color_alpha(color: Hsla, alpha: f32) -> Hsla {
     let mut color = color;
     color.a = alpha;

crates/theme2/src/themes/andromeda.rs 🔗

@@ -96,19 +96,47 @@ pub fn andromeda() -> UserThemeFamily {
                 },
                 status: StatusColorsRefinement {
                     conflict: Some(rgba(0xfee56dff).into()),
+                    conflict_background: Some(rgba(0x5c5015ff).into()),
+                    conflict_border: Some(rgba(0x796b26ff).into()),
                     created: Some(rgba(0x96df72ff).into()),
+                    created_background: Some(rgba(0x194618ff).into()),
+                    created_border: Some(rgba(0x306129ff).into()),
                     deleted: Some(rgba(0xf82872ff).into()),
+                    deleted_background: Some(rgba(0x55051bff).into()),
+                    deleted_border: Some(rgba(0x720a2bff).into()),
                     error: Some(rgba(0xf82872ff).into()),
+                    error_background: Some(rgba(0x55051bff).into()),
+                    error_border: Some(rgba(0x720a2bff).into()),
                     hidden: Some(rgba(0x6b6b73ff).into()),
-                    hint: Some(rgba(0x11a793ff).into()),
+                    hidden_background: Some(rgba(0x262a33ff).into()),
+                    hidden_border: Some(rgba(0x292d37ff).into()),
+                    hint: Some(rgba(0x618399ff).into()),
+                    hint_background: Some(rgba(0x122420ff).into()),
+                    hint_border: Some(rgba(0x183a34ff).into()),
                     ignored: Some(rgba(0xaca8aeff).into()),
+                    ignored_background: Some(rgba(0x262a33ff).into()),
+                    ignored_border: Some(rgba(0x2b2f39ff).into()),
                     info: Some(rgba(0x11a793ff).into()),
+                    info_background: Some(rgba(0x122420ff).into()),
+                    info_border: Some(rgba(0x183a34ff).into()),
                     modified: Some(rgba(0xfee56dff).into()),
+                    modified_background: Some(rgba(0x5c5015ff).into()),
+                    modified_border: Some(rgba(0x796b26ff).into()),
                     predictive: Some(rgba(0x96df72ff).into()),
+                    predictive_background: Some(rgba(0x194618ff).into()),
+                    predictive_border: Some(rgba(0x306129ff).into()),
                     renamed: Some(rgba(0x11a793ff).into()),
+                    renamed_background: Some(rgba(0x122420ff).into()),
+                    renamed_border: Some(rgba(0x183a34ff).into()),
                     success: Some(rgba(0x96df72ff).into()),
+                    success_background: Some(rgba(0x194618ff).into()),
+                    success_border: Some(rgba(0x306129ff).into()),
                     unreachable: Some(rgba(0xaca8aeff).into()),
+                    unreachable_background: Some(rgba(0x262a33ff).into()),
+                    unreachable_border: Some(rgba(0x2b2f39ff).into()),
                     warning: Some(rgba(0xfee56dff).into()),
+                    warning_background: Some(rgba(0x5c5015ff).into()),
+                    warning_border: Some(rgba(0x796b26ff).into()),
                     ..Default::default()
                 },
                 player: Some(PlayerColors(vec![

crates/theme2/src/themes/atelier.rs 🔗

@@ -97,19 +97,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x38a166ff).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(0x7d9728ff).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![
@@ -534,19 +562,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x417ee6ff).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(0x7b9727ff).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![
@@ -971,19 +1027,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x488c90ff).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(0x499963ff).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![
@@ -1408,19 +1492,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x576ddaff).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(0x2c9292ff).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![
@@ -1845,19 +1957,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     status: StatusColorsRefinement {
                         conflict: Some(rgba(0xa59810ff).into()),
+                        conflict_background: Some(rgba(0x25210dff).into()),
+                        conflict_border: Some(rgba(0x3b3612ff).into()),
                         created: Some(rgba(0x7d9727ff).into()),
+                        created_background: Some(rgba(0x1e2110ff).into()),
+                        created_border: Some(rgba(0x2f3516ff).into()),
                         deleted: Some(rgba(0xba6237ff).into()),
+                        deleted_background: Some(rgba(0x2b1811ff).into()),
+                        deleted_border: Some(rgba(0x442619ff).into()),
                         error: Some(rgba(0xba6237ff).into()),
+                        error_background: Some(rgba(0x2b1811ff).into()),
+                        error_border: Some(rgba(0x442619ff).into()),
                         hidden: Some(rgba(0x7d7c6aff).into()),
-                        hint: Some(rgba(0x37a166ff).into()),
+                        hidden_background: Some(rgba(0x424136ff).into()),
+                        hidden_border: Some(rgba(0x504f41ff).into()),
+                        hint: Some(rgba(0x70825bff).into()),
+                        hint_background: Some(rgba(0x142319ff).into()),
+                        hint_border: Some(rgba(0x1c3927ff).into()),
                         ignored: Some(rgba(0x91907fff).into()),
+                        ignored_background: Some(rgba(0x424136ff).into()),
+                        ignored_border: Some(rgba(0x5d5c4cff).into()),
                         info: Some(rgba(0x37a166ff).into()),
+                        info_background: Some(rgba(0x142319ff).into()),
+                        info_border: Some(rgba(0x1c3927ff).into()),
                         modified: Some(rgba(0xa59810ff).into()),
+                        modified_background: Some(rgba(0x25210dff).into()),
+                        modified_border: Some(rgba(0x3b3612ff).into()),
                         predictive: Some(rgba(0x7d9727ff).into()),
+                        predictive_background: Some(rgba(0x1e2110ff).into()),
+                        predictive_border: Some(rgba(0x2f3516ff).into()),
                         renamed: Some(rgba(0x37a166ff).into()),
+                        renamed_background: Some(rgba(0x142319ff).into()),
+                        renamed_border: Some(rgba(0x1c3927ff).into()),
                         success: Some(rgba(0x7d9727ff).into()),
+                        success_background: Some(rgba(0x1e2110ff).into()),
+                        success_border: Some(rgba(0x2f3516ff).into()),
                         unreachable: Some(rgba(0x91907fff).into()),
+                        unreachable_background: Some(rgba(0x424136ff).into()),
+                        unreachable_border: Some(rgba(0x5d5c4cff).into()),
                         warning: Some(rgba(0xa59810ff).into()),
+                        warning_background: Some(rgba(0x25210dff).into()),
+                        warning_border: Some(rgba(0x3b3612ff).into()),
                         ..Default::default()
                     },
                     player: Some(PlayerColors(vec![
@@ -2282,19 +2422,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x3e8fd0ff).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(0xac973aff).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![
@@ -2719,19 +2887,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x3f8fd0ff).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(0xac973aff).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![
@@ -3156,19 +3352,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x6684e0ff).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(0x60ac3aff).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![
@@ -3593,19 +3817,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x3e62f4ff).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(0x2ba32aff).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![
@@ -4030,19 +4282,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x586ddaff).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(0x2c9292ff).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![
@@ -4467,19 +4747,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x7272caff).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(0x4b8b8bff).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![
@@ -4904,19 +5212,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x526aebff).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(0x918b3bff).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![
@@ -5341,19 +5677,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x277fadff).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(0x568c3bff).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![
@@ -5778,19 +6142,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x417ee6ff).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(0x7b9728ff).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![
@@ -6215,19 +6607,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x6784e0ff).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(0x61ac3aff).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![
@@ -6652,19 +7072,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x7372caff).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(0x4c8b8bff).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![
@@ -7089,19 +7537,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x3f62f4ff).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(0x2ba32bff).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![
@@ -7526,19 +8002,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x478c90ff).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(0x489963ff).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![
@@ -7963,19 +8467,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x526aebff).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(0x918b3cff).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![
@@ -8400,19 +8932,47 @@ pub fn atelier() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x277fadff).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(0x578c3cff).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![

crates/theme2/src/themes/ayu.rs 🔗

@@ -97,19 +97,47 @@ pub fn ayu() -> UserThemeFamily {
                     },
                     status: StatusColorsRefinement {
                         conflict: Some(rgba(0xfeb454ff).into()),
+                        conflict_background: Some(rgba(0x572916ff).into()),
+                        conflict_border: Some(rgba(0x754221ff).into()),
                         created: Some(rgba(0xaad84cff).into()),
+                        created_background: Some(rgba(0x294113ff).into()),
+                        created_border: Some(rgba(0x405c1dff).into()),
                         deleted: Some(rgba(0xef7178ff).into()),
+                        deleted_background: Some(rgba(0x48171cff).into()),
+                        deleted_border: Some(rgba(0x66272dff).into()),
                         error: Some(rgba(0xef7178ff).into()),
+                        error_background: Some(rgba(0x48171cff).into()),
+                        error_border: Some(rgba(0x66272dff).into()),
                         hidden: Some(rgba(0x696a6aff).into()),
-                        hint: Some(rgba(0x5ac2feff).into()),
+                        hidden_background: Some(rgba(0x313337ff).into()),
+                        hidden_border: Some(rgba(0x383a3eff).into()),
+                        hint: Some(rgba(0x638c81ff).into()),
+                        hint_background: Some(rgba(0x0d304fff).into()),
+                        hint_border: Some(rgba(0x1b4a6eff).into()),
                         ignored: Some(rgba(0x8a8986ff).into()),
+                        ignored_background: Some(rgba(0x313337ff).into()),
+                        ignored_border: Some(rgba(0x3f4043ff).into()),
                         info: Some(rgba(0x5ac2feff).into()),
+                        info_background: Some(rgba(0x0d304fff).into()),
+                        info_border: Some(rgba(0x1b4a6eff).into()),
                         modified: Some(rgba(0xfeb454ff).into()),
+                        modified_background: Some(rgba(0x572916ff).into()),
+                        modified_border: Some(rgba(0x754221ff).into()),
                         predictive: Some(rgba(0xaad84cff).into()),
+                        predictive_background: Some(rgba(0x294113ff).into()),
+                        predictive_border: Some(rgba(0x405c1dff).into()),
                         renamed: Some(rgba(0x5ac2feff).into()),
+                        renamed_background: Some(rgba(0x0d304fff).into()),
+                        renamed_border: Some(rgba(0x1b4a6eff).into()),
                         success: Some(rgba(0xaad84cff).into()),
+                        success_background: Some(rgba(0x294113ff).into()),
+                        success_border: Some(rgba(0x405c1dff).into()),
                         unreachable: Some(rgba(0x8a8986ff).into()),
+                        unreachable_background: Some(rgba(0x313337ff).into()),
+                        unreachable_border: Some(rgba(0x3f4043ff).into()),
                         warning: Some(rgba(0xfeb454ff).into()),
+                        warning_background: Some(rgba(0x572916ff).into()),
+                        warning_border: Some(rgba(0x754221ff).into()),
                         ..Default::default()
                     },
                     player: Some(PlayerColors(vec![
@@ -513,19 +541,47 @@ pub fn ayu() -> UserThemeFamily {
                     },
                     status: StatusColorsRefinement {
                         conflict: Some(rgba(0xf1ae4aff).into()),
+                        conflict_background: Some(rgba(0xffeedaff).into()),
+                        conflict_border: Some(rgba(0xffe1beff).into()),
                         created: Some(rgba(0x86b305ff).into()),
+                        created_background: Some(rgba(0xe9efd2ff).into()),
+                        created_border: Some(rgba(0xd7e3aeff).into()),
                         deleted: Some(rgba(0xef7271ff).into()),
+                        deleted_background: Some(rgba(0xffe3e1ff).into()),
+                        deleted_border: Some(rgba(0xffcdcaff).into()),
                         error: Some(rgba(0xef7271ff).into()),
+                        error_background: Some(rgba(0xffe3e1ff).into()),
+                        error_border: Some(rgba(0xffcdcaff).into()),
                         hidden: Some(rgba(0xa9acaeff).into()),
-                        hint: Some(rgba(0x3b9ee5ff).into()),
+                        hidden_background: Some(rgba(0xdcdddeff).into()),
+                        hidden_border: Some(rgba(0xd5d6d8ff).into()),
+                        hint: Some(rgba(0x8ca7c2ff).into()),
+                        hint_background: Some(rgba(0xdeebfaff).into()),
+                        hint_border: Some(rgba(0xc4daf6ff).into()),
                         ignored: Some(rgba(0x8c8f93ff).into()),
+                        ignored_background: Some(rgba(0xdcdddeff).into()),
+                        ignored_border: Some(rgba(0xcfd1d2ff).into()),
                         info: Some(rgba(0x3b9ee5ff).into()),
+                        info_background: Some(rgba(0xdeebfaff).into()),
+                        info_border: Some(rgba(0xc4daf6ff).into()),
                         modified: Some(rgba(0xf1ae4aff).into()),
+                        modified_background: Some(rgba(0xffeedaff).into()),
+                        modified_border: Some(rgba(0xffe1beff).into()),
                         predictive: Some(rgba(0x86b305ff).into()),
+                        predictive_background: Some(rgba(0xe9efd2ff).into()),
+                        predictive_border: Some(rgba(0xd7e3aeff).into()),
                         renamed: Some(rgba(0x3b9ee5ff).into()),
+                        renamed_background: Some(rgba(0xdeebfaff).into()),
+                        renamed_border: Some(rgba(0xc4daf6ff).into()),
                         success: Some(rgba(0x86b305ff).into()),
+                        success_background: Some(rgba(0xe9efd2ff).into()),
+                        success_border: Some(rgba(0xd7e3aeff).into()),
                         unreachable: Some(rgba(0x8c8f93ff).into()),
+                        unreachable_background: Some(rgba(0xdcdddeff).into()),
+                        unreachable_border: Some(rgba(0xcfd1d2ff).into()),
                         warning: Some(rgba(0xf1ae4aff).into()),
+                        warning_background: Some(rgba(0xffeedaff).into()),
+                        warning_border: Some(rgba(0xffe1beff).into()),
                         ..Default::default()
                     },
                     player: Some(PlayerColors(vec![
@@ -929,19 +985,47 @@ pub fn ayu() -> UserThemeFamily {
                     },
                     status: StatusColorsRefinement {
                         conflict: Some(rgba(0xfed073ff).into()),
+                        conflict_background: Some(rgba(0x584018ff).into()),
+                        conflict_border: Some(rgba(0x765a29ff).into()),
                         created: Some(rgba(0xd5fe80ff).into()),
+                        created_background: Some(rgba(0x426118ff).into()),
+                        created_border: Some(rgba(0x5d7e2cff).into()),
                         deleted: Some(rgba(0xf18779ff).into()),
+                        deleted_background: Some(rgba(0x481b1cff).into()),
+                        deleted_border: Some(rgba(0x662e2dff).into()),
                         error: Some(rgba(0xf18779ff).into()),
+                        error_background: Some(rgba(0x481b1cff).into()),
+                        error_border: Some(rgba(0x662e2dff).into()),
                         hidden: Some(rgba(0x7b7d7fff).into()),
-                        hint: Some(rgba(0x73cffeff).into()),
+                        hidden_background: Some(rgba(0x464a52ff).into()),
+                        hidden_border: Some(rgba(0x4d5058ff).into()),
+                        hint: Some(rgba(0x7399a3ff).into()),
+                        hint_background: Some(rgba(0x123a50ff).into()),
+                        hint_border: Some(rgba(0x24556fff).into()),
                         ignored: Some(rgba(0x9a9a98ff).into()),
+                        ignored_background: Some(rgba(0x464a52ff).into()),
+                        ignored_border: Some(rgba(0x53565dff).into()),
                         info: Some(rgba(0x73cffeff).into()),
+                        info_background: Some(rgba(0x123a50ff).into()),
+                        info_border: Some(rgba(0x24556fff).into()),
                         modified: Some(rgba(0xfed073ff).into()),
+                        modified_background: Some(rgba(0x584018ff).into()),
+                        modified_border: Some(rgba(0x765a29ff).into()),
                         predictive: Some(rgba(0xd5fe80ff).into()),
+                        predictive_background: Some(rgba(0x426118ff).into()),
+                        predictive_border: Some(rgba(0x5d7e2cff).into()),
                         renamed: Some(rgba(0x73cffeff).into()),
+                        renamed_background: Some(rgba(0x123a50ff).into()),
+                        renamed_border: Some(rgba(0x24556fff).into()),
                         success: Some(rgba(0xd5fe80ff).into()),
+                        success_background: Some(rgba(0x426118ff).into()),
+                        success_border: Some(rgba(0x5d7e2cff).into()),
                         unreachable: Some(rgba(0x9a9a98ff).into()),
+                        unreachable_background: Some(rgba(0x464a52ff).into()),
+                        unreachable_border: Some(rgba(0x53565dff).into()),
                         warning: Some(rgba(0xfed073ff).into()),
+                        warning_background: Some(rgba(0x584018ff).into()),
+                        warning_border: Some(rgba(0x765a29ff).into()),
                         ..Default::default()
                     },
                     player: Some(PlayerColors(vec![

crates/theme2/src/themes/gruvbox.rs 🔗

@@ -97,19 +97,47 @@ pub fn gruvbox() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x0b6678ff).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(0x797410ff).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![
@@ -520,19 +548,47 @@ pub fn gruvbox() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x83a598ff).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(0xb8bb27ff).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![
@@ -943,19 +999,47 @@ pub fn gruvbox() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x0b6678ff).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(0x797410ff).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![
@@ -1366,19 +1450,47 @@ pub fn gruvbox() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x83a598ff).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(0xb8bb27ff).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![
@@ -1789,19 +1901,47 @@ pub fn gruvbox() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x0b6678ff).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(0x797410ff).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![
@@ -2212,19 +2352,47 @@ pub fn gruvbox() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x83a598ff).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(0xb8bb27ff).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![

crates/theme2/src/themes/one.rs 🔗

@@ -97,19 +97,47 @@ pub fn one() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x5c79e2ff).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(0xfaf2e6ff).into()),
+                        modified_border: Some(rgba(0xf5e8d2ff).into()),
                         predictive: Some(rgba(0x669f59ff).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(0xfaf2e6ff).into()),
+                        warning_border: Some(rgba(0xf5e8d2ff).into()),
                         ..Default::default()
                     },
                     player: Some(PlayerColors(vec![
@@ -520,19 +548,47 @@ pub fn one() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x74ade8ff).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(0x41331dff).into()),
+                        modified_border: Some(rgba(0x5d4c2fff).into()),
                         predictive: Some(rgba(0xa1c181ff).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(0x41331dff).into()),
+                        warning_border: Some(rgba(0x5d4c2fff).into()),
                         ..Default::default()
                     },
                     player: Some(PlayerColors(vec![

crates/theme2/src/themes/rose_pine.rs 🔗

@@ -97,19 +97,47 @@ pub fn rose_pine() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x57949fff).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(0x3eaa8eff).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![
@@ -527,19 +555,47 @@ pub fn rose_pine() -> UserThemeFamily {
                     },
                     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()),
-                        hint: Some(rgba(0x9cced7ff).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(0x5dc2a3ff).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()),
                         ..Default::default()
                     },
                     player: Some(PlayerColors(vec![
@@ -957,19 +1013,47 @@ pub fn rose_pine() -> UserThemeFamily {
                     },
                     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(0x2f2b43ff).into()),
-                        hint: Some(rgba(0x9cced7ff).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(0x5dc2a3ff).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![

crates/theme2/src/themes/sandcastle.rs 🔗

@@ -96,19 +96,47 @@ pub fn sandcastle() -> UserThemeFamily {
                 },
                 status: StatusColorsRefinement {
                     conflict: Some(rgba(0xa07e3bff).into()),
+                    conflict_background: Some(rgba(0x231d12ff).into()),
+                    conflict_border: Some(rgba(0x392e1aff).into()),
                     created: Some(rgba(0x83a598ff).into()),
+                    created_background: Some(rgba(0x1e2321ff).into()),
+                    created_border: Some(rgba(0x303a36ff).into()),
                     deleted: Some(rgba(0xb4637aff).into()),
+                    deleted_background: Some(rgba(0x26191cff).into()),
+                    deleted_border: Some(rgba(0x3f272dff).into()),
                     error: Some(rgba(0xb4637aff).into()),
+                    error_background: Some(rgba(0x26191cff).into()),
+                    error_border: Some(rgba(0x3f272dff).into()),
                     hidden: Some(rgba(0x827568ff).into()),
-                    hint: Some(rgba(0x528b8bff).into()),
+                    hidden_background: Some(rgba(0x333944ff).into()),
+                    hidden_border: Some(rgba(0x393f4aff).into()),
+                    hint: Some(rgba(0x727d68ff).into()),
+                    hint_background: Some(rgba(0x171f1fff).into()),
+                    hint_border: Some(rgba(0x223232ff).into()),
                     ignored: Some(rgba(0xa69782ff).into()),
+                    ignored_background: Some(rgba(0x333944ff).into()),
+                    ignored_border: Some(rgba(0x3d4350ff).into()),
                     info: Some(rgba(0x528b8bff).into()),
+                    info_background: Some(rgba(0x171f1fff).into()),
+                    info_border: Some(rgba(0x223232ff).into()),
                     modified: Some(rgba(0xa07e3bff).into()),
+                    modified_background: Some(rgba(0x231d12ff).into()),
+                    modified_border: Some(rgba(0x392e1aff).into()),
                     predictive: Some(rgba(0x83a598ff).into()),
+                    predictive_background: Some(rgba(0x1e2321ff).into()),
+                    predictive_border: Some(rgba(0x303a36ff).into()),
                     renamed: Some(rgba(0x528b8bff).into()),
+                    renamed_background: Some(rgba(0x171f1fff).into()),
+                    renamed_border: Some(rgba(0x223232ff).into()),
                     success: Some(rgba(0x83a598ff).into()),
+                    success_background: Some(rgba(0x1e2321ff).into()),
+                    success_border: Some(rgba(0x303a36ff).into()),
                     unreachable: Some(rgba(0xa69782ff).into()),
+                    unreachable_background: Some(rgba(0x333944ff).into()),
+                    unreachable_border: Some(rgba(0x3d4350ff).into()),
                     warning: Some(rgba(0xa07e3bff).into()),
+                    warning_background: Some(rgba(0x231d12ff).into()),
+                    warning_border: Some(rgba(0x392e1aff).into()),
                     ..Default::default()
                 },
                 player: Some(PlayerColors(vec![

crates/theme2/src/themes/solarized.rs 🔗

@@ -97,19 +97,47 @@ pub fn solarized() -> UserThemeFamily {
                     },
                     status: StatusColorsRefinement {
                         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(0xe9ead0ff).into()),
+                        created_border: Some(rgba(0xd6d9abff).into()),
                         deleted: Some(rgba(0xdc3330ff).into()),
+                        deleted_background: Some(rgba(0xffd9d2ff).into()),
+                        deleted_border: Some(rgba(0xffbbafff).into()),
                         error: Some(rgba(0xdc3330ff).into()),
+                        error_background: Some(rgba(0xffd9d2ff).into()),
+                        error_border: Some(rgba(0xffbbafff).into()),
                         hidden: Some(rgba(0x6a7f86ff).into()),
-                        hint: Some(rgba(0x298bd1ff).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(0x859904ff).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(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![
@@ -513,19 +541,47 @@ pub fn solarized() -> UserThemeFamily {
                     },
                     status: StatusColorsRefinement {
                         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(0x1f210cff).into()),
+                        created_border: Some(rgba(0x323610ff).into()),
                         deleted: Some(rgba(0xdc3330ff).into()),
+                        deleted_background: Some(rgba(0x4a090fff).into()),
+                        deleted_border: Some(rgba(0x641116ff).into()),
                         error: Some(rgba(0xdc3330ff).into()),
+                        error_background: Some(rgba(0x4a090fff).into()),
+                        error_border: Some(rgba(0x641116ff).into()),
                         hidden: Some(rgba(0x6f8389ff).into()),
-                        hint: Some(rgba(0x288bd1ff).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(0x859904ff).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(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![

crates/theme2/src/themes/summercamp.rs 🔗

@@ -96,19 +96,47 @@ pub fn summercamp() -> UserThemeFamily {
                 },
                 status: StatusColorsRefinement {
                     conflict: Some(rgba(0xf1fe29ff).into()),
+                    conflict_background: Some(rgba(0x556305ff).into()),
+                    conflict_border: Some(rgba(0x727f0aff).into()),
                     created: Some(rgba(0x5dea5aff).into()),
+                    created_background: Some(rgba(0x0a4d13ff).into()),
+                    created_border: Some(rgba(0x1a6a20ff).into()),
                     deleted: Some(rgba(0xe35142ff).into()),
+                    deleted_background: Some(rgba(0x491013ff).into()),
+                    deleted_border: Some(rgba(0x651c1cff).into()),
                     error: Some(rgba(0xe35142ff).into()),
+                    error_background: Some(rgba(0x491013ff).into()),
+                    error_border: Some(rgba(0x651c1cff).into()),
                     hidden: Some(rgba(0x4c4735ff).into()),
-                    hint: Some(rgba(0x499befff).into()),
+                    hidden_background: Some(rgba(0x2a261cff).into()),
+                    hidden_border: Some(rgba(0x2e2a1fff).into()),
+                    hint: Some(rgba(0x246e61ff).into()),
+                    hint_background: Some(rgba(0x0e2242ff).into()),
+                    hint_border: Some(rgba(0x193761ff).into()),
                     ignored: Some(rgba(0x736e55ff).into()),
+                    ignored_background: Some(rgba(0x2a261cff).into()),
+                    ignored_border: Some(rgba(0x312d21ff).into()),
                     info: Some(rgba(0x499befff).into()),
+                    info_background: Some(rgba(0x0e2242ff).into()),
+                    info_border: Some(rgba(0x193761ff).into()),
                     modified: Some(rgba(0xf1fe29ff).into()),
+                    modified_background: Some(rgba(0x556305ff).into()),
+                    modified_border: Some(rgba(0x727f0aff).into()),
                     predictive: Some(rgba(0x5dea5aff).into()),
+                    predictive_background: Some(rgba(0x0a4d13ff).into()),
+                    predictive_border: Some(rgba(0x1a6a20ff).into()),
                     renamed: Some(rgba(0x499befff).into()),
+                    renamed_background: Some(rgba(0x0e2242ff).into()),
+                    renamed_border: Some(rgba(0x193761ff).into()),
                     success: Some(rgba(0x5dea5aff).into()),
+                    success_background: Some(rgba(0x0a4d13ff).into()),
+                    success_border: Some(rgba(0x1a6a20ff).into()),
                     unreachable: Some(rgba(0x736e55ff).into()),
+                    unreachable_background: Some(rgba(0x2a261cff).into()),
+                    unreachable_border: Some(rgba(0x312d21ff).into()),
                     warning: Some(rgba(0xf1fe29ff).into()),
+                    warning_background: Some(rgba(0x556305ff).into()),
+                    warning_border: Some(rgba(0x727f0aff).into()),
                     ..Default::default()
                 },
                 player: Some(PlayerColors(vec![

crates/theme_importer/src/theme_printer.rs 🔗

@@ -310,19 +310,47 @@ impl<'a> Debug for StatusColorsRefinementPrinter<'a> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         let status_colors = vec![
             ("conflict", self.0.conflict),
+            ("conflict_background", self.0.conflict_background),
+            ("conflict_border", self.0.conflict_border),
             ("created", self.0.created),
+            ("created_background", self.0.created_background),
+            ("created_border", self.0.created_border),
             ("deleted", self.0.deleted),
+            ("deleted_background", self.0.deleted_background),
+            ("deleted_border", self.0.deleted_border),
             ("error", self.0.error),
+            ("error_background", self.0.error_background),
+            ("error_border", self.0.error_border),
             ("hidden", self.0.hidden),
+            ("hidden_background", self.0.hidden_background),
+            ("hidden_border", self.0.hidden_border),
             ("hint", self.0.hint),
+            ("hint_background", self.0.hint_background),
+            ("hint_border", self.0.hint_border),
             ("ignored", self.0.ignored),
+            ("ignored_background", self.0.ignored_background),
+            ("ignored_border", self.0.ignored_border),
             ("info", self.0.info),
+            ("info_background", self.0.info_background),
+            ("info_border", self.0.info_border),
             ("modified", self.0.modified),
+            ("modified_background", self.0.modified_background),
+            ("modified_border", self.0.modified_border),
             ("predictive", self.0.predictive),
+            ("predictive_background", self.0.predictive_background),
+            ("predictive_border", self.0.predictive_border),
             ("renamed", self.0.renamed),
+            ("renamed_background", self.0.renamed_background),
+            ("renamed_border", self.0.renamed_border),
             ("success", self.0.success),
+            ("success_background", self.0.success_background),
+            ("success_border", self.0.success_border),
             ("unreachable", self.0.unreachable),
+            ("unreachable_background", self.0.unreachable_background),
+            ("unreachable_border", self.0.unreachable_border),
             ("warning", self.0.warning),
+            ("warning_background", self.0.warning_background),
+            ("warning_border", self.0.warning_border),
         ];
 
         f.write_str("StatusColorsRefinement {")?;

crates/theme_importer/src/zed1/converter.rs 🔗

@@ -76,21 +76,56 @@ impl Zed1ThemeConverter {
 
         let lowest = &base_theme.lowest;
 
+        let editor = &self.theme.editor;
+
         Ok(StatusColorsRefinement {
             created: convert(lowest.positive.default.foreground),
+            created_background: convert(lowest.positive.default.background),
+            created_border: convert(lowest.positive.default.border),
             modified: convert(lowest.warning.default.foreground),
+            modified_background: convert(lowest.warning.default.background),
+            modified_border: convert(lowest.warning.default.border),
             deleted: convert(lowest.negative.default.foreground),
+            deleted_background: convert(lowest.negative.default.background),
+            deleted_border: convert(lowest.negative.default.border),
             success: convert(lowest.positive.default.foreground),
+            success_background: convert(lowest.positive.default.background),
+            success_border: convert(lowest.positive.default.border),
             warning: convert(lowest.warning.default.foreground),
+            warning_background: convert(lowest.warning.default.background),
+            warning_border: convert(lowest.warning.default.border),
             error: convert(lowest.negative.default.foreground),
-            hint: convert(lowest.accent.default.foreground),
+            error_background: convert(lowest.negative.default.background),
+            error_border: convert(lowest.negative.default.border),
+            // The `hint` color used in Zed1 is inlined from the syntax colors.
+            hint: editor
+                .hint
+                .color
+                .map(zed1_color_to_hsla)
+                .or(convert(lowest.accent.default.foreground)),
+            hint_background: convert(lowest.accent.default.background),
+            hint_border: convert(lowest.accent.default.border),
             predictive: convert(lowest.positive.default.foreground),
+            predictive_background: convert(lowest.positive.default.background),
+            predictive_border: convert(lowest.positive.default.border),
             conflict: convert(lowest.warning.default.foreground),
+            conflict_background: convert(lowest.warning.default.background),
+            conflict_border: convert(lowest.warning.default.border),
             hidden: convert(lowest.base.disabled.foreground),
+            hidden_background: convert(lowest.base.disabled.background),
+            hidden_border: convert(lowest.base.disabled.border),
             ignored: convert(lowest.variant.default.foreground),
+            ignored_background: convert(lowest.variant.default.background),
+            ignored_border: convert(lowest.variant.default.border),
             info: convert(lowest.accent.default.foreground),
+            info_background: convert(lowest.accent.default.background),
+            info_border: convert(lowest.accent.default.border),
             renamed: convert(lowest.accent.default.foreground),
+            renamed_background: convert(lowest.accent.default.background),
+            renamed_border: convert(lowest.accent.default.border),
             unreachable: convert(lowest.variant.default.foreground), // TODO: Should this be transparent?
+            unreachable_background: convert(lowest.variant.default.background),
+            unreachable_border: convert(lowest.variant.default.border),
         })
     }
 

crates/theme_selector/Cargo.toml 🔗

@@ -9,6 +9,7 @@ path = "src/theme_selector.rs"
 doctest = false
 
 [dependencies]
+client = { path = "../client" }
 editor = { path = "../editor" }
 fuzzy = { path = "../fuzzy" }
 fs = { path = "../fs" }

crates/theme_selector/src/theme_selector.rs 🔗

@@ -1,3 +1,4 @@
+use client::{telemetry::Telemetry, TelemetrySettings};
 use feature_flags::FeatureFlagAppExt;
 use fs::Fs;
 use fuzzy::{match_strings, StringMatch, StringMatchCandidate};
@@ -19,7 +20,8 @@ pub fn init(cx: &mut AppContext) {
 pub fn toggle(workspace: &mut Workspace, _: &Toggle, cx: &mut ViewContext<Workspace>) {
     workspace.toggle_modal(cx, |workspace, cx| {
         let fs = workspace.app_state().fs.clone();
-        cx.add_view(|cx| ThemeSelector::new(ThemeSelectorDelegate::new(fs, cx), cx))
+        let telemetry = workspace.client().telemetry().clone();
+        cx.add_view(|cx| ThemeSelector::new(ThemeSelectorDelegate::new(fs, telemetry, cx), cx))
     });
 }
 
@@ -48,10 +50,15 @@ pub struct ThemeSelectorDelegate {
     original_theme: Arc<Theme>,
     selection_completed: bool,
     selected_index: usize,
+    telemetry: Arc<Telemetry>,
 }
 
 impl ThemeSelectorDelegate {
-    fn new(fs: Arc<dyn Fs>, cx: &mut ViewContext<ThemeSelector>) -> Self {
+    fn new(
+        fs: Arc<dyn Fs>,
+        telemetry: Arc<Telemetry>,
+        cx: &mut ViewContext<ThemeSelector>,
+    ) -> Self {
         let original_theme = theme::current(cx).clone();
 
         let staff_mode = cx.is_staff();
@@ -74,6 +81,7 @@ impl ThemeSelectorDelegate {
             original_theme: original_theme.clone(),
             selected_index: 0,
             selection_completed: false,
+            telemetry,
         };
         this.select_if_matching(&original_theme.meta.name);
         this
@@ -124,6 +132,11 @@ impl PickerDelegate for ThemeSelectorDelegate {
         self.selection_completed = true;
 
         let theme_name = theme::current(cx).meta.name.clone();
+
+        let telemetry_settings = *settings::get::<TelemetrySettings>(cx);
+        self.telemetry
+            .report_setting_event(telemetry_settings, "theme", theme_name.to_string());
+
         update_settings_file::<ThemeSettings>(self.fs.clone(), cx, |settings| {
             settings.theme = Some(theme_name);
         });

crates/theme_selector2/Cargo.toml 🔗

@@ -9,17 +9,18 @@ path = "src/theme_selector.rs"
 doctest = false
 
 [dependencies]
+client = { package = "client2", path = "../client2" }
 editor = { package = "editor2", path = "../editor2" }
-fuzzy = { package = "fuzzy2", path = "../fuzzy2" }
+feature_flags = { package = "feature_flags2", path = "../feature_flags2" }
 fs = { package = "fs2", path = "../fs2" }
+fuzzy = { package = "fuzzy2", path = "../fuzzy2" }
 gpui = { package = "gpui2", path = "../gpui2" }
-ui = { package = "ui2", path = "../ui2" }
 picker = { package = "picker2", path = "../picker2" }
-theme = { package = "theme2", path = "../theme2" }
 settings = { package = "settings2", path = "../settings2" }
-feature_flags = { package = "feature_flags2", path = "../feature_flags2" }
-workspace = { package = "workspace2", path = "../workspace2" }
+theme = { package = "theme2", path = "../theme2" }
+ui = { package = "ui2", path = "../ui2" }
 util = { path = "../util" }
+workspace = { package = "workspace2", path = "../workspace2" }
 log.workspace = true
 parking_lot.workspace = true
 postage.workspace = true

crates/theme_selector2/src/theme_selector.rs 🔗

@@ -1,3 +1,4 @@
+use client::{telemetry::Telemetry, TelemetrySettings};
 use feature_flags::FeatureFlagAppExt;
 use fs::Fs;
 use fuzzy::{match_strings, StringMatch, StringMatchCandidate};
@@ -6,7 +7,7 @@ use gpui::{
     VisualContext, WeakView,
 };
 use picker::{Picker, PickerDelegate};
-use settings::{update_settings_file, SettingsStore};
+use settings::{update_settings_file, Settings, SettingsStore};
 use std::sync::Arc;
 use theme::{Theme, ThemeMeta, ThemeRegistry, ThemeSettings};
 use ui::{prelude::*, v_stack, ListItem, ListItemSpacing};
@@ -26,9 +27,10 @@ pub fn init(cx: &mut AppContext) {
 
 pub fn toggle(workspace: &mut Workspace, _: &Toggle, cx: &mut ViewContext<Workspace>) {
     let fs = workspace.app_state().fs.clone();
+    let telemetry = workspace.client().telemetry().clone();
     workspace.toggle_modal(cx, |cx| {
         ThemeSelector::new(
-            ThemeSelectorDelegate::new(cx.view().downgrade(), fs, cx),
+            ThemeSelectorDelegate::new(cx.view().downgrade(), fs, telemetry, cx),
             cx,
         )
     });
@@ -86,6 +88,7 @@ pub struct ThemeSelectorDelegate {
     original_theme: Arc<Theme>,
     selection_completed: bool,
     selected_index: usize,
+    telemetry: Arc<Telemetry>,
     view: WeakView<ThemeSelector>,
 }
 
@@ -93,6 +96,7 @@ impl ThemeSelectorDelegate {
     fn new(
         weak_view: WeakView<ThemeSelector>,
         fs: Arc<dyn Fs>,
+        telemetry: Arc<Telemetry>,
         cx: &mut ViewContext<ThemeSelector>,
     ) -> Self {
         let original_theme = cx.theme().clone();
@@ -122,6 +126,7 @@ impl ThemeSelectorDelegate {
             original_theme: original_theme.clone(),
             selected_index: 0,
             selection_completed: false,
+            telemetry,
             view: weak_view,
         };
         this.select_if_matching(&original_theme.name);
@@ -175,6 +180,11 @@ impl PickerDelegate for ThemeSelectorDelegate {
         self.selection_completed = true;
 
         let theme_name = cx.theme().name.clone();
+
+        let telemetry_settings = TelemetrySettings::get_global(cx).clone();
+        self.telemetry
+            .report_setting_event(telemetry_settings, "theme", theme_name.to_string());
+
         update_settings_file::<ThemeSettings>(self.fs.clone(), cx, move |settings| {
             settings.theme = Some(theme_name.to_string());
         });

crates/workspace2/src/dock.rs 🔗

@@ -29,8 +29,8 @@ pub trait Panel: FocusableView + EventEmitter<PanelEvent> {
     fn set_position(&mut self, position: DockPosition, cx: &mut ViewContext<Self>);
     fn size(&self, cx: &WindowContext) -> Pixels;
     fn set_size(&mut self, size: Option<Pixels>, cx: &mut ViewContext<Self>);
-    // todo!("We should have a icon tooltip method, rather than using persistant_name")
     fn icon(&self, cx: &WindowContext) -> Option<ui::Icon>;
+    fn icon_tooltip(&self, cx: &WindowContext) -> Option<&'static str>;
     fn toggle_action(&self) -> Box<dyn Action>;
     fn icon_label(&self, _: &WindowContext) -> Option<String> {
         None
@@ -54,6 +54,7 @@ pub trait PanelHandle: Send + Sync {
     fn size(&self, cx: &WindowContext) -> Pixels;
     fn set_size(&self, size: Option<Pixels>, cx: &mut WindowContext);
     fn icon(&self, cx: &WindowContext) -> Option<ui::Icon>;
+    fn icon_tooltip(&self, cx: &WindowContext) -> Option<&'static str>;
     fn toggle_action(&self, cx: &WindowContext) -> Box<dyn Action>;
     fn icon_label(&self, cx: &WindowContext) -> Option<String>;
     fn focus_handle(&self, cx: &AppContext) -> FocusHandle;
@@ -108,6 +109,10 @@ where
         self.read(cx).icon(cx)
     }
 
+    fn icon_tooltip(&self, cx: &WindowContext) -> Option<&'static str> {
+        self.read(cx).icon_tooltip(cx)
+    }
+
     fn toggle_action(&self, cx: &WindowContext) -> Box<dyn Action> {
         self.read(cx).toggle_action()
     }
@@ -612,6 +617,7 @@ impl Render for PanelButtons {
             .enumerate()
             .filter_map(|(i, entry)| {
                 let icon = entry.panel.icon(cx)?;
+                let icon_tooltip = entry.panel.icon_tooltip(cx)?;
                 let name = entry.panel.persistent_name();
                 let panel = entry.panel.clone();
 
@@ -627,7 +633,7 @@ impl Render for PanelButtons {
                 } else {
                     let action = entry.panel.toggle_action(cx);
 
-                    (action, name.into())
+                    (action, icon_tooltip.into())
                 };
 
                 Some(
@@ -748,6 +754,10 @@ pub mod test {
             None
         }
 
+        fn icon_tooltip(&self, _cx: &WindowContext) -> Option<&'static str> {
+            None
+        }
+
         fn toggle_action(&self) -> Box<dyn Action> {
             ToggleTestPanel.boxed_clone()
         }

crates/zed/src/main.rs 🔗

@@ -168,6 +168,11 @@ fn main() {
 
         client.telemetry().start(installation_id, session_id, cx);
         let telemetry_settings = *settings::get::<TelemetrySettings>(cx);
+        client.telemetry().report_setting_event(
+            telemetry_settings,
+            "theme",
+            theme::current(cx).meta.name.to_string(),
+        );
         let event_operation = match existing_installation_id_found {
             Some(false) => "first open",
             _ => "open",

crates/zed2/src/main.rs 🔗

@@ -173,6 +173,11 @@ fn main() {
 
         client.telemetry().start(installation_id, session_id, cx);
         let telemetry_settings = *client::TelemetrySettings::get_global(cx);
+        client.telemetry().report_setting_event(
+            telemetry_settings,
+            "theme",
+            cx.theme().name.to_string(),
+        );
         let event_operation = match existing_installation_id_found {
             Some(false) => "first open",
             _ => "open",

script/deploy → script/deploy-collab 🔗

@@ -10,11 +10,6 @@ fi
 environment=$1
 version=$2
 
-if [[ ${environment} == "nightly" ]]; then
-  echo "nightly is not yet supported"
-  exit 1
-fi
-
 export_vars_for_environment ${environment}
 image_id=$(image_id_for_version ${version})
 
@@ -23,6 +18,6 @@ export ZED_KUBE_NAMESPACE=${environment}
 export ZED_IMAGE_ID=${image_id}
 
 target_zed_kube_cluster
-envsubst < crates/collab/k8s/manifest.template.yml | kubectl apply -f -
+envsubst < crates/collab/k8s/collab.template.yml | kubectl apply -f -
 
 echo "deployed collab v${version} to ${environment}"

script/deploy-postgrest 🔗

@@ -0,0 +1,25 @@
+#!/bin/bash
+
+set -eu
+source script/lib/deploy-helpers.sh
+
+if [[ $# < 1 ]]; then
+  echo "Usage: $0 <production|staging> (postgrest not needed on preview or nightly)"
+  exit 1
+fi
+environment=$1
+
+if [[ ${environment} == "preview" || ${environment} == "nightly" ]]; then
+  echo "website does not exist in preview or nightly"
+  exit 1
+fi
+
+export_vars_for_environment ${environment}
+
+export ZED_DO_CERTIFICATE_ID=$(doctl compute certificate list --format ID --no-header)
+export ZED_KUBE_NAMESPACE=${environment}
+
+target_zed_kube_cluster
+envsubst < crates/collab/k8s/postgrest.template.yml | kubectl apply -f -
+
+echo "deployed postgrest"