@@ -21,21 +21,21 @@ const STARTING_MATERIAL: { white: MaterialCount; black: MaterialCount } = {
2121 black : { p : 8 , n : 2 , b : 2 , r : 2 , q : 1 , k : 1 } ,
2222}
2323
24- const getPieceIcon = ( piece : PieceType ) : string => {
25- const iconMap : Record < PieceType , string > = {
26- p : 'chess_pawn ' ,
27- n : 'chess_knight ' ,
28- b : 'chess_bishop ' ,
29- r : 'chess_rook ' ,
30- q : 'chess ' ,
31- k : 'chess ' ,
24+ const getPieceLabel = ( piece : PieceType ) : string => {
25+ const labelMap : Record < PieceType , string > = {
26+ p : 'pawn ' ,
27+ n : 'knight ' ,
28+ b : 'bishop ' ,
29+ r : 'rook ' ,
30+ q : 'queen ' ,
31+ k : 'king ' ,
3232 }
3333
34- return iconMap [ piece ]
34+ return labelMap [ piece ]
3535}
3636
37- const getPieceLabel = ( piece : PieceType ) : string => {
38- const labelMap : Record < PieceType , string > = {
37+ const getPieceSpriteClass = ( piece : PieceType ) : string => {
38+ const spriteMap : Record < PieceType , string > = {
3939 p : 'pawn' ,
4040 n : 'knight' ,
4141 b : 'bishop' ,
@@ -44,7 +44,7 @@ const getPieceLabel = (piece: PieceType): string => {
4444 k : 'king' ,
4545 }
4646
47- return labelMap [ piece ]
47+ return spriteMap [ piece ]
4848}
4949
5050const calculateCapturedPieces = ( fen : string ) => {
@@ -113,12 +113,14 @@ export const MaterialBalance = ({
113113 className = '' ,
114114 iconClassName = '' ,
115115 textClassName = '' ,
116+ pieceFilter,
116117} : {
117118 fen ?: string
118119 color : Color
119120 className ?: string
120121 iconClassName ?: string
121122 textClassName ?: string
123+ pieceFilter ?: string
122124} ) => {
123125 const materialData = useMemo ( ( ) => {
124126 if ( ! fen ) {
@@ -166,10 +168,12 @@ export const MaterialBalance = ({
166168 return null
167169 }
168170
169- const capturedPieceToneClass =
170- color === 'white'
171- ? 'text-zinc-900 [text-shadow:0_0_1px_rgba(255,255,255,0.95)]'
172- : 'text-white [text-shadow:0_0_1px_rgba(0,0,0,0.9)]'
171+ const capturedPieceColor = color === 'white' ? 'black' : 'white'
172+ const capturedPieceFilter =
173+ pieceFilter ??
174+ capturedPieceColor === 'black'
175+ ? 'drop-shadow(0 0 0.8px rgba(255,255,255,0.82)) drop-shadow(0 0 1.5px rgba(255,255,255,0.28))'
176+ : 'drop-shadow(0 0 0.8px rgba(0,0,0,0.82)) drop-shadow(0 0 1.5px rgba(0,0,0,0.22))'
173177
174178 return (
175179 < div className = { `flex select-none items-center gap-1 ${ className } ` . trim ( ) } >
@@ -186,23 +190,25 @@ export const MaterialBalance = ({
186190 { Array . from ( { length : count } ) . map ( ( _ , index ) => (
187191 < span
188192 key = { `${ piece } -${ index } ` }
189- className = { `material-symbols-outlined material-symbols-filled text-sm ${ capturedPieceToneClass } ${ index > 0 ? '-ml-1.5' : '' } ${ iconClassName } ` . trim ( ) }
193+ className = { `cg-wrap !relative !inline-block !h-[1em] !w-[1em] align-middle ${
194+ index > 0 ? '-ml-1.5' : ''
195+ } ${ iconClassName } `. trim ( ) }
190196 title = { getPieceLabel ( piece ) }
191197 >
192- { getPieceIcon ( piece ) }
198+ < piece
199+ className = { `${ getPieceSpriteClass ( piece ) } ${ capturedPieceColor } ` }
200+ style = { {
201+ width : '100%' ,
202+ height : '100%' ,
203+ filter : capturedPieceFilter ,
204+ } }
205+ />
193206 </ span >
194207 ) ) }
195208 </ div >
196209 )
197210 } ) }
198211 </ div >
199- { materialData . advantage > 0 && (
200- < span
201- className = { `text-xxs font-medium text-secondary ${ textClassName } ` . trim ( ) }
202- >
203- +{ materialData . advantage }
204- </ span >
205- ) }
206212 </ div >
207213 )
208214}
0 commit comments