Originally created by: Akarsh-Hegde
Summary
- Browsers default
<button> to cursor:default — hovering buttons showed an arrow instead of a hand, making them feel unclickable.
- Added a global CSS rule in
globals.css so every enabled button shows pointer, and disabled ones show not-allowed.
- Fixed 5 inline
cursor: 'default' styles in Switch, Select (trigger + item), and NumberStepper (decrement + increment) that would have overridden the global rule.
- Added 9 test cases in
ui/__tests__/cursor-pointer.test.ts to prevent regressions.
Files changed
| File |
Change |
ui/app/globals.css |
Global button:not(:disabled) + button:disabled cursor rules |
ui/components/ui/Switch.tsx |
cursor: 'default' → 'pointer' |
ui/components/ui/Select.tsx |
2× cursor: 'default' → 'pointer' (trigger + item) |
ui/components/ui/NumberStepper.tsx |
2× conditional 'default' → 'pointer' |
ui/__tests__/cursor-pointer.test.ts |
9 new tests (CSS rule presence + no override regressions) |
Test plan
- [x]
bun test __tests__/cursor-pointer.test.ts — 9/9 pass
- [x] Pre-push hook (cargo fmt + clippy + cargo test + UI build) — passed
- [ ] Visual: hover any button in the UI — cursor should show a hand pointer; disabled buttons show a not-allowed cursor
🤖 Generated with Claude Code
Originally posted by: Akarsh-Hegde
All cursor issues fixed — pushed as fbe4858.
Fixed:
SaveButton(SettingsView.tsx): removed the inlinecursor: 'default'. The button has nodisabledprop so the globalbutton:not(:disabled) { cursor: pointer }rule now applies correctly.TasksView.tsxsync button:'default'→'not-allowed'(button hasdisabled={syncing}).TasksView.tsxdisconnect button:'default'→'not-allowed'(button hasdisabled={disconnecting === t.id}).TasksView.tsxlook-up-orgs button:'default'→'not-allowed'(button hasdisabled={!pat.trim() || loading === 'orgs'}).NumberStepper.tsx: removed both inlinecursorexpressions entirely. Thedisabled={atMin}/disabled={atMax}attributes are already present, so the global rules manage it — which is exactly the point of the systematic fix.One comment I'm pushing back on:
The test file header in
ui/__tests__/cursor-pointer.test.ts— the file does start with// meridian — normalises screenpipe activity into structured app sessions, which is the header required byCLAUDE.md. The alternative string the reviewer cited (//ambient dev tool that watches what you do…) is not the standard for this repository. Keeping current header.Originally posted by: adityaharishch
File header — follow-up
The dispute on the test file header needs clarification.
CLAUDE.mdat the repo root (the authoritative source) defines the required header as:This is confirmed by recent commits (e.g. [#250]:
chore: update file headers with boosting developer productivity tagline), which batch-updated all files to this exact string. The// meridian — normalises screenpipe activity…variant is an old header that was retired in that update.Please update
ui/__tests__/cursor-pointer.test.tsline 1 to match the current standard.Related
Tickets:
#250Originally posted by: adityaharishch
BLOCKED — resolve before merge
The following item is still open:
File header on
ui/__tests__/cursor-pointer.test.ts(will break pre-commit hook)Line 1 currently reads:
The required header per
CLAUDE.md(confirmed by commit [#250] which batch-updated all files) is:The
// meridian — normalises…variant is the old header, retired in that commit. Every other test file inui/__tests__/uses the current string. Please update line 1 of the test file to match.Related
Tickets:
#250Originally posted by: Akarsh-Hegde
All review comments addressed — latest push is 7ecd19d.
Fixed in this PR:
SaveButton(SettingsView.tsx): removedcursor: 'default'— globalbutton:not(:disabled) { cursor: pointer }now applies.'default'→'not-allowed'.'default'→'not-allowed'.'default'→'not-allowed'.NumberStepper.tsx: removed both inlinecursorexpressions — thedisabled={atMin/atMax}attribute already exists on both buttons, so the global rule handles it.Pushed back on (still standing):
Comment [#3] (test file header) —
cursor-pointer.test.tsnow correctly uses the new header (//ambient dev tool…). I had initially kept the old header thinking it was correct; PR [#250] clarified that the new header is the standard. Fixed.Related
Tickets:
#250Tickets:
#3Ticket changed by: Akarsh-Hegde
Originally posted by: adityaharishch
🎉 This PR is included in version 1.47.0 🎉
The release is available on:
v1.47.0Your semantic-release bot 📦🚀