react-chessboard-ui 2.9.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
  };
@@ -2441,7 +2462,8 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2441
2462
  if (!onClickByChessBoard) return;
2442
2463
  onClickByChessBoard({
2443
2464
  cellData: cellData,
2444
- pos: pos
2465
+ pos: pos,
2466
+ currentColor: currentColor
2445
2467
  });
2446
2468
  };
2447
2469
  var selectFigureFrom = function selectFigureFrom(cellPos, extActualState) {
@@ -2507,8 +2529,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2507
2529
  var _JSChessEngine$change = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2508
2530
  updatedCells = _JSChessEngine$change.updatedCells,
2509
2531
  attackedPos = _JSChessEngine$change.attackedPos;
2510
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2511
- setLinesWithCheck(linesCheck);
2532
+ if (toggleTurn) {
2533
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2534
+ setLinesWithCheck(linesCheck);
2535
+ }
2512
2536
  setActualState(updatedCells);
2513
2537
  if (figure.type === 'pawn' && (to[1] === 0 || to[1] === actualState.length - 1)) {
2514
2538
  setTargetPos(to);
@@ -2542,8 +2566,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2542
2566
  figure = _change$move.figure;
2543
2567
  var _JSChessEngine$change2 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2544
2568
  updatedCells = _JSChessEngine$change2.updatedCells;
2545
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2546
- setLinesWithCheck(linesCheck);
2569
+ if (toggleTurn) {
2570
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2571
+ setLinesWithCheck(linesCheck);
2572
+ }
2547
2573
  var updatedChange = _extends({}, change, {
2548
2574
  move: boardReversed ? JSChessEngine.reverseMove(change.move) : change.move
2549
2575
  });
@@ -2564,8 +2590,10 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2564
2590
  var _JSChessEngine$change3 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2565
2591
  updatedCells = _JSChessEngine$change3.updatedCells,
2566
2592
  attackedPos = _JSChessEngine$change3.attackedPos;
2567
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2568
- setLinesWithCheck(linesCheck);
2593
+ if (toggleTurn) {
2594
+ var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2595
+ setLinesWithCheck(linesCheck);
2596
+ }
2569
2597
  setActualState(updatedCells);
2570
2598
  if (figure.type === 'pawn' && (to[1] === 0 || to[1] === actualState.length - 1)) {
2571
2599
  setTargetPos(to);
@@ -2596,8 +2624,11 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2596
2624
  var _JSChessEngine$change4 = JSChessEngine.changeState(actualState, figure, to, from, boardReversed),
2597
2625
  updatedCells = _JSChessEngine$change4.updatedCells,
2598
2626
  attackedPos = _JSChessEngine$change4.attackedPos;
2599
- var linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2600
- setLinesWithCheck(linesCheck);
2627
+ var linesCheck = [];
2628
+ if (toggleTurn) {
2629
+ linesCheck = JSChessEngine.getLinesWithCheck(updatedCells, currentColor, boardReversed);
2630
+ setLinesWithCheck(linesCheck);
2631
+ }
2601
2632
  if (fromPos[0] !== -1) {
2602
2633
  var figureFromPos = updatedCells[fromPos[1]][fromPos[0]].figure;
2603
2634
  if (!figureFromPos || figureFromPos.type !== holdedFigure.type || figureFromPos.color !== holdedFigure.color) {
@@ -2812,7 +2843,9 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2812
2843
  var handleUpdateFEN = function handleUpdateFEN(FEN, reversed) {
2813
2844
  var _FENtoGameState = FENtoGameState(FEN, reversed),
2814
2845
  boardState = _FENtoGameState.boardState,
2815
- currentColor = _FENtoGameState.currentColor;
2846
+ currentColor = _FENtoGameState.currentColor,
2847
+ invalidFEN = _FENtoGameState.invalidFEN;
2848
+ setInvalidFEN(invalidFEN);
2816
2849
  cleanAllForFigure();
2817
2850
  setAnimated(false);
2818
2851
  setInitialState(boardState);
@@ -2827,6 +2860,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2827
2860
  newMove: newMove,
2828
2861
  animated: animated,
2829
2862
  movesTrail: movesTrail,
2863
+ invalidFEN: invalidFEN,
2830
2864
  boardConfig: boardConfig,
2831
2865
  markedCells: markedCells,
2832
2866
  grabbingPos: grabbingPos,
@@ -2846,6 +2880,7 @@ var useChessBoardInteractive = function useChessBoardInteractive(props) {
2846
2880
  handleClick: handleClick,
2847
2881
  clearFromPos: clearFromPos,
2848
2882
  handleGrabEnd: handleGrabEnd,
2883
+ setInvalidFEN: setInvalidFEN,
2849
2884
  handleGrabbing: handleGrabbing,
2850
2885
  endRenderArrow: endRenderArrow,
2851
2886
  setActualState: setActualState,
@@ -3039,17 +3074,21 @@ var ChessBoard = function ChessBoard(props) {
3039
3074
  _props$moveArrows = props.moveArrows,
3040
3075
  moveArrows = _props$moveArrows === void 0 ? [] : _props$moveArrows,
3041
3076
  _props$arrows = props.arrows,
3042
- 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;
3043
3080
  var _useChessBoardInterac = useChessBoardInteractive({
3044
3081
  onChange: onChange,
3045
3082
  onEndGame: onEndGame,
3046
3083
  onClickByChessBoard: onClick,
3047
- config: config
3084
+ config: config,
3085
+ toggleTurn: toggleTurn
3048
3086
  }),
3049
3087
  fromPos = _useChessBoardInterac.fromPos,
3050
3088
  newMove = _useChessBoardInterac.newMove,
3051
3089
  animated = _useChessBoardInterac.animated,
3052
3090
  movesTrail = _useChessBoardInterac.movesTrail,
3091
+ invalidFEN = _useChessBoardInterac.invalidFEN,
3053
3092
  boardConfig = _useChessBoardInterac.boardConfig,
3054
3093
  markedCells = _useChessBoardInterac.markedCells,
3055
3094
  grabbingPos = _useChessBoardInterac.grabbingPos,
@@ -3064,6 +3103,7 @@ var ChessBoard = function ChessBoard(props) {
3064
3103
  markCell = _useChessBoardInterac.markCell,
3065
3104
  handleClick = _useChessBoardInterac.handleClick,
3066
3105
  handleGrabEnd = _useChessBoardInterac.handleGrabEnd,
3106
+ setInvalidFEN = _useChessBoardInterac.setInvalidFEN,
3067
3107
  handleGrabbing = _useChessBoardInterac.handleGrabbing,
3068
3108
  endRenderArrow = _useChessBoardInterac.endRenderArrow,
3069
3109
  setPlayerColor = _useChessBoardInterac.setPlayerColor,
@@ -3102,6 +3142,10 @@ var ChessBoard = function ChessBoard(props) {
3102
3142
  color: arrow.color
3103
3143
  };
3104
3144
  });
3145
+ var handleHideInvalidFENmessage = function handleHideInvalidFENmessage(event) {
3146
+ event.preventDefault();
3147
+ setInvalidFEN(false);
3148
+ };
3105
3149
  return React.createElement("div", {
3106
3150
  className: styles.chessBoard
3107
3151
  }, React.createElement(ChessBoardCellsLayout, {
@@ -3147,7 +3191,17 @@ var ChessBoard = function ChessBoard(props) {
3147
3191
  color: currentColor,
3148
3192
  forPawnTransform: true,
3149
3193
  onSelect: handleSelectFigurePicker
3150
- })));
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")))));
3151
3205
  };
3152
3206
 
3153
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 };