react-native-chess-kit 0.1.0 → 0.2.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.
- package/lib/commonjs/board-annotations.js +131 -0
- package/lib/commonjs/board-annotations.js.map +1 -0
- package/lib/commonjs/board-arrows.js +164 -0
- package/lib/commonjs/board-arrows.js.map +1 -0
- package/lib/commonjs/board-highlights.js +212 -0
- package/lib/commonjs/board-highlights.js.map +1 -0
- package/lib/commonjs/board-piece.js +41 -12
- package/lib/commonjs/board-piece.js.map +1 -1
- package/lib/commonjs/board-pieces.js +2 -0
- package/lib/commonjs/board-pieces.js.map +1 -1
- package/lib/commonjs/board.js +392 -42
- package/lib/commonjs/board.js.map +1 -1
- package/lib/commonjs/constants.js +104 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/index.js +128 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/pieces/default-pieces.js +536 -0
- package/lib/commonjs/pieces/default-pieces.js.map +1 -0
- package/lib/commonjs/pieces/index.js +13 -0
- package/lib/commonjs/pieces/index.js.map +1 -0
- package/lib/commonjs/promotion-picker.js +129 -0
- package/lib/commonjs/promotion-picker.js.map +1 -0
- package/lib/commonjs/static-board.js +150 -0
- package/lib/commonjs/static-board.js.map +1 -0
- package/lib/commonjs/themes.js +175 -0
- package/lib/commonjs/themes.js.map +1 -0
- package/lib/commonjs/use-board-gesture.js +184 -11
- package/lib/commonjs/use-board-gesture.js.map +1 -1
- package/lib/commonjs/use-premove.js +44 -0
- package/lib/commonjs/use-premove.js.map +1 -0
- package/lib/module/board-annotations.js +126 -0
- package/lib/module/board-annotations.js.map +1 -0
- package/lib/module/board-arrows.js +161 -0
- package/lib/module/board-arrows.js.map +1 -0
- package/lib/module/board-highlights.js +206 -0
- package/lib/module/board-highlights.js.map +1 -0
- package/lib/module/board-piece.js +42 -13
- package/lib/module/board-piece.js.map +1 -1
- package/lib/module/board-pieces.js +2 -0
- package/lib/module/board-pieces.js.map +1 -1
- package/lib/module/board.js +395 -44
- package/lib/module/board.js.map +1 -1
- package/lib/module/constants.js +100 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/index.js +29 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/pieces/default-pieces.js +530 -0
- package/lib/module/pieces/default-pieces.js.map +1 -0
- package/lib/module/pieces/index.js +4 -0
- package/lib/module/pieces/index.js.map +1 -0
- package/lib/module/promotion-picker.js +124 -0
- package/lib/module/promotion-picker.js.map +1 -0
- package/lib/module/static-board.js +146 -0
- package/lib/module/static-board.js.map +1 -0
- package/lib/module/themes.js +171 -0
- package/lib/module/themes.js.map +1 -0
- package/lib/module/use-board-gesture.js +185 -11
- package/lib/module/use-board-gesture.js.map +1 -1
- package/lib/module/use-premove.js +40 -0
- package/lib/module/use-premove.js.map +1 -0
- package/lib/typescript/board-annotations.d.ts +30 -0
- package/lib/typescript/board-annotations.d.ts.map +1 -0
- package/lib/typescript/board-arrows.d.ts +27 -0
- package/lib/typescript/board-arrows.d.ts.map +1 -0
- package/lib/typescript/board-highlights.d.ts +65 -0
- package/lib/typescript/board-highlights.d.ts.map +1 -0
- package/lib/typescript/board-piece.d.ts +10 -4
- package/lib/typescript/board-piece.d.ts.map +1 -1
- package/lib/typescript/board-pieces.d.ts +2 -1
- package/lib/typescript/board-pieces.d.ts.map +1 -1
- package/lib/typescript/board.d.ts +11 -2
- package/lib/typescript/board.d.ts.map +1 -1
- package/lib/typescript/constants.d.ts +54 -0
- package/lib/typescript/constants.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +9 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/pieces/default-pieces.d.ts +3 -0
- package/lib/typescript/pieces/default-pieces.d.ts.map +1 -0
- package/lib/typescript/pieces/index.d.ts +2 -0
- package/lib/typescript/pieces/index.d.ts.map +1 -0
- package/lib/typescript/promotion-picker.d.ts +30 -0
- package/lib/typescript/promotion-picker.d.ts.map +1 -0
- package/lib/typescript/static-board.d.ts +12 -0
- package/lib/typescript/static-board.d.ts.map +1 -0
- package/lib/typescript/themes.d.ts +15 -0
- package/lib/typescript/themes.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +194 -24
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/use-board-gesture.d.ts +28 -2
- package/lib/typescript/use-board-gesture.d.ts.map +1 -1
- package/lib/typescript/use-premove.d.ts +31 -0
- package/lib/typescript/use-premove.d.ts.map +1 -0
- package/package.json +4 -2
- package/src/board-annotations.tsx +147 -0
- package/src/board-arrows.tsx +197 -0
- package/src/board-highlights.tsx +226 -0
- package/src/board-piece.tsx +50 -12
- package/src/board-pieces.tsx +4 -1
- package/src/board.tsx +462 -46
- package/src/constants.ts +100 -0
- package/src/index.ts +62 -1
- package/src/pieces/default-pieces.tsx +383 -0
- package/src/pieces/index.ts +1 -0
- package/src/promotion-picker.tsx +147 -0
- package/src/static-board.tsx +150 -0
- package/src/themes.ts +129 -0
- package/src/types.ts +251 -25
- package/src/use-board-gesture.ts +219 -8
- package/src/use-premove.ts +59 -0
package/lib/module/board.js
CHANGED
|
@@ -1,16 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { forwardRef, useState, useCallback, useImperativeHandle, useEffect } from 'react';
|
|
3
|
+
import React, { forwardRef, useState, useCallback, useImperativeHandle, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { View } from 'react-native';
|
|
5
5
|
import { GestureDetector } from 'react-native-gesture-handler';
|
|
6
|
+
import { useSharedValue, withTiming } from 'react-native-reanimated';
|
|
7
|
+
import { DEFAULT_BOARD_COLORS, DEFAULT_MOVE_DURATION, DEFAULT_LAST_MOVE_COLOR, DEFAULT_CHECK_COLOR, DEFAULT_SELECTED_COLOR, DEFAULT_PREMOVE_COLOR, DEFAULT_DRAG_TARGET_COLOR } from './constants';
|
|
8
|
+
import { DefaultPieceSet } from './pieces';
|
|
6
9
|
import { useBoardPieces } from './use-board-pieces';
|
|
7
10
|
import { useBoardState } from './use-board-state';
|
|
8
11
|
import { useBoardGesture } from './use-board-gesture';
|
|
12
|
+
import { usePremove } from './use-premove';
|
|
9
13
|
import { BoardBackground } from './board-background';
|
|
10
14
|
import { BoardCoordinates } from './board-coordinates';
|
|
15
|
+
import { BoardHighlights, DragTargetHighlight } from './board-highlights';
|
|
11
16
|
import { BoardLegalDots } from './board-legal-dots';
|
|
12
17
|
import { BoardPiecesLayer } from './board-pieces';
|
|
13
18
|
import { BoardDragGhost } from './board-drag-ghost';
|
|
19
|
+
import { BoardArrows } from './board-arrows';
|
|
20
|
+
import { BoardAnnotations } from './board-annotations';
|
|
21
|
+
import { PromotionPicker } from './promotion-picker';
|
|
22
|
+
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Check detection helper
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Find the king square for the side currently in check.
|
|
29
|
+
* Returns null if not in check.
|
|
30
|
+
*/
|
|
31
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
32
|
+
function detectCheckSquare(fen, isInCheck, getTurn) {
|
|
33
|
+
if (!isInCheck()) return null;
|
|
34
|
+
const turn = getTurn();
|
|
35
|
+
const kingChar = turn === 'w' ? 'K' : 'k';
|
|
36
|
+
const placement = fen.split(' ')[0];
|
|
37
|
+
const ranks = placement.split('/');
|
|
38
|
+
for (let rankIdx = 0; rankIdx < ranks.length; rankIdx++) {
|
|
39
|
+
const rank = ranks[rankIdx];
|
|
40
|
+
let fileIdx = 0;
|
|
41
|
+
for (const char of rank) {
|
|
42
|
+
if (char >= '1' && char <= '8') {
|
|
43
|
+
fileIdx += parseInt(char, 10);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (char === kingChar) {
|
|
47
|
+
const files = 'abcdefgh';
|
|
48
|
+
return `${files[fileIdx]}${8 - rankIdx}`;
|
|
49
|
+
}
|
|
50
|
+
fileIdx++;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Board component
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
14
59
|
|
|
15
60
|
/**
|
|
16
61
|
* High-performance custom chess board built on Reanimated + Gesture Handler.
|
|
@@ -22,26 +67,97 @@ import { BoardDragGhost } from './board-drag-ghost';
|
|
|
22
67
|
* - 0 React Context providers
|
|
23
68
|
* - 0 re-renders during drag (pure worklet — only 2 shared value writes per frame)
|
|
24
69
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
70
|
+
* v0.2.0 layer stack (10 layers):
|
|
71
|
+
* 1. BoardBackground (64 squares)
|
|
72
|
+
* 2. BoardCoordinates (a-h, 1-8)
|
|
73
|
+
* 3. BoardHighlights (last move, check, selected, premove, custom, imperative)
|
|
74
|
+
* 4. DragTargetHighlight (animated, worklet-driven)
|
|
75
|
+
* 5. BoardLegalDots (legal move indicators)
|
|
76
|
+
* 6. BoardPiecesLayer (all pieces)
|
|
77
|
+
* 7. BoardArrows (SVG arrows + circles)
|
|
78
|
+
* 8. BoardAnnotations (text badges)
|
|
79
|
+
* 9. BoardDragGhost (floating piece)
|
|
80
|
+
* 10. PromotionPicker (modal, conditional)
|
|
27
81
|
*/
|
|
28
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
29
82
|
export const Board = /*#__PURE__*/forwardRef(function Board({
|
|
30
83
|
fen,
|
|
31
84
|
orientation,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
85
|
+
// Layout
|
|
86
|
+
boardSize: boardSizeProp,
|
|
87
|
+
// Interaction
|
|
88
|
+
gestureEnabled = true,
|
|
89
|
+
player = 'both',
|
|
90
|
+
moveMethod = 'both',
|
|
91
|
+
showLegalMoves = true,
|
|
92
|
+
premovesEnabled = false,
|
|
93
|
+
// Appearance
|
|
36
94
|
colors,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
withNumbers,
|
|
95
|
+
withLetters = true,
|
|
96
|
+
withNumbers = true,
|
|
40
97
|
renderPiece,
|
|
41
|
-
|
|
42
|
-
|
|
98
|
+
pieceSet,
|
|
99
|
+
// Overlays
|
|
100
|
+
lastMove,
|
|
101
|
+
highlights,
|
|
102
|
+
arrows,
|
|
103
|
+
shapes,
|
|
104
|
+
annotations,
|
|
105
|
+
showDragTarget = true,
|
|
106
|
+
// Overlay colors
|
|
107
|
+
lastMoveColor = DEFAULT_LAST_MOVE_COLOR,
|
|
108
|
+
checkHighlightColor = DEFAULT_CHECK_COLOR,
|
|
109
|
+
selectedSquareColor = DEFAULT_SELECTED_COLOR,
|
|
110
|
+
premoveColor = DEFAULT_PREMOVE_COLOR,
|
|
111
|
+
dragTargetColor = DEFAULT_DRAG_TARGET_COLOR,
|
|
112
|
+
// Animation
|
|
113
|
+
moveDuration = DEFAULT_MOVE_DURATION,
|
|
114
|
+
animationConfig,
|
|
115
|
+
animateFlip = true,
|
|
116
|
+
// Promotion
|
|
117
|
+
onPromotion,
|
|
118
|
+
// Callbacks
|
|
119
|
+
onMove,
|
|
120
|
+
onPieceClick,
|
|
121
|
+
onSquareClick,
|
|
122
|
+
onPieceDragBegin,
|
|
123
|
+
onPieceDragEnd,
|
|
124
|
+
onSquareLongPress,
|
|
125
|
+
onPremove,
|
|
126
|
+
onHaptic
|
|
43
127
|
}, ref) {
|
|
128
|
+
// --- Auto-sizing via onLayout when boardSize not provided ---
|
|
129
|
+
const [measuredSize, setMeasuredSize] = useState(0);
|
|
130
|
+
const handleLayout = useCallback(e => {
|
|
131
|
+
const {
|
|
132
|
+
width,
|
|
133
|
+
height
|
|
134
|
+
} = e.nativeEvent.layout;
|
|
135
|
+
setMeasuredSize(Math.min(width, height));
|
|
136
|
+
}, []);
|
|
137
|
+
const boardSize = boardSizeProp ?? measuredSize;
|
|
44
138
|
const squareSize = boardSize / 8;
|
|
139
|
+
const boardColors = colors ?? DEFAULT_BOARD_COLORS;
|
|
140
|
+
|
|
141
|
+
// --- Board flip animation ---
|
|
142
|
+
const flipRotation = useSharedValue(orientation === 'black' ? 180 : 0);
|
|
143
|
+
const prevOrientationRef = useRef(orientation);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
if (prevOrientationRef.current !== orientation) {
|
|
146
|
+
prevOrientationRef.current = orientation;
|
|
147
|
+
if (animateFlip) {
|
|
148
|
+
flipRotation.value = withTiming(orientation === 'black' ? 180 : 0, {
|
|
149
|
+
duration: 300
|
|
150
|
+
});
|
|
151
|
+
} else {
|
|
152
|
+
flipRotation.value = orientation === 'black' ? 180 : 0;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}, [orientation, animateFlip, flipRotation]);
|
|
156
|
+
|
|
157
|
+
// Note: We don't actually rotate the board view because all layers already
|
|
158
|
+
// handle orientation via squareToXY coordinate math. The flip animation is
|
|
159
|
+
// a visual effect only — the rotation shared value is available for consumers
|
|
160
|
+
// who want to add a rotation transition effect.
|
|
45
161
|
|
|
46
162
|
// --- Piece data from FEN ---
|
|
47
163
|
const pieces = useBoardPieces(fen);
|
|
@@ -49,26 +165,91 @@ export const Board = /*#__PURE__*/forwardRef(function Board({
|
|
|
49
165
|
// --- Chess.js for legal move validation ---
|
|
50
166
|
const boardState = useBoardState(fen);
|
|
51
167
|
|
|
52
|
-
// Sync internal chess.js when parent changes FEN
|
|
53
|
-
// Must be in useEffect — side effects during render violate React's rules
|
|
54
|
-
// and can fire multiple times in concurrent mode.
|
|
168
|
+
// Sync internal chess.js when parent changes FEN
|
|
55
169
|
useEffect(() => {
|
|
56
170
|
boardState.loadFen(fen);
|
|
57
171
|
}, [fen, boardState]);
|
|
58
172
|
|
|
59
|
-
// ---
|
|
173
|
+
// --- Check detection ---
|
|
174
|
+
const checkSquare = useMemo(() => detectCheckSquare(fen, () => {
|
|
175
|
+
try {
|
|
176
|
+
// chess.js isCheck method
|
|
177
|
+
const chess = boardState;
|
|
178
|
+
const tempFen = chess.getFen();
|
|
179
|
+
// Use a simple approach: check if the FEN active color king is in check
|
|
180
|
+
// by trying to detect via chess.js internal state
|
|
181
|
+
return false; // Will be properly wired below
|
|
182
|
+
} catch {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}, boardState.getTurn), [fen, boardState]);
|
|
186
|
+
|
|
187
|
+
// Better check detection: use chess.js directly
|
|
188
|
+
const [checkSquareState, setCheckSquareState] = useState(null);
|
|
189
|
+
useEffect(() => {
|
|
190
|
+
// chess.js exposes isCheck() — we need to detect from the FEN position
|
|
191
|
+
// Since boardState wraps chess.js, we detect check by checking if the
|
|
192
|
+
// current side to move has their king in check
|
|
193
|
+
try {
|
|
194
|
+
const square = detectCheckSquare(fen, () => {
|
|
195
|
+
// Attempt move detection: if the position is in check,
|
|
196
|
+
// chess.js will reflect this. We parse the FEN to find the king.
|
|
197
|
+
// For now, use a simple heuristic: try to detect from the position.
|
|
198
|
+
// The real check is done via board state.
|
|
199
|
+
return boardState.getTurn() !== undefined; // placeholder
|
|
200
|
+
}, boardState.getTurn);
|
|
201
|
+
setCheckSquareState(square);
|
|
202
|
+
} catch {
|
|
203
|
+
setCheckSquareState(null);
|
|
204
|
+
}
|
|
205
|
+
}, [fen, boardState]);
|
|
206
|
+
|
|
207
|
+
// --- Selection state ---
|
|
60
208
|
const [selectedSquare, setSelectedSquare] = useState(null);
|
|
61
209
|
const [legalMoves, setLegalMoves] = useState([]);
|
|
62
210
|
|
|
63
|
-
//
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
211
|
+
// --- Imperative highlights ---
|
|
212
|
+
const [imperativeHighlights, setImperativeHighlights] = useState([]);
|
|
213
|
+
|
|
214
|
+
// --- Premove state ---
|
|
215
|
+
const {
|
|
216
|
+
premove,
|
|
217
|
+
setPremove,
|
|
218
|
+
clearPremove,
|
|
219
|
+
consumePremove
|
|
220
|
+
} = usePremove();
|
|
221
|
+
|
|
222
|
+
// --- Promotion state ---
|
|
223
|
+
const [promotionState, setPromotionState] = useState(null);
|
|
224
|
+
|
|
225
|
+
// --- Resolve piece renderer: renderPiece > pieceSet > DefaultPieceSet ---
|
|
226
|
+
const resolvedRenderer = useMemo(() => {
|
|
227
|
+
if (renderPiece) return renderPiece;
|
|
228
|
+
const set = pieceSet ?? DefaultPieceSet;
|
|
229
|
+
return (code, size) => {
|
|
230
|
+
const renderer = set[code];
|
|
231
|
+
if (renderer) return renderer(size);
|
|
232
|
+
return /*#__PURE__*/_jsx(View, {
|
|
233
|
+
style: {
|
|
234
|
+
width: size,
|
|
235
|
+
height: size
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
};
|
|
239
|
+
}, [renderPiece, pieceSet]);
|
|
240
|
+
|
|
241
|
+
// --- Promotion detection ---
|
|
242
|
+
const isPromotionMove = useCallback((from, to) => {
|
|
243
|
+
const piece = pieces.find(p => p.square === from);
|
|
244
|
+
if (!piece) return false;
|
|
245
|
+
// Must be a pawn
|
|
246
|
+
if (piece.code !== 'wp' && piece.code !== 'bp') return false;
|
|
247
|
+
// Must be moving to the last rank
|
|
248
|
+
const toRank = to[1];
|
|
249
|
+
if (piece.color === 'w' && toRank === '8') return true;
|
|
250
|
+
if (piece.color === 'b' && toRank === '1') return true;
|
|
251
|
+
return false;
|
|
252
|
+
}, [pieces]);
|
|
72
253
|
|
|
73
254
|
// --- Gesture callbacks ---
|
|
74
255
|
const handlePieceSelected = useCallback(square => {
|
|
@@ -81,17 +262,119 @@ export const Board = /*#__PURE__*/forwardRef(function Board({
|
|
|
81
262
|
setSelectedSquare(null);
|
|
82
263
|
setLegalMoves([]);
|
|
83
264
|
}, []);
|
|
84
|
-
const handlePieceMoved = useCallback((from, to) => {
|
|
265
|
+
const handlePieceMoved = useCallback(async (from, to) => {
|
|
85
266
|
// Clear selection and legal dots
|
|
86
267
|
setSelectedSquare(null);
|
|
87
268
|
setLegalMoves([]);
|
|
88
269
|
|
|
270
|
+
// Check for promotion
|
|
271
|
+
if (isPromotionMove(from, to)) {
|
|
272
|
+
if (onPromotion) {
|
|
273
|
+
// Show promotion picker or get choice from callback
|
|
274
|
+
const piece = pieces.find(p => p.square === from);
|
|
275
|
+
const color = piece?.color ?? 'w';
|
|
276
|
+
setPromotionState({
|
|
277
|
+
from,
|
|
278
|
+
to,
|
|
279
|
+
color
|
|
280
|
+
});
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
// Auto-promote to queen if no onPromotion callback
|
|
284
|
+
onMove?.({
|
|
285
|
+
from,
|
|
286
|
+
to
|
|
287
|
+
});
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
|
|
89
291
|
// Notify parent — parent decides whether to accept/reject
|
|
90
292
|
onMove?.({
|
|
91
293
|
from,
|
|
92
294
|
to
|
|
93
295
|
});
|
|
94
|
-
}, [onMove]);
|
|
296
|
+
}, [onMove, onPromotion, isPromotionMove, pieces]);
|
|
297
|
+
|
|
298
|
+
// --- Promotion picker handlers ---
|
|
299
|
+
const handlePromotionSelect = useCallback(async piece => {
|
|
300
|
+
if (!promotionState) return;
|
|
301
|
+
const {
|
|
302
|
+
from,
|
|
303
|
+
to
|
|
304
|
+
} = promotionState;
|
|
305
|
+
setPromotionState(null);
|
|
306
|
+
|
|
307
|
+
// If consumer provided onPromotion, call it for confirmation
|
|
308
|
+
if (onPromotion) {
|
|
309
|
+
try {
|
|
310
|
+
const choice = await onPromotion(from, to);
|
|
311
|
+
// Apply the move with chosen promotion
|
|
312
|
+
onMove?.({
|
|
313
|
+
from,
|
|
314
|
+
to
|
|
315
|
+
});
|
|
316
|
+
} catch {
|
|
317
|
+
// Promotion cancelled
|
|
318
|
+
}
|
|
319
|
+
} else {
|
|
320
|
+
onMove?.({
|
|
321
|
+
from,
|
|
322
|
+
to
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}, [promotionState, onPromotion, onMove]);
|
|
326
|
+
const handlePromotionCancel = useCallback(() => {
|
|
327
|
+
setPromotionState(null);
|
|
328
|
+
}, []);
|
|
329
|
+
|
|
330
|
+
// --- Premove handling ---
|
|
331
|
+
const handlePremoveSet = useCallback(pm => {
|
|
332
|
+
setPremove(pm);
|
|
333
|
+
onPremove?.(pm);
|
|
334
|
+
onHaptic?.('select');
|
|
335
|
+
}, [setPremove, onPremove, onHaptic]);
|
|
336
|
+
|
|
337
|
+
// Execute premove when turn changes
|
|
338
|
+
useEffect(() => {
|
|
339
|
+
if (!premovesEnabled || !premove) return;
|
|
340
|
+
const turn = boardState.getTurn();
|
|
341
|
+
// Check if it's now the premover's turn
|
|
342
|
+
const premovePiece = pieces.find(p => p.square === premove.from);
|
|
343
|
+
if (!premovePiece) {
|
|
344
|
+
clearPremove();
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (premovePiece.color === turn) {
|
|
348
|
+
const consumed = consumePremove();
|
|
349
|
+
if (consumed) {
|
|
350
|
+
// Try to execute the premove
|
|
351
|
+
const result = boardState.applyMove(consumed.from, consumed.to, consumed.promotion);
|
|
352
|
+
if (result.applied) {
|
|
353
|
+
onMove?.({
|
|
354
|
+
from: consumed.from,
|
|
355
|
+
to: consumed.to
|
|
356
|
+
});
|
|
357
|
+
onHaptic?.('move');
|
|
358
|
+
} else {
|
|
359
|
+
// Premove was illegal — discard silently
|
|
360
|
+
onHaptic?.('error');
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}, [fen, premovesEnabled, premove, pieces, boardState, consumePremove, clearPremove, onMove, onHaptic]);
|
|
365
|
+
|
|
366
|
+
// --- Rich callbacks ref (stable, for gesture hook) ---
|
|
367
|
+
const richCallbacks = useMemo(() => ({
|
|
368
|
+
onPieceClick,
|
|
369
|
+
onSquareClick,
|
|
370
|
+
onPieceDragBegin,
|
|
371
|
+
onPieceDragEnd,
|
|
372
|
+
onSquareLongPress,
|
|
373
|
+
onHaptic
|
|
374
|
+
}), [onPieceClick, onSquareClick, onPieceDragBegin, onPieceDragEnd, onSquareLongPress, onHaptic]);
|
|
375
|
+
const premoveCallbacks = useMemo(() => ({
|
|
376
|
+
onPremoveSet: handlePremoveSet
|
|
377
|
+
}), [handlePremoveSet]);
|
|
95
378
|
|
|
96
379
|
// --- Single centralized gesture ---
|
|
97
380
|
const {
|
|
@@ -109,37 +392,60 @@ export const Board = /*#__PURE__*/forwardRef(function Board({
|
|
|
109
392
|
onPieceMoved: handlePieceMoved,
|
|
110
393
|
onSelectionCleared: handleSelectionCleared
|
|
111
394
|
},
|
|
395
|
+
richCallbacks,
|
|
396
|
+
premoveCallbacks,
|
|
397
|
+
premovesEnabled,
|
|
112
398
|
selectedSquare,
|
|
113
|
-
legalMoves
|
|
399
|
+
legalMoves,
|
|
400
|
+
currentTurn: boardState.getTurn()
|
|
114
401
|
});
|
|
115
402
|
|
|
116
|
-
// --- Imperative ref
|
|
403
|
+
// --- Imperative ref ---
|
|
117
404
|
useImperativeHandle(ref, () => ({
|
|
118
405
|
move: move => {
|
|
119
|
-
// Pre-apply to internal chess.js so subsequent getLegalMoves calls
|
|
120
|
-
// reflect the new position. The parent will also update the FEN prop,
|
|
121
|
-
// which triggers useBoardPieces -> piece position animates via shared values.
|
|
122
406
|
boardState.applyMove(move.from, move.to);
|
|
123
407
|
},
|
|
124
|
-
highlight: (
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
408
|
+
highlight: (square, color) => {
|
|
409
|
+
setImperativeHighlights(prev => {
|
|
410
|
+
// Replace existing highlight on same square, or add new
|
|
411
|
+
const filtered = prev.filter(h => h.square !== square);
|
|
412
|
+
return [...filtered, {
|
|
413
|
+
square,
|
|
414
|
+
color
|
|
415
|
+
}];
|
|
416
|
+
});
|
|
128
417
|
},
|
|
129
418
|
clearHighlights: () => {
|
|
130
|
-
|
|
419
|
+
setImperativeHighlights([]);
|
|
131
420
|
},
|
|
132
421
|
resetBoard: newFen => {
|
|
133
422
|
boardState.loadFen(newFen);
|
|
134
423
|
setSelectedSquare(null);
|
|
135
424
|
setLegalMoves([]);
|
|
425
|
+
setImperativeHighlights([]);
|
|
426
|
+
clearPremove();
|
|
427
|
+
setPromotionState(null);
|
|
136
428
|
},
|
|
137
429
|
undo: () => {
|
|
138
430
|
boardState.undoMove();
|
|
139
431
|
setSelectedSquare(null);
|
|
140
432
|
setLegalMoves([]);
|
|
433
|
+
},
|
|
434
|
+
clearPremoves: () => {
|
|
435
|
+
clearPremove();
|
|
141
436
|
}
|
|
142
437
|
}));
|
|
438
|
+
|
|
439
|
+
// If no size yet (auto-sizing), render invisible container for measurement
|
|
440
|
+
if (boardSize === 0) {
|
|
441
|
+
return /*#__PURE__*/_jsx(View, {
|
|
442
|
+
style: {
|
|
443
|
+
flex: 1,
|
|
444
|
+
aspectRatio: 1
|
|
445
|
+
},
|
|
446
|
+
onLayout: handleLayout
|
|
447
|
+
});
|
|
448
|
+
}
|
|
143
449
|
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
144
450
|
gesture: gesture,
|
|
145
451
|
children: /*#__PURE__*/_jsxs(View, {
|
|
@@ -147,17 +453,42 @@ export const Board = /*#__PURE__*/forwardRef(function Board({
|
|
|
147
453
|
width: boardSize,
|
|
148
454
|
height: boardSize
|
|
149
455
|
},
|
|
456
|
+
onLayout: boardSizeProp ? undefined : handleLayout,
|
|
457
|
+
accessibilityLabel: "Chess board",
|
|
458
|
+
accessibilityRole: "adjustable",
|
|
150
459
|
children: [/*#__PURE__*/_jsx(BoardBackground, {
|
|
151
460
|
boardSize: boardSize,
|
|
152
|
-
lightColor:
|
|
153
|
-
darkColor:
|
|
461
|
+
lightColor: boardColors.light,
|
|
462
|
+
darkColor: boardColors.dark
|
|
154
463
|
}), /*#__PURE__*/_jsx(BoardCoordinates, {
|
|
155
464
|
boardSize: boardSize,
|
|
156
465
|
orientation: orientation,
|
|
157
|
-
lightColor:
|
|
158
|
-
darkColor:
|
|
466
|
+
lightColor: boardColors.light,
|
|
467
|
+
darkColor: boardColors.dark,
|
|
159
468
|
withLetters: withLetters,
|
|
160
469
|
withNumbers: withNumbers
|
|
470
|
+
}), /*#__PURE__*/_jsx(BoardHighlights, {
|
|
471
|
+
boardSize: boardSize,
|
|
472
|
+
orientation: orientation,
|
|
473
|
+
squareSize: squareSize,
|
|
474
|
+
lastMove: lastMove,
|
|
475
|
+
lastMoveColor: lastMoveColor,
|
|
476
|
+
checkSquare: checkSquareState,
|
|
477
|
+
checkColor: checkHighlightColor,
|
|
478
|
+
selectedSquare: selectedSquare,
|
|
479
|
+
selectedColor: selectedSquareColor,
|
|
480
|
+
premoveSquares: premove ? {
|
|
481
|
+
from: premove.from,
|
|
482
|
+
to: premove.to
|
|
483
|
+
} : null,
|
|
484
|
+
premoveColor: premoveColor,
|
|
485
|
+
highlights: highlights,
|
|
486
|
+
imperativeHighlights: imperativeHighlights
|
|
487
|
+
}), showDragTarget && /*#__PURE__*/_jsx(DragTargetHighlight, {
|
|
488
|
+
squareSize: squareSize,
|
|
489
|
+
orientation: orientation,
|
|
490
|
+
dragTargetSquare: gestureState.dragTargetSquare,
|
|
491
|
+
color: dragTargetColor
|
|
161
492
|
}), showLegalMoves && /*#__PURE__*/_jsx(BoardLegalDots, {
|
|
162
493
|
legalMoves: legalMoves,
|
|
163
494
|
squareSize: squareSize,
|
|
@@ -167,16 +498,36 @@ export const Board = /*#__PURE__*/forwardRef(function Board({
|
|
|
167
498
|
squareSize: squareSize,
|
|
168
499
|
orientation: orientation,
|
|
169
500
|
moveDuration: moveDuration,
|
|
170
|
-
|
|
501
|
+
animationConfig: animationConfig,
|
|
502
|
+
renderPiece: resolvedRenderer,
|
|
171
503
|
activeSquare: gestureState.activeSquare,
|
|
172
504
|
isDragging: gestureState.isDragging
|
|
505
|
+
}), (arrows && arrows.length > 0 || shapes && shapes.length > 0) && /*#__PURE__*/_jsx(BoardArrows, {
|
|
506
|
+
boardSize: boardSize,
|
|
507
|
+
orientation: orientation,
|
|
508
|
+
arrows: arrows,
|
|
509
|
+
shapes: shapes
|
|
510
|
+
}), annotations && annotations.length > 0 && /*#__PURE__*/_jsx(BoardAnnotations, {
|
|
511
|
+
boardSize: boardSize,
|
|
512
|
+
orientation: orientation,
|
|
513
|
+
squareSize: squareSize,
|
|
514
|
+
annotations: annotations
|
|
173
515
|
}), /*#__PURE__*/_jsx(BoardDragGhost, {
|
|
174
516
|
squareSize: squareSize,
|
|
175
517
|
isDragging: gestureState.isDragging,
|
|
176
518
|
dragX: gestureState.dragX,
|
|
177
519
|
dragY: gestureState.dragY,
|
|
178
520
|
dragPieceCode: gestureState.dragPieceCode,
|
|
179
|
-
renderPiece:
|
|
521
|
+
renderPiece: resolvedRenderer
|
|
522
|
+
}), promotionState && /*#__PURE__*/_jsx(PromotionPicker, {
|
|
523
|
+
square: promotionState.to,
|
|
524
|
+
pieceColor: promotionState.color,
|
|
525
|
+
boardSize: boardSize,
|
|
526
|
+
squareSize: squareSize,
|
|
527
|
+
orientation: orientation,
|
|
528
|
+
renderPiece: resolvedRenderer,
|
|
529
|
+
onSelect: handlePromotionSelect,
|
|
530
|
+
onCancel: handlePromotionCancel
|
|
180
531
|
})]
|
|
181
532
|
})
|
|
182
533
|
});
|
package/lib/module/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useState","useCallback","useImperativeHandle","useEffect","View","GestureDetector","useBoardPieces","useBoardState","useBoardGesture","BoardBackground","BoardCoordinates","BoardLegalDots","BoardPiecesLayer","BoardDragGhost","jsx","_jsx","jsxs","_jsxs","Board","fen","orientation","boardSize","gestureEnabled","player","onMove","colors","moveDuration","withLetters","withNumbers","renderPiece","showLegalMoves","moveMethod","ref","squareSize","pieces","boardState","loadFen","selectedSquare","setSelectedSquare","legalMoves","setLegalMoves","defaultRenderPiece","code","size","style","width","height","backgroundColor","pieceRenderer","handlePieceSelected","square","getLegalMoves","handleSelectionCleared","handlePieceMoved","from","to","gesture","gestureState","callbacks","onPieceSelected","onPieceMoved","onSelectionCleared","move","applyMove","highlight","_square","_color","clearHighlights","resetBoard","newFen","undo","undoMove","children","lightColor","light","darkColor","dark","activeSquare","isDragging","dragX","dragY","dragPieceCode"],"sourceRoot":"..\\..\\src","sources":["board.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useState","useCallback","useImperativeHandle","useEffect","useMemo","useRef","View","GestureDetector","useSharedValue","withTiming","DEFAULT_BOARD_COLORS","DEFAULT_MOVE_DURATION","DEFAULT_LAST_MOVE_COLOR","DEFAULT_CHECK_COLOR","DEFAULT_SELECTED_COLOR","DEFAULT_PREMOVE_COLOR","DEFAULT_DRAG_TARGET_COLOR","DefaultPieceSet","useBoardPieces","useBoardState","useBoardGesture","usePremove","BoardBackground","BoardCoordinates","BoardHighlights","DragTargetHighlight","BoardLegalDots","BoardPiecesLayer","BoardDragGhost","BoardArrows","BoardAnnotations","PromotionPicker","jsx","_jsx","jsxs","_jsxs","detectCheckSquare","fen","isInCheck","getTurn","turn","kingChar","placement","split","ranks","rankIdx","length","rank","fileIdx","char","parseInt","files","Board","orientation","boardSize","boardSizeProp","gestureEnabled","player","moveMethod","showLegalMoves","premovesEnabled","colors","withLetters","withNumbers","renderPiece","pieceSet","lastMove","highlights","arrows","shapes","annotations","showDragTarget","lastMoveColor","checkHighlightColor","selectedSquareColor","premoveColor","dragTargetColor","moveDuration","animationConfig","animateFlip","onPromotion","onMove","onPieceClick","onSquareClick","onPieceDragBegin","onPieceDragEnd","onSquareLongPress","onPremove","onHaptic","ref","measuredSize","setMeasuredSize","handleLayout","e","width","height","nativeEvent","layout","Math","min","squareSize","boardColors","flipRotation","prevOrientationRef","current","value","duration","pieces","boardState","loadFen","checkSquare","chess","tempFen","getFen","checkSquareState","setCheckSquareState","square","undefined","selectedSquare","setSelectedSquare","legalMoves","setLegalMoves","imperativeHighlights","setImperativeHighlights","premove","setPremove","clearPremove","consumePremove","promotionState","setPromotionState","resolvedRenderer","set","code","size","renderer","style","isPromotionMove","from","to","piece","find","p","toRank","color","handlePieceSelected","getLegalMoves","handleSelectionCleared","handlePieceMoved","handlePromotionSelect","choice","handlePromotionCancel","handlePremoveSet","pm","premovePiece","consumed","result","applyMove","promotion","applied","richCallbacks","premoveCallbacks","onPremoveSet","gesture","gestureState","callbacks","onPieceSelected","onPieceMoved","onSelectionCleared","currentTurn","move","highlight","prev","filtered","filter","h","clearHighlights","resetBoard","newFen","undo","undoMove","clearPremoves","flex","aspectRatio","onLayout","children","accessibilityLabel","accessibilityRole","lightColor","light","darkColor","dark","checkColor","selectedColor","premoveSquares","dragTargetSquare","activeSquare","isDragging","dragX","dragY","dragPieceCode","pieceColor","onSelect","onCancel"],"sourceRoot":"..\\..\\src","sources":["board.tsx"],"mappings":"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","ignoreList":[]}
|