Commit 53c694c
committed
feat: M13 UX polish — collection search, table keyboard, auto-focus, dirty guard (#T1300-T1303,T1307)
Four parallel agents shipped five tasks in one pass. All typecheck + 226 tests green.
T1300 — Collection sidebar search/filter
New search input at top of sidebar. Real-time case-insensitive filter
on request name + URL + method prefix ("GET /users" works). Folders
auto-expand when filtering, hide when zero descendants match. Cmd+Shift+F
focuses from anywhere, Cmd+F when sidebar has focus, ESC clears and
returns focus to tree. Empty state with "Clear filter" button.
Files: Sidebar.tsx, store.ts, App.tsx
T1301 — Headers/Params: Shift+Enter inserts row below
Shift+Enter in any Key or Value cell inserts a new empty row below and
focuses the new Key cell. Works in both Headers and Params tabs. Uses
requestAnimationFrame to focus after React commits. preventDefault stops
accidental request send.
Files: HeadersEditor.tsx, ParamsEditor.tsx, RequestBuilder.tsx, store.ts
T1302 — Headers/Params: auto-append row on Tab from last row
Tab from the Key cell of the last row (when non-empty) silently appends
a new empty row. Browser Tab focus naturally lands on Value of the
current row. If last row is already blank, no append. If autocomplete
dropdown is open, Tab inserts the variable instead.
Files: HeadersEditor.tsx, ParamsEditor.tsx, HighlightedInput.tsx
T1303 — Cmd+N auto-focus URL input
newTab() in the store now bumps focusUrlTick in the same set() call.
RequestBuilder's existing useEffect on focusUrlTick fires focus+select
on the URL ref. restoreHistoryEntry() and openRequest() do NOT bump
the tick, so restored tabs never steal focus.
Files: store.ts
T1307 — Dirty-tab close guard unification + "don't ask again"
New useDirtyTabGuard hook centralizes all close paths. Every trigger
(middle-click, Cmd+W, close button, context menu Close/Close Others/
Close Right/Close All, Cmd+Shift+W, command palette) now goes through
the guard. ConfirmDialog gains an optional "Don't ask again for this
session" checkbox. Session-scoped useRef, resets on restart.
Bug fixed: Cmd+W and command palette "Close tab" previously bypassed
the dirty check entirely.
Files: useDirtyTabGuard.tsx (new), TabBar.tsx, Dialog.tsx, App.tsx, commands.ts
Infrastructure:
- New developer-ux agent definition (.claude/agents/developer-ux.md)
for keyboard/focus/guard/micro-interaction tasks
- pre-push hook gains build:packages step before typecheck to prevent
stale .d.ts errors1 parent 05164bb commit 53c694c
13 files changed
Lines changed: 663 additions & 178 deletions
File tree
- .claude/agents
- apps/desktop/src/renderer/src
- components
- hooks
- ui
- scripts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
28 | | - | |
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
| 42 | + | |
| 43 | + | |
41 | 44 | | |
42 | 45 | | |
43 | 46 | | |
| |||
81 | 84 | | |
82 | 85 | | |
83 | 86 | | |
84 | | - | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
85 | 93 | | |
86 | 94 | | |
87 | 95 | | |
88 | 96 | | |
89 | 97 | | |
90 | 98 | | |
91 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
92 | 105 | | |
93 | 106 | | |
94 | 107 | | |
| |||
142 | 155 | | |
143 | 156 | | |
144 | 157 | | |
145 | | - | |
| 158 | + | |
146 | 159 | | |
147 | 160 | | |
148 | 161 | | |
149 | 162 | | |
150 | 163 | | |
151 | 164 | | |
152 | 165 | | |
| 166 | + | |
153 | 167 | | |
154 | 168 | | |
155 | 169 | | |
| |||
184 | 198 | | |
185 | 199 | | |
186 | 200 | | |
| 201 | + | |
| 202 | + | |
187 | 203 | | |
188 | | - | |
| 204 | + | |
189 | 205 | | |
190 | 206 | | |
191 | 207 | | |
| |||
276 | 292 | | |
277 | 293 | | |
278 | 294 | | |
279 | | - | |
| 295 | + | |
280 | 296 | | |
281 | 297 | | |
282 | 298 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| 16 | + | |
15 | 17 | | |
16 | 18 | | |
17 | 19 | | |
18 | 20 | | |
19 | 21 | | |
20 | 22 | | |
21 | | - | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
68 | 69 | | |
69 | 70 | | |
70 | 71 | | |
71 | | - | |
72 | | - | |
73 | | - | |
| 72 | + | |
74 | 73 | | |
75 | 74 | | |
76 | 75 | | |
| |||
121 | 120 | | |
122 | 121 | | |
123 | 122 | | |
124 | | - | |
125 | 123 | | |
126 | 124 | | |
127 | 125 | | |
| |||
Lines changed: 55 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
2 | 3 | | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| 9 | + | |
8 | 10 | | |
9 | 11 | | |
10 | 12 | | |
11 | 13 | | |
12 | 14 | | |
| 15 | + | |
| 16 | + | |
13 | 17 | | |
14 | 18 | | |
15 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
16 | 68 | | |
17 | 69 | | |
18 | 70 | | |
| |||
35 | 87 | | |
36 | 88 | | |
37 | 89 | | |
| 90 | + | |
38 | 91 | | |
39 | 92 | | |
40 | 93 | | |
41 | 94 | | |
| 95 | + | |
42 | 96 | | |
43 | 97 | | |
44 | 98 | | |
| |||
49 | 103 | | |
50 | 104 | | |
51 | 105 | | |
| 106 | + | |
52 | 107 | | |
53 | 108 | | |
54 | 109 | | |
| |||
Lines changed: 55 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
2 | 3 | | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| 9 | + | |
8 | 10 | | |
9 | 11 | | |
10 | 12 | | |
11 | 13 | | |
12 | 14 | | |
| 15 | + | |
| 16 | + | |
13 | 17 | | |
14 | 18 | | |
15 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
16 | 68 | | |
17 | 69 | | |
18 | 70 | | |
| |||
35 | 87 | | |
36 | 88 | | |
37 | 89 | | |
| 90 | + | |
38 | 91 | | |
39 | 92 | | |
40 | 93 | | |
41 | 94 | | |
| 95 | + | |
42 | 96 | | |
43 | 97 | | |
44 | 98 | | |
| |||
49 | 103 | | |
50 | 104 | | |
51 | 105 | | |
| 106 | + | |
52 | 107 | | |
53 | 108 | | |
54 | 109 | | |
| |||
0 commit comments