@ankhorage/zora 25.11.1 → 26.0.1
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/CHANGELOG.md +12 -0
- package/README.md +1 -4
- package/dist/capabilities/index.js +65 -41
- package/dist/capabilities/index.js.map +3 -3
- package/dist/features/chess/adapters/inbound/ChessBoard.d.ts +1 -1
- package/dist/features/chess/adapters/inbound/ChessBoard.d.ts.map +1 -1
- package/dist/features/chess/adapters/inbound/ChessBoard.js +130 -83
- package/dist/features/chess/adapters/inbound/ChessBoard.js.map +1 -1
- package/dist/features/chess/meta.d.ts +97 -72
- package/dist/features/chess/meta.d.ts.map +1 -1
- package/dist/features/chess/meta.js +64 -40
- package/dist/features/chess/meta.js.map +1 -1
- package/dist/features/chess/public.d.ts +1 -7
- package/dist/features/chess/public.d.ts.map +1 -1
- package/dist/features/chess/public.js +0 -6
- package/dist/features/chess/public.js.map +1 -1
- package/dist/features/chess/utils/createChessBoardCellPressHandler.d.ts +6 -0
- package/dist/features/chess/utils/createChessBoardCellPressHandler.d.ts.map +1 -0
- package/dist/features/chess/utils/createChessBoardCellPressHandler.js +17 -0
- package/dist/features/chess/utils/createChessBoardCellPressHandler.js.map +1 -0
- package/dist/features/chess/utils/createChessBoardCells.d.ts +12 -0
- package/dist/features/chess/utils/createChessBoardCells.d.ts.map +1 -0
- package/dist/features/chess/utils/createChessBoardCells.js +28 -0
- package/dist/features/chess/utils/createChessBoardCells.js.map +1 -0
- package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphController.js +2 -3
- package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphController.js.map +1 -1
- package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.js +3 -1
- package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.js.map +1 -1
- package/dist/features/graph-view/adapters/inbound/web-artifact/getGraphGeometryKey.d.ts +5 -5
- package/dist/features/graph-view/adapters/inbound/web-artifact/getGraphGeometryKey.d.ts.map +1 -1
- package/dist/features/graph-view/adapters/inbound/web-artifact/getGraphGeometryKey.js +13 -7
- package/dist/features/graph-view/adapters/inbound/web-artifact/getGraphGeometryKey.js.map +1 -1
- package/dist/readerFree.d.ts +2 -2
- package/dist/readerFree.d.ts.map +1 -1
- package/dist/readerFree.js +1 -1
- package/dist/readerFree.js.map +1 -1
- package/dist/types/authoring.d.ts +2 -1
- package/dist/types/authoring.d.ts.map +1 -1
- package/dist/types/authoring.js.map +1 -1
- package/dist/types/chess.d.ts +27 -20
- package/dist/types/chess.d.ts.map +1 -1
- package/dist/types/chess.js.map +1 -1
- package/package.json +34 -94
- package/src/features/chess/adapters/inbound/ChessBoard.tsx +263 -112
- package/src/features/chess/meta.ts +64 -40
- package/src/features/chess/public.test.tsx +77 -228
- package/src/features/chess/public.ts +2 -9
- package/src/features/chess/utils/createChessBoardCellPressHandler.ts +30 -0
- package/src/features/chess/utils/createChessBoardCells.ts +54 -0
- package/src/features/chessTabletopOwnership.test.ts +3 -7
- package/src/features/graph-view/adapters/inbound/web-artifact/createGraphController.test.ts +1 -2
- package/src/features/graph-view/adapters/inbound/web-artifact/createGraphController.ts +2 -3
- package/src/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.test.ts +45 -0
- package/src/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.ts +3 -1
- package/src/features/graph-view/adapters/inbound/web-artifact/getGraphGeometryKey.test.ts +65 -3
- package/src/features/graph-view/adapters/inbound/web-artifact/getGraphGeometryKey.ts +13 -7
- package/src/features/registry/componentMeta.test.ts +12 -1
- package/src/readerFree.ts +3 -15
- package/src/types/authoring.ts +2 -1
- package/src/types/chess.ts +28 -21
- package/web-dist/chunks/Accordion-91sjb3zh.js +453 -0
- package/web-dist/components/chess-board/ChessBoard.js +2 -1
- package/web-dist/components/graph-view/GraphView.js +878 -317
- package/web-dist/components/opening-book/OpeningBook.js +2 -1
- package/web-dist/manifest.json +8 -4
- package/dist/features/chess/utils/chessEngine.d.ts +0 -8
- package/dist/features/chess/utils/chessEngine.d.ts.map +0 -1
- package/dist/features/chess/utils/chessEngine.js +0 -71
- package/dist/features/chess/utils/chessEngine.js.map +0 -1
- package/dist/features/chess/utils/chessSquares.d.ts +0 -4
- package/dist/features/chess/utils/chessSquares.d.ts.map +0 -1
- package/dist/features/chess/utils/chessSquares.js +0 -3
- package/dist/features/chess/utils/chessSquares.js.map +0 -1
- package/dist/features/chess/utils/createBoardSquares.d.ts +0 -4
- package/dist/features/chess/utils/createBoardSquares.d.ts.map +0 -1
- package/dist/features/chess/utils/createBoardSquares.js +0 -9
- package/dist/features/chess/utils/createBoardSquares.js.map +0 -1
- package/dist/features/chess/utils/getSquareFile.d.ts +0 -4
- package/dist/features/chess/utils/getSquareFile.d.ts.map +0 -1
- package/dist/features/chess/utils/getSquareFile.js +0 -5
- package/dist/features/chess/utils/getSquareFile.js.map +0 -1
- package/dist/features/chess/utils/getSquareRank.d.ts +0 -4
- package/dist/features/chess/utils/getSquareRank.d.ts.map +0 -1
- package/dist/features/chess/utils/getSquareRank.js +0 -5
- package/dist/features/chess/utils/getSquareRank.js.map +0 -1
- package/dist/features/chess/utils/isLightSquare.d.ts +0 -4
- package/dist/features/chess/utils/isLightSquare.d.ts.map +0 -1
- package/dist/features/chess/utils/isLightSquare.js +0 -6
- package/dist/features/chess/utils/isLightSquare.js.map +0 -1
- package/src/features/chess/utils/chessEngine.test.ts +0 -35
- package/src/features/chess/utils/chessEngine.ts +0 -83
- package/src/features/chess/utils/chessSquares.ts +0 -6
- package/src/features/chess/utils/createBoardSquares.ts +0 -13
- package/src/features/chess/utils/getSquareFile.ts +0 -6
- package/src/features/chess/utils/getSquareRank.ts +0 -6
- package/src/features/chess/utils/isLightSquare.ts +0 -8
- package/web-dist/chunks/Accordion-xcm1qc39.js +0 -3813
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { ChessBoardProps } from '../../../../types/chess';
|
|
3
|
-
/*** Renders caller-owned
|
|
3
|
+
/*** Renders a configurable caller-owned chess presentation through the shared GridView surface. */
|
|
4
4
|
export declare const ChessBoard: (props: ChessBoardProps) => React.ReactElement | null;
|
|
5
5
|
//# sourceMappingURL=ChessBoard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChessBoard.d.ts","sourceRoot":"","sources":["../../../../../src/features/chess/adapters/inbound/ChessBoard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ChessBoard.d.ts","sourceRoot":"","sources":["../../../../../src/features/chess/adapters/inbound/ChessBoard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,yBAAyB,CAAC;AAyBjC,mGAAmG;AACnG,eAAO,MAAM,UAAU,uDAAsC,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Pressable, StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import { GridView } from '../../../grid-view/public';
|
|
3
4
|
import { withZoraThemeScope } from '../../../theme/adapters/inbound/withZoraThemeScope';
|
|
4
5
|
import { useZoraTheme } from '../../../theme/composition/useZoraTheme';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { createChessBoardCellPressHandler } from '../../utils/createChessBoardCellPressHandler';
|
|
7
|
+
import { createChessBoardCells } from '../../utils/createChessBoardCells';
|
|
7
8
|
import { createChessBoardColorScheme } from '../../utils/createChessBoardColorScheme';
|
|
8
|
-
import { isLightSquare } from '../../utils/isLightSquare';
|
|
9
9
|
const symbols = new Map([
|
|
10
10
|
['white:p', '♙'],
|
|
11
11
|
['white:n', '♘'],
|
|
@@ -20,88 +20,140 @@ const symbols = new Map([
|
|
|
20
20
|
['black:q', '♛'],
|
|
21
21
|
['black:k', '♚'],
|
|
22
22
|
]);
|
|
23
|
-
|
|
23
|
+
const minimumDimension = 2;
|
|
24
|
+
const maximumDimension = 24;
|
|
25
|
+
/*** Renders a configurable caller-owned chess presentation through the shared GridView surface. */
|
|
24
26
|
export const ChessBoard = withZoraThemeScope(ChessBoardInner);
|
|
25
|
-
/*** Renders
|
|
26
|
-
function ChessBoardInner({
|
|
27
|
+
/*** Renders board state and emits caller-owned cell and move intents without applying chess rules. */
|
|
28
|
+
function ChessBoardInner({ columns = 8, rows = 8, pieces, orientation = 'white', selectedCell = null, legalTargets = [], lastMove = null, disabled = false, showCoordinates = false, resizable = false, colorScheme, onCellPress, onMoveAttempt, onDimensionsChange, renderPiece, interactionPolicy, testID, }) {
|
|
27
29
|
const { theme } = useZoraTheme();
|
|
28
30
|
const colors = createChessBoardColorScheme(theme, colorScheme);
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
31
|
+
const dimensions = React.useMemo(() => ({ columns, rows }), [columns, rows]);
|
|
32
|
+
const [width, setWidth] = React.useState(0);
|
|
33
|
+
const cells = React.useMemo(() => createChessBoardCells(columns, rows, orientation), [columns, orientation, rows]);
|
|
34
|
+
const piecesByCell = React.useMemo(() => new Map((pieces ?? []).map((piece) => [getCellKey(piece.cell), piece])), [pieces]);
|
|
35
|
+
const cellById = React.useMemo(() => new Map(cells.map((cell) => [cell.id, cell])), [cells]);
|
|
36
|
+
const legalTargetSet = React.useMemo(() => new Set(legalTargets.map(getCellKey)), [legalTargets]);
|
|
37
|
+
const pressCell = createChessBoardCellPressHandler({
|
|
38
|
+
disabled,
|
|
39
|
+
interactionPolicy,
|
|
40
|
+
onCellPress,
|
|
41
|
+
onMoveAttempt,
|
|
42
|
+
selectedCell,
|
|
43
|
+
});
|
|
44
|
+
const canResize = resizable && onDimensionsChange !== undefined && !disabled && interactionPolicy !== 'passive';
|
|
45
|
+
const height = width * (dimensions.rows / dimensions.columns);
|
|
46
|
+
const cellSize = width / dimensions.columns;
|
|
47
|
+
return (<View accessibilityLabel="Chess board" onLayout={(event) => setWidth(event.nativeEvent.layout.width)} style={[
|
|
48
|
+
styles.board,
|
|
49
|
+
{
|
|
50
|
+
aspectRatio: dimensions.columns / dimensions.rows,
|
|
51
|
+
borderColor: colors.border,
|
|
52
|
+
opacity: disabled ? 0.56 : 1,
|
|
53
|
+
},
|
|
54
|
+
]} testID={testID}>
|
|
55
|
+
{width > 0 ? (<GridView contentHeight={dimensions.rows} contentWidth={dimensions.columns} defaultViewport={{ pixelsPerUnitX: cellSize, pixelsPerUnitY: cellSize }} height={height} interactionPolicy="passive" items={cells} overscanPixels={0} renderItem={(item) => {
|
|
56
|
+
const cell = cellById.get(item.id);
|
|
57
|
+
return cell === undefined
|
|
58
|
+
? null
|
|
59
|
+
: renderChessBoardCell({
|
|
60
|
+
cell,
|
|
61
|
+
cellSize,
|
|
62
|
+
colors,
|
|
63
|
+
disabled: disabled || interactionPolicy === 'passive',
|
|
64
|
+
lastMove,
|
|
65
|
+
legalTargetSet,
|
|
66
|
+
onPress: pressCell,
|
|
67
|
+
piece: piecesByCell.get(item.id),
|
|
68
|
+
renderPiece,
|
|
69
|
+
selectedCell,
|
|
70
|
+
showCoordinates,
|
|
71
|
+
testID,
|
|
72
|
+
});
|
|
73
|
+
}} width={width}/>) : null}
|
|
74
|
+
{canResize ? renderChessBoardResizeActions(dimensions, onDimensionsChange, testID) : null}
|
|
75
|
+
</View>);
|
|
76
|
+
}
|
|
77
|
+
/*** Render one accessible, caller-controlled rectangular board cell. */
|
|
78
|
+
function renderChessBoardCell({ cell, cellSize, colors, disabled, lastMove, legalTargetSet, onPress, piece, renderPiece, selectedCell, showCoordinates, testID, }) {
|
|
79
|
+
const light = (cell.column + cell.row) % 2 === 1;
|
|
80
|
+
const key = getCellKey(cell);
|
|
81
|
+
const backgroundColor = cellsEqual(selectedCell, cell)
|
|
82
|
+
? colors.selectedSquare
|
|
83
|
+
: legalTargetSet.has(key)
|
|
84
|
+
? colors.legalTarget
|
|
85
|
+
: cellsEqual(lastMove?.from, cell)
|
|
86
|
+
? colors.lastMoveFrom
|
|
87
|
+
: cellsEqual(lastMove?.to, cell)
|
|
88
|
+
? colors.lastMoveTo
|
|
89
|
+
: light
|
|
90
|
+
? colors.lightSquare
|
|
91
|
+
: colors.darkSquare;
|
|
92
|
+
const pieceContent = piece === undefined
|
|
93
|
+
? null
|
|
94
|
+
: renderPiece
|
|
95
|
+
? renderPiece({
|
|
96
|
+
cell,
|
|
97
|
+
color: piece.color === 'white' ? colors.lightPiece : colors.darkPiece,
|
|
98
|
+
piece: piece.piece,
|
|
99
|
+
size: cellSize,
|
|
100
|
+
})
|
|
101
|
+
: (symbols.get(`${piece.color}:${piece.piece.toLowerCase()}`) ?? piece.piece);
|
|
102
|
+
const coordinate = formatCellCoordinate(cell);
|
|
103
|
+
return (<Pressable accessibilityLabel={coordinate} accessibilityRole="button" accessibilityState={{ disabled }} disabled={disabled} key={key} onPress={() => onPress(cell)} style={[styles.square, { backgroundColor }]} testID={testID === undefined ? undefined : `${testID}-cell-${coordinate}`}>
|
|
104
|
+
{showCoordinates ? (<Text style={[
|
|
105
|
+
styles.coordinate,
|
|
106
|
+
{ color: light ? colors.lightSquareText : colors.darkSquareText },
|
|
107
|
+
]}>
|
|
108
|
+
{coordinate}
|
|
109
|
+
</Text>) : null}
|
|
110
|
+
{piece === undefined ? null : (<View pointerEvents="none" style={styles.pieceContainer}>
|
|
111
|
+
{renderPiece ? (pieceContent) : (<Text style={[
|
|
112
|
+
styles.piece,
|
|
113
|
+
{
|
|
74
114
|
color: piece.color === 'white' ? colors.lightPiece : colors.darkPiece,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
{pieceContent}
|
|
92
|
-
</Text>)}
|
|
93
|
-
</View>)}
|
|
94
|
-
</Pressable>);
|
|
95
|
-
})}
|
|
115
|
+
fontSize: cellSize * 0.58,
|
|
116
|
+
lineHeight: cellSize * 0.7,
|
|
117
|
+
},
|
|
118
|
+
]}>
|
|
119
|
+
{pieceContent}
|
|
120
|
+
</Text>)}
|
|
121
|
+
</View>)}
|
|
122
|
+
</Pressable>);
|
|
123
|
+
}
|
|
124
|
+
/*** Render bounded editor actions only when the caller explicitly enables dimension editing. */
|
|
125
|
+
function renderChessBoardResizeActions(dimensions, onDimensionsChange, testID) {
|
|
126
|
+
return (<View accessibilityLabel="Chess board dimensions" style={styles.resizeActions}>
|
|
127
|
+
{renderResizeAction('Add row', { ...dimensions, rows: dimensions.rows + 1 }, onDimensionsChange, dimensions.rows < maximumDimension, testID)}
|
|
128
|
+
{renderResizeAction('Remove row', { ...dimensions, rows: dimensions.rows - 1 }, onDimensionsChange, dimensions.rows > minimumDimension, testID)}
|
|
129
|
+
{renderResizeAction('Add column', { ...dimensions, columns: dimensions.columns + 1 }, onDimensionsChange, dimensions.columns < maximumDimension, testID)}
|
|
130
|
+
{renderResizeAction('Remove column', { ...dimensions, columns: dimensions.columns - 1 }, onDimensionsChange, dimensions.columns > minimumDimension, testID)}
|
|
96
131
|
</View>);
|
|
97
132
|
}
|
|
133
|
+
/*** Render one caller-controlled dimension-change action. */
|
|
134
|
+
function renderResizeAction(label, dimensions, onDimensionsChange, enabled, testID) {
|
|
135
|
+
return (<Pressable accessibilityLabel={label} accessibilityRole="button" disabled={!enabled} onPress={() => onDimensionsChange(dimensions)} testID={testID === undefined ? undefined : `${testID}-${label.toLowerCase().replace(' ', '-')}`}>
|
|
136
|
+
<Text>{label}</Text>
|
|
137
|
+
</Pressable>);
|
|
138
|
+
}
|
|
139
|
+
/*** Compares optional cell coordinates without attaching chess-rule meaning to them. */
|
|
140
|
+
function cellsEqual(left, right) {
|
|
141
|
+
if (!left || !right)
|
|
142
|
+
return false;
|
|
143
|
+
return left.column === right.column && left.row === right.row;
|
|
144
|
+
}
|
|
145
|
+
/*** Format a stable display label for a bounded board cell. */
|
|
146
|
+
function formatCellCoordinate(cell) {
|
|
147
|
+
return `${String.fromCharCode(96 + cell.column)}${cell.row}`;
|
|
148
|
+
}
|
|
149
|
+
/*** Create a stable generic identity from caller-owned row and column values. */
|
|
150
|
+
function getCellKey(cell) {
|
|
151
|
+
return `${cell.column}:${cell.row}`;
|
|
152
|
+
}
|
|
98
153
|
const styles = StyleSheet.create({
|
|
99
154
|
board: {
|
|
100
|
-
aspectRatio: 1,
|
|
101
155
|
borderRadius: 12,
|
|
102
156
|
borderWidth: StyleSheet.hairlineWidth,
|
|
103
|
-
flexDirection: 'row',
|
|
104
|
-
flexWrap: 'wrap',
|
|
105
157
|
overflow: 'hidden',
|
|
106
158
|
width: '100%',
|
|
107
159
|
},
|
|
@@ -114,7 +166,7 @@ const styles = StyleSheet.create({
|
|
|
114
166
|
top: 2,
|
|
115
167
|
zIndex: 2,
|
|
116
168
|
},
|
|
117
|
-
piece: {
|
|
169
|
+
piece: { fontWeight: '600' },
|
|
118
170
|
pieceContainer: {
|
|
119
171
|
alignItems: 'center',
|
|
120
172
|
bottom: 0,
|
|
@@ -124,12 +176,7 @@ const styles = StyleSheet.create({
|
|
|
124
176
|
right: 0,
|
|
125
177
|
top: 0,
|
|
126
178
|
},
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
aspectRatio: 1,
|
|
130
|
-
width: '12.5%',
|
|
131
|
-
justifyContent: 'center',
|
|
132
|
-
position: 'relative',
|
|
133
|
-
},
|
|
179
|
+
resizeActions: { flexDirection: 'row', gap: 8, padding: 8 },
|
|
180
|
+
square: { alignItems: 'center', justifyContent: 'center', position: 'relative' },
|
|
134
181
|
});
|
|
135
182
|
//# sourceMappingURL=ChessBoard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChessBoard.js","sourceRoot":"","sources":["../../../../../src/features/chess/adapters/inbound/ChessBoard.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport type {\n ChessBoardProps,\n ChessMoveAttempt,\n ChessPieceState,\n ChessSquareId,\n} from '../../../../types/chess';\nimport { withZoraThemeScope } from '../../../theme/adapters/inbound/withZoraThemeScope';\nimport { useZoraTheme } from '../../../theme/composition/useZoraTheme';\nimport { getLegalTargets, readChessPieces, tryMove } from '../../utils/chessEngine';\nimport { createBoardSquares } from '../../utils/createBoardSquares';\nimport { createChessBoardColorScheme } from '../../utils/createChessBoardColorScheme';\nimport { isLightSquare } from '../../utils/isLightSquare';\n\nconst symbols = new Map<string, string>([\n ['white:p', '♙'],\n ['white:n', '♘'],\n ['white:b', '♗'],\n ['white:r', '♖'],\n ['white:q', '♕'],\n ['white:k', '♔'],\n ['black:p', '♟'],\n ['black:n', '♞'],\n ['black:b', '♝'],\n ['black:r', '♜'],\n ['black:q', '♛'],\n ['black:k', '♚'],\n]);\n\n/*** Renders caller-owned or FEN-backed chess state with optional legal-move validation. */\nexport const ChessBoard = withZoraThemeScope(ChessBoardInner);\n\n/*** Renders the current presentation state and delegates FEN validation to the core chess engine. */\nfunction ChessBoardInner({\n fen,\n pieces,\n orientation = 'white',\n selectedSquare = null,\n legalTargets,\n lastMove = null,\n disabled = false,\n showCoordinates = false,\n validateMoves = true,\n colorScheme,\n onSquarePress,\n onMoveAttempt,\n onLegalMove,\n onInvalidMove,\n renderPiece,\n interactionPolicy,\n testID,\n}: ChessBoardProps) {\n const { theme } = useZoraTheme();\n const colors = createChessBoardColorScheme(theme, colorScheme);\n const squares = createBoardSquares(orientation);\n const piecesBySquare =\n pieces === undefined\n ? fen === undefined\n ? new Map<ChessSquareId, ChessPieceState>()\n : new Map(readChessPieces(fen))\n : new Map<ChessSquareId, ChessPieceState>(pieces.map((piece) => [piece.square, piece]));\n const resolvedLegalTargets =\n legalTargets ??\n (fen !== undefined && selectedSquare !== null ? getLegalTargets(fen, selectedSquare) : []);\n const legalTargetSet = new Set(resolvedLegalTargets);\n const pressSquare = (square: ChessSquareId) => {\n if (disabled || interactionPolicy === 'passive') return;\n onSquarePress?.(square);\n if (selectedSquare === null || selectedSquare === square) return;\n\n const attempt: ChessMoveAttempt = { from: selectedSquare, to: square };\n onMoveAttempt?.(attempt);\n if (!validateMoves || fen === undefined) return;\n\n const result = tryMove(fen, attempt);\n if (result) onLegalMove?.(result);\n else onInvalidMove?.(attempt);\n };\n return (\n <View\n accessibilityLabel=\"Chess board\"\n style={[styles.board, { borderColor: colors.border, opacity: disabled ? 0.56 : 1 }]}\n testID={testID}\n >\n {squares.map((square) => {\n const piece = piecesBySquare.get(square);\n const light = isLightSquare(square);\n const isTarget = legalTargetSet.has(square);\n const backgroundColor =\n selectedSquare === square\n ? colors.selectedSquare\n : isTarget\n ? colors.legalTarget\n : lastMove?.from === square\n ? colors.lastMoveFrom\n : lastMove?.to === square\n ? colors.lastMoveTo\n : light\n ? colors.lightSquare\n : colors.darkSquare;\n const pieceContent =\n piece === undefined\n ? null\n : renderPiece\n ? renderPiece({\n color: piece.color === 'white' ? colors.lightPiece : colors.darkPiece,\n piece: piece.piece,\n square,\n })\n : (symbols.get(`${piece.color}:${piece.piece.toLowerCase()}`) ?? piece.piece);\n return (\n <Pressable\n accessibilityLabel={square}\n accessibilityRole=\"button\"\n disabled={disabled || interactionPolicy === 'passive'}\n key={square}\n onPress={() => pressSquare(square)}\n style={[styles.square, { backgroundColor }]}\n testID={testID ? `${testID}-square-${square}` : undefined}\n >\n {showCoordinates ? (\n <Text\n style={[\n styles.coordinate,\n { color: light ? colors.lightSquareText : colors.darkSquareText },\n ]}\n >\n {square}\n </Text>\n ) : null}\n {piece === undefined ? null : (\n <View pointerEvents=\"none\" style={styles.pieceContainer}>\n {renderPiece ? (\n pieceContent\n ) : (\n <Text\n style={[\n styles.piece,\n { color: piece.color === 'white' ? colors.lightPiece : colors.darkPiece },\n ]}\n >\n {pieceContent}\n </Text>\n )}\n </View>\n )}\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n board: {\n aspectRatio: 1,\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n flexDirection: 'row',\n flexWrap: 'wrap',\n overflow: 'hidden',\n width: '100%',\n },\n coordinate: {\n fontSize: 9,\n fontWeight: '600',\n left: 3,\n opacity: 0.72,\n position: 'absolute',\n top: 2,\n zIndex: 2,\n },\n piece: { fontSize: 32, fontWeight: '600', lineHeight: 38 },\n pieceContainer: {\n alignItems: 'center',\n bottom: 0,\n justifyContent: 'center',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n },\n square: {\n alignItems: 'center',\n aspectRatio: 1,\n width: '12.5%',\n justifyContent: 'center',\n position: 'relative',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ChessBoard.js","sourceRoot":"","sources":["../../../../../src/features/chess/adapters/inbound/ChessBoard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AASjE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,8CAA8C,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAEtF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB;IACtC,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,SAAS,EAAE,GAAG,CAAC;CACjB,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,mGAAmG;AACnG,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAE9D,sGAAsG;AACtG,SAAS,eAAe,CAAC,EACvB,OAAO,GAAG,CAAC,EACX,IAAI,GAAG,CAAC,EACR,MAAM,EACN,WAAW,GAAG,OAAO,EACrB,YAAY,GAAG,IAAI,EACnB,YAAY,GAAG,EAAE,EACjB,QAAQ,GAAG,IAAI,EACf,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,KAAK,EACvB,SAAS,GAAG,KAAK,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,MAAM,GACU;IAChB,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,EACvD,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAC7B,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAChC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAC7E,CAAC,MAAM,CAAC,CACT,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7F,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAClG,MAAM,SAAS,GAAG,gCAAgC,CAAC;QACjD,QAAQ;QACR,iBAAiB;QACjB,WAAW;QACX,aAAa;QACb,YAAY;KACb,CAAC,CAAC;IACH,MAAM,SAAS,GACb,SAAS,IAAI,kBAAkB,KAAK,SAAS,IAAI,CAAC,QAAQ,IAAI,iBAAiB,KAAK,SAAS,CAAC;IAChG,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;IAE5C,OAAO,CACL,CAAC,IAAI,CACH,kBAAkB,CAAC,aAAa,CAChC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC9D,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,KAAK;YACZ;gBACE,WAAW,EAAE,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI;gBACjD,WAAW,EAAE,MAAM,CAAC,MAAM;gBAC1B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC7B;SACF,CAAC,CACF,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CACX,CAAC,QAAQ,CACP,aAAa,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAC/B,YAAY,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CACjC,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CACxE,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,iBAAiB,CAAC,SAAS,CAC3B,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,cAAc,CAAC,CAAC,CAAC,CAAC,CAClB,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;gBACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnC,OAAO,IAAI,KAAK,SAAS;oBACvB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,oBAAoB,CAAC;wBACnB,IAAI;wBACJ,QAAQ;wBACR,MAAM;wBACN,QAAQ,EAAE,QAAQ,IAAI,iBAAiB,KAAK,SAAS;wBACrD,QAAQ;wBACR,cAAc;wBACd,OAAO,EAAE,SAAS;wBAClB,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChC,WAAW;wBACX,YAAY;wBACZ,eAAe;wBACf,MAAM;qBACP,CAAC,CAAC;YACT,CAAC,CAAC,CACF,KAAK,CAAC,CAAC,KAAK,CAAC,EACb,CACH,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,SAAS,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAC3F;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,SAAS,oBAAoB,CAAC,EAC5B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,OAAO,EACP,KAAK,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,MAAM,GAcP;IACC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC;QACpD,CAAC,CAAC,MAAM,CAAC,cAAc;QACvB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,WAAW;YACpB,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;gBAChC,CAAC,CAAC,MAAM,CAAC,YAAY;gBACrB,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC;oBAC9B,CAAC,CAAC,MAAM,CAAC,UAAU;oBACnB,CAAC,CAAC,KAAK;wBACL,CAAC,CAAC,MAAM,CAAC,WAAW;wBACpB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IAC9B,MAAM,YAAY,GAChB,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,WAAW;YACX,CAAC,CAAC,WAAW,CAAC;gBACV,IAAI;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;gBACrE,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,QAAQ;aACf,CAAC;YACJ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE9C,OAAO,CACL,CAAC,SAAS,CACR,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAC/B,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CACjC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,GAAG,CAAC,CAAC,GAAG,CAAC,CACT,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAC7B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,CAC5C,MAAM,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,UAAU,EAAE,CAAC,CAE1E;MAAA,CAAC,eAAe,CAAC,CAAC,CAAC,CACjB,CAAC,IAAI,CACH,KAAK,CAAC,CAAC;gBACL,MAAM,CAAC,UAAU;gBACjB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE;aAClE,CAAC,CAEF;UAAA,CAAC,UAAU,CACb;QAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5B,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CACtD;UAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,YAAY,CACb,CAAC,CAAC,CAAC,CACF,CAAC,IAAI,CACH,KAAK,CAAC,CAAC;oBACL,MAAM,CAAC,KAAK;oBACZ;wBACE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;wBACrE,QAAQ,EAAE,QAAQ,GAAG,IAAI;wBACzB,UAAU,EAAE,QAAQ,GAAG,GAAG;qBAC3B;iBACF,CAAC,CAEF;cAAA,CAAC,YAAY,CACf;YAAA,EAAE,IAAI,CAAC,CACR,CACH;QAAA,EAAE,IAAI,CAAC,CACR,CACH;IAAA,EAAE,SAAS,CAAC,CACb,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAS,6BAA6B,CACpC,UAAgC,EAChC,kBAA8D,EAC9D,MAA0B;IAE1B,OAAO,CACL,CAAC,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAC5E;MAAA,CAAC,kBAAkB,CACjB,SAAS,EACT,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,EAC5C,kBAAkB,EAClB,UAAU,CAAC,IAAI,GAAG,gBAAgB,EAClC,MAAM,CACP,CACD;MAAA,CAAC,kBAAkB,CACjB,YAAY,EACZ,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,EAC5C,kBAAkB,EAClB,UAAU,CAAC,IAAI,GAAG,gBAAgB,EAClC,MAAM,CACP,CACD;MAAA,CAAC,kBAAkB,CACjB,YAAY,EACZ,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,EAClD,kBAAkB,EAClB,UAAU,CAAC,OAAO,GAAG,gBAAgB,EACrC,MAAM,CACP,CACD;MAAA,CAAC,kBAAkB,CACjB,eAAe,EACf,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,EAClD,kBAAkB,EAClB,UAAU,CAAC,OAAO,GAAG,gBAAgB,EACrC,MAAM,CACP,CACH;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAS,kBAAkB,CACzB,KAAa,EACb,UAAgC,EAChC,kBAA8D,EAC9D,OAAgB,EAChB,MAA0B;IAE1B,OAAO,CACL,CAAC,SAAS,CACR,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAC1B,iBAAiB,CAAC,QAAQ,CAC1B,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CACnB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAC9C,MAAM,CAAC,CACL,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EACvF,CAAC,CAED;MAAA,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CACrB;IAAA,EAAE,SAAS,CAAC,CACb,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,SAAS,UAAU,CACjB,IAAuC,EACvC,KAAwC;IAExC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;AAChE,CAAC;AAED,+DAA+D;AAC/D,SAAS,oBAAoB,CAAC,IAAoB;IAChD,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/D,CAAC;AAED,iFAAiF;AACjF,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE;QACL,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU,CAAC,aAAa;QACrC,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,MAAM;KACd;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;KACV;IACD,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;IAC5B,cAAc,EAAE;QACd,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,CAAC;QACT,cAAc,EAAE,QAAQ;QACxB,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;KACP;IACD,aAAa,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IAC3D,MAAM,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE;CACjF,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport type {\n ChessBoardCell,\n ChessBoardDimensions,\n ChessBoardProps,\n ChessMoveAttempt,\n ChessPieceState,\n} from '../../../../types/chess';\nimport { GridView } from '../../../grid-view/public';\nimport { withZoraThemeScope } from '../../../theme/adapters/inbound/withZoraThemeScope';\nimport { useZoraTheme } from '../../../theme/composition/useZoraTheme';\nimport { createChessBoardCellPressHandler } from '../../utils/createChessBoardCellPressHandler';\nimport { createChessBoardCells } from '../../utils/createChessBoardCells';\nimport { createChessBoardColorScheme } from '../../utils/createChessBoardColorScheme';\n\nconst symbols = new Map<string, string>([\n ['white:p', '♙'],\n ['white:n', '♘'],\n ['white:b', '♗'],\n ['white:r', '♖'],\n ['white:q', '♕'],\n ['white:k', '♔'],\n ['black:p', '♟'],\n ['black:n', '♞'],\n ['black:b', '♝'],\n ['black:r', '♜'],\n ['black:q', '♛'],\n ['black:k', '♚'],\n]);\nconst minimumDimension = 2;\nconst maximumDimension = 24;\n\n/*** Renders a configurable caller-owned chess presentation through the shared GridView surface. */\nexport const ChessBoard = withZoraThemeScope(ChessBoardInner);\n\n/*** Renders board state and emits caller-owned cell and move intents without applying chess rules. */\nfunction ChessBoardInner({\n columns = 8,\n rows = 8,\n pieces,\n orientation = 'white',\n selectedCell = null,\n legalTargets = [],\n lastMove = null,\n disabled = false,\n showCoordinates = false,\n resizable = false,\n colorScheme,\n onCellPress,\n onMoveAttempt,\n onDimensionsChange,\n renderPiece,\n interactionPolicy,\n testID,\n}: ChessBoardProps) {\n const { theme } = useZoraTheme();\n const colors = createChessBoardColorScheme(theme, colorScheme);\n const dimensions = React.useMemo(() => ({ columns, rows }), [columns, rows]);\n const [width, setWidth] = React.useState(0);\n const cells = React.useMemo(\n () => createChessBoardCells(columns, rows, orientation),\n [columns, orientation, rows],\n );\n const piecesByCell = React.useMemo(\n () => new Map((pieces ?? []).map((piece) => [getCellKey(piece.cell), piece])),\n [pieces],\n );\n const cellById = React.useMemo(() => new Map(cells.map((cell) => [cell.id, cell])), [cells]);\n const legalTargetSet = React.useMemo(() => new Set(legalTargets.map(getCellKey)), [legalTargets]);\n const pressCell = createChessBoardCellPressHandler({\n disabled,\n interactionPolicy,\n onCellPress,\n onMoveAttempt,\n selectedCell,\n });\n const canResize =\n resizable && onDimensionsChange !== undefined && !disabled && interactionPolicy !== 'passive';\n const height = width * (dimensions.rows / dimensions.columns);\n const cellSize = width / dimensions.columns;\n\n return (\n <View\n accessibilityLabel=\"Chess board\"\n onLayout={(event) => setWidth(event.nativeEvent.layout.width)}\n style={[\n styles.board,\n {\n aspectRatio: dimensions.columns / dimensions.rows,\n borderColor: colors.border,\n opacity: disabled ? 0.56 : 1,\n },\n ]}\n testID={testID}\n >\n {width > 0 ? (\n <GridView\n contentHeight={dimensions.rows}\n contentWidth={dimensions.columns}\n defaultViewport={{ pixelsPerUnitX: cellSize, pixelsPerUnitY: cellSize }}\n height={height}\n interactionPolicy=\"passive\"\n items={cells}\n overscanPixels={0}\n renderItem={(item) => {\n const cell = cellById.get(item.id);\n return cell === undefined\n ? null\n : renderChessBoardCell({\n cell,\n cellSize,\n colors,\n disabled: disabled || interactionPolicy === 'passive',\n lastMove,\n legalTargetSet,\n onPress: pressCell,\n piece: piecesByCell.get(item.id),\n renderPiece,\n selectedCell,\n showCoordinates,\n testID,\n });\n }}\n width={width}\n />\n ) : null}\n {canResize ? renderChessBoardResizeActions(dimensions, onDimensionsChange, testID) : null}\n </View>\n );\n}\n\n/*** Render one accessible, caller-controlled rectangular board cell. */\nfunction renderChessBoardCell({\n cell,\n cellSize,\n colors,\n disabled,\n lastMove,\n legalTargetSet,\n onPress,\n piece,\n renderPiece,\n selectedCell,\n showCoordinates,\n testID,\n}: {\n readonly cell: ChessBoardCell & { readonly id: string };\n readonly cellSize: number;\n readonly colors: ReturnType<typeof createChessBoardColorScheme>;\n readonly disabled: boolean;\n readonly lastMove: ChessMoveAttempt | null;\n readonly legalTargetSet: ReadonlySet<string>;\n readonly onPress: (cell: ChessBoardCell) => void;\n readonly piece: ChessPieceState | undefined;\n readonly renderPiece: ChessBoardProps['renderPiece'];\n readonly selectedCell: ChessBoardCell | null;\n readonly showCoordinates: boolean;\n readonly testID: string | undefined;\n}) {\n const light = (cell.column + cell.row) % 2 === 1;\n const key = getCellKey(cell);\n const backgroundColor = cellsEqual(selectedCell, cell)\n ? colors.selectedSquare\n : legalTargetSet.has(key)\n ? colors.legalTarget\n : cellsEqual(lastMove?.from, cell)\n ? colors.lastMoveFrom\n : cellsEqual(lastMove?.to, cell)\n ? colors.lastMoveTo\n : light\n ? colors.lightSquare\n : colors.darkSquare;\n const pieceContent =\n piece === undefined\n ? null\n : renderPiece\n ? renderPiece({\n cell,\n color: piece.color === 'white' ? colors.lightPiece : colors.darkPiece,\n piece: piece.piece,\n size: cellSize,\n })\n : (symbols.get(`${piece.color}:${piece.piece.toLowerCase()}`) ?? piece.piece);\n const coordinate = formatCellCoordinate(cell);\n\n return (\n <Pressable\n accessibilityLabel={coordinate}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled }}\n disabled={disabled}\n key={key}\n onPress={() => onPress(cell)}\n style={[styles.square, { backgroundColor }]}\n testID={testID === undefined ? undefined : `${testID}-cell-${coordinate}`}\n >\n {showCoordinates ? (\n <Text\n style={[\n styles.coordinate,\n { color: light ? colors.lightSquareText : colors.darkSquareText },\n ]}\n >\n {coordinate}\n </Text>\n ) : null}\n {piece === undefined ? null : (\n <View pointerEvents=\"none\" style={styles.pieceContainer}>\n {renderPiece ? (\n pieceContent\n ) : (\n <Text\n style={[\n styles.piece,\n {\n color: piece.color === 'white' ? colors.lightPiece : colors.darkPiece,\n fontSize: cellSize * 0.58,\n lineHeight: cellSize * 0.7,\n },\n ]}\n >\n {pieceContent}\n </Text>\n )}\n </View>\n )}\n </Pressable>\n );\n}\n\n/*** Render bounded editor actions only when the caller explicitly enables dimension editing. */\nfunction renderChessBoardResizeActions(\n dimensions: ChessBoardDimensions,\n onDimensionsChange: (dimensions: ChessBoardDimensions) => void,\n testID: string | undefined,\n) {\n return (\n <View accessibilityLabel=\"Chess board dimensions\" style={styles.resizeActions}>\n {renderResizeAction(\n 'Add row',\n { ...dimensions, rows: dimensions.rows + 1 },\n onDimensionsChange,\n dimensions.rows < maximumDimension,\n testID,\n )}\n {renderResizeAction(\n 'Remove row',\n { ...dimensions, rows: dimensions.rows - 1 },\n onDimensionsChange,\n dimensions.rows > minimumDimension,\n testID,\n )}\n {renderResizeAction(\n 'Add column',\n { ...dimensions, columns: dimensions.columns + 1 },\n onDimensionsChange,\n dimensions.columns < maximumDimension,\n testID,\n )}\n {renderResizeAction(\n 'Remove column',\n { ...dimensions, columns: dimensions.columns - 1 },\n onDimensionsChange,\n dimensions.columns > minimumDimension,\n testID,\n )}\n </View>\n );\n}\n\n/*** Render one caller-controlled dimension-change action. */\nfunction renderResizeAction(\n label: string,\n dimensions: ChessBoardDimensions,\n onDimensionsChange: (dimensions: ChessBoardDimensions) => void,\n enabled: boolean,\n testID: string | undefined,\n) {\n return (\n <Pressable\n accessibilityLabel={label}\n accessibilityRole=\"button\"\n disabled={!enabled}\n onPress={() => onDimensionsChange(dimensions)}\n testID={\n testID === undefined ? undefined : `${testID}-${label.toLowerCase().replace(' ', '-')}`\n }\n >\n <Text>{label}</Text>\n </Pressable>\n );\n}\n\n/*** Compares optional cell coordinates without attaching chess-rule meaning to them. */\nfunction cellsEqual(\n left: ChessBoardCell | undefined | null,\n right: ChessBoardCell | undefined | null,\n): boolean {\n if (!left || !right) return false;\n return left.column === right.column && left.row === right.row;\n}\n\n/*** Format a stable display label for a bounded board cell. */\nfunction formatCellCoordinate(cell: ChessBoardCell): string {\n return `${String.fromCharCode(96 + cell.column)}${cell.row}`;\n}\n\n/*** Create a stable generic identity from caller-owned row and column values. */\nfunction getCellKey(cell: ChessBoardCell): string {\n return `${cell.column}:${cell.row}`;\n}\n\nconst styles = StyleSheet.create({\n board: {\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n overflow: 'hidden',\n width: '100%',\n },\n coordinate: {\n fontSize: 9,\n fontWeight: '600',\n left: 3,\n opacity: 0.72,\n position: 'absolute',\n top: 2,\n zIndex: 2,\n },\n piece: { fontWeight: '600' },\n pieceContainer: {\n alignItems: 'center',\n bottom: 0,\n justifyContent: 'center',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n },\n resizeActions: { flexDirection: 'row', gap: 8, padding: 8 },\n square: { alignItems: 'center', justifyContent: 'center', position: 'relative' },\n});\n"]}
|
|
@@ -7,83 +7,46 @@ export declare const chessBoardMeta: {
|
|
|
7
7
|
readonly blueprint: {
|
|
8
8
|
readonly label: "Chess board";
|
|
9
9
|
readonly defaultProps: {
|
|
10
|
+
readonly columns: 8;
|
|
10
11
|
readonly pieces: readonly [];
|
|
11
12
|
readonly orientation: "white";
|
|
13
|
+
readonly rows: 8;
|
|
12
14
|
readonly showCoordinates: true;
|
|
13
|
-
readonly validateMoves: true;
|
|
14
15
|
};
|
|
15
16
|
};
|
|
16
17
|
readonly events: {
|
|
17
|
-
readonly
|
|
18
|
-
readonly label: "
|
|
19
|
-
readonly eventType: "chess.
|
|
18
|
+
readonly cellPress: {
|
|
19
|
+
readonly label: "Cell press";
|
|
20
|
+
readonly eventType: "chess.cellPress";
|
|
20
21
|
readonly payloadFields: readonly [{
|
|
21
|
-
readonly path: "
|
|
22
|
-
readonly type: "
|
|
23
|
-
readonly label: "
|
|
22
|
+
readonly path: "column";
|
|
23
|
+
readonly type: "number";
|
|
24
|
+
readonly label: "Column";
|
|
25
|
+
}, {
|
|
26
|
+
readonly path: "row";
|
|
27
|
+
readonly type: "number";
|
|
28
|
+
readonly label: "Row";
|
|
24
29
|
}];
|
|
25
30
|
};
|
|
26
31
|
readonly moveAttempt: {
|
|
27
32
|
readonly label: "Move attempt";
|
|
28
33
|
readonly eventType: "chess.moveAttempt";
|
|
29
34
|
readonly payloadFields: readonly [{
|
|
30
|
-
readonly path: "from";
|
|
31
|
-
readonly type: "
|
|
32
|
-
readonly label: "From";
|
|
35
|
+
readonly path: "from.column";
|
|
36
|
+
readonly type: "number";
|
|
37
|
+
readonly label: "From column";
|
|
33
38
|
}, {
|
|
34
|
-
readonly path: "
|
|
35
|
-
readonly type: "
|
|
36
|
-
readonly label: "
|
|
37
|
-
}, {
|
|
38
|
-
readonly path: "promotion";
|
|
39
|
-
readonly type: "string";
|
|
40
|
-
readonly label: "Promotion";
|
|
41
|
-
}];
|
|
42
|
-
};
|
|
43
|
-
readonly legalMove: {
|
|
44
|
-
readonly label: "Legal move";
|
|
45
|
-
readonly eventType: "chess.legalMove";
|
|
46
|
-
readonly payloadFields: readonly [{
|
|
47
|
-
readonly path: "from";
|
|
48
|
-
readonly type: "string";
|
|
49
|
-
readonly label: "From";
|
|
39
|
+
readonly path: "from.row";
|
|
40
|
+
readonly type: "number";
|
|
41
|
+
readonly label: "From row";
|
|
50
42
|
}, {
|
|
51
|
-
readonly path: "to";
|
|
52
|
-
readonly type: "
|
|
53
|
-
readonly label: "To";
|
|
43
|
+
readonly path: "to.column";
|
|
44
|
+
readonly type: "number";
|
|
45
|
+
readonly label: "To column";
|
|
54
46
|
}, {
|
|
55
|
-
readonly path: "
|
|
56
|
-
readonly type: "
|
|
57
|
-
readonly label: "
|
|
58
|
-
}, {
|
|
59
|
-
readonly path: "san";
|
|
60
|
-
readonly type: "string";
|
|
61
|
-
readonly label: "SAN";
|
|
62
|
-
}, {
|
|
63
|
-
readonly path: "lan";
|
|
64
|
-
readonly type: "string";
|
|
65
|
-
readonly label: "LAN";
|
|
66
|
-
}, {
|
|
67
|
-
readonly path: "promotion";
|
|
68
|
-
readonly type: "string";
|
|
69
|
-
readonly label: "Promotion";
|
|
70
|
-
}];
|
|
71
|
-
};
|
|
72
|
-
readonly invalidMove: {
|
|
73
|
-
readonly label: "Invalid move";
|
|
74
|
-
readonly eventType: "chess.invalidMove";
|
|
75
|
-
readonly payloadFields: readonly [{
|
|
76
|
-
readonly path: "from";
|
|
77
|
-
readonly type: "string";
|
|
78
|
-
readonly label: "From";
|
|
79
|
-
}, {
|
|
80
|
-
readonly path: "to";
|
|
81
|
-
readonly type: "string";
|
|
82
|
-
readonly label: "To";
|
|
83
|
-
}, {
|
|
84
|
-
readonly path: "promotion";
|
|
85
|
-
readonly type: "string";
|
|
86
|
-
readonly label: "Promotion";
|
|
47
|
+
readonly path: "to.row";
|
|
48
|
+
readonly type: "number";
|
|
49
|
+
readonly label: "To row";
|
|
87
50
|
}];
|
|
88
51
|
};
|
|
89
52
|
};
|
|
@@ -98,11 +61,37 @@ export declare const chessBoardMeta: {
|
|
|
98
61
|
readonly acceptsFallback: true;
|
|
99
62
|
readonly acceptsTransforms: true;
|
|
100
63
|
};
|
|
64
|
+
readonly selectedCell: {
|
|
65
|
+
readonly label: "Selected cell";
|
|
66
|
+
readonly value: {
|
|
67
|
+
readonly type: "object";
|
|
68
|
+
readonly fields: readonly [{
|
|
69
|
+
readonly path: "column";
|
|
70
|
+
readonly type: "number";
|
|
71
|
+
readonly label: "Column";
|
|
72
|
+
}, {
|
|
73
|
+
readonly path: "row";
|
|
74
|
+
readonly type: "number";
|
|
75
|
+
readonly label: "Row";
|
|
76
|
+
}];
|
|
77
|
+
};
|
|
78
|
+
readonly acceptsFallback: true;
|
|
79
|
+
readonly acceptsTransforms: true;
|
|
80
|
+
};
|
|
101
81
|
readonly legalTargets: {
|
|
102
82
|
readonly label: "Legal targets";
|
|
103
83
|
readonly value: {
|
|
104
84
|
readonly type: "array";
|
|
105
|
-
readonly itemType: "
|
|
85
|
+
readonly itemType: "object";
|
|
86
|
+
readonly fields: readonly [{
|
|
87
|
+
readonly path: "[].column";
|
|
88
|
+
readonly type: "number";
|
|
89
|
+
readonly label: "Column";
|
|
90
|
+
}, {
|
|
91
|
+
readonly path: "[].row";
|
|
92
|
+
readonly type: "number";
|
|
93
|
+
readonly label: "Row";
|
|
94
|
+
}];
|
|
106
95
|
};
|
|
107
96
|
readonly acceptsFallback: true;
|
|
108
97
|
readonly acceptsTransforms: true;
|
|
@@ -110,10 +99,20 @@ export declare const chessBoardMeta: {
|
|
|
110
99
|
};
|
|
111
100
|
};
|
|
112
101
|
readonly props: {
|
|
113
|
-
readonly
|
|
114
|
-
readonly type: "
|
|
115
|
-
readonly category: "
|
|
116
|
-
readonly label: "
|
|
102
|
+
readonly columns: {
|
|
103
|
+
readonly type: "number";
|
|
104
|
+
readonly category: "Board";
|
|
105
|
+
readonly label: "Columns";
|
|
106
|
+
readonly default: 8;
|
|
107
|
+
readonly authoring: {
|
|
108
|
+
readonly authority: "instance";
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
readonly rows: {
|
|
112
|
+
readonly type: "number";
|
|
113
|
+
readonly category: "Board";
|
|
114
|
+
readonly label: "Rows";
|
|
115
|
+
readonly default: 8;
|
|
117
116
|
readonly authoring: {
|
|
118
117
|
readonly authority: "instance";
|
|
119
118
|
};
|
|
@@ -137,10 +136,23 @@ export declare const chessBoardMeta: {
|
|
|
137
136
|
readonly authority: "instance";
|
|
138
137
|
};
|
|
139
138
|
};
|
|
140
|
-
readonly
|
|
141
|
-
readonly type: "
|
|
139
|
+
readonly selectedCell: {
|
|
140
|
+
readonly type: "object";
|
|
142
141
|
readonly category: "Board";
|
|
143
|
-
readonly label: "Selected
|
|
142
|
+
readonly label: "Selected cell";
|
|
143
|
+
readonly itemSchema: readonly [{
|
|
144
|
+
readonly key: "column";
|
|
145
|
+
readonly schema: {
|
|
146
|
+
readonly type: "number";
|
|
147
|
+
readonly category: "Cell";
|
|
148
|
+
};
|
|
149
|
+
}, {
|
|
150
|
+
readonly key: "row";
|
|
151
|
+
readonly schema: {
|
|
152
|
+
readonly type: "number";
|
|
153
|
+
readonly category: "Cell";
|
|
154
|
+
};
|
|
155
|
+
}];
|
|
144
156
|
readonly authoring: {
|
|
145
157
|
readonly authority: "instance";
|
|
146
158
|
};
|
|
@@ -150,6 +162,19 @@ export declare const chessBoardMeta: {
|
|
|
150
162
|
readonly category: "Board";
|
|
151
163
|
readonly label: "Legal targets";
|
|
152
164
|
readonly default: readonly [];
|
|
165
|
+
readonly itemSchema: readonly [{
|
|
166
|
+
readonly key: "column";
|
|
167
|
+
readonly schema: {
|
|
168
|
+
readonly type: "number";
|
|
169
|
+
readonly category: "Cell";
|
|
170
|
+
};
|
|
171
|
+
}, {
|
|
172
|
+
readonly key: "row";
|
|
173
|
+
readonly schema: {
|
|
174
|
+
readonly type: "number";
|
|
175
|
+
readonly category: "Cell";
|
|
176
|
+
};
|
|
177
|
+
}];
|
|
153
178
|
readonly authoring: {
|
|
154
179
|
readonly authority: "instance";
|
|
155
180
|
};
|
|
@@ -163,11 +188,11 @@ export declare const chessBoardMeta: {
|
|
|
163
188
|
readonly authority: "instance";
|
|
164
189
|
};
|
|
165
190
|
};
|
|
166
|
-
readonly
|
|
191
|
+
readonly resizable: {
|
|
167
192
|
readonly type: "boolean";
|
|
168
193
|
readonly category: "Behavior";
|
|
169
|
-
readonly label: "
|
|
170
|
-
readonly default:
|
|
194
|
+
readonly label: "Resizable";
|
|
195
|
+
readonly default: false;
|
|
171
196
|
readonly authoring: {
|
|
172
197
|
readonly authority: "instance";
|
|
173
198
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/features/chess/meta.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/features/chess/meta.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiJW,CAAC;AACvC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EU,CAAC"}
|