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.
Files changed (109) hide show
  1. package/lib/commonjs/board-annotations.js +131 -0
  2. package/lib/commonjs/board-annotations.js.map +1 -0
  3. package/lib/commonjs/board-arrows.js +164 -0
  4. package/lib/commonjs/board-arrows.js.map +1 -0
  5. package/lib/commonjs/board-highlights.js +212 -0
  6. package/lib/commonjs/board-highlights.js.map +1 -0
  7. package/lib/commonjs/board-piece.js +41 -12
  8. package/lib/commonjs/board-piece.js.map +1 -1
  9. package/lib/commonjs/board-pieces.js +2 -0
  10. package/lib/commonjs/board-pieces.js.map +1 -1
  11. package/lib/commonjs/board.js +392 -42
  12. package/lib/commonjs/board.js.map +1 -1
  13. package/lib/commonjs/constants.js +104 -0
  14. package/lib/commonjs/constants.js.map +1 -0
  15. package/lib/commonjs/index.js +128 -0
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/pieces/default-pieces.js +536 -0
  18. package/lib/commonjs/pieces/default-pieces.js.map +1 -0
  19. package/lib/commonjs/pieces/index.js +13 -0
  20. package/lib/commonjs/pieces/index.js.map +1 -0
  21. package/lib/commonjs/promotion-picker.js +129 -0
  22. package/lib/commonjs/promotion-picker.js.map +1 -0
  23. package/lib/commonjs/static-board.js +150 -0
  24. package/lib/commonjs/static-board.js.map +1 -0
  25. package/lib/commonjs/themes.js +175 -0
  26. package/lib/commonjs/themes.js.map +1 -0
  27. package/lib/commonjs/use-board-gesture.js +184 -11
  28. package/lib/commonjs/use-board-gesture.js.map +1 -1
  29. package/lib/commonjs/use-premove.js +44 -0
  30. package/lib/commonjs/use-premove.js.map +1 -0
  31. package/lib/module/board-annotations.js +126 -0
  32. package/lib/module/board-annotations.js.map +1 -0
  33. package/lib/module/board-arrows.js +161 -0
  34. package/lib/module/board-arrows.js.map +1 -0
  35. package/lib/module/board-highlights.js +206 -0
  36. package/lib/module/board-highlights.js.map +1 -0
  37. package/lib/module/board-piece.js +42 -13
  38. package/lib/module/board-piece.js.map +1 -1
  39. package/lib/module/board-pieces.js +2 -0
  40. package/lib/module/board-pieces.js.map +1 -1
  41. package/lib/module/board.js +395 -44
  42. package/lib/module/board.js.map +1 -1
  43. package/lib/module/constants.js +100 -0
  44. package/lib/module/constants.js.map +1 -0
  45. package/lib/module/index.js +29 -1
  46. package/lib/module/index.js.map +1 -1
  47. package/lib/module/pieces/default-pieces.js +530 -0
  48. package/lib/module/pieces/default-pieces.js.map +1 -0
  49. package/lib/module/pieces/index.js +4 -0
  50. package/lib/module/pieces/index.js.map +1 -0
  51. package/lib/module/promotion-picker.js +124 -0
  52. package/lib/module/promotion-picker.js.map +1 -0
  53. package/lib/module/static-board.js +146 -0
  54. package/lib/module/static-board.js.map +1 -0
  55. package/lib/module/themes.js +171 -0
  56. package/lib/module/themes.js.map +1 -0
  57. package/lib/module/use-board-gesture.js +185 -11
  58. package/lib/module/use-board-gesture.js.map +1 -1
  59. package/lib/module/use-premove.js +40 -0
  60. package/lib/module/use-premove.js.map +1 -0
  61. package/lib/typescript/board-annotations.d.ts +30 -0
  62. package/lib/typescript/board-annotations.d.ts.map +1 -0
  63. package/lib/typescript/board-arrows.d.ts +27 -0
  64. package/lib/typescript/board-arrows.d.ts.map +1 -0
  65. package/lib/typescript/board-highlights.d.ts +65 -0
  66. package/lib/typescript/board-highlights.d.ts.map +1 -0
  67. package/lib/typescript/board-piece.d.ts +10 -4
  68. package/lib/typescript/board-piece.d.ts.map +1 -1
  69. package/lib/typescript/board-pieces.d.ts +2 -1
  70. package/lib/typescript/board-pieces.d.ts.map +1 -1
  71. package/lib/typescript/board.d.ts +11 -2
  72. package/lib/typescript/board.d.ts.map +1 -1
  73. package/lib/typescript/constants.d.ts +54 -0
  74. package/lib/typescript/constants.d.ts.map +1 -0
  75. package/lib/typescript/index.d.ts +9 -1
  76. package/lib/typescript/index.d.ts.map +1 -1
  77. package/lib/typescript/pieces/default-pieces.d.ts +3 -0
  78. package/lib/typescript/pieces/default-pieces.d.ts.map +1 -0
  79. package/lib/typescript/pieces/index.d.ts +2 -0
  80. package/lib/typescript/pieces/index.d.ts.map +1 -0
  81. package/lib/typescript/promotion-picker.d.ts +30 -0
  82. package/lib/typescript/promotion-picker.d.ts.map +1 -0
  83. package/lib/typescript/static-board.d.ts +12 -0
  84. package/lib/typescript/static-board.d.ts.map +1 -0
  85. package/lib/typescript/themes.d.ts +15 -0
  86. package/lib/typescript/themes.d.ts.map +1 -0
  87. package/lib/typescript/types.d.ts +194 -24
  88. package/lib/typescript/types.d.ts.map +1 -1
  89. package/lib/typescript/use-board-gesture.d.ts +28 -2
  90. package/lib/typescript/use-board-gesture.d.ts.map +1 -1
  91. package/lib/typescript/use-premove.d.ts +31 -0
  92. package/lib/typescript/use-premove.d.ts.map +1 -0
  93. package/package.json +4 -2
  94. package/src/board-annotations.tsx +147 -0
  95. package/src/board-arrows.tsx +197 -0
  96. package/src/board-highlights.tsx +226 -0
  97. package/src/board-piece.tsx +50 -12
  98. package/src/board-pieces.tsx +4 -1
  99. package/src/board.tsx +462 -46
  100. package/src/constants.ts +100 -0
  101. package/src/index.ts +62 -1
  102. package/src/pieces/default-pieces.tsx +383 -0
  103. package/src/pieces/index.ts +1 -0
  104. package/src/promotion-picker.tsx +147 -0
  105. package/src/static-board.tsx +150 -0
  106. package/src/themes.ts +129 -0
  107. package/src/types.ts +251 -25
  108. package/src/use-board-gesture.ts +219 -8
  109. package/src/use-premove.ts +59 -0
@@ -8,6 +8,36 @@ var _react = require("react");
8
8
  var _reactNativeGestureHandler = require("react-native-gesture-handler");
9
9
  var _reactNativeReanimated = require("react-native-reanimated");
10
10
  var _useBoardPieces = require("./use-board-pieces");
11
+ // ---------------------------------------------------------------------------
12
+ // Callback types
13
+ // ---------------------------------------------------------------------------
14
+
15
+ /** Rich callbacks exposed to consumers (all optional) */
16
+
17
+ /** Premove-related callbacks from board.tsx */
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // Params
21
+ // ---------------------------------------------------------------------------
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Helpers
25
+ // ---------------------------------------------------------------------------
26
+
27
+ /** Check if a piece color matches the current player turn */
28
+ function isPieceTurn(pieceColor, currentTurn) {
29
+ return pieceColor === currentTurn;
30
+ }
31
+
32
+ /** Map piece color char to player ChessColor */
33
+ function pieceColorToPlayer(color) {
34
+ return color === 'w' ? 'white' : 'black';
35
+ }
36
+
37
+ // ---------------------------------------------------------------------------
38
+ // Hook
39
+ // ---------------------------------------------------------------------------
40
+
11
41
  /**
12
42
  * Single centralized gesture handler for the entire board.
13
43
  *
@@ -26,6 +56,13 @@ var _useBoardPieces = require("./use-board-pieces");
26
56
  * gestureEnabled, player, or moveMethod change). Frequently-changing data
27
57
  * (pieces, selectedSquare, legalMoves) is read from refs via runOnJS bridge
28
58
  * functions, avoiding costly gesture teardown/rebuild on every move.
59
+ *
60
+ * v0.2.0 additions:
61
+ * - Rich callbacks (onPieceClick, onSquareClick, onPieceDragBegin, onPieceDragEnd)
62
+ * - Drag target square tracking (shared value for DragTargetHighlight)
63
+ * - Premove support (queue move when not your turn)
64
+ * - Haptic feedback via callback
65
+ * - Long press detection for onSquareLongPress
29
66
  */
30
67
  function useBoardGesture({
31
68
  squareSize,
@@ -35,8 +72,12 @@ function useBoardGesture({
35
72
  moveMethod,
36
73
  pieces,
37
74
  callbacks,
75
+ richCallbacks,
76
+ premoveCallbacks,
77
+ premovesEnabled = false,
38
78
  selectedSquare,
39
- legalMoves
79
+ legalMoves,
80
+ currentTurn
40
81
  }) {
41
82
  // Shared values for drag tracking — updated on UI thread only
42
83
  const activeSquare = (0, _reactNativeReanimated.useSharedValue)(null);
@@ -44,12 +85,14 @@ function useBoardGesture({
44
85
  const dragY = (0, _reactNativeReanimated.useSharedValue)(0);
45
86
  const isDragging = (0, _reactNativeReanimated.useSharedValue)(false);
46
87
  const dragPieceCode = (0, _reactNativeReanimated.useSharedValue)(null);
88
+ const dragTargetSquare = (0, _reactNativeReanimated.useSharedValue)(null);
47
89
  const gestureState = {
48
90
  activeSquare,
49
91
  dragX,
50
92
  dragY,
51
93
  isDragging,
52
- dragPieceCode
94
+ dragPieceCode,
95
+ dragTargetSquare
53
96
  };
54
97
 
55
98
  // --- Refs for frequently-changing data (read from JS thread via runOnJS) ---
@@ -62,6 +105,15 @@ function useBoardGesture({
62
105
  legalMovesRef.current = legalMoves;
63
106
  const callbacksRef = (0, _react.useRef)(callbacks);
64
107
  callbacksRef.current = callbacks;
108
+ const richCallbacksRef = (0, _react.useRef)(richCallbacks);
109
+ richCallbacksRef.current = richCallbacks;
110
+ const premoveCallbacksRef = (0, _react.useRef)(premoveCallbacks);
111
+ premoveCallbacksRef.current = premoveCallbacks;
112
+ const currentTurnRef = (0, _react.useRef)(currentTurn);
113
+ currentTurnRef.current = currentTurn;
114
+
115
+ // Track the piece being dragged for rich drag-end callback
116
+ const draggedPieceRef = (0, _react.useRef)(null);
65
117
 
66
118
  // --- JS-thread bridge functions called from worklets via runOnJS ---
67
119
  // These read current values from refs, so they always have fresh data.
@@ -72,11 +124,16 @@ function useBoardGesture({
72
124
  const currentSelected = selectedSquareRef.current;
73
125
  const currentLegalMoves = legalMovesRef.current;
74
126
  const cbs = callbacksRef.current;
127
+ const rich = richCallbacksRef.current;
75
128
  const canClick = moveMethod !== 'drag';
76
129
 
77
130
  // Build lookup for the current touch
78
131
  const piece = currentPieces.find(p => p.square === square);
79
- const isPlayerPiece = piece ? player === 'both' || (piece.color === 'w' ? 'white' : 'black') === player : false;
132
+ const isPlayerPiece = piece ? player === 'both' || pieceColorToPlayer(piece.color) === player : false;
133
+
134
+ // Check if it's this piece's turn (for premove detection)
135
+ const turn = currentTurnRef.current;
136
+ const isOwnTurn = piece && turn ? isPieceTurn(piece.color, turn) : true; // default to true if turn not tracked
80
137
 
81
138
  // Click-to-move: second tap on a legal target square
82
139
  const legalSquares = new Set(currentLegalMoves.map(m => m.square));
@@ -85,38 +142,136 @@ function useBoardGesture({
85
142
  activeSquare.value = null;
86
143
  isDragging.value = false;
87
144
  dragPieceCode.value = null;
145
+ dragTargetSquare.value = null;
146
+ rich?.onHaptic?.('move');
88
147
  return;
89
148
  }
90
149
  if (isPlayerPiece && piece) {
91
- // Tapped/started dragging a player piece
150
+ // Premove: player piece but not their turn
151
+ if (premovesEnabled && !isOwnTurn) {
152
+ // If there's already a selected square, this tap completes a premove
153
+ if (currentSelected && currentSelected !== square) {
154
+ premoveCallbacksRef.current?.onPremoveSet?.({
155
+ from: currentSelected,
156
+ to: square
157
+ });
158
+ cbs.onSelectionCleared();
159
+ activeSquare.value = null;
160
+ dragPieceCode.value = null;
161
+ dragTargetSquare.value = null;
162
+ return;
163
+ }
164
+ // First tap: select the piece for premove
165
+ activeSquare.value = square;
166
+ dragX.value = touchX;
167
+ dragY.value = touchY;
168
+ dragPieceCode.value = piece.code;
169
+ cbs.onPieceSelected(square);
170
+ rich?.onPieceClick?.(square, piece.code);
171
+ rich?.onHaptic?.('select');
172
+ return;
173
+ }
174
+
175
+ // Normal case: tapped/started dragging a player piece on their turn
92
176
  activeSquare.value = square;
93
177
  dragX.value = touchX;
94
178
  dragY.value = touchY;
95
179
  dragPieceCode.value = piece.code;
180
+ draggedPieceRef.current = {
181
+ square,
182
+ code: piece.code
183
+ };
96
184
  cbs.onPieceSelected(square);
185
+
186
+ // Rich callbacks
187
+ rich?.onPieceClick?.(square, piece.code);
188
+ rich?.onHaptic?.('select');
97
189
  } else {
98
- // Tapped empty square or opponent piece — clear selection
190
+ // Tapped empty square or opponent piece
191
+
192
+ // If premoves enabled and there's a selection, check if this is a premove target
193
+ if (premovesEnabled && currentSelected && !isOwnTurn) {
194
+ premoveCallbacksRef.current?.onPremoveSet?.({
195
+ from: currentSelected,
196
+ to: square
197
+ });
198
+ cbs.onSelectionCleared();
199
+ activeSquare.value = null;
200
+ dragPieceCode.value = null;
201
+ dragTargetSquare.value = null;
202
+ return;
203
+ }
99
204
  activeSquare.value = null;
100
205
  dragPieceCode.value = null;
206
+ dragTargetSquare.value = null;
101
207
  if (currentSelected) {
102
208
  cbs.onSelectionCleared();
103
209
  }
210
+
211
+ // Rich callback: square click (empty square or opponent piece)
212
+ rich?.onSquareClick?.(square);
213
+ }
214
+ }, [squareSize, orientation, player, moveMethod, premovesEnabled, activeSquare, dragX, dragY, isDragging, dragPieceCode, dragTargetSquare]);
215
+ const handleDragStart = (0, _react.useCallback)((touchX, touchY) => {
216
+ const rich = richCallbacksRef.current;
217
+ const dragged = draggedPieceRef.current;
218
+ if (dragged) {
219
+ rich?.onPieceDragBegin?.(dragged.square, dragged.code);
104
220
  }
105
- }, [squareSize, orientation, player, moveMethod, activeSquare, dragX, dragY, isDragging, dragPieceCode]);
221
+ // Update drag target to current square
222
+ const square = (0, _useBoardPieces.xyToSquare)(touchX, touchY, squareSize, orientation);
223
+ dragTargetSquare.value = square;
224
+ }, [squareSize, orientation, dragTargetSquare]);
225
+ const handleDragUpdate = (0, _react.useCallback)((touchX, touchY) => {
226
+ // Update drag target square (for highlight). This runs on JS thread
227
+ // but is called from worklet via runOnJS only when the square changes.
228
+ const square = (0, _useBoardPieces.xyToSquare)(touchX, touchY, squareSize, orientation);
229
+ dragTargetSquare.value = square;
230
+ }, [squareSize, orientation, dragTargetSquare]);
106
231
  const handleEnd = (0, _react.useCallback)((touchX, touchY) => {
107
232
  const fromSquare = activeSquare.value;
108
233
  if (!fromSquare) return;
109
234
  const toSquare = (0, _useBoardPieces.xyToSquare)(touchX, touchY, squareSize, orientation);
110
235
  isDragging.value = false;
236
+ dragTargetSquare.value = null;
237
+ const rich = richCallbacksRef.current;
238
+
239
+ // Fire drag end callback
240
+ const dragged = draggedPieceRef.current;
241
+ if (dragged) {
242
+ rich?.onPieceDragEnd?.(toSquare, dragged.code);
243
+ draggedPieceRef.current = null;
244
+ }
111
245
  if (fromSquare !== toSquare) {
112
- callbacksRef.current.onPieceMoved(fromSquare, toSquare);
246
+ // Check if this is a premove (not your turn)
247
+ const turn = currentTurnRef.current;
248
+ const piece = piecesRef.current.find(p => p.square === fromSquare);
249
+ const isOwnTurn = piece && turn ? isPieceTurn(piece.color, turn) : true;
250
+ if (premovesEnabled && !isOwnTurn) {
251
+ premoveCallbacksRef.current?.onPremoveSet?.({
252
+ from: fromSquare,
253
+ to: toSquare
254
+ });
255
+ } else {
256
+ callbacksRef.current.onPieceMoved(fromSquare, toSquare);
257
+ }
113
258
  }
114
259
  activeSquare.value = null;
115
260
  dragPieceCode.value = null;
116
- }, [squareSize, orientation, activeSquare, isDragging, dragPieceCode]);
261
+ }, [squareSize, orientation, activeSquare, isDragging, dragPieceCode, dragTargetSquare, premovesEnabled]);
262
+
263
+ // Long press handler (separate gesture, composed with pan)
264
+ const handleLongPress = (0, _react.useCallback)((touchX, touchY) => {
265
+ const square = (0, _useBoardPieces.xyToSquare)(touchX, touchY, squareSize, orientation);
266
+ richCallbacksRef.current?.onSquareLongPress?.(square);
267
+ }, [squareSize, orientation]);
117
268
 
118
269
  // --- Build the gesture (STABLE — only changes on layout/config changes) ---
119
270
  const canDrag = moveMethod !== 'click';
271
+
272
+ // Track the last drag target square to avoid redundant runOnJS calls
273
+ const lastDragTargetCol = (0, _reactNativeReanimated.useSharedValue)(-1);
274
+ const lastDragTargetRow = (0, _reactNativeReanimated.useSharedValue)(-1);
120
275
  const gesture = (0, _react.useMemo)(() => {
121
276
  return _reactNativeGestureHandler.Gesture.Pan().enabled(gestureEnabled).minDistance(0) // Also detect taps (zero-distance pans)
122
277
  .onBegin(e => {
@@ -124,11 +279,12 @@ function useBoardGesture({
124
279
 
125
280
  // Bridge to JS for piece lookup + selection logic
126
281
  (0, _reactNativeReanimated.runOnJS)(handleBegin)(e.x, e.y);
127
- }).onStart(() => {
282
+ }).onStart(e => {
128
283
  'worklet';
129
284
 
130
285
  if (!canDrag || !activeSquare.value) return;
131
286
  isDragging.value = true;
287
+ (0, _reactNativeReanimated.runOnJS)(handleDragStart)(e.x, e.y);
132
288
  }).onUpdate(e => {
133
289
  'worklet';
134
290
 
@@ -136,6 +292,15 @@ function useBoardGesture({
136
292
  // Only 2 shared value writes — no JS bridge, no re-renders
137
293
  dragX.value = e.x;
138
294
  dragY.value = e.y;
295
+
296
+ // Update drag target square (only when square changes to minimize JS bridge calls)
297
+ const col = Math.max(0, Math.min(7, Math.floor(e.x / squareSize)));
298
+ const row = Math.max(0, Math.min(7, Math.floor(e.y / squareSize)));
299
+ if (col !== lastDragTargetCol.value || row !== lastDragTargetRow.value) {
300
+ lastDragTargetCol.value = col;
301
+ lastDragTargetRow.value = row;
302
+ (0, _reactNativeReanimated.runOnJS)(handleDragUpdate)(e.x, e.y);
303
+ }
139
304
  }).onEnd(e => {
140
305
  'worklet';
141
306
 
@@ -146,10 +311,18 @@ function useBoardGesture({
146
311
 
147
312
  // Safety reset if gesture was interrupted
148
313
  isDragging.value = false;
314
+ dragTargetSquare.value = null;
315
+ lastDragTargetCol.value = -1;
316
+ lastDragTargetRow.value = -1;
149
317
  });
150
- }, [gestureEnabled, canDrag, handleBegin, handleEnd,
318
+ }, [gestureEnabled, canDrag, squareSize, handleBegin, handleDragStart, handleDragUpdate, handleEnd,
151
319
  // Shared values are stable refs — listed for exhaustive-deps but don't cause recreations
152
- activeSquare, dragX, dragY, isDragging]);
320
+ activeSquare, dragX, dragY, isDragging, dragTargetSquare, lastDragTargetCol, lastDragTargetRow]);
321
+
322
+ // Compose with long press if the consumer wants it
323
+ // For now, long press is detected via a separate gesture that runs simultaneously.
324
+ // This is done at the board level if needed — keeping the pan gesture clean here.
325
+
153
326
  return {
154
327
  gesture,
155
328
  gestureState
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_useBoardPieces","useBoardGesture","squareSize","orientation","gestureEnabled","player","moveMethod","pieces","callbacks","selectedSquare","legalMoves","activeSquare","useSharedValue","dragX","dragY","isDragging","dragPieceCode","gestureState","piecesRef","useRef","current","selectedSquareRef","legalMovesRef","callbacksRef","handleBegin","useCallback","touchX","touchY","square","xyToSquare","currentPieces","currentSelected","currentLegalMoves","cbs","canClick","piece","find","p","isPlayerPiece","color","legalSquares","Set","map","m","has","onPieceMoved","value","code","onPieceSelected","onSelectionCleared","handleEnd","fromSquare","toSquare","canDrag","gesture","useMemo","Gesture","Pan","enabled","minDistance","onBegin","e","runOnJS","x","y","onStart","onUpdate","onEnd","onFinalize"],"sourceRoot":"..\\..\\src","sources":["use-board-gesture.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_useBoardPieces","isPieceTurn","pieceColor","currentTurn","pieceColorToPlayer","color","useBoardGesture","squareSize","orientation","gestureEnabled","player","moveMethod","pieces","callbacks","richCallbacks","premoveCallbacks","premovesEnabled","selectedSquare","legalMoves","activeSquare","useSharedValue","dragX","dragY","isDragging","dragPieceCode","dragTargetSquare","gestureState","piecesRef","useRef","current","selectedSquareRef","legalMovesRef","callbacksRef","richCallbacksRef","premoveCallbacksRef","currentTurnRef","draggedPieceRef","handleBegin","useCallback","touchX","touchY","square","xyToSquare","currentPieces","currentSelected","currentLegalMoves","cbs","rich","canClick","piece","find","p","isPlayerPiece","turn","isOwnTurn","legalSquares","Set","map","m","has","onPieceMoved","value","onHaptic","onPremoveSet","from","to","onSelectionCleared","code","onPieceSelected","onPieceClick","onSquareClick","handleDragStart","dragged","onPieceDragBegin","handleDragUpdate","handleEnd","fromSquare","toSquare","onPieceDragEnd","handleLongPress","onSquareLongPress","canDrag","lastDragTargetCol","lastDragTargetRow","gesture","useMemo","Gesture","Pan","enabled","minDistance","onBegin","e","runOnJS","x","y","onStart","onUpdate","col","Math","max","min","floor","row","onEnd","onFinalize"],"sourceRoot":"..\\..\\src","sources":["use-board-gesture.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.usePremove = usePremove;
7
+ var _react = require("react");
8
+ /**
9
+ * Manages a single premove queue (one premove at a time).
10
+ *
11
+ * Premoves work like lichess:
12
+ * 1. When it's not your turn, you can drag/click a move — it queues as a premove
13
+ * 2. The premove squares are highlighted with a distinct color
14
+ * 3. When your turn begins (FEN changes and it's now your turn), the premove
15
+ * is automatically attempted via the board's internal chess.js
16
+ * 4. If the premove is legal, it's applied; if not, it's silently discarded
17
+ *
18
+ * The board.tsx orchestrates this: it calls consumePremove() in a useEffect
19
+ * that watches the FEN (turn change), then attempts the move.
20
+ */
21
+ function usePremove() {
22
+ const [premove, setPremoveState] = (0, _react.useState)(null);
23
+ const setPremove = (0, _react.useCallback)(pm => {
24
+ setPremoveState(pm);
25
+ }, []);
26
+ const clearPremove = (0, _react.useCallback)(() => {
27
+ setPremoveState(null);
28
+ }, []);
29
+ const consumePremove = (0, _react.useCallback)(() => {
30
+ let consumed = null;
31
+ setPremoveState(current => {
32
+ consumed = current;
33
+ return null;
34
+ });
35
+ return consumed;
36
+ }, []);
37
+ return {
38
+ premove,
39
+ setPremove,
40
+ clearPremove,
41
+ consumePremove
42
+ };
43
+ }
44
+ //# sourceMappingURL=use-premove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","usePremove","premove","setPremoveState","useState","setPremove","useCallback","pm","clearPremove","consumePremove","consumed","current"],"sourceRoot":"..\\..\\src","sources":["use-premove.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,MAAM,CAACC,OAAO,EAAEC,eAAe,CAAC,GAAG,IAAAC,eAAQ,EAAqB,IAAI,CAAC;EAErE,MAAMC,UAAU,GAAG,IAAAC,kBAAW,EAAEC,EAAe,IAAK;IAClDJ,eAAe,CAACI,EAAE,CAAC;EACrB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,YAAY,GAAG,IAAAF,kBAAW,EAAC,MAAM;IACrCH,eAAe,CAAC,IAAI,CAAC;EACvB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMM,cAAc,GAAG,IAAAH,kBAAW,EAAC,MAA0B;IAC3D,IAAII,QAA4B,GAAG,IAAI;IACvCP,eAAe,CAAEQ,OAAO,IAAK;MAC3BD,QAAQ,GAAGC,OAAO;MAClB,OAAO,IAAI;IACb,CAAC,CAAC;IACF,OAAOD,QAAQ;EACjB,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLR,OAAO;IACPG,UAAU;IACVG,YAAY;IACZC;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { View, Text } from 'react-native';
5
+ import { squareToXY } from './use-board-pieces';
6
+ import { DEFAULT_ANNOTATION_BG, DEFAULT_ANNOTATION_TEXT, ANNOTATION_SCALE } from './constants';
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // Props
10
+ // ---------------------------------------------------------------------------
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ // ---------------------------------------------------------------------------
13
+ // Annotations layer
14
+ // ---------------------------------------------------------------------------
15
+
16
+ /**
17
+ * Text annotation badges on chess squares (!, ?, !!, ??, etc.).
18
+ *
19
+ * Each annotation appears as a small colored badge at the top-right
20
+ * corner of the target square. Positioned absolutely, pointer-events none.
21
+ */
22
+ export const BoardAnnotations = /*#__PURE__*/React.memo(function BoardAnnotations({
23
+ boardSize,
24
+ orientation,
25
+ squareSize,
26
+ annotations
27
+ }) {
28
+ if (annotations.length === 0) return null;
29
+ const badgeSize = squareSize * ANNOTATION_SCALE;
30
+ const fontSize = badgeSize * 0.65;
31
+ return /*#__PURE__*/_jsx(View, {
32
+ style: {
33
+ position: 'absolute',
34
+ width: boardSize,
35
+ height: boardSize
36
+ },
37
+ pointerEvents: "none",
38
+ children: annotations.map((ann, i) => {
39
+ const {
40
+ x,
41
+ y
42
+ } = squareToXY(ann.square, squareSize, orientation);
43
+ const bgColor = ann.backgroundColor ?? DEFAULT_ANNOTATION_BG;
44
+ const textColor = ann.color ?? DEFAULT_ANNOTATION_TEXT;
45
+ return /*#__PURE__*/_jsx(View, {
46
+ style: {
47
+ position: 'absolute',
48
+ // Position at top-right corner of the square
49
+ left: x + squareSize - badgeSize - 1,
50
+ top: y + 1,
51
+ minWidth: badgeSize,
52
+ height: badgeSize,
53
+ borderRadius: badgeSize / 2,
54
+ backgroundColor: bgColor,
55
+ alignItems: 'center',
56
+ justifyContent: 'center',
57
+ paddingHorizontal: 2
58
+ },
59
+ children: /*#__PURE__*/_jsx(Text, {
60
+ style: {
61
+ color: textColor,
62
+ fontSize,
63
+ fontWeight: '700',
64
+ lineHeight: badgeSize * 0.85,
65
+ textAlign: 'center'
66
+ },
67
+ numberOfLines: 1,
68
+ children: ann.text
69
+ })
70
+ }, `ann-${ann.square}-${i}`);
71
+ })
72
+ });
73
+ });
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // Standalone export for advanced consumers
77
+ // ---------------------------------------------------------------------------
78
+
79
+ /**
80
+ * Single annotation badge component.
81
+ * Exported for consumers who build their own overlay layers.
82
+ */
83
+ export const Annotation = /*#__PURE__*/React.memo(function Annotation({
84
+ square,
85
+ text,
86
+ squareSize,
87
+ orientation,
88
+ color,
89
+ backgroundColor
90
+ }) {
91
+ const {
92
+ x,
93
+ y
94
+ } = squareToXY(square, squareSize, orientation);
95
+ const badgeSize = squareSize * ANNOTATION_SCALE;
96
+ const fontSize = badgeSize * 0.65;
97
+ const bgColor = backgroundColor ?? DEFAULT_ANNOTATION_BG;
98
+ const textColor = color ?? DEFAULT_ANNOTATION_TEXT;
99
+ return /*#__PURE__*/_jsx(View, {
100
+ style: {
101
+ position: 'absolute',
102
+ left: x + squareSize - badgeSize - 1,
103
+ top: y + 1,
104
+ minWidth: badgeSize,
105
+ height: badgeSize,
106
+ borderRadius: badgeSize / 2,
107
+ backgroundColor: bgColor,
108
+ alignItems: 'center',
109
+ justifyContent: 'center',
110
+ paddingHorizontal: 2
111
+ },
112
+ pointerEvents: "none",
113
+ children: /*#__PURE__*/_jsx(Text, {
114
+ style: {
115
+ color: textColor,
116
+ fontSize,
117
+ fontWeight: '700',
118
+ lineHeight: badgeSize * 0.85,
119
+ textAlign: 'center'
120
+ },
121
+ numberOfLines: 1,
122
+ children: text
123
+ })
124
+ });
125
+ });
126
+ //# sourceMappingURL=board-annotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","View","Text","squareToXY","DEFAULT_ANNOTATION_BG","DEFAULT_ANNOTATION_TEXT","ANNOTATION_SCALE","jsx","_jsx","BoardAnnotations","memo","boardSize","orientation","squareSize","annotations","length","badgeSize","fontSize","style","position","width","height","pointerEvents","children","map","ann","i","x","y","square","bgColor","backgroundColor","textColor","color","left","top","minWidth","borderRadius","alignItems","justifyContent","paddingHorizontal","fontWeight","lineHeight","textAlign","numberOfLines","text","Annotation"],"sourceRoot":"..\\..\\src","sources":["board-annotations.tsx"],"mappings":"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","ignoreList":[]}