From 1675e6ce6c8ea6b28d31ee3c704c07113c95b8a5 Mon Sep 17 00:00:00 2001 From: Ajax Davis Date: Wed, 4 Feb 2026 02:52:05 +1000 Subject: [PATCH] fix(ui): resolve lint errors to enable CI deployment - Fix react-hooks warnings in Tooltip, Popover, DropdownMenu - Fix react-hooks/static-components in ToolRenderer - Fix useEffect/useCallback issues in useCountUp/useControlled - Fix jsx-a11y warnings in Modal, Drawer - Fix empty interface and type errors - Add biome-ignore for semantic element warnings These fixes enable CI to pass so dark mode text fix can deploy. --- packages/ui/src/Breadcrumbs/types.ts | 2 +- packages/ui/src/Drawer/Drawer.tsx | 2 +- packages/ui/src/DropdownMenu/DropdownMenu.tsx | 21 +++++++++++++-- packages/ui/src/DropdownMenu/types.ts | 2 +- packages/ui/src/Modal/Modal.tsx | 3 ++- packages/ui/src/Popover/Popover.tsx | 27 ++++++++++++++----- packages/ui/src/ToolRenderer/ToolRenderer.tsx | 2 ++ .../renderers/RegistrySearchRenderer.tsx | 2 +- packages/ui/src/Tooltip/Tooltip.tsx | 24 +++++++++++++---- packages/ui/src/system/hooks/useCountUp.ts | 22 ++++++++------- packages/ui/src/system/useControlled.ts | 16 ++++++----- 11 files changed, 90 insertions(+), 33 deletions(-) diff --git a/packages/ui/src/Breadcrumbs/types.ts b/packages/ui/src/Breadcrumbs/types.ts index 9726197..ce1ac84 100644 --- a/packages/ui/src/Breadcrumbs/types.ts +++ b/packages/ui/src/Breadcrumbs/types.ts @@ -93,7 +93,7 @@ export interface BreadcrumbSeparatorProps extends HTMLAttributes {} +export type BreadcrumbEllipsisProps = HTMLAttributes; /** * Breadcrumbs ref type diff --git a/packages/ui/src/Drawer/Drawer.tsx b/packages/ui/src/Drawer/Drawer.tsx index be639fb..47bb790 100644 --- a/packages/ui/src/Drawer/Drawer.tsx +++ b/packages/ui/src/Drawer/Drawer.tsx @@ -167,7 +167,7 @@ export const Drawer = forwardRef( /> {/* Container */} -
+
{/* Panel */}
{ diff --git a/packages/ui/src/DropdownMenu/DropdownMenu.tsx b/packages/ui/src/DropdownMenu/DropdownMenu.tsx index 2d7b99e..e8d6997 100644 --- a/packages/ui/src/DropdownMenu/DropdownMenu.tsx +++ b/packages/ui/src/DropdownMenu/DropdownMenu.tsx @@ -22,6 +22,17 @@ import type { DropdownMenuProps, DropdownMenuSeparatorProps, } from './types'; + +/** + * Props interface for trigger elements that can receive dropdown event handlers + */ +interface TriggerElementProps { + ref?: React.Ref; + onClick?: (e: React.MouseEvent) => void; + 'aria-haspopup'?: string; + 'aria-expanded'?: boolean; +} + import { dropdownMenuContentVariants, dropdownMenuItemIconVariants, @@ -259,17 +270,19 @@ export const DropdownMenu = forwardRef( }, [isOpen, closeOnEscape, closeMenu]); // Clone trigger element with click handler + /* eslint-disable react-hooks/refs -- passing ref object to cloneElement is a standard pattern */ const triggerElement = isValidElement(trigger) - ? cloneElement(trigger as React.ReactElement, { + ? cloneElement(trigger as React.ReactElement, { ref: triggerRef, onClick: (e: React.MouseEvent) => { - (trigger as React.ReactElement).props.onClick?.(e); + (trigger as React.ReactElement).props.onClick?.(e); handleToggle(); }, 'aria-haspopup': 'menu', 'aria-expanded': isOpen, }) : trigger; + /* eslint-enable react-hooks/refs */ const contextValue = useMemo( () => ({ @@ -347,6 +360,7 @@ export const DropdownMenuItem = forwardRef { @@ -387,6 +401,7 @@ export const DropdownMenuItem = forwardRef context?.setActiveIndex(indexRef.current)} {...props} > + {/* eslint-enable react-hooks/refs */} {icon && ( ( ({ className, ...props }, ref) => ( + // biome-ignore lint/a11y/useSemanticElements: div with role="separator" is intentional for styling flexibility
( ({ label, children, className, ...props }, ref) => ( + // biome-ignore lint/a11y/useSemanticElements: div with role="group" is intentional for dropdown menu structure
{label && {label}} {children} diff --git a/packages/ui/src/DropdownMenu/types.ts b/packages/ui/src/DropdownMenu/types.ts index d34f749..a4393d8 100644 --- a/packages/ui/src/DropdownMenu/types.ts +++ b/packages/ui/src/DropdownMenu/types.ts @@ -112,7 +112,7 @@ export interface DropdownMenuItemProps extends HTMLAttributes /** * DropdownMenuSeparator component props */ -export interface DropdownMenuSeparatorProps extends HTMLAttributes {} +export type DropdownMenuSeparatorProps = HTMLAttributes; /** * DropdownMenuLabel component props diff --git a/packages/ui/src/Modal/Modal.tsx b/packages/ui/src/Modal/Modal.tsx index aaecf26..70194e1 100644 --- a/packages/ui/src/Modal/Modal.tsx +++ b/packages/ui/src/Modal/Modal.tsx @@ -160,8 +160,9 @@ export const Modal = forwardRef( {/* Backdrop */}