diff --git a/packages/chess/src/ui/Board.tsx b/packages/chess/src/ui/Board.tsx index f81b25e..3ec312b 100644 --- a/packages/chess/src/ui/Board.tsx +++ b/packages/chess/src/ui/Board.tsx @@ -13,6 +13,7 @@ import { type SquareOverlayComponent, } from './preset-overlays'; import { VisualEffectLayer } from './VisualEffectLayer'; +import { ModifiedPieceIndicator } from './ModifiedPieceIndicator.js'; import '../presets/ui-overlays-index'; interface BoardProps { @@ -327,28 +328,33 @@ export function Board({ facts, legalMoves, onMove, turn, myColor, lastMove, chec * FLIP clean. */} {piece && ( -
onPieceHover?.(piece.id)} - onMouseLeave={() => onPieceHover?.(null)} - onClick={() => onPieceClick?.(piece.id)} - > - -
+ <> +
onPieceHover?.(piece.id)} + onMouseLeave={() => onPieceHover?.(null)} + onClick={() => onPieceClick?.(piece.id)} + > + +
+ {engine !== undefined && ( + + )} + )} {/* Rank/File labels (optional but helpful for debug) */} diff --git a/packages/chess/src/ui/ModifiedPieceIndicator.tsx b/packages/chess/src/ui/ModifiedPieceIndicator.tsx new file mode 100644 index 0000000..2162aed --- /dev/null +++ b/packages/chess/src/ui/ModifiedPieceIndicator.tsx @@ -0,0 +1,25 @@ +import { MODIFIER_REGISTRY } from '../modifiers/registry'; +import type { ChessEngine } from '../engine'; +import type { EntityId } from '@paratype/rete'; + +interface Props { + pieceId: number; + engine: ChessEngine; +} + +export function ModifiedPieceIndicator({ pieceId, engine }: Props) { + const isModified = MODIFIER_REGISTRY.list().some((descriptor) => { + return engine.session.get(pieceId as unknown as EntityId, descriptor.attrName) !== undefined; + }); + + if (!isModified) { + return null; + } + + return ( +
+ ); +}