react-chess-puzzle-kit 1.0.3 → 1.0.4
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/features/board/LineBoard.d.ts +2 -1
- package/dist/index.esm.js +10 -3
- package/dist/index.js +9 -2
- package/package.json +2 -1
|
@@ -5,6 +5,7 @@ export interface LineBoardProps {
|
|
|
5
5
|
trainSide: LineTrainSide;
|
|
6
6
|
draggable: boolean;
|
|
7
7
|
correctMoveSquare?: string | null;
|
|
8
|
+
lastMoveUci?: string | null;
|
|
8
9
|
onPieceDrop: (source: string, target: string, piece: string) => boolean;
|
|
9
10
|
boardWidth: number;
|
|
10
11
|
}
|
|
@@ -13,4 +14,4 @@ export interface LineBoardProps {
|
|
|
13
14
|
* side's pieces be dragged. Move validation and sequencing live in
|
|
14
15
|
* {@link LineBoardWithControls}.
|
|
15
16
|
*/
|
|
16
|
-
export declare const LineBoard: ({ fen, orientation, trainSide, draggable, correctMoveSquare, onPieceDrop, boardWidth, }: LineBoardProps) => import("react").JSX.Element;
|
|
17
|
+
export declare const LineBoard: ({ fen, orientation, trainSide, draggable, correctMoveSquare, lastMoveUci, onPieceDrop, boardWidth, }: LineBoardProps) => import("react").JSX.Element;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState, useEffect, useRef, useMemo, useCallback } from 'react';
|
|
2
2
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
import { useBoardRevision, useCorrectMoveFeedback, useMissBoard, ChessboardDnDProvider, HighlightChessboard, uciFromDrop, ThemeProvider, AnalysisErrorBoundary, AnalysisBoardCore, AnalysisBoardLayout, AnalysisBoard, DEFAULT_ANALYSIS_LAYOUT, evaluateExpectedMoveDrop, fenAfterUci, boardSquareHighlightColors, analysisBoardHighlightColors } from 'react-chess-core';
|
|
3
|
+
import { useBoardRevision, useCorrectMoveFeedback, useMissBoard, ChessboardDnDProvider, HighlightChessboard, uciFromDrop, ThemeProvider, AnalysisErrorBoundary, AnalysisBoardCore, AnalysisBoardLayout, AnalysisBoard, DEFAULT_ANALYSIS_LAYOUT, lastMoveUciAtPly, evaluateExpectedMoveDrop, fenAfterUci, boardSquareHighlightColors, analysisBoardHighlightColors } from 'react-chess-core';
|
|
4
4
|
export { DEFAULT_ANALYSIS_LAYOUT } from 'react-chess-core';
|
|
5
5
|
import { Chess } from 'chess.js';
|
|
6
6
|
|
|
@@ -1063,7 +1063,7 @@ const PuzzleBoardWithControls = ({ theme, boardTheme, apiProxy, renderControls =
|
|
|
1063
1063
|
* side's pieces be dragged. Move validation and sequencing live in
|
|
1064
1064
|
* {@link LineBoardWithControls}.
|
|
1065
1065
|
*/
|
|
1066
|
-
const LineBoard = ({ fen, orientation, trainSide, draggable, correctMoveSquare = null, onPieceDrop, boardWidth, }) => (jsx(ChessboardDnDProvider, { children: jsx(HighlightChessboard, { boardWidth: boardWidth, checkSquare: "", hintSquare: null, incorrectMoveSquare: null, correctMoveSquare: correctMoveSquare, position: fen, boardOrientation: orientation, arePiecesDraggable: draggable, isDraggablePiece: ({ piece }) => piece[0] === trainSide, onPieceDrop: (source, target, piece) => onPieceDrop(source, target, piece), autoPromoteToQueen: true, areArrowsAllowed: false, customBoardStyle: { borderRadius: 4 } }) }));
|
|
1066
|
+
const LineBoard = ({ fen, orientation, trainSide, draggable, correctMoveSquare = null, lastMoveUci = null, onPieceDrop, boardWidth, }) => (jsx(ChessboardDnDProvider, { children: jsx(HighlightChessboard, { boardWidth: boardWidth, checkSquare: "", hintSquare: null, incorrectMoveSquare: null, correctMoveSquare: correctMoveSquare, position: fen, boardOrientation: orientation, arePiecesDraggable: draggable, isDraggablePiece: ({ piece }) => piece[0] === trainSide, onPieceDrop: (source, target, piece) => onPieceDrop(source, target, piece), lastMoveUci: lastMoveUci, autoPromoteToQueen: true, areArrowsAllowed: false, customBoardStyle: { borderRadius: 4 } }) }));
|
|
1067
1067
|
|
|
1068
1068
|
/** Library default line-drill status controls (unstyled). */
|
|
1069
1069
|
const DefaultLineControls = ({ moveNumber, total, finished, isUserTurn, feedback, }) => (jsxs("div", { style: rowStyle, children: [jsx("span", { style: statusStyle, children: finished ? 'Line complete' : `Move ${moveNumber} of ${total}` }), feedback && !finished && (jsx("span", { style: Object.assign(Object.assign({}, statusStyle), { color: feedback.isCorrect ? '#2e7d32' : '#c62828' }), children: feedback.isCorrect
|
|
@@ -1201,6 +1201,13 @@ const LineBoardWithControls = ({ theme, boardTheme, line, onComplete, onMove, re
|
|
|
1201
1201
|
return isCorrect;
|
|
1202
1202
|
};
|
|
1203
1203
|
const boardFen = displayFen !== null && displayFen !== void 0 ? displayFen : fen;
|
|
1204
|
+
const lastMoveUci = useMemo(() => {
|
|
1205
|
+
var _a;
|
|
1206
|
+
if (displayFen) {
|
|
1207
|
+
return (_a = line.movesUci[currentIndex]) !== null && _a !== void 0 ? _a : null;
|
|
1208
|
+
}
|
|
1209
|
+
return lastMoveUciAtPly(line.movesUci, currentIndex);
|
|
1210
|
+
}, [currentIndex, displayFen, line.movesUci]);
|
|
1204
1211
|
const moveNumber = Math.min(currentIndex + 1, total);
|
|
1205
1212
|
const isUserTurn = !finished &&
|
|
1206
1213
|
!isShowingCorrectMove &&
|
|
@@ -1210,7 +1217,7 @@ const LineBoardWithControls = ({ theme, boardTheme, line, onComplete, onMove, re
|
|
|
1210
1217
|
const controlsPlacement = stackControlsBelow
|
|
1211
1218
|
? 'below'
|
|
1212
1219
|
: 'beside';
|
|
1213
|
-
return (jsx(ThemeProvider, { theme: theme, boardTheme: boardTheme, children: jsxs("div", { style: puzzlePlayRowStyle(controlsPlacement), children: [jsx("div", { style: puzzleBoardColumnStyle(boardWidth, controlsPlacement), children: jsx("div", { style: puzzleBoardSlotStyle(), children: jsx(LineBoard, { fen: boardFen, orientation: orientation, trainSide: line.trainSide, draggable: isUserTurn, correctMoveSquare: correctMoveSquare, onPieceDrop: handleDrop, boardWidth: boardWidth }) }) }), jsx("div", { style: puzzleControlsSlotStyle(controlsPlacement), children: renderControls({
|
|
1220
|
+
return (jsx(ThemeProvider, { theme: theme, boardTheme: boardTheme, children: jsxs("div", { style: puzzlePlayRowStyle(controlsPlacement), children: [jsx("div", { style: puzzleBoardColumnStyle(boardWidth, controlsPlacement), children: jsx("div", { style: puzzleBoardSlotStyle(), children: jsx(LineBoard, { fen: boardFen, orientation: orientation, trainSide: line.trainSide, draggable: isUserTurn, correctMoveSquare: correctMoveSquare, lastMoveUci: lastMoveUci, onPieceDrop: handleDrop, boardWidth: boardWidth }) }) }), jsx("div", { style: puzzleControlsSlotStyle(controlsPlacement), children: renderControls({
|
|
1214
1221
|
trainSide: line.trainSide,
|
|
1215
1222
|
moveNumber,
|
|
1216
1223
|
total,
|
package/dist/index.js
CHANGED
|
@@ -1064,7 +1064,7 @@ const PuzzleBoardWithControls = ({ theme, boardTheme, apiProxy, renderControls =
|
|
|
1064
1064
|
* side's pieces be dragged. Move validation and sequencing live in
|
|
1065
1065
|
* {@link LineBoardWithControls}.
|
|
1066
1066
|
*/
|
|
1067
|
-
const LineBoard = ({ fen, orientation, trainSide, draggable, correctMoveSquare = null, onPieceDrop, boardWidth, }) => (jsxRuntime.jsx(reactChessCore.ChessboardDnDProvider, { children: jsxRuntime.jsx(reactChessCore.HighlightChessboard, { boardWidth: boardWidth, checkSquare: "", hintSquare: null, incorrectMoveSquare: null, correctMoveSquare: correctMoveSquare, position: fen, boardOrientation: orientation, arePiecesDraggable: draggable, isDraggablePiece: ({ piece }) => piece[0] === trainSide, onPieceDrop: (source, target, piece) => onPieceDrop(source, target, piece), autoPromoteToQueen: true, areArrowsAllowed: false, customBoardStyle: { borderRadius: 4 } }) }));
|
|
1067
|
+
const LineBoard = ({ fen, orientation, trainSide, draggable, correctMoveSquare = null, lastMoveUci = null, onPieceDrop, boardWidth, }) => (jsxRuntime.jsx(reactChessCore.ChessboardDnDProvider, { children: jsxRuntime.jsx(reactChessCore.HighlightChessboard, { boardWidth: boardWidth, checkSquare: "", hintSquare: null, incorrectMoveSquare: null, correctMoveSquare: correctMoveSquare, position: fen, boardOrientation: orientation, arePiecesDraggable: draggable, isDraggablePiece: ({ piece }) => piece[0] === trainSide, onPieceDrop: (source, target, piece) => onPieceDrop(source, target, piece), lastMoveUci: lastMoveUci, autoPromoteToQueen: true, areArrowsAllowed: false, customBoardStyle: { borderRadius: 4 } }) }));
|
|
1068
1068
|
|
|
1069
1069
|
/** Library default line-drill status controls (unstyled). */
|
|
1070
1070
|
const DefaultLineControls = ({ moveNumber, total, finished, isUserTurn, feedback, }) => (jsxRuntime.jsxs("div", { style: rowStyle, children: [jsxRuntime.jsx("span", { style: statusStyle, children: finished ? 'Line complete' : `Move ${moveNumber} of ${total}` }), feedback && !finished && (jsxRuntime.jsx("span", { style: Object.assign(Object.assign({}, statusStyle), { color: feedback.isCorrect ? '#2e7d32' : '#c62828' }), children: feedback.isCorrect
|
|
@@ -1202,6 +1202,13 @@ const LineBoardWithControls = ({ theme, boardTheme, line, onComplete, onMove, re
|
|
|
1202
1202
|
return isCorrect;
|
|
1203
1203
|
};
|
|
1204
1204
|
const boardFen = displayFen !== null && displayFen !== void 0 ? displayFen : fen;
|
|
1205
|
+
const lastMoveUci = react.useMemo(() => {
|
|
1206
|
+
var _a;
|
|
1207
|
+
if (displayFen) {
|
|
1208
|
+
return (_a = line.movesUci[currentIndex]) !== null && _a !== void 0 ? _a : null;
|
|
1209
|
+
}
|
|
1210
|
+
return reactChessCore.lastMoveUciAtPly(line.movesUci, currentIndex);
|
|
1211
|
+
}, [currentIndex, displayFen, line.movesUci]);
|
|
1205
1212
|
const moveNumber = Math.min(currentIndex + 1, total);
|
|
1206
1213
|
const isUserTurn = !finished &&
|
|
1207
1214
|
!isShowingCorrectMove &&
|
|
@@ -1211,7 +1218,7 @@ const LineBoardWithControls = ({ theme, boardTheme, line, onComplete, onMove, re
|
|
|
1211
1218
|
const controlsPlacement = stackControlsBelow
|
|
1212
1219
|
? 'below'
|
|
1213
1220
|
: 'beside';
|
|
1214
|
-
return (jsxRuntime.jsx(reactChessCore.ThemeProvider, { theme: theme, boardTheme: boardTheme, children: jsxRuntime.jsxs("div", { style: puzzlePlayRowStyle(controlsPlacement), children: [jsxRuntime.jsx("div", { style: puzzleBoardColumnStyle(boardWidth, controlsPlacement), children: jsxRuntime.jsx("div", { style: puzzleBoardSlotStyle(), children: jsxRuntime.jsx(LineBoard, { fen: boardFen, orientation: orientation, trainSide: line.trainSide, draggable: isUserTurn, correctMoveSquare: correctMoveSquare, onPieceDrop: handleDrop, boardWidth: boardWidth }) }) }), jsxRuntime.jsx("div", { style: puzzleControlsSlotStyle(controlsPlacement), children: renderControls({
|
|
1221
|
+
return (jsxRuntime.jsx(reactChessCore.ThemeProvider, { theme: theme, boardTheme: boardTheme, children: jsxRuntime.jsxs("div", { style: puzzlePlayRowStyle(controlsPlacement), children: [jsxRuntime.jsx("div", { style: puzzleBoardColumnStyle(boardWidth, controlsPlacement), children: jsxRuntime.jsx("div", { style: puzzleBoardSlotStyle(), children: jsxRuntime.jsx(LineBoard, { fen: boardFen, orientation: orientation, trainSide: line.trainSide, draggable: isUserTurn, correctMoveSquare: correctMoveSquare, lastMoveUci: lastMoveUci, onPieceDrop: handleDrop, boardWidth: boardWidth }) }) }), jsxRuntime.jsx("div", { style: puzzleControlsSlotStyle(controlsPlacement), children: renderControls({
|
|
1215
1222
|
trainSide: line.trainSide,
|
|
1216
1223
|
moveNumber,
|
|
1217
1224
|
total,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-chess-puzzle-kit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "React chess puzzle kit: play, controls, analysis, and browser Stockfish for endchess.training and other apps",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Robert Blackwell",
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
"react": "^18.3.1",
|
|
77
77
|
"react-chess-core": "^0.1.1",
|
|
78
78
|
"react-chessboard": "^4.7.1",
|
|
79
|
+
"react-dom": "^18.3.1",
|
|
79
80
|
"storybook": "^8.2.9",
|
|
80
81
|
"ts-jest": "^29.2.4",
|
|
81
82
|
"vite": "^5.4.11",
|