diff --git a/web-app/src/components/ui/dialog.tsx b/web-app/src/components/ui/dialog.tsx index 9fa6d9158..632150029 100644 --- a/web-app/src/components/ui/dialog.tsx +++ b/web-app/src/components/ui/dialog.tsx @@ -47,13 +47,15 @@ function DialogOverlay({ type DialogContentProps = React.ComponentProps< typeof DialogPrimitive.Content > & { - showCloseButton?: boolean + 'showCloseButton'?: boolean + 'aria-describedby'?: string | undefined } function DialogContent({ showCloseButton = true, className, children, + 'aria-describedby': ariaDescribedBy, ...props }: DialogContentProps) { return ( @@ -61,6 +63,7 @@ function DialogContent({ { + if (tooltipToolsAvailable && dropdownToolsAvailable) { + setTooltipToolsAvailable(false) + } + }, [dropdownToolsAvailable, tooltipToolsAvailable]) + // Focus when thread changes useEffect(() => { if (textareaRef.current) { @@ -479,12 +485,12 @@ const ChatInput = ({ > { + setDropdownToolsAvailable(isOpen) + setTooltipToolsAvailable(false) + }} > {(isOpen, toolsCount) => { - setDropdownToolsAvailable(isOpen) - if (tooltipToolsAvailable && isOpen) { - setTooltipToolsAvailable(false) - } return (
React.ReactNode initialMessage?: boolean + onOpenChange?: (isOpen: boolean) => void } export default function DropdownToolsAvailable({ children, initialMessage = false, + onOpenChange, }: DropdownToolsAvailableProps) { const { tools } = useAppState() const [isOpen, setIsOpen] = useState(false) + + const handleOpenChange = (open: boolean) => { + setIsOpen(open) + onOpenChange?.(open) + } const { getCurrentThread } = useThreads() const { isToolDisabled, @@ -86,7 +93,7 @@ export default function DropdownToolsAvailable({ if (tools.length === 0) { return ( - + {renderTrigger()} No tools available @@ -96,7 +103,7 @@ export default function DropdownToolsAvailable({ } return ( - + {renderTrigger()} + {item.content?.[0]?.text && item.role === 'user' && (