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,49 +52,49 @@ export interface MovetextProps {
52
52
  * a [kokopu.Database](https://kokopu.yo35.org/docs/current/classes/Database.html) object,
53
53
  * or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation).
54
54
  */
55
- game: Game | Database | string;
55
+ game: Game | Database | string,
56
56
 
57
57
  /**
58
58
  * Index of the game to display (only if attribute `game` is a [kokopu.Database](https://kokopu.yo35.org/docs/current/classes/Database.html)
59
59
  * or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation)): `0` for the first game of the database/PGN, `1` for the second one, etc.
60
60
  * If omitted, the first game of the database/PGN is displayed.
61
61
  */
62
- gameIndex: number;
62
+ gameIndex: number,
63
63
 
64
64
  /**
65
65
  * Options applicable to the diagrams in the comments. See [Chessboard](#/Components/Chessboard) for more details about each option.
66
66
  */
67
67
  diagramOptions: Partial<StaticBoardGraphicProps> & {
68
68
  flipped?: boolean,
69
- };
69
+ },
70
70
 
71
71
  /**
72
72
  * Symbols to use for the chess pieces. See {@link moveFormatter}.
73
73
  */
74
- pieceSymbols: 'native' | 'localized' | 'figurines' | PieceSymbolMapping;
74
+ pieceSymbols: 'native' | 'localized' | 'figurines' | PieceSymbolMapping,
75
75
 
76
76
  /**
77
77
  * Whether the diagrams within the comments (if any) are displayed or not.
78
78
  */
79
- diagramVisible: boolean;
79
+ diagramVisible: boolean,
80
80
 
81
81
  /**
82
82
  * Whether the game headers (if any) are displayed or not.
83
83
  */
84
- headerVisible: boolean;
84
+ headerVisible: boolean,
85
85
 
86
86
  /**
87
87
  * ID of the selected move (or `'start'`/`'end'` for the beginning/end of the main variation).
88
88
  * Use [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id) to get the ID of a game move.
89
89
  */
90
- selection?: string;
90
+ selection?: string,
91
91
 
92
92
  /**
93
93
  * Type of action allowed with the mouse/keys on the component. If undefined, then the user cannot interact with the component.
94
94
  *
95
95
  * - `'selectMove'` allows the user to select a move.
96
96
  */
97
- interactionMode?: 'selectMove';
97
+ interactionMode?: 'selectMove',
98
98
 
99
99
  /**
100
100
  * Callback invoked when the user selects a move (only if `interactionMode` is set to `'selectMove'`).
@@ -109,7 +109,7 @@ export interface MovetextProps {
109
109
  * - `'key-exit'`: the event has been triggered by the "unselect-move" key (aka. the escape key),
110
110
  * - `'click'`: the event has been triggered by a mouse click on a move.
111
111
  */
112
- onMoveSelected?: (nodeId: string | undefined, evtOrigin: MoveSelectEventOrigin) => void;
112
+ onMoveSelected?: (nodeId: string | undefined, evtOrigin: MoveSelectEventOrigin) => void,
113
113
  }
114
114
 
115
115
 
@@ -127,7 +127,7 @@ export class Movetext extends React.Component<MovetextProps> {
127
127
  headerVisible: true,
128
128
  };
129
129
 
130
- private implRef: React.RefObject<MovetextImpl> = React.createRef();
130
+ private implRef = React.createRef<MovetextImpl>();
131
131
 
132
132
  render() {
133
133
 
@@ -151,7 +151,8 @@ export class Movetext extends React.Component<MovetextProps> {
151
151
  const { onMoveSelected } = this.props;
152
152
 
153
153
  return (
154
- <MovetextImpl ref={this.implRef}
154
+ <MovetextImpl
155
+ ref={this.implRef}
155
156
  game={info.game}
156
157
  diagramOptions={this.props.diagramOptions} moveFormatter={formatter} diagramVisible={diagramVisible} headerVisible={headerVisible}
157
158
  selection={selection} interactionMode={interactionMode} onMoveSelected={onMoveSelected}
@@ -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 *
@@ -39,19 +39,19 @@ import './Movetext.css';
39
39
 
40
40
  interface MovetextImplProps {
41
41
 
42
- game: Game;
42
+ game: Game,
43
43
 
44
44
  diagramOptions: Partial<StaticBoardGraphicProps> & {
45
45
  flipped?: boolean,
46
- };
47
- moveFormatter: (notation: string) => React.ReactNode;
48
- diagramVisible: boolean;
49
- headerVisible: boolean;
46
+ },
47
+ moveFormatter: (notation: string) => React.ReactNode,
48
+ diagramVisible: boolean,
49
+ headerVisible: boolean,
50
50
 
51
- selection?: string;
52
- interactionMode?: 'selectMove';
51
+ selection?: string,
52
+ interactionMode?: 'selectMove',
53
53
 
54
- onMoveSelected?: (nodeId: string | undefined, evtOrigin: 'key-first' | 'key-previous' | 'key-next' | 'key-last' | 'key-exit' | 'click') => void;
54
+ onMoveSelected?: (nodeId: string | undefined, evtOrigin: 'key-first' | 'key-previous' | 'key-next' | 'key-last' | 'key-exit' | 'click') => void,
55
55
  }
56
56
 
57
57
 
@@ -62,7 +62,7 @@ interface MovetextImplProps {
62
62
  */
63
63
  export class MovetextImpl extends React.Component<MovetextImplProps> {
64
64
 
65
- private navigationFieldRef: React.RefObject<NavigationField> = React.createRef();
65
+ private navigationFieldRef = React.createRef<NavigationField>();
66
66
 
67
67
  render() {
68
68
  return (
@@ -106,7 +106,8 @@ export class MovetextImpl extends React.Component<MovetextImplProps> {
106
106
  const titleElement = title === undefined ? undefined : <span className="kokopu-header-playerTitle">{filter(title)}</span>;
107
107
  const ratingElement = rating === undefined ? undefined : <span className="kokopu-header-playerRating">{rating}</span>;
108
108
  const separator = title === undefined || rating === undefined ? undefined : '\u00a0'; // \u00a0 == &nbsp;
109
- const titleRatingGroup = title === undefined && rating === undefined ? undefined :
109
+ const titleRatingGroup = title === undefined && rating === undefined ?
110
+ undefined :
110
111
  <span className="kokopu-headerGroup-titleRating">{titleElement}{separator}{ratingElement}</span>;
111
112
  return <div className={classNames.join(' ')} key={'player-' + color}>{colorTag}{playerNameElement}{titleRatingGroup}</div>;
112
113
  }
@@ -155,13 +156,16 @@ export class MovetextImpl extends React.Component<MovetextImplProps> {
155
156
  if (this.props.interactionMode !== 'selectMove') {
156
157
  return undefined;
157
158
  }
158
- return <NavigationField ref={this.navigationFieldRef}
159
- onFirstPressed={() => this.handleNavigationPressed(firstNodeId, 'key-first')}
160
- onPreviousPressed={() => this.handleNavigationPressed(previousNodeId, 'key-previous')}
161
- onNextPressed={() => this.handleNavigationPressed(nextNodeId, 'key-next')}
162
- onLastPressed={() => this.handleNavigationPressed(lastNodeId, 'key-last')}
163
- onExitPressed={() => this.handleExitPressed()}
164
- />;
159
+ return (
160
+ <NavigationField
161
+ ref={this.navigationFieldRef}
162
+ onFirstPressed={() => this.handleNavigationPressed(firstNodeId, 'key-first')}
163
+ onPreviousPressed={() => this.handleNavigationPressed(previousNodeId, 'key-previous')}
164
+ onNextPressed={() => this.handleNavigationPressed(nextNodeId, 'key-next')}
165
+ onLastPressed={() => this.handleNavigationPressed(lastNodeId, 'key-last')}
166
+ onExitPressed={() => this.handleExitPressed()}
167
+ />
168
+ );
165
169
  }
166
170
 
167
171
  private renderBody() {
@@ -268,7 +272,7 @@ export class MovetextImpl extends React.Component<MovetextImplProps> {
268
272
  // Move number
269
273
  let moveNumber: React.ReactNode = undefined;
270
274
  if (forcePrintMoveNumber || node.moveColor() === 'w') {
271
- const moveNumberText = node.fullMoveNumber() + (node.moveColor() === 'w' ? '.' : '\u2026');
275
+ const moveNumberText = node.fullMoveNumber() + (node.moveColor() === 'w' ? '.' : '\u2026');
272
276
  moveNumber = <span className="kokopu-moveNumber">{moveNumberText}</span>;
273
277
  }
274
278
 
@@ -313,17 +317,19 @@ export class MovetextImpl extends React.Component<MovetextImplProps> {
313
317
  for (let textSegment of comment.split('[#]')) {
314
318
  if (!isFirstTextSegment) {
315
319
  const position = node instanceof Variation ? node.initialPosition() : node.position();
316
- const diagram = <Chessboard
317
- position={position}
318
- squareMarkers={node.tag('csl')} arrowMarkers={node.tag('cal')} textMarkers={node.tag('ctl')}
319
- flipped={this.props.diagramOptions.flipped}
320
- squareSize={this.props.diagramOptions.squareSize}
321
- coordinateVisible={this.props.diagramOptions.coordinateVisible}
322
- turnVisible={this.props.diagramOptions.turnVisible}
323
- colorset={this.props.diagramOptions.colorset}
324
- pieceset={this.props.diagramOptions.pieceset}
325
- smallScreenLimits={this.props.diagramOptions.smallScreenLimits}
326
- />;
320
+ const diagram = (
321
+ <Chessboard
322
+ position={position}
323
+ squareMarkers={node.tag('csl')} arrowMarkers={node.tag('cal')} textMarkers={node.tag('ctl')}
324
+ flipped={this.props.diagramOptions.flipped}
325
+ squareSize={this.props.diagramOptions.squareSize}
326
+ coordinateVisible={this.props.diagramOptions.coordinateVisible}
327
+ turnVisible={this.props.diagramOptions.turnVisible}
328
+ colorset={this.props.diagramOptions.colorset}
329
+ pieceset={this.props.diagramOptions.pieceset}
330
+ smallScreenLimits={this.props.diagramOptions.smallScreenLimits}
331
+ />
332
+ );
327
333
  segmentElements.push(<div className="kokopu-diagram" key={'diagram-' + (diagramIndex++)}>{diagram}</div>);
328
334
  }
329
335
  isFirstTextSegment = false;
@@ -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 *
@@ -72,7 +72,7 @@ export function htmlFilter(type: 'header' | 'comment'): (text: string) => React.
72
72
  'ul', 'ol', 'li', // lists
73
73
  ]);
74
74
  Object.assign(allowedAttributes, {
75
- 'img': [ 'alt', 'src', 'height', 'width' ],
75
+ img: [ 'alt', 'src', 'height', 'width' ],
76
76
  });
77
77
  }
78
78
 
@@ -85,8 +85,8 @@ export function htmlFilter(type: 'header' | 'comment'): (text: string) => React.
85
85
 
86
86
 
87
87
  interface HtmlSanitizerProps {
88
- allowedTags?: string[];
89
- allowedAttributes?: Record<string, string[]>;
88
+ allowedTags?: string[],
89
+ allowedAttributes?: Record<string, string[]>,
90
90
  }
91
91
 
92
92
 
@@ -101,7 +101,7 @@ class HtmlSanitizer {
101
101
 
102
102
  constructor({ allowedTags, allowedAttributes }: HtmlSanitizerProps) {
103
103
  this.#allowedTags = allowedTags ? new Set(allowedTags) : new Set();
104
- this.#allowedAttributes = allowedAttributes ? new Map(Object.entries(allowedAttributes).map(([k, v]) => [k, new Set(v)])) : new Map();
104
+ this.#allowedAttributes = allowedAttributes ? new Map(Object.entries(allowedAttributes).map(([ k, v ]) => [ k, new Set(v) ])) : new Map();
105
105
  }
106
106
 
107
107
  /**
@@ -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,28 +49,28 @@ export interface NavigationBoardProps extends DynamicBoardGraphicProps {
49
49
  * a [kokopu.Database](https://kokopu.yo35.org/docs/current/classes/Database.html) object,
50
50
  * or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation).
51
51
  */
52
- game: Game | Database | string;
52
+ game: Game | Database | string,
53
53
 
54
54
  /**
55
55
  * Index of the game to display (only if attribute `game` is a [kokopu.Database](https://kokopu.yo35.org/docs/current/classes/Database.html)
56
56
  * or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation)): `0` for the first game of the database/PGN, `1` for the second one, etc.
57
57
  * If omitted, the first game of the database/PGN is displayed.
58
58
  */
59
- gameIndex: number;
59
+ gameIndex: number,
60
60
 
61
61
  /**
62
62
  * ID of the move initially selected (or `'start'`/`'end'` for the beginning/end of the main variation) when the component is uncontrolled.
63
63
  * Use [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id) to get the ID of a game move.
64
64
  * Ignored if the `nodeId` attribute is provided.
65
65
  */
66
- initialNodeId: string;
66
+ initialNodeId: string,
67
67
 
68
68
  /**
69
69
  * ID of the selected move (or `'start'`/`'end'` for the beginning/end of the main variation).
70
70
  * Use [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id) to get the ID of a game move.
71
71
  * If provided (i.e. if the component is controlled), the attribute `onNodeIdChanged` must be provided as well.
72
72
  */
73
- nodeId?: string;
73
+ nodeId?: string,
74
74
 
75
75
  /**
76
76
  * Callback invoked in controlled-component mode, when the user changes the selected move.
@@ -78,60 +78,60 @@ export interface NavigationBoardProps extends DynamicBoardGraphicProps {
78
78
  * @param nodeId - ID of the selected move (as returned by [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id)),
79
79
  * or `'start'` for the beginning of the main variation.
80
80
  */
81
- onNodeIdChanged?: (nodeId: string) => void;
81
+ onNodeIdChanged?: (nodeId: string) => void,
82
82
 
83
83
  /**
84
84
  * Whether auto-play is initially enabled or not.
85
85
  * Ignored if the `isPlaying` attribute is provided.
86
86
  */
87
- initialIsPlaying: boolean;
87
+ initialIsPlaying: boolean,
88
88
 
89
89
  /**
90
90
  * Whether auto-play is enabled or not.
91
91
  * If provided (i.e. if the is-playing state is controlled), the attribute `onIsPlayingChanged` must be provided as well.
92
92
  */
93
- isPlaying?: boolean;
93
+ isPlaying?: boolean,
94
94
 
95
95
  /**
96
96
  * Callback invoked in controlled-is-playing-state mode, when the user clicks on the play/stop button.
97
97
  *
98
98
  * @param isPlaying - New is-playing state.
99
99
  */
100
- onIsPlayingChanged?: (isPlaying: boolean) => void;
100
+ onIsPlayingChanged?: (isPlaying: boolean) => void,
101
101
 
102
102
  /**
103
103
  * Whether the board is initially flipped (i.e. seen from Black's point of view) or not, when the flip state is uncontrolled.
104
104
  * Ignored if the `flipped` attribute is provided.
105
105
  */
106
- initialFlipped: boolean;
106
+ initialFlipped: boolean,
107
107
 
108
108
  /**
109
109
  * Whether the board is flipped (i.e. seen from Black's point of view) or not.
110
110
  * If provided (i.e. if the flip state is controlled), the attribute `onFlippedChanged` must be provided as well.
111
111
  */
112
- flipped?: boolean;
112
+ flipped?: boolean,
113
113
 
114
114
  /**
115
115
  * Callback invoked in controlled-flip-state mode, when the user flips the board.
116
116
  *
117
117
  * @param flipped - New flip state.
118
118
  */
119
- onFlippedChanged?: (flipped: boolean) => void;
119
+ onFlippedChanged?: (flipped: boolean) => void,
120
120
 
121
121
  /**
122
122
  * Whether the play/stop button is visible or not in the toolbar.
123
123
  */
124
- playButtonVisible: boolean;
124
+ playButtonVisible: boolean,
125
125
 
126
126
  /**
127
127
  * Whether the flip button is visible or not in the toolbar.
128
128
  */
129
- flipButtonVisible: boolean;
129
+ flipButtonVisible: boolean,
130
130
 
131
131
  /**
132
132
  * Additional buttons to be added to the toolbar.
133
133
  */
134
- additionalButtons: NavigationBar;
134
+ additionalButtons: NavigationBar,
135
135
  }
136
136
 
137
137
 
@@ -139,13 +139,13 @@ export interface NavigationBoardProps extends DynamicBoardGraphicProps {
139
139
  * Attributes for method `NavigationBoard.size()`.
140
140
  */
141
141
  interface NavigationBoardSizeAttr {
142
- squareSize?: NavigationBoardProps['squareSize'];
143
- coordinateVisible?: NavigationBoardProps['coordinateVisible'];
144
- turnVisible?: NavigationBoardProps['turnVisible'];
145
- smallScreenLimits?: NavigationBoardProps['smallScreenLimits'];
146
- playButtonVisible?: NavigationBoardProps['playButtonVisible'];
147
- flipButtonVisible?: NavigationBoardProps['flipButtonVisible'];
148
- additionalButtons?: NavigationBarScheme;
142
+ squareSize?: NavigationBoardProps['squareSize'],
143
+ coordinateVisible?: NavigationBoardProps['coordinateVisible'],
144
+ turnVisible?: NavigationBoardProps['turnVisible'],
145
+ smallScreenLimits?: NavigationBoardProps['smallScreenLimits'],
146
+ playButtonVisible?: NavigationBoardProps['playButtonVisible'],
147
+ flipButtonVisible?: NavigationBoardProps['flipButtonVisible'],
148
+ additionalButtons?: NavigationBarScheme,
149
149
  }
150
150
 
151
151
 
@@ -153,19 +153,19 @@ interface NavigationBoardSizeAttr {
153
153
  * Attributes for method `NavigationBoard.adaptSquareSize()`.
154
154
  */
155
155
  interface NavigationBoardAdaptSquareSizeAttr {
156
- coordinateVisible?: NavigationBoardProps['coordinateVisible'];
157
- turnVisible?: NavigationBoardProps['turnVisible'];
158
- smallScreenLimits?: NavigationBoardProps['smallScreenLimits'];
159
- playButtonVisible?: NavigationBoardProps['playButtonVisible'];
160
- flipButtonVisible?: NavigationBoardProps['flipButtonVisible'];
161
- additionalButtons?: NavigationBarScheme;
156
+ coordinateVisible?: NavigationBoardProps['coordinateVisible'],
157
+ turnVisible?: NavigationBoardProps['turnVisible'],
158
+ smallScreenLimits?: NavigationBoardProps['smallScreenLimits'],
159
+ playButtonVisible?: NavigationBoardProps['playButtonVisible'],
160
+ flipButtonVisible?: NavigationBoardProps['flipButtonVisible'],
161
+ additionalButtons?: NavigationBarScheme,
162
162
  }
163
163
 
164
164
 
165
165
  interface NavigationBoardState {
166
- nodeIdAsUncontrolled: string;
167
- isPlayingAsUncontrolled: boolean;
168
- flippedAsUncontrolled: boolean;
166
+ nodeIdAsUncontrolled: string,
167
+ isPlayingAsUncontrolled: boolean,
168
+ flippedAsUncontrolled: boolean,
169
169
  }
170
170
 
171
171
 
@@ -186,7 +186,7 @@ export class NavigationBoard extends React.Component<NavigationBoardProps, Navig
186
186
  additionalButtons: [],
187
187
  };
188
188
 
189
- private navigationFieldRef: React.RefObject<NavigationField> = React.createRef();
189
+ private navigationFieldRef = React.createRef<NavigationField>();
190
190
  private timeoutId?: number;
191
191
 
192
192
  constructor(props: NavigationBoardProps) {
@@ -230,29 +230,34 @@ export class NavigationBoard extends React.Component<NavigationBoardProps, Navig
230
230
  private renderBoard(game: Game, node: GameNode | Variation, isPlaying: boolean, flipped: boolean) {
231
231
  const position = node instanceof GameNode ? node.positionBefore() : node.initialPosition();
232
232
  const move = node instanceof GameNode ? node.notation() : undefined;
233
- return <Chessboard
234
- position={position} move={move} flipped={flipped}
235
- squareMarkers={node.tag('csl')} arrowMarkers={node.tag('cal')} textMarkers={node.tag('ctl')}
236
- squareSize={this.props.squareSize}
237
- coordinateVisible={this.props.coordinateVisible}
238
- turnVisible={this.props.turnVisible}
239
- colorset={this.props.colorset}
240
- pieceset={this.props.pieceset}
241
- smallScreenLimits={this.props.smallScreenLimits}
242
- moveArrowVisible={this.props.moveArrowVisible}
243
- moveArrowColor={this.props.moveArrowColor}
244
- animated={this.props.animated}
245
- bottomComponent={({ squareSize }) => this.renderToolbar(game, node, squareSize, isPlaying)}
246
- />;
233
+ return (
234
+ <Chessboard
235
+ position={position} move={move} flipped={flipped}
236
+ squareMarkers={node.tag('csl')} arrowMarkers={node.tag('cal')} textMarkers={node.tag('ctl')}
237
+ squareSize={this.props.squareSize}
238
+ coordinateVisible={this.props.coordinateVisible}
239
+ turnVisible={this.props.turnVisible}
240
+ colorset={this.props.colorset}
241
+ pieceset={this.props.pieceset}
242
+ smallScreenLimits={this.props.smallScreenLimits}
243
+ moveArrowVisible={this.props.moveArrowVisible}
244
+ moveArrowColor={this.props.moveArrowColor}
245
+ animated={this.props.animated}
246
+ bottomComponent={({ squareSize }) => this.renderToolbar(game, node, squareSize, isPlaying)}
247
+ />
248
+ );
247
249
  }
248
250
 
249
251
  private renderNavigationField(game: Game, currentNodeId: string) {
250
- return <NavigationField ref={this.navigationFieldRef}
251
- onFirstPressed={() => this.handleNavClicked(firstNodeId(game, currentNodeId))}
252
- onPreviousPressed={() => this.handleNavClicked(previousNodeId(game, currentNodeId))}
253
- onNextPressed={() => this.handleNavClicked(nextNodeId(game, currentNodeId))}
254
- onLastPressed={() => this.handleNavClicked(lastNodeId(game, currentNodeId))}
255
- />;
252
+ return (
253
+ <NavigationField
254
+ ref={this.navigationFieldRef}
255
+ onFirstPressed={() => this.handleNavClicked(firstNodeId(game, currentNodeId))}
256
+ onPreviousPressed={() => this.handleNavClicked(previousNodeId(game, currentNodeId))}
257
+ onNextPressed={() => this.handleNavClicked(nextNodeId(game, currentNodeId))}
258
+ onLastPressed={() => this.handleNavClicked(lastNodeId(game, currentNodeId))}
259
+ />
260
+ );
256
261
  }
257
262
 
258
263
  private renderToolbar(game: Game, node: GameNode | Variation, squareSize: number, isPlaying: boolean) {
@@ -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 *
@@ -33,22 +33,22 @@ export type NavigationButton = {
33
33
  *
34
34
  * The path is rendered within 32 x 32 viewbox (defined as `viewbox="0 0 32 32"`). It must be be a closed path, and must fit within the viewbox incircle.
35
35
  */
36
- iconPath: string;
36
+ iconPath: string,
37
37
 
38
38
  /**
39
39
  * Human-readable tooltip.
40
40
  */
41
- tooltip?: string;
41
+ tooltip?: string,
42
42
 
43
43
  /**
44
44
  * Whether or not the button is enabled (true by default).
45
45
  */
46
- enabled?: boolean;
46
+ enabled?: boolean,
47
47
 
48
48
  /**
49
49
  * Callback invoked when the user clicks on the button.
50
50
  */
51
- onClick?: () => void;
51
+ onClick?: () => void,
52
52
  };
53
53
 
54
54
 
@@ -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 *
@@ -30,11 +30,11 @@ import './NavigationField.css';
30
30
 
31
31
 
32
32
  interface NavigationFieldProps {
33
- onFirstPressed?: () => void;
34
- onPreviousPressed?: () => void;
35
- onNextPressed?: () => void;
36
- onLastPressed?: () => void;
37
- onExitPressed?: () => void;
33
+ onFirstPressed?: () => void,
34
+ onPreviousPressed?: () => void,
35
+ onNextPressed?: () => void,
36
+ onLastPressed?: () => void,
37
+ onExitPressed?: () => void,
38
38
  }
39
39
 
40
40
 
@@ -43,7 +43,7 @@ interface NavigationFieldProps {
43
43
  */
44
44
  export class NavigationField extends React.Component<NavigationFieldProps> {
45
45
 
46
- private focusFieldRef: React.RefObject<HTMLAnchorElement> = React.createRef();
46
+ private focusFieldRef = React.createRef<HTMLAnchorElement>();
47
47
 
48
48
  render() {
49
49
  return (
@@ -54,7 +54,7 @@ export class NavigationField extends React.Component<NavigationFieldProps> {
54
54
  }
55
55
 
56
56
  private handleKeyDown(evt: React.KeyboardEvent<HTMLAnchorElement>) {
57
- /* eslint-disable no-unused-expressions */
57
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
58
58
  doHandleKeyDown(evt, 'Home', this.props.onFirstPressed) ||
59
59
  doHandleKeyDown(evt, 'ArrowLeft', this.props.onPreviousPressed) ||
60
60
  doHandleKeyDown(evt, 'ArrowRight', this.props.onNextPressed) ||
@@ -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 *