feat(ui): unify overlay animations and trim tooltip delays

Use base-ui's transition-status pattern (data-starting-style /
data-ending-style) for Dialog, DropdownMenu, Select, Tooltip and Popover
so open/close animate consistently at 150ms ease-out without flicker.
Wrap dialog popups in a centered flex container so the scale animation
no longer fights with translate-based positioning, and switch
PendingChangesBar to a real Popover so it actually animates closed.

Convert ScheduledTaskEditorDialog from raw Radix to the shared Dialog
wrapper, give ScheduledTasksDialog a stable min-height to prevent layout
shift mid-animation, and reset NewWorktreeDialog form state on open
instead of close so fields don't empty during the close transition.

Drop tooltip delay from 700ms to 300ms globally and remove all
per-component overrides except the model/variant/agent selectors in the
chat input (600ms).
This commit is contained in:
Bohdan Triapitsyn
2026-04-30 22:41:33 +03:00
parent 24533dfe32
commit 63da6e6292
57 changed files with 305 additions and 314 deletions
+7 -7
View File
@@ -98,7 +98,7 @@ const HeaderIconActionButton = React.memo(function HeaderIconActionButton({
}
return (
<Tooltip delayDuration={500}>
<Tooltip>
<TooltipTrigger asChild>
<button
type="button"
@@ -308,7 +308,7 @@ const DesktopServicesMenu = React.memo(function DesktopServicesMenu({
}
}}
>
<Tooltip delayDuration={500}>
<Tooltip>
<TooltipTrigger asChild>
<DropdownMenuTrigger asChild>
<button
@@ -1726,7 +1726,7 @@ export const Header: React.FC<HeaderProps> = ({
const desktopSidebarActions = (
<>
{showPlanTab && (
<Tooltip delayDuration={500}>
<Tooltip>
<TooltipTrigger asChild>
<button
type="button"
@@ -1820,7 +1820,7 @@ export const Header: React.FC<HeaderProps> = ({
<div className={cn('flex min-w-0 flex-1 items-center', !isSidebarOpen && 'pl-3')}>
{!isLeftSidebarOpen ? (
<Tooltip delayDuration={500}>
<Tooltip>
<TooltipTrigger asChild>
<button
type="button"
@@ -1970,7 +1970,7 @@ export const Header: React.FC<HeaderProps> = ({
const isDiffTab = tab.icon === 'diff';
const Icon = isDiffTab ? null : (tab.icon as RemixiconComponentType);
return (
<Tooltip key={tab.id} delayDuration={500}>
<Tooltip key={tab.id}>
<TooltipTrigger asChild>
<button
type="button"
@@ -2039,7 +2039,7 @@ export const Header: React.FC<HeaderProps> = ({
}
}}
>
<Tooltip delayDuration={500}>
<Tooltip>
<TooltipTrigger asChild>
<DropdownMenuTrigger asChild>
<button
@@ -2293,7 +2293,7 @@ export const Header: React.FC<HeaderProps> = ({
</DropdownMenu>
{onToggleRightDrawer ? (
<Tooltip delayDuration={500}>
<Tooltip>
<TooltipTrigger asChild>
<button
type="button"
@@ -784,7 +784,7 @@ export const ProjectActionsButton = ({
: <SelectedIcon className="h-5 w-5" />}
</button>
{showSelectedPreviewButton ? (
<Tooltip delayDuration={1000}>
<Tooltip>
<TooltipTrigger asChild>
<button
type="button"
@@ -882,7 +882,7 @@ export const ProjectActionsButton = ({
</button>
{showSelectedPreviewButton ? (
<Tooltip delayDuration={1000}>
<Tooltip>
<TooltipTrigger asChild>
<button
type="button"