kokopu-react 3.3.0 → 3.3.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.
Files changed (441) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/lib/chessboard/BoardProperties.d.ts +1 -1
  3. package/dist/lib/chessboard/BoardProperties.js +1 -1
  4. package/dist/lib/chessboard/Chessboard.css +1 -1
  5. package/dist/lib/chessboard/Chessboard.d.ts +3 -3
  6. package/dist/lib/chessboard/Chessboard.js +4 -3
  7. package/dist/lib/chessboard/Chessboard.js.map +1 -1
  8. package/dist/lib/chessboard/ChessboardImpl.d.ts +1 -1
  9. package/dist/lib/chessboard/ChessboardImpl.js +2 -2
  10. package/dist/lib/chessboard/ChessboardImpl.js.map +1 -1
  11. package/dist/lib/chessboard/Draggable.d.ts +1 -1
  12. package/dist/lib/chessboard/Draggable.js +1 -1
  13. package/dist/lib/chessboard/Draggable.js.map +1 -1
  14. package/dist/lib/chessboard/Motion.d.ts +1 -1
  15. package/dist/lib/chessboard/Motion.js +2 -2
  16. package/dist/lib/chessboard/Motion.js.map +1 -1
  17. package/dist/lib/chessboard/colorsets.d.ts +1 -1
  18. package/dist/lib/chessboard/colorsets.js +1 -1
  19. package/dist/lib/chessboard/piecesets.d.ts +1 -1
  20. package/dist/lib/chessboard/piecesets.js +1 -1
  21. package/dist/lib/errorbox/ErrorBox.css +1 -1
  22. package/dist/lib/errorbox/ErrorBox.d.ts +1 -1
  23. package/dist/lib/errorbox/ErrorBox.js +1 -1
  24. package/dist/lib/errorbox/parsing.d.ts +5 -4
  25. package/dist/lib/errorbox/parsing.js +1 -1
  26. package/dist/lib/exception.d.ts +1 -1
  27. package/dist/lib/exception.js +1 -1
  28. package/dist/lib/i18n.d.ts +1 -1
  29. package/dist/lib/i18n.js +3 -3
  30. package/dist/lib/i18n.js.map +1 -1
  31. package/dist/lib/icons/AnnotationSymbolShape.css +1 -1
  32. package/dist/lib/icons/AnnotationSymbolShape.d.ts +1 -1
  33. package/dist/lib/icons/AnnotationSymbolShape.js +1 -1
  34. package/dist/lib/icons/ArrowMarkerIcon.d.ts +1 -1
  35. package/dist/lib/icons/ArrowMarkerIcon.js +1 -1
  36. package/dist/lib/icons/ArrowMarkerIcon.js.map +1 -1
  37. package/dist/lib/icons/ArrowTip.d.ts +1 -1
  38. package/dist/lib/icons/ArrowTip.js +1 -1
  39. package/dist/lib/icons/ChessPieceIcon.d.ts +2 -5
  40. package/dist/lib/icons/ChessPieceIcon.js +2 -6
  41. package/dist/lib/icons/ChessPieceIcon.js.map +1 -1
  42. package/dist/lib/icons/SquareMarkerIcon.d.ts +2 -5
  43. package/dist/lib/icons/SquareMarkerIcon.js +2 -6
  44. package/dist/lib/icons/SquareMarkerIcon.js.map +1 -1
  45. package/dist/lib/icons/TextMarkerIcon.d.ts +2 -5
  46. package/dist/lib/icons/TextMarkerIcon.js +2 -6
  47. package/dist/lib/icons/TextMarkerIcon.js.map +1 -1
  48. package/dist/lib/icons/arrow.css +1 -1
  49. package/dist/lib/index.d.ts +1 -1
  50. package/dist/lib/index.js +1 -1
  51. package/dist/lib/movetext/Movetext.css +1 -1
  52. package/dist/lib/movetext/Movetext.d.ts +1 -1
  53. package/dist/lib/movetext/Movetext.js +1 -1
  54. package/dist/lib/movetext/Movetext.js.map +1 -1
  55. package/dist/lib/movetext/MovetextImpl.d.ts +1 -1
  56. package/dist/lib/movetext/MovetextImpl.js +5 -4
  57. package/dist/lib/movetext/MovetextImpl.js.map +1 -1
  58. package/dist/lib/movetext/fonts.css +1 -1
  59. package/dist/lib/movetext/htmlFilter.d.ts +1 -1
  60. package/dist/lib/movetext/htmlFilter.js +2 -2
  61. package/dist/lib/movetext/htmlFilter.js.map +1 -1
  62. package/dist/lib/movetext/moveFormatter.d.ts +1 -1
  63. package/dist/lib/movetext/moveFormatter.js +1 -1
  64. package/dist/lib/navigationboard/NavigationBoard.d.ts +2 -2
  65. package/dist/lib/navigationboard/NavigationBoard.js +3 -3
  66. package/dist/lib/navigationboard/NavigationBoard.js.map +1 -1
  67. package/dist/lib/navigationboard/NavigationButton.d.ts +1 -1
  68. package/dist/lib/navigationboard/NavigationButton.js +1 -1
  69. package/dist/lib/navigationboard/NavigationField.css +1 -1
  70. package/dist/lib/navigationboard/NavigationField.d.ts +1 -1
  71. package/dist/lib/navigationboard/NavigationField.js +2 -2
  72. package/dist/lib/navigationboard/NavigationField.js.map +1 -1
  73. package/dist/lib/navigationboard/NavigationToolbar.css +1 -1
  74. package/dist/lib/navigationboard/NavigationToolbar.d.ts +1 -1
  75. package/dist/lib/navigationboard/NavigationToolbar.js +1 -1
  76. package/dist/lib/navigationboard/NavigationToolbar.js.map +1 -1
  77. package/dist/lib/navigationboard/iconPaths.d.ts +1 -1
  78. package/dist/lib/navigationboard/iconPaths.js +1 -1
  79. package/dist/lib/sanitization.d.ts +1 -1
  80. package/dist/lib/sanitization.js +1 -1
  81. package/dist/lib/types.d.ts +1 -1
  82. package/dist/lib/types.js +1 -1
  83. package/dist/lib/util.d.ts +1 -1
  84. package/dist/lib/util.js +3 -3
  85. package/dist/lib/util.js.map +1 -1
  86. package/doc_src/demo/NavigationBoardWithMoveText.txt +19 -0
  87. package/doc_src/demo/PageChessboardBase.tsx +58 -52
  88. package/doc_src/demo/PageChessboardInteraction.tsx +79 -64
  89. package/doc_src/demo/PageChessboardMove.tsx +36 -31
  90. package/doc_src/demo/PageChessboardSmallScreens.tsx +4 -4
  91. package/doc_src/demo/PageMovetextBase.tsx +92 -82
  92. package/doc_src/demo/PageMovetextInteraction.tsx +28 -28
  93. package/doc_src/demo/PageNavigationBoardBase.tsx +64 -56
  94. package/doc_src/demo/PageNavigationBoardUncontrolledVsControlled.tsx +26 -20
  95. package/doc_src/demo/PageSynchroNavigationBoardMovetext.tsx +115 -0
  96. package/doc_src/demo/decs.d.ts +6 -1
  97. package/doc_src/demo/demo.css +1 -1
  98. package/doc_src/demo/util.ts +1 -1
  99. package/doc_src/theming/LogoRenderer.js +9 -10
  100. package/doc_src/theming/theming.css +1 -1
  101. package/package.json +32 -30
  102. package/scripts/doc.styleguide.config.js +3 -2
  103. package/scripts/docker-compose.yml +1 -3
  104. package/scripts/test-graphic.webpack.config.js +1 -1
  105. package/scripts/test-headless.webpack.config.js +1 -1
  106. package/src/chessboard/BoardProperties.ts +14 -14
  107. package/src/chessboard/Chessboard.css +1 -1
  108. package/src/chessboard/Chessboard.tsx +44 -40
  109. package/src/chessboard/ChessboardImpl.tsx +57 -40
  110. package/src/chessboard/Draggable.tsx +17 -17
  111. package/src/chessboard/Motion.tsx +5 -5
  112. package/src/chessboard/colorsets.ts +1 -1
  113. package/src/chessboard/piecesets.ts +1 -1
  114. package/src/decs.d.ts +1 -1
  115. package/src/errorbox/ErrorBox.css +1 -1
  116. package/src/errorbox/ErrorBox.tsx +6 -6
  117. package/src/errorbox/parsing.tsx +7 -7
  118. package/src/exception.ts +1 -1
  119. package/src/i18n.ts +3 -3
  120. package/src/icons/AnnotationSymbolShape.css +1 -1
  121. package/src/icons/AnnotationSymbolShape.tsx +6 -6
  122. package/src/icons/ArrowMarkerIcon.tsx +9 -5
  123. package/src/icons/ArrowTip.tsx +3 -3
  124. package/src/icons/ChessPieceIcon.tsx +5 -12
  125. package/src/icons/SquareMarkerIcon.tsx +4 -11
  126. package/src/icons/TextMarkerIcon.tsx +5 -12
  127. package/src/icons/arrow.css +1 -1
  128. package/src/index.ts +1 -1
  129. package/src/movetext/Movetext.css +1 -1
  130. package/src/movetext/Movetext.tsx +13 -12
  131. package/src/movetext/MovetextImpl.tsx +36 -30
  132. package/src/movetext/fonts.css +1 -1
  133. package/src/movetext/htmlFilter.tsx +5 -5
  134. package/src/movetext/moveFormatter.tsx +1 -1
  135. package/src/navigationboard/NavigationBoard.tsx +57 -52
  136. package/src/navigationboard/NavigationButton.ts +5 -5
  137. package/src/navigationboard/NavigationField.css +1 -1
  138. package/src/navigationboard/NavigationField.tsx +8 -8
  139. package/src/navigationboard/NavigationToolbar.css +1 -1
  140. package/src/navigationboard/NavigationToolbar.tsx +18 -14
  141. package/src/navigationboard/iconPaths.ts +1 -1
  142. package/src/sanitization.ts +1 -1
  143. package/src/types.ts +27 -27
  144. package/src/util.ts +3 -3
  145. package/test/01_types.js +84 -62
  146. package/test/02_chessboard_util.js +3 -1
  147. package/test/03_error_box_graphic.js +2 -2
  148. package/test/04_icons_graphic.js +1 -1
  149. package/test/05_chessboard_graphic.js +1 -1
  150. package/test/06_chessboard_animation.js +1 -1
  151. package/test/07_chessboard_interaction.js +2 -3
  152. package/test/08_chessboard_play_moves.js +1 -1
  153. package/test/09_chessboard_small_screens.js +1 -1
  154. package/test/10_movetext_graphic.js +1 -1
  155. package/test/11_movetext_interaction.js +1 -1
  156. package/test/12_navigation_board_base.js +1 -1
  157. package/test/13_navigation_board_graphic.js +4 -4
  158. package/test/14_navigation_board_autoplay.js +1 -1
  159. package/test/common/graphic.js +12 -12
  160. package/test/graphic_references/03_error_box_graphic/base/cut_beginning_of_text.png +0 -0
  161. package/test/graphic_references/03_error_box_graphic/base/cut_end_of_text.png +0 -0
  162. package/test/graphic_references/03_error_box_graphic/base/cut_on_line_breaks.png +0 -0
  163. package/test/graphic_references/03_error_box_graphic/base/error_index_not_integer.png +0 -0
  164. package/test/graphic_references/03_error_box_graphic/base/full.png +0 -0
  165. package/test/graphic_references/03_error_box_graphic/base/minimal.png +0 -0
  166. package/test/graphic_references/03_error_box_graphic/base/missing_error_index.png +0 -0
  167. package/test/graphic_references/03_error_box_graphic/base/missing_error_text.png +0 -0
  168. package/test/graphic_references/03_error_box_graphic/base/negative_error_index.png +0 -0
  169. package/test/graphic_references/03_error_box_graphic/base/single_character_text.png +0 -0
  170. package/test/graphic_references/03_error_box_graphic/base/too_large_error_index.png +0 -0
  171. package/test/graphic_references/03_error_box_graphic/localization/default.png +0 -0
  172. package/test/graphic_references/04_icons_graphic/chess_piece/customized_pieceset.png +0 -0
  173. package/test/graphic_references/04_icons_graphic/chess_piece/invalid_multiple_pieces.png +0 -0
  174. package/test/graphic_references/04_icons_graphic/chess_piece/invalid_pieceset.png +0 -0
  175. package/test/graphic_references/04_icons_graphic/chess_piece/invalid_single_piece.png +0 -0
  176. package/test/graphic_references/04_icons_graphic/chess_piece/invalid_size.png +0 -0
  177. package/test/graphic_references/04_icons_graphic/chess_piece/multiple_pieces.png +0 -0
  178. package/test/graphic_references/04_icons_graphic/chess_piece/single_piece.png +0 -0
  179. package/test/graphic_references/04_icons_graphic/marker/colorized_arrow.png +0 -0
  180. package/test/graphic_references/04_icons_graphic/marker/colorized_square.png +0 -0
  181. package/test/graphic_references/04_icons_graphic/marker/colorized_symbol.png +0 -0
  182. package/test/graphic_references/04_icons_graphic/marker/colorized_text.png +0 -0
  183. package/test/graphic_references/04_icons_graphic/marker/default_arrow.png +0 -0
  184. package/test/graphic_references/04_icons_graphic/marker/default_square.png +0 -0
  185. package/test/graphic_references/04_icons_graphic/marker/default_text.png +0 -0
  186. package/test/graphic_references/04_icons_graphic/marker/invalid_arrow_size.png +0 -0
  187. package/test/graphic_references/04_icons_graphic/marker/invalid_square_size.png +0 -0
  188. package/test/graphic_references/04_icons_graphic/marker/invalid_symbol.png +0 -0
  189. package/test/graphic_references/04_icons_graphic/marker/invalid_text_size.png +0 -0
  190. package/test/graphic_references/04_icons_graphic/marker/wrapped_arrow.png +0 -0
  191. package/test/graphic_references/04_icons_graphic/marker/wrapped_square.png +0 -0
  192. package/test/graphic_references/04_icons_graphic/marker/wrapped_symbol.png +0 -0
  193. package/test/graphic_references/04_icons_graphic/marker/wrapped_text.png +0 -0
  194. package/test/graphic_references/05_chessboard_graphic/annotations/overlap.png +0 -0
  195. package/test/graphic_references/05_chessboard_graphic/annotations/overlap_and_flip.png +0 -0
  196. package/test/graphic_references/05_chessboard_graphic/annotations/with_coordinates.png +0 -0
  197. package/test/graphic_references/05_chessboard_graphic/annotations/with_coordinates_and_flip.png +0 -0
  198. package/test/graphic_references/05_chessboard_graphic/annotations/without_coordinates.png +0 -0
  199. package/test/graphic_references/05_chessboard_graphic/annotations/without_coordinates_and_flip.png +0 -0
  200. package/test/graphic_references/05_chessboard_graphic/base/default.png +0 -0
  201. package/test/graphic_references/05_chessboard_graphic/base/empty.png +0 -0
  202. package/test/graphic_references/05_chessboard_graphic/base/from_fen.png +0 -0
  203. package/test/graphic_references/05_chessboard_graphic/base/from_kokopu_object.png +0 -0
  204. package/test/graphic_references/05_chessboard_graphic/base/parsing_error.png +0 -0
  205. package/test/graphic_references/05_chessboard_graphic/base/wrong_position_type.png +0 -0
  206. package/test/graphic_references/05_chessboard_graphic/chess_variants/chess960.png +0 -0
  207. package/test/graphic_references/05_chessboard_graphic/chess_variants/chess960_with_move.png +0 -0
  208. package/test/graphic_references/05_chessboard_graphic/chess_variants/invalid_variant.png +0 -0
  209. package/test/graphic_references/05_chessboard_graphic/chess_variants/invalid_variant_with_fen.png +0 -0
  210. package/test/graphic_references/05_chessboard_graphic/chess_variants/special_code.png +0 -0
  211. package/test/graphic_references/05_chessboard_graphic/chess_variants/variant_with_std_initial_position.png +0 -0
  212. package/test/graphic_references/05_chessboard_graphic/chess_variants/variant_without_std_initial_position.png +0 -0
  213. package/test/graphic_references/05_chessboard_graphic/flipped/default.png +0 -0
  214. package/test/graphic_references/05_chessboard_graphic/flipped/empty.png +0 -0
  215. package/test/graphic_references/05_chessboard_graphic/flipped/from_fen.png +0 -0
  216. package/test/graphic_references/05_chessboard_graphic/flipped/from_kokopu_object.png +0 -0
  217. package/test/graphic_references/05_chessboard_graphic/flipped/parsing_error.png +0 -0
  218. package/test/graphic_references/05_chessboard_graphic/move/capture.png +0 -0
  219. package/test/graphic_references/05_chessboard_graphic/move/castling_move.png +0 -0
  220. package/test/graphic_references/05_chessboard_graphic/move/default.png +0 -0
  221. package/test/graphic_references/05_chessboard_graphic/move/en-passant.png +0 -0
  222. package/test/graphic_references/05_chessboard_graphic/move/illegal_null-move.png +0 -0
  223. package/test/graphic_references/05_chessboard_graphic/move/no_move_arrow.png +0 -0
  224. package/test/graphic_references/05_chessboard_graphic/move/null-move.png +0 -0
  225. package/test/graphic_references/05_chessboard_graphic/move/parsing_error.png +0 -0
  226. package/test/graphic_references/05_chessboard_graphic/move/promotion.png +0 -0
  227. package/test/graphic_references/05_chessboard_graphic/move/with_forced_move_arrow_and_flip.png +0 -0
  228. package/test/graphic_references/05_chessboard_graphic/move/wrong_move_arrow_color_type.png +0 -0
  229. package/test/graphic_references/05_chessboard_graphic/move/wrong_move_type.png +0 -0
  230. package/test/graphic_references/05_chessboard_graphic/theme/custom_1.png +0 -0
  231. package/test/graphic_references/05_chessboard_graphic/theme/custom_2.png +0 -0
  232. package/test/graphic_references/05_chessboard_graphic/theme/custom_3.png +0 -0
  233. package/test/graphic_references/05_chessboard_graphic/theme/custom_4.png +0 -0
  234. package/test/graphic_references/05_chessboard_graphic/theme/custom_5.png +0 -0
  235. package/test/graphic_references/05_chessboard_graphic/theme/custom_6.png +0 -0
  236. package/test/graphic_references/05_chessboard_graphic/theme/default.png +0 -0
  237. package/test/graphic_references/05_chessboard_graphic/theme/large.png +0 -0
  238. package/test/graphic_references/05_chessboard_graphic/theme/small.png +0 -0
  239. package/test/graphic_references/05_chessboard_graphic/theme/wrong_colorset.png +0 -0
  240. package/test/graphic_references/05_chessboard_graphic/theme/wrong_pieceset.png +0 -0
  241. package/test/graphic_references/05_chessboard_graphic/theme/wrong_square_size_type.png +0 -0
  242. package/test/graphic_references/06_chessboard_animation/base_1/capture.png +0 -0
  243. package/test/graphic_references/06_chessboard_animation/base_1/castling_move.png +0 -0
  244. package/test/graphic_references/06_chessboard_animation/base_1/en-passant.png +0 -0
  245. package/test/graphic_references/06_chessboard_animation/base_1/move_1.png +0 -0
  246. package/test/graphic_references/06_chessboard_animation/base_1/move_2.png +0 -0
  247. package/test/graphic_references/06_chessboard_animation/base_1/promotion.png +0 -0
  248. package/test/graphic_references/06_chessboard_animation/base_2/capture.png +0 -0
  249. package/test/graphic_references/06_chessboard_animation/base_2/castling_move.png +0 -0
  250. package/test/graphic_references/06_chessboard_animation/base_2/en-passant.png +0 -0
  251. package/test/graphic_references/06_chessboard_animation/base_2/move_1.png +0 -0
  252. package/test/graphic_references/06_chessboard_animation/base_2/move_2.png +0 -0
  253. package/test/graphic_references/06_chessboard_animation/base_2/promotion.png +0 -0
  254. package/test/graphic_references/06_chessboard_animation/base_3/capture.png +0 -0
  255. package/test/graphic_references/06_chessboard_animation/base_3/castling_move.png +0 -0
  256. package/test/graphic_references/06_chessboard_animation/base_3/en-passant.png +0 -0
  257. package/test/graphic_references/06_chessboard_animation/base_3/move_1.png +0 -0
  258. package/test/graphic_references/06_chessboard_animation/base_3/move_2.png +0 -0
  259. package/test/graphic_references/06_chessboard_animation/base_3/promotion.png +0 -0
  260. package/test/graphic_references/06_chessboard_animation/on_redraw/final_state.png +0 -0
  261. package/test/graphic_references/06_chessboard_animation/on_redraw/initial_state.png +0 -0
  262. package/test/graphic_references/07_chessboard_interaction/edit_arrows/base_1.png +0 -0
  263. package/test/graphic_references/07_chessboard_interaction/edit_arrows/base_2.png +0 -0
  264. package/test/graphic_references/07_chessboard_interaction/edit_arrows/from_==_to.png +0 -0
  265. package/test/graphic_references/07_chessboard_interaction/edit_arrows/out_of_board.png +0 -0
  266. package/test/graphic_references/07_chessboard_interaction/edit_arrows/over_arrow_marker.png +0 -0
  267. package/test/graphic_references/07_chessboard_interaction/edit_arrows/over_square_marker.png +0 -0
  268. package/test/graphic_references/07_chessboard_interaction/error/edit_color_not_set.png +0 -0
  269. package/test/graphic_references/07_chessboard_interaction/error/wrong_interaction_mode.png +0 -0
  270. package/test/graphic_references/07_chessboard_interaction/move_pieces/after_move.png +0 -0
  271. package/test/graphic_references/07_chessboard_interaction/move_pieces/from_==_to.png +0 -0
  272. package/test/graphic_references/07_chessboard_interaction/move_pieces/move_empty_square.png +0 -0
  273. package/test/graphic_references/07_chessboard_interaction/move_pieces/out_of_board.png +0 -0
  274. package/test/graphic_references/07_chessboard_interaction/move_pieces/over_arrow_marker.png +0 -0
  275. package/test/graphic_references/07_chessboard_interaction/move_pieces/over_empty.png +0 -0
  276. package/test/graphic_references/07_chessboard_interaction/move_pieces/over_non-empty_1.png +0 -0
  277. package/test/graphic_references/07_chessboard_interaction/move_pieces/over_non-empty_2.png +0 -0
  278. package/test/graphic_references/07_chessboard_interaction/move_pieces/over_square_marker.png +0 -0
  279. package/test/graphic_references/07_chessboard_interaction/move_pieces/over_text_marker.png +0 -0
  280. package/test/graphic_references/08_chessboard_play_moves/base/castling_move.png +0 -0
  281. package/test/graphic_references/08_chessboard_play_moves/base/chess960_ambiguous_king_move.png +0 -0
  282. package/test/graphic_references/08_chessboard_play_moves/base/chess960_castling_move_1.png +0 -0
  283. package/test/graphic_references/08_chessboard_play_moves/base/chess960_castling_move_2.png +0 -0
  284. package/test/graphic_references/08_chessboard_play_moves/base/chess960_non-kxr_castling.png +0 -0
  285. package/test/graphic_references/08_chessboard_play_moves/base/from_==_to.png +0 -0
  286. package/test/graphic_references/08_chessboard_play_moves/base/illegal_move.png +0 -0
  287. package/test/graphic_references/08_chessboard_play_moves/base/illegal_position.png +0 -0
  288. package/test/graphic_references/08_chessboard_play_moves/base/out_of_board.png +0 -0
  289. package/test/graphic_references/08_chessboard_play_moves/base/regular_move_1.png +0 -0
  290. package/test/graphic_references/08_chessboard_play_moves/base/regular_move_2.png +0 -0
  291. package/test/graphic_references/08_chessboard_play_moves/base/wrong_color_moved.png +0 -0
  292. package/test/graphic_references/08_chessboard_play_moves/promotions/antichess_promotion.png +0 -0
  293. package/test/graphic_references/08_chessboard_play_moves/promotions/cancel_promotion.png +0 -0
  294. package/test/graphic_references/08_chessboard_play_moves/promotions/regular_promotion_1.png +0 -0
  295. package/test/graphic_references/08_chessboard_play_moves/promotions/regular_promotion_2.png +0 -0
  296. package/test/graphic_references/09_chessboard_small_screens/base/default.png +0 -0
  297. package/test/graphic_references/09_chessboard_small_screens/base/invalid_limits.png +0 -0
  298. package/test/graphic_references/09_chessboard_small_screens/base/width_690.png +0 -0
  299. package/test/graphic_references/09_chessboard_small_screens/base/width_700.png +0 -0
  300. package/test/graphic_references/09_chessboard_small_screens/base/width_710.png +0 -0
  301. package/test/graphic_references/09_chessboard_small_screens/base/width_720.png +0 -0
  302. package/test/graphic_references/09_chessboard_small_screens/base/width_730.png +0 -0
  303. package/test/graphic_references/09_chessboard_small_screens/base/width_740.png +0 -0
  304. package/test/graphic_references/09_chessboard_small_screens/base/width_750.png +0 -0
  305. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/default_bottom_component.png +0 -0
  306. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/default_top_component.png +0 -0
  307. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/reduced_bottom_component.png +0 -0
  308. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/reduced_top_component.png +0 -0
  309. package/test/graphic_references/10_movetext_graphic/base/game_1.png +0 -0
  310. package/test/graphic_references/10_movetext_graphic/base/game_2.png +0 -0
  311. package/test/graphic_references/10_movetext_graphic/base/game_3.png +0 -0
  312. package/test/graphic_references/10_movetext_graphic/base/game_4.png +0 -0
  313. package/test/graphic_references/10_movetext_graphic/error/pgn_parsing_error_1.png +0 -0
  314. package/test/graphic_references/10_movetext_graphic/error/pgn_parsing_error_2.png +0 -0
  315. package/test/graphic_references/10_movetext_graphic/error/wrong_game_index_1.png +0 -0
  316. package/test/graphic_references/10_movetext_graphic/error/wrong_game_index_2.png +0 -0
  317. package/test/graphic_references/10_movetext_graphic/error/wrong_game_index_type.png +0 -0
  318. package/test/graphic_references/10_movetext_graphic/error/wrong_game_type.png +0 -0
  319. package/test/graphic_references/10_movetext_graphic/format_move/format_text.png +0 -0
  320. package/test/graphic_references/10_movetext_graphic/html/filtered_tags_and_attributes.png +0 -0
  321. package/test/graphic_references/10_movetext_graphic/html/html_in_comments.png +0 -0
  322. package/test/graphic_references/10_movetext_graphic/html/html_in_headers.png +0 -0
  323. package/test/graphic_references/10_movetext_graphic/options/custom_piece_symbols.png +0 -0
  324. package/test/graphic_references/10_movetext_graphic/options/figurine_piece_symbols_and_diagram_options.png +0 -0
  325. package/test/graphic_references/10_movetext_graphic/options/hidden_diagrams.png +0 -0
  326. package/test/graphic_references/10_movetext_graphic/options/localized_piece_symbols.png +0 -0
  327. package/test/graphic_references/10_movetext_graphic/options/other_diagram_options.png +0 -0
  328. package/test/graphic_references/10_movetext_graphic/options/wrong_diagram_options_1.png +0 -0
  329. package/test/graphic_references/10_movetext_graphic/options/wrong_diagram_options_2.png +0 -0
  330. package/test/graphic_references/10_movetext_graphic/options/wrong_piece_symbol_value.png +0 -0
  331. package/test/graphic_references/11_movetext_interaction/error/wrong_interaction_mode.png +0 -0
  332. package/test/graphic_references/11_movetext_interaction/select_moves/click_on_disabled.png +0 -0
  333. package/test/graphic_references/11_movetext_interaction/select_moves/click_on_unselected.png +0 -0
  334. package/test/graphic_references/11_movetext_interaction/select_moves/click_on_unselected_without_callback.png +0 -0
  335. package/test/graphic_references/11_movetext_interaction/select_moves/click_on_with_variations.png +0 -0
  336. package/test/graphic_references/12_navigation_board_base/controlled/default.png +0 -0
  337. package/test/graphic_references/12_navigation_board_base/controlled/forbidden_navigation_0.png +0 -0
  338. package/test/graphic_references/12_navigation_board_base/controlled/forbidden_navigation_1.png +0 -0
  339. package/test/graphic_references/12_navigation_board_base/controlled/invalid_node_id.png +0 -0
  340. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_0.png +0 -0
  341. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_1.png +0 -0
  342. package/test/graphic_references/12_navigation_board_base/controlled/overriding_initial_node_id.png +0 -0
  343. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_0.png +0 -0
  344. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_1.png +0 -0
  345. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_2.png +0 -0
  346. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_3.png +0 -0
  347. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_0.png +0 -0
  348. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_1.png +0 -0
  349. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_2.png +0 -0
  350. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_0.png +0 -0
  351. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_1.png +0 -0
  352. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_2.png +0 -0
  353. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_end.png +0 -0
  354. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_specific_id.png +0 -0
  355. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_default.png +0 -0
  356. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_default_with_game_index.png +0 -0
  357. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_on_null-move.png +0 -0
  358. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_0.png +0 -0
  359. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_1.png +0 -0
  360. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_2.png +0 -0
  361. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_3.png +0 -0
  362. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_4.png +0 -0
  363. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_flipping_0.png +0 -0
  364. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_flipping_1.png +0 -0
  365. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_0.png +0 -0
  366. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_1.png +0 -0
  367. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_2.png +0 -0
  368. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_3.png +0 -0
  369. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_4.png +0 -0
  370. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_5.png +0 -0
  371. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_1.png +0 -0
  372. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_2.png +0 -0
  373. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/multiple_buttons.png +0 -0
  374. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/single_button.png +0 -0
  375. package/test/graphic_references/13_navigation_board_graphic/error/pgn_parsing_error.png +0 -0
  376. package/test/graphic_references/13_navigation_board_graphic/error/wrong_game_type.png +0 -0
  377. package/test/graphic_references/13_navigation_board_graphic/theme/custom_1.png +0 -0
  378. package/test/graphic_references/13_navigation_board_graphic/theme/custom_2.png +0 -0
  379. package/test/graphic_references/13_navigation_board_graphic/theme/large.png +0 -0
  380. package/test/graphic_references/13_navigation_board_graphic/theme/small.png +0 -0
  381. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_acknowledging_is-playing_changes.png +0 -0
  382. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_not_acknowledging_is-playing_changes.png +0 -0
  383. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_acknowledging_node_changes.png +0 -0
  384. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_not_acknowledging_node_changes.png +0 -0
  385. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_reaching_the_end.png +0 -0
  386. package/test/graphic_references/14_navigation_board_autoplay/controlled/already_at_the_end.png +0 -0
  387. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_is-playing_changes.png +0 -0
  388. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_node_changes.png +0 -0
  389. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_at_the_end.png +0 -0
  390. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_close_to_end.png +0 -0
  391. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_is-playing_changes.png +0 -0
  392. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_node_changes.png +0 -0
  393. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_after_stop.png +0 -0
  394. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_before_stop.png +0 -0
  395. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_after_stop.png +0 -0
  396. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_before_stop.png +0 -0
  397. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_close_to_end.png +0 -0
  398. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_default.png +0 -0
  399. package/test/graphic_test_app/03_error_box_graphic/base.tsx +19 -7
  400. package/test/graphic_test_app/03_error_box_graphic/localization.tsx +1 -1
  401. package/test/graphic_test_app/04_icons_graphic/chess_piece.tsx +13 -4
  402. package/test/graphic_test_app/04_icons_graphic/marker.tsx +15 -5
  403. package/test/graphic_test_app/05_chessboard_graphic/annotations.tsx +8 -4
  404. package/test/graphic_test_app/05_chessboard_graphic/base.tsx +2 -2
  405. package/test/graphic_test_app/05_chessboard_graphic/chess_variants.tsx +1 -1
  406. package/test/graphic_test_app/05_chessboard_graphic/flipped.tsx +1 -1
  407. package/test/graphic_test_app/05_chessboard_graphic/move.tsx +10 -3
  408. package/test/graphic_test_app/05_chessboard_graphic/theme.tsx +2 -2
  409. package/test/graphic_test_app/06_chessboard_animation/base_1.tsx +1 -1
  410. package/test/graphic_test_app/06_chessboard_animation/base_2.tsx +1 -1
  411. package/test/graphic_test_app/06_chessboard_animation/base_3.tsx +1 -1
  412. package/test/graphic_test_app/06_chessboard_animation/on_redraw.tsx +9 -7
  413. package/test/graphic_test_app/07_chessboard_interaction/click_squares.tsx +5 -3
  414. package/test/graphic_test_app/07_chessboard_interaction/edit_arrows.tsx +5 -3
  415. package/test/graphic_test_app/07_chessboard_interaction/error.tsx +4 -2
  416. package/test/graphic_test_app/07_chessboard_interaction/move_pieces.tsx +5 -3
  417. package/test/graphic_test_app/08_chessboard_play_moves/base.tsx +13 -7
  418. package/test/graphic_test_app/08_chessboard_play_moves/promotions.tsx +13 -4
  419. package/test/graphic_test_app/09_chessboard_small_screens/base.tsx +4 -2
  420. package/test/graphic_test_app/09_chessboard_small_screens/top_bottom_components.tsx +9 -7
  421. package/test/graphic_test_app/10_movetext_graphic/base.tsx +1 -1
  422. package/test/graphic_test_app/10_movetext_graphic/error.tsx +2 -2
  423. package/test/graphic_test_app/10_movetext_graphic/format_move.tsx +1 -1
  424. package/test/graphic_test_app/10_movetext_graphic/html.tsx +1 -1
  425. package/test/graphic_test_app/10_movetext_graphic/options.tsx +17 -7
  426. package/test/graphic_test_app/11_movetext_interaction/error.tsx +5 -2
  427. package/test/graphic_test_app/11_movetext_interaction/select_moves.tsx +1 -1
  428. package/test/graphic_test_app/12_navigation_board_base/controlled.tsx +1 -1
  429. package/test/graphic_test_app/12_navigation_board_base/uncontrolled.tsx +1 -1
  430. package/test/graphic_test_app/13_navigation_board_graphic/additional_buttons.tsx +24 -17
  431. package/test/graphic_test_app/13_navigation_board_graphic/error.tsx +2 -2
  432. package/test/graphic_test_app/13_navigation_board_graphic/theme.tsx +1 -1
  433. package/test/graphic_test_app/14_navigation_board_autoplay/controlled.tsx +35 -19
  434. package/test/graphic_test_app/14_navigation_board_autoplay/uncontrolled.tsx +1 -1
  435. package/test/graphic_test_app/common/decs.d.ts +1 -1
  436. package/test/graphic_test_app/common/test_app.css +1 -1
  437. package/test/graphic_test_app/common/test_app.tsx +5 -5
  438. package/.eslintrc.yml +0 -83
  439. package/test/.eslintrc.yml +0 -8
  440. package/test/graphic_test_app/.eslintrc.yml +0 -3
  441. /package/doc_src/demo/{game-3.pgn → game-short.pgn} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kokopu-react",
3
- "version": "3.3.0",
3
+ "version": "3.3.2",
4
4
  "description": "A React-based library to create and display chessboard and chess-related components.",
5
5
  "keywords": [
6
6
  "chess",
@@ -37,55 +37,57 @@
37
37
  ],
38
38
  "peerDependencies": {
39
39
  "kokopu": "^4.9.1",
40
- "react": "17.x.x || 18.x.x"
40
+ "react": "17.x.x || 18.x.x || 19.x.x"
41
41
  },
42
42
  "dependencies": {
43
43
  "htmlparser2": "^9.1.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@babel/preset-env": "^7.24.4",
47
- "@babel/preset-react": "^7.24.1",
48
- "@emotion/react": "^11.11.4",
49
- "@emotion/styled": "^11.11.5",
50
- "@mui/material": "^5.15.15",
51
- "@types/react": "^18.2.79",
52
- "@types/react-dom": "^18.2.25",
53
- "@typescript-eslint/eslint-plugin": "^7.7.0",
54
- "@typescript-eslint/parser": "^7.7.0",
55
- "babel-loader": "^9.1.3",
46
+ "@babel/preset-env": "^7.26.0",
47
+ "@babel/preset-react": "^7.26.3",
48
+ "@emotion/react": "^11.14.0",
49
+ "@emotion/styled": "^11.14.0",
50
+ "@eslint/js": "^9.17.0",
51
+ "@mui/material": "^6.3.0",
52
+ "@stylistic/eslint-plugin": "^2.12.1",
53
+ "@types/react": "^19.0.2",
54
+ "@types/react-dom": "^19.0.2",
55
+ "babel-loader": "^9.2.1",
56
56
  "copy-webpack-plugin": "^12.0.2",
57
57
  "copyfiles": "^2.4.1",
58
58
  "coverage-istanbul-loader": "^3.0.5",
59
- "css-loader": "^7.1.1",
60
- "eslint": "^8.57.0",
61
- "eslint-plugin-react": "~7.33.2",
62
- "html-webpack-plugin": "^5.6.0",
59
+ "css-loader": "^7.1.2",
60
+ "eslint": "^9.17.0",
61
+ "eslint-plugin-react": "^7.37.3",
62
+ "globals": "^15.14.0",
63
+ "html-webpack-plugin": "^5.6.3",
63
64
  "img-diff-js": "^0.5.4",
64
- "kokopu": "^4.10.0",
65
- "mocha": "^10.4.0",
65
+ "kokopu": "^4.11.3",
66
+ "mocha": "^11.0.1",
66
67
  "null-loader": "^4.0.1",
67
- "nyc": "^15.1.0",
68
- "react": "^18.2.0",
68
+ "nyc": "^17.1.0",
69
+ "react": "^19.0.0",
69
70
  "react-docgen-typescript": "^2.2.2",
70
- "react-dom": "^18.2.0",
71
- "react-styleguidist": "^13.1.2",
72
- "rimraf": "^5.0.5",
73
- "selenium-webdriver": "^4.19.0",
74
- "ssh2-sftp-client": "^10.0.3",
71
+ "react-dom": "^19.0.0",
72
+ "react-styleguidist": "^13.1.3",
73
+ "rimraf": "^6.0.1",
74
+ "selenium-webdriver": "^4.27.0",
75
+ "ssh2-sftp-client": "^11.0.0",
75
76
  "style-loader": "^4.0.0",
76
77
  "ts-loader": "^9.5.1",
77
- "typescript": "^5.4.5",
78
+ "typescript": "^5.7.2",
79
+ "typescript-eslint": "^8.19.0",
78
80
  "unit.js": "^2.1.1",
79
- "webpack": "^5.91.0",
80
- "webpack-cli": "^5.1.4"
81
+ "webpack": "^5.97.1",
82
+ "webpack-cli": "^6.0.1"
81
83
  },
82
84
  "scripts": {
83
85
  "lint": "eslint doc_src src test",
84
86
  "preunit": "npm run build:lib && webpack --config scripts/test-headless.webpack.config.js && webpack --config scripts/test-graphic.webpack.config.js && rimraf build/graphic_output",
85
87
  "unit": "nyc mocha --enable-source-maps --bail --sort",
86
88
  "test": "npm run lint && npm run unit",
87
- "test_env:start": "docker-compose -p kokopu-react-test-env -f scripts/docker-compose.yml up -d",
88
- "test_env:stop": "docker-compose -p kokopu-react-test-env -f scripts/docker-compose.yml down",
89
+ "test_env:start": "docker compose -p kokopu-react-test-env -f scripts/docker-compose.yml up -d",
90
+ "test_env:stop": "docker compose -p kokopu-react-test-env -f scripts/docker-compose.yml down",
89
91
  "build": "npm run build:lib && npm run build:doc",
90
92
  "build:doc": "rimraf dist/docs && styleguidist build --config scripts/doc.styleguide.config.js && copyfiles -u 2 'doc_src/theming/*.png' dist/docs",
91
93
  "build:lib": "rimraf dist/lib && tsc --outDir dist/lib && copyfiles -u 1 'src/**/*.{css,png,woff,woff2}' dist/lib",
@@ -3,7 +3,7 @@
3
3
  * *
4
4
  * Kokopu-React - A React-based library of chess-related components. *
5
5
  * <https://www.npmjs.com/package/kokopu-react> *
6
- * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
6
+ * Copyright (C) 2021-2025 Yoann Le Montagner <yo35 -at- melix.net> *
7
7
  * *
8
8
  * Kokopu-React is free software: you can redistribute it and/or *
9
9
  * modify it under the terms of the GNU Lesser General Public License *
@@ -64,6 +64,7 @@ const demoPages = [
64
64
  { id: 'NavigationBoardUncontrolledVsControlled', title: 'NavigationBoard - Uncontrolled vs. controlled' },
65
65
  { id: 'MovetextBase', title: 'Movetext - Basic features' },
66
66
  { id: 'MovetextInteraction', title: 'Movetext - Interactions' },
67
+ { id: 'SynchroNavigationBoardMovetext', title: 'Synchronize NavigationBoard and Movetext components' },
67
68
  ];
68
69
 
69
70
 
@@ -137,7 +138,7 @@ module.exports = {
137
138
  type: 'asset/resource',
138
139
  },
139
140
  {
140
- test: /\.pgn$/i,
141
+ test: /\.(pgn|txt)$/i,
141
142
  type: 'asset/source',
142
143
  },
143
144
  ],
@@ -1,8 +1,6 @@
1
- version: "3.7"
2
-
3
1
  services:
4
2
  web-client:
5
- image: selenium/standalone-firefox:4.19.1-20240402 # https://github.com/SeleniumHQ/docker-selenium to get the latest version
3
+ image: selenium/standalone-firefox:4.25.0-20241024 # https://github.com/SeleniumHQ/docker-selenium to get the latest version
6
4
  shm_size: '2gb'
7
5
  ports:
8
6
  - 4444:4444 # http://localhost:4444/ (driver)
@@ -3,7 +3,7 @@
3
3
  * *
4
4
  * Kokopu-React - A React-based library of chess-related components. *
5
5
  * <https://www.npmjs.com/package/kokopu-react> *
6
- * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
6
+ * Copyright (C) 2021-2025 Yoann Le Montagner <yo35 -at- melix.net> *
7
7
  * *
8
8
  * Kokopu-React is free software: you can redistribute it and/or *
9
9
  * modify it under the terms of the GNU Lesser General Public License *
@@ -3,7 +3,7 @@
3
3
  * *
4
4
  * Kokopu-React - A React-based library of chess-related components. *
5
5
  * <https://www.npmjs.com/package/kokopu-react> *
6
- * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
6
+ * Copyright (C) 2021-2025 Yoann Le Montagner <yo35 -at- melix.net> *
7
7
  * *
8
8
  * Kokopu-React is free software: you can redistribute it and/or *
9
9
  * modify it under the terms of the GNU Lesser General Public License *
@@ -3,7 +3,7 @@
3
3
  * *
4
4
  * Kokopu-React - A React-based library of chess-related components. *
5
5
  * <https://www.npmjs.com/package/kokopu-react> *
6
- * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
6
+ * Copyright (C) 2021-2025 Yoann Le Montagner <yo35 -at- melix.net> *
7
7
  * *
8
8
  * Kokopu-React is free software: you can redistribute it and/or *
9
9
  * modify it under the terms of the GNU Lesser General Public License *
@@ -31,10 +31,10 @@ import { DEFAULT_PIECESET } from './piecesets';
31
31
  * Define a limit applicable to the parameters of a {@link Chessboard} on small-screen devices.
32
32
  */
33
33
  export interface SmallScreenLimit {
34
- width: number;
35
- squareSize?: number;
36
- coordinateVisible?: boolean;
37
- turnVisible?: boolean;
34
+ width: number,
35
+ squareSize?: number,
36
+ coordinateVisible?: boolean,
37
+ turnVisible?: boolean,
38
38
  }
39
39
 
40
40
 
@@ -46,27 +46,27 @@ export interface StaticBoardGraphicProps {
46
46
  /**
47
47
  * Size of the squares (in pixels). Must be an integer between `Chessboard.minSquareSize()` and `Chessboard.maxSquareSize()`.
48
48
  */
49
- squareSize: number;
49
+ squareSize: number,
50
50
 
51
51
  /**
52
52
  * Whether the row and column coordinates are visible or not.
53
53
  */
54
- coordinateVisible: boolean;
54
+ coordinateVisible: boolean,
55
55
 
56
56
  /**
57
57
  * Whether the turn flag is visible or not.
58
58
  */
59
- turnVisible: boolean;
59
+ turnVisible: boolean,
60
60
 
61
61
  /**
62
62
  * Color theme ID. Must be a property of `Chessboard.colorsets()`.
63
63
  */
64
- colorset: string;
64
+ colorset: string,
65
65
 
66
66
  /**
67
67
  * Piece theme ID. Must be a property of `Chessboard.piecesets()`.
68
68
  */
69
- pieceset: string;
69
+ pieceset: string,
70
70
 
71
71
  /**
72
72
  * Limits applicable on small-screen devices. For instance, if set to
@@ -81,7 +81,7 @@ export interface StaticBoardGraphicProps {
81
81
  * will be limited to 24 and the row and column coordinates will always be hidden (whatever the value of the
82
82
  * `coordinateVisible` attribute).
83
83
  */
84
- smallScreenLimits?: SmallScreenLimit[];
84
+ smallScreenLimits?: SmallScreenLimit[],
85
85
  }
86
86
 
87
87
 
@@ -93,17 +93,17 @@ export interface DynamicBoardGraphicProps extends StaticBoardGraphicProps {
93
93
  /**
94
94
  * Whether moves are highlighted with an arrow or not.
95
95
  */
96
- moveArrowVisible: boolean;
96
+ moveArrowVisible: boolean,
97
97
 
98
98
  /**
99
99
  * Color of the move arrow.
100
100
  */
101
- moveArrowColor: AnnotationColor;
101
+ moveArrowColor: AnnotationColor,
102
102
 
103
103
  /**
104
104
  * Whether moves are animated or not.
105
105
  */
106
- animated: boolean;
106
+ animated: boolean,
107
107
  }
108
108
 
109
109
 
@@ -3,7 +3,7 @@
3
3
  * *
4
4
  * Kokopu-React - A React-based library of chess-related components. *
5
5
  * <https://www.npmjs.com/package/kokopu-react> *
6
- * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
6
+ * Copyright (C) 2021-2025 Yoann Le Montagner <yo35 -at- melix.net> *
7
7
  * *
8
8
  * Kokopu-React is free software: you can redistribute it and/or *
9
9
  * modify it under the terms of the GNU Lesser General Public License *
@@ -3,7 +3,7 @@
3
3
  * *
4
4
  * Kokopu-React - A React-based library of chess-related components. *
5
5
  * <https://www.npmjs.com/package/kokopu-react> *
6
- * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
6
+ * Copyright (C) 2021-2025 Yoann Le Montagner <yo35 -at- melix.net> *
7
7
  * *
8
8
  * Kokopu-React is free software: you can redistribute it and/or *
9
9
  * modify it under the terms of the GNU Lesser General Public License *
@@ -49,36 +49,36 @@ export interface ChessboardProps extends DynamicBoardGraphicProps {
49
49
  * [game variant](https://kokopu.yo35.org/docs/current/types/GameVariant.html) supported by Kokopu. For instance:
50
50
  * `'chess960:nrkbqrbn/pppppppp/8/8/8/8/PPPPPPPP/NRKBQRBN w KQkq - 0 1'`.
51
51
  */
52
- position: Position | string;
52
+ position: Position | string,
53
53
 
54
54
  /**
55
55
  * Displayed move (optional), defined either as a [kokopu.MoveDescriptor](https://kokopu.yo35.org/docs/current/classes/MoveDescriptor.html) object
56
56
  * or as a [SAN string](https://en.wikipedia.org/wiki/Algebraic_notation_(chess)) (e.g. `'Nf3'`). Use `'--'` for a null-move.
57
57
  * In all cases, the move must be a legal move in position defined in attribute `position`.
58
58
  */
59
- move?: MoveDescriptor | string;
59
+ move?: MoveDescriptor | string,
60
60
 
61
61
  /**
62
62
  * Square markers, defined as a {@link SquareMarkerSet} (e.g. `{ e4: 'g', d5: 'r' }`) or as a comma-separated CSL string (e.g. `'Rd5,Ge4'`).
63
63
  */
64
- squareMarkers?: SquareMarkerSet | string;
64
+ squareMarkers?: SquareMarkerSet | string,
65
65
 
66
66
  /**
67
67
  * Text markers, defined as a {@link TextMarkerSet} (e.g. `{ e4: { symbol: 'A', color: 'g' }, d5: { symbol: 'z', color: 'r' }}`)
68
68
  * or as a comma-separated CTL string (e.g. `'Rzd5,GAe4'`).
69
69
  */
70
- textMarkers?: TextMarkerSet | string;
70
+ textMarkers?: TextMarkerSet | string,
71
71
 
72
72
  /**
73
73
  * Arrow markers, defined as a {@link ArrowMarkerSet} (e.g. `{ e2e4: 'g', g8f6: 'r', g8h6: 'y' }`)
74
74
  * or as a comma-separated CAL string (e.g. `'Ge2e4,Rg8f6,Yg8h6'`).
75
75
  */
76
- arrowMarkers?: ArrowMarkerSet | string;
76
+ arrowMarkers?: ArrowMarkerSet | string,
77
77
 
78
78
  /**
79
79
  * Whether the board is flipped (i.e. seen from Black's point of view) or not.
80
80
  */
81
- flipped: boolean;
81
+ flipped: boolean,
82
82
 
83
83
  /**
84
84
  * Type of action allowed with the mouse on the chessboard. If undefined, then the user cannot interact with the component.
@@ -93,39 +93,39 @@ export interface ChessboardProps extends DynamicBoardGraphicProps {
93
93
  /**
94
94
  * Color of the edited arrow. Mandatory if `interactionMode === 'editArrows'`, ignored otherwise.
95
95
  */
96
- editedArrowColor?: AnnotationColor;
96
+ editedArrowColor?: AnnotationColor,
97
97
 
98
98
  /**
99
99
  * Callback invoked when a piece is moved through drag&drop (only if `interactionMode` is set to `'movePieces'`).
100
100
  */
101
- onPieceMoved?: (from: Square, to: Square) => void;
101
+ onPieceMoved?: (from: Square, to: Square) => void,
102
102
 
103
103
  /**
104
104
  * Callback invoked when the user clicks on a square (only if `interactionMode` is set to `'clickSquares'`).
105
105
  */
106
- onSquareClicked?: (square: Square) => void;
106
+ onSquareClicked?: (square: Square) => void,
107
107
 
108
108
  /**
109
109
  * Callback invoked when an arrow is dragged (only if `interactionMode` is set to `'editArrows'`).
110
110
  */
111
- onArrowEdited?: (from: Square, to: Square) => void;
111
+ onArrowEdited?: (from: Square, to: Square) => void,
112
112
 
113
113
  /**
114
114
  * Callback invoked when a move is played (only if `interactionMode` is set to `'playMoves'`).
115
115
  */
116
- onMovePlayed?: (move: string) => void;
116
+ onMovePlayed?: (move: string) => void,
117
117
 
118
118
  /**
119
119
  * Optional component, to be rendered above the chessboard, and customized with the same square-size / coordinate-visible / turn-visible
120
120
  * parameter values as actually used for the chessboard (which may be different from what is defined in props because of small-screen limits).
121
121
  */
122
- topComponent?: (attr: Pick<StaticBoardGraphicProps, 'squareSize' | 'coordinateVisible' | 'turnVisible'>) => JSX.Element;
122
+ topComponent?: (attr: Pick<StaticBoardGraphicProps, 'squareSize' | 'coordinateVisible' | 'turnVisible'>) => React.JSX.Element,
123
123
 
124
124
  /**
125
125
  * Optional component, to be rendered below the chessboard, and customized with the same square-size / coordinate-visible / turn-visible
126
126
  * parameter values as actually used for the chessboard (which may be different from what is defined in props because of small-screen limits).
127
127
  */
128
- bottomComponent?: (attr: Pick<StaticBoardGraphicProps, 'squareSize' | 'coordinateVisible' | 'turnVisible'>) => JSX.Element;
128
+ bottomComponent?: (attr: Pick<StaticBoardGraphicProps, 'squareSize' | 'coordinateVisible' | 'turnVisible'>) => React.JSX.Element,
129
129
  }
130
130
 
131
131
 
@@ -136,12 +136,12 @@ type AuxilliaryComponentSizeFunction = (attr: Pick<StaticBoardGraphicProps, 'squ
136
136
  * Attributes for method `Chessboard.size()`.
137
137
  */
138
138
  export interface ChessboardSizeAttr {
139
- squareSize?: ChessboardProps['squareSize'];
140
- coordinateVisible?: ChessboardProps['coordinateVisible'];
141
- turnVisible?: ChessboardProps['turnVisible'];
142
- smallScreenLimits?: ChessboardProps['smallScreenLimits'];
143
- topComponent?: AuxilliaryComponentSizeFunction;
144
- bottomComponent?: AuxilliaryComponentSizeFunction;
139
+ squareSize?: ChessboardProps['squareSize'],
140
+ coordinateVisible?: ChessboardProps['coordinateVisible'],
141
+ turnVisible?: ChessboardProps['turnVisible'],
142
+ smallScreenLimits?: ChessboardProps['smallScreenLimits'],
143
+ topComponent?: AuxilliaryComponentSizeFunction,
144
+ bottomComponent?: AuxilliaryComponentSizeFunction,
145
145
  }
146
146
 
147
147
 
@@ -149,16 +149,16 @@ export interface ChessboardSizeAttr {
149
149
  * Attributes for method `Chessboard.adaptSquareSize()`.
150
150
  */
151
151
  export interface ChessboardAdaptSquareSizeAttr {
152
- coordinateVisible?: ChessboardProps['coordinateVisible'];
153
- turnVisible?: ChessboardProps['turnVisible'];
154
- smallScreenLimits?: ChessboardProps['smallScreenLimits'];
155
- topComponent?: AuxilliaryComponentSizeFunction;
156
- bottomComponent?: AuxilliaryComponentSizeFunction;
152
+ coordinateVisible?: ChessboardProps['coordinateVisible'],
153
+ turnVisible?: ChessboardProps['turnVisible'],
154
+ smallScreenLimits?: ChessboardProps['smallScreenLimits'],
155
+ topComponent?: AuxilliaryComponentSizeFunction,
156
+ bottomComponent?: AuxilliaryComponentSizeFunction,
157
157
  }
158
158
 
159
159
 
160
160
  interface ChessboardState {
161
- windowWidth: number;
161
+ windowWidth: number,
162
162
  }
163
163
 
164
164
 
@@ -256,18 +256,21 @@ export class Chessboard extends React.Component<ChessboardProps, ChessboardState
256
256
  // (mandatory to ensure that the move animation works properly and that the internal state of the component remains consistent).
257
257
  const key = `${position.variant()}|${position.fen()}|${move ? position.notation(move) : ''}`;
258
258
 
259
- return (<>
260
- {this.props.topComponent ? this.props.topComponent(auxilliaryComponentAttr) : undefined}
261
- <ChessboardImpl key={key}
262
- position={position} move={move} squareMarkers={sqm} textMarkers={txtm} arrowMarkers={arm} flipped={flipped}
263
- squareSize={actualSquareSize} coordinateVisible={actualCoordinateVisible} turnVisible={actualTurnVisible}
264
- moveArrowVisible={moveArrowVisible} moveArrowColor={this.props.moveArrowColor} animated={animated}
265
- colorset={colorset} pieceset={pieceset}
266
- interactionMode={interactionMode} editedArrowColor={this.props.editedArrowColor}
267
- onPieceMoved={onPieceMoved} onSquareClicked={onSquareClicked} onArrowEdited={onArrowEdited} onMovePlayed={onMovePlayed}
268
- />
269
- {this.props.bottomComponent ? this.props.bottomComponent(auxilliaryComponentAttr) : undefined}
270
- </>);
259
+ return (
260
+ <>
261
+ {this.props.topComponent ? this.props.topComponent(auxilliaryComponentAttr) : undefined}
262
+ <ChessboardImpl
263
+ key={key}
264
+ position={position} move={move} squareMarkers={sqm} textMarkers={txtm} arrowMarkers={arm} flipped={flipped}
265
+ squareSize={actualSquareSize} coordinateVisible={actualCoordinateVisible} turnVisible={actualTurnVisible}
266
+ moveArrowVisible={moveArrowVisible} moveArrowColor={this.props.moveArrowColor} animated={animated}
267
+ colorset={colorset} pieceset={pieceset}
268
+ interactionMode={interactionMode} editedArrowColor={this.props.editedArrowColor}
269
+ onPieceMoved={onPieceMoved} onSquareClicked={onSquareClicked} onArrowEdited={onArrowEdited} onMovePlayed={onMovePlayed}
270
+ />
271
+ {this.props.bottomComponent ? this.props.bottomComponent(auxilliaryComponentAttr) : undefined}
272
+ </>
273
+ );
271
274
  }
272
275
 
273
276
  private getInteractionModeAndValidateEditedArrowColor() {
@@ -294,7 +297,8 @@ export class Chessboard extends React.Component<ChessboardProps, ChessboardState
294
297
  () => new IllegalArgument('Chessboard.size()', 'attr'));
295
298
 
296
299
  // Sanitize the arguments.
297
- let actualSquareSize = squareSize === undefined ? DEFAULT_SQUARE_SIZE :
300
+ let actualSquareSize = squareSize === undefined ?
301
+ DEFAULT_SQUARE_SIZE :
298
302
  sanitizeBoundedInteger(squareSize, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, () => new IllegalArgument('Chessboard.size()', 'squareSize'));
299
303
  let actualCoordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
300
304
  let actualTurnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
@@ -530,7 +534,7 @@ function sanitizeSmallScreenLimits(smallScreenLimits: SmallScreenLimit[] | undef
530
534
  width: sanitizeInteger(smallScreenLimit.width, exceptionBuilder),
531
535
  squareSize: sanitizeOptional(smallScreenLimit.squareSize, val => sanitizeBoundedInteger(val, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, exceptionBuilder)),
532
536
  coordinateVisible: sanitizeOptional(smallScreenLimit.coordinateVisible, sanitizeBoolean),
533
- turnVisible: sanitizeOptional(smallScreenLimit.turnVisible, sanitizeBoolean)
537
+ turnVisible: sanitizeOptional(smallScreenLimit.turnVisible, sanitizeBoolean),
534
538
  };
535
539
  });
536
540
  }
@@ -3,7 +3,7 @@
3
3
  * *
4
4
  * Kokopu-React - A React-based library of chess-related components. *
5
5
  * <https://www.npmjs.com/package/kokopu-react> *
6
- * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
6
+ * Copyright (C) 2021-2025 Yoann Le Montagner <yo35 -at- melix.net> *
7
7
  * *
8
8
  * Kokopu-React is free software: you can redistribute it and/or *
9
9
  * modify it under the terms of the GNU Lesser General Public License *
@@ -52,44 +52,44 @@ const FILE_LABELS = 'abcdefgh';
52
52
 
53
53
  interface ChessboardImplProps {
54
54
 
55
- position: Position;
56
- move?: MoveDescriptor;
55
+ position: Position,
56
+ move?: MoveDescriptor,
57
57
 
58
- squareMarkers?: SquareMarkerSet;
59
- textMarkers?: TextMarkerSet;
60
- arrowMarkers?: ArrowMarkerSet;
58
+ squareMarkers?: SquareMarkerSet,
59
+ textMarkers?: TextMarkerSet,
60
+ arrowMarkers?: ArrowMarkerSet,
61
61
 
62
- flipped: boolean;
63
- squareSize: number;
64
- coordinateVisible: boolean;
65
- turnVisible: boolean;
66
- moveArrowVisible: boolean;
67
- moveArrowColor: AnnotationColor;
68
- animated: boolean;
69
- colorset: Colorset;
70
- pieceset: Pieceset;
62
+ flipped: boolean,
63
+ squareSize: number,
64
+ coordinateVisible: boolean,
65
+ turnVisible: boolean,
66
+ moveArrowVisible: boolean,
67
+ moveArrowColor: AnnotationColor,
68
+ animated: boolean,
69
+ colorset: Colorset,
70
+ pieceset: Pieceset,
71
71
 
72
72
  interactionMode?: 'movePieces' | 'clickSquares' | 'editArrows' | 'playMoves',
73
- editedArrowColor?: AnnotationColor; // mandatory if `interactionMode === 'editArrows'`
73
+ editedArrowColor?: AnnotationColor, // mandatory if `interactionMode === 'editArrows'`
74
74
 
75
- onPieceMoved?: (from: Square, to: Square) => void;
76
- onSquareClicked?: (square: Square) => void;
77
- onArrowEdited?: (from: Square, to: Square) => void;
78
- onMovePlayed?: (move: string) => void;
75
+ onPieceMoved?: (from: Square, to: Square) => void,
76
+ onSquareClicked?: (square: Square) => void,
77
+ onArrowEdited?: (from: Square, to: Square) => void,
78
+ onMovePlayed?: (move: string) => void,
79
79
  }
80
80
 
81
81
 
82
82
  interface ChessboardImplState {
83
- inhibitedSquare?: Square;
84
- draggedSquare?: Square;
85
- hoveredSquare?: Square;
86
- dragPosition?: { x: number, y: number }; // mandatory if `dragged` is defined
87
- cursorOffset?: { x: number, y: number }; // mandatory if `dragged` is defined
83
+ inhibitedSquare?: Square,
84
+ draggedSquare?: Square,
85
+ hoveredSquare?: Square,
86
+ dragPosition?: { x: number, y: number }, // mandatory if `dragged` is defined
87
+ cursorOffset?: { x: number, y: number }, // mandatory if `dragged` is defined
88
88
  promotionDrawer?: {
89
89
  origin: Square,
90
90
  buttons: Piece[],
91
91
  builder: (promotion: Piece) => string,
92
- };
92
+ },
93
93
  }
94
94
 
95
95
 
@@ -309,12 +309,20 @@ export class ChessboardImpl extends React.Component<ChessboardImplProps, Chessbo
309
309
  });
310
310
  return (
311
311
  <>
312
- <rect className="kokopu-handle" x={0} y={0} width={this.props.squareSize * 8} height={this.props.squareSize * 8}
313
- onClick={() => this.handleDrawerCancelButtonClicked()} />
314
- <rect x={x} y={y0} width={this.props.squareSize} height={this.props.squareSize * this.state.promotionDrawer.buttons.length}
315
- fill={this.props.colorset.b} />
316
- <rect x={x} y={y0} width={this.props.squareSize} height={this.props.squareSize * this.state.promotionDrawer.buttons.length}
317
- className="kokopu-drawerMask" fill={this.props.colorset.w} />
312
+ <rect
313
+ className="kokopu-handle"
314
+ x={0} y={0} width={this.props.squareSize * 8} height={this.props.squareSize * 8}
315
+ onClick={() => this.handleDrawerCancelButtonClicked()}
316
+ />
317
+ <rect
318
+ x={x} y={y0} width={this.props.squareSize} height={this.props.squareSize * this.state.promotionDrawer.buttons.length}
319
+ fill={this.props.colorset.b}
320
+ />
321
+ <rect
322
+ className="kokopu-drawerMask"
323
+ x={x} y={y0} width={this.props.squareSize} height={this.props.squareSize * this.state.promotionDrawer.buttons.length}
324
+ fill={this.props.colorset.w}
325
+ />
318
326
  {buttons}
319
327
  </>
320
328
  );
@@ -329,7 +337,9 @@ export class ChessboardImpl extends React.Component<ChessboardImplProps, Chessbo
329
337
  if (dragEnabledForMovePieces || dragEnabledForEditArrows || dragEnabledForPlayMoves) {
330
338
  return (
331
339
  <Draggable
332
- key={'handle-' + sq} x={x} y={y} width={this.props.squareSize} height={this.props.squareSize} isArrowHandle={dragEnabledForEditArrows}
340
+ key={'handle-' + sq}
341
+ x={x} y={y} width={this.props.squareSize} height={this.props.squareSize}
342
+ isArrowHandle={dragEnabledForEditArrows}
333
343
  onDragStart={(x0, y0) => this.handleDragStart(sq, x0, y0)}
334
344
  onDrag={(dx, dy) => this.handleDrag(sq, dx, dy)}
335
345
  onDragStop={(dx, dy) => this.handleDragStop(sq, dx, dy)}
@@ -340,7 +350,8 @@ export class ChessboardImpl extends React.Component<ChessboardImplProps, Chessbo
340
350
  else if (this.props.interactionMode === 'clickSquares') {
341
351
  return (
342
352
  <rect
343
- key={'handle-' + sq} className="kokopu-handle kokopu-clickable" x={x} y={y} width={this.props.squareSize} height={this.props.squareSize}
353
+ key={'handle-' + sq} className="kokopu-handle kokopu-clickable"
354
+ x={x} y={y} width={this.props.squareSize} height={this.props.squareSize}
344
355
  onClick={() => this.handleSquareClicked(sq)}
345
356
  />
346
357
  );
@@ -357,7 +368,9 @@ export class ChessboardImpl extends React.Component<ChessboardImplProps, Chessbo
357
368
  return Object.entries(this.props.squareMarkers).map(([ sq, color ]) => {
358
369
  const { x, y } = this.getSquareCoordinates(sq as Square);
359
370
  return (
360
- <rect key={'sqm-' + sq} className="kokopu-annotation" x={x} y={y} width={this.props.squareSize} height={this.props.squareSize}
371
+ <rect
372
+ key={'sqm-' + sq} className="kokopu-annotation"
373
+ x={x} y={y} width={this.props.squareSize} height={this.props.squareSize}
361
374
  fill={this.getColorForAnnotation(color)}
362
375
  />
363
376
  );
@@ -401,8 +414,10 @@ export class ChessboardImpl extends React.Component<ChessboardImplProps, Chessbo
401
414
  yTo += Math.sign(yFrom - yTo) * ARROW_TIP_OFFSET_FACTOR * this.props.squareSize;
402
415
  return (
403
416
  <line
404
- key={'arm-' + vect} className="kokopu-annotation kokopu-arrow" x1={xFrom} y1={yFrom} x2={xTo} y2={yTo} strokeWidth={strokeWidth}
405
- stroke={this.getColorForAnnotation(color)} markerEnd={`url(#${this.getArrowTipId(color)})`}
417
+ key={'arm-' + vect} className="kokopu-annotation kokopu-arrow"
418
+ x1={xFrom} y1={yFrom} x2={xTo} y2={yTo}
419
+ strokeWidth={strokeWidth} stroke={this.getColorForAnnotation(color)}
420
+ markerEnd={`url(#${this.getArrowTipId(color)})`}
406
421
  />
407
422
  );
408
423
  });
@@ -425,8 +440,10 @@ export class ChessboardImpl extends React.Component<ChessboardImplProps, Chessbo
425
440
  const y = yTo * motionCursor + yFrom * (1 - motionCursor);
426
441
  return (
427
442
  <line
428
- className="kokopu-annotation kokopu-arrow" x1={xFrom} y1={yFrom} x2={x} y2={y} strokeWidth={strokeWidth}
429
- stroke={this.getColorForAnnotation(this.props.moveArrowColor)} markerEnd={`url(#${this.getArrowTipId(this.props.moveArrowColor)})`}
443
+ className="kokopu-annotation kokopu-arrow"
444
+ x1={xFrom} y1={yFrom} x2={x} y2={y}
445
+ strokeWidth={strokeWidth} stroke={this.getColorForAnnotation(this.props.moveArrowColor)}
446
+ markerEnd={`url(#${this.getArrowTipId(this.props.moveArrowColor)})`}
430
447
  />
431
448
  );
432
449
  }
@@ -478,7 +495,7 @@ export class ChessboardImpl extends React.Component<ChessboardImplProps, Chessbo
478
495
  }
479
496
 
480
497
  private handleDragStop(sq: Square, dx: number, dy: number) {
481
- const { x, y } = this.getSquareCoordinates( sq);
498
+ const { x, y } = this.getSquareCoordinates(sq);
482
499
  const targetSq = this.getSquareAt(x + dx + this.state.cursorOffset!.x, y + dy + this.state.cursorOffset!.y);
483
500
  this.setState({
484
501
  inhibitedSquare: undefined,