[object Object]

← back to Wallco Ai

feat(/designs): keyboard shortcut '/' focuses search (GH/X/Slack pattern); Esc blurs; ignored when user is typing in another input

7bbdf26c5d2d77ffe9564ec4d92e4dd8859522ba · 2026-05-14 09:36:47 -0700 · SteveStudio2

Files touched

Diff

commit 7bbdf26c5d2d77ffe9564ec4d92e4dd8859522ba
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Thu May 14 09:36:47 2026 -0700

    feat(/designs): keyboard shortcut '/' focuses search (GH/X/Slack pattern); Esc blurs; ignored when user is typing in another input
---
 server.js | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/server.js b/server.js
index 4da69e6..cba3050 100644
--- a/server.js
+++ b/server.js
@@ -3912,6 +3912,23 @@ ${FOOTER}
     localStorage.setItem('wallco-density', this.value);
   });
   window.addEventListener('resize', function(){ applyCols(slider.value); });
+
+  // Keyboard shortcut: "/" focuses search (GitHub/X/Slack pattern). Esc clears
+  // focus and returns to grid. Skipped when user is already typing in an input.
+  var search = document.getElementById('catalog-search-input');
+  if (search) {
+    document.addEventListener('keydown', function(e){
+      var t = e.target, tag = (t && t.tagName) || '';
+      var inField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT' || (t && t.isContentEditable);
+      if (e.key === '/' && !inField) {
+        e.preventDefault();
+        search.focus();
+        search.select && search.select();
+      } else if (e.key === 'Escape' && document.activeElement === search) {
+        search.blur();
+      }
+    });
+  }
   var sortSel = document.getElementById('sort-select');
   var sortH   = document.getElementById('sort-hidden');
   if (sortSel && sortH) {

← 3291dd7 fix(/designs): move card-hover OUT of card-link so the Sampl  ·  back to Wallco Ai  ·  feat(/designs surprise-me): defensive null-id handling + 'Tr a188292 →