diff --git a/frontend/src/components/shared/FitText.tsx b/frontend/src/components/shared/FitText.tsx index 6b6ee723c..bea17ddef 100644 --- a/frontend/src/components/shared/FitText.tsx +++ b/frontend/src/components/shared/FitText.tsx @@ -53,7 +53,7 @@ const FitText: React.FC = ({ const clampStyles: CSSProperties = { // Multi-line clamp with ellipsis fallback whiteSpace: lines === 1 ? 'nowrap' : 'normal', - overflow: 'hidden', + overflow: 'visible', textOverflow: 'ellipsis', display: lines > 1 ? ('-webkit-box' as any) : undefined, WebkitBoxOrient: lines > 1 ? ('vertical' as any) : undefined, diff --git a/frontend/src/components/tools/ToolPanel.tsx b/frontend/src/components/tools/ToolPanel.tsx index 1ec73ef47..972237c5d 100644 --- a/frontend/src/components/tools/ToolPanel.tsx +++ b/frontend/src/components/tools/ToolPanel.tsx @@ -1,11 +1,12 @@ import React from 'react'; -import { TextInput, useMantineColorScheme } from '@mantine/core'; +import { useMantineColorScheme } from '@mantine/core'; import { useTranslation } from 'react-i18next'; import { useRainbowThemeContext } from '../shared/RainbowThemeProvider'; import { useToolPanelState, useToolSelection, useWorkbenchState } from '../../contexts/ToolWorkflowContext'; import ToolPicker from './ToolPicker'; import SearchResults from './SearchResults'; import ToolRenderer from './ToolRenderer'; +import ToolSearch from './toolPicker/ToolSearch'; import { useSidebarContext } from "../../contexts/SidebarContext"; import rainbowStyles from '../../styles/rainbow.module.css'; @@ -25,6 +26,7 @@ export default function ToolPanel() { isPanelVisible, searchQuery, filteredTools, + toolRegistry, setSearchQuery, handleBackToTools } = useToolPanelState(); @@ -58,29 +60,11 @@ export default function ToolPanel() { marginBottom: (leftPanelView === 'toolContent') ? '1rem' : 0, }} > - setSearchQuery(e.currentTarget.value)} - autoComplete="off" - size="sm" - styles={{ - root: { - marginTop: '0.5rem', - marginBottom: '0.5rem', - }, - input: { - backgroundColor: colorScheme === 'dark' ? '#4B525A' : '#FFFFFF', - color: colorScheme === 'dark' ? '#FFFFFF' : '#6B7382', - border: 'none', - boxShadow: 'none', - borderBottom: leftPanelView === 'toolContent' ? `1px solid ${colorScheme === 'dark' ? '#3A4047' : '#E0E0E0'}` : 'none', - }, - section: { - color: colorScheme === 'dark' ? '#FFFFFF' : '#6B7382', - } - }} - leftSection={search} + onChange={setSearchQuery} + toolRegistry={toolRegistry} + mode="filter" /> diff --git a/frontend/src/components/tools/toolPicker/ToolButton.tsx b/frontend/src/components/tools/toolPicker/ToolButton.tsx index b5d93bdad..8d3469333 100644 --- a/frontend/src/components/tools/toolPicker/ToolButton.tsx +++ b/frontend/src/components/tools/toolPicker/ToolButton.tsx @@ -12,11 +12,21 @@ interface ToolButtonProps { } const ToolButton: React.FC = ({ id, tool, isSelected, onSelect }) => { + const handleClick = (id: string) => { + if (tool.link) { + // Open external link in new tab + window.open(tool.link, '_blank', 'noopener,noreferrer'); + return; + } + // Normal tool selection + onSelect(id); + }; + return (