react-chessboard-ui 1.4.4 → 1.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChessBoard/utils.d.ts +15 -0
- package/dist/index.js +64 -8
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +64 -8
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/JSChessEngine/JSChessEngine.ts","../src/JSChessEngine/chess.consts.ts","../src/JSChessEngine/FEN.utils.ts","../src/ChessBoard/chessPieciesMap.tsx","../src/ChessBoard/constants.ts","../src/ChessBoard/utils.ts","../src/ChessBoard/ChessBoardCellsLayout.tsx","../src/ChessBoard/ChessBoardFiguresLayout.tsx","../src/ChessBoard/ChessBoardControlLayout.tsx","../src/ChessBoard/useChessBoardInteractive.ts","../src/ChessBoard/HoldedFigure.tsx","../src/ChessBoard/ChessBoardInteractiveLayout.tsx","../src/ChessBoard/Arrow.tsx","../src/ChessBoard/ArrowLayout.tsx","../src/ChessBoard/FigurePicker.tsx","../src/ChessBoard/ChessBoard.tsx"],"sourcesContent":["export type FigureType =\n | 'pawn'\n | 'bishop'\n | 'knight'\n | 'rook'\n | 'queen'\n | 'king';\nexport type FigureColor = 'white' | 'black';\n\nexport type CellPos = [number, number];\n\nexport interface Figure {\n type: FigureType;\n color: FigureColor;\n touched?: boolean;\n position?: CellPos;\n}\n\nexport type CellColor = 'white' | 'black';\n\nexport interface Cell {\n figure?: Figure;\n beated?: boolean;\n}\n\nexport interface ChessBoardConfig {\n cellWhiteBg: string;\n cellBlackBg: string;\n cellSelectedBg: string;\n cellSize: number;\n figures: {\n black: { [figureType: string]: string };\n white: { [figureType: string]: string };\n };\n}\n\nexport interface MoveNotation {\n move: string;\n figure: Figure;\n stateFEN: string;\n}\n\nexport type MoveDirection =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-right'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-left';\n\nexport type MoveType =\n | 'move'\n | 'beat'\n | 'check'\n | 'double-check'\n | 'mat'\n | 'transform'\n | '0-0'\n | '0-0-0';\n\nexport type GameResultType =\n | 'mat'\n | 'pat'\n | 'draw'\n | 'timeout'\n | 'surrender'\n | undefined;\n\nexport interface GameResult {\n resultType: GameResultType;\n winColor?: FigureColor; // Если \"Пат\" или \"Ничья\" то нет цвета - победителя\n}\n\nexport type PawnMoveType = 'first' | 'default' | 'attack';\n\nexport interface MoveByPawn {\n pos: CellPos;\n typeMove: PawnMoveType;\n}\n\nexport interface MoveData {\n from: CellPos;\n to: CellPos;\n figure: Figure;\n type?: MoveType;\n FEN?: string;\n timeWhite?: number;\n timeBlack?: number;\n}\n\nexport interface BeatedCountsData {\n pawn: number;\n knight: number;\n bishop: number;\n rook: number;\n queen: number;\n}\n\nexport type CastlingType = '0-0' | '0-0-0';\n\nexport type OnCheckPossible = (\n state: Cell[][],\n figurePos: CellPos,\n targetPos: CellPos,\n) => boolean;\n\nconst DIRECTIONS_D: MoveDirection[] = [\n 'top-right',\n 'bottom-right',\n 'bottom-left',\n 'top-left',\n];\nconst DIRECTIONS_VH: MoveDirection[] = ['top', 'right', 'bottom', 'left'];\n\nconst FIGURES_COUNTS = {\n PAWNS_COUNT: 8,\n KNIGHTS_COUNT: 2,\n BISHOPS_COUNT: 2,\n ROOKS_COUNT: 2,\n QUEENS_COUNT: 1,\n KINGS_COUNT: 1,\n};\n\nexport class JSChessEngine {\n /**\n * Возвращает возможные ходы фигуры\n * @param state состояние доски\n * @param param1 позиция фигуры, которой хотим сыграть\n * @param linesWithCheck линии по которым есть шах на союзного короля\n * @param revese перевернута ли доска\n */\n static getNextMoves = (\n state: Cell[][],\n [i, j]: CellPos,\n linesWithCheck: CellPos[][],\n revese = false\n ): CellPos[] => {\n const figure = state[j][i].figure!;\n const { type } = figure;\n\n let nextPositions: CellPos[] = [];\n\n switch (type) {\n case 'pawn':\n const pawnPossibleMoves = JSChessEngine.getNextMovesPawn(\n state,\n [i, j],\n revese\n );\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n pawnPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'bishop':\n const bishopPossibleMoves = JSChessEngine.getNextMovesBishop(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n bishopPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'knight':\n const knigtPossibleMoves = JSChessEngine.getNextMovesKnight(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n knigtPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'rook':\n const rookPossibleMovese = JSChessEngine.getNextMovesRook(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n rookPossibleMovese,\n linesWithCheck\n );\n break;\n\n case 'queen':\n const queenPossibleMoves = JSChessEngine.getNextMovesQueen(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n queenPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'king':\n nextPositions = JSChessEngine.getNextMovesKing(state, [i, j], revese);\n break;\n }\n\n return nextPositions;\n };\n\n /**\n * Возвращает первернутое состояние доски\n * @param state состояние доски\n */\n static reverseChessBoard = (state: Cell[][]) => {\n const prepareCells = [...state];\n const reversedCells = [...prepareCells.reverse()];\n\n return reversedCells.map((row) => [...row].reverse());\n };\n\n /**\n * Обновляет данные хода для того чтобы\n * можно было применить ход к перевернутой доске\n * @param moveData данные хода\n * @param boardSize размер доски\n */\n static reverseMove = (moveData: MoveData, boardSize = 8) => {\n const { from, to, figure, type } = moveData;\n\n const reversedMove: MoveData = {\n figure,\n from: [boardSize - (from[0] + 1), boardSize - (from[1] + 1)],\n to: [boardSize - (to[0] + 1), boardSize - (to[1] + 1)],\n type,\n FEN: moveData.FEN,\n };\n\n return reversedMove;\n };\n\n /**\n * Возвращет перевернутое значение для начала и конца хода фигуры\n * Использовать при подсветке хода если доска перевернута\n * @param moveVector Координаты начала и конца хода фигуры\n * @param boardSize размер доски\n */\n static reverseMoveVector = (moveVector: CellPos[], boardSize = 8) => {\n const [from, to] = moveVector;\n const reversedMoveVector = [\n [boardSize - (from[0] + 1), boardSize - (from[1] + 1)],\n [boardSize - (to[0] + 1), boardSize - (to[1] + 1)],\n ];\n\n return reversedMoveVector;\n };\n\n /**\n * Проверка на то что позиция находится в пределах доски\n * @param state состояние доски\n * @param pos проверяемая позиция\n */\n static checkInBorderBoard = (state: Cell[][], pos: CellPos) => {\n return (\n pos[0] >= 0 &&\n pos[0] < state.length &&\n pos[1] >= 0 &&\n pos[1] < state.length\n );\n };\n\n /**\n * Возвращает цвет фигуры\n * @param state состояние доски\n * @param pos позиция фигуры\n */\n static getFigureColor = (state: Cell[][], pos: CellPos) => {\n return state[pos[1]][pos[0]].figure!.color;\n };\n\n /**\n * Возвращает тип фигры\n * @param state состояние доски\n * @param pos позиция фигуры\n */\n static getFigureType = (state: Cell[][], pos: CellPos) => {\n return state[pos[1]][pos[0]].figure?.type;\n };\n\n /**\n * Проверка находится ли в указанной клетке вражеская фигура\n * @param state состояние доски\n * @param pos положение фигуры союзного цвета\n * @param target положение фигуры - цели\n */\n static checkEnemy = (state: Cell[][], pos: CellPos, target: CellPos) => {\n const color = JSChessEngine.getFigureColor(state, pos);\n const targetColor = state[target[1]][target[0]]?.figure?.color;\n\n return !!targetColor && targetColor !== color;\n };\n\n /**\n * Проверка находится ли в указанной клетке союзная фигура\n * @param state состояние доски\n * @param pos положение фигуры союзного цвета\n * @param target положение фигуры - цели\n */\n static checkTeammate = (state: Cell[][], pos: CellPos, target: CellPos) => {\n const color = JSChessEngine.getFigureColor(state, pos);\n const targetColor = state[target[1]][target[0]].figure?.color;\n\n return !!targetColor && targetColor === color;\n };\n\n /**\n * Проверка на то что фигура-цель вражеский король\n * @param state состояние доски\n * @param pos положение фигуры союзного цвета\n * @param target положение фигуры - цели\n */\n static checkEnemyKing = (\n state: Cell[][],\n pos: CellPos,\n target: CellPos\n ) => {\n const isKing = state[target[1]][target[0]]?.figure?.type === 'king';\n\n if (!isKing) return false;\n\n return JSChessEngine.checkEnemy(state, pos, target);\n };\n\n /**\n * Проверяет битая ли клетка, клетка становится битой после того\n * как пешка сделает ход на две клетки веперед\n * @param state состояние доски\n * @param target позиция проверяемой клетки\n */\n static checkBeatedCell = (state: Cell[][], target: CellPos) => {\n return !!state[target[1]][target[0]]?.beated;\n };\n\n /**\n * Возвращает есть ли фигура в указаной позиции\n * @param state состояние доски\n * @param pos проверяемая позиция\n * @returns\n */\n static hasFigure = (state: Cell[][], pos: CellPos) => {\n return !!state[pos[1]][pos[0]]?.figure;\n };\n\n /**\n * Проверяет дальнобойная ли фигура\n * слон, ладья или ферзь\n * @param state состояние доски\n * @param figurePos позиция фигуры\n */\n static checkFigureIsLongRange = (state: Cell[][], figurePos: CellPos) => {\n const { figure } = state[figurePos[1]][figurePos[0]];\n return (\n figure?.type === 'bishop' ||\n figure?.type === 'rook' ||\n figure?.type === 'queen'\n );\n };\n\n /**\n * Возвращает количество вражеских которые можно атаковать (кроме короля) фигур из массива позиций\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param positions проверяемые позиции\n */\n static getCountEnemys = (\n state: Cell[][],\n figurePos: CellPos,\n positions: CellPos[]\n ) => {\n let count = 0;\n\n for (let pos of positions) {\n if (JSChessEngine.checkEnemyKing(state, figurePos, pos)) break;\n\n if (\n JSChessEngine.checkEnemy(state, figurePos, pos)\n && !JSChessEngine.checkEnemyKing(state, figurePos, pos)\n ) count += 1;\n }\n\n return count;\n };\n\n /**\n * Возвращает позицию союзного короля\n * @param state состояние доски\n * @param figurePos позиция фигуры\n */\n static getTeammateKingPos = (state: Cell[][], figurePos: CellPos) => {\n const figureColor = JSChessEngine.getFigureColor(state, figurePos);\n\n let kingPos: CellPos | undefined = undefined;\n\n // Используется цикл для того чтобы можно было остановить поиск\n for (let j = 0; j < state.length; j++) {\n const row = state[j];\n\n for (let i = 0; i < row.length; i++) {\n const { figure } = row[i];\n\n if (figure?.color === figureColor && figure.type === 'king') {\n kingPos = [i, j];\n break;\n }\n }\n\n if (!!kingPos) {\n break;\n }\n }\n\n return kingPos;\n };\n\n /**\n * Возвращает все клетки с вражескими фигурами\n * @param state состояние доски\n * @param pos позиция союзной фигуры\n */\n static getAllEnemysPositions = (state: Cell[][], pos: CellPos) => {\n const enemysPos: CellPos[] = [];\n\n state.forEach((row, j) =>\n row.forEach((_, i) => {\n JSChessEngine.checkEnemy(state, pos, [i, j]) && enemysPos.push([i, j]);\n })\n );\n\n return enemysPos;\n };\n\n /**\n * Возвращает позиции фигур-союзников по цвету\n * @param state состояние доски\n * @param color цвет по которому ищем фигуры-союзники\n */\n static getAllTeammatesPositionsByColor = (\n state: Cell[][],\n color: FigureColor\n ) => {\n const positions: CellPos[] = [];\n\n state.forEach((row, j) =>\n row.forEach((cell, i) => {\n if (!!cell.figure && cell.figure.color === color) {\n positions.push([i, j]);\n }\n })\n );\n\n return positions;\n };\n\n /**\n * Полная проверка возможности хода для фигур: pawn, knigt, bishop, rook, queen\n * @param state состояния доски\n * @param pos положение фигуры союзного цвета\n * @param target позиция клетки - цели\n * @returns\n */\n static checkPossibleMoveTo = (\n state: Cell[][],\n pos: CellPos,\n target: CellPos\n ) => {\n // Если позиция находится за пределами доски, то сразу false\n return (\n JSChessEngine.checkInBorderBoard(state, target) &&\n // Если в клетке - цели нет фигуры\n (!JSChessEngine.hasFigure(state, target) ||\n // ИЛИ Если есть фигура и эта фигура вражеская и не король\n (JSChessEngine.hasFigure(state, target) &&\n JSChessEngine.checkEnemy(state, pos, target) &&\n !JSChessEngine.checkEnemyKing(state, pos, target)))\n );\n };\n\n /**\n * Прооверяет возможность атаки клетки\n * Если в клетке вражеская фигура, считает ее атакованной\n * Необходима для проверки нахождения вражеского короля за атакованной фигурой\n * @param state состояние доски\n * @param figurePos позиция фигураы\n * @param target клетака под атакой\n */\n static checkPossibleAttackTo = (\n state: Cell[][],\n figurePos: CellPos,\n target: CellPos\n ) => {\n // Если позиция находится за пределами доски, то сразу false\n return (\n JSChessEngine.checkInBorderBoard(state, target) &&\n (!JSChessEngine.hasFigure(state, target) ||\n JSChessEngine.checkEnemy(state, figurePos, target))\n );\n };\n\n /**\n * Проверка находится ли поле под атакой вражеской фигуры\n * (Используется для расчета возможных ходов для короля)\n * @param state состояние доски\n * @param pos позиция фигуры\n * @param target проверяемая клетка\n */\n static checkAttackedCell = (\n state: Cell[][],\n pos: CellPos,\n target: CellPos\n ) => {\n // Если позиция находится за пределами доски, то сразу false\n return JSChessEngine.checkInBorderBoard(state, target);\n };\n\n /**\n * Проверяет атакованные поля вражеской пешкой\n * (используется для получения возможных ходово для короля)\n * @param state состояние доски\n * @param pos текущая позиция пешки\n * @param target клетка - цель\n */\n static checkAttackedCellByPawn = (\n state: Cell[][],\n pos: CellPos,\n target: MoveByPawn\n ) => {\n switch (target.typeMove) {\n case 'default':\n case 'first':\n return false;\n case 'attack':\n return JSChessEngine.checkInBorderBoard(state, target.pos);\n }\n };\n\n /**\n * Проверяет находится ли позиция между атакованным королем\n * и атакующей фигурой\n * @param state состояние доски\n * @param pos проверяемая позиция\n * @param kingPos позиция союзного короля\n * @param attackerPos позиция атакующей фигуры\n */\n static checkPosBetweenAttckerAndKing = (\n state: Cell[][],\n pos: CellPos,\n kingPos: CellPos,\n attackerPos: CellPos\n ) => {\n // Проверка горизонтальных и вертикальных атак\n if (pos[0] === attackerPos[0] && pos[0] === kingPos[0]) {\n return (\n (pos[1] > kingPos[1] && pos[1] < attackerPos[1]) ||\n (pos[1] > attackerPos[1] && pos[1] < kingPos[1])\n );\n }\n\n if (pos[1] === attackerPos[1] && pos[1] === kingPos[1]) {\n return (\n (pos[0] > kingPos[0] && pos[0] < attackerPos[0]) ||\n (pos[0] > attackerPos[0] && pos[0] < kingPos[0])\n );\n }\n\n // Проверка диагональных атак\n if (\n (pos[1] > kingPos[1] && pos[1] < attackerPos[1]) ||\n (pos[1] > attackerPos[1] && pos[1] < kingPos[1])\n ) {\n return (\n (pos[0] > kingPos[0] && pos[0] < attackerPos[0]) ||\n (pos[0] > attackerPos[0] && pos[0] < kingPos[0])\n );\n }\n\n if (\n (pos[0] > kingPos[0] && pos[0] < attackerPos[0]) ||\n (pos[0] > attackerPos[0] && pos[0] < kingPos[0])\n ) {\n return (\n (pos[1] > kingPos[1] && pos[1] < attackerPos[1]) ||\n (pos[1] > attackerPos[1] && pos[1] < kingPos[1])\n );\n }\n\n return false;\n };\n\n /**\n * Корректирует возможные ходы фигуры в зависимости от того находится ли\n * фигура под атакой и стоит ли на линии атаки король за фигурой\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param possibleMoves возможные ходы фигуры\n * @param linesWithCheck массив линий по которым есть шах на союзного короля\n */\n static correctionPossibleMoves = (\n state: Cell[][],\n figurePos: CellPos,\n possibleMoves: CellPos[],\n linesWithCheck: CellPos[][]\n ) => {\n const kingPos = JSChessEngine.getTeammateKingPos(state, figurePos)!;\n\n const enemysPos = JSChessEngine.getAllEnemysPositions(state, figurePos);\n\n // Находим все дальнобойные фигуры противника,\n // так как только они могут атаковать на протяженной дистанции\n const longrangeEnemysPos = enemysPos.filter((pos) =>\n JSChessEngine.checkFigureIsLongRange(state, pos)\n );\n\n const correctedPossibleMoves: CellPos[] = [];\n\n let kingBehidFigure = false;\n\n longrangeEnemysPos.forEach((enemyPos) => {\n const enemyType = state[enemyPos[1]][enemyPos[0]].figure!.type;\n\n switch (enemyType) {\n case 'bishop':\n DIRECTIONS_D.forEach((direction) => {\n if (!kingBehidFigure) {\n const attackedLine = JSChessEngine.getFullAttackedLine(\n state,\n enemyPos,\n direction\n );\n\n // Ищем индекс позиции короля\n const foundIndexKingPos = attackedLine.findIndex(\n (pos) => pos[0] === kingPos[0] && pos[1] === kingPos[1]\n );\n\n // Ищем позицию фигуры на линии атаки\n const foundIndexFigurePos = attackedLine.findIndex(\n (pos) => pos[0] === figurePos[0] && pos[1] === figurePos[1]\n );\n\n const countFiguresBehindKing = JSChessEngine.getCountEnemys(\n state,\n enemyPos,\n attackedLine\n );\n\n // Если индексы найдены и индекс короля больше чем индекс фигуры на линии атаки\n // то корректируем возможные движения фигуры\n kingBehidFigure =\n foundIndexKingPos > -1 &&\n foundIndexFigurePos > -1 &&\n foundIndexKingPos > foundIndexFigurePos &&\n countFiguresBehindKing === 1;\n\n if (kingBehidFigure) {\n // Оставляем только те позиции которые есть и в possibleMoves и в attackedLine\n possibleMoves.forEach((possibleMove) => {\n // Включаем позиции атакующей фигуры так как ее можно съесть\n [...attackedLine, enemyPos].forEach((attackedPos) => {\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1]\n ) {\n correctedPossibleMoves.push(possibleMove);\n }\n });\n });\n }\n }\n });\n\n break;\n\n case 'rook':\n if (kingBehidFigure) {\n break;\n }\n\n DIRECTIONS_VH.forEach((direction) => {\n if (!kingBehidFigure) {\n const attackedLine = JSChessEngine.getFullAttackedLine(\n state,\n enemyPos,\n direction\n );\n\n // Ищем индекс позиции короля\n const foundIndexKingPos = attackedLine.findIndex(\n (pos) => pos[0] === kingPos[0] && pos[1] === kingPos[1]\n );\n\n // Ищем позицию фигуры на линии атаки\n const foundIndexFigurePos = attackedLine.findIndex(\n (pos) => pos[0] === figurePos[0] && pos[1] === figurePos[1]\n );\n\n const countFiguresBehindKing = JSChessEngine.getCountEnemys(\n state,\n enemyPos,\n attackedLine\n );\n\n // Если индексы найдены и индекс короля больше чем индекс фигуры на линии атаки\n // то корректируем возможные движения фигуры\n kingBehidFigure =\n foundIndexKingPos > -1 &&\n foundIndexFigurePos > -1 &&\n foundIndexKingPos > foundIndexFigurePos &&\n countFiguresBehindKing === 1;\n\n if (kingBehidFigure) {\n // Оставляем только те позиции которые есть и в possibleMoves и в attackedLine\n possibleMoves.forEach((possibleMove) => {\n // Включаем позиции атакующей фигуры так как ее можно съесть\n [...attackedLine, enemyPos].forEach((attackedPos) => {\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1]\n ) {\n correctedPossibleMoves.push(possibleMove);\n }\n });\n });\n }\n }\n });\n\n break;\n\n case 'queen':\n if (kingBehidFigure) {\n break;\n }\n\n [...DIRECTIONS_D, ...DIRECTIONS_VH].forEach((direction) => {\n if (!kingBehidFigure) {\n const attackedLine = JSChessEngine.getFullAttackedLine(\n state,\n enemyPos,\n direction\n );\n\n // Ищем индекс позиции короля\n const foundIndexKingPos = attackedLine.findIndex(\n (pos) => pos[0] === kingPos[0] && pos[1] === kingPos[1]\n );\n\n // Ищем позицию фигуры на линии атаки\n const foundIndexFigurePos = attackedLine.findIndex(\n (pos) => pos[0] === figurePos[0] && pos[1] === figurePos[1]\n );\n\n const countFiguresBehindKing = JSChessEngine.getCountEnemys(\n state,\n enemyPos,\n attackedLine\n );\n\n // Если индексы найдены и индекс короля больше чем индекс фигуры на линии атаки\n // то корректируем возможные движения фигуры\n kingBehidFigure =\n foundIndexKingPos > -1 &&\n foundIndexFigurePos > -1 &&\n foundIndexKingPos > foundIndexFigurePos &&\n countFiguresBehindKing === 1;\n\n if (kingBehidFigure) {\n // Оставляем только те позиции которые есть и в possibleMoves и в attackedLine\n possibleMoves.forEach((possibleMove) => {\n // Включаем позиции атакующей фигуры так как ее можно съесть\n [...attackedLine, enemyPos].forEach((attackedPos) => {\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1]\n ) {\n correctedPossibleMoves.push(possibleMove);\n }\n });\n });\n }\n }\n });\n\n break;\n }\n });\n\n const preparedMoves = kingBehidFigure\n ? correctedPossibleMoves\n : possibleMoves;\n\n // Если линия с шахом только одна\n // то фигура способна зашитить короля\n if (linesWithCheck.length === 1) {\n const correctedMovesForProtectKing: CellPos[] = [];\n\n const attackedLine = linesWithCheck[0];\n\n // Так как добавляется последней в линию атаки\n // TODO: поправить, так как непонятно\n const attackerPos = attackedLine[attackedLine.length - 1];\n\n attackedLine.forEach((attackedPos) => {\n preparedMoves.forEach((possibleMove) => {\n // Если возможный ход совпдает с одной из атакованных позций\n // Значит фигуры может прикрыть короля от шаха\n\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1] &&\n // Если фигура находится перед королем\n (JSChessEngine.checkPosBetweenAttckerAndKing(\n state,\n possibleMove,\n kingPos,\n attackerPos\n ) ||\n // Или в атакованной позиции есть атакующая фигура\n JSChessEngine.checkEnemy(state, kingPos, possibleMove))\n // Необходимо добавить условие для того чтобы фигура - защитник\n // Обязательно находилась перед королем\n ) {\n correctedMovesForProtectKing.push(possibleMove);\n }\n });\n });\n\n return correctedMovesForProtectKing;\n }\n\n // Если двойной и более шах, то одна фигура не способна\n // защитить от нескольких линий атак\n // следовательно не можем делать ход фигурой\n if (linesWithCheck.length > 1) return [];\n\n // Атаки на короля нет, фигуры могут свободно ходить\n return preparedMoves;\n };\n\n /**\n * Возвращает всю атакованную линию дальнобойной фигурой\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param direction направление атаки\n */\n static getFullAttackedLine = (\n state: Cell[][],\n figurePos: CellPos,\n direction: MoveDirection\n ) => {\n let nextMove: CellPos;\n\n const attackedPositions: CellPos[] = [];\n\n switch (direction) {\n case 'top-right':\n nextMove = [figurePos[0] + 1, figurePos[1] - 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] + 1, nextMove[1] - 1];\n }\n\n break;\n\n case 'bottom-right':\n nextMove = [figurePos[0] + 1, figurePos[1] + 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] + 1, nextMove[1] + 1];\n }\n\n break;\n\n case 'bottom-left':\n nextMove = [figurePos[0] - 1, figurePos[1] + 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] - 1, nextMove[1] + 1];\n }\n\n break;\n\n case 'top-left':\n nextMove = [figurePos[0] - 1, figurePos[1] - 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] - 1, nextMove[1] - 1];\n }\n\n break;\n\n case 'top':\n nextMove = [figurePos[0], figurePos[1] - 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0], nextMove[1] - 1];\n }\n\n break;\n\n case 'right':\n nextMove = [figurePos[0] + 1, figurePos[1]];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] + 1, nextMove[1]];\n }\n\n break;\n\n case 'bottom':\n nextMove = [figurePos[0], figurePos[1] + 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0], nextMove[1] + 1];\n }\n\n break;\n\n case 'left':\n nextMove = [figurePos[0] - 1, figurePos[1]];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] - 1, nextMove[1]];\n }\n\n break;\n }\n\n return attackedPositions;\n };\n\n /**\n * Возвращает все атакованные врагом позиции\n * используется для проверки ходов короля\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param reverse перевернута ли доска\n */\n static getAllAttckedPostionsByEnemys = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean\n ) => {\n const enemysPos = JSChessEngine.getAllEnemysPositions(state, figurePos);\n let attackedPositions: CellPos[] = [];\n\n enemysPos.forEach(([i, j]) => {\n const figure = state[j][i].figure!;\n const { type } = figure;\n\n switch (type) {\n case 'pawn':\n const pawnAttackedPos = JSChessEngine.calcPawnMoves(\n state,\n [i, j],\n reverse,\n JSChessEngine.checkAttackedCellByPawn\n );\n\n attackedPositions = [...attackedPositions, ...pawnAttackedPos];\n break;\n\n case 'bishop':\n const bishopAttackedPos = JSChessEngine.calcDiagonalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n attackedPositions = [...attackedPositions, ...bishopAttackedPos];\n break;\n\n case 'knight':\n const knigtAttackedPos = JSChessEngine.calcKnightMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell\n );\n\n attackedPositions = [...attackedPositions, ...knigtAttackedPos];\n break;\n\n case 'rook':\n const rookAttackedPos = JSChessEngine.calcHorizontalAndVerticalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n attackedPositions = [...attackedPositions, ...rookAttackedPos];\n break;\n\n case 'queen':\n const queenAttachedPosD = JSChessEngine.calcDiagonalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n const queenAttachedPosVH =\n JSChessEngine.calcHorizontalAndVerticalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n attackedPositions = [\n ...attackedPositions,\n ...queenAttachedPosD,\n ...queenAttachedPosVH,\n ];\n break;\n\n case 'king':\n const kingAttackedPos = JSChessEngine.calcKingMoves(\n state,\n [i, j],\n reverse,\n true\n );\n\n attackedPositions = [...attackedPositions, ...kingAttackedPos];\n break;\n }\n });\n\n return attackedPositions;\n };\n\n /**\n * Возвращает возможные позиция для движения по диагонали\n * для Слона и Ферзя\n * @param state состояние доски\n * @param figurePos текущая позиция фигуры\n */\n static calcDiagonalMoves = (\n state: Cell[][],\n figurePos: CellPos,\n onCheckPossible: OnCheckPossible = JSChessEngine.checkPossibleMoveTo,\n onCheckFigureInCell: OnCheckPossible = JSChessEngine.checkEnemy\n ) => {\n const nextMoves: CellPos[] = [];\n\n // Влево-вверх\n let nextMove: CellPos = [figurePos[0] - 1, figurePos[1] - 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] - 1, nextMove[1] - 1];\n }\n\n // Вправо-вверх\n nextMove = [figurePos[0] + 1, figurePos[1] - 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] + 1, nextMove[1] - 1];\n }\n\n // Влево-вниз\n nextMove = [figurePos[0] + 1, figurePos[1] + 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] + 1, nextMove[1] + 1];\n }\n\n // Вправо-вниз\n nextMove = [figurePos[0] - 1, figurePos[1] + 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] - 1, nextMove[1] + 1];\n }\n\n return nextMoves;\n };\n\n /**\n * Возвращает возможные позиция для движения по горизонтали и вертикали\n * для Ладьи и Ферзя\n * @param state состяние доски\n * @param figurePos\n * @returns\n */\n static calcHorizontalAndVerticalMoves = (\n state: Cell[][],\n figurePos: CellPos,\n onCheckPossible: OnCheckPossible = JSChessEngine.checkPossibleMoveTo,\n onCheckFigureInCell: OnCheckPossible = JSChessEngine.checkEnemy\n ) => {\n const nextMoves: CellPos[] = [];\n\n // Влево\n let nextMove: CellPos = [figurePos[0] - 1, figurePos[1]];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] - 1, nextMove[1]];\n }\n\n // Вверх\n nextMove = [figurePos[0], figurePos[1] - 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0], nextMove[1] - 1];\n }\n\n // Вправо\n nextMove = [figurePos[0] + 1, figurePos[1]];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] + 1, nextMove[1]];\n }\n\n // Вниз\n nextMove = [figurePos[0], figurePos[1] + 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0], nextMove[1] + 1];\n }\n\n return nextMoves;\n };\n\n /**\n * Возвращает возможные ходы для коня\n * @param state состояние доски\n * @param figurePos текущая позиция фигуры\n * @returns\n */\n static calcKnightMoves = (\n state: Cell[][],\n figurePos: CellPos,\n onCheckPossible: OnCheckPossible = JSChessEngine.checkPossibleMoveTo\n ) => {\n const nextMoves: CellPos[] = [];\n\n const possibleMoves: CellPos[] = [\n [figurePos[0] + 1, figurePos[1] - 2],\n [figurePos[0] - 1, figurePos[1] - 2],\n [figurePos[0] - 2, figurePos[1] + 1],\n [figurePos[0] - 2, figurePos[1] - 1],\n [figurePos[0] + 2, figurePos[1] + 1],\n [figurePos[0] + 2, figurePos[1] - 1],\n [figurePos[0] + 1, figurePos[1] + 2],\n [figurePos[0] - 1, figurePos[1] + 2],\n ];\n\n possibleMoves.forEach((move) => {\n if (onCheckPossible(state, figurePos, move)) {\n nextMoves.push(move);\n }\n });\n\n return nextMoves;\n };\n\n /**\n * Проверяет возможность пешки пойти на клетку - цель\n * @param state состояние доски\n * @param pos текущая позиция пешки\n * @param target клетка - цель\n * @param pawnColor цвет пешки вычисленный заранее\n * @param reverse перевернута ли доска\n */\n static checkPossiblePawnMoveToPos = (\n state: Cell[][],\n pos: CellPos,\n target: MoveByPawn,\n pawnColor: FigureColor,\n reverse: boolean\n ) => {\n switch (target.typeMove) {\n case 'first':\n if (\n (pawnColor === 'white' && reverse) ||\n (pawnColor === 'black' && !reverse)\n ) {\n return (\n pos[1] === 1 &&\n !JSChessEngine.hasFigure(state, [\n target.pos[0],\n target.pos[1] - 1,\n ]) &&\n !JSChessEngine.hasFigure(state, target.pos)\n );\n }\n\n return (\n pos[1] === state.length - 2 &&\n !JSChessEngine.hasFigure(state, [target.pos[0], target.pos[1] + 1]) &&\n !JSChessEngine.hasFigure(state, target.pos)\n );\n\n case 'default':\n return !JSChessEngine.hasFigure(state, target.pos);\n\n case 'attack':\n return (\n (JSChessEngine.checkInBorderBoard(state, target.pos) &&\n JSChessEngine.hasFigure(state, target.pos) &&\n JSChessEngine.checkEnemy(state, pos, target.pos) &&\n !JSChessEngine.checkEnemyKing(state, pos, target.pos)) ||\n // Если поле битое\n (JSChessEngine.checkInBorderBoard(state, target.pos) &&\n JSChessEngine.checkBeatedCell(state, target.pos))\n );\n }\n };\n\n /**\n * Возвращает возможные позиции для пешки\n * @param state состояние доски\n * @param figurePos текущее положение пешки\n * @param revese перевернута ли доска\n * @returns\n */\n static calcPawnMoves = (\n state: Cell[][],\n figurePos: CellPos,\n revese: boolean,\n onCheckPossible:\n | typeof JSChessEngine.checkPossiblePawnMoveToPos\n | typeof JSChessEngine.checkAttackedCellByPawn = JSChessEngine.checkPossiblePawnMoveToPos\n ) => {\n const pawnColor = JSChessEngine.getFigureColor(state, figurePos);\n const nextMoves: CellPos[] = [];\n\n // Возможные позиции для пешки\n const possibleMoves: MoveByPawn[] = [\n // Первый ход\n { typeMove: 'first', pos: [figurePos[0], figurePos[1] - 2] },\n\n // Обычный ход вперед\n { typeMove: 'default', pos: [figurePos[0], figurePos[1] - 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] - 1, figurePos[1] - 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] + 1, figurePos[1] - 1] },\n ];\n\n // В обычном состоянии это возможные ходы за черных\n // с параметром reverse = true возможные ходы за белых\n const possibleMovesReverse: MoveByPawn[] = [\n // Первый ход\n { typeMove: 'first', pos: [figurePos[0], figurePos[1] + 2] },\n\n // Обычный ход вперед\n { typeMove: 'default', pos: [figurePos[0], figurePos[1] + 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] - 1, figurePos[1] + 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] + 1, figurePos[1] + 1] },\n ];\n\n // Если цвет пещки белый и доска не перевернута ИЛИ цвет пешки черный и доска перевернута => используем обычные ходы\n // Иначе используем перевернутые ходы\n const possibleMovesForColor =\n (pawnColor === 'white' && !revese) || (pawnColor === 'black' && revese)\n ? possibleMoves\n : possibleMovesReverse;\n\n possibleMovesForColor.forEach((move) => {\n onCheckPossible(state, figurePos, move, pawnColor, revese) &&\n nextMoves.push(move.pos);\n });\n\n return nextMoves;\n };\n\n /**\n * Проверяет возможна ли рокеровка\n * @param state состояние доски\n * @param kingPos позиция короля\n * @param reverse перевенута ли доска\n */\n static checkPossibleCastling = (\n state: Cell[][],\n kingPos: CellPos,\n castlingPath: CellPos[],\n reverse: boolean\n ) => {\n // Если короля перемещали - рокеровка невозможна\n if (\n !!state[kingPos[1]][kingPos[0]].figure &&\n state[kingPos[1]][kingPos[0]].figure?.touched\n )\n return false;\n\n // Проверка на атакованы ли поля для рокеровки\n // Если хоть одно поле кроме для рокеровки атаковано (кроме поля на котором ладья)\n // и если атакован король\n // то рокеровка невозможна\n const allAttackedPositionsByEnemys =\n JSChessEngine.getAllAttckedPostionsByEnemys(state, kingPos, reverse);\n\n const foundCheckKingPos = allAttackedPositionsByEnemys.find(\n (attackedPos) =>\n attackedPos[0] === kingPos[0] && attackedPos[1] === kingPos[1]\n );\n\n if (!!foundCheckKingPos) return false;\n\n // Если ладью перемещали - рокеровка невозможна\n // figurePos[1] - горизонталь на которой изначально находится короля\n // на ней же должны находиться ладьи\n const castlingPathWithoutRook = [...castlingPath];\n const rookPos = castlingPathWithoutRook.pop();\n\n if (\n !state[rookPos![1]][rookPos![0]] ||\n !state[rookPos![1]][rookPos![0]].figure\n )\n return false;\n\n if (\n !!state[rookPos![1]][rookPos![0]].figure &&\n state[rookPos![1]][rookPos![0]].figure?.touched\n )\n return false;\n\n // Если на пути рокеровки есть фигуры - рокеровка невохможна\n const castlinPathWithFigures = castlingPathWithoutRook.filter(\n (castlingPos) => JSChessEngine.hasFigure(state, castlingPos)\n );\n\n if (castlinPathWithFigures.length > 0) return false;\n\n let isPossibleCastling = true;\n\n for (let i = 0; i < allAttackedPositionsByEnemys.length; i++) {\n const attackedPos = allAttackedPositionsByEnemys[i];\n\n for (let j = 0; j < castlingPathWithoutRook.length; j++) {\n const castlingPos = castlingPathWithoutRook[j];\n\n if (\n castlingPos[0] === attackedPos[0] &&\n castlingPos[1] === attackedPos[1]\n ) {\n isPossibleCastling = false;\n break;\n }\n }\n\n if (!isPossibleCastling) break;\n }\n\n return isPossibleCastling;\n };\n\n /**\n * Возвращает возможные ходы для короля\n * @param state состояние доски\n * @param figurePos позиция короля\n * @returns\n */\n static calcKingMoves = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean,\n onlyAttacks: boolean = false\n ) => {\n const nextMoves: CellPos[] = [];\n\n const possibleMoves: CellPos[] = [\n [figurePos[0], figurePos[1] - 1],\n [figurePos[0] + 1, figurePos[1] - 1],\n [figurePos[0] + 1, figurePos[1]],\n [figurePos[0] + 1, figurePos[1] + 1],\n [figurePos[0], figurePos[1] + 1],\n [figurePos[0] - 1, figurePos[1] + 1],\n [figurePos[0] - 1, figurePos[1]],\n [figurePos[0] - 1, figurePos[1] - 1],\n ];\n\n // Для короткой рокеровки\n const castlingMovesDefault: CellPos[] = [\n [figurePos[0] + 1, figurePos[1]],\n [figurePos[0] + 2, figurePos[1]],\n [figurePos[0] + 3, figurePos[1]],\n ];\n\n // Для длинной рокеровки\n const longCastlingMovesDefault: CellPos[] = [\n [figurePos[0] - 1, figurePos[1]],\n [figurePos[0] - 2, figurePos[1]],\n [figurePos[0] - 3, figurePos[1]],\n [figurePos[0] - 4, figurePos[1]],\n ];\n\n // Для короткой рокеровки (доска развернута)\n const castlingMovesReversed: CellPos[] = [\n [figurePos[0] - 1, figurePos[1]],\n [figurePos[0] - 2, figurePos[1]],\n [figurePos[0] - 3, figurePos[1]],\n ];\n\n // Для длинной рокеровки (доска развернута)\n const longCastlingMovesReversed: CellPos[] = [\n [figurePos[0] + 1, figurePos[1]],\n [figurePos[0] + 2, figurePos[1]],\n [figurePos[0] + 3, figurePos[1]],\n [figurePos[0] + 4, figurePos[1]],\n ];\n\n const castlingMoves = reverse\n ? castlingMovesReversed\n : castlingMovesDefault;\n const longCastlingMoves = reverse\n ? longCastlingMovesReversed\n : longCastlingMovesDefault;\n\n if (onlyAttacks) return possibleMoves;\n\n const allAttackedPositionsByEnemys =\n JSChessEngine.getAllAttckedPostionsByEnemys(state, figurePos, reverse);\n\n possibleMoves.forEach((move) => {\n if (JSChessEngine.checkPossibleMoveTo(state, figurePos, move)) {\n const foundInAttacked = allAttackedPositionsByEnemys.find(\n (attackedMove) =>\n attackedMove[0] === move[0] && attackedMove[1] === move[1]\n );\n\n // Если возможный ход не найден в полях находящихся под атакой, то добавляем его в возможные ходы короля\n foundInAttacked === undefined && nextMoves.push(move);\n }\n });\n\n // Проверка на возможность рокеровки\n // 1. Король не перемещался\n // 2. Ладьи не перемещались\n // 3. Рокеровке не мешают фигуры\n // 4. поля для рокеровки не атакованы\n if (\n JSChessEngine.checkPossibleCastling(\n state,\n figurePos,\n castlingMoves,\n reverse\n )\n ) {\n castlingMoves.forEach((castlingPos) => nextMoves.push(castlingPos));\n }\n\n if (\n JSChessEngine.checkPossibleCastling(\n state,\n figurePos,\n longCastlingMoves,\n reverse\n )\n ) {\n longCastlingMoves.forEach((castlingPos) => nextMoves.push(castlingPos));\n }\n\n return nextMoves;\n };\n\n static getNextMovesPawn = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean\n ) => {\n return JSChessEngine.calcPawnMoves(state, figurePos, reverse);\n };\n\n static getNextMovesBishop = (state: Cell[][], figurePos: CellPos) => {\n return JSChessEngine.calcDiagonalMoves(state, figurePos);\n };\n\n static getNextMovesKnight = (state: Cell[][], figurePos: CellPos) => {\n return JSChessEngine.calcKnightMoves(state, figurePos);\n };\n\n static getNextMovesRook = (state: Cell[][], figurePos: CellPos) => {\n return JSChessEngine.calcHorizontalAndVerticalMoves(state, figurePos);\n };\n\n static getNextMovesQueen = (state: Cell[][], figurePos: CellPos) => {\n const diagonalMoves = JSChessEngine.calcDiagonalMoves(state, figurePos);\n const verticalAndHorizontalMoves =\n JSChessEngine.calcHorizontalAndVerticalMoves(state, figurePos);\n const moves = [...diagonalMoves, ...verticalAndHorizontalMoves];\n\n return moves;\n };\n\n static getNextMovesKing = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean\n ) => {\n return JSChessEngine.calcKingMoves(state, figurePos, reverse);\n };\n\n /**\n * Возвращает линии по которым есть шах вражескому королю\n * @param state состояние доски\n * @param activeColor цвет фигур, которые сделали ход\n */\n static getLinesWithCheck = (\n state: Cell[][],\n activeColor: FigureColor,\n reverse = false\n ) => {\n const posTeammates = JSChessEngine.getAllTeammatesPositionsByColor(\n state,\n activeColor\n );\n\n const linesWithCheck: CellPos[][] = [];\n\n posTeammates.forEach((pos) => {\n const figureType = JSChessEngine.getFigureType(state, pos);\n\n switch (figureType) {\n case 'bishop':\n DIRECTIONS_D.forEach((direction) => {\n const attackedLineBishop = JSChessEngine.getFullAttackedLine(\n state,\n pos,\n direction\n );\n\n let hasAttackedEnemyKing = false;\n\n for (let i = 0; i < attackedLineBishop.length; i++) {\n const attackedPos = attackedLineBishop[i];\n\n // Проверяем атакованную позицию\n // Если клетка пустая, то продолжаем проверять\n // Необходимое условие чтобы перед королем не было атакованной фигуры\n if (\n JSChessEngine.hasFigure(state, attackedPos) &&\n !JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n break;\n }\n\n // Если доходим до короля, перываем цикл и отмечаем\n // что линия имеет атакованного короля - объявлен шах\n if (JSChessEngine.checkEnemyKing(state, pos, attackedPos)) {\n hasAttackedEnemyKing = true;\n break;\n }\n }\n\n // Если линия имеет атакованного короля, добавляем ее в линии с шахами\n if (hasAttackedEnemyKing) {\n linesWithCheck.push([...attackedLineBishop, pos]);\n }\n });\n\n break;\n\n case 'rook':\n DIRECTIONS_VH.forEach((direction) => {\n const attackedLineRook = JSChessEngine.getFullAttackedLine(\n state,\n pos,\n direction\n );\n\n let hasAttackedEnemyKing = false;\n\n for (let i = 0; i < attackedLineRook.length; i++) {\n const attackedPos = attackedLineRook[i];\n\n // Проверяем атакованную позицию\n // Если клетка пустая, то продолжаем проверять\n // Необходимое условие чтобы перед королем не было атакованной фигуры\n if (\n JSChessEngine.hasFigure(state, attackedPos) &&\n !JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n break;\n }\n\n // Если доходим до короля, перываем цикл и отмечаем\n // что линия имеет атакованного короля - объявлен шах\n if (JSChessEngine.checkEnemyKing(state, pos, attackedPos)) {\n hasAttackedEnemyKing = true;\n break;\n }\n }\n\n // Если линия имеет атакованного короля, добавляем ее в линии с шахами\n if (hasAttackedEnemyKing) {\n linesWithCheck.push([...attackedLineRook, pos]);\n }\n });\n\n break;\n\n case 'queen':\n [...DIRECTIONS_D, ...DIRECTIONS_VH].forEach((direction) => {\n const attackedLineQueen = JSChessEngine.getFullAttackedLine(\n state,\n pos,\n direction\n );\n\n let hasAttackedEnemyKing = false;\n\n for (let i = 0; i < attackedLineQueen.length; i++) {\n const attackedPos = attackedLineQueen[i];\n\n // Проверяем атакованную позицию\n // Если клетка пустая, то продолжаем проверять\n // Необходимое условие чтобы перед королем не было атакованной фигуры\n if (\n JSChessEngine.hasFigure(state, attackedPos) &&\n !JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n break;\n }\n\n // Если доходим до короля, перываем цикл и отмечаем\n // что линия имеет атакованного короля - объявлен шах\n if (JSChessEngine.checkEnemyKing(state, pos, attackedPos)) {\n hasAttackedEnemyKing = true;\n break;\n }\n }\n\n // Если линия имеет атакованного короля, добавляем ее в линии с шахами\n if (hasAttackedEnemyKing) {\n linesWithCheck.push([...attackedLineQueen, pos]);\n }\n });\n\n break;\n\n case 'pawn':\n const pawnAttackedPositions: CellPos[] = [];\n\n if (\n (reverse && activeColor === 'white') ||\n (!reverse && activeColor === 'black')\n ) {\n // Вниз-вправо\n pawnAttackedPositions.push([pos[0] + 1, pos[1] + 1]);\n\n // Вниз-влево\n pawnAttackedPositions.push([pos[0] - 1, pos[1] + 1]);\n }\n\n if (\n (reverse && activeColor === 'black') ||\n (!reverse && activeColor === 'white')\n ) {\n // Вверх-вправо\n pawnAttackedPositions.push([pos[0] + 1, pos[1] - 1]);\n\n // Вверх-влево\n pawnAttackedPositions.push([pos[0] - 1, pos[1] - 1]);\n }\n\n pawnAttackedPositions.forEach((attackedPos) => {\n if (\n // Позиция находится в пределах доски\n JSChessEngine.checkInBorderBoard(state, attackedPos) &&\n // И в клетке есть вражеский король\n JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n linesWithCheck.push([attackedPos, pos]);\n }\n });\n\n break;\n\n case 'knight':\n const knigtAttackedPositions: CellPos[] = [\n [pos[0] + 1, pos[1] - 2],\n [pos[0] - 1, pos[1] - 2],\n [pos[0] - 2, pos[1] + 1],\n [pos[0] - 2, pos[1] - 1],\n [pos[0] + 2, pos[1] + 1],\n [pos[0] + 2, pos[1] - 1],\n [pos[0] + 1, pos[1] + 2],\n [pos[0] - 1, pos[1] + 2],\n ];\n\n knigtAttackedPositions.forEach((attackedPos) => {\n if (\n // Позиция находится в пределах доски\n JSChessEngine.checkInBorderBoard(state, attackedPos) &&\n // И в клетке есть вражеский король\n JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n linesWithCheck.push([attackedPos, pos]);\n }\n });\n\n break;\n }\n });\n\n return linesWithCheck;\n };\n\n /**\n * Принимает данные о фигуре, которой сыграли\n * затем обновляет и возвращает новое состояние доски\n * !!! Какой-то старнный эффект если не использовать мап\n * !!! Как будто происходит мутация состояния\n * @param state состояние доски\n * @param currentFigure фигура, которой сыграли\n * @param targetPos позиция на которую перемещаем фигуру\n * @param prevPos начальная позиция фигуры\n * @param reverse перевернута ли доска\n */\n static changeState = (\n state: Cell[][],\n currentFigure: Figure,\n targetPos: CellPos,\n prevPos: CellPos,\n reverse: boolean\n ): { updatedCells: Cell[][], attackedPos?: CellPos } => {\n // Необходимо для записи атакованного поля\n // на данный момент нужно для того чтобы\n // записать какое было атаковано при переходе на битую позицию\n // чтобы корректно показать анимированный переход на битое поле\n let attackedPos: CellPos | undefined = undefined;\n\n // Для определения рокировки\n const diffHorizontal = targetPos[0] - prevPos[0];\n\n if (currentFigure.type === 'pawn') {\n // Если пешка дошла до конца доски\n // Превратить ее в выбранную фигуру\n // ферзь, ладья, слон, конь\n if (targetPos[1] === 0 || targetPos[1] === state.length - 1) {\n // console.log('TRNASFORM');\n }\n }\n\n if (currentFigure.type === 'king' && Math.abs(diffHorizontal) > 1) {\n // Была сделана рокеровка\n\n if (diffHorizontal > 0) {\n if (reverse) {\n // 0-0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 4) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 5) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 7) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n } else {\n // 0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 5) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 6) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 7) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n }\n }\n\n if (diffHorizontal < 0) {\n if (reverse) {\n // 0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 2) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 1) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 0) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n } else {\n // 0-0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 3) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 2) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 0) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n }\n }\n }\n\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (targetPos[0] === i && targetPos[1] === j) {\n return {\n figure: {\n ...currentFigure,\n touched: true,\n },\n };\n }\n\n if (prevPos[0] === i && prevPos[1] === j) {\n return {\n figure: undefined,\n };\n }\n\n // Если сходили пешкой на битое поле,\n // то забираем пешку противника,\n // которая оставила битое поле\n if (\n currentFigure.type === 'pawn' &&\n JSChessEngine.checkBeatedCell(state, targetPos) &&\n j === prevPos[1] &&\n i === targetPos[0] //these\n ) {\n attackedPos = [i, j];\n return { figure: undefined, beated: false };\n }\n\n // Если пешка сходила на две клетки вперед\n // то помечаем поле как битое\n if (currentFigure.type === 'pawn') {\n const diff = targetPos[1] - prevPos[1];\n\n if (Math.abs(diff) === 2) {\n if (\n (diff > 0 && j === targetPos[1] - 1 && targetPos[0] === i) ||\n (diff < 0 && j === targetPos[1] + 1 && targetPos[0] === i)\n ) {\n return { figure: undefined, beated: true };\n }\n }\n }\n\n return { ...cell, beated: cell.beated ? false : cell.beated };\n })\n );\n\n return { updatedCells, attackedPos };\n };\n\n /**\n * Обновляет состояние с превращение пешки в фигуру\n * @param state состояние доски\n * @param fromPos с какой клетки сделан ход\n * @param targetPos на какую клетку сделали ход\n * @param transformFigure в какую фигуру превратить пешку\n */\n static transformPawnToFigure = (\n state: Cell[][],\n fromPos: CellPos,\n targetPos: CellPos,\n transformFigure: Figure\n ): Cell[][] => {\n const preparedState = [...state];\n\n return preparedState.map((row, j) =>\n row.map((cell, i) => {\n if (i === fromPos[0] && j === fromPos[1]) {\n return {\n beated: false,\n figure: undefined,\n };\n }\n\n if (i === targetPos[0] && j === targetPos[1]) {\n return {\n beated: false,\n figure: transformFigure,\n };\n }\n\n return { ...cell };\n })\n );\n };\n\n /**\n * Возвращает плоский массив полей с фигурами\n * @param state состояние доски\n */\n static getFieldsWithFigures = (state: Cell[][]) => {\n const fieldsWithFigures: Cell[] = [];\n\n state.forEach((row) =>\n row.forEach((cell) => {\n if (!!cell.figure) {\n fieldsWithFigures.push(cell);\n }\n })\n );\n\n return fieldsWithFigures;\n };\n\n /**\n * Возвращает результат игры\n * mat - Мат\n * pat - Пат\n * undefined - игра продолжается\n * @param state состояние доски\n * @param linesWithCheck линии по которым есть шахом\n * @param activeColor активный цвет\n */\n static getGameResult = (\n state: Cell[][],\n linesWithCheck: CellPos[][],\n activeColor: FigureColor,\n reverse: boolean\n ): GameResult | undefined => {\n const posTeammates = JSChessEngine.getAllTeammatesPositionsByColor(\n state,\n activeColor\n );\n\n // Проверка на ничью\n // если на поле остались только короли\n // или одна из фигур любого цвеат - конь, слон\n // то это автоматическая ничья\n const cellsWithFigures = JSChessEngine.getFieldsWithFigures(state);\n\n // Значит остались только короли на доске\n if (cellsWithFigures.length === 2) return { resultType: 'draw' };\n\n // На доске осталось три фигуры\n // два короля и еще одна, если эта\n // фигура конь или слон - ничья\n if (cellsWithFigures.length === 3) {\n // Фигура для ничьей - конь или слон\n const figureForCommon = cellsWithFigures.find(\n (cell) =>\n cell.figure?.type === 'knight' || cell.figure?.type === 'bishop'\n );\n\n if (!!figureForCommon) return { resultType: 'draw' };\n }\n\n // Массив с количеством ходов каждой фигуры\n // Если все элементы массива - 0 и есть атака на короля, то это мат\n // Если атаки на короля нет, но все элементы массива - 0, это пат\n // если есть ходы, то игра продолжается\n const countsNextMoves: number[] = [];\n\n posTeammates.forEach((pos) => {\n const nextMoves = JSChessEngine.getNextMoves(\n state,\n pos,\n linesWithCheck,\n reverse\n );\n countsNextMoves.push(nextMoves.length);\n });\n\n // Суммируем все значения\n const countsSumResult = countsNextMoves.reduce(\n (prevValue, curentValue) => prevValue + curentValue\n );\n\n // Мат\n if (linesWithCheck.length > 0 && countsSumResult === 0)\n return {\n resultType: 'mat',\n winColor: activeColor === 'white' ? 'black' : 'white',\n };\n\n // Пат\n if (linesWithCheck.length === 0 && countsSumResult === 0)\n return { resultType: 'pat' };\n\n return undefined;\n };\n\n /**\n * Возвращает количество фигур указанного типа\n * @param flatState Обработанное состояние - одномерный массив клеток с фигурами одного цвета\n * @param figureType тип фигуры\n */\n static getFiguresCountByType = (\n flatState: Cell[],\n figureType: FigureType\n ) => {\n const filtred = flatState.filter(\n ({ figure }) => figure?.type === figureType\n );\n const count = filtred.length;\n\n return count;\n };\n\n /**\n * Возвращает информацию о количестве съеденных фигур одного цвета\n * @param state состояние доски\n * @param color цвет съеденных фигур\n */\n static getBeatedFigures = (\n state: Cell[][],\n color: FigureColor,\n countsConfig: typeof FIGURES_COUNTS = FIGURES_COUNTS\n ) => {\n let cellsWithFigures: Cell[] = [];\n\n state.forEach((row) => {\n const filtredCells = row.filter(\n (cell) => !!cell.figure && cell.figure.color === color\n );\n\n if (filtredCells.length > 0) {\n cellsWithFigures = [...cellsWithFigures, ...filtredCells];\n }\n });\n\n // информация о съеденных фигурах\n const beatedCountsData: BeatedCountsData = {\n pawn:\n countsConfig.PAWNS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'pawn'),\n knight:\n countsConfig.KNIGHTS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'knight'),\n bishop:\n countsConfig.BISHOPS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'bishop'),\n rook:\n countsConfig.ROOKS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'rook'),\n queen:\n countsConfig.QUEENS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'queen'),\n };\n\n return beatedCountsData;\n };\n\n /**\n * По последним шести позициям - трем ходам\n * определяет было ли повторение позиций\n * если да, то это ничья,\n * Определить троекратное повторение\n * можно по последним 8ми ходам\n * поэтому нужно брать на сравнение массив\n * length - 8\n * @param fenMoves история ходов в формате FEN\n */\n static detectDrawByRepeatMoves(fenMoves: string[]) {\n if (fenMoves.length < 8) return false;\n\n const lastMoves = fenMoves.slice(fenMoves.length - 8);\n\n // Для понимания было троекратное повторение или нет, нужно\n // первые четыре хода и последние четыре хода из выборки\n // объединить в строку и сравнить полученные строки\n const firstFromSelectedMoves = lastMoves.slice(0, 4);\n const lastFromSelectedMoves = lastMoves.slice(4);\n\n const firstResultsFENs = firstFromSelectedMoves.join('');\n const lastResultsFENs = lastFromSelectedMoves.join('');\n\n return firstResultsFENs === lastResultsFENs;\n }\n\n /**\n * Проверяет является ли ход рокеровкой\n * @param move данные хода\n */\n static getCastlingType(move: MoveData): CastlingType | undefined {\n if (move.figure.touched || move.figure.type !== 'king') return undefined;\n\n // Разница в ходе по горизонтали\n const horizontalDiff = move.to[0] - move.from[0];\n\n // Король просто сходил => рокировки не было\n if (horizontalDiff === 0 || Math.abs(horizontalDiff) === 1)\n return undefined;\n\n // Рокировались вправо\n if (horizontalDiff > 0) return '0-0';\n\n return '0-0-0';\n }\n}\n","/* eslint-disable */\nimport { Cell, Figure } from './JSChessEngine';\n\nexport const LETTERS = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];\n\nexport const FIGURES_LATTERS_NOTATIONS = {\n white: {\n pawn: 'P',\n knight: 'N',\n bishop: 'B',\n rook: 'R',\n queen: 'Q',\n king: 'K',\n },\n\n black: {\n pawn: 'p',\n knight: 'n',\n bishop: 'b',\n rook: 'r',\n queen: 'q',\n king: 'k',\n },\n};\n\nexport const LETTER_TO_FIGURE_MAP: { [key: string]: Figure } = {\n P: { type: 'pawn', color: 'white' },\n N: { type: 'knight', color: 'white' },\n B: { type: 'bishop', color: 'white' },\n R: { type: 'rook', color: 'white' },\n Q: { type: 'queen', color: 'white' },\n K: { type: 'king', color: 'white' },\n\n p: { type: 'pawn', color: 'black' },\n n: { type: 'knight', color: 'black' },\n b: { type: 'bishop', color: 'black' },\n r: { type: 'rook', color: 'black' },\n q: { type: 'queen', color: 'black' },\n k: { type: 'king', color: 'black' },\n};\n\nexport const ALL_FIGURES: Figure[] = [\n { type: 'pawn', color: 'white' },\n { type: 'knight', color: 'white' },\n { type: 'bishop', color: 'white' },\n { type: 'rook', color: 'white' },\n { type: 'queen', color: 'white' },\n { type: 'king', color: 'white' },\n\n { type: 'pawn', color: 'black' },\n { type: 'knight', color: 'black' },\n { type: 'bishop', color: 'black' },\n { type: 'rook', color: 'black' },\n { type: 'queen', color: 'black' },\n { type: 'king', color: 'black' },\n];\n\nexport const CHESS_BOARD_CONFIG = {\n cellWhiteBg: '#FFFFFF',\n cellBlackBg: '#E2E4ED',\n cellSelectedBg: '#728bc1',\n\n cellSize: 80,\n\n figures: {\n white: {\n pawn: '',\n bishop: '',\n knight: '',\n rook: '',\n queen: '',\n king: '',\n },\n\n black: {\n pawn: '',\n bishop: '',\n knight: '',\n rook: '',\n queen: '',\n king: '',\n },\n },\n};\n\nexport const INITIAL_CELLS: Cell[][] = [\n [\n { figure: { type: 'rook', color: 'black', touched: false } },\n { figure: { type: 'knight', color: 'black', touched: false } },\n { figure: { type: 'bishop', color: 'black', touched: false } },\n { figure: { type: 'queen', color: 'black', touched: false } },\n { figure: { type: 'king', color: 'black', touched: false } },\n { figure: { type: 'bishop', color: 'black', touched: false } },\n { figure: { type: 'knight', color: 'black', touched: false } },\n { figure: { type: 'rook', color: 'black', touched: false } },\n ],\n [\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n ],\n [\n { figure: { type: 'rook', color: 'white', touched: false } },\n { figure: { type: 'knight', color: 'white', touched: false } },\n { figure: { type: 'bishop', color: 'white', touched: false } },\n { figure: { type: 'queen', color: 'white', touched: false } },\n { figure: { type: 'king', color: 'white', touched: false } },\n { figure: { type: 'bishop', color: 'white', touched: false } },\n { figure: { type: 'knight', color: 'white', touched: false } },\n { figure: { type: 'rook', color: 'white', touched: false } },\n ],\n];","/* eslint-disable */\nimport {\n LETTER_TO_FIGURE_MAP,\n FIGURES_LATTERS_NOTATIONS,\n LETTERS,\n} from './chess.consts';\nimport { FigureColor, Cell, JSChessEngine, } from './JSChessEngine';\n\n/**\n * Вовзвращет позицию клетки по состоянию fen\n * @param positionFEN позиция из FEN вида e4\n * @returns координаты для определения клетки на доске\n */\nexport const getPositionByFEN = (positionFEN: string) => {\n return [\n 8 - parseInt(positionFEN[1]) + 1, // +1 Поправка на то что значение взятто из индекса в массиве\n LETTERS.findIndex((letter) => letter === positionFEN[0]),\n ];\n};\n\n/**\n * Проверяет по части FEN возможность рокировки\n * и обновляет состояние доски для рокировки\n * @param castlingNotation часть FEN-нотации описывающая рокировку\n * @param state состояние доски\n * @returns обновленное состояние доски\n */\nexport const prepareCastlingByFEN = (\n castlingNotation: string,\n state: Cell[][]\n): Cell[][] => {\n if (castlingNotation === '-') return state;\n\n const preparedState = [...state];\n\n if (castlingNotation.includes('K')) {\n if (!!preparedState[preparedState.length - 1][preparedState.length - 1].figure) {\n // Ладья\n preparedState[preparedState.length - 1][preparedState.length - 1].figure = {\n ...preparedState[preparedState.length - 1][preparedState.length - 1]\n .figure!,\n touched: false,\n };\n \n // Король\n preparedState[preparedState.length - 1][4].figure = {\n ...preparedState[preparedState.length - 1][4].figure!,\n touched: false,\n };\n }\n }\n\n if (castlingNotation.includes('Q')) {\n if (!!preparedState[preparedState.length - 1][0].figure) {\n // Ладья\n preparedState[preparedState.length - 1][0].figure = {\n ...preparedState[preparedState.length - 1][0].figure!,\n touched: false,\n };\n \n // Король\n preparedState[preparedState.length - 1][4].figure = {\n ...preparedState[preparedState.length - 1][4].figure!,\n touched: false,\n };\n }\n }\n\n if (castlingNotation.includes('k')) {\n if (!!preparedState[0][preparedState.length - 1].figure) {\n // Ладья\n preparedState[0][preparedState.length - 1].figure = {\n ...preparedState[0][preparedState.length - 1].figure!,\n touched: false,\n };\n \n // Король\n preparedState[0][4].figure = {\n ...preparedState[0][4].figure!,\n touched: false,\n };\n }\n }\n\n if (castlingNotation.includes('q')) {\n if (!!preparedState[0][0].figure) {\n // Ладья\n preparedState[0][0].figure = {\n ...preparedState[0][preparedState.length - 1].figure!,\n touched: false,\n };\n \n // Король\n preparedState[0][4].figure = {\n ...preparedState[0][4].figure!,\n touched: false,\n };\n }\n }\n\n return preparedState;\n};\n\n/**\n * Конвертирует часть FEN-нотации с фигурами в состояние доски\n * @param state состояние доски\n */\nexport const partFENtoState = (notation: string) => {\n const restoredState: Cell[][] = [];\n\n const stateRows = notation.split('/');\n\n stateRows.forEach((stateRow) => {\n const rowCells: Cell[] = [];\n\n for (let i = 0; i < stateRow.length; i++) {\n const cellNotation = stateRow[i];\n\n if (cellNotation === '.') {\n rowCells.push({ figure: undefined });\n } else {\n const figure = LETTER_TO_FIGURE_MAP[cellNotation];\n rowCells.push({ figure: { ...figure, touched: true } });\n }\n }\n\n restoredState.push(rowCells);\n });\n\n // TODO костыль, откуда-то берется пустой массив в конце, убрать его\n return restoredState.filter((row) => row.length > 0);\n};\n\n/**\n * Создает состояние доски\n * по FEN-нотации\n * rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1\n * @param notation Описание текущего состояния от Stockfish https://hxim.github.io/Stockfish-Evaluation-Guide/\n */\nexport const FENtoGameState = (\n FEN: string,\n reversed?: boolean,\n): { boardState: Cell[][]; currentColor: FigureColor } => {\n const gameState: { boardState: Cell[][]; currentColor: FigureColor } = {\n boardState: [],\n currentColor: 'white',\n };\n\n const [stateNotaion, currentColor, FENcastling, beatedField, ..._] =\n FEN.split(' ');\n\n // Сначала подготавливаем stateNotaion, чтобы вместо цифр были \".\" - пустые поля\n let preparedStateNotation = '';\n for (let i = 0; i < stateNotaion.length; i++) {\n // Если символ число, то заполняем готовую нотацию\n // точками в таком количестве какое число в нотации\n if (!isNaN(parseInt(stateNotaion[i]))) {\n const dotsCount = parseInt(stateNotaion[i]);\n for (let dotI = 0; dotI < dotsCount; dotI++) preparedStateNotation += '.';\n continue;\n }\n\n preparedStateNotation += stateNotaion[i];\n }\n\n // Преобразуем часть с фигурами в состояние доски\n gameState.boardState = partFENtoState(preparedStateNotation);\n\n // Определили текущий цвет\n gameState.currentColor = currentColor === 'w' ? 'white' : 'black';\n\n // Определение возможностей рокировки\n gameState.boardState = prepareCastlingByFEN(\n FENcastling,\n gameState.boardState\n );\n\n // Определение битое поля\n if (beatedField !== '-') {\n const posBeatedCell = getPositionByFEN(beatedField);\n gameState.boardState[posBeatedCell[0]][posBeatedCell[1]] = {\n ...gameState.boardState[posBeatedCell[0]][posBeatedCell[1]],\n beated: true,\n };\n }\n\n if (reversed)\n return { \n boardState: JSChessEngine.reverseChessBoard(gameState.boardState),\n currentColor: gameState.currentColor,\n };\n\n return gameState;\n};\n\n/**\n * Возвращает FEN битое поле из состояние доски\n * @param state состояние доски\n */\nexport const getBeatedCellFENfromState = (state: Cell[][]) => {\n let beatedFieldFEN = '-';\n\n for (let j = 0; j < state.length; j++) {\n for (let i = 0; i < state[j].length; i++) {\n if (state[j][i].beated) {\n beatedFieldFEN = LETTERS[i] + (state.length - j).toString();\n break;\n }\n }\n }\n\n return beatedFieldFEN;\n};\n\n/**\n * Возвращает FEN положение фигур на доске\n * @param state состояние доски\n */\nexport const getFENpositionsFromState = (state: Cell[][]) => {\n let positionsFEN = '';\n let emptyCellsCount = 0;\n\n state.forEach((row, j) => {\n row.forEach((cell, i) => {\n if (cell.figure) {\n if (emptyCellsCount > 0) {\n positionsFEN += emptyCellsCount.toString();\n emptyCellsCount = 0;\n }\n positionsFEN +=\n FIGURES_LATTERS_NOTATIONS[cell.figure.color][cell.figure.type];\n } else {\n emptyCellsCount += 1;\n }\n });\n\n if (emptyCellsCount > 0) {\n positionsFEN += emptyCellsCount.toString();\n emptyCellsCount = 0;\n }\n\n if (j !== state.length - 1) {\n positionsFEN += '/';\n }\n });\n\n return positionsFEN;\n};\n\n/**\n * Возвращает FEN-рокеровку из состояния доски\n * @param state состояние доски\n */\nexport const getFENcastlingFromState = (state: Cell[][]) => {\n let whiteCastlingFEN = '';\n let blackCastlingFEN = '';\n\n const stateLastCell = state.length - 1;\n\n state.forEach((row, j) =>\n row.forEach((cell, i) => {\n if (j === 0 && i === 0) {\n // Черная ладья ферзевый фланг | длинная рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched\n ) {\n blackCastlingFEN = 'q';\n }\n }\n\n if (j === 0 && i === 4) {\n // Черный король\n if (\n !cell.figure ||\n cell.figure.type !== 'king' ||\n cell.figure.touched\n ) {\n blackCastlingFEN = '-';\n }\n }\n\n if (j === 0 && i === stateLastCell) {\n // Черная ладья королевский фланг | короткая рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched &&\n blackCastlingFEN !== '-'\n ) {\n blackCastlingFEN = 'k' + blackCastlingFEN;\n }\n }\n\n if (j === stateLastCell && i === 0) {\n // Белая ладья ферзевый фланг | длинная рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched\n ) {\n whiteCastlingFEN = 'Q';\n }\n }\n\n if (j === stateLastCell && i === 4) {\n // Белый король\n if (\n !cell.figure ||\n cell.figure.type !== 'king' ||\n cell.figure.touched\n ) {\n whiteCastlingFEN = '-';\n }\n }\n\n if (j === stateLastCell && i === stateLastCell) {\n // Белая ладья королевский фланг | короткая рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched &&\n blackCastlingFEN !== '-'\n ) {\n whiteCastlingFEN = 'K' + whiteCastlingFEN;\n }\n }\n })\n );\n\n if (whiteCastlingFEN === '-' && blackCastlingFEN === '-') return '-';\n\n return (whiteCastlingFEN + blackCastlingFEN).replace('-', '');\n};\n\n/**\n * Преобразует состояние доски в FEN\n * @param state\n * @param countMoves\n */\nexport const stateToFEN = (\n state: Cell[][],\n currentColor: FigureColor,\n countMoves: number = 1\n) => {\n const casttlingFEN = getFENcastlingFromState(state);\n const positionsFEN = getFENpositionsFromState(state);\n const colorFEN = currentColor === 'white' ? 'w' : 'b';\n const beatedFieldFEN = getBeatedCellFENfromState(state);\n const blackMoves = countMoves === 0 ? 0 : countMoves - 1;\n\n // Пример: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1\n return `${positionsFEN} ${colorFEN} ${casttlingFEN} ${beatedFieldFEN} ${blackMoves} ${countMoves}`;\n};\n","import React from \"react\";\nimport { ChessPiecesMap } from \"./models\";\n\nexport const CHESS_PIECES_MAP: ChessPiecesMap = {\n 'pawn-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M37.3492 12.5238C37.3492 15.286 36.1576 17.7735 34.2541 19.5131L39.1587 22.9297V29.1905H34.3573C34.5888 32.0925 36.4757 34.9969 38.9172 37.5303C41.5083 40.2188 44.6258 42.3871 46.6961 43.5546L47 43.726V53H9V43.726L9.30392 43.5546C11.3742 42.3871 14.4917 40.2188 17.0828 37.5303C19.5243 34.9969 21.4112 32.0925 21.6427 29.1905H16.8413V22.9297L21.4091 19.7477C19.351 18.0011 18.0476 15.4127 18.0476 12.5238C18.0476 7.26396 22.3684 3 27.6984 3C33.0284 3 37.3492 7.26396 37.3492 12.5238Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M31.8338 19.6768C31.7847 18.906 32.0841 18.155 32.6449 17.6425C34.0658 16.344 34.9237 14.522 34.9237 12.5238C34.9237 8.74601 31.7893 5.5 27.6984 5.5C23.6075 5.5 20.4732 8.74601 20.4732 12.5238C20.4732 14.6125 21.4113 16.5112 22.9509 17.8177C23.5415 18.319 23.8681 19.0781 23.8319 19.8658C23.7958 20.6535 23.4012 21.3775 22.7673 21.819L19.2668 24.2575V26.6905H21.6427C22.3206 26.6905 22.9675 26.9828 23.4267 27.4967C23.886 28.0106 24.1157 28.6991 24.0601 29.3954C23.757 33.1938 21.3675 36.6318 18.8036 39.2921C16.3921 41.7943 13.5841 43.8574 11.4255 45.1831V50.5H44.5745V45.1831C42.4159 43.8574 39.6079 41.7943 37.1964 39.2921C34.6325 36.6318 32.243 33.1938 31.9399 29.3954C31.8843 28.6991 32.114 28.0106 32.5733 27.4967C33.0325 26.9828 33.6794 26.6905 34.3573 26.6905H36.7332V24.2575L32.8959 21.5844C32.2749 21.1519 31.8828 20.4477 31.8338 19.6768ZM39.1587 22.9297V29.1905H34.3573C34.424 30.0266 34.6281 30.8629 34.9433 31.6905C35.7221 33.7353 37.1791 35.7268 38.9172 37.5303C41.5083 40.2188 44.6258 42.3871 46.6961 43.5546L47 43.726V53H9V43.726L9.30392 43.5546C11.3742 42.3871 14.4917 40.2188 17.0828 37.5303C18.8209 35.7268 20.2779 33.7353 21.0567 31.6905C21.3719 30.8629 21.576 30.0266 21.6427 29.1905H16.8413V22.9297L21.4091 19.7477C20.7719 19.207 20.207 18.5855 19.7308 17.8994C18.6689 16.3695 18.0476 14.5183 18.0476 12.5238C18.0476 7.26396 22.3684 3 27.6984 3C33.0284 3 37.3492 7.26396 37.3492 12.5238C37.3492 14.3952 36.8023 16.1405 35.8575 17.6126C35.4078 18.3133 34.868 18.9521 34.2541 19.5131L39.1587 22.9297Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'knight-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M32.9167 12.8482L25.1852 4.08704C24.066 6.15131 22.981 9.79459 24.5409 12.4247C23.7838 12.4902 23.0602 12.6146 22.5005 12.8328C18.9299 14.225 15.012 17.8218 13.0863 25.3052C12.5287 27.4722 11.5252 28.5098 10.3324 29.7432C9.2073 30.9065 7.91384 32.244 6.66755 34.8675C4.10004 40.2722 11.0292 45.6769 16.0818 40.768C18.9224 38.0082 21.4054 36.8689 23.49 35.9123C26.4905 34.5356 28.6657 33.5374 29.8944 28.6312C30.479 30.9197 30.2452 36.3207 24.6331 39.6161C19.0211 42.9116 17.8519 49.8534 17.9688 51.9131H49.8874C49.8874 32.359 47.2227 15.4643 32.9167 12.8482Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.0604 3.00684C25.4257 2.96664 25.7878 3.10529 26.0279 3.37731L33.5087 11.8544C40.9503 13.3628 45.3275 18.5751 47.8193 25.6764C50.3374 32.853 51 42.1196 51 51.913C51 52.5133 50.5018 53 49.8871 53H17.9686C17.3779 53 16.8901 52.5493 16.8574 51.9732C16.7889 50.7648 17.0879 48.3569 18.1183 45.8263C19.1555 43.279 20.9809 40.4923 24.0595 38.6845C26.1617 37.4501 27.4243 35.8968 28.1465 34.3608C28.1439 34.3633 28.1412 34.3659 28.1385 34.3685C26.9293 35.5354 25.4847 36.198 24.0415 36.86L23.963 36.896C21.9061 37.8398 19.5666 38.9151 16.8664 41.5386C13.9475 44.3745 10.348 44.2838 7.87371 42.5723C5.44537 40.8925 4.12188 37.6432 5.65784 34.4099C6.98024 31.6262 8.37192 30.1871 9.5232 28.9967C10.6946 27.7855 11.5232 26.9197 12.0068 25.0402C14.0037 17.28 18.1294 13.3666 22.0877 11.8232C22.3618 11.7164 22.6569 11.6305 22.9621 11.5613C22.5948 10.3424 22.5869 9.0646 22.7562 7.89187C22.9933 6.24878 23.5924 4.7017 24.2015 3.5783C24.3735 3.26093 24.695 3.04705 25.0604 3.00684ZM25.4952 6.10342C25.259 6.75438 25.0651 7.46829 24.9601 8.19533C24.764 9.5541 24.8927 10.8497 25.5037 11.8797C25.6943 12.2012 25.7037 12.5955 25.5285 12.9253C25.3533 13.255 25.0178 13.4745 24.6389 13.5073C23.9231 13.5692 23.3246 13.6817 22.9129 13.8422C19.7299 15.0832 16.0198 18.3634 14.1654 25.5701C13.537 28.0123 12.367 29.2221 11.1592 30.4709L11.1412 30.4895C10.0423 31.6257 8.84692 32.8618 7.67682 35.3249C6.64528 37.4963 7.50259 39.6517 9.16009 40.7983C10.7717 41.913 13.163 42.0703 15.2967 39.9973C18.2743 37.1045 20.898 35.9006 23.0092 34.9318L23.0166 34.9284C24.5479 34.2258 25.6605 33.7038 26.5743 32.822C27.4586 31.9686 28.2317 30.6948 28.8132 28.3729C28.9348 27.8873 29.3798 27.5454 29.8916 27.5442C30.4035 27.5431 30.8501 27.883 30.974 28.368C31.6414 30.9807 31.3516 36.9391 25.2063 40.5476C22.6729 42.0353 21.1077 44.3672 20.1865 46.6297C19.5273 48.2485 19.2218 49.7734 19.1174 50.8261H48.7714C48.722 41.4882 48.0155 32.9409 45.7138 26.3812C43.3397 19.6151 39.3401 15.1286 32.7117 13.9165C32.4634 13.8711 32.2384 13.7446 32.0735 13.5578L25.4952 6.10342Z\" fill=\"#3E3F4F\" />\n <path d=\"M23.9202 21.4782C23.9202 22.6789 22.9237 23.6521 21.6945 23.6521C20.4652 23.6521 19.4688 22.6789 19.4688 21.4782C19.4688 20.2776 20.4652 19.3043 21.6945 19.3043C22.9237 19.3043 23.9202 20.2776 23.9202 21.4782Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'bishop-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M29.8545 30.4038H26.0727C26.0727 23.7267 28.1789 17.0608 32.8385 12.1815C33.5687 11.2259 34 10.046 34 8.76923C34 5.58296 31.3137 3 28 3C24.6863 3 22 5.58296 22 8.76923C22 10.3412 22.6539 11.7664 23.7144 12.807C19.9664 15.3761 13 22.2626 13 30.8846C13 39.5857 20.0948 43.1084 23.8167 43.8315L10 46.1818V53L46 53V46.1818L31.8556 43.7965C35.6197 42.9999 42.5 39.4532 42.5 30.8846C42.5 25.2741 39.7818 20.2727 36.4727 16.6364C32.8385 19.3636 29.8545 25.7273 29.8545 30.4038Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M28 5.27273C25.4418 5.27273 23.4694 7.28575 23.4694 9.64336C23.4694 10.8145 23.9467 11.8863 24.7431 12.6809C24.9818 12.919 25.1036 13.2554 25.0746 13.5966C25.0457 13.9377 24.8691 14.2472 24.594 14.439C22.9307 15.5983 20.5141 17.7636 18.5232 20.6218C16.5325 23.4797 15.0204 26.9522 15.0204 30.7535C15.0204 34.5515 16.5284 37.1728 18.4256 38.9466C20.3531 40.7487 22.6967 41.683 24.2802 41.9959C24.8042 42.0994 25.181 42.575 25.1748 43.1251C25.1687 43.6751 24.7813 44.1416 24.2552 44.2326L12.2041 46.317V50.7273L43.7959 50.7273V46.3184L31.4388 44.1995C30.9156 44.1098 30.5286 43.6485 30.5178 43.1018C30.5069 42.555 30.8753 42.0778 31.3944 41.9661C34.7008 41.2546 40.5102 38.1436 40.5102 30.7535C40.5102 26.1643 38.4904 21.9735 35.8369 18.7327C34.6056 19.9172 33.4539 21.6155 32.5602 23.5208C31.4833 25.8165 30.843 28.2803 30.843 30.2946C30.843 30.9222 30.3496 31.4309 29.741 31.4309H26.1907C25.5821 31.4309 25.0887 30.9222 25.0887 30.2946C25.0887 23.7121 27.1242 17.0654 31.7054 12.1582C32.2285 11.4429 32.5306 10.5762 32.5306 9.64336C32.5306 7.28575 30.5582 5.27273 28 5.27273ZM21.2653 9.64336C21.2653 5.91808 24.3365 3 28 3C31.6635 3 34.7347 5.91808 34.7347 9.64336C34.7347 11.1277 34.2402 12.4962 33.4134 13.5965C33.3886 13.6295 33.3621 13.6611 33.3339 13.6911C29.4537 17.8225 27.5365 23.4098 27.3146 29.1582H28.6902C28.8791 27.0011 29.5778 24.6592 30.576 22.5311C31.751 20.0265 33.4032 17.6856 35.2985 16.2394C35.7507 15.8944 36.3823 15.9559 36.7639 16.3822C39.9902 19.9872 42.7143 25.0235 42.7143 30.7535C42.7143 37.0527 39.2071 40.7331 35.8163 42.6462L45.0787 44.2344C45.6103 44.3255 46 44.7997 46 45.3554V51.8636C46 52.165 45.8839 52.4541 45.6772 52.6672C45.4705 52.8803 45.1902 53 44.898 53L11.102 53C10.4934 53 10 52.4912 10 51.8636V45.3554C10 44.8003 10.3889 44.3265 10.9197 44.2347L19.799 42.6989C18.8291 42.1599 17.8509 41.4771 16.9451 40.6303C14.6386 38.4738 12.8163 35.2611 12.8163 30.7535C12.8163 26.3247 14.5742 22.3954 16.7331 19.296C18.5307 16.7151 20.6432 14.6555 22.3709 13.2919C21.675 12.2488 21.2653 10.9955 21.2653 9.64336Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'rook-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 5H18.7436V10.434H22.641V5H33.359V10.434H37.2564V5H47V13.1509L39.2051 18.5849L41.1538 36H14.8462L16.7949 18.5849L9 13.1509V5Z\" fill=\"white\" />\n <path d=\"M14.8462 39H41.1538L47 45.7547V53H9V45.7547L14.8462 39Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.7436 12.834C17.404 12.834 16.3181 11.7594 16.3181 10.434V7.4H11.4255V11.906L18.1919 16.6229C18.9198 17.1304 19.3082 17.9918 19.2036 18.8668L17.5 33.5H38.5L36.7964 18.8668C36.6918 17.9918 37.0802 17.1304 37.8081 16.6229L44.5745 11.906V7.4H39.6819V10.434C39.6819 11.7594 38.596 12.834 37.2564 12.834H33.359C32.0194 12.834 30.9334 11.7594 30.9334 10.434V7.4H25.0666V10.434C25.0666 11.7594 23.9806 12.834 22.641 12.834H18.7436ZM22.641 5H33.359V10.434H37.2564V5H47V13.1509L39.2051 18.5849L41.1538 36H14.8462L16.7949 18.5849L9 13.1509V5H18.7436V10.434H22.641V5ZM16 41.5L11.4255 46.5953V50.6H44.5745V46.5953L40 41.5H16ZM41.1538 39H14.8462L9 45.7547V53H47V45.7547L41.1538 39Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'queen-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.9569 11.4809C23.5293 10.8482 24.6452 9.25337 24.6452 7.38596C24.6452 4.96366 22.7676 3 20.4516 3C18.1356 3 16.2581 4.96366 16.2581 7.38596C16.2581 9.62443 17.8614 11.4712 19.9325 11.7387L18.0624 27.5614L9.04701 19.372C9.87134 18.5711 10.3871 17.4275 10.3871 16.1579C10.3871 13.7356 8.50958 11.7719 6.19355 11.7719C3.87752 11.7719 2 13.7356 2 16.1579C2 18.5802 3.87752 20.5439 6.19355 20.5439C6.60125 20.5439 6.99537 20.483 7.36805 20.3695L12.0645 37.2105L16.9212 45.5224L12.0645 46.421V53L44 53V46.421L39.081 45.5187L43.9355 37.2105L48.632 20.3695C49.0046 20.483 49.3987 20.5439 49.8064 20.5439C52.1225 20.5439 54 18.5802 54 16.1579C54 13.7356 52.1225 11.7719 49.8064 11.7719C47.4904 11.7719 45.6129 13.7356 45.6129 16.1579C45.6129 17.4275 46.1287 18.5711 46.953 19.372L37.9376 27.5614L36.0675 11.7387C38.1386 11.4712 39.7419 9.62443 39.7419 7.38596C39.7419 4.96366 37.8644 3 35.5484 3C33.2324 3 31.3548 4.96366 31.3548 7.38596C31.3548 9.25337 32.4707 10.8482 34.0431 11.4809L28 25.807L21.9569 11.4809Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.6997 9.60433C20.8359 9.50943 20.9831 9.42951 21.139 9.36676C21.8633 9.07534 22.4166 8.31673 22.4166 7.38596C22.4166 6.16443 21.4841 5.27273 20.4516 5.27273C19.4191 5.27273 18.4866 6.16443 18.4866 7.38596C18.4866 8.50989 19.2842 9.36408 20.2124 9.48393C20.3823 9.50587 20.5454 9.54678 20.6997 9.60433ZM19.9325 11.7387C19.8677 11.7303 19.8034 11.7204 19.7396 11.709C17.7627 11.3553 16.2581 9.55443 16.2581 7.38596C16.2581 4.96366 18.1356 3 20.4516 3C22.7676 3 24.6452 4.96366 24.6452 7.38596C24.6452 9.16107 23.6369 10.6899 22.1867 11.3801C22.1702 11.3879 22.1538 11.3956 22.1372 11.4032C22.0778 11.4305 22.0177 11.4564 21.9569 11.4809L28 25.807L34.0431 11.4809C33.9823 11.4564 33.9222 11.4305 33.8628 11.4032C33.8462 11.3956 33.8298 11.3879 33.8134 11.3801C32.3631 10.6899 31.3548 9.16108 31.3548 7.38596C31.3548 4.96366 33.2324 3 35.5484 3C37.8644 3 39.7419 4.96366 39.7419 7.38596C39.7419 9.55443 38.2373 11.3553 36.2604 11.709C36.1966 11.7204 36.1323 11.7303 36.0675 11.7387L37.9376 27.5614L46.953 19.372C46.8819 19.3029 46.8132 19.2313 46.7468 19.1573C46.6555 19.0555 46.5688 18.9491 46.487 18.8384C45.939 18.0972 45.6129 17.1674 45.6129 16.1579C45.6129 13.7356 47.4904 11.7719 49.8064 11.7719C52.1225 11.7719 54 13.7356 54 16.1579C54 18.5802 52.1225 20.5439 49.8064 20.5439C49.5014 20.5439 49.204 20.5098 48.9175 20.4451C48.8561 20.4313 48.7952 20.416 48.7349 20.3994C48.7004 20.3899 48.6661 20.3799 48.632 20.3695L43.9355 37.2105L39.081 45.5187L44 46.421V53L12.0645 53V46.421L16.9212 45.5224L12.0645 37.2105L7.36805 20.3695C7.33392 20.3799 7.29961 20.3899 7.26513 20.3994C7.20478 20.416 7.1439 20.4313 7.08252 20.4451C6.79599 20.5098 6.49857 20.5439 6.19355 20.5439C3.87752 20.5439 2 18.5802 2 16.1579C2 13.7356 3.87752 11.7719 6.19355 11.7719C8.50958 11.7719 10.3871 13.7356 10.3871 16.1579C10.3871 17.1674 10.061 18.0972 9.51303 18.8384C9.43124 18.9491 9.34451 19.0555 9.25318 19.1573C9.18684 19.2313 9.11807 19.3029 9.04701 19.372L18.0624 27.5614L19.9325 11.7387ZM10.6656 23.8859L16.5801 29.2585C17.1997 29.8213 18.0746 29.9865 18.8507 29.6872C19.6269 29.3878 20.1756 28.6735 20.2749 27.8334L21.6218 16.4377L25.9528 26.7051C26.3047 27.5392 27.1096 28.0797 28 28.0797C28.8904 28.0797 29.6953 27.5392 30.0472 26.7051L34.3782 16.4377L35.7251 27.8334C35.8244 28.6735 36.3731 29.3878 37.1493 29.6872C37.9254 29.9865 38.8003 29.8213 39.4199 29.2585L45.3344 23.8859L41.8717 36.3027L37.1665 44.3554C36.7923 44.9959 36.7499 45.783 37.0532 46.4615C37.3565 47.14 37.9668 47.6236 38.6865 47.7556L41.7714 48.3215V50.7273L14.2931 50.7273V48.3185L17.319 47.7587C18.0379 47.6257 18.6471 47.1418 18.9497 46.4636C19.2522 45.7854 19.2096 44.9991 18.8356 44.3591L14.1283 36.3027L10.6656 23.8859ZM7.19788 18.1034C7.28739 17.9677 7.39172 17.8412 7.50978 17.7265C7.90424 17.3432 8.15853 16.7895 8.15853 16.1579C8.15853 14.9364 7.22608 14.0447 6.19355 14.0447C5.16102 14.0447 4.22857 14.9364 4.22857 16.1579C4.22857 17.3794 5.16102 18.2711 6.19355 18.2711C6.38265 18.2711 6.56206 18.2431 6.73038 18.1918C6.88389 18.1451 7.04061 18.1157 7.19788 18.1034ZM48.8021 18.1034C48.9594 18.1157 49.1161 18.1451 49.2696 18.1918C49.4379 18.2431 49.6174 18.2711 49.8064 18.2711C50.839 18.2711 51.7714 17.3794 51.7714 16.1579C51.7714 14.9364 50.839 14.0447 49.8064 14.0447C48.7739 14.0447 47.8415 14.9364 47.8415 16.1579C47.8415 16.7895 48.0958 17.3432 48.4902 17.7265C48.6083 17.8412 48.7126 17.9677 48.8021 18.1034ZM35.3003 9.60433C35.4546 9.54678 35.6177 9.50587 35.7876 9.48393C36.7158 9.36408 37.5134 8.50989 37.5134 7.38596C37.5134 6.16443 36.5809 5.27273 35.5484 5.27273C34.5159 5.27273 33.5834 6.16443 33.5834 7.38596C33.5834 8.31673 34.1367 9.07534 34.861 9.36676C35.0169 9.42951 35.1641 9.50943 35.3003 9.60433Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'king-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.4055 3H30.5945L30.7296 7.31034H35.7835V12.4828H30.8918L31.1294 18.3388C31.2242 18.2274 31.3219 18.1182 31.4225 18.0116C36.1472 13.0061 43.1524 10.3424 48.3235 14.6379C53.5125 18.9483 53.5125 28.8621 46.3679 34.5958C42.3207 37.8438 38.6956 40.9749 38.8743 45.5544L46.1437 46.5345V53H9.85632V46.5345L17.1257 45.5544C17.3044 40.9749 13.6793 37.8438 9.6321 34.5958C2.4875 28.8621 2.4875 18.9483 7.67648 14.6379C12.8476 10.3424 19.8528 13.0061 24.5775 18.0116C24.6781 18.1182 24.7758 18.2274 24.8706 18.3388L25.1082 12.4828H20.2165V7.31034H25.2704L25.4055 3ZM20.5175 22.8044C23.6886 27.982 24.1083 34.0345 24.1083 36.6666C22.5188 36.6694 16.527 34.0418 13.3546 29.7281C11.0708 26.6226 10.4753 22.0151 12.433 20.2263C14.3908 18.4375 18.5356 19.5685 20.5175 22.8044ZM35.4825 22.8044C32.3114 27.982 31.8917 34.0345 31.8917 36.6666C33.4812 36.6694 39.473 34.0418 42.6454 29.7281C44.9292 26.6226 45.5248 22.0151 43.567 20.2263C41.6092 18.4375 37.4644 19.5685 35.4825 22.8044Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M24.4333 4.05309C24.4517 3.46625 24.9344 3 25.5236 3H30.4764C31.0656 3 31.5483 3.46625 31.5667 4.05309L31.6627 7.12294H35.4291C36.0316 7.12294 36.52 7.60959 36.52 8.20989V13.1574C36.52 13.2013 36.5173 13.2446 36.5123 13.2871C37.2951 12.9327 38.0953 12.6474 38.9042 12.4427C42.0378 11.6496 45.3184 12.0711 48.0977 14.3847C53.6752 19.0278 53.4681 29.323 46.2168 35.1549C44.2754 36.7163 42.5402 38.17 41.3011 39.7435C40.2848 41.0341 39.6388 42.3604 39.4947 43.845L45.4642 44.6515C46.0051 44.7246 46.4085 45.1848 46.4085 45.7286V51.913C46.4085 52.5134 45.9201 53 45.3177 53H10.6823C10.0799 53 9.59149 52.5134 9.59149 51.913V45.7286C9.59149 45.1848 9.9949 44.7246 10.5358 44.6515L16.5053 43.845C16.3612 42.3604 15.7152 41.0341 14.6989 39.7435C13.4598 38.17 11.7246 36.7163 9.78319 35.1549L10.4085 34.3829L9.78319 35.1549C2.5319 29.323 2.32478 19.0278 7.90235 14.3847L8.60171 15.2189L7.90235 14.3847C10.6816 12.0711 13.9622 11.6496 17.0958 12.4427C17.9047 12.6474 18.7049 12.9327 19.4877 13.2871C19.4827 13.2446 19.48 13.2013 19.48 13.1574V8.20989C19.48 7.60959 19.9684 7.12294 20.5709 7.12294H24.3373L24.4333 4.05309ZM21.2957 14.2444C22.2495 14.8239 23.1645 15.5005 24.0229 16.2506L24.1041 14.2444H21.2957ZM23.9379 19.1897C21.7887 16.9079 19.1629 15.2087 16.5588 14.5497C13.9879 13.899 11.4575 14.2579 9.30107 16.0531C4.97314 19.6559 4.76602 28.3262 11.1534 33.4632C13.0749 35.0086 15.0012 36.6058 16.4153 38.4015C17.8503 40.224 18.8089 42.3135 18.7108 44.8333C18.6903 45.3608 18.2923 45.7974 17.7674 45.8683L11.7731 46.6782V50.8261H44.2269V46.6782L38.2327 45.8683C37.7077 45.7974 37.3097 45.3608 37.2892 44.8333C37.1911 42.3135 38.1497 40.224 39.5847 38.4015C40.9988 36.6058 42.9251 35.0086 44.8466 33.4632C51.234 28.3262 51.0269 19.6559 46.6989 16.0531C44.5425 14.2579 42.0121 13.899 39.4412 14.5497C36.8371 15.2087 34.2113 16.9079 32.0621 19.1897C31.9794 19.2776 31.8985 19.3682 31.8194 19.4612C31.5289 19.8031 31.0575 19.9324 30.6323 19.7867C30.2071 19.6411 29.9151 19.2503 29.897 18.8026L29.6702 13.2012C29.6582 12.9056 29.7677 12.6179 29.9734 12.4045C30.1791 12.1911 30.4632 12.0705 30.7601 12.0705H34.3383V9.29685H30.6054C30.0161 9.29685 29.5334 8.8306 29.5151 8.24376L29.419 5.17391H26.581L26.4849 8.24376C26.4666 8.8306 25.9839 9.29685 25.3946 9.29685H21.6617V12.0705H25.2399C25.5368 12.0705 25.8209 12.1911 26.0266 12.4045C26.2323 12.6179 26.3418 12.9056 26.3298 13.2012L26.103 18.8026C26.0849 19.2503 25.7929 19.6411 25.3677 19.7867C24.9425 19.9324 24.4711 19.8031 24.1806 19.4612C24.1015 19.3682 24.0207 19.2776 23.9379 19.1898M31.9771 16.2506C32.8355 15.5005 33.7505 14.8239 34.7042 14.2444H31.8959L31.9771 16.2506ZM17.3096 18.9553C19.0173 19.4744 20.7009 20.6833 21.7898 22.465C24.9721 27.672 25.3763 33.7022 25.3763 36.2898C25.3763 36.8893 24.8891 37.3756 24.2874 37.3767C23.6967 37.3778 22.8967 37.1574 22.0822 36.8511C21.2259 36.529 20.2214 36.0603 19.1766 35.4622C17.0987 34.2726 14.7747 32.521 13.1408 30.2946C11.9357 28.6523 11.1798 26.6258 10.9787 24.7519C10.7832 22.9302 11.0918 20.9651 12.4037 19.7639L13.1417 20.5643L12.4037 19.7639C13.7217 18.5571 15.6305 18.4449 17.3096 18.9553ZM16.673 21.0346C15.434 20.658 14.4305 20.8605 13.8798 21.3646C13.323 21.8745 12.9814 22.9684 13.148 24.5208C13.3089 26.0208 13.9272 27.6832 14.9019 29.0114C16.296 30.9111 18.3454 32.4792 20.2634 33.5772C21.2164 34.1228 22.1154 34.5399 22.8527 34.8172C22.9599 34.8576 23.0615 34.8941 23.1574 34.9271C23.0096 32.1253 22.348 27.558 19.9265 23.5957C19.1237 22.2821 17.8834 21.4025 16.673 21.0346ZM39.327 21.0346C38.1166 21.4025 36.8763 22.2821 36.0735 23.5957C33.652 27.558 32.9904 32.1253 32.8426 34.9271C32.9385 34.8941 33.0401 34.8576 33.1473 34.8172C33.8846 34.5399 34.7836 34.1228 35.7366 33.5772C37.6546 32.4792 39.704 30.9111 41.0981 29.0114C42.0728 27.6832 42.6911 26.0208 42.852 24.5208C43.0186 22.9684 42.677 21.8745 42.1202 21.3646C41.5695 20.8605 40.566 20.658 39.327 21.0346ZM38.6904 18.9553C40.3695 18.4449 42.2783 18.5571 43.5963 19.7639C44.9082 20.9651 45.2168 22.9302 45.0213 24.7519C44.8202 26.6258 44.0643 28.6523 42.8592 30.2946C41.2253 32.521 38.9013 34.2726 36.8234 35.4622C35.7786 36.0603 34.7741 36.529 33.9178 36.8511C33.1033 37.1574 32.3033 37.3778 31.7126 37.3767C31.1109 37.3756 30.6237 36.8893 30.6237 36.2898C30.6237 33.7022 31.0279 27.672 34.2102 22.465C35.2991 20.6833 36.9827 19.4744 38.6904 18.9553Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'pawn-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M37.3492 12.5238C37.3492 15.286 36.1576 17.7735 34.2541 19.5131L39.1587 22.9297V29.1905H34.3573C34.5888 32.0925 36.4757 34.9969 38.9172 37.5303C41.5083 40.2188 44.6258 42.3871 46.6961 43.5546L47 43.726V53H9V43.726L9.30392 43.5546C11.3742 42.3871 14.4917 40.2188 17.0828 37.5303C19.5243 34.9969 21.4112 32.0925 21.6427 29.1905H16.8413V22.9297L21.4091 19.7477C19.351 18.0011 18.0476 15.4127 18.0476 12.5238C18.0476 7.26396 22.3684 3 27.6984 3C33.0284 3 37.3492 7.26396 37.3492 12.5238Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n 'knight-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M33.1658 12.1594L25.0408 3C23.8647 5.1581 22.7245 8.96699 24.3638 11.7166C23.5681 11.7851 22.8078 11.9152 22.2196 12.1433C18.4672 13.5988 14.35 17.3591 12.3263 25.1827C11.7404 27.4481 10.6857 28.5329 9.43229 29.8223C8.24992 31.0386 6.89064 32.4368 5.58093 35.1795C2.88277 40.8299 10.1645 46.4803 15.4742 41.3483C18.4594 38.463 21.0687 37.2719 23.2594 36.2719C26.4125 34.8325 28.6985 33.7891 29.9897 28.6598C30.6041 31.0524 30.3583 36.6988 24.4607 40.1441C18.5631 43.5893 17.3344 50.8467 17.4573 53H51C51 32.5571 48.1997 14.8944 33.1658 12.1594Z\" fill=\"#2A2B37\" />\n <ellipse cx=\"21.3721\" cy=\"21.1814\" rx=\"2.33898\" ry=\"2.27273\" fill=\"white\" />\n </svg>\n ),\n 'bishop-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M29.8545 30.4038H26.0727C26.0727 23.7267 28.1789 17.0608 32.8385 12.1815C33.5687 11.2259 34 10.046 34 8.76923C34 5.58296 31.3137 3 28 3C24.6863 3 22 5.58296 22 8.76923C22 10.3412 22.6539 11.7664 23.7144 12.807C19.9664 15.3761 13 22.2626 13 30.8846C13 39.5857 20.0948 43.1084 23.8167 43.8315L10 46.1818V53L46 53V46.1818L31.8556 43.7965C35.6197 42.9999 42.5 39.4532 42.5 30.8846C42.5 25.2741 39.7818 20.2727 36.4727 16.6364C32.8385 19.3636 29.8545 25.7273 29.8545 30.4038Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n 'rook-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 5H18.7436V10.434H22.641V5H33.359V10.434H37.2564V5H47V13.1509L39.2051 18.5849L41.1538 36H14.8462L16.7949 18.5849L9 13.1509V5Z\" fill=\"#2A2B37\" />\n <path d=\"M14.8462 39H41.1538L47 45.7547V53H9V45.7547L14.8462 39Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n 'queen-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.9569 11.4809C23.5293 10.8482 24.6452 9.25337 24.6452 7.38596C24.6452 4.96366 22.7676 3 20.4516 3C18.1356 3 16.2581 4.96366 16.2581 7.38596C16.2581 9.62443 17.8614 11.4712 19.9325 11.7387L18.0624 27.5614L9.04701 19.372C9.87134 18.5711 10.3871 17.4275 10.3871 16.1579C10.3871 13.7356 8.50958 11.7719 6.19355 11.7719C3.87752 11.7719 2 13.7356 2 16.1579C2 18.5802 3.87752 20.5439 6.19355 20.5439C6.60125 20.5439 6.99537 20.483 7.36805 20.3695L12.0645 37.2105L16.9212 45.5224L12.0645 46.421V53L44 53V46.421L39.081 45.5187L43.9355 37.2105L48.632 20.3695C49.0046 20.483 49.3987 20.5439 49.8064 20.5439C52.1225 20.5439 54 18.5802 54 16.1579C54 13.7356 52.1225 11.7719 49.8064 11.7719C47.4904 11.7719 45.6129 13.7356 45.6129 16.1579C45.6129 17.4275 46.1287 18.5711 46.953 19.372L37.9376 27.5614L36.0675 11.7387C38.1386 11.4712 39.7419 9.62443 39.7419 7.38596C39.7419 4.96366 37.8644 3 35.5484 3C33.2324 3 31.3548 4.96366 31.3548 7.38596C31.3548 9.25337 32.4707 10.8482 34.0431 11.4809L28 25.807L21.9569 11.4809Z\" fill=\"#2A2B37\" />\n </svg>\n\n ),\n 'king-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.4055 3H30.5945L30.7296 7.31034H35.7835V12.4828H30.8918L31.1294 18.3388C31.2242 18.2274 31.3219 18.1182 31.4225 18.0116C36.1472 13.0061 43.1524 10.3424 48.3235 14.6379C53.5125 18.9483 53.5125 28.8621 46.3679 34.5958C42.3207 37.8438 38.6956 40.9749 38.8743 45.5544L46.1437 46.5345V53H9.85632V46.5345L17.1257 45.5544C17.3044 40.9749 13.6793 37.8438 9.6321 34.5958C2.4875 28.8621 2.4875 18.9483 7.67648 14.6379C12.8476 10.3424 19.8528 13.0061 24.5775 18.0116C24.6781 18.1182 24.7758 18.2274 24.8706 18.3388L25.1082 12.4828H20.2165V7.31034H25.2704L25.4055 3ZM20.5175 22.8044C23.6886 27.982 24.1083 34.0345 24.1083 36.6666C22.5188 36.6694 16.527 34.0418 13.3546 29.7281C11.0708 26.6226 10.4753 22.0151 12.433 20.2263C14.3908 18.4375 18.5356 19.5685 20.5175 22.8044ZM35.4825 22.8044C32.3114 27.982 31.8917 34.0345 31.8917 36.6666C33.4812 36.6694 39.473 34.0418 42.6454 29.7281C44.9292 26.6226 45.5248 22.0151 43.567 20.2263C41.6092 18.4375 37.4644 19.5685 35.4825 22.8044Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n}\n","import { CHESS_PIECES_MAP } from \"./chessPieciesMap\";\nimport { ChessBoardConfig } from \"./models\";\n\nexport const DEFAULT_CELL_SIZE = 92;\nexport const FACTOR_FOR_SIZE_CIRCLE_MARK = 4.6;\nexport const DEFAULT_CIRCLE_MARK_COLOR = '#3697ce';\nexport const DEFAULT_WHITE_CELL_COLOR = '#fafafc';\nexport const DEFAULT_BLACK_CELL_COLOR = '#d8d9e6';\nexport const DEFAULT_SELECTED_CELL_COLOR = '#e3f1fe';\nexport const DEFAULT_SELECTED_CELL_BORDER = '3px solid #6ac2fd';\nexport const DEFAULT_ARROW_COLOR = '#6ac2fd';\nexport const DEFAULT_MARKED_CELL_COLOR = '#3697ce';\nexport const DEFAULT_CHECKED_CELL_COLOR = '#e95b5c';\nexport const DEFAULT_PIECES_MAP = CHESS_PIECES_MAP;\n\nexport const DEFAULT_CHESSBORD_CONFIG: ChessBoardConfig = {\n cellSize: DEFAULT_CELL_SIZE,\n circleMarkColor: DEFAULT_CIRCLE_MARK_COLOR,\n whiteCellColor: DEFAULT_WHITE_CELL_COLOR,\n blackCellColor: DEFAULT_BLACK_CELL_COLOR,\n selectedCellColor: DEFAULT_SELECTED_CELL_COLOR,\n selectedCellBorder: DEFAULT_SELECTED_CELL_BORDER,\n arrowColor: DEFAULT_ARROW_COLOR,\n markedCellColor: DEFAULT_MARKED_CELL_COLOR,\n checkedCellColor: DEFAULT_CHECKED_CELL_COLOR,\n piecesMap: DEFAULT_PIECES_MAP,\n}\n","import { Cell, CellPos, Figure, FigureColor, FigureType, MoveData } from \"../JSChessEngine\";\nimport { ChessBoardConfig, ChessPiecesMap } from \"./models\";\nimport { DEFAULT_CHESSBORD_CONFIG } from \"./constants\";\n\n/**\n * Возвращает класс для фигуры в клетке\n */\nexport const getFigureCSS = (figure: Figure) =>\n `${figure.type}-${figure.color}`;\n\n/**\n * Возвращает белая ли клетка\n */\nexport const getIsLightCell = (rowId: number, cellId: number) =>\n (rowId % 2 === 0) && (cellId % 2 === 0) ||\n (rowId % 2 > 0) && (cellId % 2 > 0)\n\n/**\n * Функция, которая просто создает массив размером size\n */\nexport const getFilledArrayBySize = (size: number) => {\n const array: number[] = [];\n\n for (let i = 0; i < size; i++) {\n array.push(i);\n }\n\n return array;\n}\n\n/**\n * Возвращает только массив фигурам у которых\n * есть поле position\n */\nexport const mapCellsToFiguresArray = (boardState: Cell[][]) => {\n const figuresWithPosition: Figure[] = [];\n\n boardState.forEach((row, j) => row.forEach((cell, i) => {\n if (cell.figure) {\n figuresWithPosition.push({\n ...cell.figure,\n position: [i, j],\n });\n }\n }));\n\n return figuresWithPosition;\n}\n\n/**\n * \n * @param possibleMoves Список возможных ходов\n * @param position позиция для проверки\n */\nexport const checkIsPossibleMove = (possibleMoves: CellPos[], position: CellPos) => {\n return !!possibleMoves.find((possibleMove) =>\n possibleMove[0] === position[0] && possibleMove[1] === position[1]\n );\n}\n\n/**\n * Проверяет находится ли проверяемая позиция в\n * наборе позиций\n * @param positions набор позиций\n * @param pos позиция\n */\nexport const checkPositionsHas = (\n positions: CellPos[] | undefined,\n pos: CellPos\n) => {\n if (!positions) return false;\n\n return !!positions.find(\n (posItem) => posItem[0] === pos[0] && posItem[1] === pos[1]\n );\n};\n\n/**\n * Проверяет, является ли ход рокеровкой\n * @param moveData \n * @returns \n */\nexport const checkIsCastlingMove = (moveData: MoveData) => {\n const { figure, from, to } = moveData;\n if (figure.type !== 'king') return false;\n if (from[1] !== to[1]) return false;\n const horizontalDiff = Math.abs(to[0] - from[0]);\n if (horizontalDiff === 1) return false;\n return true;\n}\n\n/**\n * Проверка клетки, на то есть ли шах\n */\nexport const hasCheck = (cell: Cell, currentColor: FigureColor, linesWithCheck: CellPos[][]) =>\n !!cell.figure &&\n cell.figure.type === 'king' &&\n cell.figure.color === currentColor &&\n linesWithCheck.length > 0\n\nexport const degrees = (a: number, b: number) =>\n (Math.atan(a / b) * 180) / Math.PI;\n\nexport const calcAngle = (start: number[], end: number[]) => {\n const x = end[0] - start[0];\n const y = end[1] - start[1];\n\n if (x > 0 && y > 0) {\n return degrees(y, x) - 90;\n }\n\n if (x < 0 && y < 0) {\n return degrees(y, x) + 90;\n }\n\n if (x < 0 && y > 0) {\n return degrees(y, x) + 90;\n }\n\n if (x > 0 && y < 0) {\n return degrees(y, x) - 90;\n }\n\n if (y === 0 && x > 0) return -90;\n\n if (y === 0 && x < 0) return 90;\n\n if (x === 0 && y < 0) return 180;\n\n return 0;\n};\n\nexport const getChessBoardConfig = (config: Partial<ChessBoardConfig> | undefined): ChessBoardConfig => {\n if (!config) return DEFAULT_CHESSBORD_CONFIG;\n\n const configKeyes = Object.keys(DEFAULT_CHESSBORD_CONFIG);\n\n const buildedConfig: Record<string, string | number | ChessPiecesMap> = {};\n\n configKeyes.forEach((key) => {\n buildedConfig[key as keyof ChessBoardConfig] =\n config[key as keyof ChessBoardConfig]\n || DEFAULT_CHESSBORD_CONFIG[key as keyof ChessBoardConfig]\n });\n\n return buildedConfig as ChessBoardConfig;\n}\n\n/**\n * Возвращает массив фигур по заданому цвету\n * @param color цвет фигур\n * @param forPawnTransform только фигуры для превращения пешки\n */\nexport const getFiguresByColor = (\n color: FigureColor,\n forPawnTransform = false\n): Figure[] => {\n if (forPawnTransform) {\n const figureNamesForPawn: FigureType[] = [\n 'queen',\n 'rook',\n 'bishop',\n 'knight',\n ];\n return figureNamesForPawn.map((figureName) => ({\n type: figureName,\n color,\n touched: true,\n }));\n }\n\n const figureNames: FigureType[] = [\n 'pawn',\n 'knight',\n 'bishop',\n 'rook',\n 'queen',\n 'king',\n ];\n return figureNames.map((figureName) => ({\n type: figureName,\n color,\n touched: true,\n }));\n};\n\n/**\n * Корректирует позицию захвата курсором\n * коррекция происходит по сроллу\n */\nexport const correctGrabbingPosByScroll = (pos: CellPos) => {\n if (typeof window === 'undefined')\n return pos;\n\n return [\n pos[0] - window.scrollX,\n pos[1] - window.scrollY,\n ] as CellPos;\n}\n\n/**\n * Корректирует указатели стрелки\n */\nexport const correctGrabbingPosForArrow = (pos: CellPos, boardConfig: ChessBoardConfig) => [\n (pos[0] * boardConfig.cellSize) + (boardConfig.cellSize / 2 - 10), \n (pos[1] * boardConfig.cellSize) + (boardConfig.cellSize / 2)\n] as CellPos;","import React, { FC } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { getFilledArrayBySize, getIsLightCell } from \"./utils\";\nimport { ChessBoardConfig } from \"./models\";\n\nconst BASE_BOARD_SIZE = 8;\n\ntype ChessBoardCellsLayoutProps = {\n size?: number;\n boardConfig: ChessBoardConfig;\n}\n\nexport const ChessBoardCellsLayout: FC<ChessBoardCellsLayoutProps> = ({ size = BASE_BOARD_SIZE, boardConfig }) => {\n return (\n <div>\n {getFilledArrayBySize(size).map((_, j) => \n <div className={styles.row} key={`cells-layout-${j}`}>\n {getFilledArrayBySize(size).map((_, i) => (\n <div\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n backgroundColor: getIsLightCell(j, i) ? boardConfig.whiteCellColor : boardConfig.blackCellColor,\n }}\n key={`cells-layout-${i}`}\n ></div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import { Cell, Figure, JSChessEngine } from \"../JSChessEngine\";\nimport React, { FC, useEffect, useState } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport cn from 'classnames';\nimport { checkIsCastlingMove, getFigureCSS, mapCellsToFiguresArray } from \"./utils\";\nimport { ChangeMove, ChessBoardConfig } from \"./models\";\n\ntype ChessBoardFiguresLayoutProps = {\n initialState: Cell[][];\n change?: ChangeMove;\n reversed?: boolean;\n animated?: boolean;\n boardConfig: ChessBoardConfig;\n}\n\nexport const ChessBoardFiguresLayout: FC<ChessBoardFiguresLayoutProps> = (props) => {\n const { initialState, change, reversed, boardConfig, animated } = props;\n const [actualState, setActualState] = useState<Figure[]>([]);\n\n useEffect(() => {\n setActualState(mapCellsToFiguresArray(initialState));\n }, [initialState])\n\n useEffect(() => {\n if (!!change) {\n setActualState((prevState) => {\n const updatedState = [...prevState];\n const { move, attackedPos, transformTo } = change;\n\n if (checkIsCastlingMove(move)) {\n const castlingType = JSChessEngine.getCastlingType(move);\n const { color } = move.figure;\n\n if (color === 'white') {\n const kingIndex = updatedState.findIndex((figure) => \n figure.color === 'white' && figure.type === 'king'\n );\n\n if (castlingType === '0-0') {\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 7\n );\n updatedState[rookIndex].position![0] = 5;\n updatedState[kingIndex].position![0] = 6;\n\n return updatedState;\n }\n\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 0\n );\n updatedState[rookIndex].position![0] = 3;\n updatedState[kingIndex].position![0] = 2;\n\n return updatedState;\n }\n\n if (color === 'black') {\n const kingIndex = updatedState.findIndex((figure) => \n figure.color === 'black' && figure.type === 'king'\n );\n\n if (castlingType === '0-0') {\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 7\n );\n updatedState[rookIndex].position![0] = 5;\n updatedState[kingIndex].position![0] = 6;\n\n return updatedState;\n }\n\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 0\n );\n updatedState[rookIndex].position![0] = 3;\n updatedState[kingIndex].position![0] = 2;\n\n return updatedState;\n }\n\n return updatedState;\n }\n\n const { from, to } = move;\n\n const foundAttactedFigure = updatedState.find((figure) => {\n if (attackedPos)\n return figure.position![0] === attackedPos[0]\n && figure.position![1] === attackedPos[1];\n\n return figure.position![0] === to[0]\n && figure.position![1] === to[1];\n });\n\n if (foundAttactedFigure && foundAttactedFigure.color !== move.figure.color) {\n foundAttactedFigure.color === 'white'\n ? foundAttactedFigure.position = [8, foundAttactedFigure.position![1]]\n : foundAttactedFigure.position = [-1, foundAttactedFigure.position![1]]\n };\n\n const foundFigureByPositionFrom = updatedState.find((figure) => \n figure.position![0] === from[0]\n && figure.position![1] === from[1]\n );\n\n if (!foundFigureByPositionFrom) return updatedState;\n\n foundFigureByPositionFrom.position! = move.to;\n\n if (!!transformTo) {\n foundFigureByPositionFrom!.type = transformTo.type;\n foundFigureByPositionFrom!.color = transformTo.color;\n // console.log(updatedState);\n // return updatedState.filter(({ position }) => position![0] !== from[1] && position![1] !== from[0]);\n }\n\n return updatedState;\n });\n }\n }, [change])\n\n useEffect(() => {\n if (!reversed) return;\n\n setActualState((prevState) => {\n const preparedState = [...prevState];\n return preparedState.map((figure) => ({\n ...figure,\n position: [\n Math.abs(7 - figure.position![0]),\n Math.abs(7 - figure.position![1])\n ]\n }));\n });\n }, [reversed, initialState])\n\n return (\n <div className={styles.figuresLayout}>\n {actualState.map((figure, i) => \n <div \n key={i}\n className={cn([styles.figure], {\n [styles.hiddenFigure]: figure.position![0] === -1 || figure.position![0] === 8 \n })}\n style={{ \n top: `${boardConfig.cellSize * figure.position![1]}px`, \n left: `${boardConfig.cellSize * figure.position![0]}px`,\n transition: !!change && animated ? 'all .15s ease-out' : 'none',\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n >\n {boardConfig.piecesMap[getFigureCSS(figure)] && boardConfig.piecesMap[getFigureCSS(figure)]('80%')}\n </div>\n )}\n </div>\n )\n}\n","import React, { FC, MouseEvent, useState } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { getFilledArrayBySize } from \"./utils\";\nimport cn from 'classnames';\nimport { CellPos } from \"../JSChessEngine\";\nimport { ChessBoardConfig } from \"./models\";\n\nconst BASE_BOARD_SIZE = 8\n\ntype ChessBoardControlLayoutProps = {\n size?: number;\n boardConfig: ChessBoardConfig;\n\n onClick: (position: CellPos) => void;\n onGrabStart: (position: CellPos) => void;\n onGrabStartRight: (position: CellPos) => void;\n onGrabEnd: (position: CellPos) => void;\n onGrabEndRight: (position: CellPos) => void;\n onGrabbing: (x: number, y: number) => void;\n onRightClick: (position: CellPos) => void;\n onGrabbingCell: (position: CellPos) => void;\n}\n\nexport const ChessBoardControlLayout: FC<ChessBoardControlLayoutProps> = (props) => {\n const { \n size = BASE_BOARD_SIZE, \n boardConfig,\n onClick, \n onGrabEnd,\n onGrabbing,\n onGrabStart,\n onRightClick,\n onGrabbingCell,\n onGrabEndRight,\n onGrabStartRight,\n } = props;\n\n const [pressed, setPressed] = useState(false);\n\n const handleClick = (cellPos: CellPos) => {\n onClick(cellPos);\n }\n\n const handleGrabStart = (cellPos: CellPos) => (event: MouseEvent) => {\n setPressed(true);\n if (event.button === 0) {\n onGrabStart(cellPos);\n }\n\n if (event.button === 2) {\n onGrabStartRight(cellPos);\n }\n }\n\n const handleGrabEnd = (cellPos: CellPos) => (event: MouseEvent) => {\n if (event.button === 0) {\n setPressed(false);\n onGrabEnd(cellPos);\n }\n\n if (event.button === 2) {\n onGrabEndRight(cellPos);\n }\n }\n\n const handleGrabing = (event: MouseEvent) => {\n if (pressed) {\n const { pageX, pageY} = event;\n onGrabbing(pageX, pageY);\n }\n }\n\n const handleContextMenu = (cellPos: CellPos) => (event: MouseEvent) => {\n event.preventDefault();\n onRightClick(cellPos);\n }\n\n const handleGrabbingCell = (cellPos: CellPos) => {\n onGrabbingCell(cellPos);\n }\n\n return (\n <div \n className={cn(styles.controlLayout, {[styles.controlLayoutGrabbing]: pressed})}\n onMouseMove={handleGrabing}\n >\n {getFilledArrayBySize(size).map((_, j) => \n <div className={styles.row} key={`control-layout-${j}`}>\n {getFilledArrayBySize(size).map((_, i) => (\n <div \n key={`control-layout-${i}`}\n className={styles.controlCell}\n style={{ \n width: boardConfig.cellSize, \n height: boardConfig.cellSize \n }}\n onClick={() => handleClick([i, j])}\n onMouseDown={handleGrabStart([i, j])}\n onMouseUp={handleGrabEnd([i, j])}\n onContextMenu={handleContextMenu([i, j])}\n onMouseMove={() => handleGrabbingCell([i, j])}\n ></div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import { Cell, CellPos, Figure, FigureColor, GameResult, JSChessEngine, MoveData, stateToFEN } from \"../JSChessEngine\";\nimport { useEffect, useState } from \"react\"\nimport { checkIsPossibleMove, checkPositionsHas, correctGrabbingPosForArrow, getChessBoardConfig, hasCheck } from \"./utils\";\nimport { ArrowCoords, ChangeMove, ChessBoardConfig } from \"./models\";\nimport { DEFAULT_CHESSBORD_CONFIG } from \"./constants\";\n\ntype UseChessBoardInteractiveProps = {\n config?: Partial<ChessBoardConfig>;\n onChange: (moveData: MoveData) => void;\n onEndGame: (result: GameResult) => void;\n}\n\nexport const useChessBoardInteractive = (props: UseChessBoardInteractiveProps) => {\n const { config, onChange, onEndGame } = props;\n\n const [boardConfig, setBoardConfig] = useState(DEFAULT_CHESSBORD_CONFIG);\n const [initialState, setInitialState] = useState<Cell[][]>([]);\n const [actualState, setActualState] = useState<Cell[][]>([]);\n const [fromPos, setFromPos] = useState<CellPos>([-1, -1]);\n const [holdedFigure, setHoldedFigure] = useState<Figure>();\n const [grabbingPos, setGrabbingPos] = useState<CellPos>([-1, -1]);\n const [possibleMoves, setPossibleMoves] = useState<CellPos[]>([]);\n const [boardReversed, setBoardReversed] = useState(false);\n const [currentColor, setCurrentColor] = useState<FigureColor>('white');\n const [playerColor, setPlayerColor] = useState<FigureColor>();\n const [newMove, setNewMove] = useState<ChangeMove>();\n const [linesWithCheck, setLinesWithCheck] = useState<CellPos[][]>([]);\n const [markedCells, setMarkedCells] = useState<CellPos[]>([]);\n const [grabbingCell, setGrabbingCell] = useState<CellPos>([-1, -1]);\n\n const [clickedPos, setClickedPos] = useState<CellPos>([-1, -1]);\n const [clickedFigure, setClickedFigure] = useState<Figure>();\n const [clickPossibleMoves, setClickPossibleMoves] = useState<CellPos[]>([]);\n\n const [startArrowCoord, setStartArrowCoord] = useState<CellPos>([-1, -1]);\n const [arrowsCoords, setArrowsCoords] = useState<ArrowCoords[]>([]);\n\n // Используется при превращении пешки в фигуру\n const [showFigurePicker, setShowFigurePicker] = useState(false);\n const [targetPos, setTargetPos] = useState<CellPos>([-1, -1]);\n\n // Для анимирования хода фигуры\n const [animated, setAnimated] = useState(false);\n\n const clearFromPos = () => setFromPos([-1, -1]);\n const clearGrabbingPos = () => setGrabbingPos([-1, -1]);\n const clearPossibleMoves = () => setPossibleMoves([]);\n const clearClickPossibleMoves = () => setClickPossibleMoves([]);\n const toggleCurrentColor = () => setCurrentColor((prevColor) => prevColor === 'white' ? 'black' : 'white');\n const clearMarkedCells = () => setMarkedCells([]);\n const clearClickedPos = () => setClickedPos([-1, -1]);\n const clearArrows = () => setArrowsCoords([]);\n\n useEffect(() => {\n setBoardConfig(getChessBoardConfig(config));\n }, []);\n\n useEffect(() => {\n if (linesWithCheck.length > 0) {\n const gameResult = JSChessEngine.getGameResult(\n actualState,\n linesWithCheck,\n currentColor!,\n boardReversed\n );\n\n if (gameResult)\n onEndGame(gameResult);\n }\n }, [actualState, linesWithCheck, boardReversed, currentColor])\n\n const cleanAllForFigure = () => {\n setHoldedFigure(undefined);\n clearFromPos();\n clearGrabbingPos();\n clearPossibleMoves();\n }\n\n const cleanAllForClickedFigure = () => {\n setClickedFigure(undefined);\n clearClickedPos();\n clearClickPossibleMoves();\n }\n\n const reverseChessBoard = () => {\n cleanAllForFigure();\n setActualState((prevState) => JSChessEngine.reverseChessBoard(prevState));\n setBoardReversed((prevReversed) => !prevReversed);\n }\n\n // It's common select for click event and hover event \n const selectFigureFrom = (cellPos: CellPos) => {\n const cell = actualState[cellPos[1]][cellPos[0]];\n\n if (!cell.figure) {\n cleanAllForFigure();\n return { figure: undefined, nextMoves: [] };\n }\n\n const { figure } = cell;\n\n \n if (figure.color !== currentColor && !playerColor) {\n cleanAllForFigure();\n return { figure: undefined, nextMoves: [] };\n }\n\n if (!!playerColor && figure.color !== playerColor) {\n cleanAllForFigure();\n return { figure: undefined, nextMoves: [] };\n }\n\n const nextMoves = JSChessEngine.getNextMoves(\n actualState,\n cellPos,\n linesWithCheck,\n boardReversed\n );\n\n \n return { figure: cell.figure, nextMoves };\n }\n\n const selectClickFrom = (cellPos: CellPos) => {\n const { figure, nextMoves } = selectFigureFrom(cellPos);\n if (!figure) return;\n\n setClickedFigure(figure);\n setClickedPos(cellPos);\n setClickPossibleMoves(nextMoves);\n }\n\n const selectHoverFrom = (cellPos: CellPos) => {\n const { figure, nextMoves } = selectFigureFrom(cellPos);\n if (!figure) return;\n\n setHoldedFigure(figure);\n setPossibleMoves(nextMoves);\n setFromPos(cellPos);\n }\n\n const moveFigure = (from: CellPos, to: CellPos, figure: Figure) => {\n if (!!playerColor && currentColor !== playerColor) {\n cleanAllForFigure();\n return { moveData: undefined, attackedPos: undefined } ;\n }\n\n const inNextMoves = checkPositionsHas(possibleMoves, to);\n\n // Проверка, что начальная позиция не равняется следующей\n // и то что inNextMoves будет true\n const conditionForDoMove =\n (to[0] !== from[0] || to[1] !== from[1]) && inNextMoves;\n\n if (!conditionForDoMove) return {};\n\n const { updatedCells, attackedPos } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n \n setActualState(updatedCells);\n\n // Пешка дошла до конца доски\n // Показываем FigurePicker\n // И изменяем состояние с превращением пешки\n if (\n figure.type === 'pawn' &&\n (to[1] === 0 || to[1] === actualState.length - 1)\n ) {\n setTargetPos(to);\n setShowFigurePicker(true);\n return {};\n }\n\n const colorFEN = currentColor === 'white' ? 'black' : 'white';\n const FEN = stateToFEN(updatedCells, colorFEN)\n\n // Собранные данные для отправки\n const moveData: MoveData = { figure, from, to, FEN };\n \n // setMoveVector([from, to]);\n // onChange(changedState, moveData);\n\n toggleCurrentColor();\n\n setHoldedFigure(undefined);\n clearFromPos();\n clearGrabbingPos();\n clearArrows();\n clearMarkedCells();\n\n return { moveData, attackedPos };\n }\n\n\n const moveFigureByChange = (change: ChangeMove) => {\n const { from, to, figure } = change.move;\n const { updatedCells } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n const updatedChange = {\n ...change,\n move: boardReversed ? JSChessEngine.reverseMove(change.move) : change.move\n };\n setNewMove(updatedChange);\n }\n\n const moveFigureByClick = (from: CellPos, to: CellPos, figure: Figure) => {\n if (!!playerColor && currentColor !== playerColor) {\n cleanAllForFigure();\n return { moveData: undefined, attackedPos: undefined } ;\n }\n\n const inNextMoves = checkPositionsHas(clickPossibleMoves, to);\n\n // Проверка, что начальная позиция не равняется следующей\n // и то что inNextMoves будет true\n const conditionForDoMove =\n (to[0] !== from[0] || to[1] !== from[1]) && inNextMoves;\n\n if (!conditionForDoMove) return {};\n\n const { updatedCells, attackedPos } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n\n setActualState(updatedCells);\n\n // Пешка дошла до конца доски\n // Показываем FigurePicker\n // И изменяем состояние с превращением пешки\n if (\n figure.type === 'pawn' &&\n (to[1] === 0 || to[1] === actualState.length - 1)\n ) {\n setTargetPos(to);\n setShowFigurePicker(true);\n return {};\n }\n\n const colorFEN = currentColor === 'white' ? 'black' : 'white';\n const FEN = stateToFEN(updatedCells, colorFEN)\n\n // Собранные данные для отправки\n const moveData: MoveData = { figure, from, to, FEN };\n \n // setMoveVector([from, to]);\n // onChange(changedState, moveData);\n\n toggleCurrentColor();\n\n setClickedFigure(undefined);\n clearClickedPos();\n clearGrabbingPos();\n clearArrows();\n clearMarkedCells();\n\n return { moveData, attackedPos };\n }\n\n const moveFigureByExternalChange = (from: CellPos, to: CellPos, figure: Figure) => {\n const { updatedCells, attackedPos } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor,\n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n\n setActualState(updatedCells);\n\n // Пешка дошла до конца доски\n // Показываем FigurePicker\n // И изменяем состояние с превращением пешки\n if (\n figure.type === 'pawn' &&\n (to[1] === 0 || to[1] === actualState.length - 1)\n ) {\n setTargetPos(to);\n setShowFigurePicker(true);\n return {};\n }\n\n const colorFEN = currentColor === 'white' ? 'black' : 'white';\n const FEN = stateToFEN(updatedCells, colorFEN)\n\n // Собранные данные для отправки\n const moveData: MoveData = { figure, from, to, FEN };\n \n // setMoveVector([from, to]);\n // onChange(changedState, moveData);\n\n toggleCurrentColor();\n\n setClickedFigure(undefined);\n clearClickedPos();\n clearGrabbingPos();\n clearArrows();\n clearMarkedCells();\n\n return { moveData, attackedPos };\n }\n\n const handleGrabbing = (x: number, y: number) => {\n setGrabbingPos([x, y]);\n }\n\n const handleGrabEnd = (cellPos: CellPos, withTransition = false) => {\n if (fromPos[0] === -1) {\n clearGrabbingPos();\n return;\n }\n\n if (!holdedFigure) {\n return;\n }\n\n if (possibleMoves.length === 0) {\n clearGrabbingPos();\n return;\n }\n \n const foundPosInPossible = checkIsPossibleMove(possibleMoves, cellPos);\n\n if (!foundPosInPossible) {\n clearGrabbingPos();\n return;\n }\n \n const { moveData, attackedPos } = moveFigure(fromPos, cellPos, holdedFigure);\n if (!moveData) {\n clearGrabbingPos();\n return;\n }\n\n onChange(moveData);\n\n setAnimated(withTransition);\n setNewMove({ move: moveData, withTransition, attackedPos });\n\n clearGrabbingPos();\n clearPossibleMoves();\n }\n\n const handleChangeFromExternal = (moveData: MoveData) => { \n const { attackedPos } = moveFigureByExternalChange(moveData.from, moveData.to, moveData.figure);\n\n setAnimated(true);\n\n const change: ChangeMove = {\n move: moveData,\n withTransition: true,\n attackedPos,\n transformTo: moveData.type === 'transform' ? moveData.figure : undefined,\n };\n\n setNewMove(change);\n\n clearClickedPos();\n clearClickPossibleMoves();\n }\n \n const handleClickForTargetCell = (cellPos: CellPos, withTransition = false) => {\n if (clickedPos[0] === cellPos[0] && clickedPos[1] === cellPos[1]) return;\n if (clickedPos[0] === -1) return;\n if (!clickedFigure) return;\n if (clickPossibleMoves.length === 0) return;\n const foundPosInPossible = checkIsPossibleMove(clickPossibleMoves, cellPos);\n\n if (!foundPosInPossible) return;\n \n const { moveData, attackedPos } = moveFigureByClick(clickedPos, cellPos, clickedFigure);\n if (!moveData) return;\n\n onChange(moveData);\n\n setAnimated(withTransition);\n setNewMove({ move: moveData, withTransition, attackedPos });\n\n clearClickedPos();\n clearClickPossibleMoves();\n }\n\n const handleClick = (cellPos: CellPos, viewOnly = false) => {\n clearMarkedCells();\n clearArrows();\n\n if (viewOnly) return;\n\n if (clickedPos[0] === -1) {\n selectClickFrom(cellPos);\n return;\n }\n\n const foundPosInPossible = checkIsPossibleMove(clickPossibleMoves, cellPos);\n if (!foundPosInPossible) {\n cleanAllForClickedFigure();\n return;\n }\n\n handleClickForTargetCell(cellPos, true);\n }\n\n const markCell = (cellPos: CellPos) => {\n cleanAllForFigure();\n\n setMarkedCells((prev) => {\n const preparedPrev = [...prev];\n \n const foundCellIndex = preparedPrev.findIndex(([x, y]) => x === cellPos[0] && y === cellPos[1]);\n if (foundCellIndex !== -1) return prev.filter((_, i) => i !== foundCellIndex);\n return [...preparedPrev, cellPos];\n });\n }\n \n const getHasCheckByCellPos = ([x, y]: CellPos) => {\n if (actualState.length === 0) return false;\n const cell = actualState[y][x];\n if (!cell.figure) return false;\n return hasCheck(cell, currentColor, linesWithCheck);\n }\n\n const startRenderArrow = (pos: CellPos) => {\n const startPos: CellPos = [\n (pos[0] + 1) * boardConfig.cellSize - boardConfig.cellSize / 2 - 10,\n (pos[1] + 1) * boardConfig.cellSize - boardConfig.cellSize / 2,\n ];\n\n setStartArrowCoord(startPos);\n }\n\n const endRenderArrow = ([x, y]: CellPos) => {\n if (startArrowCoord[0] === -1) return;\n\n setArrowsCoords((arrows) => {\n const copiedArrows = [...arrows];\n\n return [\n ...copiedArrows, \n { \n start: [...startArrowCoord], \n end: correctGrabbingPosForArrow([x, y], boardConfig),\n }\n ];\n });\n\n setStartArrowCoord([-1, -1]);\n }\n\n // Обработка выбора превращения пешки\n const handleSelectFigurePicker = (figure: Figure) => {\n const startPos = fromPos[0] > -1 \n ? fromPos\n : clickedPos\n\n const updatedCells = JSChessEngine.transformPawnToFigure(\n actualState,\n startPos,\n targetPos,\n figure\n );\n\n const moveData: MoveData = {\n figure,\n from: startPos,\n to: targetPos,\n type: 'transform',\n };\n\n onChange(moveData);\n setActualState(updatedCells);\n toggleCurrentColor();\n setNewMove({ \n move: moveData, \n withTransition: false, \n transformTo: figure,\n });\n\n const linesWithCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesWithCheck);\n\n // handleEndGame(updatedCells, linesWithCheck);\n\n clearGrabbingPos();\n clearPossibleMoves();\n clearMarkedCells();\n setShowFigurePicker(false);\n clearClickedPos();\n setHoldedFigure(undefined);\n setFromPos([-1, -1]);\n setClickedPos([-1, -1]);\n clearArrows();\n }\n\n const handleGrabbingCell = (cellPos: CellPos) => {\n setGrabbingCell(cellPos);\n }\n\n return {\n fromPos,\n newMove,\n animated,\n boardConfig,\n markedCells,\n grabbingPos,\n actualState,\n currentColor,\n arrowsCoords,\n initialState,\n holdedFigure,\n grabbingCell,\n possibleMoves,\n linesWithCheck,\n startArrowCoord,\n showFigurePicker,\n\n markCell,\n setNewMove,\n setAnimated,\n handleClick,\n clearFromPos,\n handleGrabEnd,\n handleGrabbing,\n endRenderArrow,\n setActualState,\n setPlayerColor,\n setCurrentColor,\n selectClickFrom,\n selectHoverFrom,\n setInitialState,\n setBoardReversed,\n startRenderArrow,\n cleanAllForFigure,\n reverseChessBoard,\n handleGrabbingCell,\n moveFigureByChange,\n getHasCheckByCellPos,\n handleSelectFigurePicker,\n handleChangeFromExternal,\n moveFigureByExternalChange,\n }\n}\n","import { CellPos, Figure } from \"../JSChessEngine\";\nimport React, { FC } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { getFigureCSS } from \"./utils\";\nimport cn from 'classnames';\nimport { ChessBoardConfig } from \"./models\";\n\ntype HoldedFigureProps = {\n holdedFigure?: Figure;\n grabbingPos: CellPos;\n boardConfig: ChessBoardConfig;\n}\n\nexport const HoldedFigure: FC<HoldedFigureProps> = (props) => {\n const { holdedFigure, grabbingPos, boardConfig } = props;\n\n // Эта проверка убирает мерациния фигуры из точки -1 -1\n // в самом начале захвата фигуры\n const isCanShowFigure =\n holdedFigure \n && grabbingPos[0] > -1 \n && grabbingPos[1] > -1;\n\n return isCanShowFigure && (\n <div \n className={cn([\n styles.figure,\n styles.holdedFigure, \n ])}\n style={{ \n position: 'fixed',\n zIndex: 6,\n top: `${grabbingPos[1] - boardConfig.cellSize / 2}px`,\n left: `${grabbingPos[0] - boardConfig.cellSize / 2}px`,\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n > {boardConfig.piecesMap[getFigureCSS(holdedFigure)]('80%')}</div>\n );\n}\n","import React, { FC } from \"react\";\nimport { checkIsPossibleMove, getFigureCSS, getFilledArrayBySize } from \"./utils\";\nimport styles from './ChessBoard.module.css';\nimport cn from 'classnames';\nimport { CellPos, Figure } from \"../JSChessEngine\";\nimport { HoldedFigure } from \"./HoldedFigure\";\nimport { ChessBoardConfig } from \"./models\";\nimport { FACTOR_FOR_SIZE_CIRCLE_MARK } from \"./constants\";\n\nconst BASE_BOARD_SIZE = 8\n\ntype ChessBoardInteractiveLayoutProps = {\n size?: number;\n boardConfig: ChessBoardConfig;\n selectedPos: CellPos;\n possibleMoves: CellPos[];\n markedCells: CellPos[];\n holdedFigure?: Figure;\n grabbingPos: CellPos;\n onHasCheck: (cellPos: CellPos) => boolean;\n}\n\nexport const ChessBoardInteractiveLayout: FC<ChessBoardInteractiveLayoutProps> = (props) => {\n const { \n size = BASE_BOARD_SIZE,\n boardConfig,\n selectedPos,\n possibleMoves,\n holdedFigure,\n grabbingPos,\n markedCells,\n onHasCheck,\n } = props;\n\n return (\n <div>\n <HoldedFigure \n holdedFigure={holdedFigure}\n grabbingPos={grabbingPos}\n boardConfig={boardConfig}\n />\n <div className={styles.interactiveLayout}>\n {getFilledArrayBySize(size).map((_, j) => \n <div className={styles.row} key={`interactive-layout-${j}`}>\n {getFilledArrayBySize(size).map((_, i) => (\n <div \n className={cn(styles.interactiveCell, { \n [styles.selectedCell]: selectedPos[0] === i && selectedPos[1] === j,\n [styles.markedCell]: checkIsPossibleMove(markedCells, [i, j]),\n [styles.checkedCell]: onHasCheck([i, j])\n })}\n key={`interactive-layout-${i}`}\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n backgroundColor: selectedPos[0] === i && selectedPos[1] === j \n ? boardConfig.selectedCellColor\n : 'transparent',\n border: selectedPos[0] === i && selectedPos[1] === j \n ? boardConfig.selectedCellBorder\n : 'none',\n boxShadow: checkIsPossibleMove(markedCells, [i, j])\n ? `inset 0 0 30px ${boardConfig.markedCellColor}`\n : onHasCheck([i, j]) ? `inset 0 0 30px ${boardConfig.checkedCellColor}`\n : 'none'\n }}\n >\n {selectedPos[0] === i && selectedPos[1] === j && holdedFigure && (\n <div \n className={cn([\n styles.figure,\n styles.holdedFigure,\n ], {\n [styles.bluredFigure]: grabbingPos[0] !== -1,\n })}\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n >{boardConfig.piecesMap[getFigureCSS(holdedFigure)]('80%')}</div>\n )}\n {checkIsPossibleMove(possibleMoves, [i, j]) && (\n <div \n className={styles.possibleMoveMark}\n style={{\n width: boardConfig.cellSize / FACTOR_FOR_SIZE_CIRCLE_MARK,\n height: boardConfig.cellSize / FACTOR_FOR_SIZE_CIRCLE_MARK,\n backgroundColor: boardConfig.circleMarkColor,\n }}\n />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React, { FC, useMemo } from 'react';\nimport styles from './ChessBoard.module.css';\nimport { calcAngle } from './utils';\n\ninterface ArrowProps {\n start: number[];\n end: number[];\n color: string;\n}\n\n// Используется для центрирования конца\n// стрелки относительно клетки\nconst ARROW_CORRECTION = 20;\n\nexport const Arrow: FC<ArrowProps> = (props) => {\n const { start, end, color } = props;\n\n const arrowLength = useMemo(\n () =>\n Math.sqrt(\n Math.pow(end[0] - start[0], 2) + Math.pow(end[1] - start[1], 2)\n ),\n [start, end]\n );\n\n if (arrowLength <= ARROW_CORRECTION * 3) {\n return null;\n }\n\n return (\n <div\n className={styles.arrow}\n style={{\n height: arrowLength - ARROW_CORRECTION,\n top: `${start[1]}px`,\n left: `${start[0]}px`,\n transformOrigin: `10px 0`,\n transform: `rotate(${calcAngle(start, end)}deg)`,\n backgroundColor: color,\n }}\n >\n <div \n className={styles.arrowEnd} \n style={{ borderLeftColor: color }}\n ></div>\n </div>\n );\n};\n","import React, { FC } from \"react\";\nimport { CellPos } from \"../JSChessEngine\";\nimport { Arrow } from \"./Arrow\";\nimport { ArrowCoords, ChessBoardConfig } from \"./models\";\nimport styles from './ChessBoard.module.css';\n\ntype ArrowLayoutType = {\n startArrowCoord: CellPos;\n arrowsCoords: ArrowCoords[];\n grabbingPos: CellPos;\n boardConfig: ChessBoardConfig;\n}\n\nexport const ArrowLayout: FC<ArrowLayoutType> = (props) => {\n const {\n startArrowCoord,\n arrowsCoords,\n grabbingPos,\n boardConfig\n } = props;\n\n return (\n <div className={styles.arrowsLayer}>\n {(startArrowCoord[0] > -1) && (grabbingPos[0] > -1) && (\n <Arrow start={startArrowCoord} end={grabbingPos} color={boardConfig.arrowColor} />\n )}\n {arrowsCoords.map((coords, i) => (\n <Arrow key={i} {...coords} color={boardConfig.arrowColor} />\n ))}\n </div>\n );\n}","import React, { FC, useCallback } from 'react';\nimport styles from './ChessBoard.module.css';\nimport { getFigureCSS, getFiguresByColor } from './utils';\nimport { Figure, FigureColor } from '../JSChessEngine';\nimport { ChessBoardConfig } from './models';\n\ninterface FigurePickerProps {\n boardConfig: ChessBoardConfig;\n color: FigureColor;\n forPawnTransform?: boolean;\n onSelect: (figure: Figure) => void;\n}\n\nexport const FigurePicker: FC<FigurePickerProps> = (props) => {\n const { boardConfig, color, onSelect, forPawnTransform = false } = props;\n\n const handleChange = useCallback(\n (figure: Figure) => {\n onSelect(figure);\n },\n [onSelect]\n );\n\n return (\n <div className={styles.figurePicker}>\n {getFiguresByColor(color, forPawnTransform).map((figure) => (\n <div\n key={figure.type}\n className={styles.figurePickerItem}\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n onClick={() => handleChange(figure)}\n >\n {boardConfig.piecesMap[getFigureCSS(figure)]('80%')}\n </div>\n ))}\n </div>\n );\n};\n","import { FENtoGameState, FigureColor, GameResult, MoveData, JSChessEngine } from \"../JSChessEngine\";\nimport React, { FC, useEffect } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { ChessBoardCellsLayout } from \"./ChessBoardCellsLayout\";\nimport { ChessBoardFiguresLayout } from \"./ChessBoardFiguresLayout\";\nimport { ChessBoardControlLayout } from \"./ChessBoardControlLayout\";\nimport { useChessBoardInteractive } from \"./useChessBoardInteractive\";\nimport { ChessBoardInteractiveLayout } from \"./ChessBoardInteractiveLayout\";\nimport { ChangeMove, ChessBoardConfig } from \"./models\";\nimport { ArrowLayout } from \"./ArrowLayout\";\nimport { FigurePicker } from \"./FigurePicker\";\nimport { correctGrabbingPosByScroll, correctGrabbingPosForArrow } from \"./utils\";\n\ntype ChessBoardProps = {\n FEN: string;\n onChange: (moveData: MoveData) => void;\n onEndGame: (result: GameResult) => void;\n change?: ChangeMove;\n reversed?: boolean;\n config?: Partial<ChessBoardConfig>;\n playerColor?: FigureColor;\n viewOnly?: boolean;\n}\n\nexport const ChessBoard: FC<ChessBoardProps> = (props) => {\n const { \n FEN, \n onChange,\n onEndGame,\n change, \n reversed,\n config,\n playerColor,\n viewOnly,\n } = props;\n\n const {\n fromPos,\n newMove,\n animated,\n boardConfig,\n markedCells,\n grabbingPos,\n currentColor,\n arrowsCoords,\n initialState,\n holdedFigure,\n grabbingCell,\n possibleMoves,\n startArrowCoord,\n showFigurePicker,\n markCell,\n handleClick,\n handleGrabEnd,\n handleGrabbing,\n endRenderArrow,\n setActualState,\n setPlayerColor,\n setCurrentColor,\n selectHoverFrom,\n setInitialState,\n setBoardReversed,\n startRenderArrow,\n reverseChessBoard,\n cleanAllForFigure,\n handleGrabbingCell,\n getHasCheckByCellPos,\n handleSelectFigurePicker,\n handleChangeFromExternal,\n } = useChessBoardInteractive({ onChange, onEndGame, config });\n\n const handleUpdateFEN = (FEN: string, reversed: boolean) => {\n const { boardState, currentColor } = FENtoGameState(FEN, reversed);\n cleanAllForFigure();\n setInitialState(boardState);\n setActualState(boardState);\n setCurrentColor(currentColor);\n setBoardReversed(reversed);\n };\n\n useEffect(() => {\n setPlayerColor(playerColor);\n }, [playerColor]);\n\n useEffect(() => {\n handleUpdateFEN(FEN, reversed);\n }, [FEN, reversed])\n\n useEffect(() => {\n if (!change) return;\n const reversedChange = reversed ? JSChessEngine.reverseMove(change.move) : change.move;\n handleChangeFromExternal(reversedChange);\n }, [change]);\n\n return (\n <div className={styles.chessBoard}>\n <ChessBoardCellsLayout boardConfig={boardConfig} />\n <ChessBoardFiguresLayout\n initialState={initialState}\n change={newMove}\n boardConfig={boardConfig}\n animated={animated}\n // reversed={reversed} While block this props\n />\n <ChessBoardInteractiveLayout\n selectedPos={fromPos}\n possibleMoves={possibleMoves}\n holdedFigure={holdedFigure}\n grabbingPos={correctGrabbingPosByScroll(grabbingPos)}\n markedCells={markedCells}\n boardConfig={boardConfig}\n onHasCheck={getHasCheckByCellPos}\n />\n <ArrowLayout \n arrowsCoords={arrowsCoords}\n startArrowCoord={startArrowCoord}\n grabbingPos={correctGrabbingPosForArrow(grabbingCell, boardConfig)}\n boardConfig={boardConfig}\n />\n <ChessBoardControlLayout\n boardConfig={boardConfig}\n onClick={(pos) => handleClick(pos, viewOnly)}\n onGrabStart={viewOnly ? () => {} : selectHoverFrom}\n onGrabStartRight={startRenderArrow}\n onGrabEnd={viewOnly ? () => {} : handleGrabEnd}\n onGrabEndRight={endRenderArrow}\n onGrabbing={viewOnly ? () => {} : handleGrabbing}\n onRightClick={markCell}\n onGrabbingCell={handleGrabbingCell}\n />\n {showFigurePicker && (\n <div className={styles.chessBoardFigurePicker}>\n <FigurePicker\n boardConfig={boardConfig}\n color={currentColor}\n forPawnTransform\n onSelect={handleSelectFigurePicker}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["DIRECTIONS_D","DIRECTIONS_VH","FIGURES_COUNTS","PAWNS_COUNT","KNIGHTS_COUNT","BISHOPS_COUNT","ROOKS_COUNT","QUEENS_COUNT","KINGS_COUNT","JSChessEngine","detectDrawByRepeatMoves","fenMoves","length","lastMoves","slice","firstFromSelectedMoves","lastFromSelectedMoves","firstResultsFENs","join","lastResultsFENs","getCastlingType","move","figure","touched","type","undefined","horizontalDiff","to","from","Math","abs","state","_ref","linesWithCheck","revese","i","j","nextPositions","pawnPossibleMoves","getNextMovesPawn","correctionPossibleMoves","bishopPossibleMoves","getNextMovesBishop","knigtPossibleMoves","getNextMovesKnight","rookPossibleMovese","getNextMovesRook","queenPossibleMoves","getNextMovesQueen","getNextMovesKing","prepareCells","concat","reversedCells","reverse","map","row","moveData","boardSize","reversedMove","FEN","moveVector","reversedMoveVector","pos","color","_state$pos$1$pos$0$fi","target","getFigureColor","targetColor","_state$target$1$targe","_state$target$1$targe2","_state$target$1$targe3","isKing","_state$target$1$targe4","_state$target$1$targe5","checkEnemy","_state$target$1$targe6","beated","_state$pos$1$pos$","figurePos","positions","count","_iterator","_createForOfIteratorHelperLoose","_step","done","value","checkEnemyKing","figureColor","kingPos","enemysPos","forEach","_","push","cell","checkInBorderBoard","hasFigure","typeMove","attackerPos","possibleMoves","getTeammateKingPos","getAllEnemysPositions","longrangeEnemysPos","filter","checkFigureIsLongRange","correctedPossibleMoves","kingBehidFigure","enemyPos","enemyType","direction","attackedLine","getFullAttackedLine","foundIndexKingPos","findIndex","foundIndexFigurePos","countFiguresBehindKing","getCountEnemys","possibleMove","attackedPos","preparedMoves","correctedMovesForProtectKing","checkPosBetweenAttckerAndKing","nextMove","attackedPositions","checkPossibleAttackTo","_ref2","pawnAttackedPos","calcPawnMoves","checkAttackedCellByPawn","bishopAttackedPos","calcDiagonalMoves","checkAttackedCell","targetPos","knigtAttackedPos","calcKnightMoves","rookAttackedPos","calcHorizontalAndVerticalMoves","queenAttachedPosD","queenAttachedPosVH","kingAttackedPos","calcKingMoves","onCheckPossible","onCheckFigureInCell","checkPossibleMoveTo","nextMoves","pawnColor","checkBeatedCell","checkPossiblePawnMoveToPos","possibleMovesReverse","possibleMovesForColor","castlingPath","_state$kingPos$1$king","allAttackedPositionsByEnemys","getAllAttckedPostionsByEnemys","foundCheckKingPos","find","castlingPathWithoutRook","rookPos","pop","_state$rookPos$1$rook","castlinPathWithFigures","castlingPos","isPossibleCastling","onlyAttacks","castlingMovesDefault","longCastlingMovesDefault","castlingMovesReversed","longCastlingMovesReversed","castlingMoves","longCastlingMoves","foundInAttacked","attackedMove","checkPossibleCastling","diagonalMoves","verticalAndHorizontalMoves","moves","activeColor","posTeammates","getAllTeammatesPositionsByColor","figureType","getFigureType","attackedLineBishop","hasAttackedEnemyKing","attackedLineRook","attackedLineQueen","pawnAttackedPositions","knigtAttackedPositions","currentFigure","prevPos","diffHorizontal","updatedCells","_extends","diff","fromPos","transformFigure","preparedState","fieldsWithFigures","cellsWithFigures","getFieldsWithFigures","resultType","figureForCommon","_cell$figure","_cell$figure2","countsNextMoves","getNextMoves","countsSumResult","reduce","prevValue","curentValue","winColor","flatState","filtred","_ref3","countsConfig","filtredCells","beatedCountsData","pawn","getFiguresCountByType","knight","bishop","rook","queen","LETTERS","FIGURES_LATTERS_NOTATIONS","white","king","black","LETTER_TO_FIGURE_MAP","P","N","B","R","Q","K","p","n","b","r","q","k","ALL_FIGURES","CHESS_BOARD_CONFIG","cellWhiteBg","cellBlackBg","cellSelectedBg","cellSize","figures","INITIAL_CELLS","getPositionByFEN","positionFEN","parseInt","letter","prepareCastlingByFEN","castlingNotation","includes","partFENtoState","notation","restoredState","stateRows","split","stateRow","rowCells","cellNotation","FENtoGameState","reversed","gameState","boardState","currentColor","_FEN$split","stateNotaion","FENcastling","beatedField","preparedStateNotation","isNaN","dotsCount","dotI","posBeatedCell","reverseChessBoard","getBeatedCellFENfromState","beatedFieldFEN","toString","getFENpositionsFromState","positionsFEN","emptyCellsCount","getFENcastlingFromState","whiteCastlingFEN","blackCastlingFEN","stateLastCell","replace","stateToFEN","countMoves","casttlingFEN","colorFEN","blackMoves","CHESS_PIECES_MAP","pawnWhite","size","React","width","height","viewBox","fill","xmlns","d","knightWhite","bishopWhite","rookWhite","queenWhite","kingWhite","pawnBlack","knightBlack","cx","cy","rx","ry","bishopBlack","rookBlack","queenBlack","kingBlack","DEFAULT_CELL_SIZE","FACTOR_FOR_SIZE_CIRCLE_MARK","DEFAULT_CIRCLE_MARK_COLOR","DEFAULT_WHITE_CELL_COLOR","DEFAULT_BLACK_CELL_COLOR","DEFAULT_SELECTED_CELL_COLOR","DEFAULT_SELECTED_CELL_BORDER","DEFAULT_ARROW_COLOR","DEFAULT_MARKED_CELL_COLOR","DEFAULT_CHECKED_CELL_COLOR","DEFAULT_PIECES_MAP","DEFAULT_CHESSBORD_CONFIG","circleMarkColor","whiteCellColor","blackCellColor","selectedCellColor","selectedCellBorder","arrowColor","markedCellColor","checkedCellColor","piecesMap","getFigureCSS","getIsLightCell","rowId","cellId","getFilledArrayBySize","array","mapCellsToFiguresArray","figuresWithPosition","position","checkIsPossibleMove","checkPositionsHas","posItem","checkIsCastlingMove","hasCheck","degrees","a","atan","PI","calcAngle","start","end","x","y","getChessBoardConfig","config","configKeyes","Object","keys","buildedConfig","key","getFiguresByColor","forPawnTransform","figureNamesForPawn","figureName","figureNames","correctGrabbingPosByScroll","window","scrollX","scrollY","correctGrabbingPosForArrow","boardConfig","BASE_BOARD_SIZE","ChessBoardCellsLayout","_ref$size","className","styles","style","backgroundColor","ChessBoardFiguresLayout","props","initialState","change","animated","_useState","useState","actualState","setActualState","useEffect","prevState","updatedState","transformTo","castlingType","kingIndex","rookIndex","foundAttactedFigure","foundFigureByPositionFrom","figuresLayout","_cn","cn","hiddenFigure","top","left","transition","ChessBoardControlLayout","_props$size","onClick","onGrabEnd","onGrabbing","onGrabStart","onRightClick","onGrabbingCell","onGrabEndRight","onGrabStartRight","pressed","setPressed","handleClick","cellPos","handleGrabStart","event","button","handleGrabEnd","handleGrabing","pageX","pageY","handleContextMenu","preventDefault","handleGrabbingCell","controlLayout","controlLayoutGrabbing","onMouseMove","controlCell","onMouseDown","onMouseUp","onContextMenu","useChessBoardInteractive","onChange","onEndGame","setBoardConfig","_useState2","setInitialState","_useState3","_useState4","setFromPos","_useState5","holdedFigure","setHoldedFigure","_useState6","grabbingPos","setGrabbingPos","_useState7","setPossibleMoves","_useState8","boardReversed","setBoardReversed","_useState9","setCurrentColor","_useState10","playerColor","setPlayerColor","_useState11","newMove","setNewMove","_useState12","setLinesWithCheck","_useState13","markedCells","setMarkedCells","_useState14","grabbingCell","setGrabbingCell","_useState15","clickedPos","setClickedPos","_useState16","clickedFigure","setClickedFigure","_useState17","clickPossibleMoves","setClickPossibleMoves","_useState18","startArrowCoord","setStartArrowCoord","_useState19","arrowsCoords","setArrowsCoords","_useState20","showFigurePicker","setShowFigurePicker","_useState21","setTargetPos","_useState22","setAnimated","clearFromPos","clearGrabbingPos","clearPossibleMoves","clearClickPossibleMoves","toggleCurrentColor","prevColor","clearMarkedCells","clearClickedPos","clearArrows","gameResult","getGameResult","cleanAllForFigure","cleanAllForClickedFigure","prevReversed","selectFigureFrom","selectClickFrom","_selectFigureFrom","selectHoverFrom","_selectFigureFrom2","moveFigure","inNextMoves","conditionForDoMove","_JSChessEngine$change","changeState","linesCheck","getLinesWithCheck","moveFigureByChange","_change$move","_JSChessEngine$change2","updatedChange","reverseMove","moveFigureByClick","_JSChessEngine$change3","moveFigureByExternalChange","_JSChessEngine$change4","handleGrabbing","withTransition","foundPosInPossible","_moveFigure","handleChangeFromExternal","_moveFigureByExternal","handleClickForTargetCell","_moveFigureByClick","viewOnly","markCell","prev","preparedPrev","foundCellIndex","getHasCheckByCellPos","startRenderArrow","startPos","endRenderArrow","arrows","copiedArrows","handleSelectFigurePicker","transformPawnToFigure","HoldedFigure","isCanShowFigure","zIndex","ChessBoardInteractiveLayout","selectedPos","onHasCheck","interactiveLayout","_cn2","interactiveCell","selectedCell","markedCell","checkedCell","border","boxShadow","bluredFigure","possibleMoveMark","ARROW_CORRECTION","Arrow","arrowLength","useMemo","sqrt","pow","arrow","transformOrigin","transform","arrowEnd","borderLeftColor","ArrowLayout","arrowsLayer","coords","FigurePicker","onSelect","_props$forPawnTransfo","handleChange","useCallback","figurePicker","figurePickerItem","ChessBoard","_useChessBoardInterac","handleUpdateFEN","_FENtoGameState","reversedChange","chessBoard","chessBoardFigurePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/JSChessEngine/JSChessEngine.ts","../src/JSChessEngine/chess.consts.ts","../src/JSChessEngine/FEN.utils.ts","../src/ChessBoard/chessPieciesMap.tsx","../src/ChessBoard/constants.ts","../src/ChessBoard/utils.ts","../src/ChessBoard/ChessBoardCellsLayout.tsx","../src/ChessBoard/ChessBoardFiguresLayout.tsx","../src/ChessBoard/ChessBoardControlLayout.tsx","../src/ChessBoard/useChessBoardInteractive.ts","../src/ChessBoard/HoldedFigure.tsx","../src/ChessBoard/ChessBoardInteractiveLayout.tsx","../src/ChessBoard/Arrow.tsx","../src/ChessBoard/ArrowLayout.tsx","../src/ChessBoard/FigurePicker.tsx","../src/ChessBoard/ChessBoard.tsx"],"sourcesContent":["export type FigureType =\n | 'pawn'\n | 'bishop'\n | 'knight'\n | 'rook'\n | 'queen'\n | 'king';\nexport type FigureColor = 'white' | 'black';\n\nexport type CellPos = [number, number];\n\nexport interface Figure {\n type: FigureType;\n color: FigureColor;\n touched?: boolean;\n position?: CellPos;\n}\n\nexport type CellColor = 'white' | 'black';\n\nexport interface Cell {\n figure?: Figure;\n beated?: boolean;\n}\n\nexport interface ChessBoardConfig {\n cellWhiteBg: string;\n cellBlackBg: string;\n cellSelectedBg: string;\n cellSize: number;\n figures: {\n black: { [figureType: string]: string };\n white: { [figureType: string]: string };\n };\n}\n\nexport interface MoveNotation {\n move: string;\n figure: Figure;\n stateFEN: string;\n}\n\nexport type MoveDirection =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-right'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-left';\n\nexport type MoveType =\n | 'move'\n | 'beat'\n | 'check'\n | 'double-check'\n | 'mat'\n | 'transform'\n | '0-0'\n | '0-0-0';\n\nexport type GameResultType =\n | 'mat'\n | 'pat'\n | 'draw'\n | 'timeout'\n | 'surrender'\n | undefined;\n\nexport interface GameResult {\n resultType: GameResultType;\n winColor?: FigureColor; // Если \"Пат\" или \"Ничья\" то нет цвета - победителя\n}\n\nexport type PawnMoveType = 'first' | 'default' | 'attack';\n\nexport interface MoveByPawn {\n pos: CellPos;\n typeMove: PawnMoveType;\n}\n\nexport interface MoveData {\n from: CellPos;\n to: CellPos;\n figure: Figure;\n type?: MoveType;\n FEN?: string;\n timeWhite?: number;\n timeBlack?: number;\n}\n\nexport interface BeatedCountsData {\n pawn: number;\n knight: number;\n bishop: number;\n rook: number;\n queen: number;\n}\n\nexport type CastlingType = '0-0' | '0-0-0';\n\nexport type OnCheckPossible = (\n state: Cell[][],\n figurePos: CellPos,\n targetPos: CellPos,\n) => boolean;\n\nconst DIRECTIONS_D: MoveDirection[] = [\n 'top-right',\n 'bottom-right',\n 'bottom-left',\n 'top-left',\n];\nconst DIRECTIONS_VH: MoveDirection[] = ['top', 'right', 'bottom', 'left'];\n\nconst FIGURES_COUNTS = {\n PAWNS_COUNT: 8,\n KNIGHTS_COUNT: 2,\n BISHOPS_COUNT: 2,\n ROOKS_COUNT: 2,\n QUEENS_COUNT: 1,\n KINGS_COUNT: 1,\n};\n\nexport class JSChessEngine {\n /**\n * Возвращает возможные ходы фигуры\n * @param state состояние доски\n * @param param1 позиция фигуры, которой хотим сыграть\n * @param linesWithCheck линии по которым есть шах на союзного короля\n * @param revese перевернута ли доска\n */\n static getNextMoves = (\n state: Cell[][],\n [i, j]: CellPos,\n linesWithCheck: CellPos[][],\n revese = false\n ): CellPos[] => {\n const figure = state[j][i].figure!;\n const { type } = figure;\n\n let nextPositions: CellPos[] = [];\n\n switch (type) {\n case 'pawn':\n const pawnPossibleMoves = JSChessEngine.getNextMovesPawn(\n state,\n [i, j],\n revese\n );\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n pawnPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'bishop':\n const bishopPossibleMoves = JSChessEngine.getNextMovesBishop(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n bishopPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'knight':\n const knigtPossibleMoves = JSChessEngine.getNextMovesKnight(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n knigtPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'rook':\n const rookPossibleMovese = JSChessEngine.getNextMovesRook(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n rookPossibleMovese,\n linesWithCheck\n );\n break;\n\n case 'queen':\n const queenPossibleMoves = JSChessEngine.getNextMovesQueen(state, [\n i,\n j,\n ]);\n nextPositions = JSChessEngine.correctionPossibleMoves(\n state,\n [i, j],\n queenPossibleMoves,\n linesWithCheck\n );\n break;\n\n case 'king':\n nextPositions = JSChessEngine.getNextMovesKing(state, [i, j], revese);\n break;\n }\n\n return nextPositions;\n };\n\n /**\n * Возвращает первернутое состояние доски\n * @param state состояние доски\n */\n static reverseChessBoard = (state: Cell[][]) => {\n const prepareCells = [...state];\n const reversedCells = [...prepareCells.reverse()];\n\n return reversedCells.map((row) => [...row].reverse());\n };\n\n /**\n * Обновляет данные хода для того чтобы\n * можно было применить ход к перевернутой доске\n * @param moveData данные хода\n * @param boardSize размер доски\n */\n static reverseMove = (moveData: MoveData, boardSize = 8) => {\n const { from, to, figure, type } = moveData;\n\n const reversedMove: MoveData = {\n figure,\n from: [boardSize - (from[0] + 1), boardSize - (from[1] + 1)],\n to: [boardSize - (to[0] + 1), boardSize - (to[1] + 1)],\n type,\n FEN: moveData.FEN,\n };\n\n return reversedMove;\n };\n\n /**\n * Возвращет перевернутое значение для начала и конца хода фигуры\n * Использовать при подсветке хода если доска перевернута\n * @param moveVector Координаты начала и конца хода фигуры\n * @param boardSize размер доски\n */\n static reverseMoveVector = (moveVector: CellPos[], boardSize = 8) => {\n const [from, to] = moveVector;\n const reversedMoveVector = [\n [boardSize - (from[0] + 1), boardSize - (from[1] + 1)],\n [boardSize - (to[0] + 1), boardSize - (to[1] + 1)],\n ];\n\n return reversedMoveVector;\n };\n\n /**\n * Проверка на то что позиция находится в пределах доски\n * @param state состояние доски\n * @param pos проверяемая позиция\n */\n static checkInBorderBoard = (state: Cell[][], pos: CellPos) => {\n return (\n pos[0] >= 0 &&\n pos[0] < state.length &&\n pos[1] >= 0 &&\n pos[1] < state.length\n );\n };\n\n /**\n * Возвращает цвет фигуры\n * @param state состояние доски\n * @param pos позиция фигуры\n */\n static getFigureColor = (state: Cell[][], pos: CellPos) => {\n return state[pos[1]][pos[0]].figure!.color;\n };\n\n /**\n * Возвращает тип фигры\n * @param state состояние доски\n * @param pos позиция фигуры\n */\n static getFigureType = (state: Cell[][], pos: CellPos) => {\n return state[pos[1]][pos[0]].figure?.type;\n };\n\n /**\n * Проверка находится ли в указанной клетке вражеская фигура\n * @param state состояние доски\n * @param pos положение фигуры союзного цвета\n * @param target положение фигуры - цели\n */\n static checkEnemy = (state: Cell[][], pos: CellPos, target: CellPos) => {\n const color = JSChessEngine.getFigureColor(state, pos);\n const targetColor = state[target[1]][target[0]]?.figure?.color;\n\n return !!targetColor && targetColor !== color;\n };\n\n /**\n * Проверка находится ли в указанной клетке союзная фигура\n * @param state состояние доски\n * @param pos положение фигуры союзного цвета\n * @param target положение фигуры - цели\n */\n static checkTeammate = (state: Cell[][], pos: CellPos, target: CellPos) => {\n const color = JSChessEngine.getFigureColor(state, pos);\n const targetColor = state[target[1]][target[0]].figure?.color;\n\n return !!targetColor && targetColor === color;\n };\n\n /**\n * Проверка на то что фигура-цель вражеский король\n * @param state состояние доски\n * @param pos положение фигуры союзного цвета\n * @param target положение фигуры - цели\n */\n static checkEnemyKing = (\n state: Cell[][],\n pos: CellPos,\n target: CellPos\n ) => {\n const isKing = state[target[1]][target[0]]?.figure?.type === 'king';\n\n if (!isKing) return false;\n\n return JSChessEngine.checkEnemy(state, pos, target);\n };\n\n /**\n * Проверяет битая ли клетка, клетка становится битой после того\n * как пешка сделает ход на две клетки веперед\n * @param state состояние доски\n * @param target позиция проверяемой клетки\n */\n static checkBeatedCell = (state: Cell[][], target: CellPos) => {\n return !!state[target[1]][target[0]]?.beated;\n };\n\n /**\n * Возвращает есть ли фигура в указаной позиции\n * @param state состояние доски\n * @param pos проверяемая позиция\n * @returns\n */\n static hasFigure = (state: Cell[][], pos: CellPos) => {\n return !!state[pos[1]][pos[0]]?.figure;\n };\n\n /**\n * Проверяет дальнобойная ли фигура\n * слон, ладья или ферзь\n * @param state состояние доски\n * @param figurePos позиция фигуры\n */\n static checkFigureIsLongRange = (state: Cell[][], figurePos: CellPos) => {\n const { figure } = state[figurePos[1]][figurePos[0]];\n return (\n figure?.type === 'bishop' ||\n figure?.type === 'rook' ||\n figure?.type === 'queen'\n );\n };\n\n /**\n * Возвращает количество вражеских которые можно атаковать (кроме короля) фигур из массива позиций\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param positions проверяемые позиции\n */\n static getCountEnemys = (\n state: Cell[][],\n figurePos: CellPos,\n positions: CellPos[]\n ) => {\n let count = 0;\n\n for (let pos of positions) {\n if (JSChessEngine.checkEnemyKing(state, figurePos, pos)) break;\n\n if (\n JSChessEngine.checkEnemy(state, figurePos, pos)\n && !JSChessEngine.checkEnemyKing(state, figurePos, pos)\n ) count += 1;\n }\n\n return count;\n };\n\n /**\n * Возвращает позицию союзного короля\n * @param state состояние доски\n * @param figurePos позиция фигуры\n */\n static getTeammateKingPos = (state: Cell[][], figurePos: CellPos) => {\n const figureColor = JSChessEngine.getFigureColor(state, figurePos);\n\n let kingPos: CellPos | undefined = undefined;\n\n // Используется цикл для того чтобы можно было остановить поиск\n for (let j = 0; j < state.length; j++) {\n const row = state[j];\n\n for (let i = 0; i < row.length; i++) {\n const { figure } = row[i];\n\n if (figure?.color === figureColor && figure.type === 'king') {\n kingPos = [i, j];\n break;\n }\n }\n\n if (!!kingPos) {\n break;\n }\n }\n\n return kingPos;\n };\n\n /**\n * Возвращает все клетки с вражескими фигурами\n * @param state состояние доски\n * @param pos позиция союзной фигуры\n */\n static getAllEnemysPositions = (state: Cell[][], pos: CellPos) => {\n const enemysPos: CellPos[] = [];\n\n state.forEach((row, j) =>\n row.forEach((_, i) => {\n JSChessEngine.checkEnemy(state, pos, [i, j]) && enemysPos.push([i, j]);\n })\n );\n\n return enemysPos;\n };\n\n /**\n * Возвращает позиции фигур-союзников по цвету\n * @param state состояние доски\n * @param color цвет по которому ищем фигуры-союзники\n */\n static getAllTeammatesPositionsByColor = (\n state: Cell[][],\n color: FigureColor\n ) => {\n const positions: CellPos[] = [];\n\n state.forEach((row, j) =>\n row.forEach((cell, i) => {\n if (!!cell.figure && cell.figure.color === color) {\n positions.push([i, j]);\n }\n })\n );\n\n return positions;\n };\n\n /**\n * Полная проверка возможности хода для фигур: pawn, knigt, bishop, rook, queen\n * @param state состояния доски\n * @param pos положение фигуры союзного цвета\n * @param target позиция клетки - цели\n * @returns\n */\n static checkPossibleMoveTo = (\n state: Cell[][],\n pos: CellPos,\n target: CellPos\n ) => {\n // Если позиция находится за пределами доски, то сразу false\n return (\n JSChessEngine.checkInBorderBoard(state, target) &&\n // Если в клетке - цели нет фигуры\n (!JSChessEngine.hasFigure(state, target) ||\n // ИЛИ Если есть фигура и эта фигура вражеская и не король\n (JSChessEngine.hasFigure(state, target) &&\n JSChessEngine.checkEnemy(state, pos, target) &&\n !JSChessEngine.checkEnemyKing(state, pos, target)))\n );\n };\n\n /**\n * Прооверяет возможность атаки клетки\n * Если в клетке вражеская фигура, считает ее атакованной\n * Необходима для проверки нахождения вражеского короля за атакованной фигурой\n * @param state состояние доски\n * @param figurePos позиция фигураы\n * @param target клетака под атакой\n */\n static checkPossibleAttackTo = (\n state: Cell[][],\n figurePos: CellPos,\n target: CellPos\n ) => {\n // Если позиция находится за пределами доски, то сразу false\n return (\n JSChessEngine.checkInBorderBoard(state, target) &&\n (!JSChessEngine.hasFigure(state, target) ||\n JSChessEngine.checkEnemy(state, figurePos, target))\n );\n };\n\n /**\n * Проверка находится ли поле под атакой вражеской фигуры\n * (Используется для расчета возможных ходов для короля)\n * @param state состояние доски\n * @param pos позиция фигуры\n * @param target проверяемая клетка\n */\n static checkAttackedCell = (\n state: Cell[][],\n pos: CellPos,\n target: CellPos\n ) => {\n // Если позиция находится за пределами доски, то сразу false\n return JSChessEngine.checkInBorderBoard(state, target);\n };\n\n /**\n * Проверяет атакованные поля вражеской пешкой\n * (используется для получения возможных ходово для короля)\n * @param state состояние доски\n * @param pos текущая позиция пешки\n * @param target клетка - цель\n */\n static checkAttackedCellByPawn = (\n state: Cell[][],\n pos: CellPos,\n target: MoveByPawn\n ) => {\n switch (target.typeMove) {\n case 'default':\n case 'first':\n return false;\n case 'attack':\n return JSChessEngine.checkInBorderBoard(state, target.pos);\n }\n };\n\n /**\n * Проверяет находится ли позиция между атакованным королем\n * и атакующей фигурой\n * @param state состояние доски\n * @param pos проверяемая позиция\n * @param kingPos позиция союзного короля\n * @param attackerPos позиция атакующей фигуры\n */\n static checkPosBetweenAttckerAndKing = (\n state: Cell[][],\n pos: CellPos,\n kingPos: CellPos,\n attackerPos: CellPos\n ) => {\n // Проверка горизонтальных и вертикальных атак\n if (pos[0] === attackerPos[0] && pos[0] === kingPos[0]) {\n return (\n (pos[1] > kingPos[1] && pos[1] < attackerPos[1]) ||\n (pos[1] > attackerPos[1] && pos[1] < kingPos[1])\n );\n }\n\n if (pos[1] === attackerPos[1] && pos[1] === kingPos[1]) {\n return (\n (pos[0] > kingPos[0] && pos[0] < attackerPos[0]) ||\n (pos[0] > attackerPos[0] && pos[0] < kingPos[0])\n );\n }\n\n // Проверка диагональных атак\n if (\n (pos[1] > kingPos[1] && pos[1] < attackerPos[1]) ||\n (pos[1] > attackerPos[1] && pos[1] < kingPos[1])\n ) {\n return (\n (pos[0] > kingPos[0] && pos[0] < attackerPos[0]) ||\n (pos[0] > attackerPos[0] && pos[0] < kingPos[0])\n );\n }\n\n if (\n (pos[0] > kingPos[0] && pos[0] < attackerPos[0]) ||\n (pos[0] > attackerPos[0] && pos[0] < kingPos[0])\n ) {\n return (\n (pos[1] > kingPos[1] && pos[1] < attackerPos[1]) ||\n (pos[1] > attackerPos[1] && pos[1] < kingPos[1])\n );\n }\n\n return false;\n };\n\n /**\n * Корректирует возможные ходы фигуры в зависимости от того находится ли\n * фигура под атакой и стоит ли на линии атаки король за фигурой\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param possibleMoves возможные ходы фигуры\n * @param linesWithCheck массив линий по которым есть шах на союзного короля\n */\n static correctionPossibleMoves = (\n state: Cell[][],\n figurePos: CellPos,\n possibleMoves: CellPos[],\n linesWithCheck: CellPos[][]\n ) => {\n const kingPos = JSChessEngine.getTeammateKingPos(state, figurePos)!;\n\n const enemysPos = JSChessEngine.getAllEnemysPositions(state, figurePos);\n\n // Находим все дальнобойные фигуры противника,\n // так как только они могут атаковать на протяженной дистанции\n const longrangeEnemysPos = enemysPos.filter((pos) =>\n JSChessEngine.checkFigureIsLongRange(state, pos)\n );\n\n const correctedPossibleMoves: CellPos[] = [];\n\n let kingBehidFigure = false;\n\n longrangeEnemysPos.forEach((enemyPos) => {\n const enemyType = state[enemyPos[1]][enemyPos[0]].figure!.type;\n\n switch (enemyType) {\n case 'bishop':\n DIRECTIONS_D.forEach((direction) => {\n if (!kingBehidFigure) {\n const attackedLine = JSChessEngine.getFullAttackedLine(\n state,\n enemyPos,\n direction\n );\n\n // Ищем индекс позиции короля\n const foundIndexKingPos = attackedLine.findIndex(\n (pos) => pos[0] === kingPos[0] && pos[1] === kingPos[1]\n );\n\n // Ищем позицию фигуры на линии атаки\n const foundIndexFigurePos = attackedLine.findIndex(\n (pos) => pos[0] === figurePos[0] && pos[1] === figurePos[1]\n );\n\n const countFiguresBehindKing = JSChessEngine.getCountEnemys(\n state,\n enemyPos,\n attackedLine\n );\n\n // Если индексы найдены и индекс короля больше чем индекс фигуры на линии атаки\n // то корректируем возможные движения фигуры\n kingBehidFigure =\n foundIndexKingPos > -1 &&\n foundIndexFigurePos > -1 &&\n foundIndexKingPos > foundIndexFigurePos &&\n countFiguresBehindKing === 1;\n\n if (kingBehidFigure) {\n // Оставляем только те позиции которые есть и в possibleMoves и в attackedLine\n possibleMoves.forEach((possibleMove) => {\n // Включаем позиции атакующей фигуры так как ее можно съесть\n [...attackedLine, enemyPos].forEach((attackedPos) => {\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1]\n ) {\n correctedPossibleMoves.push(possibleMove);\n }\n });\n });\n }\n }\n });\n\n break;\n\n case 'rook':\n if (kingBehidFigure) {\n break;\n }\n\n DIRECTIONS_VH.forEach((direction) => {\n if (!kingBehidFigure) {\n const attackedLine = JSChessEngine.getFullAttackedLine(\n state,\n enemyPos,\n direction\n );\n\n // Ищем индекс позиции короля\n const foundIndexKingPos = attackedLine.findIndex(\n (pos) => pos[0] === kingPos[0] && pos[1] === kingPos[1]\n );\n\n // Ищем позицию фигуры на линии атаки\n const foundIndexFigurePos = attackedLine.findIndex(\n (pos) => pos[0] === figurePos[0] && pos[1] === figurePos[1]\n );\n\n const countFiguresBehindKing = JSChessEngine.getCountEnemys(\n state,\n enemyPos,\n attackedLine\n );\n\n // Если индексы найдены и индекс короля больше чем индекс фигуры на линии атаки\n // то корректируем возможные движения фигуры\n kingBehidFigure =\n foundIndexKingPos > -1 &&\n foundIndexFigurePos > -1 &&\n foundIndexKingPos > foundIndexFigurePos &&\n countFiguresBehindKing === 1;\n\n if (kingBehidFigure) {\n // Оставляем только те позиции которые есть и в possibleMoves и в attackedLine\n possibleMoves.forEach((possibleMove) => {\n // Включаем позиции атакующей фигуры так как ее можно съесть\n [...attackedLine, enemyPos].forEach((attackedPos) => {\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1]\n ) {\n correctedPossibleMoves.push(possibleMove);\n }\n });\n });\n }\n }\n });\n\n break;\n\n case 'queen':\n if (kingBehidFigure) {\n break;\n }\n\n [...DIRECTIONS_D, ...DIRECTIONS_VH].forEach((direction) => {\n if (!kingBehidFigure) {\n const attackedLine = JSChessEngine.getFullAttackedLine(\n state,\n enemyPos,\n direction\n );\n\n // Ищем индекс позиции короля\n const foundIndexKingPos = attackedLine.findIndex(\n (pos) => pos[0] === kingPos[0] && pos[1] === kingPos[1]\n );\n\n // Ищем позицию фигуры на линии атаки\n const foundIndexFigurePos = attackedLine.findIndex(\n (pos) => pos[0] === figurePos[0] && pos[1] === figurePos[1]\n );\n\n const countFiguresBehindKing = JSChessEngine.getCountEnemys(\n state,\n enemyPos,\n attackedLine\n );\n\n // Если индексы найдены и индекс короля больше чем индекс фигуры на линии атаки\n // то корректируем возможные движения фигуры\n kingBehidFigure =\n foundIndexKingPos > -1 &&\n foundIndexFigurePos > -1 &&\n foundIndexKingPos > foundIndexFigurePos &&\n countFiguresBehindKing === 1;\n\n if (kingBehidFigure) {\n // Оставляем только те позиции которые есть и в possibleMoves и в attackedLine\n possibleMoves.forEach((possibleMove) => {\n // Включаем позиции атакующей фигуры так как ее можно съесть\n [...attackedLine, enemyPos].forEach((attackedPos) => {\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1]\n ) {\n correctedPossibleMoves.push(possibleMove);\n }\n });\n });\n }\n }\n });\n\n break;\n }\n });\n\n const preparedMoves = kingBehidFigure\n ? correctedPossibleMoves\n : possibleMoves;\n\n // Если линия с шахом только одна\n // то фигура способна зашитить короля\n if (linesWithCheck.length === 1) {\n const correctedMovesForProtectKing: CellPos[] = [];\n\n const attackedLine = linesWithCheck[0];\n\n // Так как добавляется последней в линию атаки\n // TODO: поправить, так как непонятно\n const attackerPos = attackedLine[attackedLine.length - 1];\n\n attackedLine.forEach((attackedPos) => {\n preparedMoves.forEach((possibleMove) => {\n // Если возможный ход совпдает с одной из атакованных позций\n // Значит фигуры может прикрыть короля от шаха\n\n if (\n attackedPos[0] === possibleMove[0] &&\n attackedPos[1] === possibleMove[1] &&\n // Если фигура находится перед королем\n (JSChessEngine.checkPosBetweenAttckerAndKing(\n state,\n possibleMove,\n kingPos,\n attackerPos\n ) ||\n // Или в атакованной позиции есть атакующая фигура\n JSChessEngine.checkEnemy(state, kingPos, possibleMove))\n // Необходимо добавить условие для того чтобы фигура - защитник\n // Обязательно находилась перед королем\n ) {\n correctedMovesForProtectKing.push(possibleMove);\n }\n });\n });\n\n return correctedMovesForProtectKing;\n }\n\n // Если двойной и более шах, то одна фигура не способна\n // защитить от нескольких линий атак\n // следовательно не можем делать ход фигурой\n if (linesWithCheck.length > 1) return [];\n\n // Атаки на короля нет, фигуры могут свободно ходить\n return preparedMoves;\n };\n\n /**\n * Возвращает всю атакованную линию дальнобойной фигурой\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param direction направление атаки\n */\n static getFullAttackedLine = (\n state: Cell[][],\n figurePos: CellPos,\n direction: MoveDirection\n ) => {\n let nextMove: CellPos;\n\n const attackedPositions: CellPos[] = [];\n\n switch (direction) {\n case 'top-right':\n nextMove = [figurePos[0] + 1, figurePos[1] - 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] + 1, nextMove[1] - 1];\n }\n\n break;\n\n case 'bottom-right':\n nextMove = [figurePos[0] + 1, figurePos[1] + 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] + 1, nextMove[1] + 1];\n }\n\n break;\n\n case 'bottom-left':\n nextMove = [figurePos[0] - 1, figurePos[1] + 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] - 1, nextMove[1] + 1];\n }\n\n break;\n\n case 'top-left':\n nextMove = [figurePos[0] - 1, figurePos[1] - 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] - 1, nextMove[1] - 1];\n }\n\n break;\n\n case 'top':\n nextMove = [figurePos[0], figurePos[1] - 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0], nextMove[1] - 1];\n }\n\n break;\n\n case 'right':\n nextMove = [figurePos[0] + 1, figurePos[1]];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] + 1, nextMove[1]];\n }\n\n break;\n\n case 'bottom':\n nextMove = [figurePos[0], figurePos[1] + 1];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0], nextMove[1] + 1];\n }\n\n break;\n\n case 'left':\n nextMove = [figurePos[0] - 1, figurePos[1]];\n\n while (\n JSChessEngine.checkPossibleAttackTo(state, figurePos, nextMove)\n ) {\n attackedPositions.push(nextMove);\n nextMove = [nextMove[0] - 1, nextMove[1]];\n }\n\n break;\n }\n\n return attackedPositions;\n };\n\n /**\n * Возвращает все атакованные врагом позиции\n * используется для проверки ходов короля\n * @param state состояние доски\n * @param figurePos позиция фигуры\n * @param reverse перевернута ли доска\n */\n static getAllAttckedPostionsByEnemys = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean\n ) => {\n const enemysPos = JSChessEngine.getAllEnemysPositions(state, figurePos);\n let attackedPositions: CellPos[] = [];\n\n enemysPos.forEach(([i, j]) => {\n const figure = state[j][i].figure!;\n const { type } = figure;\n\n switch (type) {\n case 'pawn':\n const pawnAttackedPos = JSChessEngine.calcPawnMoves(\n state,\n [i, j],\n reverse,\n JSChessEngine.checkAttackedCellByPawn\n );\n\n attackedPositions = [...attackedPositions, ...pawnAttackedPos];\n break;\n\n case 'bishop':\n const bishopAttackedPos = JSChessEngine.calcDiagonalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n attackedPositions = [...attackedPositions, ...bishopAttackedPos];\n break;\n\n case 'knight':\n const knigtAttackedPos = JSChessEngine.calcKnightMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell\n );\n\n attackedPositions = [...attackedPositions, ...knigtAttackedPos];\n break;\n\n case 'rook':\n const rookAttackedPos = JSChessEngine.calcHorizontalAndVerticalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n attackedPositions = [...attackedPositions, ...rookAttackedPos];\n break;\n\n case 'queen':\n const queenAttachedPosD = JSChessEngine.calcDiagonalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n const queenAttachedPosVH =\n JSChessEngine.calcHorizontalAndVerticalMoves(\n state,\n [i, j],\n JSChessEngine.checkAttackedCell,\n (state, _, targetPos) =>\n JSChessEngine.hasFigure(state, targetPos) &&\n !JSChessEngine.checkEnemyKing(state, [i, j], targetPos)\n );\n\n attackedPositions = [\n ...attackedPositions,\n ...queenAttachedPosD,\n ...queenAttachedPosVH,\n ];\n break;\n\n case 'king':\n const kingAttackedPos = JSChessEngine.calcKingMoves(\n state,\n [i, j],\n reverse,\n true\n );\n\n attackedPositions = [...attackedPositions, ...kingAttackedPos];\n break;\n }\n });\n\n return attackedPositions;\n };\n\n /**\n * Возвращает возможные позиция для движения по диагонали\n * для Слона и Ферзя\n * @param state состояние доски\n * @param figurePos текущая позиция фигуры\n */\n static calcDiagonalMoves = (\n state: Cell[][],\n figurePos: CellPos,\n onCheckPossible: OnCheckPossible = JSChessEngine.checkPossibleMoveTo,\n onCheckFigureInCell: OnCheckPossible = JSChessEngine.checkEnemy\n ) => {\n const nextMoves: CellPos[] = [];\n\n // Влево-вверх\n let nextMove: CellPos = [figurePos[0] - 1, figurePos[1] - 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] - 1, nextMove[1] - 1];\n }\n\n // Вправо-вверх\n nextMove = [figurePos[0] + 1, figurePos[1] - 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] + 1, nextMove[1] - 1];\n }\n\n // Влево-вниз\n nextMove = [figurePos[0] + 1, figurePos[1] + 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] + 1, nextMove[1] + 1];\n }\n\n // Вправо-вниз\n nextMove = [figurePos[0] - 1, figurePos[1] + 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] - 1, nextMove[1] + 1];\n }\n\n return nextMoves;\n };\n\n /**\n * Возвращает возможные позиция для движения по горизонтали и вертикали\n * для Ладьи и Ферзя\n * @param state состяние доски\n * @param figurePos\n * @returns\n */\n static calcHorizontalAndVerticalMoves = (\n state: Cell[][],\n figurePos: CellPos,\n onCheckPossible: OnCheckPossible = JSChessEngine.checkPossibleMoveTo,\n onCheckFigureInCell: OnCheckPossible = JSChessEngine.checkEnemy\n ) => {\n const nextMoves: CellPos[] = [];\n\n // Влево\n let nextMove: CellPos = [figurePos[0] - 1, figurePos[1]];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] - 1, nextMove[1]];\n }\n\n // Вверх\n nextMove = [figurePos[0], figurePos[1] - 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0], nextMove[1] - 1];\n }\n\n // Вправо\n nextMove = [figurePos[0] + 1, figurePos[1]];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0] + 1, nextMove[1]];\n }\n\n // Вниз\n nextMove = [figurePos[0], figurePos[1] + 1];\n\n while (onCheckPossible(state, figurePos, nextMove)) {\n nextMoves.push([...nextMove]);\n\n if (onCheckFigureInCell(state, figurePos, nextMove)) {\n break;\n }\n\n nextMove = [nextMove[0], nextMove[1] + 1];\n }\n\n return nextMoves;\n };\n\n /**\n * Возвращает возможные ходы для коня\n * @param state состояние доски\n * @param figurePos текущая позиция фигуры\n * @returns\n */\n static calcKnightMoves = (\n state: Cell[][],\n figurePos: CellPos,\n onCheckPossible: OnCheckPossible = JSChessEngine.checkPossibleMoveTo\n ) => {\n const nextMoves: CellPos[] = [];\n\n const possibleMoves: CellPos[] = [\n [figurePos[0] + 1, figurePos[1] - 2],\n [figurePos[0] - 1, figurePos[1] - 2],\n [figurePos[0] - 2, figurePos[1] + 1],\n [figurePos[0] - 2, figurePos[1] - 1],\n [figurePos[0] + 2, figurePos[1] + 1],\n [figurePos[0] + 2, figurePos[1] - 1],\n [figurePos[0] + 1, figurePos[1] + 2],\n [figurePos[0] - 1, figurePos[1] + 2],\n ];\n\n possibleMoves.forEach((move) => {\n if (onCheckPossible(state, figurePos, move)) {\n nextMoves.push(move);\n }\n });\n\n return nextMoves;\n };\n\n /**\n * Проверяет возможность пешки пойти на клетку - цель\n * @param state состояние доски\n * @param pos текущая позиция пешки\n * @param target клетка - цель\n * @param pawnColor цвет пешки вычисленный заранее\n * @param reverse перевернута ли доска\n */\n static checkPossiblePawnMoveToPos = (\n state: Cell[][],\n pos: CellPos,\n target: MoveByPawn,\n pawnColor: FigureColor,\n reverse: boolean\n ) => {\n switch (target.typeMove) {\n case 'first':\n if (\n (pawnColor === 'white' && reverse) ||\n (pawnColor === 'black' && !reverse)\n ) {\n return (\n pos[1] === 1 &&\n !JSChessEngine.hasFigure(state, [\n target.pos[0],\n target.pos[1] - 1,\n ]) &&\n !JSChessEngine.hasFigure(state, target.pos)\n );\n }\n\n return (\n pos[1] === state.length - 2 &&\n !JSChessEngine.hasFigure(state, [target.pos[0], target.pos[1] + 1]) &&\n !JSChessEngine.hasFigure(state, target.pos)\n );\n\n case 'default':\n return !JSChessEngine.hasFigure(state, target.pos);\n\n case 'attack':\n return (\n (JSChessEngine.checkInBorderBoard(state, target.pos) &&\n JSChessEngine.hasFigure(state, target.pos) &&\n JSChessEngine.checkEnemy(state, pos, target.pos) &&\n !JSChessEngine.checkEnemyKing(state, pos, target.pos)) ||\n // Если поле битое\n (JSChessEngine.checkInBorderBoard(state, target.pos) &&\n JSChessEngine.checkBeatedCell(state, target.pos))\n );\n }\n };\n\n /**\n * Возвращает возможные позиции для пешки\n * @param state состояние доски\n * @param figurePos текущее положение пешки\n * @param revese перевернута ли доска\n * @returns\n */\n static calcPawnMoves = (\n state: Cell[][],\n figurePos: CellPos,\n revese: boolean,\n onCheckPossible:\n | typeof JSChessEngine.checkPossiblePawnMoveToPos\n | typeof JSChessEngine.checkAttackedCellByPawn = JSChessEngine.checkPossiblePawnMoveToPos\n ) => {\n const pawnColor = JSChessEngine.getFigureColor(state, figurePos);\n const nextMoves: CellPos[] = [];\n\n // Возможные позиции для пешки\n const possibleMoves: MoveByPawn[] = [\n // Первый ход\n { typeMove: 'first', pos: [figurePos[0], figurePos[1] - 2] },\n\n // Обычный ход вперед\n { typeMove: 'default', pos: [figurePos[0], figurePos[1] - 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] - 1, figurePos[1] - 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] + 1, figurePos[1] - 1] },\n ];\n\n // В обычном состоянии это возможные ходы за черных\n // с параметром reverse = true возможные ходы за белых\n const possibleMovesReverse: MoveByPawn[] = [\n // Первый ход\n { typeMove: 'first', pos: [figurePos[0], figurePos[1] + 2] },\n\n // Обычный ход вперед\n { typeMove: 'default', pos: [figurePos[0], figurePos[1] + 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] - 1, figurePos[1] + 1] },\n\n // Атака\n { typeMove: 'attack', pos: [figurePos[0] + 1, figurePos[1] + 1] },\n ];\n\n // Если цвет пещки белый и доска не перевернута ИЛИ цвет пешки черный и доска перевернута => используем обычные ходы\n // Иначе используем перевернутые ходы\n const possibleMovesForColor =\n (pawnColor === 'white' && !revese) || (pawnColor === 'black' && revese)\n ? possibleMoves\n : possibleMovesReverse;\n\n possibleMovesForColor.forEach((move) => {\n onCheckPossible(state, figurePos, move, pawnColor, revese) &&\n nextMoves.push(move.pos);\n });\n\n return nextMoves;\n };\n\n /**\n * Проверяет возможна ли рокеровка\n * @param state состояние доски\n * @param kingPos позиция короля\n * @param reverse перевенута ли доска\n */\n static checkPossibleCastling = (\n state: Cell[][],\n kingPos: CellPos,\n castlingPath: CellPos[],\n reverse: boolean\n ) => {\n // Если короля перемещали - рокеровка невозможна\n if (\n !!state[kingPos[1]][kingPos[0]].figure &&\n state[kingPos[1]][kingPos[0]].figure?.touched\n )\n return false;\n\n // Проверка на атакованы ли поля для рокеровки\n // Если хоть одно поле кроме для рокеровки атаковано (кроме поля на котором ладья)\n // и если атакован король\n // то рокеровка невозможна\n const allAttackedPositionsByEnemys =\n JSChessEngine.getAllAttckedPostionsByEnemys(state, kingPos, reverse);\n\n const foundCheckKingPos = allAttackedPositionsByEnemys.find(\n (attackedPos) =>\n attackedPos[0] === kingPos[0] && attackedPos[1] === kingPos[1]\n );\n\n if (!!foundCheckKingPos) return false;\n\n // Если ладью перемещали - рокеровка невозможна\n // figurePos[1] - горизонталь на которой изначально находится короля\n // на ней же должны находиться ладьи\n const castlingPathWithoutRook = [...castlingPath];\n const rookPos = castlingPathWithoutRook.pop();\n\n if (\n !state[rookPos![1]][rookPos![0]] ||\n !state[rookPos![1]][rookPos![0]].figure\n )\n return false;\n\n if (\n !!state[rookPos![1]][rookPos![0]].figure &&\n state[rookPos![1]][rookPos![0]].figure?.touched\n )\n return false;\n\n // Если на пути рокеровки есть фигуры - рокеровка невохможна\n const castlinPathWithFigures = castlingPathWithoutRook.filter(\n (castlingPos) => JSChessEngine.hasFigure(state, castlingPos)\n );\n\n if (castlinPathWithFigures.length > 0) return false;\n\n let isPossibleCastling = true;\n\n for (let i = 0; i < allAttackedPositionsByEnemys.length; i++) {\n const attackedPos = allAttackedPositionsByEnemys[i];\n\n for (let j = 0; j < castlingPathWithoutRook.length; j++) {\n const castlingPos = castlingPathWithoutRook[j];\n\n if (\n castlingPos[0] === attackedPos[0] &&\n castlingPos[1] === attackedPos[1]\n ) {\n isPossibleCastling = false;\n break;\n }\n }\n\n if (!isPossibleCastling) break;\n }\n\n return isPossibleCastling;\n };\n\n /**\n * Возвращает возможные ходы для короля\n * @param state состояние доски\n * @param figurePos позиция короля\n * @returns\n */\n static calcKingMoves = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean,\n onlyAttacks: boolean = false\n ) => {\n const nextMoves: CellPos[] = [];\n\n const possibleMoves: CellPos[] = [\n [figurePos[0], figurePos[1] - 1],\n [figurePos[0] + 1, figurePos[1] - 1],\n [figurePos[0] + 1, figurePos[1]],\n [figurePos[0] + 1, figurePos[1] + 1],\n [figurePos[0], figurePos[1] + 1],\n [figurePos[0] - 1, figurePos[1] + 1],\n [figurePos[0] - 1, figurePos[1]],\n [figurePos[0] - 1, figurePos[1] - 1],\n ];\n\n // Для короткой рокеровки\n const castlingMovesDefault: CellPos[] = [\n [figurePos[0] + 1, figurePos[1]],\n [figurePos[0] + 2, figurePos[1]],\n [figurePos[0] + 3, figurePos[1]],\n ];\n\n // Для длинной рокеровки\n const longCastlingMovesDefault: CellPos[] = [\n [figurePos[0] - 1, figurePos[1]],\n [figurePos[0] - 2, figurePos[1]],\n [figurePos[0] - 3, figurePos[1]],\n [figurePos[0] - 4, figurePos[1]],\n ];\n\n // Для короткой рокеровки (доска развернута)\n const castlingMovesReversed: CellPos[] = [\n [figurePos[0] - 1, figurePos[1]],\n [figurePos[0] - 2, figurePos[1]],\n [figurePos[0] - 3, figurePos[1]],\n ];\n\n // Для длинной рокеровки (доска развернута)\n const longCastlingMovesReversed: CellPos[] = [\n [figurePos[0] + 1, figurePos[1]],\n [figurePos[0] + 2, figurePos[1]],\n [figurePos[0] + 3, figurePos[1]],\n [figurePos[0] + 4, figurePos[1]],\n ];\n\n const castlingMoves = reverse\n ? castlingMovesReversed\n : castlingMovesDefault;\n const longCastlingMoves = reverse\n ? longCastlingMovesReversed\n : longCastlingMovesDefault;\n\n if (onlyAttacks) return possibleMoves;\n\n const allAttackedPositionsByEnemys =\n JSChessEngine.getAllAttckedPostionsByEnemys(state, figurePos, reverse);\n\n possibleMoves.forEach((move) => {\n if (JSChessEngine.checkPossibleMoveTo(state, figurePos, move)) {\n const foundInAttacked = allAttackedPositionsByEnemys.find(\n (attackedMove) =>\n attackedMove[0] === move[0] && attackedMove[1] === move[1]\n );\n\n // Если возможный ход не найден в полях находящихся под атакой, то добавляем его в возможные ходы короля\n foundInAttacked === undefined && nextMoves.push(move);\n }\n });\n\n // Проверка на возможность рокеровки\n // 1. Король не перемещался\n // 2. Ладьи не перемещались\n // 3. Рокеровке не мешают фигуры\n // 4. поля для рокеровки не атакованы\n if (\n JSChessEngine.checkPossibleCastling(\n state,\n figurePos,\n castlingMoves,\n reverse\n )\n ) {\n castlingMoves.forEach((castlingPos) => nextMoves.push(castlingPos));\n }\n\n if (\n JSChessEngine.checkPossibleCastling(\n state,\n figurePos,\n longCastlingMoves,\n reverse\n )\n ) {\n longCastlingMoves.forEach((castlingPos) => nextMoves.push(castlingPos));\n }\n\n return nextMoves;\n };\n\n static getNextMovesPawn = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean\n ) => {\n return JSChessEngine.calcPawnMoves(state, figurePos, reverse);\n };\n\n static getNextMovesBishop = (state: Cell[][], figurePos: CellPos) => {\n return JSChessEngine.calcDiagonalMoves(state, figurePos);\n };\n\n static getNextMovesKnight = (state: Cell[][], figurePos: CellPos) => {\n return JSChessEngine.calcKnightMoves(state, figurePos);\n };\n\n static getNextMovesRook = (state: Cell[][], figurePos: CellPos) => {\n return JSChessEngine.calcHorizontalAndVerticalMoves(state, figurePos);\n };\n\n static getNextMovesQueen = (state: Cell[][], figurePos: CellPos) => {\n const diagonalMoves = JSChessEngine.calcDiagonalMoves(state, figurePos);\n const verticalAndHorizontalMoves =\n JSChessEngine.calcHorizontalAndVerticalMoves(state, figurePos);\n const moves = [...diagonalMoves, ...verticalAndHorizontalMoves];\n\n return moves;\n };\n\n static getNextMovesKing = (\n state: Cell[][],\n figurePos: CellPos,\n reverse: boolean\n ) => {\n return JSChessEngine.calcKingMoves(state, figurePos, reverse);\n };\n\n /**\n * Возвращает линии по которым есть шах вражескому королю\n * @param state состояние доски\n * @param activeColor цвет фигур, которые сделали ход\n */\n static getLinesWithCheck = (\n state: Cell[][],\n activeColor: FigureColor,\n reverse = false\n ) => {\n const posTeammates = JSChessEngine.getAllTeammatesPositionsByColor(\n state,\n activeColor\n );\n\n const linesWithCheck: CellPos[][] = [];\n\n posTeammates.forEach((pos) => {\n const figureType = JSChessEngine.getFigureType(state, pos);\n\n switch (figureType) {\n case 'bishop':\n DIRECTIONS_D.forEach((direction) => {\n const attackedLineBishop = JSChessEngine.getFullAttackedLine(\n state,\n pos,\n direction\n );\n\n let hasAttackedEnemyKing = false;\n\n for (let i = 0; i < attackedLineBishop.length; i++) {\n const attackedPos = attackedLineBishop[i];\n\n // Проверяем атакованную позицию\n // Если клетка пустая, то продолжаем проверять\n // Необходимое условие чтобы перед королем не было атакованной фигуры\n if (\n JSChessEngine.hasFigure(state, attackedPos) &&\n !JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n break;\n }\n\n // Если доходим до короля, перываем цикл и отмечаем\n // что линия имеет атакованного короля - объявлен шах\n if (JSChessEngine.checkEnemyKing(state, pos, attackedPos)) {\n hasAttackedEnemyKing = true;\n break;\n }\n }\n\n // Если линия имеет атакованного короля, добавляем ее в линии с шахами\n if (hasAttackedEnemyKing) {\n linesWithCheck.push([...attackedLineBishop, pos]);\n }\n });\n\n break;\n\n case 'rook':\n DIRECTIONS_VH.forEach((direction) => {\n const attackedLineRook = JSChessEngine.getFullAttackedLine(\n state,\n pos,\n direction\n );\n\n let hasAttackedEnemyKing = false;\n\n for (let i = 0; i < attackedLineRook.length; i++) {\n const attackedPos = attackedLineRook[i];\n\n // Проверяем атакованную позицию\n // Если клетка пустая, то продолжаем проверять\n // Необходимое условие чтобы перед королем не было атакованной фигуры\n if (\n JSChessEngine.hasFigure(state, attackedPos) &&\n !JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n break;\n }\n\n // Если доходим до короля, перываем цикл и отмечаем\n // что линия имеет атакованного короля - объявлен шах\n if (JSChessEngine.checkEnemyKing(state, pos, attackedPos)) {\n hasAttackedEnemyKing = true;\n break;\n }\n }\n\n // Если линия имеет атакованного короля, добавляем ее в линии с шахами\n if (hasAttackedEnemyKing) {\n linesWithCheck.push([...attackedLineRook, pos]);\n }\n });\n\n break;\n\n case 'queen':\n [...DIRECTIONS_D, ...DIRECTIONS_VH].forEach((direction) => {\n const attackedLineQueen = JSChessEngine.getFullAttackedLine(\n state,\n pos,\n direction\n );\n\n let hasAttackedEnemyKing = false;\n\n for (let i = 0; i < attackedLineQueen.length; i++) {\n const attackedPos = attackedLineQueen[i];\n\n // Проверяем атакованную позицию\n // Если клетка пустая, то продолжаем проверять\n // Необходимое условие чтобы перед королем не было атакованной фигуры\n if (\n JSChessEngine.hasFigure(state, attackedPos) &&\n !JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n break;\n }\n\n // Если доходим до короля, перываем цикл и отмечаем\n // что линия имеет атакованного короля - объявлен шах\n if (JSChessEngine.checkEnemyKing(state, pos, attackedPos)) {\n hasAttackedEnemyKing = true;\n break;\n }\n }\n\n // Если линия имеет атакованного короля, добавляем ее в линии с шахами\n if (hasAttackedEnemyKing) {\n linesWithCheck.push([...attackedLineQueen, pos]);\n }\n });\n\n break;\n\n case 'pawn':\n const pawnAttackedPositions: CellPos[] = [];\n\n if (\n (reverse && activeColor === 'white') ||\n (!reverse && activeColor === 'black')\n ) {\n // Вниз-вправо\n pawnAttackedPositions.push([pos[0] + 1, pos[1] + 1]);\n\n // Вниз-влево\n pawnAttackedPositions.push([pos[0] - 1, pos[1] + 1]);\n }\n\n if (\n (reverse && activeColor === 'black') ||\n (!reverse && activeColor === 'white')\n ) {\n // Вверх-вправо\n pawnAttackedPositions.push([pos[0] + 1, pos[1] - 1]);\n\n // Вверх-влево\n pawnAttackedPositions.push([pos[0] - 1, pos[1] - 1]);\n }\n\n pawnAttackedPositions.forEach((attackedPos) => {\n if (\n // Позиция находится в пределах доски\n JSChessEngine.checkInBorderBoard(state, attackedPos) &&\n // И в клетке есть вражеский король\n JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n linesWithCheck.push([attackedPos, pos]);\n }\n });\n\n break;\n\n case 'knight':\n const knigtAttackedPositions: CellPos[] = [\n [pos[0] + 1, pos[1] - 2],\n [pos[0] - 1, pos[1] - 2],\n [pos[0] - 2, pos[1] + 1],\n [pos[0] - 2, pos[1] - 1],\n [pos[0] + 2, pos[1] + 1],\n [pos[0] + 2, pos[1] - 1],\n [pos[0] + 1, pos[1] + 2],\n [pos[0] - 1, pos[1] + 2],\n ];\n\n knigtAttackedPositions.forEach((attackedPos) => {\n if (\n // Позиция находится в пределах доски\n JSChessEngine.checkInBorderBoard(state, attackedPos) &&\n // И в клетке есть вражеский король\n JSChessEngine.checkEnemyKing(state, pos, attackedPos)\n ) {\n linesWithCheck.push([attackedPos, pos]);\n }\n });\n\n break;\n }\n });\n\n return linesWithCheck;\n };\n\n /**\n * Принимает данные о фигуре, которой сыграли\n * затем обновляет и возвращает новое состояние доски\n * !!! Какой-то старнный эффект если не использовать мап\n * !!! Как будто происходит мутация состояния\n * @param state состояние доски\n * @param currentFigure фигура, которой сыграли\n * @param targetPos позиция на которую перемещаем фигуру\n * @param prevPos начальная позиция фигуры\n * @param reverse перевернута ли доска\n */\n static changeState = (\n state: Cell[][],\n currentFigure: Figure,\n targetPos: CellPos,\n prevPos: CellPos,\n reverse: boolean\n ): { updatedCells: Cell[][], attackedPos?: CellPos } => {\n // Необходимо для записи атакованного поля\n // на данный момент нужно для того чтобы\n // записать какое было атаковано при переходе на битую позицию\n // чтобы корректно показать анимированный переход на битое поле\n let attackedPos: CellPos | undefined = undefined;\n\n // Для определения рокировки\n const diffHorizontal = targetPos[0] - prevPos[0];\n\n if (currentFigure.type === 'pawn') {\n // Если пешка дошла до конца доски\n // Превратить ее в выбранную фигуру\n // ферзь, ладья, слон, конь\n if (targetPos[1] === 0 || targetPos[1] === state.length - 1) {\n // console.log('TRNASFORM');\n }\n }\n\n if (currentFigure.type === 'king' && Math.abs(diffHorizontal) > 1) {\n // Была сделана рокеровка\n\n if (diffHorizontal > 0) {\n if (reverse) {\n // 0-0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 4) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 5) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 7) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n } else {\n // 0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 5) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 6) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 7) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n }\n }\n\n if (diffHorizontal < 0) {\n if (reverse) {\n // 0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 2) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 1) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 0) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n } else {\n // 0-0-0\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (j === prevPos[1] && i === 3) {\n return {\n ...cell,\n figure: {\n type: 'rook',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (j === prevPos[1] && i === 2) {\n return {\n ...cell,\n figure: {\n type: 'king',\n color: currentFigure.color,\n touched: true,\n },\n };\n }\n\n if (\n (j === prevPos[1] && i === 0) ||\n (j === prevPos[1] && i === prevPos[0])\n ) {\n return {\n ...cell,\n figure: undefined,\n };\n }\n\n return cell;\n })\n );\n\n return { updatedCells, attackedPos };\n }\n }\n }\n\n const updatedCells: Cell[][] = state.map((row, j) =>\n row.map((cell, i) => {\n if (targetPos[0] === i && targetPos[1] === j) {\n return {\n figure: {\n ...currentFigure,\n touched: true,\n },\n };\n }\n\n if (prevPos[0] === i && prevPos[1] === j) {\n return {\n figure: undefined,\n };\n }\n\n // Если сходили пешкой на битое поле,\n // то забираем пешку противника,\n // которая оставила битое поле\n if (\n currentFigure.type === 'pawn' &&\n JSChessEngine.checkBeatedCell(state, targetPos) &&\n j === prevPos[1] &&\n i === targetPos[0] //these\n ) {\n attackedPos = [i, j];\n return { figure: undefined, beated: false };\n }\n\n // Если пешка сходила на две клетки вперед\n // то помечаем поле как битое\n if (currentFigure.type === 'pawn') {\n const diff = targetPos[1] - prevPos[1];\n\n if (Math.abs(diff) === 2) {\n if (\n (diff > 0 && j === targetPos[1] - 1 && targetPos[0] === i) ||\n (diff < 0 && j === targetPos[1] + 1 && targetPos[0] === i)\n ) {\n return { figure: undefined, beated: true };\n }\n }\n }\n\n return { ...cell, beated: cell.beated ? false : cell.beated };\n })\n );\n\n return { updatedCells, attackedPos };\n };\n\n /**\n * Обновляет состояние с превращение пешки в фигуру\n * @param state состояние доски\n * @param fromPos с какой клетки сделан ход\n * @param targetPos на какую клетку сделали ход\n * @param transformFigure в какую фигуру превратить пешку\n */\n static transformPawnToFigure = (\n state: Cell[][],\n fromPos: CellPos,\n targetPos: CellPos,\n transformFigure: Figure\n ): Cell[][] => {\n const preparedState = [...state];\n\n return preparedState.map((row, j) =>\n row.map((cell, i) => {\n if (i === fromPos[0] && j === fromPos[1]) {\n return {\n beated: false,\n figure: undefined,\n };\n }\n\n if (i === targetPos[0] && j === targetPos[1]) {\n return {\n beated: false,\n figure: transformFigure,\n };\n }\n\n return { ...cell };\n })\n );\n };\n\n /**\n * Возвращает плоский массив полей с фигурами\n * @param state состояние доски\n */\n static getFieldsWithFigures = (state: Cell[][]) => {\n const fieldsWithFigures: Cell[] = [];\n\n state.forEach((row) =>\n row.forEach((cell) => {\n if (!!cell.figure) {\n fieldsWithFigures.push(cell);\n }\n })\n );\n\n return fieldsWithFigures;\n };\n\n /**\n * Возвращает результат игры\n * mat - Мат\n * pat - Пат\n * undefined - игра продолжается\n * @param state состояние доски\n * @param linesWithCheck линии по которым есть шахом\n * @param activeColor активный цвет\n */\n static getGameResult = (\n state: Cell[][],\n linesWithCheck: CellPos[][],\n activeColor: FigureColor,\n reverse: boolean\n ): GameResult | undefined => {\n const posTeammates = JSChessEngine.getAllTeammatesPositionsByColor(\n state,\n activeColor\n );\n\n // Проверка на ничью\n // если на поле остались только короли\n // или одна из фигур любого цвеат - конь, слон\n // то это автоматическая ничья\n const cellsWithFigures = JSChessEngine.getFieldsWithFigures(state);\n\n // Значит остались только короли на доске\n if (cellsWithFigures.length === 2) return { resultType: 'draw' };\n\n // На доске осталось три фигуры\n // два короля и еще одна, если эта\n // фигура конь или слон - ничья\n if (cellsWithFigures.length === 3) {\n // Фигура для ничьей - конь или слон\n const figureForCommon = cellsWithFigures.find(\n (cell) =>\n cell.figure?.type === 'knight' || cell.figure?.type === 'bishop'\n );\n\n if (!!figureForCommon) return { resultType: 'draw' };\n }\n\n // Массив с количеством ходов каждой фигуры\n // Если все элементы массива - 0 и есть атака на короля, то это мат\n // Если атаки на короля нет, но все элементы массива - 0, это пат\n // если есть ходы, то игра продолжается\n const countsNextMoves: number[] = [];\n\n posTeammates.forEach((pos) => {\n const nextMoves = JSChessEngine.getNextMoves(\n state,\n pos,\n linesWithCheck,\n reverse\n );\n countsNextMoves.push(nextMoves.length);\n });\n\n // Суммируем все значения\n const countsSumResult = countsNextMoves.reduce(\n (prevValue, curentValue) => prevValue + curentValue\n );\n\n // Мат\n if (linesWithCheck.length > 0 && countsSumResult === 0)\n return {\n resultType: 'mat',\n winColor: activeColor === 'white' ? 'black' : 'white',\n };\n\n // Пат\n if (linesWithCheck.length === 0 && countsSumResult === 0)\n return { resultType: 'pat' };\n\n return undefined;\n };\n\n /**\n * Возвращает количество фигур указанного типа\n * @param flatState Обработанное состояние - одномерный массив клеток с фигурами одного цвета\n * @param figureType тип фигуры\n */\n static getFiguresCountByType = (\n flatState: Cell[],\n figureType: FigureType\n ) => {\n const filtred = flatState.filter(\n ({ figure }) => figure?.type === figureType\n );\n const count = filtred.length;\n\n return count;\n };\n\n /**\n * Возвращает информацию о количестве съеденных фигур одного цвета\n * @param state состояние доски\n * @param color цвет съеденных фигур\n */\n static getBeatedFigures = (\n state: Cell[][],\n color: FigureColor,\n countsConfig: typeof FIGURES_COUNTS = FIGURES_COUNTS\n ) => {\n let cellsWithFigures: Cell[] = [];\n\n state.forEach((row) => {\n const filtredCells = row.filter(\n (cell) => !!cell.figure && cell.figure.color === color\n );\n\n if (filtredCells.length > 0) {\n cellsWithFigures = [...cellsWithFigures, ...filtredCells];\n }\n });\n\n // информация о съеденных фигурах\n const beatedCountsData: BeatedCountsData = {\n pawn:\n countsConfig.PAWNS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'pawn'),\n knight:\n countsConfig.KNIGHTS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'knight'),\n bishop:\n countsConfig.BISHOPS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'bishop'),\n rook:\n countsConfig.ROOKS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'rook'),\n queen:\n countsConfig.QUEENS_COUNT -\n JSChessEngine.getFiguresCountByType(cellsWithFigures, 'queen'),\n };\n\n return beatedCountsData;\n };\n\n /**\n * По последним шести позициям - трем ходам\n * определяет было ли повторение позиций\n * если да, то это ничья,\n * Определить троекратное повторение\n * можно по последним 8ми ходам\n * поэтому нужно брать на сравнение массив\n * length - 8\n * @param fenMoves история ходов в формате FEN\n */\n static detectDrawByRepeatMoves(fenMoves: string[]) {\n if (fenMoves.length < 8) return false;\n\n const lastMoves = fenMoves.slice(fenMoves.length - 8);\n\n // Для понимания было троекратное повторение или нет, нужно\n // первые четыре хода и последние четыре хода из выборки\n // объединить в строку и сравнить полученные строки\n const firstFromSelectedMoves = lastMoves.slice(0, 4);\n const lastFromSelectedMoves = lastMoves.slice(4);\n\n const firstResultsFENs = firstFromSelectedMoves.join('');\n const lastResultsFENs = lastFromSelectedMoves.join('');\n\n return firstResultsFENs === lastResultsFENs;\n }\n\n /**\n * Проверяет является ли ход рокеровкой\n * @param move данные хода\n */\n static getCastlingType(move: MoveData): CastlingType | undefined {\n if (move.figure.touched || move.figure.type !== 'king') return undefined;\n\n // Разница в ходе по горизонтали\n const horizontalDiff = move.to[0] - move.from[0];\n\n // Король просто сходил => рокировки не было\n if (horizontalDiff === 0 || Math.abs(horizontalDiff) === 1)\n return undefined;\n\n // Рокировались вправо\n if (horizontalDiff > 0) return '0-0';\n\n return '0-0-0';\n }\n}\n","/* eslint-disable */\nimport { Cell, Figure } from './JSChessEngine';\n\nexport const LETTERS = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];\n\nexport const FIGURES_LATTERS_NOTATIONS = {\n white: {\n pawn: 'P',\n knight: 'N',\n bishop: 'B',\n rook: 'R',\n queen: 'Q',\n king: 'K',\n },\n\n black: {\n pawn: 'p',\n knight: 'n',\n bishop: 'b',\n rook: 'r',\n queen: 'q',\n king: 'k',\n },\n};\n\nexport const LETTER_TO_FIGURE_MAP: { [key: string]: Figure } = {\n P: { type: 'pawn', color: 'white' },\n N: { type: 'knight', color: 'white' },\n B: { type: 'bishop', color: 'white' },\n R: { type: 'rook', color: 'white' },\n Q: { type: 'queen', color: 'white' },\n K: { type: 'king', color: 'white' },\n\n p: { type: 'pawn', color: 'black' },\n n: { type: 'knight', color: 'black' },\n b: { type: 'bishop', color: 'black' },\n r: { type: 'rook', color: 'black' },\n q: { type: 'queen', color: 'black' },\n k: { type: 'king', color: 'black' },\n};\n\nexport const ALL_FIGURES: Figure[] = [\n { type: 'pawn', color: 'white' },\n { type: 'knight', color: 'white' },\n { type: 'bishop', color: 'white' },\n { type: 'rook', color: 'white' },\n { type: 'queen', color: 'white' },\n { type: 'king', color: 'white' },\n\n { type: 'pawn', color: 'black' },\n { type: 'knight', color: 'black' },\n { type: 'bishop', color: 'black' },\n { type: 'rook', color: 'black' },\n { type: 'queen', color: 'black' },\n { type: 'king', color: 'black' },\n];\n\nexport const CHESS_BOARD_CONFIG = {\n cellWhiteBg: '#FFFFFF',\n cellBlackBg: '#E2E4ED',\n cellSelectedBg: '#728bc1',\n\n cellSize: 80,\n\n figures: {\n white: {\n pawn: '',\n bishop: '',\n knight: '',\n rook: '',\n queen: '',\n king: '',\n },\n\n black: {\n pawn: '',\n bishop: '',\n knight: '',\n rook: '',\n queen: '',\n king: '',\n },\n },\n};\n\nexport const INITIAL_CELLS: Cell[][] = [\n [\n { figure: { type: 'rook', color: 'black', touched: false } },\n { figure: { type: 'knight', color: 'black', touched: false } },\n { figure: { type: 'bishop', color: 'black', touched: false } },\n { figure: { type: 'queen', color: 'black', touched: false } },\n { figure: { type: 'king', color: 'black', touched: false } },\n { figure: { type: 'bishop', color: 'black', touched: false } },\n { figure: { type: 'knight', color: 'black', touched: false } },\n { figure: { type: 'rook', color: 'black', touched: false } },\n ],\n [\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n { figure: { type: 'pawn', color: 'black', touched: false } },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n { figure: undefined },\n ],\n [\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n { figure: { type: 'pawn', color: 'white', touched: false } },\n ],\n [\n { figure: { type: 'rook', color: 'white', touched: false } },\n { figure: { type: 'knight', color: 'white', touched: false } },\n { figure: { type: 'bishop', color: 'white', touched: false } },\n { figure: { type: 'queen', color: 'white', touched: false } },\n { figure: { type: 'king', color: 'white', touched: false } },\n { figure: { type: 'bishop', color: 'white', touched: false } },\n { figure: { type: 'knight', color: 'white', touched: false } },\n { figure: { type: 'rook', color: 'white', touched: false } },\n ],\n];","/* eslint-disable */\nimport {\n LETTER_TO_FIGURE_MAP,\n FIGURES_LATTERS_NOTATIONS,\n LETTERS,\n} from './chess.consts';\nimport { FigureColor, Cell, JSChessEngine, } from './JSChessEngine';\n\n/**\n * Вовзвращет позицию клетки по состоянию fen\n * @param positionFEN позиция из FEN вида e4\n * @returns координаты для определения клетки на доске\n */\nexport const getPositionByFEN = (positionFEN: string) => {\n return [\n 8 - parseInt(positionFEN[1]) + 1, // +1 Поправка на то что значение взятто из индекса в массиве\n LETTERS.findIndex((letter) => letter === positionFEN[0]),\n ];\n};\n\n/**\n * Проверяет по части FEN возможность рокировки\n * и обновляет состояние доски для рокировки\n * @param castlingNotation часть FEN-нотации описывающая рокировку\n * @param state состояние доски\n * @returns обновленное состояние доски\n */\nexport const prepareCastlingByFEN = (\n castlingNotation: string,\n state: Cell[][]\n): Cell[][] => {\n if (castlingNotation === '-') return state;\n\n const preparedState = [...state];\n\n if (castlingNotation.includes('K')) {\n if (!!preparedState[preparedState.length - 1][preparedState.length - 1].figure) {\n // Ладья\n preparedState[preparedState.length - 1][preparedState.length - 1].figure = {\n ...preparedState[preparedState.length - 1][preparedState.length - 1]\n .figure!,\n touched: false,\n };\n \n // Король\n preparedState[preparedState.length - 1][4].figure = {\n ...preparedState[preparedState.length - 1][4].figure!,\n touched: false,\n };\n }\n }\n\n if (castlingNotation.includes('Q')) {\n if (!!preparedState[preparedState.length - 1][0].figure) {\n // Ладья\n preparedState[preparedState.length - 1][0].figure = {\n ...preparedState[preparedState.length - 1][0].figure!,\n touched: false,\n };\n \n // Король\n preparedState[preparedState.length - 1][4].figure = {\n ...preparedState[preparedState.length - 1][4].figure!,\n touched: false,\n };\n }\n }\n\n if (castlingNotation.includes('k')) {\n if (!!preparedState[0][preparedState.length - 1].figure) {\n // Ладья\n preparedState[0][preparedState.length - 1].figure = {\n ...preparedState[0][preparedState.length - 1].figure!,\n touched: false,\n };\n \n // Король\n preparedState[0][4].figure = {\n ...preparedState[0][4].figure!,\n touched: false,\n };\n }\n }\n\n if (castlingNotation.includes('q')) {\n if (!!preparedState[0][0].figure) {\n // Ладья\n preparedState[0][0].figure = {\n ...preparedState[0][preparedState.length - 1].figure!,\n touched: false,\n };\n \n // Король\n preparedState[0][4].figure = {\n ...preparedState[0][4].figure!,\n touched: false,\n };\n }\n }\n\n return preparedState;\n};\n\n/**\n * Конвертирует часть FEN-нотации с фигурами в состояние доски\n * @param state состояние доски\n */\nexport const partFENtoState = (notation: string) => {\n const restoredState: Cell[][] = [];\n\n const stateRows = notation.split('/');\n\n stateRows.forEach((stateRow) => {\n const rowCells: Cell[] = [];\n\n for (let i = 0; i < stateRow.length; i++) {\n const cellNotation = stateRow[i];\n\n if (cellNotation === '.') {\n rowCells.push({ figure: undefined });\n } else {\n const figure = LETTER_TO_FIGURE_MAP[cellNotation];\n rowCells.push({ figure: { ...figure, touched: true } });\n }\n }\n\n restoredState.push(rowCells);\n });\n\n // TODO костыль, откуда-то берется пустой массив в конце, убрать его\n return restoredState.filter((row) => row.length > 0);\n};\n\n/**\n * Создает состояние доски\n * по FEN-нотации\n * rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1\n * @param notation Описание текущего состояния от Stockfish https://hxim.github.io/Stockfish-Evaluation-Guide/\n */\nexport const FENtoGameState = (\n FEN: string,\n reversed?: boolean,\n): { boardState: Cell[][]; currentColor: FigureColor } => {\n const gameState: { boardState: Cell[][]; currentColor: FigureColor } = {\n boardState: [],\n currentColor: 'white',\n };\n\n const [stateNotaion, currentColor, FENcastling, beatedField, ..._] =\n FEN.split(' ');\n\n // Сначала подготавливаем stateNotaion, чтобы вместо цифр были \".\" - пустые поля\n let preparedStateNotation = '';\n for (let i = 0; i < stateNotaion.length; i++) {\n // Если символ число, то заполняем готовую нотацию\n // точками в таком количестве какое число в нотации\n if (!isNaN(parseInt(stateNotaion[i]))) {\n const dotsCount = parseInt(stateNotaion[i]);\n for (let dotI = 0; dotI < dotsCount; dotI++) preparedStateNotation += '.';\n continue;\n }\n\n preparedStateNotation += stateNotaion[i];\n }\n\n // Преобразуем часть с фигурами в состояние доски\n gameState.boardState = partFENtoState(preparedStateNotation);\n\n // Определили текущий цвет\n gameState.currentColor = currentColor === 'w' ? 'white' : 'black';\n\n // Определение возможностей рокировки\n gameState.boardState = prepareCastlingByFEN(\n FENcastling,\n gameState.boardState\n );\n\n // Определение битое поля\n if (beatedField !== '-') {\n const posBeatedCell = getPositionByFEN(beatedField);\n gameState.boardState[posBeatedCell[0]][posBeatedCell[1]] = {\n ...gameState.boardState[posBeatedCell[0]][posBeatedCell[1]],\n beated: true,\n };\n }\n\n if (reversed)\n return { \n boardState: JSChessEngine.reverseChessBoard(gameState.boardState),\n currentColor: gameState.currentColor,\n };\n\n return gameState;\n};\n\n/**\n * Возвращает FEN битое поле из состояние доски\n * @param state состояние доски\n */\nexport const getBeatedCellFENfromState = (state: Cell[][]) => {\n let beatedFieldFEN = '-';\n\n for (let j = 0; j < state.length; j++) {\n for (let i = 0; i < state[j].length; i++) {\n if (state[j][i].beated) {\n beatedFieldFEN = LETTERS[i] + (state.length - j).toString();\n break;\n }\n }\n }\n\n return beatedFieldFEN;\n};\n\n/**\n * Возвращает FEN положение фигур на доске\n * @param state состояние доски\n */\nexport const getFENpositionsFromState = (state: Cell[][]) => {\n let positionsFEN = '';\n let emptyCellsCount = 0;\n\n state.forEach((row, j) => {\n row.forEach((cell, i) => {\n if (cell.figure) {\n if (emptyCellsCount > 0) {\n positionsFEN += emptyCellsCount.toString();\n emptyCellsCount = 0;\n }\n positionsFEN +=\n FIGURES_LATTERS_NOTATIONS[cell.figure.color][cell.figure.type];\n } else {\n emptyCellsCount += 1;\n }\n });\n\n if (emptyCellsCount > 0) {\n positionsFEN += emptyCellsCount.toString();\n emptyCellsCount = 0;\n }\n\n if (j !== state.length - 1) {\n positionsFEN += '/';\n }\n });\n\n return positionsFEN;\n};\n\n/**\n * Возвращает FEN-рокеровку из состояния доски\n * @param state состояние доски\n */\nexport const getFENcastlingFromState = (state: Cell[][]) => {\n let whiteCastlingFEN = '';\n let blackCastlingFEN = '';\n\n const stateLastCell = state.length - 1;\n\n state.forEach((row, j) =>\n row.forEach((cell, i) => {\n if (j === 0 && i === 0) {\n // Черная ладья ферзевый фланг | длинная рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched\n ) {\n blackCastlingFEN = 'q';\n }\n }\n\n if (j === 0 && i === 4) {\n // Черный король\n if (\n !cell.figure ||\n cell.figure.type !== 'king' ||\n cell.figure.touched\n ) {\n blackCastlingFEN = '-';\n }\n }\n\n if (j === 0 && i === stateLastCell) {\n // Черная ладья королевский фланг | короткая рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched &&\n blackCastlingFEN !== '-'\n ) {\n blackCastlingFEN = 'k' + blackCastlingFEN;\n }\n }\n\n if (j === stateLastCell && i === 0) {\n // Белая ладья ферзевый фланг | длинная рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched\n ) {\n whiteCastlingFEN = 'Q';\n }\n }\n\n if (j === stateLastCell && i === 4) {\n // Белый король\n if (\n !cell.figure ||\n cell.figure.type !== 'king' ||\n cell.figure.touched\n ) {\n whiteCastlingFEN = '-';\n }\n }\n\n if (j === stateLastCell && i === stateLastCell) {\n // Белая ладья королевский фланг | короткая рокеровка\n if (\n !!cell.figure &&\n cell.figure.type === 'rook' &&\n !cell.figure.touched &&\n blackCastlingFEN !== '-'\n ) {\n whiteCastlingFEN = 'K' + whiteCastlingFEN;\n }\n }\n })\n );\n\n if (whiteCastlingFEN === '-' && blackCastlingFEN === '-') return '-';\n\n return (whiteCastlingFEN + blackCastlingFEN).replace('-', '');\n};\n\n/**\n * Преобразует состояние доски в FEN\n * @param state\n * @param countMoves\n */\nexport const stateToFEN = (\n state: Cell[][],\n currentColor: FigureColor,\n countMoves: number = 1\n) => {\n const casttlingFEN = getFENcastlingFromState(state);\n const positionsFEN = getFENpositionsFromState(state);\n const colorFEN = currentColor === 'white' ? 'w' : 'b';\n const beatedFieldFEN = getBeatedCellFENfromState(state);\n const blackMoves = countMoves === 0 ? 0 : countMoves - 1;\n\n // Пример: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1\n return `${positionsFEN} ${colorFEN} ${casttlingFEN} ${beatedFieldFEN} ${blackMoves} ${countMoves}`;\n};\n","import React from \"react\";\nimport { ChessPiecesMap } from \"./models\";\n\nexport const CHESS_PIECES_MAP: ChessPiecesMap = {\n 'pawn-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M37.3492 12.5238C37.3492 15.286 36.1576 17.7735 34.2541 19.5131L39.1587 22.9297V29.1905H34.3573C34.5888 32.0925 36.4757 34.9969 38.9172 37.5303C41.5083 40.2188 44.6258 42.3871 46.6961 43.5546L47 43.726V53H9V43.726L9.30392 43.5546C11.3742 42.3871 14.4917 40.2188 17.0828 37.5303C19.5243 34.9969 21.4112 32.0925 21.6427 29.1905H16.8413V22.9297L21.4091 19.7477C19.351 18.0011 18.0476 15.4127 18.0476 12.5238C18.0476 7.26396 22.3684 3 27.6984 3C33.0284 3 37.3492 7.26396 37.3492 12.5238Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M31.8338 19.6768C31.7847 18.906 32.0841 18.155 32.6449 17.6425C34.0658 16.344 34.9237 14.522 34.9237 12.5238C34.9237 8.74601 31.7893 5.5 27.6984 5.5C23.6075 5.5 20.4732 8.74601 20.4732 12.5238C20.4732 14.6125 21.4113 16.5112 22.9509 17.8177C23.5415 18.319 23.8681 19.0781 23.8319 19.8658C23.7958 20.6535 23.4012 21.3775 22.7673 21.819L19.2668 24.2575V26.6905H21.6427C22.3206 26.6905 22.9675 26.9828 23.4267 27.4967C23.886 28.0106 24.1157 28.6991 24.0601 29.3954C23.757 33.1938 21.3675 36.6318 18.8036 39.2921C16.3921 41.7943 13.5841 43.8574 11.4255 45.1831V50.5H44.5745V45.1831C42.4159 43.8574 39.6079 41.7943 37.1964 39.2921C34.6325 36.6318 32.243 33.1938 31.9399 29.3954C31.8843 28.6991 32.114 28.0106 32.5733 27.4967C33.0325 26.9828 33.6794 26.6905 34.3573 26.6905H36.7332V24.2575L32.8959 21.5844C32.2749 21.1519 31.8828 20.4477 31.8338 19.6768ZM39.1587 22.9297V29.1905H34.3573C34.424 30.0266 34.6281 30.8629 34.9433 31.6905C35.7221 33.7353 37.1791 35.7268 38.9172 37.5303C41.5083 40.2188 44.6258 42.3871 46.6961 43.5546L47 43.726V53H9V43.726L9.30392 43.5546C11.3742 42.3871 14.4917 40.2188 17.0828 37.5303C18.8209 35.7268 20.2779 33.7353 21.0567 31.6905C21.3719 30.8629 21.576 30.0266 21.6427 29.1905H16.8413V22.9297L21.4091 19.7477C20.7719 19.207 20.207 18.5855 19.7308 17.8994C18.6689 16.3695 18.0476 14.5183 18.0476 12.5238C18.0476 7.26396 22.3684 3 27.6984 3C33.0284 3 37.3492 7.26396 37.3492 12.5238C37.3492 14.3952 36.8023 16.1405 35.8575 17.6126C35.4078 18.3133 34.868 18.9521 34.2541 19.5131L39.1587 22.9297Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'knight-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M32.9167 12.8482L25.1852 4.08704C24.066 6.15131 22.981 9.79459 24.5409 12.4247C23.7838 12.4902 23.0602 12.6146 22.5005 12.8328C18.9299 14.225 15.012 17.8218 13.0863 25.3052C12.5287 27.4722 11.5252 28.5098 10.3324 29.7432C9.2073 30.9065 7.91384 32.244 6.66755 34.8675C4.10004 40.2722 11.0292 45.6769 16.0818 40.768C18.9224 38.0082 21.4054 36.8689 23.49 35.9123C26.4905 34.5356 28.6657 33.5374 29.8944 28.6312C30.479 30.9197 30.2452 36.3207 24.6331 39.6161C19.0211 42.9116 17.8519 49.8534 17.9688 51.9131H49.8874C49.8874 32.359 47.2227 15.4643 32.9167 12.8482Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.0604 3.00684C25.4257 2.96664 25.7878 3.10529 26.0279 3.37731L33.5087 11.8544C40.9503 13.3628 45.3275 18.5751 47.8193 25.6764C50.3374 32.853 51 42.1196 51 51.913C51 52.5133 50.5018 53 49.8871 53H17.9686C17.3779 53 16.8901 52.5493 16.8574 51.9732C16.7889 50.7648 17.0879 48.3569 18.1183 45.8263C19.1555 43.279 20.9809 40.4923 24.0595 38.6845C26.1617 37.4501 27.4243 35.8968 28.1465 34.3608C28.1439 34.3633 28.1412 34.3659 28.1385 34.3685C26.9293 35.5354 25.4847 36.198 24.0415 36.86L23.963 36.896C21.9061 37.8398 19.5666 38.9151 16.8664 41.5386C13.9475 44.3745 10.348 44.2838 7.87371 42.5723C5.44537 40.8925 4.12188 37.6432 5.65784 34.4099C6.98024 31.6262 8.37192 30.1871 9.5232 28.9967C10.6946 27.7855 11.5232 26.9197 12.0068 25.0402C14.0037 17.28 18.1294 13.3666 22.0877 11.8232C22.3618 11.7164 22.6569 11.6305 22.9621 11.5613C22.5948 10.3424 22.5869 9.0646 22.7562 7.89187C22.9933 6.24878 23.5924 4.7017 24.2015 3.5783C24.3735 3.26093 24.695 3.04705 25.0604 3.00684ZM25.4952 6.10342C25.259 6.75438 25.0651 7.46829 24.9601 8.19533C24.764 9.5541 24.8927 10.8497 25.5037 11.8797C25.6943 12.2012 25.7037 12.5955 25.5285 12.9253C25.3533 13.255 25.0178 13.4745 24.6389 13.5073C23.9231 13.5692 23.3246 13.6817 22.9129 13.8422C19.7299 15.0832 16.0198 18.3634 14.1654 25.5701C13.537 28.0123 12.367 29.2221 11.1592 30.4709L11.1412 30.4895C10.0423 31.6257 8.84692 32.8618 7.67682 35.3249C6.64528 37.4963 7.50259 39.6517 9.16009 40.7983C10.7717 41.913 13.163 42.0703 15.2967 39.9973C18.2743 37.1045 20.898 35.9006 23.0092 34.9318L23.0166 34.9284C24.5479 34.2258 25.6605 33.7038 26.5743 32.822C27.4586 31.9686 28.2317 30.6948 28.8132 28.3729C28.9348 27.8873 29.3798 27.5454 29.8916 27.5442C30.4035 27.5431 30.8501 27.883 30.974 28.368C31.6414 30.9807 31.3516 36.9391 25.2063 40.5476C22.6729 42.0353 21.1077 44.3672 20.1865 46.6297C19.5273 48.2485 19.2218 49.7734 19.1174 50.8261H48.7714C48.722 41.4882 48.0155 32.9409 45.7138 26.3812C43.3397 19.6151 39.3401 15.1286 32.7117 13.9165C32.4634 13.8711 32.2384 13.7446 32.0735 13.5578L25.4952 6.10342Z\" fill=\"#3E3F4F\" />\n <path d=\"M23.9202 21.4782C23.9202 22.6789 22.9237 23.6521 21.6945 23.6521C20.4652 23.6521 19.4688 22.6789 19.4688 21.4782C19.4688 20.2776 20.4652 19.3043 21.6945 19.3043C22.9237 19.3043 23.9202 20.2776 23.9202 21.4782Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'bishop-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M29.8545 30.4038H26.0727C26.0727 23.7267 28.1789 17.0608 32.8385 12.1815C33.5687 11.2259 34 10.046 34 8.76923C34 5.58296 31.3137 3 28 3C24.6863 3 22 5.58296 22 8.76923C22 10.3412 22.6539 11.7664 23.7144 12.807C19.9664 15.3761 13 22.2626 13 30.8846C13 39.5857 20.0948 43.1084 23.8167 43.8315L10 46.1818V53L46 53V46.1818L31.8556 43.7965C35.6197 42.9999 42.5 39.4532 42.5 30.8846C42.5 25.2741 39.7818 20.2727 36.4727 16.6364C32.8385 19.3636 29.8545 25.7273 29.8545 30.4038Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M28 5.27273C25.4418 5.27273 23.4694 7.28575 23.4694 9.64336C23.4694 10.8145 23.9467 11.8863 24.7431 12.6809C24.9818 12.919 25.1036 13.2554 25.0746 13.5966C25.0457 13.9377 24.8691 14.2472 24.594 14.439C22.9307 15.5983 20.5141 17.7636 18.5232 20.6218C16.5325 23.4797 15.0204 26.9522 15.0204 30.7535C15.0204 34.5515 16.5284 37.1728 18.4256 38.9466C20.3531 40.7487 22.6967 41.683 24.2802 41.9959C24.8042 42.0994 25.181 42.575 25.1748 43.1251C25.1687 43.6751 24.7813 44.1416 24.2552 44.2326L12.2041 46.317V50.7273L43.7959 50.7273V46.3184L31.4388 44.1995C30.9156 44.1098 30.5286 43.6485 30.5178 43.1018C30.5069 42.555 30.8753 42.0778 31.3944 41.9661C34.7008 41.2546 40.5102 38.1436 40.5102 30.7535C40.5102 26.1643 38.4904 21.9735 35.8369 18.7327C34.6056 19.9172 33.4539 21.6155 32.5602 23.5208C31.4833 25.8165 30.843 28.2803 30.843 30.2946C30.843 30.9222 30.3496 31.4309 29.741 31.4309H26.1907C25.5821 31.4309 25.0887 30.9222 25.0887 30.2946C25.0887 23.7121 27.1242 17.0654 31.7054 12.1582C32.2285 11.4429 32.5306 10.5762 32.5306 9.64336C32.5306 7.28575 30.5582 5.27273 28 5.27273ZM21.2653 9.64336C21.2653 5.91808 24.3365 3 28 3C31.6635 3 34.7347 5.91808 34.7347 9.64336C34.7347 11.1277 34.2402 12.4962 33.4134 13.5965C33.3886 13.6295 33.3621 13.6611 33.3339 13.6911C29.4537 17.8225 27.5365 23.4098 27.3146 29.1582H28.6902C28.8791 27.0011 29.5778 24.6592 30.576 22.5311C31.751 20.0265 33.4032 17.6856 35.2985 16.2394C35.7507 15.8944 36.3823 15.9559 36.7639 16.3822C39.9902 19.9872 42.7143 25.0235 42.7143 30.7535C42.7143 37.0527 39.2071 40.7331 35.8163 42.6462L45.0787 44.2344C45.6103 44.3255 46 44.7997 46 45.3554V51.8636C46 52.165 45.8839 52.4541 45.6772 52.6672C45.4705 52.8803 45.1902 53 44.898 53L11.102 53C10.4934 53 10 52.4912 10 51.8636V45.3554C10 44.8003 10.3889 44.3265 10.9197 44.2347L19.799 42.6989C18.8291 42.1599 17.8509 41.4771 16.9451 40.6303C14.6386 38.4738 12.8163 35.2611 12.8163 30.7535C12.8163 26.3247 14.5742 22.3954 16.7331 19.296C18.5307 16.7151 20.6432 14.6555 22.3709 13.2919C21.675 12.2488 21.2653 10.9955 21.2653 9.64336Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'rook-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 5H18.7436V10.434H22.641V5H33.359V10.434H37.2564V5H47V13.1509L39.2051 18.5849L41.1538 36H14.8462L16.7949 18.5849L9 13.1509V5Z\" fill=\"white\" />\n <path d=\"M14.8462 39H41.1538L47 45.7547V53H9V45.7547L14.8462 39Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.7436 12.834C17.404 12.834 16.3181 11.7594 16.3181 10.434V7.4H11.4255V11.906L18.1919 16.6229C18.9198 17.1304 19.3082 17.9918 19.2036 18.8668L17.5 33.5H38.5L36.7964 18.8668C36.6918 17.9918 37.0802 17.1304 37.8081 16.6229L44.5745 11.906V7.4H39.6819V10.434C39.6819 11.7594 38.596 12.834 37.2564 12.834H33.359C32.0194 12.834 30.9334 11.7594 30.9334 10.434V7.4H25.0666V10.434C25.0666 11.7594 23.9806 12.834 22.641 12.834H18.7436ZM22.641 5H33.359V10.434H37.2564V5H47V13.1509L39.2051 18.5849L41.1538 36H14.8462L16.7949 18.5849L9 13.1509V5H18.7436V10.434H22.641V5ZM16 41.5L11.4255 46.5953V50.6H44.5745V46.5953L40 41.5H16ZM41.1538 39H14.8462L9 45.7547V53H47V45.7547L41.1538 39Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'queen-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.9569 11.4809C23.5293 10.8482 24.6452 9.25337 24.6452 7.38596C24.6452 4.96366 22.7676 3 20.4516 3C18.1356 3 16.2581 4.96366 16.2581 7.38596C16.2581 9.62443 17.8614 11.4712 19.9325 11.7387L18.0624 27.5614L9.04701 19.372C9.87134 18.5711 10.3871 17.4275 10.3871 16.1579C10.3871 13.7356 8.50958 11.7719 6.19355 11.7719C3.87752 11.7719 2 13.7356 2 16.1579C2 18.5802 3.87752 20.5439 6.19355 20.5439C6.60125 20.5439 6.99537 20.483 7.36805 20.3695L12.0645 37.2105L16.9212 45.5224L12.0645 46.421V53L44 53V46.421L39.081 45.5187L43.9355 37.2105L48.632 20.3695C49.0046 20.483 49.3987 20.5439 49.8064 20.5439C52.1225 20.5439 54 18.5802 54 16.1579C54 13.7356 52.1225 11.7719 49.8064 11.7719C47.4904 11.7719 45.6129 13.7356 45.6129 16.1579C45.6129 17.4275 46.1287 18.5711 46.953 19.372L37.9376 27.5614L36.0675 11.7387C38.1386 11.4712 39.7419 9.62443 39.7419 7.38596C39.7419 4.96366 37.8644 3 35.5484 3C33.2324 3 31.3548 4.96366 31.3548 7.38596C31.3548 9.25337 32.4707 10.8482 34.0431 11.4809L28 25.807L21.9569 11.4809Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.6997 9.60433C20.8359 9.50943 20.9831 9.42951 21.139 9.36676C21.8633 9.07534 22.4166 8.31673 22.4166 7.38596C22.4166 6.16443 21.4841 5.27273 20.4516 5.27273C19.4191 5.27273 18.4866 6.16443 18.4866 7.38596C18.4866 8.50989 19.2842 9.36408 20.2124 9.48393C20.3823 9.50587 20.5454 9.54678 20.6997 9.60433ZM19.9325 11.7387C19.8677 11.7303 19.8034 11.7204 19.7396 11.709C17.7627 11.3553 16.2581 9.55443 16.2581 7.38596C16.2581 4.96366 18.1356 3 20.4516 3C22.7676 3 24.6452 4.96366 24.6452 7.38596C24.6452 9.16107 23.6369 10.6899 22.1867 11.3801C22.1702 11.3879 22.1538 11.3956 22.1372 11.4032C22.0778 11.4305 22.0177 11.4564 21.9569 11.4809L28 25.807L34.0431 11.4809C33.9823 11.4564 33.9222 11.4305 33.8628 11.4032C33.8462 11.3956 33.8298 11.3879 33.8134 11.3801C32.3631 10.6899 31.3548 9.16108 31.3548 7.38596C31.3548 4.96366 33.2324 3 35.5484 3C37.8644 3 39.7419 4.96366 39.7419 7.38596C39.7419 9.55443 38.2373 11.3553 36.2604 11.709C36.1966 11.7204 36.1323 11.7303 36.0675 11.7387L37.9376 27.5614L46.953 19.372C46.8819 19.3029 46.8132 19.2313 46.7468 19.1573C46.6555 19.0555 46.5688 18.9491 46.487 18.8384C45.939 18.0972 45.6129 17.1674 45.6129 16.1579C45.6129 13.7356 47.4904 11.7719 49.8064 11.7719C52.1225 11.7719 54 13.7356 54 16.1579C54 18.5802 52.1225 20.5439 49.8064 20.5439C49.5014 20.5439 49.204 20.5098 48.9175 20.4451C48.8561 20.4313 48.7952 20.416 48.7349 20.3994C48.7004 20.3899 48.6661 20.3799 48.632 20.3695L43.9355 37.2105L39.081 45.5187L44 46.421V53L12.0645 53V46.421L16.9212 45.5224L12.0645 37.2105L7.36805 20.3695C7.33392 20.3799 7.29961 20.3899 7.26513 20.3994C7.20478 20.416 7.1439 20.4313 7.08252 20.4451C6.79599 20.5098 6.49857 20.5439 6.19355 20.5439C3.87752 20.5439 2 18.5802 2 16.1579C2 13.7356 3.87752 11.7719 6.19355 11.7719C8.50958 11.7719 10.3871 13.7356 10.3871 16.1579C10.3871 17.1674 10.061 18.0972 9.51303 18.8384C9.43124 18.9491 9.34451 19.0555 9.25318 19.1573C9.18684 19.2313 9.11807 19.3029 9.04701 19.372L18.0624 27.5614L19.9325 11.7387ZM10.6656 23.8859L16.5801 29.2585C17.1997 29.8213 18.0746 29.9865 18.8507 29.6872C19.6269 29.3878 20.1756 28.6735 20.2749 27.8334L21.6218 16.4377L25.9528 26.7051C26.3047 27.5392 27.1096 28.0797 28 28.0797C28.8904 28.0797 29.6953 27.5392 30.0472 26.7051L34.3782 16.4377L35.7251 27.8334C35.8244 28.6735 36.3731 29.3878 37.1493 29.6872C37.9254 29.9865 38.8003 29.8213 39.4199 29.2585L45.3344 23.8859L41.8717 36.3027L37.1665 44.3554C36.7923 44.9959 36.7499 45.783 37.0532 46.4615C37.3565 47.14 37.9668 47.6236 38.6865 47.7556L41.7714 48.3215V50.7273L14.2931 50.7273V48.3185L17.319 47.7587C18.0379 47.6257 18.6471 47.1418 18.9497 46.4636C19.2522 45.7854 19.2096 44.9991 18.8356 44.3591L14.1283 36.3027L10.6656 23.8859ZM7.19788 18.1034C7.28739 17.9677 7.39172 17.8412 7.50978 17.7265C7.90424 17.3432 8.15853 16.7895 8.15853 16.1579C8.15853 14.9364 7.22608 14.0447 6.19355 14.0447C5.16102 14.0447 4.22857 14.9364 4.22857 16.1579C4.22857 17.3794 5.16102 18.2711 6.19355 18.2711C6.38265 18.2711 6.56206 18.2431 6.73038 18.1918C6.88389 18.1451 7.04061 18.1157 7.19788 18.1034ZM48.8021 18.1034C48.9594 18.1157 49.1161 18.1451 49.2696 18.1918C49.4379 18.2431 49.6174 18.2711 49.8064 18.2711C50.839 18.2711 51.7714 17.3794 51.7714 16.1579C51.7714 14.9364 50.839 14.0447 49.8064 14.0447C48.7739 14.0447 47.8415 14.9364 47.8415 16.1579C47.8415 16.7895 48.0958 17.3432 48.4902 17.7265C48.6083 17.8412 48.7126 17.9677 48.8021 18.1034ZM35.3003 9.60433C35.4546 9.54678 35.6177 9.50587 35.7876 9.48393C36.7158 9.36408 37.5134 8.50989 37.5134 7.38596C37.5134 6.16443 36.5809 5.27273 35.5484 5.27273C34.5159 5.27273 33.5834 6.16443 33.5834 7.38596C33.5834 8.31673 34.1367 9.07534 34.861 9.36676C35.0169 9.42951 35.1641 9.50943 35.3003 9.60433Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'king-white': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.4055 3H30.5945L30.7296 7.31034H35.7835V12.4828H30.8918L31.1294 18.3388C31.2242 18.2274 31.3219 18.1182 31.4225 18.0116C36.1472 13.0061 43.1524 10.3424 48.3235 14.6379C53.5125 18.9483 53.5125 28.8621 46.3679 34.5958C42.3207 37.8438 38.6956 40.9749 38.8743 45.5544L46.1437 46.5345V53H9.85632V46.5345L17.1257 45.5544C17.3044 40.9749 13.6793 37.8438 9.6321 34.5958C2.4875 28.8621 2.4875 18.9483 7.67648 14.6379C12.8476 10.3424 19.8528 13.0061 24.5775 18.0116C24.6781 18.1182 24.7758 18.2274 24.8706 18.3388L25.1082 12.4828H20.2165V7.31034H25.2704L25.4055 3ZM20.5175 22.8044C23.6886 27.982 24.1083 34.0345 24.1083 36.6666C22.5188 36.6694 16.527 34.0418 13.3546 29.7281C11.0708 26.6226 10.4753 22.0151 12.433 20.2263C14.3908 18.4375 18.5356 19.5685 20.5175 22.8044ZM35.4825 22.8044C32.3114 27.982 31.8917 34.0345 31.8917 36.6666C33.4812 36.6694 39.473 34.0418 42.6454 29.7281C44.9292 26.6226 45.5248 22.0151 43.567 20.2263C41.6092 18.4375 37.4644 19.5685 35.4825 22.8044Z\" fill=\"white\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M24.4333 4.05309C24.4517 3.46625 24.9344 3 25.5236 3H30.4764C31.0656 3 31.5483 3.46625 31.5667 4.05309L31.6627 7.12294H35.4291C36.0316 7.12294 36.52 7.60959 36.52 8.20989V13.1574C36.52 13.2013 36.5173 13.2446 36.5123 13.2871C37.2951 12.9327 38.0953 12.6474 38.9042 12.4427C42.0378 11.6496 45.3184 12.0711 48.0977 14.3847C53.6752 19.0278 53.4681 29.323 46.2168 35.1549C44.2754 36.7163 42.5402 38.17 41.3011 39.7435C40.2848 41.0341 39.6388 42.3604 39.4947 43.845L45.4642 44.6515C46.0051 44.7246 46.4085 45.1848 46.4085 45.7286V51.913C46.4085 52.5134 45.9201 53 45.3177 53H10.6823C10.0799 53 9.59149 52.5134 9.59149 51.913V45.7286C9.59149 45.1848 9.9949 44.7246 10.5358 44.6515L16.5053 43.845C16.3612 42.3604 15.7152 41.0341 14.6989 39.7435C13.4598 38.17 11.7246 36.7163 9.78319 35.1549L10.4085 34.3829L9.78319 35.1549C2.5319 29.323 2.32478 19.0278 7.90235 14.3847L8.60171 15.2189L7.90235 14.3847C10.6816 12.0711 13.9622 11.6496 17.0958 12.4427C17.9047 12.6474 18.7049 12.9327 19.4877 13.2871C19.4827 13.2446 19.48 13.2013 19.48 13.1574V8.20989C19.48 7.60959 19.9684 7.12294 20.5709 7.12294H24.3373L24.4333 4.05309ZM21.2957 14.2444C22.2495 14.8239 23.1645 15.5005 24.0229 16.2506L24.1041 14.2444H21.2957ZM23.9379 19.1897C21.7887 16.9079 19.1629 15.2087 16.5588 14.5497C13.9879 13.899 11.4575 14.2579 9.30107 16.0531C4.97314 19.6559 4.76602 28.3262 11.1534 33.4632C13.0749 35.0086 15.0012 36.6058 16.4153 38.4015C17.8503 40.224 18.8089 42.3135 18.7108 44.8333C18.6903 45.3608 18.2923 45.7974 17.7674 45.8683L11.7731 46.6782V50.8261H44.2269V46.6782L38.2327 45.8683C37.7077 45.7974 37.3097 45.3608 37.2892 44.8333C37.1911 42.3135 38.1497 40.224 39.5847 38.4015C40.9988 36.6058 42.9251 35.0086 44.8466 33.4632C51.234 28.3262 51.0269 19.6559 46.6989 16.0531C44.5425 14.2579 42.0121 13.899 39.4412 14.5497C36.8371 15.2087 34.2113 16.9079 32.0621 19.1897C31.9794 19.2776 31.8985 19.3682 31.8194 19.4612C31.5289 19.8031 31.0575 19.9324 30.6323 19.7867C30.2071 19.6411 29.9151 19.2503 29.897 18.8026L29.6702 13.2012C29.6582 12.9056 29.7677 12.6179 29.9734 12.4045C30.1791 12.1911 30.4632 12.0705 30.7601 12.0705H34.3383V9.29685H30.6054C30.0161 9.29685 29.5334 8.8306 29.5151 8.24376L29.419 5.17391H26.581L26.4849 8.24376C26.4666 8.8306 25.9839 9.29685 25.3946 9.29685H21.6617V12.0705H25.2399C25.5368 12.0705 25.8209 12.1911 26.0266 12.4045C26.2323 12.6179 26.3418 12.9056 26.3298 13.2012L26.103 18.8026C26.0849 19.2503 25.7929 19.6411 25.3677 19.7867C24.9425 19.9324 24.4711 19.8031 24.1806 19.4612C24.1015 19.3682 24.0207 19.2776 23.9379 19.1898M31.9771 16.2506C32.8355 15.5005 33.7505 14.8239 34.7042 14.2444H31.8959L31.9771 16.2506ZM17.3096 18.9553C19.0173 19.4744 20.7009 20.6833 21.7898 22.465C24.9721 27.672 25.3763 33.7022 25.3763 36.2898C25.3763 36.8893 24.8891 37.3756 24.2874 37.3767C23.6967 37.3778 22.8967 37.1574 22.0822 36.8511C21.2259 36.529 20.2214 36.0603 19.1766 35.4622C17.0987 34.2726 14.7747 32.521 13.1408 30.2946C11.9357 28.6523 11.1798 26.6258 10.9787 24.7519C10.7832 22.9302 11.0918 20.9651 12.4037 19.7639L13.1417 20.5643L12.4037 19.7639C13.7217 18.5571 15.6305 18.4449 17.3096 18.9553ZM16.673 21.0346C15.434 20.658 14.4305 20.8605 13.8798 21.3646C13.323 21.8745 12.9814 22.9684 13.148 24.5208C13.3089 26.0208 13.9272 27.6832 14.9019 29.0114C16.296 30.9111 18.3454 32.4792 20.2634 33.5772C21.2164 34.1228 22.1154 34.5399 22.8527 34.8172C22.9599 34.8576 23.0615 34.8941 23.1574 34.9271C23.0096 32.1253 22.348 27.558 19.9265 23.5957C19.1237 22.2821 17.8834 21.4025 16.673 21.0346ZM39.327 21.0346C38.1166 21.4025 36.8763 22.2821 36.0735 23.5957C33.652 27.558 32.9904 32.1253 32.8426 34.9271C32.9385 34.8941 33.0401 34.8576 33.1473 34.8172C33.8846 34.5399 34.7836 34.1228 35.7366 33.5772C37.6546 32.4792 39.704 30.9111 41.0981 29.0114C42.0728 27.6832 42.6911 26.0208 42.852 24.5208C43.0186 22.9684 42.677 21.8745 42.1202 21.3646C41.5695 20.8605 40.566 20.658 39.327 21.0346ZM38.6904 18.9553C40.3695 18.4449 42.2783 18.5571 43.5963 19.7639C44.9082 20.9651 45.2168 22.9302 45.0213 24.7519C44.8202 26.6258 44.0643 28.6523 42.8592 30.2946C41.2253 32.521 38.9013 34.2726 36.8234 35.4622C35.7786 36.0603 34.7741 36.529 33.9178 36.8511C33.1033 37.1574 32.3033 37.3778 31.7126 37.3767C31.1109 37.3756 30.6237 36.8893 30.6237 36.2898C30.6237 33.7022 31.0279 27.672 34.2102 22.465C35.2991 20.6833 36.9827 19.4744 38.6904 18.9553Z\" fill=\"#3E3F4F\" />\n </svg>\n ),\n 'pawn-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M37.3492 12.5238C37.3492 15.286 36.1576 17.7735 34.2541 19.5131L39.1587 22.9297V29.1905H34.3573C34.5888 32.0925 36.4757 34.9969 38.9172 37.5303C41.5083 40.2188 44.6258 42.3871 46.6961 43.5546L47 43.726V53H9V43.726L9.30392 43.5546C11.3742 42.3871 14.4917 40.2188 17.0828 37.5303C19.5243 34.9969 21.4112 32.0925 21.6427 29.1905H16.8413V22.9297L21.4091 19.7477C19.351 18.0011 18.0476 15.4127 18.0476 12.5238C18.0476 7.26396 22.3684 3 27.6984 3C33.0284 3 37.3492 7.26396 37.3492 12.5238Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n 'knight-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M33.1658 12.1594L25.0408 3C23.8647 5.1581 22.7245 8.96699 24.3638 11.7166C23.5681 11.7851 22.8078 11.9152 22.2196 12.1433C18.4672 13.5988 14.35 17.3591 12.3263 25.1827C11.7404 27.4481 10.6857 28.5329 9.43229 29.8223C8.24992 31.0386 6.89064 32.4368 5.58093 35.1795C2.88277 40.8299 10.1645 46.4803 15.4742 41.3483C18.4594 38.463 21.0687 37.2719 23.2594 36.2719C26.4125 34.8325 28.6985 33.7891 29.9897 28.6598C30.6041 31.0524 30.3583 36.6988 24.4607 40.1441C18.5631 43.5893 17.3344 50.8467 17.4573 53H51C51 32.5571 48.1997 14.8944 33.1658 12.1594Z\" fill=\"#2A2B37\" />\n <ellipse cx=\"21.3721\" cy=\"21.1814\" rx=\"2.33898\" ry=\"2.27273\" fill=\"white\" />\n </svg>\n ),\n 'bishop-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M29.8545 30.4038H26.0727C26.0727 23.7267 28.1789 17.0608 32.8385 12.1815C33.5687 11.2259 34 10.046 34 8.76923C34 5.58296 31.3137 3 28 3C24.6863 3 22 5.58296 22 8.76923C22 10.3412 22.6539 11.7664 23.7144 12.807C19.9664 15.3761 13 22.2626 13 30.8846C13 39.5857 20.0948 43.1084 23.8167 43.8315L10 46.1818V53L46 53V46.1818L31.8556 43.7965C35.6197 42.9999 42.5 39.4532 42.5 30.8846C42.5 25.2741 39.7818 20.2727 36.4727 16.6364C32.8385 19.3636 29.8545 25.7273 29.8545 30.4038Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n 'rook-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 5H18.7436V10.434H22.641V5H33.359V10.434H37.2564V5H47V13.1509L39.2051 18.5849L41.1538 36H14.8462L16.7949 18.5849L9 13.1509V5Z\" fill=\"#2A2B37\" />\n <path d=\"M14.8462 39H41.1538L47 45.7547V53H9V45.7547L14.8462 39Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n 'queen-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.9569 11.4809C23.5293 10.8482 24.6452 9.25337 24.6452 7.38596C24.6452 4.96366 22.7676 3 20.4516 3C18.1356 3 16.2581 4.96366 16.2581 7.38596C16.2581 9.62443 17.8614 11.4712 19.9325 11.7387L18.0624 27.5614L9.04701 19.372C9.87134 18.5711 10.3871 17.4275 10.3871 16.1579C10.3871 13.7356 8.50958 11.7719 6.19355 11.7719C3.87752 11.7719 2 13.7356 2 16.1579C2 18.5802 3.87752 20.5439 6.19355 20.5439C6.60125 20.5439 6.99537 20.483 7.36805 20.3695L12.0645 37.2105L16.9212 45.5224L12.0645 46.421V53L44 53V46.421L39.081 45.5187L43.9355 37.2105L48.632 20.3695C49.0046 20.483 49.3987 20.5439 49.8064 20.5439C52.1225 20.5439 54 18.5802 54 16.1579C54 13.7356 52.1225 11.7719 49.8064 11.7719C47.4904 11.7719 45.6129 13.7356 45.6129 16.1579C45.6129 17.4275 46.1287 18.5711 46.953 19.372L37.9376 27.5614L36.0675 11.7387C38.1386 11.4712 39.7419 9.62443 39.7419 7.38596C39.7419 4.96366 37.8644 3 35.5484 3C33.2324 3 31.3548 4.96366 31.3548 7.38596C31.3548 9.25337 32.4707 10.8482 34.0431 11.4809L28 25.807L21.9569 11.4809Z\" fill=\"#2A2B37\" />\n </svg>\n\n ),\n 'king-black': (size: string) => (\n <svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.4055 3H30.5945L30.7296 7.31034H35.7835V12.4828H30.8918L31.1294 18.3388C31.2242 18.2274 31.3219 18.1182 31.4225 18.0116C36.1472 13.0061 43.1524 10.3424 48.3235 14.6379C53.5125 18.9483 53.5125 28.8621 46.3679 34.5958C42.3207 37.8438 38.6956 40.9749 38.8743 45.5544L46.1437 46.5345V53H9.85632V46.5345L17.1257 45.5544C17.3044 40.9749 13.6793 37.8438 9.6321 34.5958C2.4875 28.8621 2.4875 18.9483 7.67648 14.6379C12.8476 10.3424 19.8528 13.0061 24.5775 18.0116C24.6781 18.1182 24.7758 18.2274 24.8706 18.3388L25.1082 12.4828H20.2165V7.31034H25.2704L25.4055 3ZM20.5175 22.8044C23.6886 27.982 24.1083 34.0345 24.1083 36.6666C22.5188 36.6694 16.527 34.0418 13.3546 29.7281C11.0708 26.6226 10.4753 22.0151 12.433 20.2263C14.3908 18.4375 18.5356 19.5685 20.5175 22.8044ZM35.4825 22.8044C32.3114 27.982 31.8917 34.0345 31.8917 36.6666C33.4812 36.6694 39.473 34.0418 42.6454 29.7281C44.9292 26.6226 45.5248 22.0151 43.567 20.2263C41.6092 18.4375 37.4644 19.5685 35.4825 22.8044Z\" fill=\"#2A2B37\" />\n </svg>\n ),\n}\n","import { CHESS_PIECES_MAP } from \"./chessPieciesMap\";\nimport { ChessBoardConfig } from \"./models\";\n\nexport const DEFAULT_CELL_SIZE = 92;\nexport const FACTOR_FOR_SIZE_CIRCLE_MARK = 4.6;\nexport const DEFAULT_CIRCLE_MARK_COLOR = '#3697ce';\nexport const DEFAULT_WHITE_CELL_COLOR = '#fafafc';\nexport const DEFAULT_BLACK_CELL_COLOR = '#d8d9e6';\nexport const DEFAULT_SELECTED_CELL_COLOR = '#e3f1fe';\nexport const DEFAULT_SELECTED_CELL_BORDER = '3px solid #6ac2fd';\nexport const DEFAULT_ARROW_COLOR = '#6ac2fd';\nexport const DEFAULT_MARKED_CELL_COLOR = '#3697ce';\nexport const DEFAULT_CHECKED_CELL_COLOR = '#e95b5c';\nexport const DEFAULT_PIECES_MAP = CHESS_PIECES_MAP;\n\nexport const DEFAULT_CHESSBORD_CONFIG: ChessBoardConfig = {\n cellSize: DEFAULT_CELL_SIZE,\n circleMarkColor: DEFAULT_CIRCLE_MARK_COLOR,\n whiteCellColor: DEFAULT_WHITE_CELL_COLOR,\n blackCellColor: DEFAULT_BLACK_CELL_COLOR,\n selectedCellColor: DEFAULT_SELECTED_CELL_COLOR,\n selectedCellBorder: DEFAULT_SELECTED_CELL_BORDER,\n arrowColor: DEFAULT_ARROW_COLOR,\n markedCellColor: DEFAULT_MARKED_CELL_COLOR,\n checkedCellColor: DEFAULT_CHECKED_CELL_COLOR,\n piecesMap: DEFAULT_PIECES_MAP,\n}\n","import { Cell, CellPos, Figure, FigureColor, FigureType, MoveData } from \"../JSChessEngine\";\nimport { ChessBoardConfig, ChessPiecesMap } from \"./models\";\nimport { DEFAULT_CHESSBORD_CONFIG } from \"./constants\";\n\n/**\n * Возвращает класс для фигуры в клетке\n */\nexport const getFigureCSS = (figure: Figure) =>\n `${figure.type}-${figure.color}`;\n\n/**\n * Возвращает белая ли клетка\n */\nexport const getIsLightCell = (rowId: number, cellId: number) =>\n (rowId % 2 === 0) && (cellId % 2 === 0) ||\n (rowId % 2 > 0) && (cellId % 2 > 0)\n\n/**\n * Функция, которая просто создает массив размером size\n */\nexport const getFilledArrayBySize = (size: number) => {\n const array: number[] = [];\n\n for (let i = 0; i < size; i++) {\n array.push(i);\n }\n\n return array;\n}\n\n/**\n * Возвращает только массив фигурам у которых\n * есть поле position\n */\nexport const mapCellsToFiguresArray = (boardState: Cell[][]) => {\n const figuresWithPosition: Figure[] = [];\n\n boardState.forEach((row, j) => row.forEach((cell, i) => {\n if (cell.figure) {\n figuresWithPosition.push({\n ...cell.figure,\n position: [i, j],\n });\n }\n }));\n\n return figuresWithPosition;\n}\n\n/**\n * \n * @param possibleMoves Список возможных ходов\n * @param position позиция для проверки\n */\nexport const checkIsPossibleMove = (possibleMoves: CellPos[], position: CellPos) => {\n return !!possibleMoves.find((possibleMove) =>\n possibleMove[0] === position[0] && possibleMove[1] === position[1]\n );\n}\n\n/**\n * Проверяет находится ли проверяемая позиция в\n * наборе позиций\n * @param positions набор позиций\n * @param pos позиция\n */\nexport const checkPositionsHas = (\n positions: CellPos[] | undefined,\n pos: CellPos\n) => {\n if (!positions) return false;\n\n return !!positions.find(\n (posItem) => posItem[0] === pos[0] && posItem[1] === pos[1]\n );\n};\n\n/**\n * Проверяет, является ли ход рокеровкой\n * @param moveData \n * @returns \n */\nexport const checkIsCastlingMove = (moveData: MoveData) => {\n const { figure, from, to } = moveData;\n if (figure.type !== 'king') return false;\n if (from[1] !== to[1]) return false;\n const horizontalDiff = Math.abs(to[0] - from[0]);\n if (horizontalDiff === 1) return false;\n return true;\n}\n\n/**\n * Проверка клетки, на то есть ли шах\n */\nexport const hasCheck = (cell: Cell, currentColor: FigureColor, linesWithCheck: CellPos[][]) =>\n !!cell.figure &&\n cell.figure.type === 'king' &&\n cell.figure.color === currentColor &&\n linesWithCheck.length > 0\n\nexport const degrees = (a: number, b: number) =>\n (Math.atan(a / b) * 180) / Math.PI;\n\nexport const calcAngle = (start: number[], end: number[]) => {\n const x = end[0] - start[0];\n const y = end[1] - start[1];\n\n if (x > 0 && y > 0) {\n return degrees(y, x) - 90;\n }\n\n if (x < 0 && y < 0) {\n return degrees(y, x) + 90;\n }\n\n if (x < 0 && y > 0) {\n return degrees(y, x) + 90;\n }\n\n if (x > 0 && y < 0) {\n return degrees(y, x) - 90;\n }\n\n if (y === 0 && x > 0) return -90;\n\n if (y === 0 && x < 0) return 90;\n\n if (x === 0 && y < 0) return 180;\n\n return 0;\n};\n\nexport const getChessBoardConfig = (config: Partial<ChessBoardConfig> | undefined): ChessBoardConfig => {\n if (!config) return DEFAULT_CHESSBORD_CONFIG;\n\n const configKeyes = Object.keys(DEFAULT_CHESSBORD_CONFIG);\n\n const buildedConfig: Record<string, string | number | ChessPiecesMap> = {};\n\n configKeyes.forEach((key) => {\n buildedConfig[key as keyof ChessBoardConfig] =\n config[key as keyof ChessBoardConfig]\n || DEFAULT_CHESSBORD_CONFIG[key as keyof ChessBoardConfig]\n });\n\n return buildedConfig as ChessBoardConfig;\n}\n\n/**\n * Возвращает массив фигур по заданому цвету\n * @param color цвет фигур\n * @param forPawnTransform только фигуры для превращения пешки\n */\nexport const getFiguresByColor = (\n color: FigureColor,\n forPawnTransform = false\n): Figure[] => {\n if (forPawnTransform) {\n const figureNamesForPawn: FigureType[] = [\n 'queen',\n 'rook',\n 'bishop',\n 'knight',\n ];\n return figureNamesForPawn.map((figureName) => ({\n type: figureName,\n color,\n touched: true,\n }));\n }\n\n const figureNames: FigureType[] = [\n 'pawn',\n 'knight',\n 'bishop',\n 'rook',\n 'queen',\n 'king',\n ];\n return figureNames.map((figureName) => ({\n type: figureName,\n color,\n touched: true,\n }));\n};\n\n/**\n * Корректирует позицию захвата курсором\n * коррекция происходит по сроллу\n */\nexport const correctGrabbingPosByScroll = (pos: CellPos) => {\n if (typeof window === 'undefined')\n return pos;\n\n return [\n pos[0] - window.scrollX,\n pos[1] - window.scrollY,\n ] as CellPos;\n}\n\n/**\n * Корректирует указатели стрелки\n */\nexport const correctGrabbingPosForArrow = (pos: CellPos, boardConfig: ChessBoardConfig) => [\n (pos[0] * boardConfig.cellSize) + (boardConfig.cellSize / 2 - 10), \n (pos[1] * boardConfig.cellSize) + (boardConfig.cellSize / 2)\n] as CellPos;\n\n\n/**\n * Создание тэга для хранение состояния \n * разворота доски\n * \n * На момент создания, есть проблема с заданием\n * разворота доски для слоя фигур - происходит двойной\n * рендер. Из-за этого доска возврщает в тоже положение\n * при reversed = true, но состояние игры разворачивается\n * \n * Поэтому принято решение вынести хранение и задание \n * разворота доски на уровень data-атрибутов html\n */\nexport const createHtmlReversedStateHolder = () => {\n if (!window) return;\n\n const reversedStateHolder = document.createElement('div');\n reversedStateHolder.setAttribute('id', 'reversed-state-holder');\n reversedStateHolder.setAttribute('data-reversed-state', 'false');\n document.body.append(reversedStateHolder);\n}\n\nexport const setHtmlReversedStateHolderValue = (reversed: boolean) => {\n if (!window) return;\n\n document.getElementById('reversed-state-holder')\n .setAttribute('data-reversed-state', JSON.stringify(reversed));\n}\n\nexport const getHtmlReversedStateHolderValue = () => {\n if (!window) return false;\n\n const chessboardReversed = document.getElementById('reversed-state-holder') && document.getElementById('reversed-state-holder')\n .getAttribute('data-reversed-state') === 'true';\n\n return chessboardReversed;\n}","import React, { FC } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { getFilledArrayBySize, getIsLightCell } from \"./utils\";\nimport { ChessBoardConfig } from \"./models\";\n\nconst BASE_BOARD_SIZE = 8;\n\ntype ChessBoardCellsLayoutProps = {\n size?: number;\n boardConfig: ChessBoardConfig;\n}\n\nexport const ChessBoardCellsLayout: FC<ChessBoardCellsLayoutProps> = ({ size = BASE_BOARD_SIZE, boardConfig }) => {\n return (\n <div>\n {getFilledArrayBySize(size).map((_, j) => \n <div className={styles.row} key={`cells-layout-${j}`}>\n {getFilledArrayBySize(size).map((_, i) => (\n <div\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n backgroundColor: getIsLightCell(j, i) ? boardConfig.whiteCellColor : boardConfig.blackCellColor,\n }}\n key={`cells-layout-${i}`}\n ></div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import { Cell, Figure, JSChessEngine } from \"../JSChessEngine\";\nimport React, { FC, useEffect, useState } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport cn from 'classnames';\nimport { checkIsCastlingMove, getFigureCSS, getHtmlReversedStateHolderValue, mapCellsToFiguresArray } from \"./utils\";\nimport { ChangeMove, ChessBoardConfig } from \"./models\";\n\ntype ChessBoardFiguresLayoutProps = {\n initialState: Cell[][];\n change?: ChangeMove;\n reversed?: boolean;\n animated?: boolean;\n boardConfig: ChessBoardConfig;\n}\n\nexport const ChessBoardFiguresLayout: FC<ChessBoardFiguresLayoutProps> = (props) => {\n const { initialState, change, reversed, boardConfig, animated } = props;\n const [actualState, setActualState] = useState<Figure[]>([]);\n\n useEffect(() => {\n setActualState(mapCellsToFiguresArray(initialState));\n }, [initialState])\n\n useEffect(() => {\n const chessboardReversed = getHtmlReversedStateHolderValue();\n\n if (!!change) {\n setActualState((prevState) => {\n const updatedState = [...prevState];\n const { move, attackedPos, transformTo } = change;\n\n if (checkIsCastlingMove(move)) {\n const castlingType = JSChessEngine.getCastlingType(move);\n const { color } = move.figure;\n\n if (color === 'white') {\n const kingIndex = updatedState.findIndex((figure) => \n figure.color === 'white' && figure.type === 'king'\n );\n\n if (chessboardReversed) {\n if (castlingType === '0-0') {\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 7\n );\n updatedState[rookIndex].position![0] = 4;\n updatedState[kingIndex].position![0] = 5;\n \n return updatedState;\n }\n \n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 0\n );\n console.log('WHITE', rookIndex);\n updatedState[rookIndex].position![0] = 2;\n updatedState[kingIndex].position![0] = 1;\n \n return updatedState;\n }\n\n if (castlingType === '0-0') {\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 7\n );\n updatedState[rookIndex].position![0] = 5;\n updatedState[kingIndex].position![0] = 6;\n\n return updatedState;\n }\n\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 0\n );\n updatedState[rookIndex].position![0] = 3;\n updatedState[kingIndex].position![0] = 2;\n\n return updatedState;\n }\n\n if (color === 'black') {\n const kingIndex = updatedState.findIndex((figure) => \n figure.color === 'black' && figure.type === 'king'\n );\n\n if (chessboardReversed) {\n if (castlingType === '0-0') {\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 7\n );\n updatedState[rookIndex].position![0] = 4;\n updatedState[kingIndex].position![0] = 5;\n \n return updatedState;\n }\n \n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 0\n );\n\n updatedState[rookIndex].position![0] = 2;\n updatedState[kingIndex].position![0] = 1;\n\n return updatedState;\n }\n\n if (castlingType === '0-0') {\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 7\n );\n updatedState[rookIndex].position![0] = 5;\n updatedState[kingIndex].position![0] = 6;\n\n return updatedState;\n }\n\n const rookIndex = updatedState.findIndex((figure) => \n figure.color === color\n && figure.type === 'rook'\n && figure.position![0] === 0\n );\n updatedState[rookIndex].position![0] = 3;\n updatedState[kingIndex].position![0] = 2;\n\n return updatedState;\n }\n\n return updatedState;\n }\n\n const { from, to } = move;\n\n const foundAttactedFigure = updatedState.find((figure) => {\n if (attackedPos)\n return figure.position![0] === attackedPos[0]\n && figure.position![1] === attackedPos[1];\n\n return figure.position![0] === to[0]\n && figure.position![1] === to[1];\n });\n\n if (foundAttactedFigure && foundAttactedFigure.color !== move.figure.color) {\n foundAttactedFigure.color === 'white'\n ? foundAttactedFigure.position = [8, foundAttactedFigure.position![1]]\n : foundAttactedFigure.position = [-1, foundAttactedFigure.position![1]]\n };\n\n const foundFigureByPositionFrom = updatedState.find((figure) => \n figure.position![0] === from[0]\n && figure.position![1] === from[1]\n );\n\n if (!foundFigureByPositionFrom) return updatedState;\n\n foundFigureByPositionFrom.position! = move.to;\n\n if (!!transformTo) {\n foundFigureByPositionFrom!.type = transformTo.type;\n foundFigureByPositionFrom!.color = transformTo.color;\n // console.log(updatedState);\n // return updatedState.filter(({ position }) => position![0] !== from[1] && position![1] !== from[0]);\n }\n\n return updatedState;\n });\n }\n }, [change])\n\n useEffect(() => {\n if (!reversed) return;\n\n setActualState((prevState) => {\n const preparedState = [...prevState];\n return preparedState.map((figure) => ({\n ...figure,\n position: [\n Math.abs(7 - figure.position![0]),\n Math.abs(7 - figure.position![1])\n ]\n }));\n });\n }, [reversed, initialState])\n\n return (\n <div className={styles.figuresLayout}>\n {actualState.map((figure, i) => \n <div \n key={i}\n className={cn([styles.figure], {\n [styles.hiddenFigure]: figure.position![0] === -1 || figure.position![0] === 8 \n })}\n style={{ \n top: `${boardConfig.cellSize * figure.position![1]}px`, \n left: `${boardConfig.cellSize * figure.position![0]}px`,\n transition: !!change && animated ? 'all .15s ease-out' : 'none',\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n >\n {boardConfig.piecesMap[getFigureCSS(figure)] && boardConfig.piecesMap[getFigureCSS(figure)]('80%')}\n </div>\n )}\n </div>\n )\n}\n","import React, { FC, MouseEvent, useState } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { getFilledArrayBySize } from \"./utils\";\nimport cn from 'classnames';\nimport { CellPos } from \"../JSChessEngine\";\nimport { ChessBoardConfig } from \"./models\";\n\nconst BASE_BOARD_SIZE = 8\n\ntype ChessBoardControlLayoutProps = {\n size?: number;\n boardConfig: ChessBoardConfig;\n\n onClick: (position: CellPos) => void;\n onGrabStart: (position: CellPos) => void;\n onGrabStartRight: (position: CellPos) => void;\n onGrabEnd: (position: CellPos) => void;\n onGrabEndRight: (position: CellPos) => void;\n onGrabbing: (x: number, y: number) => void;\n onRightClick: (position: CellPos) => void;\n onGrabbingCell: (position: CellPos) => void;\n}\n\nexport const ChessBoardControlLayout: FC<ChessBoardControlLayoutProps> = (props) => {\n const { \n size = BASE_BOARD_SIZE, \n boardConfig,\n onClick, \n onGrabEnd,\n onGrabbing,\n onGrabStart,\n onRightClick,\n onGrabbingCell,\n onGrabEndRight,\n onGrabStartRight,\n } = props;\n\n const [pressed, setPressed] = useState(false);\n\n const handleClick = (cellPos: CellPos) => {\n onClick(cellPos);\n }\n\n const handleGrabStart = (cellPos: CellPos) => (event: MouseEvent) => {\n setPressed(true);\n if (event.button === 0) {\n onGrabStart(cellPos);\n }\n\n if (event.button === 2) {\n onGrabStartRight(cellPos);\n }\n }\n\n const handleGrabEnd = (cellPos: CellPos) => (event: MouseEvent) => {\n if (event.button === 0) {\n setPressed(false);\n onGrabEnd(cellPos);\n }\n\n if (event.button === 2) {\n onGrabEndRight(cellPos);\n }\n }\n\n const handleGrabing = (event: MouseEvent) => {\n if (pressed) {\n const { pageX, pageY} = event;\n onGrabbing(pageX, pageY);\n }\n }\n\n const handleContextMenu = (cellPos: CellPos) => (event: MouseEvent) => {\n event.preventDefault();\n onRightClick(cellPos);\n }\n\n const handleGrabbingCell = (cellPos: CellPos) => {\n onGrabbingCell(cellPos);\n }\n\n return (\n <div \n className={cn(styles.controlLayout, {[styles.controlLayoutGrabbing]: pressed})}\n onMouseMove={handleGrabing}\n >\n {getFilledArrayBySize(size).map((_, j) => \n <div className={styles.row} key={`control-layout-${j}`}>\n {getFilledArrayBySize(size).map((_, i) => (\n <div \n key={`control-layout-${i}`}\n className={styles.controlCell}\n style={{ \n width: boardConfig.cellSize, \n height: boardConfig.cellSize \n }}\n onClick={() => handleClick([i, j])}\n onMouseDown={handleGrabStart([i, j])}\n onMouseUp={handleGrabEnd([i, j])}\n onContextMenu={handleContextMenu([i, j])}\n onMouseMove={() => handleGrabbingCell([i, j])}\n ></div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import { Cell, CellPos, Figure, FigureColor, GameResult, JSChessEngine, MoveData, stateToFEN } from \"../JSChessEngine\";\nimport { useEffect, useState } from \"react\"\nimport { checkIsPossibleMove, checkPositionsHas, correctGrabbingPosForArrow, getChessBoardConfig, hasCheck } from \"./utils\";\nimport { ArrowCoords, ChangeMove, ChessBoardConfig } from \"./models\";\nimport { DEFAULT_CHESSBORD_CONFIG } from \"./constants\";\n\ntype UseChessBoardInteractiveProps = {\n config?: Partial<ChessBoardConfig>;\n onChange: (moveData: MoveData) => void;\n onEndGame: (result: GameResult) => void;\n}\n\nexport const useChessBoardInteractive = (props: UseChessBoardInteractiveProps) => {\n const { config, onChange, onEndGame } = props;\n\n const [boardConfig, setBoardConfig] = useState(DEFAULT_CHESSBORD_CONFIG);\n const [initialState, setInitialState] = useState<Cell[][]>([]);\n const [actualState, setActualState] = useState<Cell[][]>([]);\n const [fromPos, setFromPos] = useState<CellPos>([-1, -1]);\n const [holdedFigure, setHoldedFigure] = useState<Figure>();\n const [grabbingPos, setGrabbingPos] = useState<CellPos>([-1, -1]);\n const [possibleMoves, setPossibleMoves] = useState<CellPos[]>([]);\n const [boardReversed, setBoardReversed] = useState(false);\n const [currentColor, setCurrentColor] = useState<FigureColor>('white');\n const [playerColor, setPlayerColor] = useState<FigureColor>();\n const [newMove, setNewMove] = useState<ChangeMove>();\n const [linesWithCheck, setLinesWithCheck] = useState<CellPos[][]>([]);\n const [markedCells, setMarkedCells] = useState<CellPos[]>([]);\n const [grabbingCell, setGrabbingCell] = useState<CellPos>([-1, -1]);\n\n const [clickedPos, setClickedPos] = useState<CellPos>([-1, -1]);\n const [clickedFigure, setClickedFigure] = useState<Figure>();\n const [clickPossibleMoves, setClickPossibleMoves] = useState<CellPos[]>([]);\n\n const [startArrowCoord, setStartArrowCoord] = useState<CellPos>([-1, -1]);\n const [arrowsCoords, setArrowsCoords] = useState<ArrowCoords[]>([]);\n\n // Используется при превращении пешки в фигуру\n const [showFigurePicker, setShowFigurePicker] = useState(false);\n const [targetPos, setTargetPos] = useState<CellPos>([-1, -1]);\n\n // Для анимирования хода фигуры\n const [animated, setAnimated] = useState(false);\n\n const clearFromPos = () => setFromPos([-1, -1]);\n const clearGrabbingPos = () => setGrabbingPos([-1, -1]);\n const clearPossibleMoves = () => setPossibleMoves([]);\n const clearClickPossibleMoves = () => setClickPossibleMoves([]);\n const toggleCurrentColor = () => setCurrentColor((prevColor) => prevColor === 'white' ? 'black' : 'white');\n const clearMarkedCells = () => setMarkedCells([]);\n const clearClickedPos = () => setClickedPos([-1, -1]);\n const clearArrows = () => setArrowsCoords([]);\n\n useEffect(() => {\n setBoardConfig(getChessBoardConfig(config));\n }, []);\n\n useEffect(() => {\n if (linesWithCheck.length > 0) {\n const gameResult = JSChessEngine.getGameResult(\n actualState,\n linesWithCheck,\n currentColor!,\n boardReversed\n );\n\n if (gameResult)\n onEndGame(gameResult);\n }\n }, [actualState, linesWithCheck, boardReversed, currentColor])\n\n const cleanAllForFigure = () => {\n setHoldedFigure(undefined);\n clearFromPos();\n clearGrabbingPos();\n clearPossibleMoves();\n }\n\n const cleanAllForClickedFigure = () => {\n setClickedFigure(undefined);\n clearClickedPos();\n clearClickPossibleMoves();\n }\n\n const reverseChessBoard = () => {\n cleanAllForFigure();\n setActualState((prevState) => JSChessEngine.reverseChessBoard(prevState));\n setBoardReversed((prevReversed) => !prevReversed);\n }\n\n // It's common select for click event and hover event \n const selectFigureFrom = (cellPos: CellPos) => {\n const cell = actualState[cellPos[1]][cellPos[0]];\n\n if (!cell.figure) {\n cleanAllForFigure();\n return { figure: undefined, nextMoves: [] };\n }\n\n const { figure } = cell;\n\n \n if (figure.color !== currentColor && !playerColor) {\n cleanAllForFigure();\n return { figure: undefined, nextMoves: [] };\n }\n\n if (!!playerColor && figure.color !== playerColor) {\n cleanAllForFigure();\n return { figure: undefined, nextMoves: [] };\n }\n\n const nextMoves = JSChessEngine.getNextMoves(\n actualState,\n cellPos,\n linesWithCheck,\n boardReversed\n );\n\n \n return { figure: cell.figure, nextMoves };\n }\n\n const selectClickFrom = (cellPos: CellPos) => {\n const { figure, nextMoves } = selectFigureFrom(cellPos);\n if (!figure) return;\n\n setClickedFigure(figure);\n setClickedPos(cellPos);\n setClickPossibleMoves(nextMoves);\n }\n\n const selectHoverFrom = (cellPos: CellPos) => {\n const { figure, nextMoves } = selectFigureFrom(cellPos);\n if (!figure) return;\n\n setHoldedFigure(figure);\n setPossibleMoves(nextMoves);\n setFromPos(cellPos);\n }\n\n const moveFigure = (from: CellPos, to: CellPos, figure: Figure) => {\n if (!!playerColor && currentColor !== playerColor) {\n cleanAllForFigure();\n return { moveData: undefined, attackedPos: undefined } ;\n }\n\n const inNextMoves = checkPositionsHas(possibleMoves, to);\n\n // Проверка, что начальная позиция не равняется следующей\n // и то что inNextMoves будет true\n const conditionForDoMove =\n (to[0] !== from[0] || to[1] !== from[1]) && inNextMoves;\n\n if (!conditionForDoMove) return {};\n\n const { updatedCells, attackedPos } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n \n setActualState(updatedCells);\n\n // Пешка дошла до конца доски\n // Показываем FigurePicker\n // И изменяем состояние с превращением пешки\n if (\n figure.type === 'pawn' &&\n (to[1] === 0 || to[1] === actualState.length - 1)\n ) {\n setTargetPos(to);\n setShowFigurePicker(true);\n return {};\n }\n\n const colorFEN = currentColor === 'white' ? 'black' : 'white';\n \n const reversedUpdatedCells = boardReversed ? JSChessEngine.reverseChessBoard(updatedCells) : updatedCells;\n const FEN = stateToFEN(reversedUpdatedCells, colorFEN);\n\n // Собранные данные для отправки\n const moveData: MoveData = { figure, from, to, FEN };\n \n // setMoveVector([from, to]);\n // onChange(changedState, moveData);\n\n toggleCurrentColor();\n\n setHoldedFigure(undefined);\n clearFromPos();\n clearGrabbingPos();\n clearArrows();\n clearMarkedCells();\n\n return { moveData, attackedPos };\n }\n\n\n const moveFigureByChange = (change: ChangeMove) => {\n const { from, to, figure } = change.move;\n const { updatedCells } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n const updatedChange = {\n ...change,\n move: boardReversed ? JSChessEngine.reverseMove(change.move) : change.move\n };\n setNewMove(updatedChange);\n }\n\n const moveFigureByClick = (from: CellPos, to: CellPos, figure: Figure) => {\n if (!!playerColor && currentColor !== playerColor) {\n cleanAllForFigure();\n return { moveData: undefined, attackedPos: undefined } ;\n }\n\n const inNextMoves = checkPositionsHas(clickPossibleMoves, to);\n\n // Проверка, что начальная позиция не равняется следующей\n // и то что inNextMoves будет true\n const conditionForDoMove =\n (to[0] !== from[0] || to[1] !== from[1]) && inNextMoves;\n\n if (!conditionForDoMove) return {};\n\n const { updatedCells, attackedPos } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n\n setActualState(updatedCells);\n\n // Пешка дошла до конца доски\n // Показываем FigurePicker\n // И изменяем состояние с превращением пешки\n if (\n figure.type === 'pawn' &&\n (to[1] === 0 || to[1] === actualState.length - 1)\n ) {\n setTargetPos(to);\n setShowFigurePicker(true);\n return {};\n }\n\n const colorFEN = currentColor === 'white' ? 'black' : 'white';\n\n const reversedUpdatedCells = boardReversed ? JSChessEngine.reverseChessBoard(updatedCells) : updatedCells;\n const FEN = stateToFEN(reversedUpdatedCells, colorFEN);\n\n // Собранные данные для отправки\n const moveData: MoveData = { figure, from, to, FEN };\n \n // setMoveVector([from, to]);\n // onChange(changedState, moveData);\n\n toggleCurrentColor();\n\n setClickedFigure(undefined);\n clearClickedPos();\n clearGrabbingPos();\n clearArrows();\n clearMarkedCells();\n\n return { moveData, attackedPos };\n }\n\n const moveFigureByExternalChange = (from: CellPos, to: CellPos, figure: Figure) => {\n const { updatedCells, attackedPos } = JSChessEngine.changeState(\n actualState,\n figure,\n to,\n from,\n boardReversed\n );\n\n const linesCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor,\n boardReversed\n );\n\n setLinesWithCheck(linesCheck);\n\n setActualState(updatedCells);\n\n // Пешка дошла до конца доски\n // Показываем FigurePicker\n // И изменяем состояние с превращением пешки\n if (\n figure.type === 'pawn' &&\n (to[1] === 0 || to[1] === actualState.length - 1)\n ) {\n setTargetPos(to);\n setShowFigurePicker(true);\n return {};\n }\n\n const colorFEN = currentColor === 'white' ? 'black' : 'white';\n const FEN = stateToFEN(updatedCells, colorFEN)\n\n // Собранные данные для отправки\n const moveData: MoveData = { figure, from, to, FEN };\n \n // setMoveVector([from, to]);\n // onChange(changedState, moveData);\n\n toggleCurrentColor();\n\n setClickedFigure(undefined);\n clearClickedPos();\n clearGrabbingPos();\n clearArrows();\n clearMarkedCells();\n\n return { moveData, attackedPos };\n }\n\n const handleGrabbing = (x: number, y: number) => {\n setGrabbingPos([x, y]);\n }\n\n const handleGrabEnd = (cellPos: CellPos, withTransition = false) => {\n if (fromPos[0] === -1) {\n clearGrabbingPos();\n return;\n }\n\n if (!holdedFigure) {\n return;\n }\n\n if (possibleMoves.length === 0) {\n clearGrabbingPos();\n return;\n }\n \n const foundPosInPossible = checkIsPossibleMove(possibleMoves, cellPos);\n\n if (!foundPosInPossible) {\n clearGrabbingPos();\n return;\n }\n \n const { moveData, attackedPos } = moveFigure(fromPos, cellPos, holdedFigure);\n if (!moveData) {\n clearGrabbingPos();\n return;\n }\n\n onChange(moveData);\n\n setAnimated(withTransition);\n setNewMove({ move: moveData, withTransition, attackedPos });\n\n clearGrabbingPos();\n clearPossibleMoves();\n }\n\n const handleChangeFromExternal = (moveData: MoveData) => { \n const { attackedPos } = moveFigureByExternalChange(moveData.from, moveData.to, moveData.figure);\n\n setAnimated(true);\n\n const change: ChangeMove = {\n move: moveData,\n withTransition: true,\n attackedPos,\n transformTo: moveData.type === 'transform' ? moveData.figure : undefined,\n };\n\n setNewMove(change);\n\n clearClickedPos();\n clearClickPossibleMoves();\n }\n \n const handleClickForTargetCell = (cellPos: CellPos, withTransition = false) => {\n if (clickedPos[0] === cellPos[0] && clickedPos[1] === cellPos[1]) return;\n if (clickedPos[0] === -1) return;\n if (!clickedFigure) return;\n if (clickPossibleMoves.length === 0) return;\n const foundPosInPossible = checkIsPossibleMove(clickPossibleMoves, cellPos);\n\n if (!foundPosInPossible) return;\n \n const { moveData, attackedPos } = moveFigureByClick(clickedPos, cellPos, clickedFigure);\n\n if (!moveData) return;\n\n onChange(moveData);\n\n setAnimated(withTransition);\n setNewMove({ move: moveData, withTransition, attackedPos });\n\n clearClickedPos();\n clearClickPossibleMoves();\n }\n\n const handleClick = (cellPos: CellPos, viewOnly = false) => {\n clearMarkedCells();\n clearArrows();\n\n if (viewOnly) return;\n\n if (clickedPos[0] === -1) {\n selectClickFrom(cellPos);\n return;\n }\n\n const foundPosInPossible = checkIsPossibleMove(clickPossibleMoves, cellPos);\n if (!foundPosInPossible) {\n cleanAllForClickedFigure();\n return;\n }\n\n handleClickForTargetCell(cellPos, true);\n }\n\n const markCell = (cellPos: CellPos) => {\n cleanAllForFigure();\n\n setMarkedCells((prev) => {\n const preparedPrev = [...prev];\n \n const foundCellIndex = preparedPrev.findIndex(([x, y]) => x === cellPos[0] && y === cellPos[1]);\n if (foundCellIndex !== -1) return prev.filter((_, i) => i !== foundCellIndex);\n return [...preparedPrev, cellPos];\n });\n }\n \n const getHasCheckByCellPos = ([x, y]: CellPos) => {\n if (actualState.length === 0) return false;\n const cell = actualState[y][x];\n if (!cell.figure) return false;\n return hasCheck(cell, currentColor, linesWithCheck);\n }\n\n const startRenderArrow = (pos: CellPos) => {\n const startPos: CellPos = [\n (pos[0] + 1) * boardConfig.cellSize - boardConfig.cellSize / 2 - 10,\n (pos[1] + 1) * boardConfig.cellSize - boardConfig.cellSize / 2,\n ];\n\n setStartArrowCoord(startPos);\n }\n\n const endRenderArrow = ([x, y]: CellPos) => {\n if (startArrowCoord[0] === -1) return;\n\n setArrowsCoords((arrows) => {\n const copiedArrows = [...arrows];\n\n return [\n ...copiedArrows, \n { \n start: [...startArrowCoord], \n end: correctGrabbingPosForArrow([x, y], boardConfig),\n }\n ];\n });\n\n setStartArrowCoord([-1, -1]);\n }\n\n // Обработка выбора превращения пешки\n const handleSelectFigurePicker = (figure: Figure) => {\n const startPos = fromPos[0] > -1 \n ? fromPos\n : clickedPos\n\n const updatedCells = JSChessEngine.transformPawnToFigure(\n actualState,\n startPos,\n targetPos,\n figure\n );\n\n const moveData: MoveData = {\n figure,\n from: startPos,\n to: targetPos,\n type: 'transform',\n };\n\n onChange(moveData);\n setActualState(updatedCells);\n toggleCurrentColor();\n setNewMove({ \n move: moveData, \n withTransition: false, \n transformTo: figure,\n });\n\n const linesWithCheck = JSChessEngine.getLinesWithCheck(\n updatedCells, \n currentColor, \n boardReversed\n );\n\n setLinesWithCheck(linesWithCheck);\n\n // handleEndGame(updatedCells, linesWithCheck);\n\n clearGrabbingPos();\n clearPossibleMoves();\n clearMarkedCells();\n setShowFigurePicker(false);\n clearClickedPos();\n setHoldedFigure(undefined);\n setFromPos([-1, -1]);\n setClickedPos([-1, -1]);\n clearArrows();\n }\n\n const handleGrabbingCell = (cellPos: CellPos) => {\n setGrabbingCell(cellPos);\n }\n\n return {\n fromPos,\n newMove,\n animated,\n boardConfig,\n markedCells,\n grabbingPos,\n actualState,\n currentColor,\n arrowsCoords,\n initialState,\n holdedFigure,\n grabbingCell,\n possibleMoves,\n linesWithCheck,\n startArrowCoord,\n showFigurePicker,\n\n markCell,\n setNewMove,\n setAnimated,\n handleClick,\n clearFromPos,\n handleGrabEnd,\n handleGrabbing,\n endRenderArrow,\n setActualState,\n setPlayerColor,\n setCurrentColor,\n selectClickFrom,\n selectHoverFrom,\n setInitialState,\n setBoardReversed,\n startRenderArrow,\n cleanAllForFigure,\n reverseChessBoard,\n handleGrabbingCell,\n moveFigureByChange,\n getHasCheckByCellPos,\n handleSelectFigurePicker,\n handleChangeFromExternal,\n moveFigureByExternalChange,\n }\n}\n","import { CellPos, Figure } from \"../JSChessEngine\";\nimport React, { FC } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { getFigureCSS } from \"./utils\";\nimport cn from 'classnames';\nimport { ChessBoardConfig } from \"./models\";\n\ntype HoldedFigureProps = {\n holdedFigure?: Figure;\n grabbingPos: CellPos;\n boardConfig: ChessBoardConfig;\n}\n\nexport const HoldedFigure: FC<HoldedFigureProps> = (props) => {\n const { holdedFigure, grabbingPos, boardConfig } = props;\n\n // Эта проверка убирает мерациния фигуры из точки -1 -1\n // в самом начале захвата фигуры\n const isCanShowFigure =\n holdedFigure \n && grabbingPos[0] > -1 \n && grabbingPos[1] > -1;\n\n return isCanShowFigure && (\n <div \n className={cn([\n styles.figure,\n styles.holdedFigure, \n ])}\n style={{ \n position: 'fixed',\n zIndex: 6,\n top: `${grabbingPos[1] - boardConfig.cellSize / 2}px`,\n left: `${grabbingPos[0] - boardConfig.cellSize / 2}px`,\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n > {boardConfig.piecesMap[getFigureCSS(holdedFigure)]('80%')}</div>\n );\n}\n","import React, { FC } from \"react\";\nimport { checkIsPossibleMove, getFigureCSS, getFilledArrayBySize } from \"./utils\";\nimport styles from './ChessBoard.module.css';\nimport cn from 'classnames';\nimport { CellPos, Figure } from \"../JSChessEngine\";\nimport { HoldedFigure } from \"./HoldedFigure\";\nimport { ChessBoardConfig } from \"./models\";\nimport { FACTOR_FOR_SIZE_CIRCLE_MARK } from \"./constants\";\n\nconst BASE_BOARD_SIZE = 8\n\ntype ChessBoardInteractiveLayoutProps = {\n size?: number;\n boardConfig: ChessBoardConfig;\n selectedPos: CellPos;\n possibleMoves: CellPos[];\n markedCells: CellPos[];\n holdedFigure?: Figure;\n grabbingPos: CellPos;\n onHasCheck: (cellPos: CellPos) => boolean;\n}\n\nexport const ChessBoardInteractiveLayout: FC<ChessBoardInteractiveLayoutProps> = (props) => {\n const { \n size = BASE_BOARD_SIZE,\n boardConfig,\n selectedPos,\n possibleMoves,\n holdedFigure,\n grabbingPos,\n markedCells,\n onHasCheck,\n } = props;\n\n return (\n <div>\n <HoldedFigure \n holdedFigure={holdedFigure}\n grabbingPos={grabbingPos}\n boardConfig={boardConfig}\n />\n <div className={styles.interactiveLayout}>\n {getFilledArrayBySize(size).map((_, j) => \n <div className={styles.row} key={`interactive-layout-${j}`}>\n {getFilledArrayBySize(size).map((_, i) => (\n <div \n className={cn(styles.interactiveCell, { \n [styles.selectedCell]: selectedPos[0] === i && selectedPos[1] === j,\n [styles.markedCell]: checkIsPossibleMove(markedCells, [i, j]),\n [styles.checkedCell]: onHasCheck([i, j])\n })}\n key={`interactive-layout-${i}`}\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n backgroundColor: selectedPos[0] === i && selectedPos[1] === j \n ? boardConfig.selectedCellColor\n : 'transparent',\n border: selectedPos[0] === i && selectedPos[1] === j \n ? boardConfig.selectedCellBorder\n : 'none',\n boxShadow: checkIsPossibleMove(markedCells, [i, j])\n ? `inset 0 0 30px ${boardConfig.markedCellColor}`\n : onHasCheck([i, j]) ? `inset 0 0 30px ${boardConfig.checkedCellColor}`\n : 'none'\n }}\n >\n {selectedPos[0] === i && selectedPos[1] === j && holdedFigure && (\n <div \n className={cn([\n styles.figure,\n styles.holdedFigure,\n ], {\n [styles.bluredFigure]: grabbingPos[0] !== -1,\n })}\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n >{boardConfig.piecesMap[getFigureCSS(holdedFigure)]('80%')}</div>\n )}\n {checkIsPossibleMove(possibleMoves, [i, j]) && (\n <div \n className={styles.possibleMoveMark}\n style={{\n width: boardConfig.cellSize / FACTOR_FOR_SIZE_CIRCLE_MARK,\n height: boardConfig.cellSize / FACTOR_FOR_SIZE_CIRCLE_MARK,\n backgroundColor: boardConfig.circleMarkColor,\n }}\n />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React, { FC, useMemo } from 'react';\nimport styles from './ChessBoard.module.css';\nimport { calcAngle } from './utils';\n\ninterface ArrowProps {\n start: number[];\n end: number[];\n color: string;\n}\n\n// Используется для центрирования конца\n// стрелки относительно клетки\nconst ARROW_CORRECTION = 20;\n\nexport const Arrow: FC<ArrowProps> = (props) => {\n const { start, end, color } = props;\n\n const arrowLength = useMemo(\n () =>\n Math.sqrt(\n Math.pow(end[0] - start[0], 2) + Math.pow(end[1] - start[1], 2)\n ),\n [start, end]\n );\n\n if (arrowLength <= ARROW_CORRECTION * 3) {\n return null;\n }\n\n return (\n <div\n className={styles.arrow}\n style={{\n height: arrowLength - ARROW_CORRECTION,\n top: `${start[1]}px`,\n left: `${start[0]}px`,\n transformOrigin: `10px 0`,\n transform: `rotate(${calcAngle(start, end)}deg)`,\n backgroundColor: color,\n }}\n >\n <div \n className={styles.arrowEnd} \n style={{ borderLeftColor: color }}\n ></div>\n </div>\n );\n};\n","import React, { FC } from \"react\";\nimport { CellPos } from \"../JSChessEngine\";\nimport { Arrow } from \"./Arrow\";\nimport { ArrowCoords, ChessBoardConfig } from \"./models\";\nimport styles from './ChessBoard.module.css';\n\ntype ArrowLayoutType = {\n startArrowCoord: CellPos;\n arrowsCoords: ArrowCoords[];\n grabbingPos: CellPos;\n boardConfig: ChessBoardConfig;\n}\n\nexport const ArrowLayout: FC<ArrowLayoutType> = (props) => {\n const {\n startArrowCoord,\n arrowsCoords,\n grabbingPos,\n boardConfig\n } = props;\n\n return (\n <div className={styles.arrowsLayer}>\n {(startArrowCoord[0] > -1) && (grabbingPos[0] > -1) && (\n <Arrow start={startArrowCoord} end={grabbingPos} color={boardConfig.arrowColor} />\n )}\n {arrowsCoords.map((coords, i) => (\n <Arrow key={i} {...coords} color={boardConfig.arrowColor} />\n ))}\n </div>\n );\n}","import React, { FC, useCallback } from 'react';\nimport styles from './ChessBoard.module.css';\nimport { getFigureCSS, getFiguresByColor } from './utils';\nimport { Figure, FigureColor } from '../JSChessEngine';\nimport { ChessBoardConfig } from './models';\n\ninterface FigurePickerProps {\n boardConfig: ChessBoardConfig;\n color: FigureColor;\n forPawnTransform?: boolean;\n onSelect: (figure: Figure) => void;\n}\n\nexport const FigurePicker: FC<FigurePickerProps> = (props) => {\n const { boardConfig, color, onSelect, forPawnTransform = false } = props;\n\n const handleChange = useCallback(\n (figure: Figure) => {\n onSelect(figure);\n },\n [onSelect]\n );\n\n return (\n <div className={styles.figurePicker}>\n {getFiguresByColor(color, forPawnTransform).map((figure) => (\n <div\n key={figure.type}\n className={styles.figurePickerItem}\n style={{\n width: boardConfig.cellSize,\n height: boardConfig.cellSize,\n }}\n onClick={() => handleChange(figure)}\n >\n {boardConfig.piecesMap[getFigureCSS(figure)]('80%')}\n </div>\n ))}\n </div>\n );\n};\n","import { FENtoGameState, FigureColor, GameResult, MoveData, JSChessEngine } from \"../JSChessEngine\";\nimport React, { FC, useEffect } from \"react\";\nimport styles from './ChessBoard.module.css';\nimport { ChessBoardCellsLayout } from \"./ChessBoardCellsLayout\";\nimport { ChessBoardFiguresLayout } from \"./ChessBoardFiguresLayout\";\nimport { ChessBoardControlLayout } from \"./ChessBoardControlLayout\";\nimport { useChessBoardInteractive } from \"./useChessBoardInteractive\";\nimport { ChessBoardInteractiveLayout } from \"./ChessBoardInteractiveLayout\";\nimport { ChangeMove, ChessBoardConfig } from \"./models\";\nimport { ArrowLayout } from \"./ArrowLayout\";\nimport { FigurePicker } from \"./FigurePicker\";\nimport { correctGrabbingPosByScroll, correctGrabbingPosForArrow, createHtmlReversedStateHolder, setHtmlReversedStateHolderValue } from \"./utils\";\n\ntype ChessBoardProps = {\n FEN: string;\n onChange: (moveData: MoveData) => void;\n onEndGame: (result: GameResult) => void;\n change?: ChangeMove;\n reversed?: boolean;\n config?: Partial<ChessBoardConfig>;\n playerColor?: FigureColor;\n viewOnly?: boolean;\n}\n\nexport const ChessBoard: FC<ChessBoardProps> = (props) => {\n const { \n FEN, \n onChange,\n onEndGame,\n change, \n reversed,\n config,\n playerColor,\n viewOnly,\n } = props;\n\n const {\n fromPos,\n newMove,\n animated,\n boardConfig,\n markedCells,\n grabbingPos,\n currentColor,\n arrowsCoords,\n initialState,\n holdedFigure,\n grabbingCell,\n possibleMoves,\n startArrowCoord,\n showFigurePicker,\n markCell,\n handleClick,\n handleGrabEnd,\n handleGrabbing,\n endRenderArrow,\n setActualState,\n setPlayerColor,\n setCurrentColor,\n selectHoverFrom,\n setInitialState,\n setBoardReversed,\n startRenderArrow,\n cleanAllForFigure,\n handleGrabbingCell,\n getHasCheckByCellPos,\n handleSelectFigurePicker,\n handleChangeFromExternal,\n } = useChessBoardInteractive({ onChange, onEndGame, config });\n\n const handleUpdateFEN = (FEN: string, reversed: boolean) => {\n const { boardState, currentColor } = FENtoGameState(FEN, reversed);\n cleanAllForFigure();\n setInitialState(boardState);\n setActualState(boardState);\n setCurrentColor(currentColor);\n setBoardReversed(reversed);\n };\n\n useEffect(() => {\n createHtmlReversedStateHolder();\n }, [])\n\n useEffect(() => {\n setPlayerColor(playerColor);\n }, [playerColor]);\n\n useEffect(() => {\n handleUpdateFEN(FEN, reversed);\n\n // For check reversed chessboard in FiguresLayout\n setHtmlReversedStateHolderValue(reversed);\n }, [FEN, reversed])\n\n useEffect(() => {\n if (!change) return;\n const reversedChange = reversed ? JSChessEngine.reverseMove(change.move) : change.move;\n handleChangeFromExternal(reversedChange);\n }, [change]);\n\n return (\n <div className={styles.chessBoard}>\n <ChessBoardCellsLayout boardConfig={boardConfig} />\n <ChessBoardFiguresLayout\n initialState={initialState}\n change={newMove}\n boardConfig={boardConfig}\n animated={animated}\n // reversed={reversed} ** While blocked this props **\n />\n <ChessBoardInteractiveLayout\n selectedPos={fromPos}\n possibleMoves={possibleMoves}\n holdedFigure={holdedFigure}\n grabbingPos={correctGrabbingPosByScroll(grabbingPos)}\n markedCells={markedCells}\n boardConfig={boardConfig}\n onHasCheck={getHasCheckByCellPos}\n />\n <ArrowLayout \n arrowsCoords={arrowsCoords}\n startArrowCoord={startArrowCoord}\n grabbingPos={correctGrabbingPosForArrow(grabbingCell, boardConfig)}\n boardConfig={boardConfig}\n />\n <ChessBoardControlLayout\n boardConfig={boardConfig}\n onClick={(pos) => handleClick(pos, viewOnly)}\n onGrabStart={viewOnly ? () => {} : selectHoverFrom}\n onGrabStartRight={startRenderArrow}\n onGrabEnd={viewOnly ? () => {} : handleGrabEnd}\n onGrabEndRight={endRenderArrow}\n onGrabbing={viewOnly ? () => {} : handleGrabbing}\n onRightClick={markCell}\n onGrabbingCell={handleGrabbingCell}\n />\n {showFigurePicker && (\n <div className={styles.chessBoardFigurePicker}>\n <FigurePicker\n boardConfig={boardConfig}\n color={currentColor}\n forPawnTransform\n onSelect={handleSelectFigurePicker}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["DIRECTIONS_D","DIRECTIONS_VH","FIGURES_COUNTS","PAWNS_COUNT","KNIGHTS_COUNT","BISHOPS_COUNT","ROOKS_COUNT","QUEENS_COUNT","KINGS_COUNT","JSChessEngine","detectDrawByRepeatMoves","fenMoves","length","lastMoves","slice","firstFromSelectedMoves","lastFromSelectedMoves","firstResultsFENs","join","lastResultsFENs","getCastlingType","move","figure","touched","type","undefined","horizontalDiff","to","from","Math","abs","state","_ref","linesWithCheck","revese","i","j","nextPositions","pawnPossibleMoves","getNextMovesPawn","correctionPossibleMoves","bishopPossibleMoves","getNextMovesBishop","knigtPossibleMoves","getNextMovesKnight","rookPossibleMovese","getNextMovesRook","queenPossibleMoves","getNextMovesQueen","getNextMovesKing","prepareCells","concat","reversedCells","reverse","map","row","moveData","boardSize","reversedMove","FEN","moveVector","reversedMoveVector","pos","color","_state$pos$1$pos$0$fi","target","getFigureColor","targetColor","_state$target$1$targe","_state$target$1$targe2","_state$target$1$targe3","isKing","_state$target$1$targe4","_state$target$1$targe5","checkEnemy","_state$target$1$targe6","beated","_state$pos$1$pos$","figurePos","positions","count","_iterator","_createForOfIteratorHelperLoose","_step","done","value","checkEnemyKing","figureColor","kingPos","enemysPos","forEach","_","push","cell","checkInBorderBoard","hasFigure","typeMove","attackerPos","possibleMoves","getTeammateKingPos","getAllEnemysPositions","longrangeEnemysPos","filter","checkFigureIsLongRange","correctedPossibleMoves","kingBehidFigure","enemyPos","enemyType","direction","attackedLine","getFullAttackedLine","foundIndexKingPos","findIndex","foundIndexFigurePos","countFiguresBehindKing","getCountEnemys","possibleMove","attackedPos","preparedMoves","correctedMovesForProtectKing","checkPosBetweenAttckerAndKing","nextMove","attackedPositions","checkPossibleAttackTo","_ref2","pawnAttackedPos","calcPawnMoves","checkAttackedCellByPawn","bishopAttackedPos","calcDiagonalMoves","checkAttackedCell","targetPos","knigtAttackedPos","calcKnightMoves","rookAttackedPos","calcHorizontalAndVerticalMoves","queenAttachedPosD","queenAttachedPosVH","kingAttackedPos","calcKingMoves","onCheckPossible","onCheckFigureInCell","checkPossibleMoveTo","nextMoves","pawnColor","checkBeatedCell","checkPossiblePawnMoveToPos","possibleMovesReverse","possibleMovesForColor","castlingPath","_state$kingPos$1$king","allAttackedPositionsByEnemys","getAllAttckedPostionsByEnemys","foundCheckKingPos","find","castlingPathWithoutRook","rookPos","pop","_state$rookPos$1$rook","castlinPathWithFigures","castlingPos","isPossibleCastling","onlyAttacks","castlingMovesDefault","longCastlingMovesDefault","castlingMovesReversed","longCastlingMovesReversed","castlingMoves","longCastlingMoves","foundInAttacked","attackedMove","checkPossibleCastling","diagonalMoves","verticalAndHorizontalMoves","moves","activeColor","posTeammates","getAllTeammatesPositionsByColor","figureType","getFigureType","attackedLineBishop","hasAttackedEnemyKing","attackedLineRook","attackedLineQueen","pawnAttackedPositions","knigtAttackedPositions","currentFigure","prevPos","diffHorizontal","updatedCells","_extends","diff","fromPos","transformFigure","preparedState","fieldsWithFigures","cellsWithFigures","getFieldsWithFigures","resultType","figureForCommon","_cell$figure","_cell$figure2","countsNextMoves","getNextMoves","countsSumResult","reduce","prevValue","curentValue","winColor","flatState","filtred","_ref3","countsConfig","filtredCells","beatedCountsData","pawn","getFiguresCountByType","knight","bishop","rook","queen","LETTERS","FIGURES_LATTERS_NOTATIONS","white","king","black","LETTER_TO_FIGURE_MAP","P","N","B","R","Q","K","p","n","b","r","q","k","ALL_FIGURES","CHESS_BOARD_CONFIG","cellWhiteBg","cellBlackBg","cellSelectedBg","cellSize","figures","INITIAL_CELLS","getPositionByFEN","positionFEN","parseInt","letter","prepareCastlingByFEN","castlingNotation","includes","partFENtoState","notation","restoredState","stateRows","split","stateRow","rowCells","cellNotation","FENtoGameState","reversed","gameState","boardState","currentColor","_FEN$split","stateNotaion","FENcastling","beatedField","preparedStateNotation","isNaN","dotsCount","dotI","posBeatedCell","reverseChessBoard","getBeatedCellFENfromState","beatedFieldFEN","toString","getFENpositionsFromState","positionsFEN","emptyCellsCount","getFENcastlingFromState","whiteCastlingFEN","blackCastlingFEN","stateLastCell","replace","stateToFEN","countMoves","casttlingFEN","colorFEN","blackMoves","CHESS_PIECES_MAP","pawnWhite","size","React","width","height","viewBox","fill","xmlns","d","knightWhite","bishopWhite","rookWhite","queenWhite","kingWhite","pawnBlack","knightBlack","cx","cy","rx","ry","bishopBlack","rookBlack","queenBlack","kingBlack","DEFAULT_CELL_SIZE","FACTOR_FOR_SIZE_CIRCLE_MARK","DEFAULT_CIRCLE_MARK_COLOR","DEFAULT_WHITE_CELL_COLOR","DEFAULT_BLACK_CELL_COLOR","DEFAULT_SELECTED_CELL_COLOR","DEFAULT_SELECTED_CELL_BORDER","DEFAULT_ARROW_COLOR","DEFAULT_MARKED_CELL_COLOR","DEFAULT_CHECKED_CELL_COLOR","DEFAULT_PIECES_MAP","DEFAULT_CHESSBORD_CONFIG","circleMarkColor","whiteCellColor","blackCellColor","selectedCellColor","selectedCellBorder","arrowColor","markedCellColor","checkedCellColor","piecesMap","getFigureCSS","getIsLightCell","rowId","cellId","getFilledArrayBySize","array","mapCellsToFiguresArray","figuresWithPosition","position","checkIsPossibleMove","checkPositionsHas","posItem","checkIsCastlingMove","hasCheck","degrees","a","atan","PI","calcAngle","start","end","x","y","getChessBoardConfig","config","configKeyes","Object","keys","buildedConfig","key","getFiguresByColor","forPawnTransform","figureNamesForPawn","figureName","figureNames","correctGrabbingPosByScroll","window","scrollX","scrollY","correctGrabbingPosForArrow","boardConfig","createHtmlReversedStateHolder","reversedStateHolder","document","createElement","setAttribute","body","append","setHtmlReversedStateHolderValue","getElementById","JSON","stringify","getHtmlReversedStateHolderValue","chessboardReversed","getAttribute","BASE_BOARD_SIZE","ChessBoardCellsLayout","_ref$size","className","styles","style","backgroundColor","ChessBoardFiguresLayout","props","initialState","change","animated","_useState","useState","actualState","setActualState","useEffect","prevState","updatedState","transformTo","castlingType","kingIndex","rookIndex","console","log","foundAttactedFigure","foundFigureByPositionFrom","figuresLayout","_cn","cn","hiddenFigure","top","left","transition","ChessBoardControlLayout","_props$size","onClick","onGrabEnd","onGrabbing","onGrabStart","onRightClick","onGrabbingCell","onGrabEndRight","onGrabStartRight","pressed","setPressed","handleClick","cellPos","handleGrabStart","event","button","handleGrabEnd","handleGrabing","pageX","pageY","handleContextMenu","preventDefault","handleGrabbingCell","controlLayout","controlLayoutGrabbing","onMouseMove","controlCell","onMouseDown","onMouseUp","onContextMenu","useChessBoardInteractive","onChange","onEndGame","setBoardConfig","_useState2","setInitialState","_useState3","_useState4","setFromPos","_useState5","holdedFigure","setHoldedFigure","_useState6","grabbingPos","setGrabbingPos","_useState7","setPossibleMoves","_useState8","boardReversed","setBoardReversed","_useState9","setCurrentColor","_useState10","playerColor","setPlayerColor","_useState11","newMove","setNewMove","_useState12","setLinesWithCheck","_useState13","markedCells","setMarkedCells","_useState14","grabbingCell","setGrabbingCell","_useState15","clickedPos","setClickedPos","_useState16","clickedFigure","setClickedFigure","_useState17","clickPossibleMoves","setClickPossibleMoves","_useState18","startArrowCoord","setStartArrowCoord","_useState19","arrowsCoords","setArrowsCoords","_useState20","showFigurePicker","setShowFigurePicker","_useState21","setTargetPos","_useState22","setAnimated","clearFromPos","clearGrabbingPos","clearPossibleMoves","clearClickPossibleMoves","toggleCurrentColor","prevColor","clearMarkedCells","clearClickedPos","clearArrows","gameResult","getGameResult","cleanAllForFigure","cleanAllForClickedFigure","prevReversed","selectFigureFrom","selectClickFrom","_selectFigureFrom","selectHoverFrom","_selectFigureFrom2","moveFigure","inNextMoves","conditionForDoMove","_JSChessEngine$change","changeState","linesCheck","getLinesWithCheck","reversedUpdatedCells","moveFigureByChange","_change$move","_JSChessEngine$change2","updatedChange","reverseMove","moveFigureByClick","_JSChessEngine$change3","moveFigureByExternalChange","_JSChessEngine$change4","handleGrabbing","withTransition","foundPosInPossible","_moveFigure","handleChangeFromExternal","_moveFigureByExternal","handleClickForTargetCell","_moveFigureByClick","viewOnly","markCell","prev","preparedPrev","foundCellIndex","getHasCheckByCellPos","startRenderArrow","startPos","endRenderArrow","arrows","copiedArrows","handleSelectFigurePicker","transformPawnToFigure","HoldedFigure","isCanShowFigure","zIndex","ChessBoardInteractiveLayout","selectedPos","onHasCheck","interactiveLayout","_cn2","interactiveCell","selectedCell","markedCell","checkedCell","border","boxShadow","bluredFigure","possibleMoveMark","ARROW_CORRECTION","Arrow","arrowLength","useMemo","sqrt","pow","arrow","transformOrigin","transform","arrowEnd","borderLeftColor","ArrowLayout","arrowsLayer","coords","FigurePicker","onSelect","_props$forPawnTransfo","handleChange","useCallback","figurePicker","figurePickerItem","ChessBoard","_useChessBoardInterac","handleUpdateFEN","_FENtoGameState","reversedChange","chessBoard","chessBoardFigurePicker"],"mappings":"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"}
|