@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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 26.0.5
4
+
5
+ ### Patch Changes
6
+
7
+ - ddeafcf: Restore usable React Native Web touch targets for ChessBoard cells.
8
+
3
9
  ## 26.0.4
4
10
 
5
11
  ### Patch Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/zora
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v26.0.4](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v26.0.5](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
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":"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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, 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,CAUpE"}
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
- onCellPress?.(cell);
7
- if (selectedCell === null || selectedCell === undefined || cellsEqual(selectedCell, cell)) {
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?.({ from: selectedCell, to: cell });
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,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1F,OAAO;QACT,CAAC;QACD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,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 onCellPress?.(cell);\n if (selectedCell === null || selectedCell === undefined || cellsEqual(selectedCell, cell)) {\n return;\n }\n onMoveAttempt?.({ from: selectedCell, to: cell });\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"]}
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",
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
- onCellPress?.(cell);
20
- if (selectedCell === null || selectedCell === undefined || cellsEqual(selectedCell, cell)) {
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?.({ from: selectedCell, to: cell });
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
- onCellPress?.(cell);
34
- if (selectedCell === null || selectedCell === undefined || cellsEqual(selectedCell, cell)) {
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?.({ from: selectedCell, to: cell });
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-91sjb3zh.js";
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-91sjb3zh.js";
8
+ } from "../../chunks/Accordion-yen1cn5b.js";
9
9
  import"../../chunks/Accordion-srjya6dz.js";
10
10
  import"../../chunks/Accordion-xgpzh4wq.js";
11
11
  export {
@@ -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"