diff --git a/apps/desktop/src/app/chat/sidebar/projects/project-menu.tsx b/apps/desktop/src/app/chat/sidebar/projects/project-menu.tsx index f601007c7e38..8e8677b9ca75 100644 --- a/apps/desktop/src/app/chat/sidebar/projects/project-menu.tsx +++ b/apps/desktop/src/app/chat/sidebar/projects/project-menu.tsx @@ -19,7 +19,6 @@ import { DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { Popover, PopoverAnchor, PopoverContent } from '@/components/ui/popover' -import { Tip } from '@/components/ui/tooltip' import { useI18n } from '@/i18n' import { cn } from '@/lib/utils' import { $panesFlipped, dismissAutoProject } from '@/store/layout' @@ -192,13 +191,9 @@ export function ProjectMenu({ ) - // The bare trigger button (no Tip, no anchor) — composed with whichever of - // Tip / PopoverAnchor apply below, always OUTSIDE the asChild chain that - // ends at this button, never wrapping it directly. asChild clones only its - // immediate child, so any of these wrappers placed inside another - // asChild-consuming component (instead of around it) would have its - // injected props silently swallowed by that inner component instead of - // reaching the real DOM button (see #67500). + // When anchorRef is absent, PopoverAnchor wraps the trigger so the + // appearance popover positions against this button. Keep asChild chains free + // of non-forwarding wrappers (#67500). const triggerButton = ( - + ) } diff --git a/apps/desktop/src/components/ui/actions-menu.tsx b/apps/desktop/src/components/ui/actions-menu.tsx index 99a6b2e32394..998174621ca0 100644 --- a/apps/desktop/src/components/ui/actions-menu.tsx +++ b/apps/desktop/src/components/ui/actions-menu.tsx @@ -23,7 +23,6 @@ import { DropdownMenuSubTrigger, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' -import { Tip } from '@/components/ui/tooltip' // One place to define a set of actions and get BOTH a kebab dropdown and a // matching right-click context menu — so a row's ⋯ menu and its right-click menu @@ -108,15 +107,14 @@ interface ActionsMenuProps extends Pick< items: (kit: MenuKit) => React.ReactNode ariaLabel?: string contentClassName?: string - /** Optional tooltip on the trigger (composed INSIDE the asChild chain). */ - tooltip?: React.ReactNode open?: boolean onOpenChange?: (open: boolean) => void } /** * A kebab dropdown menu. Pair it with `ActionsContextMenu` using the same - * `items` render function so the two menus stay identical. + * `items` render function so the two menus stay identical. No tip on the + * trigger — `aria-label` on the button is enough (see DESIGN.md). */ export function ActionsMenu({ align = 'end', @@ -127,17 +125,11 @@ export function ActionsMenu({ onOpenChange, open, side, - sideOffset = 6, - tooltip + sideOffset = 6 }: ActionsMenuProps) { - // Tip wraps the trigger, not the reverse: Tip doesn't forward the ref/props an - // `asChild` clone injects, so a Tip placed as the trigger's child silently - // drops onClick/aria-haspopup and the menu stops opening (#67500). - const trigger = {children} - return ( - {tooltip ? {trigger} : trigger} + {children} `إجراءات ${label}`, - credentialActions: 'إجراءات بيانات الاعتماد', docs: 'الوثائق', hideValue: 'إخفاء القيمة', revealValue: 'إظهار القيمة', diff --git a/apps/desktop/src/i18n/en.ts b/apps/desktop/src/i18n/en.ts index 3b5eb3c450b8..3f11f7b16db6 100644 --- a/apps/desktop/src/i18n/en.ts +++ b/apps/desktop/src/i18n/en.ts @@ -574,7 +574,6 @@ export const en: Translations = { }, envActions: { actionsFor: label => `Actions for ${label}`, - credentialActions: 'Credential actions', manageInKeys: 'Manage in API Keys', docs: 'Docs', hideValue: 'Hide value', diff --git a/apps/desktop/src/i18n/ja.ts b/apps/desktop/src/i18n/ja.ts index ed6e1ef3468b..b64ce5dd80cd 100644 --- a/apps/desktop/src/i18n/ja.ts +++ b/apps/desktop/src/i18n/ja.ts @@ -672,7 +672,6 @@ export const ja = defineLocale({ }, envActions: { actionsFor: label => `${label} のアクション`, - credentialActions: '認証情報のアクション', manageInKeys: 'API キーで管理', docs: 'ドキュメント', hideValue: '値を非表示', diff --git a/apps/desktop/src/i18n/types.ts b/apps/desktop/src/i18n/types.ts index 40bdf7895e90..387919476761 100644 --- a/apps/desktop/src/i18n/types.ts +++ b/apps/desktop/src/i18n/types.ts @@ -477,7 +477,6 @@ export interface Translations { } envActions: { actionsFor: (label: string) => string - credentialActions: string manageInKeys: string docs: string hideValue: string diff --git a/apps/desktop/src/i18n/zh-hant.ts b/apps/desktop/src/i18n/zh-hant.ts index 79a04bfc17d2..ea15b1a2819e 100644 --- a/apps/desktop/src/i18n/zh-hant.ts +++ b/apps/desktop/src/i18n/zh-hant.ts @@ -659,7 +659,6 @@ export const zhHant = defineLocale({ }, envActions: { actionsFor: label => `${label} 的動作`, - credentialActions: '憑證動作', manageInKeys: '在 API 金鑰中管理', docs: '文件', hideValue: '隱藏值', diff --git a/apps/desktop/src/i18n/zh.ts b/apps/desktop/src/i18n/zh.ts index 312e02e2e704..f1998678fdb5 100644 --- a/apps/desktop/src/i18n/zh.ts +++ b/apps/desktop/src/i18n/zh.ts @@ -780,7 +780,6 @@ export const zh: Translations = { }, envActions: { actionsFor: label => `${label} 的操作`, - credentialActions: '凭据操作', manageInKeys: '在 API 密钥中管理', docs: '文档', hideValue: '隐藏值',