# Motion Accessibility And Selection Pass - Status: `completed` - Owner: `codex` - Date: `2026-03-25` ## Goal Polish the remaining low-level interaction motion gaps called out in the motion review, with an emphasis on reduced-motion correctness, selection-state feedback, and bringing lower-tier components closer to the established `Command` / `Combobox` / `Tabs` motion quality bar. ## Scope - In scope: - add explicit reduced-motion handling for continuous loader animation surfaces - soften `Checkbox` and `RadioGroup` selection feedback with short scale/fade indicator motion - give `Tooltip` a light rise to match the rest of the overlay family - reduce layout-heavy motion where it is currently doing too much work in `Accordion`, `Sparkbar`, and `Progress` - polish `Select` list motion so it feels closer to `Combobox` and `Command` - update focused tests and stories when the behavior contract changes - Out of scope: - introducing new animation dependencies - expanding public APIs unless a small compatibility-safe prop is justified - broad visual restyling unrelated to motion or reduced-motion behavior ## Constraints - Respect `DESIGN.md` and keep one calm, spatial motion language. - Treat `packages/ui/src/components/progress*` as main-thread-owned because reduced-motion and motion-refinement requirements both land there. - Do not revert or overwrite unrelated in-progress repo changes. - Preserve static-motion behavior through `data-motion="static"` and make OS-level reduced motion behave equivalently for continuous animation surfaces. ## Ownership - Main thread: - `packages/ui/src/components/progress*` - final review, integration, and validation - Worker 1: - `packages/ui/src/components/spinner.tsx` - `packages/ui/src/components/skeleton.tsx` - nearest tests/stories if needed - Worker 2: - `packages/ui/src/components/checkbox*` - `packages/ui/src/components/radio-group*` - nearest tests/stories if needed - Worker 3: - `packages/ui/src/components/tooltip*` - nearest tests/stories if needed - Worker 4: - `packages/ui/src/components/accordion*` - `packages/ui/src/components/sparkbar*` - nearest tests/stories if needed - Worker 5: - `packages/ui/src/components/select*` - nearest tests/stories if needed ## Plan 1. Write the execution plan and keep `Progress` under main-thread ownership. 2. Dispatch five isolated workers for loaders, selection controls, tooltip, accordion/sparkbar, and select. 3. Implement `Progress` reduced-motion and motion refinements locally. 4. Review and integrate the worker slices, then fix any shared token or contract issues. 5. Run focused tests for the changed surfaces and a narrow typecheck/docs pass if needed. ## Validation - `pnpm --filter @ai-ui/ui exec vitest run packages/ui/src/components/progress.test.tsx` - `pnpm --filter @ai-ui/ui exec vitest run packages/ui/src/components/checkbox.test.tsx packages/ui/src/components/radio-group.test.tsx` - `pnpm --filter @ai-ui/ui exec vitest run packages/ui/src/components/tooltip.test.tsx` - `pnpm --filter @ai-ui/ui exec vitest run packages/ui/src/components/accordion.test.tsx packages/ui/src/components/sparkbar.test.tsx` - `pnpm --filter @ai-ui/ui exec vitest run packages/ui/src/components/select.test.tsx` - `pnpm --filter @ai-ui/ui exec tsc --noEmit` ## Status Log - `2026-03-25 17:18` started the focused pass after motion review identified reduced-motion gaps, low-fidelity selection feedback, and one remaining `Select` polish gap - `2026-03-25 17:19` wrote the execution plan, kept `progress.*` under main-thread ownership, and dispatched five isolated workers for loaders, selection controls, tooltip, accordion/sparkbar, and select - `2026-03-25 17:22` landed the main-thread `Progress` refactor: reduced-motion detection now collapses indeterminate animation, the linear bar scales with `transform` instead of animating layout width, and segmented indeterminate progress falls back to a static partial fill when motion is reduced - `2026-03-25 17:24` reviewed and accepted worker slices for loaders, selection controls, tooltip, accordion/sparkbar, and select polish - `2026-03-25 17:25` validated the combined result set with focused component tests plus `pnpm --filter @ai-ui/ui exec tsc --noEmit` and `pnpm --dir apps/docs exec tsc --noEmit`