react-chessboard-ui 2.10.0 → 2.12.0

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.
@@ -16,6 +16,7 @@ declare type ChessBoardProps = {
16
16
  arrows?: (ArrowCoords & {
17
17
  color?: string;
18
18
  })[];
19
+ toggleTurn?: boolean;
19
20
  };
20
21
  export declare const ChessBoard: FC<ChessBoardProps>;
21
22
  export {};
@@ -6,12 +6,14 @@ declare type UseChessBoardInteractiveProps = {
6
6
  onChange: (moveData: MoveData) => void;
7
7
  onEndGame: (result: GameResult) => void;
8
8
  onClickByChessBoard?: (data: ClickData) => void;
9
+ toggleTurn?: boolean;
9
10
  };
10
11
  export declare const useChessBoardInteractive: (props: UseChessBoardInteractiveProps) => {
11
12
  fromPos: CellPos;
12
13
  newMove: ChangeMove;
13
14
  animated: boolean;
14
15
  movesTrail: [CellPos, CellPos];
16
+ invalidFEN: boolean;
15
17
  boardConfig: ChessBoardConfig;
16
18
  markedCells: CellPos[];
17
19
  grabbingPos: CellPos;
@@ -31,6 +33,7 @@ export declare const useChessBoardInteractive: (props: UseChessBoardInteractiveP
31
33
  handleClick: (cellPos: CellPos, viewOnly?: boolean) => void;
32
34
  clearFromPos: () => void;
33
35
  handleGrabEnd: (cellPos: CellPos, withTransition?: boolean) => void;
36
+ setInvalidFEN: import("react").Dispatch<import("react").SetStateAction<boolean>>;
34
37
  handleGrabbing: (x: number, y: number) => void;
35
38
  endRenderArrow: ([x, y]: CellPos) => void;
36
39
  setActualState: import("react").Dispatch<import("react").SetStateAction<Cell[][]>>;
@@ -27,6 +27,7 @@ export declare const partFENtoState: (notation: string) => Cell[][];
27
27
  export declare const FENtoGameState: (FEN: string, reversed?: boolean) => {
28
28
  boardState: Cell[][];
29
29
  currentColor: FigureColor;
30
+ invalidFEN?: boolean;
30
31
  };
31
32
  /**
32
33
  * Возвращает FEN битое поле из состояние доски
package/dist/index.css CHANGED
@@ -148,6 +148,47 @@
148
148
  align-items: center;
149
149
  }
150
150
 
151
+ ._jyC3- {
152
+ z-index: 102;
153
+ position: absolute;
154
+ top: 0;
155
+ right: 0;
156
+ bottom: 0;
157
+ left: 0;
158
+ -webkit-backdrop-filter: blur(4px);
159
+ backdrop-filter: blur(4px);
160
+ display: flex;
161
+ justify-content: center;
162
+ align-items: center;
163
+ }
164
+
165
+ ._8urIN {
166
+ padding: 12px 14px;
167
+ border: 1px solid #f4b8b8;
168
+ border-radius: 6px;
169
+ background: #fff1f1;
170
+ color: #8a1f1f;
171
+ font-size: 14px;
172
+ line-height: 1.5;
173
+ }
174
+
175
+ ._8urIN a {
176
+ color: #b42318;
177
+ font-weight: 600;
178
+ text-decoration: underline;
179
+ text-underline-offset: 2px;
180
+ cursor: pointer;
181
+ }
182
+
183
+ ._8urIN a:hover {
184
+ color: #7a1712;
185
+ }
186
+
187
+ ._3p5AF {
188
+ color: #6b6b6b !important;
189
+ font-size: 12px;
190
+ }
191
+
151
192
  ._1RqCc {
152
193
  width: 100%;
153
194
  height: 100%;
package/dist/index.js CHANGED
@@ -278,22 +278,24 @@ JSChessEngine.correctionPossibleMoves = function (state, figurePos, possibleMove
278
278
  DIRECTIONS_D.forEach(function (direction) {
279
279
  if (!kingBehidFigure) {
280
280
  var attackedLine = JSChessEngine.getFullAttackedLine(state, enemyPos, direction);
281
- var foundIndexKingPos = attackedLine.findIndex(function (pos) {
282
- return pos[0] === kingPos[0] && pos[1] === kingPos[1];
283
- });
284
- var foundIndexFigurePos = attackedLine.findIndex(function (pos) {
285
- return pos[0] === figurePos[0] && pos[1] === figurePos[1];
286
- });
287
- var countFiguresBehindKing = JSChessEngine.getCountEnemys(state, enemyPos, attackedLine);
288
- kingBehidFigure = foundIndexKingPos > -1 && foundIndexFigurePos > -1 && foundIndexKingPos > foundIndexFigurePos && countFiguresBehindKing === 1;
289
- if (kingBehidFigure) {
290
- possibleMoves.forEach(function (possibleMove) {
291
- [].concat(attackedLine, [enemyPos]).forEach(function (attackedPos) {
292
- if (attackedPos[0] === possibleMove[0] && attackedPos[1] === possibleMove[1]) {
293
- correctedPossibleMoves.push(possibleMove);
294
- }
295
- });
281
+ if (!!kingPos) {
282
+ var foundIndexKingPos = attackedLine.findIndex(function (pos) {
283
+ return pos[0] === kingPos[0] && pos[1] === kingPos[1];
296
284
  });
285
+ var foundIndexFigurePos = attackedLine.findIndex(function (pos) {
286
+ return pos[0] === figurePos[0] && pos[1] === figurePos[1];
287
+ });
288
+ var countFiguresBehindKing = JSChessEngine.getCountEnemys(state, enemyPos, attackedLine);
289
+ kingBehidFigure = foundIndexKingPos > -1 && foundIndexFigurePos > -1 && foundIndexKingPos > foundIndexFigurePos && countFiguresBehindKing === 1;
290
+ if (kingBehidFigure) {
291
+ possibleMoves.forEach(function (possibleMove) {
292
+ [].concat(attackedLine, [enemyPos]).forEach(function (attackedPos) {
293
+ if (attackedPos[0] === possibleMove[0] && attackedPos[1] === possibleMove[1]) {
294
+ correctedPossibleMoves.push(possibleMove);
295
+ }
296
+ });
297
+ });
298
+ }
297
299
  }
298
300
  }
299
301
  });
@@ -305,22 +307,24 @@ JSChessEngine.correctionPossibleMoves = function (state, figurePos, possibleMove
305
307
  DIRECTIONS_VH.forEach(function (direction) {
306
308
  if (!kingBehidFigure) {
307
309
  var attackedLine = JSChessEngine.getFullAttackedLine(state, enemyPos, direction);
308
- var foundIndexKingPos = attackedLine.findIndex(function (pos) {
309
- return pos[0] === kingPos[0] && pos[1] === kingPos[1];
310
- });
311
- var foundIndexFigurePos = attackedLine.findIndex(function (pos) {
312
- return pos[0] === figurePos[0] && pos[1] === figurePos[1];
313
- });
314
- var countFiguresBehindKing = JSChessEngine.getCountEnemys(state, enemyPos, attackedLine);
315
- kingBehidFigure = foundIndexKingPos > -1 && foundIndexFigurePos > -1 && foundIndexKingPos > foundIndexFigurePos && countFiguresBehindKing === 1;
316
- if (kingBehidFigure) {
317
- possibleMoves.forEach(function (possibleMove) {
318
- [].concat(attackedLine, [enemyPos]).forEach(function (attackedPos) {
319
- if (attackedPos[0] === possibleMove[0] && attackedPos[1] === possibleMove[1]) {
320
- correctedPossibleMoves.push(possibleMove);
321
- }
322
- });
310
+ if (!!kingPos) {
311
+ var foundIndexKingPos = attackedLine.findIndex(function (pos) {
312
+ return pos[0] === kingPos[0] && pos[1] === kingPos[1];
323
313
  });
314
+ var foundIndexFigurePos = attackedLine.findIndex(function (pos) {
315
+ return pos[0] === figurePos[0] && pos[1] === figurePos[1];
316
+ });
317
+ var countFiguresBehindKing = JSChessEngine.getCountEnemys(state, enemyPos, attackedLine);
318
+ kingBehidFigure = foundIndexKingPos > -1 && foundIndexFigurePos > -1 && foundIndexKingPos > foundIndexFigurePos && countFiguresBehindKing === 1;
319
+ if (kingBehidFigure) {
320
+ possibleMoves.forEach(function (possibleMove) {
321
+ [].concat(attackedLine, [enemyPos]).forEach(function (attackedPos) {
322
+ if (attackedPos[0] === possibleMove[0] && attackedPos[1] === possibleMove[1]) {
323
+ correctedPossibleMoves.push(possibleMove);
324
+ }
325
+ });
326
+ });
327
+ }
324
328
  }
325
329
  }
326
330
  });
@@ -332,22 +336,24 @@ JSChessEngine.correctionPossibleMoves = function (state, figurePos, possibleMove
332
336
  [].concat(DIRECTIONS_D, DIRECTIONS_VH).forEach(function (direction) {
333
337
  if (!kingBehidFigure) {
334
338
  var attackedLine = JSChessEngine.getFullAttackedLine(state, enemyPos, direction);
335
- var foundIndexKingPos = attackedLine.findIndex(function (pos) {
336
- return pos[0] === kingPos[0] && pos[1] === kingPos[1];
337
- });
338
- var foundIndexFigurePos = attackedLine.findIndex(function (pos) {
339
- return pos[0] === figurePos[0] && pos[1] === figurePos[1];
340
- });
341
- var countFiguresBehindKing = JSChessEngine.getCountEnemys(state, enemyPos, attackedLine);
342
- kingBehidFigure = foundIndexKingPos > -1 && foundIndexFigurePos > -1 && foundIndexKingPos > foundIndexFigurePos && countFiguresBehindKing === 1;
343
- if (kingBehidFigure) {
344
- possibleMoves.forEach(function (possibleMove) {
345
- [].concat(attackedLine, [enemyPos]).forEach(function (attackedPos) {
346
- if (attackedPos[0] === possibleMove[0] && attackedPos[1] === possibleMove[1]) {
347
- correctedPossibleMoves.push(possibleMove);
348
- }
349
- });
339
+ if (!!kingPos) {
340
+ var foundIndexKingPos = attackedLine.findIndex(function (pos) {
341
+ return pos[0] === kingPos[0] && pos[1] === kingPos[1];
342
+ });
343
+ var foundIndexFigurePos = attackedLine.findIndex(function (pos) {
344
+ return pos[0] === figurePos[0] && pos[1] === figurePos[1];
350
345
  });
346
+ var countFiguresBehindKing = JSChessEngine.getCountEnemys(state, enemyPos, attackedLine);
347
+ kingBehidFigure = foundIndexKingPos > -1 && foundIndexFigurePos > -1 && foundIndexKingPos > foundIndexFigurePos && countFiguresBehindKing === 1;
348
+ if (kingBehidFigure) {
349
+ possibleMoves.forEach(function (possibleMove) {
350
+ [].concat(attackedLine, [enemyPos]).forEach(function (attackedPos) {
351
+ if (attackedPos[0] === possibleMove[0] && attackedPos[1] === possibleMove[1]) {
352
+ correctedPossibleMoves.push(possibleMove);
353
+ }
354
+ });
355
+ });
356
+ }
351
357
  }
352
358
  }
353
359
  });
@@ -1491,6 +1497,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1491
1497
  preparedState[preparedState.length - 1][preparedState.length - 1].figure = _extends({}, preparedState[preparedState.length - 1][preparedState.length - 1].figure, {
1492
1498
  touched: false
1493
1499
  });
1500
+ }
1501
+ if (!!preparedState[preparedState.length - 1][4].figure) {
1494
1502
  preparedState[preparedState.length - 1][4].figure = _extends({}, preparedState[preparedState.length - 1][4].figure, {
1495
1503
  touched: false
1496
1504
  });
@@ -1501,6 +1509,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1501
1509
  preparedState[preparedState.length - 1][0].figure = _extends({}, preparedState[preparedState.length - 1][0].figure, {
1502
1510
  touched: false
1503
1511
  });
1512
+ }
1513
+ if (!!preparedState[preparedState.length - 1][4].figure) {
1504
1514
  preparedState[preparedState.length - 1][4].figure = _extends({}, preparedState[preparedState.length - 1][4].figure, {
1505
1515
  touched: false
1506
1516
  });
@@ -1511,6 +1521,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1511
1521
  preparedState[0][preparedState.length - 1].figure = _extends({}, preparedState[0][preparedState.length - 1].figure, {
1512
1522
  touched: false
1513
1523
  });
1524
+ }
1525
+ if (!!preparedState[0][4].figure) {
1514
1526
  preparedState[0][4].figure = _extends({}, preparedState[0][4].figure, {
1515
1527
  touched: false
1516
1528
  });
@@ -1521,6 +1533,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1521
1533
  preparedState[0][0].figure = _extends({}, preparedState[0][0].figure, {
1522
1534
  touched: false
1523
1535
  });
1536
+ }
1537
+ if (!!preparedState[0][4].figure) {
1524
1538
  preparedState[0][4].figure = _extends({}, preparedState[0][4].figure, {
1525
1539
  touched: false
1526
1540
  });
@@ -1555,39 +1569,47 @@ var partFENtoState = function partFENtoState(notation) {
1555
1569
  });
1556
1570
  };
1557
1571
  var FENtoGameState = function FENtoGameState(FEN, reversed) {
1558
- var gameState = {
1559
- boardState: [],
1560
- currentColor: 'white'
1561
- };
1562
- var _FEN$split = FEN.split(' '),
1563
- stateNotaion = _FEN$split[0],
1564
- currentColor = _FEN$split[1],
1565
- FENcastling = _FEN$split[2],
1566
- beatedField = _FEN$split[3],
1567
- _ = _FEN$split.slice(4);
1568
- var preparedStateNotation = '';
1569
- for (var i = 0; i < stateNotaion.length; i++) {
1570
- if (!isNaN(parseInt(stateNotaion[i]))) {
1571
- var dotsCount = parseInt(stateNotaion[i]);
1572
- for (var dotI = 0; dotI < dotsCount; dotI++) preparedStateNotation += '.';
1573
- continue;
1574
- }
1575
- preparedStateNotation += stateNotaion[i];
1576
- }
1577
- gameState.boardState = partFENtoState(preparedStateNotation);
1578
- gameState.currentColor = currentColor === 'w' ? 'white' : 'black';
1579
- gameState.boardState = prepareCastlingByFEN(FENcastling, gameState.boardState);
1580
- if (beatedField !== '-') {
1581
- var posBeatedCell = getPositionByFEN(beatedField);
1582
- gameState.boardState[posBeatedCell[0]][posBeatedCell[1]] = _extends({}, gameState.boardState[posBeatedCell[0]][posBeatedCell[1]], {
1583
- beated: true
1584
- });
1572
+ try {
1573
+ var gameState = {
1574
+ boardState: [],
1575
+ currentColor: 'white'
1576
+ };
1577
+ var _FEN$split = FEN.split(' '),
1578
+ stateNotaion = _FEN$split[0],
1579
+ currentColor = _FEN$split[1],
1580
+ FENcastling = _FEN$split[2],
1581
+ beatedField = _FEN$split[3],
1582
+ _ = _FEN$split.slice(4);
1583
+ var preparedStateNotation = '';
1584
+ for (var i = 0; i < stateNotaion.length; i++) {
1585
+ if (!isNaN(parseInt(stateNotaion[i]))) {
1586
+ var dotsCount = parseInt(stateNotaion[i]);
1587
+ for (var dotI = 0; dotI < dotsCount; dotI++) preparedStateNotation += '.';
1588
+ continue;
1589
+ }
1590
+ preparedStateNotation += stateNotaion[i];
1591
+ }
1592
+ gameState.boardState = partFENtoState(preparedStateNotation);
1593
+ gameState.currentColor = currentColor === 'w' ? 'white' : 'black';
1594
+ gameState.boardState = prepareCastlingByFEN(FENcastling, gameState.boardState);
1595
+ if (beatedField !== '-') {
1596
+ var posBeatedCell = getPositionByFEN(beatedField);
1597
+ gameState.boardState[posBeatedCell[0]][posBeatedCell[1]] = _extends({}, gameState.boardState[posBeatedCell[0]][posBeatedCell[1]], {
1598
+ beated: true
1599
+ });
1600
+ }
1601
+ if (reversed) return {
1602
+ boardState: JSChessEngine.reverseChessBoard(gameState.boardState),
1603
+ currentColor: gameState.currentColor
1604
+ };
1605
+ return gameState;
1606
+ } catch (_unused) {
1607
+ return {
1608
+ boardState: INITIAL_CELLS,
1609
+ currentColor: 'white',
1610
+ invalidFEN: true
1611
+ };
1585
1612
  }
1586
- if (reversed) return {
1587
- boardState: JSChessEngine.reverseChessBoard(gameState.boardState),
1588
- currentColor: gameState.currentColor
1589
- };
1590
- return gameState;
1591
1613
  };
1592
1614
  var getBeatedCellFENfromState = function getBeatedCellFENfromState(state) {
1593
1615
  var beatedFieldFEN = '-';
@@ -1679,7 +1701,7 @@ var stateToFEN = function stateToFEN(state, currentColor, countMoves) {
1679
1701
  return positionsFEN + " " + colorFEN + " " + casttlingFEN + " " + beatedFieldFEN + " " + blackMoves + " " + countMoves;
1680
1702
  };
1681
1703
 
1682
- var styles = {"chessBoard":"_3XI6H","figuresLayout":"_2SyRK","controlLayout":"_3OVc8","controlLayoutGrabbing":"_G0IIl","interactiveLayout":"_3THn5","selectedSquare":"_1YsOr","pickedSquare":"_3MMcp","checkedSquare":"_KLkVN","interactiveCell":"_27yHq","possibleMoveMark":"_UYGA_","row":"_2XKSc","piece":"_2QHnf","holdedPiece":"_3z25q","bluredPiece":"_10meo","hiddenFigureEffect":"_2YKzU","arrow":"_12Bbd","arrowEnd":"_1BC3I","piecePicker":"_3gVhA","piecePickerItem":"_3EtmA","chessBoardPiecePicker":"_2xZM1","movesTrail":"_1RqCc","lightSquare":"_1B0qo","darkSquare":"_1NBqS"};
1704
+ var styles = {"chessBoard":"_3XI6H","figuresLayout":"_2SyRK","controlLayout":"_3OVc8","controlLayoutGrabbing":"_G0IIl","interactiveLayout":"_3THn5","selectedSquare":"_1YsOr","pickedSquare":"_3MMcp","checkedSquare":"_KLkVN","interactiveCell":"_27yHq","possibleMoveMark":"_UYGA_","row":"_2XKSc","piece":"_2QHnf","holdedPiece":"_3z25q","bluredPiece":"_10meo","hiddenFigureEffect":"_2YKzU","arrow":"_12Bbd","arrowEnd":"_1BC3I","piecePicker":"_3gVhA","piecePickerItem":"_3EtmA","chessBoardPiecePicker":"_2xZM1","chessBoardInvalidFenMessage":"_jyC3-","fenErrorMessage":"_8urIN","fenErrorMessageClose":"_3p5AF","movesTrail":"_1RqCc","lightSquare":"_1B0qo","darkSquare":"_1NBqS"};
1683
1705
 
1684
1706
  var CHESS_PIECES_MAP = {
1685
1707
  'pawn-white': function pawnWhite(size) {
@@ -2312,7 +2334,9 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2312
2334
  var config = props.config,
2313
2335
  onChange = props.onChange,
2314
2336
  onEndGame = props.onEndGame,
2315
- onClickByChessBoard = props.onClickByChessBoard;
2337
+ onClickByChessBoard = props.onClickByChessBoard,
2338
+ _props$toggleTurn = props.toggleTurn,
2339
+ toggleTurn = _props$toggleTurn === void 0 ? true : _props$toggleTurn;
2316
2340
  var _useState = React.useState(DEFAULT_CHESSBORD_CONFIG),
2317
2341
  boardConfig = _useState[0],
2318
2342
  setBoardConfig = _useState[1];
@@ -2382,6 +2406,9 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2382
2406
  var _useState23 = React.useState(false),
2383
2407
  animated = _useState23[0],
2384
2408
  setAnimated = _useState23[1];
2409
+ var _useState24 = React.useState(false),
2410
+ invalidFEN = _useState24[0],
2411
+ setInvalidFEN = _useState24[1];
2385
2412
  var clearFromPos = function clearFromPos() {
2386
2413
  return setFromPos([-1, -1]);
2387
2414
  };
@@ -2395,7 +2422,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2395
2422
  return setClickPossibleMoves([]);
2396
2423
  };
2397
2424
  var toggleCurrentColor = function toggleCurrentColor() {
2398
- return setCurrentColor(function (prevColor) {
2425
+ if (toggleTurn) setCurrentColor(function (prevColor) {
2399
2426
  return prevColor === 'white' ? 'black' : 'white';
2400
2427
  });
2401
2428
  };
@@ -2511,8 +2538,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2511
2538
  var _JSChessEngine$change = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2512
2539
  updatedCells = _JSChessEngine$change.updatedCells,
2513
2540
  attackedPos = _JSChessEngine$change.attackedPos;
2514
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2515
- setLinesWithCheck(linesCheck);
2541
+ if (toggleTurn) {
2542
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2543
+ setLinesWithCheck(linesCheck);
2544
+ }
2516
2545
  setActualState(updatedCells);
2517
2546
  if (figure.type === 'pawn' && (to[1] === 0 || to[1] === actualState.length - 1)) {
2518
2547
  setTargetPos(to);
@@ -2546,8 +2575,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2546
2575
  figure = _change$move.figure;
2547
2576
  var _JSChessEngine$change2 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2548
2577
  updatedCells = _JSChessEngine$change2.updatedCells;
2549
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2550
- setLinesWithCheck(linesCheck);
2578
+ if (toggleTurn) {
2579
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2580
+ setLinesWithCheck(linesCheck);
2581
+ }
2551
2582
  var updatedChange = _extends({}, change, {
2552
2583
  move: boardReversed ? JSChessEngine.reverseMove(change.move) : change.move
2553
2584
  });
@@ -2568,8 +2599,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2568
2599
  var _JSChessEngine$change3 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2569
2600
  updatedCells = _JSChessEngine$change3.updatedCells,
2570
2601
  attackedPos = _JSChessEngine$change3.attackedPos;
2571
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2572
- setLinesWithCheck(linesCheck);
2602
+ if (toggleTurn) {
2603
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2604
+ setLinesWithCheck(linesCheck);
2605
+ }
2573
2606
  setActualState(updatedCells);
2574
2607
  if (figure.type === 'pawn' && (to[1] === 0 || to[1] === actualState.length - 1)) {
2575
2608
  setTargetPos(to);
@@ -2600,8 +2633,11 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2600
2633
  var _JSChessEngine$change4 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2601
2634
  updatedCells = _JSChessEngine$change4.updatedCells,
2602
2635
  attackedPos = _JSChessEngine$change4.attackedPos;
2603
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2604
- setLinesWithCheck(linesCheck);
2636
+ var linesCheck = [];
2637
+ if (toggleTurn) {
2638
+ linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2639
+ setLinesWithCheck(linesCheck);
2640
+ }
2605
2641
  if (fromPos[0] !== -1) {
2606
2642
  var figureFromPos = updatedCells[fromPos[1]][fromPos[0]].figure;
2607
2643
  if (!figureFromPos || figureFromPos.type !== holdedFigure.type || figureFromPos.color !== holdedFigure.color) {
@@ -2816,7 +2852,9 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2816
2852
  var handleUpdateFEN = function handleUpdateFEN(FEN, reversed) {
2817
2853
  var _FENtoGameState = FENtoGameState(FEN, reversed),
2818
2854
  boardState = _FENtoGameState.boardState,
2819
- currentColor = _FENtoGameState.currentColor;
2855
+ currentColor = _FENtoGameState.currentColor,
2856
+ invalidFEN = _FENtoGameState.invalidFEN;
2857
+ setInvalidFEN(invalidFEN);
2820
2858
  cleanAllForFigure();
2821
2859
  setAnimated(false);
2822
2860
  setInitialState(boardState);
@@ -2831,6 +2869,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2831
2869
  newMove: newMove,
2832
2870
  animated: animated,
2833
2871
  movesTrail: movesTrail,
2872
+ invalidFEN: invalidFEN,
2834
2873
  boardConfig: boardConfig,
2835
2874
  markedCells: markedCells,
2836
2875
  grabbingPos: grabbingPos,
@@ -2850,6 +2889,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2850
2889
  handleClick: handleClick,
2851
2890
  clearFromPos: clearFromPos,
2852
2891
  handleGrabEnd: handleGrabEnd,
2892
+ setInvalidFEN: setInvalidFEN,
2853
2893
  handleGrabbing: handleGrabbing,
2854
2894
  endRenderArrow: endRenderArrow,
2855
2895
  setActualState: setActualState,
@@ -3043,17 +3083,21 @@ var ChessBoard = function ChessBoard(props) {
3043
3083
  _props$moveArrows = props.moveArrows,
3044
3084
  moveArrows = _props$moveArrows === void 0 ? [] : _props$moveArrows,
3045
3085
  _props$arrows = props.arrows,
3046
- arrows = _props$arrows === void 0 ? [] : _props$arrows;
3086
+ arrows = _props$arrows === void 0 ? [] : _props$arrows,
3087
+ _props$toggleTurn = props.toggleTurn,
3088
+ toggleTurn = _props$toggleTurn === void 0 ? true : _props$toggleTurn;
3047
3089
  var _useChessBoardInterac = useChessBoardInteractive({
3048
3090
  onChange: onChange,
3049
3091
  onEndGame: onEndGame,
3050
3092
  onClickByChessBoard: onClick,
3051
- config: config
3093
+ config: config,
3094
+ toggleTurn: toggleTurn
3052
3095
  }),
3053
3096
  fromPos = _useChessBoardInterac.fromPos,
3054
3097
  newMove = _useChessBoardInterac.newMove,
3055
3098
  animated = _useChessBoardInterac.animated,
3056
3099
  movesTrail = _useChessBoardInterac.movesTrail,
3100
+ invalidFEN = _useChessBoardInterac.invalidFEN,
3057
3101
  boardConfig = _useChessBoardInterac.boardConfig,
3058
3102
  markedCells = _useChessBoardInterac.markedCells,
3059
3103
  grabbingPos = _useChessBoardInterac.grabbingPos,
@@ -3068,6 +3112,7 @@ var ChessBoard = function ChessBoard(props) {
3068
3112
  markCell = _useChessBoardInterac.markCell,
3069
3113
  handleClick = _useChessBoardInterac.handleClick,
3070
3114
  handleGrabEnd = _useChessBoardInterac.handleGrabEnd,
3115
+ setInvalidFEN = _useChessBoardInterac.setInvalidFEN,
3071
3116
  handleGrabbing = _useChessBoardInterac.handleGrabbing,
3072
3117
  endRenderArrow = _useChessBoardInterac.endRenderArrow,
3073
3118
  setPlayerColor = _useChessBoardInterac.setPlayerColor,
@@ -3106,6 +3151,10 @@ var ChessBoard = function ChessBoard(props) {
3106
3151
  color: arrow.color
3107
3152
  };
3108
3153
  });
3154
+ var handleHideInvalidFENmessage = function handleHideInvalidFENmessage(event) {
3155
+ event.preventDefault();
3156
+ setInvalidFEN(false);
3157
+ };
3109
3158
  return React__default.createElement("div", {
3110
3159
  className: styles.chessBoard
3111
3160
  }, React__default.createElement(ChessBoardCellsLayout, {
@@ -3151,7 +3200,17 @@ var ChessBoard = function ChessBoard(props) {
3151
3200
  color: currentColor,
3152
3201
  forPawnTransform: true,
3153
3202
  onSelect: handleSelectFigurePicker
3154
- })));
3203
+ })), invalidFEN && React__default.createElement("div", {
3204
+ className: styles.chessBoardInvalidFenMessage
3205
+ }, React__default.createElement("div", {
3206
+ className: styles.fenErrorMessage,
3207
+ role: "alert"
3208
+ }, React__default.createElement("div", null, "Invalid FEN notation. The default board position was used instead.", " ", React__default.createElement("a", {
3209
+ href: "/docs/fen-errors"
3210
+ }, "See common FEN problems"), "."), React__default.createElement("div", null, React__default.createElement("a", {
3211
+ className: styles.fenErrorMessageClose,
3212
+ onClick: handleHideInvalidFENmessage
3213
+ }, "Hide this message")))));
3155
3214
  };
3156
3215
 
3157
3216
  exports.ALL_FIGURES = ALL_FIGURES;