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
@@ -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,17 +52,17 @@ const DEFAULT_FEN = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1';
52
52
 
53
53
 
54
54
  interface PageState {
55
- position: Position;
56
- flipped: boolean;
57
- interactionMode: 'none' | 'addRemovePieces' | 'movePieces' | 'playMoves' | 'editSquareMarkers' | 'editTextMarkers' | 'editArrowMarkers';
58
- pieceEditMode: ColoredPiece;
59
- squareMarkerColor: AnnotationColor;
60
- textMarkerColor: AnnotationColor;
61
- textMarkerSymbol: AnnotationSymbol;
62
- arrowMarkerColor: AnnotationColor;
63
- squareMarkers: SquareMarkerSet;
64
- textMarkers: TextMarkerSet;
65
- arrowMarkers: ArrowMarkerSet;
55
+ position: Position,
56
+ flipped: boolean,
57
+ interactionMode: 'none' | 'addRemovePieces' | 'movePieces' | 'playMoves' | 'editSquareMarkers' | 'editTextMarkers' | 'editArrowMarkers',
58
+ pieceEditMode: ColoredPiece,
59
+ squareMarkerColor: AnnotationColor,
60
+ textMarkerColor: AnnotationColor,
61
+ textMarkerSymbol: AnnotationSymbol,
62
+ arrowMarkerColor: AnnotationColor,
63
+ squareMarkers: SquareMarkerSet,
64
+ textMarkers: TextMarkerSet,
65
+ arrowMarkers: ArrowMarkerSet,
66
66
  }
67
67
 
68
68
 
@@ -96,53 +96,68 @@ export default class Page extends React.Component<object, PageState> {
96
96
  }
97
97
 
98
98
  private renderControls() {
99
- return (<>
100
- <Stack direction="row" spacing={2} alignItems="center">
101
- <FormControlLabel label="Flip"
102
- control={<Switch checked={this.state.flipped} onChange={() => this.setState({ flipped: !this.state.flipped })} color="primary" />}
103
- />
104
- <Button color="primary" size="small" variant="contained" onClick={() => this.handleTurnClicked(oppositeColor(this.state.position.turn()))}>
105
- Change turn
106
- </Button>
107
- <ButtonGroup color="primary" size="small">
108
- <Button onClick={() => this.setState({ position: new Position('empty') })}>Clear</Button>
109
- <Button onClick={() => this.setState({ position: new Position() })}>Reset</Button>
110
- </ButtonGroup>
111
- </Stack>
112
- <Box>
113
- <Typography gutterBottom>Interaction mode</Typography>
114
- <RadioGroup value={this.state.interactionMode} onChange={evt => this.setState({ interactionMode: evt.target.value as PageState['interactionMode'] })}>
115
- <FormControlLabel value="none" control={<Radio color="primary" />} label="None" />
116
- <FormControlLabel value="addRemovePieces" control={<Radio color="primary" />} label={
117
- <Stack direction="row" spacing={2} alignItems="center">
118
- <span>Add/remove pieces</span>
119
- {this.renderPieceSelector()}
120
- </Stack>
121
- } />
122
- <FormControlLabel value="movePieces" control={<Radio color="primary" />} label="Move pieces" />
123
- <FormControlLabel value="playMoves" control={<Radio color="primary" />} label="Move pieces (obeying chess rules)" />
124
- <FormControlLabel value="editSquareMarkers" control={<Radio color="primary" />} label={
125
- <Stack direction="row" spacing={2} alignItems="center">
126
- <span>Edit square annotations</span>
127
- {this.renderMarkerColorSelector('editSquareMarkers', this.state.squareMarkerColor, newColor => this.handleSquareMarkerColorChanged(newColor))}
128
- </Stack>
129
- } />
130
- <FormControlLabel value="editTextMarkers" control={<Radio color="primary" />} label={
131
- <Stack direction="row" spacing={2} alignItems="center">
132
- <span>Edit text annotations</span>
133
- {this.renderMarkerColorSelector('editTextMarkers', this.state.textMarkerColor, newColor => this.handleTextMarkerColorChanged(newColor))}
134
- {this.renderTextMarkerSymbolSelector()}
135
- </Stack>
136
- } />
137
- <FormControlLabel value="editArrowMarkers" control={<Radio color="primary" />} label={
138
- <Stack direction="row" spacing={2} alignItems="center">
139
- <span>Edit arrow annotations</span>
140
- {this.renderMarkerColorSelector('editArrowMarkers', this.state.arrowMarkerColor, newColor => this.handleArrowMarkerColorChanged(newColor))}
141
- </Stack>
142
- } />
143
- </RadioGroup>
144
- </Box>
145
- </>);
99
+ return (
100
+ <>
101
+ <Stack direction="row" spacing={2} alignItems="center">
102
+ <FormControlLabel
103
+ label="Flip"
104
+ control={<Switch checked={this.state.flipped} onChange={() => this.setState({ flipped: !this.state.flipped })} color="primary" />}
105
+ />
106
+ <Button color="primary" size="small" variant="contained" onClick={() => this.handleTurnClicked(oppositeColor(this.state.position.turn()))}>
107
+ Change turn
108
+ </Button>
109
+ <ButtonGroup color="primary" size="small">
110
+ <Button onClick={() => this.setState({ position: new Position('empty') })}>Clear</Button>
111
+ <Button onClick={() => this.setState({ position: new Position() })}>Reset</Button>
112
+ </ButtonGroup>
113
+ </Stack>
114
+ <Box>
115
+ <Typography gutterBottom>Interaction mode</Typography>
116
+ <RadioGroup value={this.state.interactionMode} onChange={evt => this.setState({ interactionMode: evt.target.value as PageState['interactionMode'] })}>
117
+ <FormControlLabel value="none" control={<Radio color="primary" />} label="None" />
118
+ <FormControlLabel
119
+ value="addRemovePieces" control={<Radio color="primary" />}
120
+ label={(
121
+ <Stack direction="row" spacing={2} alignItems="center">
122
+ <span>Add/remove pieces</span>
123
+ {this.renderPieceSelector()}
124
+ </Stack>
125
+ )}
126
+ />
127
+ <FormControlLabel value="movePieces" control={<Radio color="primary" />} label="Move pieces" />
128
+ <FormControlLabel value="playMoves" control={<Radio color="primary" />} label="Move pieces (obeying chess rules)" />
129
+ <FormControlLabel
130
+ value="editSquareMarkers" control={<Radio color="primary" />}
131
+ label={(
132
+ <Stack direction="row" spacing={2} alignItems="center">
133
+ <span>Edit square annotations</span>
134
+ {this.renderMarkerColorSelector('editSquareMarkers', this.state.squareMarkerColor, newColor => this.handleSquareMarkerColorChanged(newColor))}
135
+ </Stack>
136
+ )}
137
+ />
138
+ <FormControlLabel
139
+ value="editTextMarkers" control={<Radio color="primary" />}
140
+ label={(
141
+ <Stack direction="row" spacing={2} alignItems="center">
142
+ <span>Edit text annotations</span>
143
+ {this.renderMarkerColorSelector('editTextMarkers', this.state.textMarkerColor, newColor => this.handleTextMarkerColorChanged(newColor))}
144
+ {this.renderTextMarkerSymbolSelector()}
145
+ </Stack>
146
+ )}
147
+ />
148
+ <FormControlLabel
149
+ value="editArrowMarkers" control={<Radio color="primary" />}
150
+ label={(
151
+ <Stack direction="row" spacing={2} alignItems="center">
152
+ <span>Edit arrow annotations</span>
153
+ {this.renderMarkerColorSelector('editArrowMarkers', this.state.arrowMarkerColor, newColor => this.handleArrowMarkerColorChanged(newColor))}
154
+ </Stack>
155
+ )}
156
+ />
157
+ </RadioGroup>
158
+ </Box>
159
+ </>
160
+ );
146
161
  }
147
162
 
148
163
  private renderPieceSelector() {
@@ -176,7 +191,7 @@ export default class Page extends React.Component<object, PageState> {
176
191
  if (this.state.interactionMode !== 'editTextMarkers') {
177
192
  return undefined;
178
193
  }
179
- const availableSymbols = [ 'plus', 'times', 'dot', 'circle' ].concat([...'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789']);
194
+ const availableSymbols = [ 'plus', 'times', 'dot', 'circle' ].concat([ ...'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ]);
180
195
  return (
181
196
  <Select variant="standard" value={this.state.textMarkerSymbol} onChange={evt => this.setState({ textMarkerSymbol: evt.target.value as AnnotationSymbol })}>
182
197
  {availableSymbols.map(mode => <MenuItem key={mode} value={mode}>{mode}</MenuItem>)}
@@ -326,7 +341,7 @@ export default class Page extends React.Component<object, PageState> {
326
341
  const newArrowMarkers = { ...this.state.arrowMarkers };
327
342
  const key = from + to as SquareCouple;
328
343
  if (newArrowMarkers[key] === this.state.arrowMarkerColor) {
329
- delete newArrowMarkers[key];
344
+ delete newArrowMarkers[key]; // eslint-disable-line @typescript-eslint/no-dynamic-delete
330
345
  }
331
346
  else {
332
347
  newArrowMarkers[key] = this.state.arrowMarkerColor;
@@ -338,7 +353,7 @@ export default class Page extends React.Component<object, PageState> {
338
353
  if (this.state.interactionMode === 'editSquareMarkers') {
339
354
  const newSquareMarkers = { ...this.state.squareMarkers };
340
355
  if (newSquareMarkers[sq] === this.state.squareMarkerColor) {
341
- delete newSquareMarkers[sq];
356
+ delete newSquareMarkers[sq]; // eslint-disable-line @typescript-eslint/no-dynamic-delete
342
357
  }
343
358
  else {
344
359
  newSquareMarkers[sq] = this.state.squareMarkerColor;
@@ -348,12 +363,12 @@ export default class Page extends React.Component<object, PageState> {
348
363
  else if (this.state.interactionMode === 'editTextMarkers') {
349
364
  const newTextMarkers = { ...this.state.textMarkers };
350
365
  if (newTextMarkers[sq] && newTextMarkers[sq]!.color === this.state.textMarkerColor && newTextMarkers[sq]!.symbol === this.state.textMarkerSymbol) {
351
- delete newTextMarkers[sq];
366
+ delete newTextMarkers[sq]; // eslint-disable-line @typescript-eslint/no-dynamic-delete
352
367
  }
353
368
  else {
354
369
  newTextMarkers[sq] = { color: this.state.textMarkerColor, symbol: this.state.textMarkerSymbol };
355
370
  }
356
- this.setState({ textMarkers: newTextMarkers });
371
+ this.setState({ textMarkers: newTextMarkers });
357
372
  }
358
373
  else if (this.state.interactionMode === 'addRemovePieces') {
359
374
  const newPosition = new Position(this.state.position);
@@ -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 *
@@ -44,14 +44,14 @@ const COLOR_ICON_SIZE = 16;
44
44
 
45
45
 
46
46
  interface PageState {
47
- position: Position;
48
- positionAfter: Position | null; // non-null only if a valid move has been played
49
- flipped: boolean;
50
- moveArrowVisible: boolean;
51
- moveArrowColor: AnnotationColor;
52
- animated: boolean;
53
- editedMove: string;
54
- playedMove: string;
47
+ position: Position,
48
+ positionAfter: Position | null, // non-null only if a valid move has been played
49
+ flipped: boolean,
50
+ moveArrowVisible: boolean,
51
+ moveArrowColor: AnnotationColor,
52
+ animated: boolean,
53
+ editedMove: string,
54
+ playedMove: string,
55
55
  }
56
56
 
57
57
 
@@ -85,28 +85,33 @@ export default class Page extends React.Component<object, PageState> {
85
85
  }
86
86
 
87
87
  private renderControls() {
88
- return (<>
89
- <Stack direction="row" spacing={2} alignItems="center">
90
- <FormControlLabel label="Flip"
91
- control={<Switch checked={this.state.flipped} onChange={() => this.setState({ flipped: !this.state.flipped })} color="primary" />}
92
- />
93
- <FormControlLabel label="Animation" disabled={!this.state.positionAfter}
94
- control={<Switch checked={this.state.animated} onChange={() => this.setState({ animated: !this.state.animated })} color="primary" />}
95
- />
96
- <FormControlLabel label="Show move arrow" disabled={!this.state.positionAfter}
97
- control={<Switch checked={this.state.moveArrowVisible} onChange={() => this.setState({ moveArrowVisible: !this.state.moveArrowVisible })} color="primary" />}
98
- />
99
- {this.renderColorSelector()}
100
- </Stack>
101
- <Stack direction="row" spacing={2} alignItems="center">
102
- <TextField label="Move" variant="standard" value={this.state.editedMove} onChange={evt => this.setState({ editedMove: evt.target.value })} />
103
- <Button color="primary" size="small" variant="contained" onClick={() => this.handlePlayClicked()}>Play</Button>
104
- <ButtonGroup color="primary" size="small">
105
- <Button onClick={() => this.handlePositionChanged(new Position('empty'))}>Clear</Button>
106
- <Button onClick={() => this.handlePositionChanged(new Position())}>Reset</Button>
107
- </ButtonGroup>
108
- </Stack>
109
- </>);
88
+ return (
89
+ <>
90
+ <Stack direction="row" spacing={2} alignItems="center">
91
+ <FormControlLabel
92
+ label="Flip"
93
+ control={<Switch checked={this.state.flipped} onChange={() => this.setState({ flipped: !this.state.flipped })} color="primary" />}
94
+ />
95
+ <FormControlLabel
96
+ label="Animation" disabled={!this.state.positionAfter}
97
+ control={<Switch checked={this.state.animated} onChange={() => this.setState({ animated: !this.state.animated })} color="primary" />}
98
+ />
99
+ <FormControlLabel
100
+ label="Show move arrow" disabled={!this.state.positionAfter}
101
+ control={<Switch checked={this.state.moveArrowVisible} onChange={() => this.setState({ moveArrowVisible: !this.state.moveArrowVisible })} color="primary" />}
102
+ />
103
+ {this.renderColorSelector()}
104
+ </Stack>
105
+ <Stack direction="row" spacing={2} alignItems="center">
106
+ <TextField label="Move" variant="standard" value={this.state.editedMove} onChange={evt => this.setState({ editedMove: evt.target.value })} />
107
+ <Button color="primary" size="small" variant="contained" onClick={() => this.handlePlayClicked()}>Play</Button>
108
+ <ButtonGroup color="primary" size="small">
109
+ <Button onClick={() => this.handlePositionChanged(new Position('empty'))}>Clear</Button>
110
+ <Button onClick={() => this.handlePositionChanged(new Position())}>Reset</Button>
111
+ </ButtonGroup>
112
+ </Stack>
113
+ </>
114
+ );
110
115
  }
111
116
 
112
117
  private renderColorSelector() {
@@ -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 *
@@ -35,9 +35,9 @@ import './demo.css';
35
35
 
36
36
 
37
37
  interface PageState {
38
- squareSize: number;
39
- windowWidth: number;
40
- limits: SmallScreenLimit[];
38
+ squareSize: number,
39
+ windowWidth: number,
40
+ limits: SmallScreenLimit[],
41
41
  }
42
42
 
43
43
 
@@ -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 *
@@ -48,19 +48,19 @@ import invalidGame from './game-invalid.pgn';
48
48
 
49
49
 
50
50
  interface PageState {
51
- pgn: string;
52
- headerVisible: boolean;
53
- diagramVisible: boolean;
54
- pieceSymbols: 'native' | 'figurines' | 'custom';
55
- customSymbols: PieceSymbolMapping;
51
+ pgn: string,
52
+ headerVisible: boolean,
53
+ diagramVisible: boolean,
54
+ pieceSymbols: 'native' | 'figurines' | 'custom',
55
+ customSymbols: PieceSymbolMapping,
56
56
  diagramOptions: {
57
- flipped: boolean;
58
- squareSize: number;
59
- coordinateVisible: boolean;
60
- turnVisible: boolean;
61
- colorset: string;
62
- pieceset: string;
63
- };
57
+ flipped: boolean,
58
+ squareSize: number,
59
+ coordinateVisible: boolean,
60
+ turnVisible: boolean,
61
+ colorset: string,
62
+ pieceset: string,
63
+ },
64
64
  }
65
65
 
66
66
 
@@ -73,7 +73,7 @@ export default class Page extends React.Component<object, PageState> {
73
73
  headerVisible: true,
74
74
  diagramVisible: true,
75
75
  pieceSymbols: 'figurines',
76
- customSymbols: { K:'R', Q:'D', R:'T', B:'F', N:'C', P:'P' },
76
+ customSymbols: { K: 'R', Q: 'D', R: 'T', B: 'F', N: 'C', P: 'P' },
77
77
  diagramOptions: {
78
78
  flipped: false,
79
79
  squareSize: 32,
@@ -97,66 +97,74 @@ export default class Page extends React.Component<object, PageState> {
97
97
 
98
98
  private renderControls() {
99
99
  const opts = this.state.diagramOptions;
100
- return (<>
101
- <Stack direction="row" spacing={2} alignItems="center">
102
- <ButtonGroup color="primary" size="small">
103
- <Button onClick={() => this.setState({ pgn: game1 })}>Game 1</Button>
104
- <Button onClick={() => this.setState({ pgn: game2 })}>Game 2</Button>
105
- <Button onClick={() => this.setState({ pgn: invalidGame })}>Invalid game</Button>
106
- </ButtonGroup>
107
- <FormControlLabel label="Show headers"
108
- control={<Switch checked={this.state.headerVisible} onChange={() => this.setState({ headerVisible: !this.state.headerVisible })} color="primary" />}
109
- />
110
- <FormControlLabel label="Show diagrams"
111
- control={<Switch checked={this.state.diagramVisible} onChange={() => this.setState({ diagramVisible: !this.state.diagramVisible })} color="primary" />}
112
- />
113
- </Stack>
114
- <Stack direction="row" spacing={2} alignItems="center">
115
- <FormControl variant="standard">
116
- <InputLabel id="piecesymbols-label">Piece symbols</InputLabel>
117
- <Select labelId="piecesymbols-label" sx={{ width: '8em' }} value={this.state.pieceSymbols}
118
- onChange={evt => this.setState({ pieceSymbols: evt.target.value as PageState['pieceSymbols'] })}
119
- >
120
- <MenuItem value="native">Native</MenuItem>
121
- <MenuItem value="figurines">Figurines</MenuItem>
122
- <MenuItem value="custom">Custom</MenuItem>
123
- </Select>
124
- </FormControl>
125
- {this.renderCustomSymbolSelector()}
126
- </Stack>
127
- <Stack direction="row" spacing={2} alignItems="center">
128
- <FormControlLabel label="Flip diagram(s)"
129
- control={<Switch checked={opts.flipped} onChange={() => this.setDiagramOption({ flipped: !opts.flipped })} color="primary" />}
130
- />
131
- <FormControlLabel label="Show coordinates in diagram(s)"
132
- control={<Switch checked={opts.coordinateVisible} onChange={() => this.setDiagramOption({ coordinateVisible: !opts.coordinateVisible })} color="primary" />}
133
- />
134
- <FormControlLabel label="Show turn in diagram(s)"
135
- control={<Switch checked={opts.turnVisible} onChange={() => this.setDiagramOption({ turnVisible: !opts.turnVisible })} color="primary" />}
136
- />
137
- </Stack>
138
- <Stack direction="row" spacing={2} alignItems="center">
139
- <FormControl variant="standard">
140
- <InputLabel id="colorset-label">Colorset</InputLabel>
141
- <Select labelId="colorset-label" sx={{ width: '8em' }} value={opts.colorset} onChange={evt => this.setDiagramOption({ colorset: evt.target.value })}>
142
- {Object.keys(Chessboard.colorsets()).sort().map(colorset => <MenuItem key={colorset} value={colorset}>{colorset}</MenuItem>)}
143
- </Select>
144
- </FormControl>
145
- <FormControl variant="standard">
146
- <InputLabel id="pieceset-label">Pieceset</InputLabel>
147
- <Select labelId="pieceset-label" sx={{ width: '8em' }} value={opts.pieceset} onChange={evt => this.setDiagramOption({ pieceset: evt.target.value })}>
148
- {Object.keys(Chessboard.piecesets()).sort().map(pieceset => <MenuItem key={pieceset} value={pieceset}>{pieceset}</MenuItem>)}
149
- </Select>
150
- </FormControl>
151
- </Stack>
152
- <Box>
153
- <Typography gutterBottom>Diagram square size</Typography>
154
- <Slider
155
- value={opts.squareSize} onChange={(_, newValue) => this.setDiagramOption({ squareSize: newValue as number })}
156
- min={Chessboard.minSquareSize()} max={Chessboard.maxSquareSize()} step={1} valueLabelDisplay="on" color="primary"
157
- />
158
- </Box>
159
- </>);
100
+ return (
101
+ <>
102
+ <Stack direction="row" spacing={2} alignItems="center">
103
+ <ButtonGroup color="primary" size="small">
104
+ <Button onClick={() => this.setState({ pgn: game1 })}>Game 1</Button>
105
+ <Button onClick={() => this.setState({ pgn: game2 })}>Game 2</Button>
106
+ <Button onClick={() => this.setState({ pgn: invalidGame })}>Invalid game</Button>
107
+ </ButtonGroup>
108
+ <FormControlLabel
109
+ label="Show headers"
110
+ control={<Switch checked={this.state.headerVisible} onChange={() => this.setState({ headerVisible: !this.state.headerVisible })} color="primary" />}
111
+ />
112
+ <FormControlLabel
113
+ label="Show diagrams"
114
+ control={<Switch checked={this.state.diagramVisible} onChange={() => this.setState({ diagramVisible: !this.state.diagramVisible })} color="primary" />}
115
+ />
116
+ </Stack>
117
+ <Stack direction="row" spacing={2} alignItems="center">
118
+ <FormControl variant="standard">
119
+ <InputLabel id="piecesymbols-label">Piece symbols</InputLabel>
120
+ <Select
121
+ labelId="piecesymbols-label" sx={{ width: '8em' }} value={this.state.pieceSymbols}
122
+ onChange={evt => this.setState({ pieceSymbols: evt.target.value as PageState['pieceSymbols'] })}
123
+ >
124
+ <MenuItem value="native">Native</MenuItem>
125
+ <MenuItem value="figurines">Figurines</MenuItem>
126
+ <MenuItem value="custom">Custom</MenuItem>
127
+ </Select>
128
+ </FormControl>
129
+ {this.renderCustomSymbolSelector()}
130
+ </Stack>
131
+ <Stack direction="row" spacing={2} alignItems="center">
132
+ <FormControlLabel
133
+ label="Flip diagram(s)"
134
+ control={<Switch checked={opts.flipped} onChange={() => this.setDiagramOption({ flipped: !opts.flipped })} color="primary" />}
135
+ />
136
+ <FormControlLabel
137
+ label="Show coordinates in diagram(s)"
138
+ control={<Switch checked={opts.coordinateVisible} onChange={() => this.setDiagramOption({ coordinateVisible: !opts.coordinateVisible })} color="primary" />}
139
+ />
140
+ <FormControlLabel
141
+ label="Show turn in diagram(s)"
142
+ control={<Switch checked={opts.turnVisible} onChange={() => this.setDiagramOption({ turnVisible: !opts.turnVisible })} color="primary" />}
143
+ />
144
+ </Stack>
145
+ <Stack direction="row" spacing={2} alignItems="center">
146
+ <FormControl variant="standard">
147
+ <InputLabel id="colorset-label">Colorset</InputLabel>
148
+ <Select labelId="colorset-label" sx={{ width: '8em' }} value={opts.colorset} onChange={evt => this.setDiagramOption({ colorset: evt.target.value })}>
149
+ {Object.keys(Chessboard.colorsets()).sort().map(colorset => <MenuItem key={colorset} value={colorset}>{colorset}</MenuItem>)}
150
+ </Select>
151
+ </FormControl>
152
+ <FormControl variant="standard">
153
+ <InputLabel id="pieceset-label">Pieceset</InputLabel>
154
+ <Select labelId="pieceset-label" sx={{ width: '8em' }} value={opts.pieceset} onChange={evt => this.setDiagramOption({ pieceset: evt.target.value })}>
155
+ {Object.keys(Chessboard.piecesets()).sort().map(pieceset => <MenuItem key={pieceset} value={pieceset}>{pieceset}</MenuItem>)}
156
+ </Select>
157
+ </FormControl>
158
+ </Stack>
159
+ <Box>
160
+ <Typography gutterBottom>Diagram square size</Typography>
161
+ <Slider
162
+ value={opts.squareSize} onChange={(_, newValue) => this.setDiagramOption({ squareSize: newValue as number })}
163
+ min={Chessboard.minSquareSize()} max={Chessboard.maxSquareSize()} step={1} valueLabelDisplay="on" color="primary"
164
+ />
165
+ </Box>
166
+ </>
167
+ );
160
168
  }
161
169
 
162
170
  private renderCustomSymbolSelector() {
@@ -164,14 +172,16 @@ export default class Page extends React.Component<object, PageState> {
164
172
  return undefined;
165
173
  }
166
174
  const symbols = this.state.customSymbols;
167
- return (<>
168
- <TextField variant="standard" sx={{ width: '3em' }} label="King" value={symbols.K} onChange={evt => this.handleCustomSymbolChanged('K', evt.target.value)} />
169
- <TextField variant="standard" sx={{ width: '3em' }} label="Queen" value={symbols.Q} onChange={evt => this.handleCustomSymbolChanged('Q', evt.target.value)} />
170
- <TextField variant="standard" sx={{ width: '3em' }} label="Rook" value={symbols.R} onChange={evt => this.handleCustomSymbolChanged('R', evt.target.value)} />
171
- <TextField variant="standard" sx={{ width: '3em' }} label="Bishop" value={symbols.B} onChange={evt => this.handleCustomSymbolChanged('B', evt.target.value)} />
172
- <TextField variant="standard" sx={{ width: '3em' }} label="Knight" value={symbols.N} onChange={evt => this.handleCustomSymbolChanged('N', evt.target.value)} />
173
- <TextField variant="standard" sx={{ width: '3em' }} label="Pawn" value={symbols.P} onChange={evt => this.handleCustomSymbolChanged('P', evt.target.value)} />
174
- </>);
175
+ return (
176
+ <>
177
+ <TextField variant="standard" sx={{ width: '3em' }} label="King" value={symbols.K} onChange={evt => this.handleCustomSymbolChanged('K', evt.target.value)} />
178
+ <TextField variant="standard" sx={{ width: '3em' }} label="Queen" value={symbols.Q} onChange={evt => this.handleCustomSymbolChanged('Q', evt.target.value)} />
179
+ <TextField variant="standard" sx={{ width: '3em' }} label="Rook" value={symbols.R} onChange={evt => this.handleCustomSymbolChanged('R', evt.target.value)} />
180
+ <TextField variant="standard" sx={{ width: '3em' }} label="Bishop" value={symbols.B} onChange={evt => this.handleCustomSymbolChanged('B', evt.target.value)} />
181
+ <TextField variant="standard" sx={{ width: '3em' }} label="Knight" value={symbols.N} onChange={evt => this.handleCustomSymbolChanged('N', evt.target.value)} />
182
+ <TextField variant="standard" sx={{ width: '3em' }} label="Pawn" value={symbols.P} onChange={evt => this.handleCustomSymbolChanged('P', evt.target.value)} />
183
+ </>
184
+ );
175
185
  }
176
186
 
177
187
  private renderMovetext() {