Add moar icons

Derek Briggs created

Change summary

assets/icons/file_icons/chevron_down.svg      |  3 ++
assets/icons/file_icons/chevron_left.svg      |  3 ++
assets/icons/file_icons/chevron_right.svg     |  3 ++
assets/icons/file_icons/chevron_up.svg        |  3 ++
assets/icons/file_icons/file_types.json       | 16 +++++++++----
assets/icons/file_icons/folder.svg            |  2 
assets/icons/file_icons/folder_open.svg       |  2 
crates/project_panel/src/file_associations.rs | 25 ++++++++++++++++++--
8 files changed, 47 insertions(+), 10 deletions(-)

Detailed changes

assets/icons/file_icons/chevron_down.svg 🔗

@@ -0,0 +1,3 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M3.63281 5.66406L6.99344 8.89844L10.3672 5.66406" stroke="black" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>

assets/icons/file_icons/chevron_left.svg 🔗

@@ -0,0 +1,3 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M8.35938 3.63281L5.125 6.99344L8.35938 10.3672" stroke="black" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>

assets/icons/file_icons/chevron_right.svg 🔗

@@ -0,0 +1,3 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.64062 3.64062L8.89062 7.00125L5.64062 10.375" stroke="black" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>

assets/icons/file_icons/chevron_up.svg 🔗

@@ -0,0 +1,3 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M3.63281 8.36719L6.99344 5.13281L10.3672 8.36719" stroke="black" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>

assets/icons/file_icons/file_types.json 🔗

@@ -94,20 +94,26 @@
     "code": {
       "icon": "icons/file_icons/code.svg"
     },
-    "default": {
-      "icon": "icons/file_icons/file.svg"
+    "collapsed_chevron": {
+      "icon": "icons/file_icons/chevron_right.svg"
     },
-    "directory": {
+    "collapsed_folder": {
       "icon": "icons/file_icons/folder.svg"
     },
+    "default": {
+      "icon": "icons/file_icons/file.svg"
+    },
     "document": {
       "icon": "icons/file_icons/book.svg"
     },
     "eslint": {
       "icon": "icons/file_icons/eslint.svg"
     },
-    "expanded_directory": {
-      "icon": "icons/file_icons/folder-open.svg"
+    "expanded_chevron": {
+      "icon": "icons/file_icons/chevron_down.svg"
+    },
+    "expanded_folder": {
+      "icon": "icons/file_icons/folder_open.svg"
     },
     "image": {
       "icon": "icons/file_icons/image.svg"

assets/icons/file_icons/folder.svg 🔗

@@ -1,5 +1,5 @@
 <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M2 5.125C2 4.84886 2.22386 4.625 2.5 4.625H11.5C11.7761 4.625 12 4.84886 12 5.125V11.125C12 11.4011 11.7761 11.625 11.5 11.625H2.5C2.22386 11.625 2 11.4011 2 11.125V5.125Z" stroke="black" stroke-width="1.25" stroke-linejoin="round"/>
+<path d="M2 5.125C2 4.84886 2.22386 4.625 2.5 4.625H11.5C11.7761 4.625 12 4.84886 12 5.125V11.125C12 11.4011 11.7761 11.625 11.5 11.625H2.5C2.22386 11.625 2 11.4011 2 11.125V5.125Z" fill="black" fill-opacity="0.33" stroke="black" stroke-width="1.25" stroke-linejoin="round"/>
 <path d="M6.38197 2.375H2.5C2.22386 2.375 2 2.59886 2 2.875V4.375H8L7.27639 2.92779C7.107 2.589 6.76074 2.375 6.38197 2.375Z" fill="black" fill-opacity="0.33"/>
 <path d="M2 8V4.375M2 4.375V2.875C2 2.59886 2.22386 2.375 2.5 2.375H6.38197C6.76074 2.375 7.107 2.589 7.27639 2.92779L8 4.375H2Z" stroke="black" stroke-width="1.25"/>
 </svg>

assets/icons/file_icons/folder-open.svg → assets/icons/file_icons/folder_open.svg 🔗

@@ -1,5 +1,5 @@
 <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
 <path d="M7 2.53125H2.21875V10.625L4.5 4.59375H7.96875L7 2.53125Z" fill="black"/>
-<path d="M4.47293 4.94363C4.54554 4.74743 4.73263 4.61719 4.94184 4.61719H12.8755C13.2237 4.61719 13.4653 4.9642 13.3445 5.29074L11.1208 11.2986C11.0482 11.4948 10.8611 11.625 10.6519 11.625H2.71821C2.37002 11.625 2.12844 11.278 2.2493 10.9514L4.47293 4.94363Z" stroke="black" stroke-width="1.25"/>
+<path d="M4.47293 4.94363C4.54554 4.74743 4.73263 4.61719 4.94184 4.61719H12.8755C13.2237 4.61719 13.4653 4.9642 13.3445 5.29074L11.1208 11.2986C11.0482 11.4948 10.8611 11.625 10.6519 11.625H2.71821C2.37002 11.625 2.12844 11.278 2.2493 10.9514L4.47293 4.94363Z" fill="black" fill-opacity="0.66" stroke="black" stroke-width="1.25"/>
 <path d="M8 4.4024L7.27505 2.93264C7.10664 2.59119 6.75894 2.375 6.37821 2.375H2.5C2.22386 2.375 2 2.59886 2 2.875V11.125C2 11.4011 2.22386 11.625 2.5 11.625H4.00781" stroke="black" stroke-width="1.25" stroke-linejoin="round"/>
 </svg>

crates/project_panel/src/file_associations.rs 🔗

@@ -17,8 +17,10 @@ pub struct FileAssociations {
     types: HashMap<String, TypeConfig>,
 }
 
-const DIRECTORY_TYPE: &'static str = "directory";
-const EXPANDED_DIRECTORY_TYPE: &'static str = "expanded_directory";
+const COLLAPSED_DIRECTORY_TYPE: &'static str = "collapsed_folder";
+const EXPANDED_DIRECTORY_TYPE: &'static str = "expanded_folder";
+const COLLAPSED_CHEVRON_TYPE: &'static str = "collapsed_chevron";
+const EXPANDED_CHEVRON_TYPE: &'static str = "expanded_chevron";
 pub const FILE_TYPES_ASSET: &'static str = "icons/file_icons/file_types.json";
 
 pub fn init(assets: impl AssetSource, cx: &mut AppContext) {
@@ -72,7 +74,24 @@ impl FileAssociations {
             let key = if expanded {
                 EXPANDED_DIRECTORY_TYPE
             } else {
-                DIRECTORY_TYPE
+                COLLAPSED_DIRECTORY_TYPE
+            };
+
+            this.types
+                .get(key)
+                .map(|type_config| type_config.icon.clone())
+        })
+        .unwrap_or_else(|| Arc::from("".to_string()))
+    }
+
+    pub fn get_chevron_icon(expanded: bool, cx: &AppContext) -> Arc<str> {
+        iife!({
+            let this = cx.has_global::<Self>().then(|| cx.global::<Self>())?;
+
+            let key = if expanded {
+                EXPANDED_CHEVRON_TYPE
+            } else {
+                COLLAPSED_CHEVRON_TYPE
             };
 
             this.types