Add rudimentary UI for `BufferSearch`

Marshall Bowers created

Change summary

crates/ui2/src/components/buffer_search.rs | 13 +++++++++++--
crates/ui2/src/elements/button.rs          |  2 +-
crates/ui2/src/elements/icon.rs            |  4 ++++
3 files changed, 16 insertions(+), 3 deletions(-)

Detailed changes

crates/ui2/src/components/buffer_search.rs 🔗

@@ -1,5 +1,5 @@
 use crate::prelude::*;
-use crate::EditorPane;
+use crate::{h_stack, EditorPane, Icon, IconButton, Input};
 
 #[derive(Element)]
 #[element(view_state = "EditorPane")]
@@ -15,6 +15,15 @@ impl BufferSearch {
         _view: &mut EditorPane,
         cx: &mut ViewContext<EditorPane>,
     ) -> impl Element<ViewState = EditorPane> {
-        div().child("This is where Buffer Search goes.")
+        let theme = theme(cx);
+
+        h_stack()
+            .fill(theme.highest.base.default.background)
+            .p_2()
+            .child(
+                h_stack()
+                    .child(Input::new("Search (↑/↓ for previous/next query)"))
+                    .child(IconButton::new(Icon::Replace)),
+            )
     }
 }

crates/ui2/src/elements/button.rs 🔗

@@ -4,7 +4,7 @@ use std::sync::Arc;
 use gpui3::{DefiniteLength, Hsla, Interactive, MouseButton, WindowContext};
 
 use crate::prelude::*;
-use crate::{h_stack, theme, Icon, IconColor, IconElement, Label, LabelColor, LabelSize};
+use crate::{h_stack, Icon, IconColor, IconElement, Label, LabelColor, LabelSize};
 
 #[derive(Default, PartialEq, Clone, Copy)]
 pub enum IconPosition {

crates/ui2/src/elements/icon.rs 🔗

@@ -82,6 +82,8 @@ pub enum Icon {
     MicMute,
     Plus,
     Quote,
+    Replace,
+    ReplaceAll,
     Screen,
     SelectAll,
     Split,
@@ -130,6 +132,8 @@ impl Icon {
             Icon::MicMute => "icons/mic-mute.svg",
             Icon::Plus => "icons/plus.svg",
             Icon::Quote => "icons/quote.svg",
+            Icon::Replace => "icons/replace.svg",
+            Icon::ReplaceAll => "icons/replace_all.svg",
             Icon::Screen => "icons/desktop.svg",
             Icon::SelectAll => "icons/select-all.svg",
             Icon::Split => "icons/split.svg",