import React from "react"; import { Puzzle, getOrientation } from "../../../utils"; import { ChessPuzzleContextType, useChessPuzzle, } from "../../../hooks/useChessPuzzle"; import { ChessGame } from "@react-chess-tools/react-chess-game"; import { ChessPuzzleContext } from "../../../hooks/useChessPuzzleContext"; import { PuzzleThemeProvider } from "../../../theme/context"; import { mergePuzzleTheme } from "../../../theme/utils"; import type { PartialChessPuzzleTheme } from "../../../theme/types"; export interface RootProps { puzzle: Puzzle; onSolve?: (puzzleContext: ChessPuzzleContextType) => void; onFail?: (puzzleContext: ChessPuzzleContextType) => void; /** Optional theme configuration. Supports partial themes - only override the colors you need. */ theme?: PartialChessPuzzleTheme; /** When true, any checkmate move solves the puzzle (not just the canonical solution). Defaults to true. */ solveOnCheckmate?: boolean; } interface PuzzleRootInnerProps { puzzle: Puzzle; onSolve?: (puzzleContext: ChessPuzzleContextType) => void; onFail?: (puzzleContext: ChessPuzzleContextType) => void; solveOnCheckmate: boolean; children: React.ReactNode; } const PuzzleRootInner: React.FC = ({ puzzle, onSolve, onFail, solveOnCheckmate, children, }) => { const context = useChessPuzzle(puzzle, onSolve, onFail, solveOnCheckmate); return ( {children} ); }; export const Root: React.FC> = ({ puzzle, onSolve, onFail, theme, solveOnCheckmate = true, children, }) => { // Merge partial theme with defaults const mergedTheme = React.useMemo(() => mergePuzzleTheme(theme), [theme]); return ( {children} ); }; Root.displayName = "ChessPuzzle.Root";