feat: improve micro-interactions across CTA, pagination, and likes cache - #62
Conversation
✨ Added arrowRecipe and enhanced CTA, back-link, pagination chevron micro-interactions 🎨 Adopted customizable select for pagination limit control 🔀 Made pagination View Transition slide distance responsive on small screens ♻️ Replaced invalidateModel with invalidateAllModels for like cache correctness 🎨 Split brandOutline from outline so GitHub sign-in stays neutral 🐛 Fixed hasPreviousPage / prev-button disabled logic 📝 Documented simple models cache approach in README and MODEL_CACHE_SPLIT.md 📦 Bumped Biome, Playwright, React types, Varlock Co-authored-by: Cursor <cursoragent@cursor.com>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
React Doctor found no new issues. 🎉 Reviewed by React Doctor for commit |
PR Summary by QodoMicro-interactions for CTA/pagination + like-cache invalidation fix
AI Description
Diagram
High-Level Assessment
Files changed (18)
|
Code Review by Qodo
Context used✅ Compliance rules (platform):
8 rules 1. No select fallback
|
| <button type="button"> | ||
| <selectedcontent | ||
| // biome-ignore assist/source/useSortedKeys: starting style needs to be last usually | ||
| className={css({ |
There was a problem hiding this comment.
1. No select fallback 🐞 Bug ☼ Reliability
PaginationLimitControl now relies on customizable-select-only children (<button> / <selectedcontent>) without feature detection, so browsers lacking that feature may render the limit control incorrectly or make it hard/impossible to change the page size. This component is SSR-rendered via ModelsViewInner and then hydrated, increasing the chance of cross-browser inconsistencies surfacing in real usage.
Agent Prompt
## Issue description
`PaginationLimitControl` uses the new customizable-select structure (`appearance: base-select` + `<button>` + `<selectedcontent>` + picker pseudo-elements) but does not guard it behind feature detection or provide a classic `<select>` fallback.
## Issue Context
- The file comment itself notes partial browser support.
- This control is rendered inside the listing view (`ModelsViewInner`), so it is server-rendered and then hydrated on the client.
## Fix Focus Areas
- src/features/pagination/components/pagination-limit-control.tsx[14-127]
- src/features/models/components/models-view.tsx[26-76]
## Suggested fix
- Implement progressive enhancement:
- Render a standards-only `<select>` (only `<option>` children) by default/SSR.
- On the client, detect support (e.g. `CSS?.supports?.('appearance', 'base-select')`) and only then render the customizable-select children (`<button>`/`<selectedcontent>`) and related styling.
- Keep behavior identical (still calls `onLimitChange` on change) in both modes.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
|
Qodo, if the new customisable select doesn't work you just get the old select, this is a progressive enhancement |
That gives you a native |
Summary
✨ Added
arrowRecipeand enhanced CTA, back-link, pagination chevron micro-interactions🎨 Adopted customizable
<select>for pagination limit control🔀 Made pagination View Transition slide distance responsive on small screens
♻️ Replaced
invalidateModelwithinvalidateAllModelsfor like cache correctness (simple option for now)🎨 Split
brandOutlinefromoutlineso GitHub sign-in stays neutral🐛 Fixed
hasPreviousPage/ prev-button disabled logic📝 Documented simple models cache approach in README and
docs/MODEL_CACHE_SPLIT.md📦 Bumped Biome, Playwright, React types, Varlock
Closes #59
Closes #55
Closes #56
Closes #57
Closes #58
Closes #60
Closes #61
Test plan
md+: page change View Transition uses full-viewport slide on small screens, compact slide frommdbrandOutline; GitHub sign-in button keeps neutraloutlineinvalidateModelusagebun run typeandbun run checkpassMade with Cursor