From 933e173ac8186f8d1b2b127aef8adbd7e6b57f30 Mon Sep 17 00:00:00 2001 From: yyh Date: Tue, 3 Mar 2026 14:53:54 +0800 Subject: [PATCH] refactor(dropdown-menu): wrap Radio/Checkbox items with shared styles and sealed indicators - Extract menuRowBaseClassName and menuRowStateClassName constants shared across all row components - Wrap RadioItem and CheckboxItem with default styles matching DropdownMenuItem - Wrap RadioItemIndicator and CheckboxItemIndicator with hardcoded check icon, Omit children to prevent misuse - Refactor DropdownMenuItem and SubTrigger to use shared className constants --- .../base/ui/dropdown-menu/index.tsx | 83 ++++++++++++++++--- 1 file changed, 73 insertions(+), 10 deletions(-) diff --git a/web/app/components/base/ui/dropdown-menu/index.tsx b/web/app/components/base/ui/dropdown-menu/index.tsx index 941106cdae..f3651bdded 100644 --- a/web/app/components/base/ui/dropdown-menu/index.tsx +++ b/web/app/components/base/ui/dropdown-menu/index.tsx @@ -12,10 +12,75 @@ export const DropdownMenuTrigger = Menu.Trigger export const DropdownMenuSub = Menu.SubmenuRoot export const DropdownMenuGroup = Menu.Group export const DropdownMenuRadioGroup = Menu.RadioGroup -export const DropdownMenuRadioItem = Menu.RadioItem -export const DropdownMenuRadioItemIndicator = Menu.RadioItemIndicator -export const DropdownMenuCheckboxItem = Menu.CheckboxItem -export const DropdownMenuCheckboxItemIndicator = Menu.CheckboxItemIndicator + +const menuRowBaseClassName = 'mx-1 flex h-8 cursor-pointer select-none items-center rounded-lg px-3 outline-none' +const menuRowStateClassName = 'data-[highlighted]:bg-state-base-hover data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50' + +export function DropdownMenuRadioItem({ + className, + ...props +}: React.ComponentPropsWithoutRef) { + return ( + + ) +} + +export function DropdownMenuRadioItemIndicator({ + className, + ...props +}: Omit, 'children'>) { + return ( + + + + ) +} + +export function DropdownMenuCheckboxItem({ + className, + ...props +}: React.ComponentPropsWithoutRef) { + return ( + + ) +} + +export function DropdownMenuCheckboxItemIndicator({ + className, + ...props +}: Omit, 'children'>) { + return ( + + + + ) +} export function DropdownMenuGroupLabel({ className, @@ -131,9 +196,8 @@ export function DropdownMenuSubTrigger({ return (