11import React , { useState , useRef } from 'react' ;
2+ import { ChevronDown } from 'lucide-react' ;
23import { useLang } from '@/app/context/LangContext' ;
34import { useAutoCarousel } from '@/app/context/AutoCarouselContext' ;
45import * as DropdownMenu from '@radix-ui/react-dropdown-menu' ;
56import { Tooltip , TooltipContent , TooltipProvider , TooltipTrigger } from '@/app/components/ui/tooltip' ;
67import { EngineType , ENGINES } from '@/app/config/engineConfig' ;
78import type { VersionInfo } from '@/app/components/hooks/useRemoteEnforcer' ;
9+ import { clsx } from 'clsx' ;
810
911interface EngineSelectorProps {
1012 selectedEngine : EngineType ;
@@ -15,10 +17,10 @@ interface EngineSelectorProps {
1517}
1618
1719export const EngineSelector : React . FC < EngineSelectorProps > = ( { selectedEngine, comparisonEngines, onEngineChange, versions, engineGithubLinks } ) => {
18- const { t } = useLang ( ) ;
20+ const { t, theme } = useLang ( ) ;
21+ const iconFilterClass = theme === 'dark' ? 'filter invert' : '' ;
1922 const { disableAutoCarousel } = useAutoCarousel ( ) ;
2023 const [ isOpen , setIsOpen ] = useState ( false ) ;
21- const dropdownRef = useRef < HTMLDivElement > ( null ) ;
2224 const [ isComparisonOpen , setIsComparisonOpen ] = useState ( false ) ;
2325 const engines = Object . entries ( ENGINES ) . map ( ( [ id , config ] ) => {
2426 return {
@@ -82,17 +84,9 @@ export const EngineSelector: React.FC<EngineSelectorProps> = ({ selectedEngine,
8284 < span className = "truncate text-sm" >
8385 { displayText }
8486 </ span >
85- < svg
87+ < ChevronDown
8688 className = { `w-3 h-3 flex-shrink-0 ml-2 transition-transform ${ isOpen ? 'rotate-180' : '' } ` }
87- fill = "currentColor"
88- viewBox = "0 0 20 20"
89- >
90- < path
91- fillRule = "evenodd"
92- d = "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
93- clipRule = "evenodd"
94- />
95- </ svg >
89+ />
9690 </ button >
9791 </ DropdownMenu . Trigger >
9892
@@ -141,20 +135,21 @@ export const EngineSelector: React.FC<EngineSelectorProps> = ({ selectedEngine,
141135 < button
142136 className = {
143137 "border border-primary rounded-lg px-2 py-1 text-primary bg-secondary " +
144- "hover:bg-primary hover:text-primary-foreground transition-all duration-200"
138+ "hover:bg-primary hover:text-primary-foreground transition-all duration-200 " +
139+ "flex items-center justify-center"
145140 }
146- >
147- < svg className = "w-4 h-4" viewBox = "0 0 1024 1024" fill = "currentColor" >
148- < path d = {
149- "M116.364 837.818h279.272v93.091H23.273V93.091h372.363v93.09H116.364v651.637z " +
150- "m512 0h93.09v93.091h-93.09v-93.09z m139.636 0h93.09v93.091H768v-93.09z " +
151- "m139.636 93.091v-93.09h93.091v93.09h-93.09z m0-325.818V512h93.091v93.09h-93.09z " +
152- "m0 139.636v-93.09h93.091v93.09h-93.09z m0-279.272v-93.091h93.091v93.09h-93.09z " +
153- "m0-139.637v-93.09h93.091v93.09h-93.09z m0-139.636V93.09h93.091v93.09h-93.09z " +
154- "m-46.545 0H768V93.09h93.09v93.09z m-139.636 0h-93.091V93.09h93.09v93.09z " +
155- "M488.727 0h93.091v1024h-93.09V0z"
156- } />
157- </ svg >
141+ >
142+ < span
143+ className = { clsx ( 'w-4 h-4 inline-flex items-center justify-center' ) }
144+ style = { {
145+ maskImage : "url('/compareEngines.svg')" ,
146+ maskRepeat : 'no-repeat' ,
147+ maskSize : 'contain' ,
148+ maskPosition : 'center center' ,
149+ backgroundColor : 'currentColor' ,
150+ transition : 'opacity 0.2s, filter 0.5s' ,
151+ } }
152+ />
158153 </ button >
159154 </ DropdownMenu . Trigger >
160155 </ TooltipTrigger >
@@ -209,45 +204,39 @@ export const EngineSelector: React.FC<EngineSelectorProps> = ({ selectedEngine,
209204 </ DropdownMenu . Content >
210205 </ DropdownMenu . Root >
211206
212- < TooltipProvider >
213- < Tooltip >
214- < TooltipTrigger asChild >
215- < a
216- href = { engineGithubLinks [ selectedEngine ] }
217- target = "_blank"
218- rel = "noopener noreferrer"
219- className = "text-primary hover:text-primary/80 transition-colors"
220- >
221- < svg
222- xmlns = "http://www.w3.org/2000/svg"
223- width = "20"
224- height = "20"
225- viewBox = "0 0 24 24"
226- fill = "currentColor"
227- >
228- < path d = {
229- "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 " +
230- "8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416 " +
231- "-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 " +
232- "1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 " +
233- "0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 " +
234- "1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.30.653 1.653 " +
235- ".242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 " +
236- "1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
237- } />
238- </ svg >
239- </ a >
240- </ TooltipTrigger >
207+ < TooltipProvider >
208+ < Tooltip >
209+ < TooltipTrigger asChild >
210+ < a
211+ href = { engineGithubLinks [ selectedEngine ] }
212+ target = "_blank"
213+ rel = "noopener noreferrer"
214+ className = "text-primary hover:text-primary/80 transition-colors group"
215+ >
216+ < span
217+ className = { clsx ( 'w-5 h-5 inline-flex items-center justify-center transition-opacity duration-200 group-hover:opacity-80' ) }
218+ style = { {
219+ maskImage : "url('/github.svg')" ,
220+ maskRepeat : 'no-repeat' ,
221+ maskSize : 'contain' ,
222+ maskPosition : 'center center' ,
223+ backgroundColor : 'currentColor' ,
224+ transition : 'opacity 0.2s, filter 0.5s' ,
225+ verticalAlign : 'middle' ,
226+ } }
227+ />
228+ </ a >
229+ </ TooltipTrigger >
241230 < TooltipContent
242231 className = {
243232 "bg-white dark:bg-gray-800 text-primary " +
244233 "border border-primary"
245234 }
246235 >
247- < p > { t ( 'View Source Code' ) } </ p >
248- </ TooltipContent >
249- </ Tooltip >
250- </ TooltipProvider >
251- </ div >
236+ < p > { t ( 'View Source Code' ) } </ p >
237+ </ TooltipContent >
238+ </ Tooltip >
239+ </ TooltipProvider >
240+ </ div >
252241 ) ;
253242} ;
0 commit comments