1+ import { Chip } from '@material-tailwind/react'
2+ import { useContext , useEffect , useState } from 'react'
13import { Avatar , Button } from 'react-daisyui'
24import { FiCopy } from 'react-icons/fi'
35import { TfiReload } from 'react-icons/tfi'
4- import { useContext , useEffect , useState } from 'react'
5- import { serversContext } from '../../../context/servers.context'
6- import { useI18nContext } from '../../../../i18n/i18n-react'
76import icon from '../../../../../public/icons/icon.png'
7+ import { useI18nContext } from '../../../../i18n/i18n-react'
8+ import { serversContext } from '../../../context/servers.context'
89import { getPingIcon } from '../../../utils/icons.util'
9- import { Chip } from '@material-tailwind/react'
1010interface Prop {
1111 loadingCurrentActive : boolean
1212}
@@ -25,6 +25,7 @@ export function ServerInfoCardComponent(prop: Prop) {
2525 }
2626 } , [ isCopyAdds ] )
2727
28+ // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
2829 useEffect ( ( ) => {
2930 if ( serversStateContext . selected ) getPing ( )
3031 } , [ serversStateContext . selected , serversStateContext . currentActive ] )
@@ -73,45 +74,51 @@ export function ServerInfoCardComponent(prop: Prop) {
7374 serversStateContext . currentActive ?. key == serversStateContext . selected . key
7475 const name =
7576 serversStateContext . selected . name ?. length > 14
76- ? serversStateContext . selected . name . slice ( 0 , 12 ) + ' ...'
77+ ? ` ${ serversStateContext . selected . name . slice ( 0 , 12 ) } ...`
7778 : serversStateContext . selected . name
7879
7980 const network =
8081 serversStateContext . network ?. length > 14
81- ? serversStateContext . network . slice ( 0 , 12 ) + ' ...'
82+ ? ` ${ serversStateContext . network . slice ( 0 , 12 ) } ...`
8283 : serversStateContext . network
8384
8485 return (
8586 < div className = "dark:bg-[#262626] bg-base-200 h-[189px] w-[362px] mt-5 rounded-[23px]" >
8687 < div
8788 className = {
88- 'grid grid-cols-2 gap-4 mt-5 text-[#434343] dark:text-[#A6A6A6] '
89+ 'grid grid-cols-2 mt-2 gap-6 px-2 text-[#434343] dark:text-[#A6A6A6]'
8990 }
9091 >
91- < div className = { 'flex flex-col gap-2' } >
92+ < div className = { 'flex flex-col gap-2 ' } >
9293 < h3 className = { 'font-semibold text-gray-500' } > Name</ h3 >
9394
94- < div
95- className = { 'w-100 text-center flex flex-row gap-2 justify-center' }
96- >
97- < div className = "flex items-center gap-3 p-2 rounded-[10px] dark:bg-gray-900 bg-gray-300" >
95+ < div className = "relative flex justify-center text-center " >
96+ < div className = "absolute w-20 transform -translate-x-1/2 bg-gray-300 border-[#7487FF] border-l border-r rounded-bl-lg rounded-br-lg dark:bg-gray-900 left-1/2 -bottom-3.5" >
97+ < p className = "px-3 text-[10px] text-center rounded text-brown-500-500" >
98+ { serversStateContext . selected . type ?. toUpperCase ( ) || 'IPV4' }
99+ </ p >
100+ </ div >
101+
102+ < div className = "flex items-center p-2 rounded-[10px] dark:bg-gray-900 bg-gray-300 border-[#7487FF] border-l border-r border-b" >
98103 < img
99104 src = { `./servers-icon/${ serversStateContext . selected . avatar } ` }
100- alt = ""
101- className = "self-center w-5 h-5 rounded-full mr-1 "
105+ alt = { ` ${ name } logo` }
106+ className = "w-4 h-4 rounded-full"
102107 onError = { ( { currentTarget } ) => {
103- currentTarget . onerror = null // prevents looping
108+ currentTarget . onerror = null
104109 currentTarget . src = './servers-icon/def.png'
105110 } }
106111 />
107- < span className = "ml-1 inline-flex items-baseline text-sm" >
108- < span className = "font-medium text-slate-900 dark:text-slate-200 " >
112+
113+ < div className = "flex items-center gap-1 ml-1" >
114+ < span className = "font-medium text-slate-900 dark:text-slate-200 text-left ml-1 truncate text-[11px] sm:text-sm max-w-32 min-w-32" >
109115 { name || 'Unknown' }
110116 </ span >
111- </ span >
117+ </ div >
112118 </ div >
113119 </ div >
114120 </ div >
121+
115122 < div className = { 'flex flex-col gap-2 text-center justify-center' } >
116123 < h3 className = { 'font-semibold text-gray-500' } > Ping</ h3 >
117124
@@ -121,11 +128,11 @@ export function ServerInfoCardComponent(prop: Prop) {
121128 < Button
122129 color = "ghost"
123130 size = "sm"
124- className = "flex items-center gap-3 border-1 border-gray-300 dark:border-gray-900 bg-gray-300 dark:bg-gray-900 dark:hover:bg-gray-800 dark:hover:border-none"
131+ className = "flex items-center gap-3 bg-gray-300 border-gray-300 border-1 dark:border-gray-900 dark:bg-gray-900 dark:hover:bg-gray-800 dark:hover:border-none"
125132 onClick = { getPing }
126133 >
127134 { ping > 0 && getPingIcon ( ping ) }
128- < span className = "ml-1 inline-flex items-baseline text-sm" >
135+ < span className = "inline-flex items-baseline ml-1 text-sm" >
129136 < span className = "font-medium text-slate-900 dark:text-slate-200" >
130137 { ping }
131138 </ span >
@@ -134,19 +141,22 @@ export function ServerInfoCardComponent(prop: Prop) {
134141 </ Button >
135142 </ div >
136143 </ div >
144+
137145 < div className = { 'flex flex-col gap-2 text-center justify-center' } >
138146 < h3 className = { 'font-semibold text-gray-500' } > Address</ h3 >
139147 < div
140- className = { 'w-100 flex flex-row gap-2 justify-center text-center' }
148+ className = {
149+ 'w-100 flex flex-row gap-2 justify-center text-center '
150+ }
141151 >
142152 { isCopyAdds ? (
143153 < Button
144154 color = "success"
145155 size = "sm"
146156 className = "flex items-center gap-3"
147157 >
148- < span className = "ml-1 inline-flex items-baseline text-sm" >
149- < span className = "font-medium text-slate-900 dark:text-slate-200 normal-case " >
158+ < span className = "inline-flex items-baseline ml-1 text-sm" >
159+ < span className = "font-medium normal-case text-slate-900 dark:text-slate-200" >
150160 Copied!
151161 </ span >
152162 </ span >
@@ -155,25 +165,25 @@ export function ServerInfoCardComponent(prop: Prop) {
155165 < Button
156166 color = "ghost"
157167 size = "sm"
158- className = "flex items-center gap-3 border-1 border-gray-300 dark:border-gray-900 bg-gray-300 dark:bg-gray-900 dark:hover:bg-gray-800 dark:hover:border-none"
168+ className = "flex items-center gap-3 bg-gray-300 border-gray-300 border-1 dark:border-gray-900 dark:bg-gray-900 dark:hover:bg-gray-800 dark:hover:border-none"
159169 onClick = { ( ) => {
160170 navigator . clipboard . writeText (
161171 serversStateContext . selected . servers . join ( ',' ) ,
162172 )
163173 setIsCopyAdds ( true )
164174 } }
165175 >
166- < span className = "ml-1 inline-flex items-baseline text-sm" >
176+ < span className = "inline-flex items-baseline ml-1 text-sm " >
167177 < span className = "font-medium text-slate-900 dark:text-slate-200" >
168- { serversStateContext . selected . servers [ 0 ] . slice ( 0 , 10 ) +
169- '...' }
178+ { `${ serversStateContext . selected . servers [ 0 ] . slice ( 0 , 10 ) } ...` }
170179 </ span >
171180 </ span >
172181 < FiCopy />
173182 </ Button >
174183 ) }
175184 </ div >
176185 </ div >
186+
177187 < div className = { 'flex flex-col gap-2 text-center justify-center' } >
178188 { window . os . os == 'win32' ? (
179189 < >
0 commit comments