kokopu-react 1.6.0 → 1.7.2
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/.nycrc.yml +1 -1
- package/CHANGELOG.md +13 -0
- package/README.md +2 -2
- package/dist/lib/Chessboard.js +27 -19
- package/dist/lib/Movetext.js +5 -5
- package/dist/lib/impl/colorsets.js +44 -44
- package/dist/lib/impl/util.js +1 -1
- package/dist/lib/markers.js +7 -7
- package/doc_src/demo/PageChessboardInteraction.js +4 -3
- package/doc_src/demo/PageChessboardMove.js +36 -5
- package/doc_src/demo/demo.css +4 -0
- package/{graphic_test_app → graphic_test_src}/01_marker_icons.js +0 -0
- package/{graphic_test_app → graphic_test_src}/02_chessboard_simple.js +0 -0
- package/{graphic_test_app → graphic_test_src}/03_chessboard_flipped.js +0 -0
- package/{graphic_test_app → graphic_test_src}/04_chessboard_annotations.js +8 -8
- package/{graphic_test_app → graphic_test_src}/05_chessboard_move.js +4 -4
- package/{graphic_test_app → graphic_test_src}/06_chessboard_theme.js +2 -2
- package/{graphic_test_app → graphic_test_src}/07_chessboard_click_squares.js +0 -0
- package/{graphic_test_app → graphic_test_src}/08_chessboard_move_pieces.js +1 -1
- package/{graphic_test_app → graphic_test_src}/09_chessboard_edit_arrows.js +0 -0
- package/{graphic_test_app → graphic_test_src}/10_chessboard_play_moves.js +1 -1
- package/{graphic_test_app → graphic_test_src}/11_chessboard_play_promotions.js +0 -0
- package/{graphic_test_app → graphic_test_src}/12_movetext_simple.js +0 -0
- package/{graphic_test_app → graphic_test_src}/13_movetext_error.js +0 -0
- package/{graphic_test_app → graphic_test_src}/14_movetext_html.js +0 -0
- package/{graphic_test_app → graphic_test_src}/15_movetext_options.js +0 -4
- package/{graphic_test_app → graphic_test_src}/16_movetext_interaction.js +0 -0
- package/{graphic_test_app → graphic_test_src}/common/dummy.pgn +0 -0
- package/{graphic_test_app → graphic_test_src}/common/games.pgn +0 -0
- package/{graphic_test_app → graphic_test_src}/common/heartbeat.txt +0 -0
- package/{graphic_test_app → graphic_test_src}/common/smiley.png +0 -0
- package/{graphic_test_app → graphic_test_src}/common/test_app.css +0 -0
- package/{graphic_test_app → graphic_test_src}/common/test_app.js +3 -2
- package/graphics/chess_sprites/cburnett/bb.svg +45 -0
- package/graphics/chess_sprites/cburnett/bk.svg +47 -0
- package/graphics/chess_sprites/cburnett/bn.svg +37 -0
- package/graphics/chess_sprites/cburnett/bp.svg +19 -0
- package/graphics/chess_sprites/cburnett/bq.svg +58 -0
- package/graphics/chess_sprites/cburnett/br.svg +60 -0
- package/graphics/chess_sprites/cburnett/bx.svg +56 -0
- package/graphics/chess_sprites/cburnett/wb.svg +48 -0
- package/graphics/chess_sprites/cburnett/wk.svg +26 -0
- package/graphics/chess_sprites/cburnett/wn.svg +37 -0
- package/graphics/chess_sprites/cburnett/wp.svg +19 -0
- package/graphics/chess_sprites/cburnett/wq.svg +60 -0
- package/graphics/chess_sprites/cburnett/wr.svg +44 -0
- package/graphics/chess_sprites/cburnett/wx.svg +56 -0
- package/graphics/chess_sprites/generate_sprites.sh +135 -0
- package/graphics/chess_sprites/mmonge/celtic-bx.svg +112 -0
- package/graphics/chess_sprites/mmonge/celtic-wx.svg +111 -0
- package/graphics/chess_sprites/mmonge/celtic.svg +1576 -0
- package/graphics/chess_sprites/mmonge/eyes-spatial-bx.svg +101 -0
- package/graphics/chess_sprites/mmonge/eyes-spatial-wx.svg +100 -0
- package/graphics/chess_sprites/mmonge/eyes.svg +2538 -0
- package/graphics/chess_sprites/mmonge/fantasy-bx.svg +112 -0
- package/graphics/chess_sprites/mmonge/fantasy-wx.svg +111 -0
- package/graphics/chess_sprites/mmonge/fantasy.svg +5497 -0
- package/graphics/chess_sprites/mmonge/fantasy_alt.svg +3742 -0
- package/graphics/chess_sprites/mmonge/freak.svg +3479 -0
- package/graphics/chess_sprites/mmonge/prmi.svg +6776 -0
- package/graphics/chess_sprites/mmonge/skulls-bx.svg +124 -0
- package/graphics/chess_sprites/mmonge/skulls-wx.svg +111 -0
- package/graphics/chess_sprites/mmonge/skulls.svg +12978 -0
- package/graphics/chess_sprites/mmonge/spatial.svg +1223 -0
- package/package.json +30 -24
- package/scripts/{test_graphic/clean-graphic-output.js → clean-graphic-output.js} +1 -1
- package/scripts/docker-compose.yml +14 -0
- package/scripts/{test_graphic/webpack-config.js → test-graphic.webpack.config.js} +7 -6
- package/scripts/{test_headless.webpack-config.js → test-headless.webpack.config.js} +2 -1
- package/src/Chessboard.js +27 -19
- package/src/Movetext.js +5 -5
- package/src/impl/colorsets.js +44 -44
- package/src/impl/util.js +1 -1
- package/src/markers.js +7 -7
- package/test/1_markers.js +14 -14
- package/test/common/graphic.js +2 -2
- package/test/references/04_chessboard_annotations/0.png +0 -0
- package/test/references/04_chessboard_annotations/1.png +0 -0
- package/test/references/04_chessboard_annotations/2.png +0 -0
- package/test/references/04_chessboard_annotations/3.png +0 -0
- package/test/references/04_chessboard_annotations/4.png +0 -0
- package/test/references/04_chessboard_annotations/5.png +0 -0
- package/test/references/05_chessboard_move/3.png +0 -0
- package/test/references/05_chessboard_move/4.png +0 -0
- package/test/references/05_chessboard_move/5.png +0 -0
- package/test/references/05_chessboard_move/6.png +0 -0
- package/test/references/06_chessboard_theme/0.png +0 -0
- package/test/references/06_chessboard_theme/1.png +0 -0
- package/test/references/06_chessboard_theme/2.png +0 -0
- package/test/references/06_chessboard_theme/3.png +0 -0
- package/test/references/06_chessboard_theme/4.png +0 -0
- package/test/references/06_chessboard_theme/5.png +0 -0
- package/test/references/06_chessboard_theme/6.png +0 -0
- package/test/references/06_chessboard_theme/7.png +0 -0
- package/test/references/06_chessboard_theme/8.png +0 -0
- package/test/references/08_chessboard_move_pieces/over_arrow_marker.png +0 -0
- package/test/references/08_chessboard_move_pieces/over_square_marker.png +0 -0
- package/test/references/08_chessboard_move_pieces/over_text_marker.png +0 -0
- package/test/references/09_chessboard_edit_arrows/base_1.png +0 -0
- package/test/references/09_chessboard_edit_arrows/base_2.png +0 -0
- package/test/references/09_chessboard_edit_arrows/null_vector.png +0 -0
- package/test/references/09_chessboard_edit_arrows/over_arrow_marker.png +0 -0
- package/test/references/09_chessboard_edit_arrows/over_square_marker.png +0 -0
- package/test/references/10_chessboard_play_moves/castling_move.png +0 -0
- package/test/references/10_chessboard_play_moves/regular_move_2.png +0 -0
- package/scripts/test_graphic/docker-compose.yml +0 -14
package/.nycrc.yml
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
ChangeLog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
1.7.1 (June 23, 2022)
|
|
5
|
+
---------------------
|
|
6
|
+
* `React` and `kokopu` declared as peer dependencies.
|
|
7
|
+
* Minor fixes.
|
|
8
|
+
|
|
9
|
+
1.7.0 (June 22, 2022)
|
|
10
|
+
---------------------
|
|
11
|
+
* Upgrade React to React 18.
|
|
12
|
+
* Add support for color blue for markers.
|
|
13
|
+
* Allow customization of the move arrow color in the `Chessboard` component.
|
|
14
|
+
* Change the property names used to define the marker colors in the objects returned by `Chessboard.colorsets()`:
|
|
15
|
+
`g`, `r`, `y` and `highlight` have become respectively `cg`, `cr`, `cy` and `cb`.
|
|
16
|
+
|
|
4
17
|
1.6.0 (June 1, 2022)
|
|
5
18
|
--------------------
|
|
6
19
|
* Allow block-formatting HTML tags in PGN comments.
|
package/README.md
CHANGED
|
@@ -27,10 +27,10 @@ Example
|
|
|
27
27
|
|
|
28
28
|
```javascript
|
|
29
29
|
import React from 'react';
|
|
30
|
-
import
|
|
30
|
+
import { createRoot } from 'react-dom/client';
|
|
31
31
|
import { Chessboard } from 'kokopu-react';
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
createRoot(document.body).render(<Chessboard />);
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|

|
package/dist/lib/Chessboard.js
CHANGED
|
@@ -188,7 +188,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
188
188
|
viewBox: viewBox,
|
|
189
189
|
width: xmax - xmin,
|
|
190
190
|
height: ymax - ymin
|
|
191
|
-
}, /*#__PURE__*/_react["default"].createElement("defs", null, this.renderArrowTip(colorset, '
|
|
191
|
+
}, /*#__PURE__*/_react["default"].createElement("defs", null, this.renderArrowTip(colorset, 'b'), this.renderArrowTip(colorset, 'g'), this.renderArrowTip(colorset, 'r'), this.renderArrowTip(colorset, 'y')), squares, rankCoordinates, fileCoordinates, this.renderBoardContent(position, positionBefore, move, squareSize, colorset, pieceset));
|
|
192
192
|
}
|
|
193
193
|
}, {
|
|
194
194
|
key: "renderBoardContent",
|
|
@@ -286,13 +286,14 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
286
286
|
|
|
287
287
|
var thickness = Math.max(2, Math.round(HOVER_MARKER_THICKNESS_FACTOR * squareSize));
|
|
288
288
|
var size = squareSize - thickness;
|
|
289
|
+
var color = this.isEditArrowModeEnabled() ? this.props.editedArrowColor : this.props.moveArrowColor;
|
|
289
290
|
return /*#__PURE__*/_react["default"].createElement("rect", {
|
|
290
291
|
className: "kokopu-hoveredSquare",
|
|
291
292
|
x: x + thickness / 2,
|
|
292
293
|
y: y + thickness / 2,
|
|
293
294
|
width: size,
|
|
294
295
|
height: size,
|
|
295
|
-
stroke: colorset
|
|
296
|
+
stroke: colorset['c' + color],
|
|
296
297
|
strokeWidth: thickness
|
|
297
298
|
});
|
|
298
299
|
}
|
|
@@ -407,7 +408,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
407
408
|
y1: yFrom,
|
|
408
409
|
x2: xTo,
|
|
409
410
|
y2: yTo,
|
|
410
|
-
stroke: colorset[this.props.editedArrowColor],
|
|
411
|
+
stroke: colorset['c' + this.props.editedArrowColor],
|
|
411
412
|
strokeWidth: strokeWidth,
|
|
412
413
|
markerEnd: "url(#".concat(arrowTipId, ")")
|
|
413
414
|
});
|
|
@@ -543,7 +544,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
543
544
|
y: y,
|
|
544
545
|
width: squareSize,
|
|
545
546
|
height: squareSize,
|
|
546
|
-
fill: colorset[color]
|
|
547
|
+
fill: colorset['c' + color]
|
|
547
548
|
}));
|
|
548
549
|
});
|
|
549
550
|
return result;
|
|
@@ -573,7 +574,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
573
574
|
y: y,
|
|
574
575
|
size: squareSize,
|
|
575
576
|
symbol: value.symbol,
|
|
576
|
-
color: colorset[value.color]
|
|
577
|
+
color: colorset['c' + value.color]
|
|
577
578
|
})));
|
|
578
579
|
});
|
|
579
580
|
return result;
|
|
@@ -621,7 +622,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
621
622
|
y1: yFrom,
|
|
622
623
|
x2: xTo,
|
|
623
624
|
y2: yTo,
|
|
624
|
-
stroke: colorset[color],
|
|
625
|
+
stroke: colorset['c' + color],
|
|
625
626
|
strokeWidth: strokeWidth,
|
|
626
627
|
markerEnd: "url(#".concat(arrowTipId, ")")
|
|
627
628
|
}));
|
|
@@ -652,15 +653,16 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
652
653
|
yTo += Math.sign(yFrom - yTo) * ARROW_TIP_OFFSET_FACTOR * squareSize;
|
|
653
654
|
var x = xTo * alpha + xFrom * (1 - alpha);
|
|
654
655
|
var y = yTo * alpha + yFrom * (1 - alpha);
|
|
656
|
+
var color = this.props.moveArrowColor;
|
|
655
657
|
return /*#__PURE__*/_react["default"].createElement("line", {
|
|
656
658
|
className: "kokopu-annotation kokopu-arrow",
|
|
657
659
|
x1: xFrom,
|
|
658
660
|
y1: yFrom,
|
|
659
661
|
x2: x,
|
|
660
662
|
y2: y,
|
|
661
|
-
stroke: colorset['
|
|
663
|
+
stroke: colorset['c' + color],
|
|
662
664
|
strokeWidth: squareSize * STROKE_THICKNESS_FACTOR,
|
|
663
|
-
markerEnd: "url(#".concat(this.getArrowTipId(
|
|
665
|
+
markerEnd: "url(#".concat(this.getArrowTipId(color), ")")
|
|
664
666
|
});
|
|
665
667
|
}
|
|
666
668
|
}, {
|
|
@@ -668,7 +670,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
668
670
|
value: function renderArrowTip(colorset, color) {
|
|
669
671
|
return /*#__PURE__*/_react["default"].createElement(_ArrowTip["default"], {
|
|
670
672
|
id: this.getArrowTipId(color),
|
|
671
|
-
color: colorset[color]
|
|
673
|
+
color: colorset['c' + color]
|
|
672
674
|
});
|
|
673
675
|
}
|
|
674
676
|
}, {
|
|
@@ -1114,7 +1116,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
1114
1116
|
/**
|
|
1115
1117
|
* Available colorsets for theming.
|
|
1116
1118
|
*
|
|
1117
|
-
* @returns {Object.<string, {w: string, b: string,
|
|
1119
|
+
* @returns {Object.<string, { w: string, b: string, cb: string, cg: string, cr: string, cy: string }>}
|
|
1118
1120
|
* @public
|
|
1119
1121
|
*/
|
|
1120
1122
|
|
|
@@ -1126,8 +1128,8 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
1126
1128
|
/**
|
|
1127
1129
|
* Available piecesets for theming.
|
|
1128
1130
|
*
|
|
1129
|
-
* @returns {Object.<string, {bb: string, bk: string, bn: string, bp: string, bq: string, br: string, bx: string,
|
|
1130
|
-
*
|
|
1131
|
+
* @returns {Object.<string, { bb: string, bk: string, bn: string, bp: string, bq: string, br: string, bx: string,
|
|
1132
|
+
* wb: string, wk: string, wn: string, wp: string, wq: string, wr: string, wx: string }>}
|
|
1131
1133
|
* @public
|
|
1132
1134
|
*/
|
|
1133
1135
|
|
|
@@ -1144,18 +1146,18 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
|
|
|
1144
1146
|
exports["default"] = Chessboard;
|
|
1145
1147
|
Chessboard.propTypes = {
|
|
1146
1148
|
/**
|
|
1147
|
-
* Displayed position. Can be a [kokopu.Position](https://kokopu.yo35.org/docs/Position.html) object,
|
|
1149
|
+
* Displayed position. Can be a [kokopu.Position](https://kokopu.yo35.org/docs/current/Position.html) object,
|
|
1148
1150
|
* a [FEN string](https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation),
|
|
1149
1151
|
* `'start'` (usual starting position), or `'empty'` (empty board).
|
|
1150
1152
|
*
|
|
1151
1153
|
* Optionally, the FEN string can be prefixed with `'variant:'`, `variant` corresponding to one of the
|
|
1152
|
-
* [game variant](https://kokopu.yo35.org/docs/global.html#GameVariant) supported by Kokopu. For instance:
|
|
1154
|
+
* [game variant](https://kokopu.yo35.org/docs/current/global.html#GameVariant) supported by Kokopu. For instance:
|
|
1153
1155
|
* `'chess960:nrkbqrbn/pppppppp/8/8/8/8/PPPPPPPP/NRKBQRBN w KQkq - 0 1'`.
|
|
1154
1156
|
*/
|
|
1155
1157
|
position: _propTypes["default"].oneOfType([_propTypes["default"].instanceOf(_kokopu["default"].Position), _propTypes["default"].string]),
|
|
1156
1158
|
|
|
1157
1159
|
/**
|
|
1158
|
-
* Displayed move (optional), defined either as a [kokopu.MoveDescriptor](https://kokopu.yo35.org/docs/MoveDescriptor.html) object
|
|
1160
|
+
* Displayed move (optional), defined either as a [kokopu.MoveDescriptor](https://kokopu.yo35.org/docs/current/MoveDescriptor.html) object
|
|
1159
1161
|
* or as a [SAN string](https://en.wikipedia.org/wiki/Algebraic_notation_(chess)) (e.g. `'Nf3'`). In both cases, it must represent
|
|
1160
1162
|
* a legal move in position defined in attribute `position`.
|
|
1161
1163
|
*/
|
|
@@ -1168,7 +1170,7 @@ Chessboard.propTypes = {
|
|
|
1168
1170
|
/**
|
|
1169
1171
|
* Square markers, defined as a "square -> color" struct (e.g. `{ e4: 'g', d5: 'r' }`) or as a comma-separated CSL string (e.g. `'Rd5,Ge4'`).
|
|
1170
1172
|
*/
|
|
1171
|
-
squareMarkers: _propTypes["default"].oneOfType([_propTypes["default"].objectOf(_propTypes["default"].oneOf(['g', 'r', 'y'])), _propTypes["default"].string]),
|
|
1173
|
+
squareMarkers: _propTypes["default"].oneOfType([_propTypes["default"].objectOf(_propTypes["default"].oneOf(['b', 'g', 'r', 'y'])), _propTypes["default"].string]),
|
|
1172
1174
|
|
|
1173
1175
|
/**
|
|
1174
1176
|
* Text markers, defined as a "square -> (symbol, color)" struct (e.g. `{ e4: { symbol: 'A', color: 'g' }, d5: { symbol: 'z', color: 'r' }}`)
|
|
@@ -1176,14 +1178,14 @@ Chessboard.propTypes = {
|
|
|
1176
1178
|
*/
|
|
1177
1179
|
textMarkers: _propTypes["default"].oneOfType([_propTypes["default"].objectOf(_propTypes["default"].shape({
|
|
1178
1180
|
symbol: _propTypes["default"].string.isRequired,
|
|
1179
|
-
color: _propTypes["default"].oneOf(['g', 'r', 'y']).isRequired
|
|
1181
|
+
color: _propTypes["default"].oneOf(['b', 'g', 'r', 'y']).isRequired
|
|
1180
1182
|
})), _propTypes["default"].string]),
|
|
1181
1183
|
|
|
1182
1184
|
/**
|
|
1183
1185
|
* Arrow markers, defined as a "squareFromSquareTo -> color" struct (e.g. `{ e2e4: 'g', g8f6: 'r', g8h6: 'y' }`)
|
|
1184
1186
|
* or as a comma-separated CAL string (e.g. `'Ge2e4,Rg8f6,Yg8h6'`).
|
|
1185
1187
|
*/
|
|
1186
|
-
arrowMarkers: _propTypes["default"].oneOfType([_propTypes["default"].objectOf(_propTypes["default"].oneOf(['g', 'r', 'y'])), _propTypes["default"].string]),
|
|
1188
|
+
arrowMarkers: _propTypes["default"].oneOfType([_propTypes["default"].objectOf(_propTypes["default"].oneOf(['b', 'g', 'r', 'y'])), _propTypes["default"].string]),
|
|
1187
1189
|
|
|
1188
1190
|
/**
|
|
1189
1191
|
* Whether the board is flipped (i.e. seen from Black's point of view) or not.
|
|
@@ -1205,6 +1207,11 @@ Chessboard.propTypes = {
|
|
|
1205
1207
|
*/
|
|
1206
1208
|
moveArrowVisible: _propTypes["default"].bool,
|
|
1207
1209
|
|
|
1210
|
+
/**
|
|
1211
|
+
* Color of the move arrow.
|
|
1212
|
+
*/
|
|
1213
|
+
moveArrowColor: _propTypes["default"].oneOf(['b', 'g', 'r', 'y']),
|
|
1214
|
+
|
|
1208
1215
|
/**
|
|
1209
1216
|
* Whether moves are animated or not.
|
|
1210
1217
|
*/
|
|
@@ -1252,7 +1259,7 @@ Chessboard.propTypes = {
|
|
|
1252
1259
|
/**
|
|
1253
1260
|
* Color of the edited arrow (only used if `interactionMode` is set to `'editArrows'`).
|
|
1254
1261
|
*/
|
|
1255
|
-
editedArrowColor: _propTypes["default"].oneOf(['g', 'r', 'y']),
|
|
1262
|
+
editedArrowColor: _propTypes["default"].oneOf(['b', 'g', 'r', 'y']),
|
|
1256
1263
|
|
|
1257
1264
|
/**
|
|
1258
1265
|
* Callback invoked when a piece is moved through drag&drop (only if `interactionMode` is set to `'movePieces'`).
|
|
@@ -1290,6 +1297,7 @@ Chessboard.defaultProps = {
|
|
|
1290
1297
|
squareSize: 40,
|
|
1291
1298
|
coordinateVisible: true,
|
|
1292
1299
|
moveArrowVisible: true,
|
|
1300
|
+
moveArrowColor: 'b',
|
|
1293
1301
|
animated: false,
|
|
1294
1302
|
colorset: 'original',
|
|
1295
1303
|
pieceset: 'cburnett'
|
package/dist/lib/Movetext.js
CHANGED
|
@@ -706,14 +706,14 @@ var Movetext = /*#__PURE__*/function (_React$Component) {
|
|
|
706
706
|
exports["default"] = Movetext;
|
|
707
707
|
Movetext.propTypes = {
|
|
708
708
|
/**
|
|
709
|
-
* Displayed position. Can be a [kokopu.Game](https://kokopu.yo35.org/docs/Game.html) object,
|
|
710
|
-
* a [kokopu.Database](https://kokopu.yo35.org/docs/Database.html) object,
|
|
709
|
+
* Displayed position. Can be a [kokopu.Game](https://kokopu.yo35.org/docs/current/Game.html) object,
|
|
710
|
+
* a [kokopu.Database](https://kokopu.yo35.org/docs/current/Database.html) object,
|
|
711
711
|
* or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation).
|
|
712
712
|
*/
|
|
713
713
|
game: _propTypes["default"].oneOfType([_propTypes["default"].instanceOf(_kokopu["default"].Game), _propTypes["default"].instanceOf(_kokopu["default"].Database), _propTypes["default"].string]),
|
|
714
714
|
|
|
715
715
|
/**
|
|
716
|
-
* Index of the game to display (only if attribute `game` is a [kokopu.Database](https://kokopu.yo35.org/docs/Database.html)
|
|
716
|
+
* Index of the game to display (only if attribute `game` is a [kokopu.Database](https://kokopu.yo35.org/docs/current/Database.html)
|
|
717
717
|
* or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation)): `0` for the first game of the database/PGN, `1` for the second one, etc.
|
|
718
718
|
* If omitted, the first game of the database/PGN is displayed.
|
|
719
719
|
*/
|
|
@@ -759,7 +759,7 @@ Movetext.propTypes = {
|
|
|
759
759
|
|
|
760
760
|
/**
|
|
761
761
|
* ID of the selected move (or `'start'` for the beginning of the main variation).
|
|
762
|
-
* Use [kokopu.Node#id](https://kokopu.yo35.org/docs/Node.html#id) to get the ID of a game move.
|
|
762
|
+
* Use [kokopu.Node#id](https://kokopu.yo35.org/docs/current/Node.html#id) to get the ID of a game move.
|
|
763
763
|
*/
|
|
764
764
|
selection: _propTypes["default"].string,
|
|
765
765
|
|
|
@@ -773,7 +773,7 @@ Movetext.propTypes = {
|
|
|
773
773
|
/**
|
|
774
774
|
* Callback invoked when the user selects a move (only if `interactionMode` is set to `'selectMove'`).
|
|
775
775
|
*
|
|
776
|
-
* @param {string?} nodeId ID of the selected move (as returned by [kokopu.Node#id](https://kokopu.yo35.org/docs/Node.html#id)),
|
|
776
|
+
* @param {string?} nodeId ID of the selected move (as returned by [kokopu.Node#id](https://kokopu.yo35.org/docs/current/Node.html#id)),
|
|
777
777
|
* `'start'` for the beginning of the main variation, or `undefined` if the user unselects the previously selected move.
|
|
778
778
|
* @param {string} evtOrigin Origin of the event. Can be:
|
|
779
779
|
* - `'key-first'`: the event has been triggered by the "go-to-first-move" key (aka. the home key),
|
|
@@ -29,42 +29,42 @@ var _default = {
|
|
|
29
29
|
original: {
|
|
30
30
|
b: '#b5876b',
|
|
31
31
|
w: '#f0dec7',
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
cb: '#04f',
|
|
33
|
+
cg: '#0e0',
|
|
34
|
+
cr: '#d00',
|
|
35
|
+
cy: '#db0'
|
|
36
36
|
},
|
|
37
37
|
gray: {
|
|
38
38
|
b: '#bbbbbb',
|
|
39
39
|
w: '#f8f8f8',
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
cb: '#04f',
|
|
41
|
+
cg: '#0a0',
|
|
42
|
+
cr: '#d00',
|
|
43
|
+
cy: '#a90'
|
|
44
44
|
},
|
|
45
45
|
scid: {
|
|
46
46
|
b: '#7389b6',
|
|
47
47
|
w: '#f3f3f3',
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
cb: '#04f',
|
|
49
|
+
cg: '#0e0',
|
|
50
|
+
cr: '#d00',
|
|
51
|
+
cy: '#db0'
|
|
52
52
|
},
|
|
53
53
|
wikipedia: {
|
|
54
54
|
b: '#d18b47',
|
|
55
55
|
w: '#ffce9e',
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
cb: '#04f',
|
|
57
|
+
cg: '#0e0',
|
|
58
|
+
cr: '#d00',
|
|
59
|
+
cy: '#db0'
|
|
60
60
|
},
|
|
61
61
|
xboard: {
|
|
62
62
|
b: '#77a26d',
|
|
63
63
|
w: '#c8c365',
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
cb: '#04f',
|
|
65
|
+
cg: '#0f0',
|
|
66
|
+
cr: '#d00',
|
|
67
|
+
cy: '#ff0'
|
|
68
68
|
},
|
|
69
69
|
|
|
70
70
|
/*
|
|
@@ -74,50 +74,50 @@ var _default = {
|
|
|
74
74
|
coral: {
|
|
75
75
|
b: 'rgb(112,162,163)',
|
|
76
76
|
w: 'rgb(177,228,185)',
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
cb: '#04f',
|
|
78
|
+
cg: '#080',
|
|
79
|
+
cr: '#d00',
|
|
80
|
+
cy: '#ff0'
|
|
81
81
|
},
|
|
82
82
|
dusk: {
|
|
83
83
|
b: 'rgb(112,102,119)',
|
|
84
84
|
w: 'rgb(204,183,174)',
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
cb: '#04f',
|
|
86
|
+
cg: '#3f3',
|
|
87
|
+
cr: '#f20',
|
|
88
|
+
cy: '#ff0'
|
|
89
89
|
},
|
|
90
90
|
emerald: {
|
|
91
91
|
b: 'rgb(111,143,114)',
|
|
92
92
|
w: 'rgb(173,189,143)',
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
cb: '#04f',
|
|
94
|
+
cg: '#6f6',
|
|
95
|
+
cr: '#d00',
|
|
96
|
+
cy: '#ff0'
|
|
97
97
|
},
|
|
98
98
|
marine: {
|
|
99
99
|
b: 'rgb(111,115,210)',
|
|
100
100
|
w: 'rgb(157,172,255)',
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
cb: '#04f',
|
|
102
|
+
cg: '#6f6',
|
|
103
|
+
cr: '#f50',
|
|
104
|
+
cy: '#ff0'
|
|
105
105
|
},
|
|
106
106
|
sandcastle: {
|
|
107
107
|
b: 'rgb(184,139,74)',
|
|
108
108
|
w: 'rgb(227,193,111)',
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
cb: '#04f',
|
|
110
|
+
cg: '#0c3',
|
|
111
|
+
cr: '#d02',
|
|
112
|
+
cy: '#ff0'
|
|
113
113
|
},
|
|
114
114
|
wheat: {
|
|
115
115
|
b: 'rgb(187,190,100)',
|
|
116
116
|
w: 'rgb(234,240,206)',
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
cb: '#04f',
|
|
118
|
+
cg: '#0c3',
|
|
119
|
+
cr: '#d00',
|
|
120
|
+
cy: '#ff3'
|
|
121
121
|
}
|
|
122
122
|
};
|
|
123
123
|
exports["default"] = _default;
|
package/dist/lib/impl/util.js
CHANGED
package/dist/lib/markers.js
CHANGED
|
@@ -75,8 +75,8 @@ function flattenTextMarkers(markers) {
|
|
|
75
75
|
/**
|
|
76
76
|
* Transform a set of arrow markers defined as a "squareFromSquareTo -> color" struct into a comma-separated string.
|
|
77
77
|
*
|
|
78
|
-
* @param {object} markers For example: `{ e2e4: 'g', g8f6: 'r', g8h6: '
|
|
79
|
-
* @returns {string} For example: `'Ge2e4,Rg8f6,
|
|
78
|
+
* @param {object} markers For example: `{ e2e4: 'g', g8f6: 'r', g8h6: 'b' }`
|
|
79
|
+
* @returns {string} For example: `'Ge2e4,Rg8f6,Bg8h6'`
|
|
80
80
|
*/
|
|
81
81
|
|
|
82
82
|
|
|
@@ -121,7 +121,7 @@ function parseMarkers(markers, tokenParser) {
|
|
|
121
121
|
|
|
122
122
|
function parseSquareMarkers(markers) {
|
|
123
123
|
return parseMarkers(markers, function (token) {
|
|
124
|
-
return /^([
|
|
124
|
+
return /^([BGRY])([a-h][1-8])$/.test(token) ? {
|
|
125
125
|
key: RegExp.$2,
|
|
126
126
|
value: RegExp.$1.toLowerCase()
|
|
127
127
|
} : undefined;
|
|
@@ -137,7 +137,7 @@ function parseSquareMarkers(markers) {
|
|
|
137
137
|
|
|
138
138
|
function parseTextMarkers(markers) {
|
|
139
139
|
return parseMarkers(markers, function (token) {
|
|
140
|
-
return /^([
|
|
140
|
+
return /^([BGRY])(?:([A-Za-z0-9])|\((plus|times|dot|circle)\))([a-h][1-8])$/.test(token) ? {
|
|
141
141
|
key: RegExp.$4,
|
|
142
142
|
value: {
|
|
143
143
|
symbol: RegExp.$2 || RegExp.$3,
|
|
@@ -149,14 +149,14 @@ function parseTextMarkers(markers) {
|
|
|
149
149
|
/**
|
|
150
150
|
* Parse a set of arrow markers defined as a comma-separated string into a "squareFromSquareTo -> color" struct.
|
|
151
151
|
*
|
|
152
|
-
* @param {string} markers For example: `'Ge2e4,Rg8f6,
|
|
153
|
-
* @returns {object} For example: `{ e2e4: 'g', g8f6: 'r', g8h6: '
|
|
152
|
+
* @param {string} markers For example: `'Ge2e4,Rg8f6,Bg8h6'`
|
|
153
|
+
* @returns {object} For example: `{ e2e4: 'g', g8f6: 'r', g8h6: 'b' }`
|
|
154
154
|
*/
|
|
155
155
|
|
|
156
156
|
|
|
157
157
|
function parseArrowMarkers(markers) {
|
|
158
158
|
return parseMarkers(markers, function (token) {
|
|
159
|
-
return /^([
|
|
159
|
+
return /^([BGRY])([a-h][1-8][a-h][1-8])$/.test(token) ? {
|
|
160
160
|
key: RegExp.$2,
|
|
161
161
|
value: RegExp.$1.toLowerCase()
|
|
162
162
|
} : undefined;
|
|
@@ -165,9 +165,10 @@ export default class Page extends React.Component {
|
|
|
165
165
|
let colorset = Chessboard.colorsets()['original'];
|
|
166
166
|
return (
|
|
167
167
|
<ToggleButtonGroup value={this.state[attributeName]} exclusive size="small" onChange={(_, newColor) => this.setIfNonNull(attributeName, newColor)}>
|
|
168
|
-
<ToggleButton className="kokopu-fixTextTransform" value="
|
|
169
|
-
<ToggleButton className="kokopu-fixTextTransform" value="
|
|
170
|
-
<ToggleButton className="kokopu-fixTextTransform" value="
|
|
168
|
+
<ToggleButton className="kokopu-fixTextTransform" value="b">{this.renderColorButtonLabel(colorset.cb)}</ToggleButton>
|
|
169
|
+
<ToggleButton className="kokopu-fixTextTransform" value="g">{this.renderColorButtonLabel(colorset.cg)}</ToggleButton>
|
|
170
|
+
<ToggleButton className="kokopu-fixTextTransform" value="r">{this.renderColorButtonLabel(colorset.cr)}</ToggleButton>
|
|
171
|
+
<ToggleButton className="kokopu-fixTextTransform" value="y">{this.renderColorButtonLabel(colorset.cy)}</ToggleButton>
|
|
171
172
|
</ToggleButtonGroup>
|
|
172
173
|
);
|
|
173
174
|
}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
import React from 'react';
|
|
24
24
|
import kokopu from 'kokopu';
|
|
25
25
|
|
|
26
|
-
import { Chessboard } from '../../src/index';
|
|
26
|
+
import { Chessboard, ArrowMarkerIcon } from '../../src/index';
|
|
27
27
|
import { buildComponentDemoCode } from './util';
|
|
28
28
|
|
|
29
29
|
import Box from '@mui/material/Box';
|
|
@@ -33,9 +33,13 @@ import FormControlLabel from '@mui/material/FormControlLabel';
|
|
|
33
33
|
import Stack from '@mui/material/Stack';
|
|
34
34
|
import Switch from '@mui/material/Switch';
|
|
35
35
|
import TextField from '@mui/material/TextField';
|
|
36
|
+
import ToggleButton from '@mui/material/ToggleButton';
|
|
37
|
+
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
|
|
36
38
|
|
|
37
39
|
import './demo.css';
|
|
38
40
|
|
|
41
|
+
const COLOR_ICON_SIZE = 16;
|
|
42
|
+
|
|
39
43
|
|
|
40
44
|
export default class Page extends React.Component {
|
|
41
45
|
|
|
@@ -49,6 +53,7 @@ export default class Page extends React.Component {
|
|
|
49
53
|
positionAfter: positionAfter, // non-null only if a valid move has been played
|
|
50
54
|
flipped: false,
|
|
51
55
|
moveArrowVisible: true,
|
|
56
|
+
moveArrowColor: 'b',
|
|
52
57
|
animated: true,
|
|
53
58
|
editedMove: 'Nf6',
|
|
54
59
|
playedMove: 'e4',
|
|
@@ -71,12 +76,13 @@ export default class Page extends React.Component {
|
|
|
71
76
|
<FormControlLabel label="Flip"
|
|
72
77
|
control={<Switch checked={this.state.flipped} onChange={() => this.set('flipped', !this.state.flipped)} color="primary" />}
|
|
73
78
|
/>
|
|
74
|
-
<FormControlLabel label="Show move arrow" disabled={!this.state.positionAfter}
|
|
75
|
-
control={<Switch checked={this.state.moveArrowVisible} onChange={() => this.set('moveArrowVisible', !this.state.moveArrowVisible)} color="primary" />}
|
|
76
|
-
/>
|
|
77
79
|
<FormControlLabel label="Animation" disabled={!this.state.positionAfter}
|
|
78
80
|
control={<Switch checked={this.state.animated} onChange={() => this.set('animated', !this.state.animated)} color="primary" />}
|
|
79
81
|
/>
|
|
82
|
+
<FormControlLabel label="Show move arrow" disabled={!this.state.positionAfter}
|
|
83
|
+
control={<Switch checked={this.state.moveArrowVisible} onChange={() => this.set('moveArrowVisible', !this.state.moveArrowVisible)} color="primary" />}
|
|
84
|
+
/>
|
|
85
|
+
{this.renderColorSelector()}
|
|
80
86
|
</Stack>
|
|
81
87
|
<Stack direction="row" spacing={2} alignItems="center">
|
|
82
88
|
<TextField label="Move" variant="standard" value={this.state.editedMove} onChange={evt => this.set('editedMove', evt.target.value)} />
|
|
@@ -89,6 +95,21 @@ export default class Page extends React.Component {
|
|
|
89
95
|
</>);
|
|
90
96
|
}
|
|
91
97
|
|
|
98
|
+
renderColorSelector() {
|
|
99
|
+
if (!this.state.moveArrowVisible) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
let colorset = Chessboard.colorsets()['original'];
|
|
103
|
+
return (
|
|
104
|
+
<ToggleButtonGroup value={this.state.moveArrowColor} exclusive size="small" disabled={!this.state.positionAfter} onChange={(_, newColor) => this.setMoveColor(newColor)}>
|
|
105
|
+
<ToggleButton className="kokopu-fixOpacity" value="b"><ArrowMarkerIcon size={COLOR_ICON_SIZE} color={colorset.cb} /></ToggleButton>
|
|
106
|
+
<ToggleButton className="kokopu-fixOpacity" value="g"><ArrowMarkerIcon size={COLOR_ICON_SIZE} color={colorset.cg} /></ToggleButton>
|
|
107
|
+
<ToggleButton className="kokopu-fixOpacity" value="r"><ArrowMarkerIcon size={COLOR_ICON_SIZE} color={colorset.cr} /></ToggleButton>
|
|
108
|
+
<ToggleButton className="kokopu-fixOpacity" value="y"><ArrowMarkerIcon size={COLOR_ICON_SIZE} color={colorset.cy} /></ToggleButton>
|
|
109
|
+
</ToggleButtonGroup>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
92
113
|
renderChessboard() {
|
|
93
114
|
return (
|
|
94
115
|
<Box>
|
|
@@ -97,6 +118,7 @@ export default class Page extends React.Component {
|
|
|
97
118
|
move={this.state.playedMove}
|
|
98
119
|
flipped={this.state.flipped}
|
|
99
120
|
moveArrowVisible={this.state.moveArrowVisible}
|
|
121
|
+
moveArrowColor={this.state.moveArrowColor}
|
|
100
122
|
animated={this.state.animated}
|
|
101
123
|
/>
|
|
102
124
|
</Box>
|
|
@@ -112,8 +134,11 @@ export default class Page extends React.Component {
|
|
|
112
134
|
if (this.state.flipped) {
|
|
113
135
|
attributes.push('flipped');
|
|
114
136
|
}
|
|
115
|
-
attributes.push(`moveArrowVisible={${this.state.moveArrowVisible}}`);
|
|
116
137
|
attributes.push(`animated={${this.state.animated}}`);
|
|
138
|
+
attributes.push(`moveArrowVisible={${this.state.moveArrowVisible}}`);
|
|
139
|
+
if (this.state.moveArrowVisible) {
|
|
140
|
+
attributes.push(`moveArrowColor={${this.state.moveArrowColor}}`);
|
|
141
|
+
}
|
|
117
142
|
return <pre className="kokopu-demoCode">{buildComponentDemoCode('Chessboard', attributes)}</pre>;
|
|
118
143
|
}
|
|
119
144
|
|
|
@@ -123,6 +148,12 @@ export default class Page extends React.Component {
|
|
|
123
148
|
this.setState(newState);
|
|
124
149
|
}
|
|
125
150
|
|
|
151
|
+
setMoveColor(newValue) {
|
|
152
|
+
if (newValue !== null) {
|
|
153
|
+
this.set('moveArrowColor', newValue);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
126
157
|
setPosition(newPosition) {
|
|
127
158
|
let newState = {};
|
|
128
159
|
newState.position = newPosition;
|
package/doc_src/demo/demo.css
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -24,17 +24,17 @@ import React from 'react';
|
|
|
24
24
|
import testApp from './common/test_app';
|
|
25
25
|
import { Chessboard } from '../src/index';
|
|
26
26
|
|
|
27
|
-
let squareMarkers1 = '
|
|
28
|
-
let arrowMarkers1 = 'Gb8c6,Re8f6,Yf8g6';
|
|
29
|
-
let textMarkers1 = 'GAf1,Gaf2,RZg1,Rzg2,Y2h1,Y8h2';
|
|
27
|
+
let squareMarkers1 = 'Ba1,Ba2,Gb1,Gb2,Rc1,Rc2,Yd1,Yd2';
|
|
28
|
+
let arrowMarkers1 = 'Ba8b6,Gb8c6,Re8f6,Yf8g6';
|
|
29
|
+
let textMarkers1 = 'B(circle)e1,B(plus)e2,GAf1,Gaf2,RZg1,Rzg2,Y2h1,Y8h2';
|
|
30
30
|
|
|
31
|
-
let squareMarkers2 = { e4: 'g', g5: 'r', g1: 'y' };
|
|
32
|
-
let arrowMarkers2 = { c3a2: '
|
|
33
|
-
let textMarkers2 = { g3: { symbol: 'H', color: 'r' }, g5: { symbol: 'M', color: 'g' } };
|
|
31
|
+
let squareMarkers2 = { e4: 'g', g5: 'r', g1: 'y', h4: 'b' };
|
|
32
|
+
let arrowMarkers2 = { c3a2: 'b', c4a4: 'g', c5a6: 'r', c6a8: 'y', d6c8: 'b', e6e8: 'g', f6g8: 'r' };
|
|
33
|
+
let textMarkers2 = { g3: { symbol: 'H', color: 'r' }, g5: { symbol: 'M', color: 'g' }, h4: { symbol: 'times', color: 'y' } };
|
|
34
34
|
|
|
35
|
-
let squareMarkers3 = { b5: 'r', e4: 'g', h5: 'y' };
|
|
35
|
+
let squareMarkers3 = { b5: 'r', e4: 'g', h5: 'y', e2: 'b' };
|
|
36
36
|
let arrowMarkers3 = { d1h5: 'g', a5f4: 'r', c7c3: 'y', g7g7: 'g' };
|
|
37
|
-
let textMarkers3 = 'G5c6,R(plus)a1,G(times)b1,
|
|
37
|
+
let textMarkers3 = 'G5c6,R(plus)a1,G(times)b1,B(dot)a2,Y(circle)b2';
|
|
38
38
|
|
|
39
39
|
testApp([ /* eslint-disable react/jsx-key */
|
|
40
40
|
<Chessboard squareMarkers={squareMarkers1} arrowMarkers={arrowMarkers1} textMarkers={textMarkers1} flipped={false} coordinateVisible={true} />,
|
|
@@ -33,9 +33,9 @@ testApp([ /* eslint-disable react/jsx-key */
|
|
|
33
33
|
<Chessboard move="Nf3" moveArrowVisible={false} animated={false} />,
|
|
34
34
|
<Chessboard move="Nf4" animated={false} />,
|
|
35
35
|
<Chessboard position="rnbqkbnr/pppp1ppp/4p3/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2" move="Bb4+" moveArrowVisible={true} flipped={true} animated={false} />,
|
|
36
|
-
<Chessboard position={pos} move={move} animated={false} />,
|
|
37
|
-
<Chessboard position="r3k2r/pppppppp/8/8/8/8/PPPPPPPP/R3K2R b KQkq - 0 1" move="O-O-O" animated={false} />,
|
|
38
|
-
<Chessboard position="rnbqkbnr/ppp1p1pp/8/3pPp2/8/8/PPPP1PPP/RNBQKBNR w KQkq f6 0 3" move="exf6" animated={false} />,
|
|
39
|
-
<Chessboard position="8/8/8/1K6/8/4k3/1p6/8 b - - 0 1" move="b1=R+" animated={false} />,
|
|
36
|
+
<Chessboard position={pos} move={move} animated={false} moveArrowColor="g" />,
|
|
37
|
+
<Chessboard position="r3k2r/pppppppp/8/8/8/8/PPPPPPPP/R3K2R b KQkq - 0 1" move="O-O-O" animated={false} moveArrowColor="r" />,
|
|
38
|
+
<Chessboard position="rnbqkbnr/ppp1p1pp/8/3pPp2/8/8/PPPP1PPP/RNBQKBNR w KQkq f6 0 3" move="exf6" animated={false} moveArrowColor="y" />,
|
|
39
|
+
<Chessboard position="8/8/8/1K6/8/4k3/1p6/8 b - - 0 1" move="b1=R+" animated={false} moveArrowColor="b" />,
|
|
40
40
|
<Chessboard move={42} animated={false} />,
|
|
41
41
|
]); /* eslint-enable react/jsx-key */
|
|
@@ -30,8 +30,8 @@ let mv1 = 'Ba5';
|
|
|
30
30
|
let pos2 = 'start';
|
|
31
31
|
let mv2 = 'e4';
|
|
32
32
|
|
|
33
|
-
let sm = '
|
|
34
|
-
let am = 'Gb1b3,Rc1c3,Yd1d3';
|
|
33
|
+
let sm = 'Ba8,Ba7,Gb8,Gb7,Rc8,Rc7,Yd8,Yd7';
|
|
34
|
+
let am = 'Ba1a3,Gb1b3,Rc1c3,Yd1d3';
|
|
35
35
|
|
|
36
36
|
testApp([ /* eslint-disable react/jsx-key */
|
|
37
37
|
<Chessboard position={pos1} move={mv1} squareMarkers={sm} arrowMarkers={am} animated={false} />,
|
|
File without changes
|