Repository navigation
feat(chat): ShimmerText and ThinkingLabel with rotating verbs (CL-8481) - #43
Conversation
ReviewVerdict: approve with nits. New ShimmerText / ThinkingLabel, reduced-motion handled. No unit tests for empty verbs, rotation, or reduced-motion skipping the interval. No CI. No prior reviews. |
Re-reviewVerdict: approve. SHA 18e34c1. ThinkingLabel tests: empty verbs, reduced-motion skips setInterval, rotation after intervalMs. bun test 339 pass, typecheck/lint 0. |
Review (Draper + Emil)Verdict: request changes (a11y). Intent is good.
Fixes in flight for the first three. |
TheGreatAxios
left a comment
There was a problem hiding this comment.
ShimmerText is clean — token-only gradient, no new hexes, keyframes in theme.css where they belong.
One fix: thinking-label.tsx hand-rolls a one-shot prefersReducedMotion() helper. That's the stale-matchMedia pattern usePrefersReducedMotion was extracted to kill — if the OS preference flips mid-session the verb rotation never stops. Use the hook (PR #44 already does).
Minor: role="status" + aria-live="polite" on the same element is redundant — status implies polite.
Re-reviewToaster isolation cherry-picked. SHA 9f83ccb. bun test 342 pass. |
9f83ccb to
a6724c9
Compare
Review pass — rebased onto post-prune
|
…tion (CL-8481) Empty verbs render nothing; prefers-reduced-motion never starts the interval; the verb advances when the interval callback fires after intervalMs.
ShimmerText falls back to solid muted text under prefers-reduced-motion and forced-colors. ThinkingLabel uses usePrefersReducedMotion and announces Working once instead of aria-live on every verb tick.
8048266 to
e1c6567
Compare
Summary
ShimmerText: a shimmer sweep over inline text via abackground-clip: textgradient built from--muted-foreground/--foregroundonly (no new hex); optionalrole="status".ThinkingLabel: rotates caller-supplied verbs on an interval (default 3s), rendered withShimmerText,role="status" aria-live="polite".corbits-shimmer-sweepkeyframe insrc/theme.css; reduced motion collapses the sweep via the existing global rule and stops verb rotation via amatchMediacheck.stories/primitives/.Test plan
bun run typecheckbun run lintbun testbun run build(generate, swc, tsc, tailwind, contrast gate all pass)bun run dep-guard