react-chessboard-ui 2.10.0 → 2.11.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.
@@ -1488,6 +1488,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1488
1488
  preparedState[preparedState.length - 1][preparedState.length - 1].figure = _extends({}, preparedState[preparedState.length - 1][preparedState.length - 1].figure, {
1489
1489
  touched: false
1490
1490
  });
1491
+ }
1492
+ if (!!preparedState[preparedState.length - 1][4].figure) {
1491
1493
  preparedState[preparedState.length - 1][4].figure = _extends({}, preparedState[preparedState.length - 1][4].figure, {
1492
1494
  touched: false
1493
1495
  });
@@ -1498,6 +1500,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1498
1500
  preparedState[preparedState.length - 1][0].figure = _extends({}, preparedState[preparedState.length - 1][0].figure, {
1499
1501
  touched: false
1500
1502
  });
1503
+ }
1504
+ if (!!preparedState[preparedState.length - 1][4].figure) {
1501
1505
  preparedState[preparedState.length - 1][4].figure = _extends({}, preparedState[preparedState.length - 1][4].figure, {
1502
1506
  touched: false
1503
1507
  });
@@ -1508,6 +1512,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1508
1512
  preparedState[0][preparedState.length - 1].figure = _extends({}, preparedState[0][preparedState.length - 1].figure, {
1509
1513
  touched: false
1510
1514
  });
1515
+ }
1516
+ if (!!preparedState[0][4].figure) {
1511
1517
  preparedState[0][4].figure = _extends({}, preparedState[0][4].figure, {
1512
1518
  touched: false
1513
1519
  });
@@ -1518,6 +1524,8 @@ var prepareCastlingByFEN = function prepareCastlingByFEN(castlingNotation, state
1518
1524
  preparedState[0][0].figure = _extends({}, preparedState[0][0].figure, {
1519
1525
  touched: false
1520
1526
  });
1527
+ }
1528
+ if (!!preparedState[0][4].figure) {
1521
1529
  preparedState[0][4].figure = _extends({}, preparedState[0][4].figure, {
1522
1530
  touched: false
1523
1531
  });
@@ -1552,39 +1560,47 @@ var partFENtoState = function partFENtoState(notation) {
1552
1560
  });
1553
1561
  };
1554
1562
  var FENtoGameState = function FENtoGameState(FEN, reversed) {
1555
- var gameState = {
1556
- boardState: [],
1557
- currentColor: 'white'
1558
- };
1559
- var _FEN$split = FEN.split(' '),
1560
- stateNotaion = _FEN$split[0],
1561
- currentColor = _FEN$split[1],
1562
- FENcastling = _FEN$split[2],
1563
- beatedField = _FEN$split[3],
1564
- _ = _FEN$split.slice(4);
1565
- var preparedStateNotation = '';
1566
- for (var i = 0; i < stateNotaion.length; i++) {
1567
- if (!isNaN(parseInt(stateNotaion[i]))) {
1568
- var dotsCount = parseInt(stateNotaion[i]);
1569
- for (var dotI = 0; dotI < dotsCount; dotI++) preparedStateNotation += '.';
1570
- continue;
1571
- }
1572
- preparedStateNotation += stateNotaion[i];
1573
- }
1574
- gameState.boardState = partFENtoState(preparedStateNotation);
1575
- gameState.currentColor = currentColor === 'w' ? 'white' : 'black';
1576
- gameState.boardState = prepareCastlingByFEN(FENcastling, gameState.boardState);
1577
- if (beatedField !== '-') {
1578
- var posBeatedCell = getPositionByFEN(beatedField);
1579
- gameState.boardState[posBeatedCell[0]][posBeatedCell[1]] = _extends({}, gameState.boardState[posBeatedCell[0]][posBeatedCell[1]], {
1580
- beated: true
1581
- });
1563
+ try {
1564
+ var gameState = {
1565
+ boardState: [],
1566
+ currentColor: 'white'
1567
+ };
1568
+ var _FEN$split = FEN.split(' '),
1569
+ stateNotaion = _FEN$split[0],
1570
+ currentColor = _FEN$split[1],
1571
+ FENcastling = _FEN$split[2],
1572
+ beatedField = _FEN$split[3],
1573
+ _ = _FEN$split.slice(4);
1574
+ var preparedStateNotation = '';
1575
+ for (var i = 0; i < stateNotaion.length; i++) {
1576
+ if (!isNaN(parseInt(stateNotaion[i]))) {
1577
+ var dotsCount = parseInt(stateNotaion[i]);
1578
+ for (var dotI = 0; dotI < dotsCount; dotI++) preparedStateNotation += '.';
1579
+ continue;
1580
+ }
1581
+ preparedStateNotation += stateNotaion[i];
1582
+ }
1583
+ gameState.boardState = partFENtoState(preparedStateNotation);
1584
+ gameState.currentColor = currentColor === 'w' ? 'white' : 'black';
1585
+ gameState.boardState = prepareCastlingByFEN(FENcastling, gameState.boardState);
1586
+ if (beatedField !== '-') {
1587
+ var posBeatedCell = getPositionByFEN(beatedField);
1588
+ gameState.boardState[posBeatedCell[0]][posBeatedCell[1]] = _extends({}, gameState.boardState[posBeatedCell[0]][posBeatedCell[1]], {
1589
+ beated: true
1590
+ });
1591
+ }
1592
+ if (reversed) return {
1593
+ boardState: JSChessEngine.reverseChessBoard(gameState.boardState),
1594
+ currentColor: gameState.currentColor
1595
+ };
1596
+ return gameState;
1597
+ } catch (_unused) {
1598
+ return {
1599
+ boardState: INITIAL_CELLS,
1600
+ currentColor: 'white',
1601
+ invalidFEN: true
1602
+ };
1582
1603
  }
1583
- if (reversed) return {
1584
- boardState: JSChessEngine.reverseChessBoard(gameState.boardState),
1585
- currentColor: gameState.currentColor
1586
- };
1587
- return gameState;
1588
1604
  };
1589
1605
  var getBeatedCellFENfromState = function getBeatedCellFENfromState(state) {
1590
1606
  var beatedFieldFEN = '-';
@@ -1676,7 +1692,7 @@ var stateToFEN = function stateToFEN(state, currentColor, countMoves) {
1676
1692
  return positionsFEN + " " + colorFEN + " " + casttlingFEN + " " + beatedFieldFEN + " " + blackMoves + " " + countMoves;
1677
1693
  };
1678
1694
 
1679
- 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"};
1695
+ 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"};
1680
1696
 
1681
1697
  var CHESS_PIECES_MAP = {
1682
1698
  'pawn-white': function pawnWhite(size) {
@@ -2309,7 +2325,9 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2309
2325
  var config = props.config,
2310
2326
  onChange = props.onChange,
2311
2327
  onEndGame = props.onEndGame,
2312
- onClickByChessBoard = props.onClickByChessBoard;
2328
+ onClickByChessBoard = props.onClickByChessBoard,
2329
+ _props$toggleTurn = props.toggleTurn,
2330
+ toggleTurn = _props$toggleTurn === void 0 ? true : _props$toggleTurn;
2313
2331
  var _useState = useState(DEFAULT_CHESSBORD_CONFIG),
2314
2332
  boardConfig = _useState[0],
2315
2333
  setBoardConfig = _useState[1];
@@ -2379,6 +2397,9 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2379
2397
  var _useState23 = useState(false),
2380
2398
  animated = _useState23[0],
2381
2399
  setAnimated = _useState23[1];
2400
+ var _useState24 = useState(false),
2401
+ invalidFEN = _useState24[0],
2402
+ setInvalidFEN = _useState24[1];
2382
2403
  var clearFromPos = function clearFromPos() {
2383
2404
  return setFromPos([-1, -1]);
2384
2405
  };
@@ -2392,7 +2413,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2392
2413
  return setClickPossibleMoves([]);
2393
2414
  };
2394
2415
  var toggleCurrentColor = function toggleCurrentColor() {
2395
- return setCurrentColor(function (prevColor) {
2416
+ if (toggleTurn) setCurrentColor(function (prevColor) {
2396
2417
  return prevColor === 'white' ? 'black' : 'white';
2397
2418
  });
2398
2419
  };
@@ -2508,8 +2529,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2508
2529
  var _JSChessEngine$change = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2509
2530
  updatedCells = _JSChessEngine$change.updatedCells,
2510
2531
  attackedPos = _JSChessEngine$change.attackedPos;
2511
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2512
- setLinesWithCheck(linesCheck);
2532
+ if (toggleTurn) {
2533
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2534
+ setLinesWithCheck(linesCheck);
2535
+ }
2513
2536
  setActualState(updatedCells);
2514
2537
  if (figure.type === 'pawn' && (to[1] === 0 || to[1] === actualState.length - 1)) {
2515
2538
  setTargetPos(to);
@@ -2543,8 +2566,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2543
2566
  figure = _change$move.figure;
2544
2567
  var _JSChessEngine$change2 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2545
2568
  updatedCells = _JSChessEngine$change2.updatedCells;
2546
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2547
- setLinesWithCheck(linesCheck);
2569
+ if (toggleTurn) {
2570
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2571
+ setLinesWithCheck(linesCheck);
2572
+ }
2548
2573
  var updatedChange = _extends({}, change, {
2549
2574
  move: boardReversed ? JSChessEngine.reverseMove(change.move) : change.move
2550
2575
  });
@@ -2565,8 +2590,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2565
2590
  var _JSChessEngine$change3 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2566
2591
  updatedCells = _JSChessEngine$change3.updatedCells,
2567
2592
  attackedPos = _JSChessEngine$change3.attackedPos;
2568
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2569
- setLinesWithCheck(linesCheck);
2593
+ if (toggleTurn) {
2594
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2595
+ setLinesWithCheck(linesCheck);
2596
+ }
2570
2597
  setActualState(updatedCells);
2571
2598
  if (figure.type === 'pawn' && (to[1] === 0 || to[1] === actualState.length - 1)) {
2572
2599
  setTargetPos(to);
@@ -2597,8 +2624,11 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2597
2624
  var _JSChessEngine$change4 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2598
2625
  updatedCells = _JSChessEngine$change4.updatedCells,
2599
2626
  attackedPos = _JSChessEngine$change4.attackedPos;
2600
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2601
- setLinesWithCheck(linesCheck);
2627
+ var linesCheck = [];
2628
+ if (toggleTurn) {
2629
+ linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2630
+ setLinesWithCheck(linesCheck);
2631
+ }
2602
2632
  if (fromPos[0] !== -1) {
2603
2633
  var figureFromPos = updatedCells[fromPos[1]][fromPos[0]].figure;
2604
2634
  if (!figureFromPos || figureFromPos.type !== holdedFigure.type || figureFromPos.color !== holdedFigure.color) {
@@ -2813,7 +2843,9 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2813
2843
  var handleUpdateFEN = function handleUpdateFEN(FEN, reversed) {
2814
2844
  var _FENtoGameState = FENtoGameState(FEN, reversed),
2815
2845
  boardState = _FENtoGameState.boardState,
2816
- currentColor = _FENtoGameState.currentColor;
2846
+ currentColor = _FENtoGameState.currentColor,
2847
+ invalidFEN = _FENtoGameState.invalidFEN;
2848
+ setInvalidFEN(invalidFEN);
2817
2849
  cleanAllForFigure();
2818
2850
  setAnimated(false);
2819
2851
  setInitialState(boardState);
@@ -2828,6 +2860,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2828
2860
  newMove: newMove,
2829
2861
  animated: animated,
2830
2862
  movesTrail: movesTrail,
2863
+ invalidFEN: invalidFEN,
2831
2864
  boardConfig: boardConfig,
2832
2865
  markedCells: markedCells,
2833
2866
  grabbingPos: grabbingPos,
@@ -2847,6 +2880,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2847
2880
  handleClick: handleClick,
2848
2881
  clearFromPos: clearFromPos,
2849
2882
  handleGrabEnd: handleGrabEnd,
2883
+ setInvalidFEN: setInvalidFEN,
2850
2884
  handleGrabbing: handleGrabbing,
2851
2885
  endRenderArrow: endRenderArrow,
2852
2886
  setActualState: setActualState,
@@ -3040,17 +3074,21 @@ var ChessBoard = function ChessBoard(props) {
3040
3074
  _props$moveArrows = props.moveArrows,
3041
3075
  moveArrows = _props$moveArrows === void 0 ? [] : _props$moveArrows,
3042
3076
  _props$arrows = props.arrows,
3043
- arrows = _props$arrows === void 0 ? [] : _props$arrows;
3077
+ arrows = _props$arrows === void 0 ? [] : _props$arrows,
3078
+ _props$toggleTurn = props.toggleTurn,
3079
+ toggleTurn = _props$toggleTurn === void 0 ? true : _props$toggleTurn;
3044
3080
  var _useChessBoardInterac = useChessBoardInteractive({
3045
3081
  onChange: onChange,
3046
3082
  onEndGame: onEndGame,
3047
3083
  onClickByChessBoard: onClick,
3048
- config: config
3084
+ config: config,
3085
+ toggleTurn: toggleTurn
3049
3086
  }),
3050
3087
  fromPos = _useChessBoardInterac.fromPos,
3051
3088
  newMove = _useChessBoardInterac.newMove,
3052
3089
  animated = _useChessBoardInterac.animated,
3053
3090
  movesTrail = _useChessBoardInterac.movesTrail,
3091
+ invalidFEN = _useChessBoardInterac.invalidFEN,
3054
3092
  boardConfig = _useChessBoardInterac.boardConfig,
3055
3093
  markedCells = _useChessBoardInterac.markedCells,
3056
3094
  grabbingPos = _useChessBoardInterac.grabbingPos,
@@ -3065,6 +3103,7 @@ var ChessBoard = function ChessBoard(props) {
3065
3103
  markCell = _useChessBoardInterac.markCell,
3066
3104
  handleClick = _useChessBoardInterac.handleClick,
3067
3105
  handleGrabEnd = _useChessBoardInterac.handleGrabEnd,
3106
+ setInvalidFEN = _useChessBoardInterac.setInvalidFEN,
3068
3107
  handleGrabbing = _useChessBoardInterac.handleGrabbing,
3069
3108
  endRenderArrow = _useChessBoardInterac.endRenderArrow,
3070
3109
  setPlayerColor = _useChessBoardInterac.setPlayerColor,
@@ -3103,6 +3142,10 @@ var ChessBoard = function ChessBoard(props) {
3103
3142
  color: arrow.color
3104
3143
  };
3105
3144
  });
3145
+ var handleHideInvalidFENmessage = function handleHideInvalidFENmessage(event) {
3146
+ event.preventDefault();
3147
+ setInvalidFEN(false);
3148
+ };
3106
3149
  return React.createElement("div", {
3107
3150
  className: styles.chessBoard
3108
3151
  }, React.createElement(ChessBoardCellsLayout, {
@@ -3148,7 +3191,17 @@ var ChessBoard = function ChessBoard(props) {
3148
3191
  color: currentColor,
3149
3192
  forPawnTransform: true,
3150
3193
  onSelect: handleSelectFigurePicker
3151
- })));
3194
+ })), invalidFEN && React.createElement("div", {
3195
+ className: styles.chessBoardInvalidFenMessage
3196
+ }, React.createElement("div", {
3197
+ className: styles.fenErrorMessage,
3198
+ role: "alert"
3199
+ }, React.createElement("div", null, "Invalid FEN notation. The default board position was used instead.", " ", React.createElement("a", {
3200
+ href: "/docs/fen-errors"
3201
+ }, "See common FEN problems"), "."), React.createElement("div", null, React.createElement("a", {
3202
+ className: styles.fenErrorMessageClose,
3203
+ onClick: handleHideInvalidFENmessage
3204
+ }, "Hide this message")))));
3152
3205
  };
3153
3206
 
3154
3207
  export { ALL_FIGURES, CHESS_BOARD_CONFIG, ChessBoard, DEFAULT_CHESSBORD_CONFIG, DEFAULT_PIECES_MAP, FENtoGameState, FIGURES_LATTERS_NOTATIONS, INITIAL_CELLS, JSChessEngine, LETTERS, LETTER_TO_FIGURE_MAP, getBeatedCellFENfromState, getFENcastlingFromState, getFENpositionsFromState, getPositionByFEN, partFENtoState, prepareCastlingByFEN, stateToFEN };