Frontend: full custom cursor coverage across the dapp #60
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#60
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Extend the issue #45 cursor pack so the dapp uses on-brand custom cursors consistently for every interaction class (idle pointer, loading, disabled/cancel, external links, text fields, etc.). Today only a subset of surfaces use image cursors; most rules still use the OS
pointer,default,wait, andnot-allowed.Prior art / wiring:
frontend/src/index.css(search forcursor:and.cursor-). Catalog:frontend/public/art/README.md§ cursors. Backlog slots:docs/frontend/missing-art-assets.md§ Cursor pack.Constraints: Browsers reject cursor images >128px; always provide a CSS fallback (e.g.
pointer,not-allowed,wait). Image cursors may be dropped on mobile / restricted contexts — document expected fallback behavior.Cursor roles × assets
Use ✅ = file exists in repo; ❌ = not in repo (needs generation).
cursorfrontend/public/art/cursors/)pointer(+ custom)primary-cta.pngcrosshair(+ custom)danger-pvp.pnggrab/grabbing(+ custom)slider-grab.pngdefault(+ custom)default-pointer.png(intended path permissing-art-assets.md)pointer(+ custom)primary-cta.pngor ship a quieterlink-pointer.pngvariantnot-allowed(+ custom)disabled.png(intended path per missing-art doc)waitorprogress(+ custom)loading.png(or spec animated cursor if feasible; otherwise static + motion in UI only)not-allowedorpointer(+ custom)cancel.png(distinct from disabled; e.g. “back out” glyph)pointer(+ custom)external-link.png(intended path per missing-art doc)text(+ custom)text-caret.png(optional; may keep native I-beam)copy(+ custom)copy.png?tooltips)help(+ custom)help.pngcol-resize/row-resizeresize-col.png/resize-row.pngzoom-in/zoom-outzoom-in.png/zoom-out.pngGeneration workflow: add prompts →
scripts/replicate-art/→ QA underfrontend/public/art/pending_manual_review/→ promote tocursors/and updatefrontend/public/art/README.mdhotspots in lock-step withfrontend/src/index.css.Implementation notes (for the MR that closes this)
cursor: pointer/default/wait/not-allowedwith utility classes or tokenized rules (same pattern as.cursor-primary-cta,.cursor-danger-pvp,.cursor-slider-grab).body/ root layout idle cursor once default asset exists.prefers-reduced-motion: if loading uses animation, provide a static fallback cursor.Verification checklist (manual QA)
Complete on desktop Chromium and desktop Firefox (where image cursors are supported). Spot-check one mobile browser and confirm graceful fallback to native cursors.
primary-cta.png.external-link.pngonce shipped.disabled.png(ornot-allowed+ asset).wait/progress+ custom asset.danger-pvp.png.slider-grab.png(hover + active).input[type="range"]styling — grab cursor.Related
mentioned in commit
ff86bacf12Shipped on
mainasff86bac.Cursors added (
frontend/public/art/cursors/):link-pointer.png,loading.png,cancel.png,copy.png,help.png— initial pixels are tight Pillow resizes from existing icons; runscripts/replicate-art/issue60_batch.pywithREPLICATE_API_TOKENto refresh via gpt-image-2 (seeissue60/prompts.json).Wiring (
frontend/src/index.css): link cursor on nav/brand, secondary buttons, wallet actions, footer in-app links, accordions, TimeCurve advanced summary, live-buy rows, modal “more”, deadline refresh; external cursor ontarget=_blankfooter pills; loading cursor on.loading-state, busy indexer deadline strip, disabled modal load-more; cancel on modal close; utilities.cursor-link,.cursor-loading,.cursor-cancel,.cursor-copy,.cursor-help; RainbowKit[data-rk]buttons.TxHashoutbound anchors usecursor-external-link; referral copy button usescursor-copy. Reduced-motion disables float on loading mascot image only (static cursor).Verification:
npm run test -- --runandnpm run typecheck(frontend) passed in the worktree before merge.Work was done in git worktree
yieldomega-worktrees/issue-60onissue/60-cursor-pack, then fast-forwarded tomain.mentioned in commit
b63789f616