feat: polish micro-interactions with consistent motion system across the app

- add strong easing tokens (--ease-out-strong, --ease-in-out-strong, --ease-drawer)
- restore menu open/close animations (dropdown, context menu, combobox) using
  interruptible transitions via Base UI starting/ending styles
- dialogs: 200ms enter / 150ms exit; command palette opts out (keyboard-initiated)
- tooltips: 400ms initial delay with instant adjacent hovers via provider grouping
- buttons: scale press feedback, specific transition properties instead of transition-all
- tabs: sliding active-tab indicator via Base UI Tabs.Indicator
- sheet: iOS drawer curve with asymmetric enter/exit timing
- animate form validation messages and auth page entrance
- remove dead radix-idiom accordion classes in builder sidebars
This commit is contained in:
Amruth Pillai
2026-07-03 21:48:11 +02:00
parent 617135466d
commit 578a983209
23 changed files with 56 additions and 41 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ import { BrandIcon } from "@reactive-resume/ui/components/brand-icon";
export function AuthLayout() {
return (
<div className="mx-auto flex h-svh w-dvw max-w-sm flex-col justify-center gap-y-6 px-4 xs:px-0">
<div className="fade-in-0 slide-in-from-top-4 mx-auto flex h-svh w-dvw max-w-sm animate-in flex-col justify-center gap-y-6 px-4 xs:px-0 duration-300 ease-(--ease-out-strong)">
<BrandIcon className="mb-4 size-20 self-center" />
<Outlet />
@@ -30,7 +30,7 @@ export function PreferencesSettingsPage() {
size="sm"
variant="link"
nativeButton={false}
className="h-5 justify-start text-muted-foreground text-xs active:scale-100"
className="h-5 justify-start text-muted-foreground text-xs"
render={
<a href="https://crowdin.com/project/reactive-resume" target="_blank" rel="noopener noreferrer">
<Trans>Help translate the app to your language</Trans>
@@ -86,13 +86,7 @@ export function SectionBase({ type, className, ...props }: Props) {
)}
</div>
<AccordionContent
className={cn(
"p-0 data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
className,
)}
{...props}
/>
<AccordionContent className={cn("p-0", className)} {...props} />
</AccordionItem>
</Accordion>
);
@@ -38,13 +38,7 @@ export function SectionBase({ type, className, ...props }: Props) {
</div>
</div>
<AccordionContent
className={cn(
"overflow-hidden pb-0 data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
className,
)}
{...props}
/>
<AccordionContent className={cn("overflow-hidden pb-0", className)} {...props} />
</AccordionItem>
</Accordion>
);