{"version":3,"sources":["../src/components/ChessPuzzle/parts/Root.tsx","../src/utils/index.ts","../src/hooks/useChessPuzzle.ts","../src/hooks/reducer.ts","../src/hooks/useChessPuzzleContext.ts","../src/components/ChessPuzzle/parts/PuzzleBoard.tsx","../src/components/ChessPuzzle/parts/Reset.tsx","../src/components/ChessPuzzle/parts/Hint.tsx","../src/components/ChessPuzzle/index.ts"],"sourcesContent":["import React from \"react\";\nimport { Puzzle, getOrientation } from \"../../../utils\";\nimport { useChessPuzzle } from \"../../../hooks/useChessPuzzle\";\nimport { ChessGame } from \"react-chess-game-fix\";\nimport { ChessPuzzleContext } from \"../../../hooks/useChessPuzzleContext\";\n\nexport interface RootProps {\n  puzzle: Puzzle;\n  onSolve?: (changePuzzle: (puzzle: Puzzle) => void) => void;\n  onFail?: (changePuzzle: (puzzle: Puzzle) => void) => void;\n}\n\nconst PuzzleRoot: React.FC<React.PropsWithChildren<RootProps>> = ({\n  puzzle,\n  onSolve,\n  onFail,\n  children,\n}) => {\n  const context = useChessPuzzle(puzzle, onSolve, onFail);\n\n  return (\n    <ChessPuzzleContext.Provider value={context}>\n      {children}\n    </ChessPuzzleContext.Provider>\n  );\n};\n\nexport const Root: React.FC<React.PropsWithChildren<RootProps>> = ({\n  puzzle,\n  onSolve,\n  onFail,\n  children,\n}) => {\n  return (\n    <ChessGame.Root fen={puzzle.fen} orientation={getOrientation(puzzle)}>\n      <PuzzleRoot puzzle={puzzle} onSolve={onSolve} onFail={onFail}>\n        {children}\n      </PuzzleRoot>\n    </ChessGame.Root>\n  );\n};\n","import { type Color, Chess, Move } from \"chess.js\";\nimport React, { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport _ from \"lodash\";\n\nexport type Status = \"not-started\" | \"in-progress\" | \"solved\" | \"failed\";\n\nexport type Hint = \"none\" | \"piece\" | \"move\";\n\nexport type Puzzle = {\n  fen: string;\n  moves: string[];\n  // if the first move of the puzzle has to be made by the cpu, as in chess.com puzzles\n  makeFirstMove?: boolean;\n};\n\nconst FAIL_COLOR = \"rgba(201, 52, 48, 0.5)\";\nconst SUCCESS_COLOR = \"rgba(172, 206, 89, 0.5)\";\nconst HINT_COLOR = \"rgba(27, 172, 166, 0.5)\";\n\nexport const getOrientation = (puzzle: Puzzle): Color => {\n  const fen = puzzle.fen;\n  const game = new Chess(fen);\n  if (puzzle.makeFirstMove) {\n    game.move(puzzle.moves[0]);\n  }\n  return game.turn();\n};\n\ninterface ClickableElement extends ReactElement {\n  props: {\n    onClick?: () => void;\n  };\n}\n\nexport const isClickableElement = (\n  element: ReactNode,\n): element is ClickableElement => React.isValidElement(element);\n\nexport const getCustomSquareStyles = (\n  status: Status,\n  hint: Hint,\n  isPlayerTurn: boolean,\n  game: Chess,\n  nextMove?: Move | null,\n) => {\n  const customSquareStyles: Record<string, CSSProperties> = {};\n\n  const lastMove = _.last(game.history({ verbose: true }));\n\n  if (status === \"failed\" && lastMove) {\n    customSquareStyles[lastMove.from] = {\n      backgroundColor: FAIL_COLOR,\n    };\n    customSquareStyles[lastMove.to] = {\n      backgroundColor: FAIL_COLOR,\n    };\n  }\n\n  if (\n    lastMove &&\n    (status === \"solved\" || (status !== \"failed\" && !isPlayerTurn))\n  ) {\n    customSquareStyles[lastMove.from] = {\n      backgroundColor: SUCCESS_COLOR,\n    };\n    customSquareStyles[lastMove.to] = {\n      backgroundColor: SUCCESS_COLOR,\n    };\n  }\n\n  if (hint === \"piece\") {\n    if (nextMove) {\n      customSquareStyles[nextMove.from] = {\n        backgroundColor: HINT_COLOR,\n      };\n    }\n  }\n\n  if (hint === \"move\") {\n    if (nextMove) {\n      customSquareStyles[nextMove.from] = {\n        backgroundColor: HINT_COLOR,\n      };\n      customSquareStyles[nextMove.to] = {\n        backgroundColor: HINT_COLOR,\n      };\n    }\n  }\n\n  return customSquareStyles;\n};\n\nexport const stringToMove = (game: Chess, move: string | null | undefined) => {\n  const copy = new Chess(game.fen());\n  if (move === null || move === undefined) {\n    return null;\n  }\n  try {\n    return copy.move(move);\n  } catch (e) {\n    return null;\n  }\n};\n","import { useEffect, useReducer } from \"react\";\nimport { initializePuzzle, reducer } from \"./reducer\";\nimport { getOrientation, type Puzzle } from \"../utils\";\nimport { useChessGameContext } from \"react-chess-game-fix\";\n\nexport const useChessPuzzle = (\n  puzzle: Puzzle,\n  onSolve?: (changePuzzle: (puzzle: Puzzle) => void) => void,\n  onFail?: (changePuzzle: (puzzle: Puzzle) => void) => void,\n) => {\n  const gameContext = useChessGameContext();\n\n  const [state, dispatch] = useReducer(reducer, { puzzle }, initializePuzzle);\n\n  const {\n    game,\n    methods: { makeMove, setPosition },\n    currentFen,\n  } = gameContext;\n\n  useEffect(() => {\n    if (gameContext && game.fen() !== puzzle.fen) {\n      setPosition(puzzle.fen, getOrientation(puzzle));\n    }\n  }, []);\n\n  const changePuzzle = (puzzle: Puzzle) => {\n    dispatch({ type: \"INITIALIZE\", payload: { puzzle } });\n    setPosition(puzzle.fen, getOrientation(puzzle));\n  };\n\n  const autoRetry = () => {\n    dispatch({ type: \"AUTO_RETRY\", payload: { puzzle } });\n  };\n\n  useEffect(() => {\n    if (gameContext && game.fen() === puzzle.fen && state.needCpuMove) {\n      setTimeout(\n        () =>\n          dispatch({\n            type: \"CPU_MOVE\",\n          }),\n        0,\n      );\n    }\n  }, [gameContext, state.needCpuMove]);\n\n  useEffect(() => {\n    if (state.cpuMove) {\n      makeMove(state.cpuMove);\n    }\n  }, [state.cpuMove]);\n\n  useEffect(() => {\n    if (game?.history()?.length <= 0 + (puzzle.makeFirstMove ? 1 : 0)) {\n      return;\n    }\n    if (game.history().length % 2 === (puzzle.makeFirstMove ? 0 : 1)) {\n      dispatch({\n        type: \"PLAYER_MOVE\",\n        payload: {\n          move: gameContext?.game?.history({ verbose: true })?.pop() ?? null,\n          onSolve,\n          onFail,\n          changePuzzle,\n          game: game,\n        },\n      });\n\n      dispatch({\n        type: \"CPU_MOVE\",\n      });\n    }\n  }, [game?.history()?.length]);\n\n  if (!gameContext) {\n    throw new Error(\"useChessPuzzle must be used within a ChessGameContext\");\n  }\n\n  const onHint = () => {\n    dispatch({ type: \"TOGGLE_HINT\" });\n  };\n\n  return {\n    status: state.status,\n    changePuzzle,\n    autoRetry,\n    currentMoveIndex: state.currentMoveIndex,\n    puzzle,\n    hint: state.hint,\n    onHint,\n    nextMove: state.nextMove,\n    isPlayerTurn: state.isPlayerTurn,\n  };\n};\n","import { Chess, Move } from \"chess.js\";\nimport { type Puzzle, type Hint, type Status } from \"../utils\";\n\nexport type State = {\n  puzzle: Puzzle;\n  currentMoveIndex: number;\n  status: Status;\n  cpuMove?: string | null;\n  nextMove?: string | null;\n  hint: Hint;\n  needCpuMove: boolean;\n  isPlayerTurn: boolean;\n};\n\nexport type Action =\n  | {\n      type: \"INITIALIZE\";\n      payload: {\n        puzzle: Puzzle;\n      };\n    }\n  | {\n      type: \"RESET\";\n    }\n  | { type: \"TOGGLE_HINT\" }\n  | {\n      type: \"CPU_MOVE\";\n    }\n  | {\n      type: \"PLAYER_MOVE\";\n      payload: {\n        move?: Move | null;\n        onSolve?: (changePuzzle: (puzzle: Puzzle) => void) => void;\n        onFail?: (changePuzzle: (puzzle: Puzzle) => void) => void;\n        changePuzzle: (puzzle: Puzzle) => void;\n        game: Chess;\n      };\n    }\n  | {\n      type: \"AUTO_RETRY\";\n      payload: {\n        puzzle: Puzzle;\n      };\n    };\n\nexport const initializePuzzle = ({ puzzle }: { puzzle: Puzzle }): State => {\n  return {\n    puzzle,\n    currentMoveIndex: 0,\n    status: \"not-started\",\n    nextMove: puzzle.moves[0],\n    hint: \"none\",\n    cpuMove: null,\n    needCpuMove: !!puzzle.makeFirstMove,\n    isPlayerTurn: !puzzle.makeFirstMove,\n  };\n};\n\nexport const autoRetryPuzzle = (\n  { puzzle }: { puzzle: Puzzle },\n  currentMove: number,\n): State => {\n  return {\n    puzzle,\n    currentMoveIndex: currentMove,\n    status: \"in-progress\",\n    nextMove: puzzle.moves[currentMove],\n    hint: \"none\",\n    cpuMove: null,\n    needCpuMove: false,\n    isPlayerTurn: true,\n  };\n};\n\nexport const reducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"INITIALIZE\":\n      return {\n        ...state,\n        ...initializePuzzle(action.payload),\n      };\n    case \"RESET\":\n      return {\n        ...state,\n        ...initializePuzzle({\n          puzzle: state.puzzle,\n        }),\n      };\n    case \"TOGGLE_HINT\":\n      if (state.hint === \"none\") {\n        return { ...state, hint: \"piece\" };\n      }\n      return { ...state, hint: \"move\" };\n    case \"CPU_MOVE\":\n      if (state.isPlayerTurn) {\n        return state;\n      }\n      if ([\"solved\", \"failed\"].includes(state.status)) {\n        return state;\n      }\n\n      return {\n        ...state,\n        currentMoveIndex: state.currentMoveIndex + 1,\n        cpuMove: state.puzzle.moves[state.currentMoveIndex],\n        nextMove:\n          state.currentMoveIndex < state.puzzle.moves.length - 1\n            ? state.puzzle.moves[state.currentMoveIndex + 1]\n            : null,\n        needCpuMove: false,\n        isPlayerTurn: true,\n        status: \"in-progress\",\n      };\n\n    case \"PLAYER_MOVE\": {\n      const { move, onSolve, onFail, changePuzzle } = action.payload;\n\n      const isMoveRight = [move?.san, move?.lan].includes(\n        state?.nextMove || \"\",\n      );\n      const isPuzzleSolved =\n        state.currentMoveIndex === state.puzzle.moves.length - 1;\n\n      if (!isMoveRight) {\n        if (onFail) {\n          onFail(changePuzzle);\n        }\n        return {\n          ...state,\n          status: \"failed\",\n          nextMove: null,\n          hint: \"none\",\n          isPlayerTurn: false,\n        };\n      }\n\n      if (isPuzzleSolved) {\n        if (onSolve) {\n          onSolve(changePuzzle);\n        }\n\n        return {\n          ...state,\n          status: \"solved\",\n          nextMove: null,\n          hint: \"none\",\n          isPlayerTurn: false,\n        };\n      }\n\n      return {\n        ...state,\n        hint: \"none\",\n        currentMoveIndex: state.currentMoveIndex + 1,\n        nextMove: state.puzzle.moves[state.currentMoveIndex + 1],\n        status: \"in-progress\",\n        needCpuMove: true,\n        isPlayerTurn: false,\n      };\n    }\n\n    case \"AUTO_RETRY\": {\n      return {\n        ...state,\n        ...autoRetryPuzzle(action.payload, state.currentMoveIndex),\n      };\n    }\n\n    default:\n      return state;\n  }\n};\n","import React from \"react\";\nimport { useChessPuzzle } from \"./useChessPuzzle\";\n\nexport const ChessPuzzleContext = React.createContext<ReturnType<\n  typeof useChessPuzzle\n> | null>(null);\n\nexport const useChessPuzzleContext = () => {\n  const context = React.useContext(ChessPuzzleContext);\n  if (!context) {\n    throw new Error(\n      \"useChessGameContext must be used within a ChessGameProvider\",\n    );\n  }\n  return context;\n};\n","import React from \"react\";\nimport {\n  ChessGame,\n  useChessGameContext,\n} from \"react-chess-game-fix\";\nimport { getCustomSquareStyles, stringToMove } from \"../../../utils\";\nimport { useChessPuzzleContext } from \"../../..\";\n\nexport interface PuzzleBoardProps\n  extends React.ComponentProps<typeof ChessGame.Board> {}\nexport const PuzzleBoard: React.FC<PuzzleBoardProps> = ({ ...rest }) => {\n  const puzzleContext = useChessPuzzleContext();\n  const gameContext = useChessGameContext();\n\n  if (!puzzleContext) {\n    throw new Error(\"PuzzleContext not found\");\n  }\n  if (!gameContext) {\n    throw new Error(\"ChessGameContext not found\");\n  }\n\n  const { game } = gameContext;\n  const { status, hint, isPlayerTurn, nextMove } = puzzleContext;\n\n  return (\n    <ChessGame.Board\n      customSquareStyles={getCustomSquareStyles(\n        status,\n        hint,\n        isPlayerTurn,\n        game,\n        stringToMove(game, nextMove),\n      )}\n      {...rest}\n    />\n  );\n};\n","import React from \"react\";\nimport { isClickableElement, type Puzzle, type Status } from \"../../../utils\";\nimport { useChessPuzzleContext } from \"../../..\";\n\nexport interface ResetProps {\n  asChild?: boolean;\n  puzzle?: Puzzle;\n  onReset?: () => void;\n  showOn?: Status[];\n}\n\nconst defaultShowOn: Status[] = [\"failed\", \"solved\"];\n\nexport const Reset: React.FC<React.PropsWithChildren<ResetProps>> = ({\n  children,\n  asChild,\n  puzzle,\n  onReset,\n  showOn = defaultShowOn,\n}) => {\n  const puzzleContext = useChessPuzzleContext();\n  if (!puzzleContext) {\n    throw new Error(\"PuzzleContext not found\");\n  }\n  const { changePuzzle, status } = puzzleContext;\n  const handleClick = () => {\n    changePuzzle(puzzle || puzzleContext.puzzle);\n    onReset?.();\n  };\n\n  if (!showOn.includes(status)) {\n    return null;\n  }\n\n  if (asChild) {\n    const child = React.Children.only(children);\n    if (isClickableElement(child)) {\n      return React.cloneElement(child, {\n        onClick: handleClick,\n      });\n    } else {\n      throw new Error(\"Change child must be a clickable element\");\n    }\n  }\n\n  return (\n    <button type=\"button\" onClick={handleClick}>\n      {children}\n    </button>\n  );\n};\n","import React from \"react\";\nimport { Status, isClickableElement } from \"../../../utils\";\nimport { useChessPuzzleContext } from \"../../..\";\n\nexport interface HintProps {\n  asChild?: boolean;\n  showOn?: Status[];\n}\n\nconst defaultShowOn: Status[] = [\"not-started\", \"in-progress\"];\n\nexport const Hint: React.FC<React.PropsWithChildren<HintProps>> = ({\n  children,\n  asChild,\n  showOn = defaultShowOn,\n}) => {\n  const puzzleContext = useChessPuzzleContext();\n  if (!puzzleContext) {\n    throw new Error(\"PuzzleContext not found\");\n  }\n  const { onHint, status } = puzzleContext;\n  const handleClick = () => {\n    onHint();\n  };\n\n  if (!showOn.includes(status)) {\n    return null;\n  }\n\n  if (asChild) {\n    const child = React.Children.only(children);\n    if (isClickableElement(child)) {\n      return React.cloneElement(child, {\n        onClick: handleClick,\n      });\n    } else {\n      throw new Error(\"Change child must be a clickable element\");\n    }\n  }\n\n  return (\n    <button type=\"button\" onClick={handleClick}>\n      {children}\n    </button>\n  );\n};\n","import { Root } from \"./parts/Root\";\nimport { PuzzleBoard } from \"./parts/PuzzleBoard\";\nimport { Reset } from \"./parts/Reset\";\nimport { Hint } from \"./parts/Hint\";\n\nexport const ChessPuzzle = {\n  Root,\n  Board: PuzzleBoard,\n  Reset,\n  Hint,\n};\n"],"mappings":"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","names":["React","puzzle","_a","React","React","React","ChessGame","useChessGameContext","useChessGameContext","React","ChessGame","React","React","React","defaultShowOn","React"]}