@ankhorage/zora 26.0.4 → 26.0.5
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 +6 -0
- package/README.md +1 -1
- package/dist/features/chess/adapters/inbound/ChessBoard.js +1 -1
- package/dist/features/chess/adapters/inbound/ChessBoard.js.map +1 -1
- package/dist/features/chess/utils/createChessBoardCellPressHandler.d.ts.map +1 -1
- package/dist/features/chess/utils/createChessBoardCellPressHandler.js +9 -3
- package/dist/features/chess/utils/createChessBoardCellPressHandler.js.map +1 -1
- package/package.json +2 -1
- package/src/features/chess/adapters/inbound/ChessBoard.tsx +1 -1
- package/src/features/chess/utils/createChessBoardCellPressHandler.ts +11 -3
- package/web-dist/chunks/{Accordion-91sjb3zh.js → Accordion-yen1cn5b.js} +8 -4
- package/web-dist/components/chess-board/ChessBoard.js +1 -1
- package/web-dist/components/opening-book/OpeningBook.js +1 -1
- package/web-dist/manifest.json +2 -2
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# @ankhorage/zora
|
|
5
5
|
|
|
6
|
-
         
|
|
7
7
|
|
|
8
8
|
Opinionated React Native and React Native Web UI kit built on @ankhorage/surface.
|
|
9
9
|
|
|
@@ -100,7 +100,7 @@ function renderChessBoardCell({ cell, cellSize, colors, disabled, lastMove, lega
|
|
|
100
100
|
})
|
|
101
101
|
: (symbols.get(`${piece.color}:${piece.piece.toLowerCase()}`) ?? piece.piece);
|
|
102
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}`}>
|
|
103
|
+
return (<Pressable accessibilityLabel={coordinate} accessibilityRole="button" accessibilityState={{ disabled }} disabled={disabled} key={key} onPress={() => onPress(cell)} style={[styles.square, { backgroundColor, height: cellSize, width: cellSize }]} testID={testID === undefined ? undefined : `${testID}-cell-${coordinate}`}>
|
|
104
104
|
{showCoordinates ? (<Text style={[
|
|
105
105
|
styles.coordinate,
|
|
106
106
|
{ color: light ? colors.lightSquareText : colors.darkSquareText },
|
|
@@ -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 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"]}
|
|
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,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC/E,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, height: cellSize, width: cellSize }]}\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createChessBoardCellPressHandler.d.ts","sourceRoot":"","sources":["../../../../src/features/chess/utils/createChessBoardCellPressHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5E,KAAK,iCAAiC,GAAG,IAAI,CAC3C,eAAe,EACf,UAAU,GAAG,mBAAmB,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,CACpF,CAAC;AAEF,qGAAqG;AACrG,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,GACb,EAAE,iCAAiC,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"createChessBoardCellPressHandler.d.ts","sourceRoot":"","sources":["../../../../src/features/chess/utils/createChessBoardCellPressHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5E,KAAK,iCAAiC,GAAG,IAAI,CAC3C,eAAe,EACf,UAAU,GAAG,mBAAmB,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,CACpF,CAAC;AAEF,qGAAqG;AACrG,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,GACb,EAAE,iCAAiC,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAkBpE"}
|
|
@@ -3,11 +3,17 @@ export function createChessBoardCellPressHandler({ disabled, interactionPolicy,
|
|
|
3
3
|
return (cell) => {
|
|
4
4
|
if (disabled || interactionPolicy === 'passive')
|
|
5
5
|
return;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const cellIntent = { column: cell.column, row: cell.row };
|
|
7
|
+
onCellPress?.(cellIntent);
|
|
8
|
+
if (selectedCell === null ||
|
|
9
|
+
selectedCell === undefined ||
|
|
10
|
+
cellsEqual(selectedCell, cellIntent)) {
|
|
8
11
|
return;
|
|
9
12
|
}
|
|
10
|
-
onMoveAttempt?.({
|
|
13
|
+
onMoveAttempt?.({
|
|
14
|
+
from: { column: selectedCell.column, row: selectedCell.row },
|
|
15
|
+
to: cellIntent,
|
|
16
|
+
});
|
|
11
17
|
};
|
|
12
18
|
}
|
|
13
19
|
/*** Compares caller-owned coordinates without adding chess-rule semantics. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createChessBoardCellPressHandler.js","sourceRoot":"","sources":["../../../../src/features/chess/utils/createChessBoardCellPressHandler.ts"],"names":[],"mappings":"AAOA,qGAAqG;AACrG,MAAM,UAAU,gCAAgC,CAAC,EAC/C,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,GACsB;IAClC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,QAAQ,IAAI,iBAAiB,KAAK,SAAS;YAAE,OAAO;QAExD,
|
|
1
|
+
{"version":3,"file":"createChessBoardCellPressHandler.js","sourceRoot":"","sources":["../../../../src/features/chess/utils/createChessBoardCellPressHandler.ts"],"names":[],"mappings":"AAOA,qGAAqG;AACrG,MAAM,UAAU,gCAAgC,CAAC,EAC/C,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,GACsB;IAClC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,QAAQ,IAAI,iBAAiB,KAAK,SAAS;YAAE,OAAO;QAExD,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1D,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC;QAC1B,IACE,YAAY,KAAK,IAAI;YACrB,YAAY,KAAK,SAAS;YAC1B,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,EACpC,CAAC;YACD,OAAO;QACT,CAAC;QACD,aAAa,EAAE,CAAC;YACd,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE;YAC5D,EAAE,EAAE,UAAU;SACf,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,UAAU,CAAC,IAAoB,EAAE,KAAqB;IAC7D,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;AAChE,CAAC","sourcesContent":["import type { ChessBoardCell, ChessBoardProps } from '../../../types/chess';\n\ntype ChessBoardCellPressHandlerOptions = Pick<\n ChessBoardProps,\n 'disabled' | 'interactionPolicy' | 'onCellPress' | 'onMoveAttempt' | 'selectedCell'\n>;\n\n/*** Creates the caller-owned cell and move intent boundary for an interactive chess presentation. */\nexport function createChessBoardCellPressHandler({\n disabled,\n interactionPolicy,\n onCellPress,\n onMoveAttempt,\n selectedCell,\n}: ChessBoardCellPressHandlerOptions): (cell: ChessBoardCell) => void {\n return (cell) => {\n if (disabled || interactionPolicy === 'passive') return;\n\n const cellIntent = { column: cell.column, row: cell.row };\n onCellPress?.(cellIntent);\n if (\n selectedCell === null ||\n selectedCell === undefined ||\n cellsEqual(selectedCell, cellIntent)\n ) {\n return;\n }\n onMoveAttempt?.({\n from: { column: selectedCell.column, row: selectedCell.row },\n to: cellIntent,\n });\n };\n}\n\n/*** Compares caller-owned coordinates without adding chess-rule semantics. */\nfunction cellsEqual(left: ChessBoardCell, right: ChessBoardCell): boolean {\n return left.column === right.column && left.row === right.row;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankhorage/zora",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "26.0.
|
|
4
|
+
"version": "26.0.5",
|
|
5
5
|
"description": "Opinionated React Native and React Native Web UI kit built on @ankhorage/surface.",
|
|
6
6
|
"homepage": "https://github.com/ankhorage/zora#readme",
|
|
7
7
|
"bugs": {
|
|
@@ -154,6 +154,7 @@
|
|
|
154
154
|
"format:check": "ankhorage-prettier --check .",
|
|
155
155
|
"prepack": "bun run build",
|
|
156
156
|
"test": "bun run build && bun test src examples/grid-workspaces/time examples/grid-workspaces/plugins --isolate",
|
|
157
|
+
"test:chess:chromium": "bun scripts/test-chess-chromium.ts",
|
|
157
158
|
"test:graph-view:chromium": "bun scripts/test-graph-view-chromium.ts",
|
|
158
159
|
"typecheck": "bun x tsc --noEmit -p tsconfig.json && bun x tsc --noEmit -p tsconfig.scripts.json && bun x tsc -p tsconfig.typecheck.json",
|
|
159
160
|
"version-packages": "ankhorage-changeset version"
|
|
@@ -193,7 +193,7 @@ function renderChessBoardCell({
|
|
|
193
193
|
disabled={disabled}
|
|
194
194
|
key={key}
|
|
195
195
|
onPress={() => onPress(cell)}
|
|
196
|
-
style={[styles.square, { backgroundColor }]}
|
|
196
|
+
style={[styles.square, { backgroundColor, height: cellSize, width: cellSize }]}
|
|
197
197
|
testID={testID === undefined ? undefined : `${testID}-cell-${coordinate}`}
|
|
198
198
|
>
|
|
199
199
|
{showCoordinates ? (
|
|
@@ -16,11 +16,19 @@ export function createChessBoardCellPressHandler({
|
|
|
16
16
|
return (cell) => {
|
|
17
17
|
if (disabled || interactionPolicy === 'passive') return;
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const cellIntent = { column: cell.column, row: cell.row };
|
|
20
|
+
onCellPress?.(cellIntent);
|
|
21
|
+
if (
|
|
22
|
+
selectedCell === null ||
|
|
23
|
+
selectedCell === undefined ||
|
|
24
|
+
cellsEqual(selectedCell, cellIntent)
|
|
25
|
+
) {
|
|
21
26
|
return;
|
|
22
27
|
}
|
|
23
|
-
onMoveAttempt?.({
|
|
28
|
+
onMoveAttempt?.({
|
|
29
|
+
from: { column: selectedCell.column, row: selectedCell.row },
|
|
30
|
+
to: cellIntent,
|
|
31
|
+
});
|
|
24
32
|
};
|
|
25
33
|
}
|
|
26
34
|
|
|
@@ -30,11 +30,15 @@ function createChessBoardCellPressHandler({
|
|
|
30
30
|
return (cell) => {
|
|
31
31
|
if (disabled || interactionPolicy === "passive")
|
|
32
32
|
return;
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
const cellIntent = { column: cell.column, row: cell.row };
|
|
34
|
+
onCellPress?.(cellIntent);
|
|
35
|
+
if (selectedCell === null || selectedCell === undefined || cellsEqual(selectedCell, cellIntent)) {
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
37
|
-
onMoveAttempt?.({
|
|
38
|
+
onMoveAttempt?.({
|
|
39
|
+
from: { column: selectedCell.column, row: selectedCell.row },
|
|
40
|
+
to: cellIntent
|
|
41
|
+
});
|
|
38
42
|
};
|
|
39
43
|
}
|
|
40
44
|
function cellsEqual(left, right) {
|
|
@@ -215,7 +219,7 @@ function renderChessBoardCell({
|
|
|
215
219
|
accessibilityState: { disabled },
|
|
216
220
|
disabled,
|
|
217
221
|
onPress: () => onPress(cell),
|
|
218
|
-
style: [styles.square, { backgroundColor }],
|
|
222
|
+
style: [styles.square, { backgroundColor, height: cellSize, width: cellSize }],
|
|
219
223
|
testID: testID === undefined ? undefined : `${testID}-cell-${coordinate}`,
|
|
220
224
|
children: [
|
|
221
225
|
showCoordinates ? /* @__PURE__ */ jsx(import_react_native.Text, {
|
|
@@ -5,7 +5,7 @@ import"../../chunks/Accordion-vj1m2wck.js";
|
|
|
5
5
|
import {
|
|
6
6
|
ChessBoard2,
|
|
7
7
|
OpeningBook2
|
|
8
|
-
} from "../../chunks/Accordion-
|
|
8
|
+
} from "../../chunks/Accordion-yen1cn5b.js";
|
|
9
9
|
import"../../chunks/Accordion-srjya6dz.js";
|
|
10
10
|
import"../../chunks/Accordion-xgpzh4wq.js";
|
|
11
11
|
export {
|
|
@@ -5,7 +5,7 @@ import"../../chunks/Accordion-vj1m2wck.js";
|
|
|
5
5
|
import {
|
|
6
6
|
ChessBoard2,
|
|
7
7
|
OpeningBook2
|
|
8
|
-
} from "../../chunks/Accordion-
|
|
8
|
+
} from "../../chunks/Accordion-yen1cn5b.js";
|
|
9
9
|
import"../../chunks/Accordion-srjya6dz.js";
|
|
10
10
|
import"../../chunks/Accordion-xgpzh4wq.js";
|
|
11
11
|
export {
|
package/web-dist/manifest.json
CHANGED
|
@@ -870,13 +870,13 @@
|
|
|
870
870
|
"components/chess-board/index.js",
|
|
871
871
|
"components/chess-board/index.d.ts",
|
|
872
872
|
"chunks/Accordion-6wrr910w.js",
|
|
873
|
-
"chunks/Accordion-91sjb3zh.js",
|
|
874
873
|
"chunks/Accordion-fcczvwgg.js",
|
|
875
874
|
"chunks/Accordion-nh0cs9hq.js",
|
|
876
875
|
"chunks/Accordion-srjya6dz.js",
|
|
877
876
|
"chunks/Accordion-t0k1cjca.js",
|
|
878
877
|
"chunks/Accordion-vj1m2wck.js",
|
|
879
878
|
"chunks/Accordion-xgpzh4wq.js",
|
|
879
|
+
"chunks/Accordion-yen1cn5b.js",
|
|
880
880
|
"chunks/Accordion-zypyr9xw.js"
|
|
881
881
|
],
|
|
882
882
|
"sourceKind": "public"
|
|
@@ -2374,13 +2374,13 @@
|
|
|
2374
2374
|
"components/opening-book/index.js",
|
|
2375
2375
|
"components/opening-book/index.d.ts",
|
|
2376
2376
|
"chunks/Accordion-6wrr910w.js",
|
|
2377
|
-
"chunks/Accordion-91sjb3zh.js",
|
|
2378
2377
|
"chunks/Accordion-fcczvwgg.js",
|
|
2379
2378
|
"chunks/Accordion-nh0cs9hq.js",
|
|
2380
2379
|
"chunks/Accordion-srjya6dz.js",
|
|
2381
2380
|
"chunks/Accordion-t0k1cjca.js",
|
|
2382
2381
|
"chunks/Accordion-vj1m2wck.js",
|
|
2383
2382
|
"chunks/Accordion-xgpzh4wq.js",
|
|
2383
|
+
"chunks/Accordion-yen1cn5b.js",
|
|
2384
2384
|
"chunks/Accordion-zypyr9xw.js"
|
|
2385
2385
|
],
|
|
2386
2386
|
"sourceKind": "public"
|