+ css e:400ms of:hidden
+ @off o:0
+
+ if state.active_bang or state.sorted_links.length < 1
+
+
+ else
+
+
diff --git a/src/components/app-link.imba b/src/components/app-link.imba
new file mode 100644
index 0000000..307cf9c
--- /dev/null
+++ b/src/components/app-link.imba
@@ -0,0 +1,55 @@
+tag app-link
+
+ frequency = 0
+
+
+ css d:flex fld:row jc:space-between ai:center
+ px:16px py:11px rd:5px c:$text-c
+ if link.is_bang
+ css c:$bang-c
+
+ <.link-left>
+ css d:flex w:100%
+
+
+
+ css w:20px h:20px mr:10px rd:3px
+
+ <.name> link.name
+ css tt:capitalize fs:20px overflow-wrap:anywhere
+
+ if link.alias
+ <.name>
+ css d:flex ja:center c:$effective-name-c ml:10px fs:14px
+ css .parens fs:10px c:$effective-name-parens-c
+
+ "("
+ link.alias
+ ")"
+
+ <.link-right>
+ css d:hflex jc:space-between w:70px ai:center
+
+ css .selected .link-button visibility:visible
+
+ <.link-buttons>
+ css d:flex fld:row jc:start ai:center gap:5px
+
+ css .link-button visibility:hidden rd:3px c:$button-c fs:15px px:3px
+ if index is state.link_selection_index
+ css .link-button visibility:visible
+
+ css .link-button svg w:15px
+
+ <.link-button @click.prevent.stop=api.pin_link(link)>
+ if Pins[link.url]
+ css visibility:visible c:$button-dim-c
+
+