kokopu-react 3.1.0 → 3.2.0

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 (234) hide show
  1. package/.eslintrc.yml +1 -1
  2. package/CHANGELOG.md +6 -0
  3. package/dist/lib/chessboard/BoardProperties.js.map +1 -1
  4. package/dist/lib/chessboard/Chessboard.css +13 -13
  5. package/dist/lib/chessboard/Chessboard.js.map +1 -1
  6. package/dist/lib/chessboard/ChessboardImpl.js.map +1 -1
  7. package/dist/lib/chessboard/Draggable.js.map +1 -1
  8. package/dist/lib/chessboard/Motion.js.map +1 -1
  9. package/dist/lib/chessboard/colorsets.js.map +1 -1
  10. package/dist/lib/chessboard/piecesets.js.map +1 -1
  11. package/dist/lib/errorbox/ErrorBox.css +18 -18
  12. package/dist/lib/errorbox/ErrorBox.js.map +1 -1
  13. package/dist/lib/errorbox/parsing.js.map +1 -1
  14. package/dist/lib/exception.js.map +1 -1
  15. package/dist/lib/i18n.d.ts +1 -0
  16. package/dist/lib/i18n.js +1 -0
  17. package/dist/lib/i18n.js.map +1 -1
  18. package/dist/lib/icons/AnnotationSymbolShape.css +6 -6
  19. package/dist/lib/icons/AnnotationSymbolShape.js.map +1 -1
  20. package/dist/lib/icons/ArrowMarkerIcon.js.map +1 -1
  21. package/dist/lib/icons/ArrowTip.js.map +1 -1
  22. package/dist/lib/icons/ChessPieceIcon.js.map +1 -1
  23. package/dist/lib/icons/SquareMarkerIcon.js.map +1 -1
  24. package/dist/lib/icons/TextMarkerIcon.js.map +1 -1
  25. package/dist/lib/icons/arrow.css +1 -1
  26. package/dist/lib/index.d.ts +1 -0
  27. package/dist/lib/index.js +1 -0
  28. package/dist/lib/index.js.map +1 -1
  29. package/dist/lib/movetext/Movetext.css +27 -27
  30. package/dist/lib/movetext/Movetext.js.map +1 -1
  31. package/dist/lib/movetext/MovetextImpl.js.map +1 -1
  32. package/dist/lib/movetext/fonts.css +7 -7
  33. package/dist/lib/movetext/htmlFilter.js.map +1 -1
  34. package/dist/lib/movetext/moveFormatter.js.map +1 -1
  35. package/dist/lib/navigationboard/NavigationBoard.d.ts +39 -1
  36. package/dist/lib/navigationboard/NavigationBoard.js +94 -11
  37. package/dist/lib/navigationboard/NavigationBoard.js.map +1 -1
  38. package/dist/lib/navigationboard/NavigationButton.d.ts +54 -0
  39. package/dist/lib/navigationboard/NavigationButton.js +35 -0
  40. package/dist/lib/navigationboard/NavigationButton.js.map +1 -0
  41. package/dist/lib/navigationboard/NavigationField.css +7 -7
  42. package/dist/lib/navigationboard/NavigationField.js.map +1 -1
  43. package/dist/lib/navigationboard/NavigationToolbar.css +16 -13
  44. package/dist/lib/navigationboard/NavigationToolbar.d.ts +3 -10
  45. package/dist/lib/navigationboard/NavigationToolbar.js +31 -82
  46. package/dist/lib/navigationboard/NavigationToolbar.js.map +1 -1
  47. package/dist/lib/navigationboard/iconPaths.d.ts +29 -0
  48. package/dist/lib/navigationboard/iconPaths.js +91 -0
  49. package/dist/lib/navigationboard/iconPaths.js.map +1 -0
  50. package/dist/lib/sanitization.js.map +1 -1
  51. package/dist/lib/types.js.map +1 -1
  52. package/dist/lib/util.js.map +1 -1
  53. package/doc_src/demo/PageChessboardBase.tsx +115 -115
  54. package/doc_src/demo/PageChessboardInteraction.tsx +303 -303
  55. package/doc_src/demo/PageChessboardMove.tsx +173 -173
  56. package/doc_src/demo/PageChessboardSmallScreens.tsx +94 -94
  57. package/doc_src/demo/PageMovetextBase.tsx +180 -180
  58. package/doc_src/demo/PageMovetextInteraction.tsx +123 -123
  59. package/doc_src/demo/PageNavigationBoardBase.tsx +144 -137
  60. package/doc_src/demo/PageNavigationBoardUncontrolledVsControlled.tsx +69 -69
  61. package/doc_src/demo/decs.d.ts +4 -4
  62. package/doc_src/demo/demo.css +12 -12
  63. package/doc_src/demo/util.ts +1 -1
  64. package/doc_src/examples/NavigationBoard.md +1 -1
  65. package/doc_src/theming/LogoRenderer.js +13 -13
  66. package/doc_src/theming/theming.css +5 -5
  67. package/package.json +95 -95
  68. package/scripts/doc.styleguide.config.js +131 -131
  69. package/scripts/doc.tsconfig.json +5 -5
  70. package/scripts/docker-compose.yml +1 -1
  71. package/scripts/test-graphic.tsconfig.json +5 -5
  72. package/scripts/test-graphic.webpack.config.js +57 -57
  73. package/scripts/test-headless.webpack.config.js +29 -29
  74. package/src/chessboard/BoardProperties.ts +68 -68
  75. package/src/chessboard/Chessboard.css +13 -13
  76. package/src/chessboard/Chessboard.tsx +380 -380
  77. package/src/chessboard/ChessboardImpl.tsx +557 -557
  78. package/src/chessboard/Draggable.tsx +185 -185
  79. package/src/chessboard/Motion.tsx +67 -67
  80. package/src/chessboard/colorsets.ts +66 -66
  81. package/src/chessboard/piecesets.ts +84 -84
  82. package/src/decs.d.ts +2 -2
  83. package/src/errorbox/ErrorBox.css +18 -18
  84. package/src/errorbox/ErrorBox.tsx +75 -75
  85. package/src/errorbox/parsing.tsx +95 -95
  86. package/src/exception.ts +17 -17
  87. package/src/i18n.ts +1 -0
  88. package/src/icons/AnnotationSymbolShape.css +6 -6
  89. package/src/icons/AnnotationSymbolShape.tsx +31 -31
  90. package/src/icons/ArrowMarkerIcon.tsx +34 -34
  91. package/src/icons/ArrowTip.tsx +14 -14
  92. package/src/icons/ChessPieceIcon.tsx +45 -45
  93. package/src/icons/SquareMarkerIcon.tsx +20 -20
  94. package/src/icons/TextMarkerIcon.tsx +29 -29
  95. package/src/icons/arrow.css +1 -1
  96. package/src/index.ts +3 -2
  97. package/src/movetext/Movetext.css +27 -27
  98. package/src/movetext/Movetext.tsx +158 -158
  99. package/src/movetext/MovetextImpl.tsx +345 -345
  100. package/src/movetext/fonts.css +7 -7
  101. package/src/movetext/htmlFilter.tsx +129 -129
  102. package/src/movetext/moveFormatter.tsx +37 -37
  103. package/src/navigationboard/NavigationBoard.tsx +297 -178
  104. package/src/navigationboard/NavigationButton.ts +72 -0
  105. package/src/navigationboard/NavigationField.css +7 -7
  106. package/src/navigationboard/NavigationField.tsx +90 -90
  107. package/src/navigationboard/NavigationToolbar.css +16 -13
  108. package/src/navigationboard/NavigationToolbar.tsx +60 -117
  109. package/src/navigationboard/iconPaths.ts +98 -0
  110. package/src/sanitization.ts +17 -17
  111. package/src/types.ts +116 -116
  112. package/src/util.ts +11 -11
  113. package/test/01_types.js +167 -167
  114. package/test/02_chessboard_util.js +114 -114
  115. package/test/03_error_box_graphic.js +16 -16
  116. package/test/04_icons_graphic.js +32 -32
  117. package/test/05_chessboard_graphic.js +60 -60
  118. package/test/06_chessboard_animation.js +36 -36
  119. package/test/07_chessboard_interaction.js +101 -101
  120. package/test/08_chessboard_play_moves.js +62 -62
  121. package/test/09_chessboard_small_screens.js +32 -32
  122. package/test/10_movetext_graphic.js +32 -32
  123. package/test/11_movetext_interaction.js +100 -100
  124. package/test/12_navigation_board_base.js +151 -0
  125. package/test/13_navigation_board_graphic.js +68 -0
  126. package/test/14_navigation_board_autoplay.js +100 -0
  127. package/test/common/graphic.js +106 -97
  128. package/test/graphic_references/12_navigation_board_base/controlled/default.png +0 -0
  129. package/test/graphic_references/{12_navigation_board/controlled/forbidden_navigation_1.png → 12_navigation_board_base/controlled/forbidden_navigation_0.png} +0 -0
  130. package/test/graphic_references/{12_navigation_board/controlled/invalid_node_id.png → 12_navigation_board_base/controlled/forbidden_navigation_1.png} +0 -0
  131. package/test/graphic_references/{12_navigation_board/controlled/forbidden_navigation_0.png → 12_navigation_board_base/controlled/invalid_node_id.png} +0 -0
  132. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_0.png +0 -0
  133. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/controlled/no_callback_defined_1.png +0 -0
  134. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/controlled/overriding_initial_node_id.png +0 -0
  135. package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_1.png → 12_navigation_board_base/controlled/regular_navigation_0.png} +0 -0
  136. package/test/graphic_references/{12_navigation_board/uncontrolled/initial_state_at_specific_id.png → 12_navigation_board_base/controlled/regular_navigation_1.png} +0 -0
  137. package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_3.png → 12_navigation_board_base/controlled/regular_navigation_2.png} +0 -0
  138. package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_0.png → 12_navigation_board_base/controlled/regular_navigation_3.png} +0 -0
  139. package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_beginning_2.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_0.png} +0 -0
  140. package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_beginning_0.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_1.png} +0 -0
  141. package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_beginning_1.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_2.png} +0 -0
  142. package/test/graphic_references/{12_navigation_board/controlled/no_callback_defined_0.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_0.png} +0 -0
  143. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_1.png +0 -0
  144. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_2.png +0 -0
  145. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_at_end.png +0 -0
  146. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_specific_id.png +0 -0
  147. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_default.png +0 -0
  148. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_default_with_game_index.png +0 -0
  149. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_on_null-move.png +0 -0
  150. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_0.png +0 -0
  151. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_1.png +0 -0
  152. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_2.png +0 -0
  153. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_3.png +0 -0
  154. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_4.png +0 -0
  155. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_flipping_0.png +0 -0
  156. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_flipping_1.png +0 -0
  157. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_0.png +0 -0
  158. package/test/graphic_references/{12_navigation_board/controlled/default.png → 12_navigation_board_base/uncontrolled/regular_navigation_1.png} +0 -0
  159. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_2.png +0 -0
  160. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_3.png +0 -0
  161. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_4.png +0 -0
  162. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_5.png +0 -0
  163. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_1.png +0 -0
  164. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_2.png +0 -0
  165. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/multiple_buttons.png +0 -0
  166. package/test/graphic_references/{12_navigation_board/uncontrolled/regular_navigation_3.png → 13_navigation_board_graphic/additional_buttons/single_button.png} +0 -0
  167. package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/custom_1.png +0 -0
  168. package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/custom_2.png +0 -0
  169. package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/large.png +0 -0
  170. package/test/graphic_references/13_navigation_board_graphic/theme/small.png +0 -0
  171. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_acknowledging_is-playing_changes.png +0 -0
  172. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_not_acknowledging_is-playing_changes.png +0 -0
  173. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_acknowledging_node_changes.png +0 -0
  174. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_not_acknowledging_node_changes.png +0 -0
  175. package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_end_1.png → 14_navigation_board_autoplay/controlled/after_reaching_the_end.png} +0 -0
  176. package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_end_2.png → 14_navigation_board_autoplay/controlled/already_at_the_end.png} +0 -0
  177. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_is-playing_changes.png +0 -0
  178. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_node_changes.png +0 -0
  179. package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_end_0.png → 14_navigation_board_autoplay/controlled/initial_state_at_the_end.png} +0 -0
  180. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_close_to_end.png +0 -0
  181. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_is-playing_changes.png +0 -0
  182. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_node_changes.png +0 -0
  183. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_after_stop.png +0 -0
  184. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_before_stop.png +0 -0
  185. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_after_stop.png +0 -0
  186. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_before_stop.png +0 -0
  187. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_close_to_end.png +0 -0
  188. package/test/graphic_references/{12_navigation_board/uncontrolled/navigation_with_keys_1.png → 14_navigation_board_autoplay/uncontrolled/initial_state_default.png} +0 -0
  189. package/test/graphic_test_app/03_error_box_graphic/base.tsx +14 -14
  190. package/test/graphic_test_app/03_error_box_graphic/localization.tsx +1 -1
  191. package/test/graphic_test_app/04_icons_graphic/chess_piece.tsx +7 -7
  192. package/test/graphic_test_app/04_icons_graphic/marker.tsx +15 -15
  193. package/test/graphic_test_app/05_chessboard_graphic/annotations.tsx +7 -7
  194. package/test/graphic_test_app/05_chessboard_graphic/base.tsx +6 -6
  195. package/test/graphic_test_app/05_chessboard_graphic/chess_variants.tsx +7 -7
  196. package/test/graphic_test_app/05_chessboard_graphic/flipped.tsx +5 -5
  197. package/test/graphic_test_app/05_chessboard_graphic/move.tsx +12 -12
  198. package/test/graphic_test_app/05_chessboard_graphic/theme.tsx +12 -12
  199. package/test/graphic_test_app/06_chessboard_animation/base_1.tsx +6 -6
  200. package/test/graphic_test_app/06_chessboard_animation/base_2.tsx +6 -6
  201. package/test/graphic_test_app/06_chessboard_animation/base_3.tsx +6 -6
  202. package/test/graphic_test_app/06_chessboard_animation/on_redraw.tsx +16 -16
  203. package/test/graphic_test_app/07_chessboard_interaction/click_squares.tsx +5 -5
  204. package/test/graphic_test_app/07_chessboard_interaction/edit_arrows.tsx +4 -4
  205. package/test/graphic_test_app/07_chessboard_interaction/error.tsx +2 -2
  206. package/test/graphic_test_app/07_chessboard_interaction/move_pieces.tsx +5 -5
  207. package/test/graphic_test_app/08_chessboard_play_moves/base.tsx +8 -8
  208. package/test/graphic_test_app/08_chessboard_play_moves/promotions.tsx +4 -4
  209. package/test/graphic_test_app/09_chessboard_small_screens/base.tsx +9 -9
  210. package/test/graphic_test_app/09_chessboard_small_screens/top_bottom_components.tsx +9 -9
  211. package/test/graphic_test_app/10_movetext_graphic/base.tsx +4 -4
  212. package/test/graphic_test_app/10_movetext_graphic/error.tsx +6 -6
  213. package/test/graphic_test_app/10_movetext_graphic/format_move.tsx +1 -1
  214. package/test/graphic_test_app/10_movetext_graphic/html.tsx +5 -5
  215. package/test/graphic_test_app/10_movetext_graphic/options.tsx +10 -10
  216. package/test/graphic_test_app/11_movetext_interaction/error.tsx +1 -1
  217. package/test/graphic_test_app/11_movetext_interaction/select_moves.tsx +11 -11
  218. package/test/graphic_test_app/{12_navigation_board → 12_navigation_board_base}/controlled.tsx +5 -5
  219. package/test/graphic_test_app/{12_navigation_board → 12_navigation_board_base}/uncontrolled.tsx +7 -7
  220. package/test/graphic_test_app/13_navigation_board_graphic/additional_buttons.tsx +49 -0
  221. package/test/graphic_test_app/{12_navigation_board → 13_navigation_board_graphic}/error.tsx +2 -2
  222. package/test/graphic_test_app/{12_navigation_board → 13_navigation_board_graphic}/theme.tsx +4 -4
  223. package/test/graphic_test_app/14_navigation_board_autoplay/controlled.tsx +73 -0
  224. package/test/graphic_test_app/14_navigation_board_autoplay/uncontrolled.tsx +34 -0
  225. package/test/graphic_test_app/common/decs.d.ts +2 -2
  226. package/test/graphic_test_app/common/test_app.css +15 -15
  227. package/test/graphic_test_app/common/test_app.tsx +48 -48
  228. package/tsconfig.json +13 -13
  229. package/test/12_navigation_board.js +0 -168
  230. package/test/graphic_references/12_navigation_board/controlled/regular_navigation_2.png +0 -0
  231. package/test/graphic_references/12_navigation_board/theme/small.png +0 -0
  232. package/test/graphic_references/12_navigation_board/uncontrolled/regular_navigation_1.png +0 -0
  233. /package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/error/pgn_parsing_error.png +0 -0
  234. /package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/error/wrong_game_type.png +0 -0
@@ -33,20 +33,20 @@ const SQUARE_MARGIN_FACTOR = 0.1;
33
33
 
34
34
  export interface SquareMarkerIconProps {
35
35
 
36
- /**
37
- * Width and height (in pixels) of the icon.
38
- */
39
- size: number;
36
+ /**
37
+ * Width and height (in pixels) of the icon.
38
+ */
39
+ size: number;
40
40
 
41
- /**
42
- * [CSS color](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value) to use to colorize the icon (for example: `'green'`, `'#ff0000'`...).
43
- */
44
- color: string;
41
+ /**
42
+ * [CSS color](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value) to use to colorize the icon (for example: `'green'`, `'#ff0000'`...).
43
+ */
44
+ color: string;
45
45
  }
46
46
 
47
47
 
48
48
  const defaultProps: Partial<SquareMarkerIconProps> = {
49
- color: 'currentcolor',
49
+ color: 'currentcolor',
50
50
  };
51
51
 
52
52
 
@@ -55,18 +55,18 @@ const defaultProps: Partial<SquareMarkerIconProps> = {
55
55
  */
56
56
  export function SquareMarkerIcon({ size, color }: SquareMarkerIconProps) {
57
57
 
58
- // Sanitize the inputs.
59
- size = sanitizeBoundedInteger(size, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, () => new IllegalArgument('SquareMarkerIcon', 'size'));
60
- color = sanitizeString(color);
58
+ // Sanitize the inputs.
59
+ size = sanitizeBoundedInteger(size, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, () => new IllegalArgument('SquareMarkerIcon', 'size'));
60
+ color = sanitizeString(color);
61
61
 
62
- // Render the component.
63
- const margin = Math.round(size * SQUARE_MARGIN_FACTOR);
64
- const viewBox = `0 0 ${size} ${size}`;
65
- return (
66
- <svg className="kokopu-squareMarkerIcon" viewBox={viewBox} width={size} height={size}>
67
- <rect x={margin} y={margin} width={size - margin * 2} height={size - margin * 2} fill={color} />
68
- </svg>
69
- );
62
+ // Render the component.
63
+ const margin = Math.round(size * SQUARE_MARGIN_FACTOR);
64
+ const viewBox = `0 0 ${size} ${size}`;
65
+ return (
66
+ <svg className="kokopu-squareMarkerIcon" viewBox={viewBox} width={size} height={size}>
67
+ <rect x={margin} y={margin} width={size - margin * 2} height={size - margin * 2} fill={color} />
68
+ </svg>
69
+ );
70
70
  }
71
71
 
72
72
  SquareMarkerIcon.defaultProps = defaultProps;
@@ -33,25 +33,25 @@ import { AnnotationSymbolShape } from './AnnotationSymbolShape';
33
33
 
34
34
  export interface TextMarkerIconProps {
35
35
 
36
- /**
37
- * Width and height (in pixels) of the icon.
38
- */
39
- size: number;
40
-
41
- /**
42
- * Symbol to represent on the icon.
43
- */
44
- symbol: AnnotationSymbol;
45
-
46
- /**
47
- * [CSS color](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value) to use to colorize the icon (for example: `'green'`, `'#ff0000'`...).
48
- */
49
- color: string;
36
+ /**
37
+ * Width and height (in pixels) of the icon.
38
+ */
39
+ size: number;
40
+
41
+ /**
42
+ * Symbol to represent on the icon.
43
+ */
44
+ symbol: AnnotationSymbol;
45
+
46
+ /**
47
+ * [CSS color](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value) to use to colorize the icon (for example: `'green'`, `'#ff0000'`...).
48
+ */
49
+ color: string;
50
50
  }
51
51
 
52
52
 
53
53
  const defaultProps: Partial<TextMarkerIconProps> = {
54
- color: 'currentcolor',
54
+ color: 'currentcolor',
55
55
  };
56
56
 
57
57
 
@@ -60,20 +60,20 @@ const defaultProps: Partial<TextMarkerIconProps> = {
60
60
  */
61
61
  export function TextMarkerIcon({ size, symbol, color }: TextMarkerIconProps) {
62
62
 
63
- // Sanitize the inputs.
64
- size = sanitizeBoundedInteger(size, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, () => new IllegalArgument('TextMarkerIcon', 'size'));
65
- if (!isAnnotationSymbol(symbol)) {
66
- throw new IllegalArgument('TextMarkerIcon', 'symbol');
67
- }
68
- color = sanitizeString(color);
69
-
70
- // Render the component.
71
- const viewBox = `0 0 ${size} ${size}`;
72
- return (
73
- <svg className="kokopu-textMarkerIcon" viewBox={viewBox} width={size} height={size}>
74
- <AnnotationSymbolShape x={size / 2} y={size / 2} size={size} symbol={symbol} color={color} />
75
- </svg>
76
- );
63
+ // Sanitize the inputs.
64
+ size = sanitizeBoundedInteger(size, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, () => new IllegalArgument('TextMarkerIcon', 'size'));
65
+ if (!isAnnotationSymbol(symbol)) {
66
+ throw new IllegalArgument('TextMarkerIcon', 'symbol');
67
+ }
68
+ color = sanitizeString(color);
69
+
70
+ // Render the component.
71
+ const viewBox = `0 0 ${size} ${size}`;
72
+ return (
73
+ <svg className="kokopu-textMarkerIcon" viewBox={viewBox} width={size} height={size}>
74
+ <AnnotationSymbolShape x={size / 2} y={size / 2} size={size} symbol={symbol} color={color} />
75
+ </svg>
76
+ );
77
77
  }
78
78
 
79
79
  TextMarkerIcon.defaultProps = defaultProps;
@@ -23,5 +23,5 @@
23
23
 
24
24
 
25
25
  .kokopu-arrow {
26
- stroke-linecap: round;
26
+ stroke-linecap: round;
27
27
  }
package/src/index.ts CHANGED
@@ -26,8 +26,8 @@ export { i18n } from './i18n';
26
26
  export * as exception from './exception';
27
27
 
28
28
  export { ChessPieceIconType, Colorset, Pieceset, PieceSymbolMapping, AnnotationColor, AnnotationSymbol, SquareMarkerSet, TextMarkerSet, ArrowMarkerSet,
29
- isChessPieceIconType, isPieceSymbolMapping, isAnnotationColor, isAnnotationSymbol, flattenSquareMarkers, flattenTextMarkers, flattenArrowMarkers,
30
- parseSquareMarkers, parseTextMarkers, parseArrowMarkers } from './types';
29
+ isChessPieceIconType, isPieceSymbolMapping, isAnnotationColor, isAnnotationSymbol, flattenSquareMarkers, flattenTextMarkers, flattenArrowMarkers,
30
+ parseSquareMarkers, parseTextMarkers, parseArrowMarkers } from './types';
31
31
 
32
32
  export { ErrorBox, ErrorBoxProps } from './errorbox/ErrorBox';
33
33
 
@@ -42,5 +42,6 @@ export { Chessboard, ChessboardProps } from './chessboard/Chessboard';
42
42
  export { formatMove, moveFormatter } from './movetext/moveFormatter';
43
43
  export { Movetext, MovetextProps, MoveSelectEventOrigin } from './movetext/Movetext';
44
44
 
45
+ export { NavigationButton, NavigationButtonList, isNavigationButton } from './navigationboard/NavigationButton';
45
46
  export { firstNodeId, previousNodeId, nextNodeId, lastNodeId } from './navigationboard/NavigationField';
46
47
  export { NavigationBoard, NavigationBoardProps } from './navigationboard/NavigationBoard';
@@ -23,88 +23,88 @@
23
23
 
24
24
 
25
25
  .kokopu-colorTag {
26
- width : 1.2em;
27
- height: 1.2em;
28
- vertical-align: middle;
29
- display: inline-block;
30
- border: 1px solid black;
31
- margin-right: 0.25em;
26
+ width : 1.2em;
27
+ height: 1.2em;
28
+ vertical-align: middle;
29
+ display: inline-block;
30
+ border: 1px solid black;
31
+ margin-right: 0.25em;
32
32
  }
33
33
 
34
34
  .kokopu-headerGroup-whitePlayer .kokopu-colorTag {
35
- background-color: white;
35
+ background-color: white;
36
36
  }
37
37
 
38
38
  .kokopu-headerGroup-blackPlayer .kokopu-colorTag {
39
- background-color: black;
39
+ background-color: black;
40
40
  }
41
41
 
42
42
  .kokopu-headerGroup-titleRating:before,
43
43
  .kokopu-header-round:before {
44
- content: "\a0("; /* \a0 == &nbsp; */
44
+ content: "\a0("; /* \a0 == &nbsp; */
45
45
  }
46
46
 
47
47
  .kokopu-headerGroup-titleRating:after,
48
48
  .kokopu-header-round:after {
49
- content: ")";
49
+ content: ")";
50
50
  }
51
51
 
52
52
  .kokopu-header-round,
53
53
  .kokopu-header-annotator {
54
- font-style: italic;
54
+ font-style: italic;
55
55
  }
56
56
 
57
57
  * + .kokopu-move:before,
58
58
  * + .kokopu-gameResult:before,
59
59
  * + span.kokopu-comment:before {
60
- content: " ";
60
+ content: " ";
61
61
  }
62
62
 
63
63
  span.kokopu-variation:before {
64
- content: " (";
64
+ content: " (";
65
65
  }
66
66
 
67
67
  span.kokopu-variation:after {
68
- content: ")";
68
+ content: ")";
69
69
  }
70
70
 
71
71
  * + .kokopu-nag:before {
72
- content: "\a0"; /* \a0 == &nbsp; */
72
+ content: "\a0"; /* \a0 == &nbsp; */
73
73
  }
74
74
 
75
75
  div.kokopu-subVariation {
76
- margin-left: 1.5em;
76
+ margin-left: 1.5em;
77
77
  }
78
78
 
79
79
  .kokopu-move,
80
80
  .kokopu-gameResult {
81
- font-weight: bold;
81
+ font-weight: bold;
82
82
  }
83
83
 
84
84
  .kokopu-subVariation .kokopu-move {
85
- font-weight: inherit;
85
+ font-weight: inherit;
86
86
  }
87
87
 
88
88
  .kokopu-diagram {
89
- text-align: center;
90
- line-height: 0px;
89
+ text-align: center;
90
+ line-height: 0px;
91
91
  }
92
92
 
93
93
  .kokopu-moveContent {
94
- display: inline-block;
95
- padding-left: 1px;
96
- padding-right: 1px;
94
+ display: inline-block;
95
+ padding-left: 1px;
96
+ padding-right: 1px;
97
97
  }
98
98
 
99
99
  .kokopu-selectedMove .kokopu-moveContent {
100
- background-color: currentcolor;
100
+ background-color: currentcolor;
101
101
  }
102
102
 
103
103
  .kokopu-selectedMove .kokopu-moveContent > * {
104
- filter: invert(1);
104
+ filter: invert(1);
105
105
  }
106
106
 
107
107
  .kokopu-clickableMove .kokopu-moveContent:hover {
108
- text-decoration: underline;
109
- cursor: pointer;
108
+ text-decoration: underline;
109
+ cursor: pointer;
110
110
  }
@@ -47,69 +47,69 @@ export type MoveSelectEventOrigin = 'key-first' | 'key-previous' | 'key-next' |
47
47
 
48
48
  export interface MovetextProps {
49
49
 
50
- /**
51
- * Displayed game. Can be a [kokopu.Game](https://kokopu.yo35.org/docs/current/classes/Game.html) object,
52
- * a [kokopu.Database](https://kokopu.yo35.org/docs/current/classes/Database.html) object,
53
- * or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation).
54
- */
55
- game: Game | Database | string;
56
-
57
- /**
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
- * 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
- * If omitted, the first game of the database/PGN is displayed.
61
- */
62
- gameIndex: number;
63
-
64
- /**
65
- * Options applicable to the diagrams in the comments. See [Chessboard](#/Components/Chessboard) for more details about each option.
66
- */
67
- diagramOptions: Partial<StaticBoardGraphicProps> & {
68
- flipped?: boolean,
69
- };
70
-
71
- /**
72
- * Symbols to use for the chess pieces. See {@link moveFormatter}.
73
- */
74
- pieceSymbols: 'native' | 'localized' | 'figurines' | PieceSymbolMapping;
75
-
76
- /**
77
- * Whether the diagrams within the comments (if any) are displayed or not.
78
- */
79
- diagramVisible: boolean;
80
-
81
- /**
82
- * Whether the game headers (if any) are displayed or not.
83
- */
84
- headerVisible: boolean;
85
-
86
- /**
87
- * ID of the selected move (or `'start'`/`'end'` for the beginning/end of the main variation).
88
- * Use [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id) to get the ID of a game move.
89
- */
90
- selection?: string;
91
-
92
- /**
93
- * Type of action allowed with the mouse/keys on the component. If undefined, then the user cannot interact with the component.
94
- *
95
- * - `'selectMove'` allows the user to select a move.
96
- */
97
- interactionMode?: 'selectMove';
98
-
99
- /**
100
- * Callback invoked when the user selects a move (only if `interactionMode` is set to `'selectMove'`).
101
- *
102
- * @param nodeId - ID of the selected move (as returned by [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id)),
103
- * `'start'` for the beginning of the main variation, or `undefined` if the user unselects the previously selected move.
104
- * @param evtOrigin - Origin of the event. Can be:
105
- * - `'key-first'`: the event has been triggered by the "go-to-first-move" key (aka. the home key),
106
- * - `'key-previous'`: the event has been triggered by the "go-to-previous-move" key (aka. the arrow left key),
107
- * - `'key-next'`: the event has been triggered by the "go-to-next-move" key (aka. the arrow right key),
108
- * - `'key-last'`: the event has been triggered by the "go-to-last-move" key (aka. the end key),
109
- * - `'key-exit'`: the event has been triggered by the "unselect-move" key (aka. the escape key),
110
- * - `'click'`: the event has been triggered by a mouse click on a move.
111
- */
112
- onMoveSelected?: (nodeId: string | undefined, evtOrigin: MoveSelectEventOrigin) => void;
50
+ /**
51
+ * Displayed game. Can be a [kokopu.Game](https://kokopu.yo35.org/docs/current/classes/Game.html) object,
52
+ * a [kokopu.Database](https://kokopu.yo35.org/docs/current/classes/Database.html) object,
53
+ * or a [PGN string](https://en.wikipedia.org/wiki/Portable_Game_Notation).
54
+ */
55
+ game: Game | Database | string;
56
+
57
+ /**
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
+ * 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
+ * If omitted, the first game of the database/PGN is displayed.
61
+ */
62
+ gameIndex: number;
63
+
64
+ /**
65
+ * Options applicable to the diagrams in the comments. See [Chessboard](#/Components/Chessboard) for more details about each option.
66
+ */
67
+ diagramOptions: Partial<StaticBoardGraphicProps> & {
68
+ flipped?: boolean,
69
+ };
70
+
71
+ /**
72
+ * Symbols to use for the chess pieces. See {@link moveFormatter}.
73
+ */
74
+ pieceSymbols: 'native' | 'localized' | 'figurines' | PieceSymbolMapping;
75
+
76
+ /**
77
+ * Whether the diagrams within the comments (if any) are displayed or not.
78
+ */
79
+ diagramVisible: boolean;
80
+
81
+ /**
82
+ * Whether the game headers (if any) are displayed or not.
83
+ */
84
+ headerVisible: boolean;
85
+
86
+ /**
87
+ * ID of the selected move (or `'start'`/`'end'` for the beginning/end of the main variation).
88
+ * Use [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id) to get the ID of a game move.
89
+ */
90
+ selection?: string;
91
+
92
+ /**
93
+ * Type of action allowed with the mouse/keys on the component. If undefined, then the user cannot interact with the component.
94
+ *
95
+ * - `'selectMove'` allows the user to select a move.
96
+ */
97
+ interactionMode?: 'selectMove';
98
+
99
+ /**
100
+ * Callback invoked when the user selects a move (only if `interactionMode` is set to `'selectMove'`).
101
+ *
102
+ * @param nodeId - ID of the selected move (as returned by [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id)),
103
+ * `'start'` for the beginning of the main variation, or `undefined` if the user unselects the previously selected move.
104
+ * @param evtOrigin - Origin of the event. Can be:
105
+ * - `'key-first'`: the event has been triggered by the "go-to-first-move" key (aka. the home key),
106
+ * - `'key-previous'`: the event has been triggered by the "go-to-previous-move" key (aka. the arrow left key),
107
+ * - `'key-next'`: the event has been triggered by the "go-to-next-move" key (aka. the arrow right key),
108
+ * - `'key-last'`: the event has been triggered by the "go-to-last-move" key (aka. the end key),
109
+ * - `'key-exit'`: the event has been triggered by the "unselect-move" key (aka. the escape key),
110
+ * - `'click'`: the event has been triggered by a mouse click on a move.
111
+ */
112
+ onMoveSelected?: (nodeId: string | undefined, evtOrigin: MoveSelectEventOrigin) => void;
113
113
  }
114
114
 
115
115
 
@@ -118,100 +118,100 @@ export interface MovetextProps {
118
118
  */
119
119
  export class Movetext extends React.Component<MovetextProps> {
120
120
 
121
- static defaultProps = {
122
- game: new Game(),
123
- gameIndex: 0,
124
- diagramOptions: {},
125
- pieceSymbols: 'native',
126
- diagramVisible: true,
127
- headerVisible: true,
128
- };
129
-
130
- private implRef: React.RefObject<MovetextImpl> = React.createRef();
131
-
132
- render() {
133
-
134
- // Validate the game and game-index attributes.
135
- const info = parseGame(this.props.game, this.props.gameIndex, 'Movetext');
136
- if (info.error) {
137
- return info.errorBox;
138
- }
139
-
140
- // Validate the appearance attributes.
141
- if (typeof this.props.diagramOptions !== 'object' || this.props.diagramOptions === null) {
142
- throw new IllegalArgument('Movetext', 'diagramOptions');
143
- }
144
- const formatter = moveFormatter(this.props.pieceSymbols);
145
- const diagramVisible = sanitizeBoolean(this.props.diagramVisible);
146
- const headerVisible = sanitizeBoolean(this.props.headerVisible);
147
-
148
- // Validate the interaction attributes and the callbacks.
149
- const selection = sanitizeOptional(this.props.selection, sanitizeString);
150
- const interactionMode = this.getInteractionMode();
151
- const { onMoveSelected } = this.props;
152
-
153
- return (
154
- <MovetextImpl ref={this.implRef}
155
- game={info.game}
156
- diagramOptions={this.props.diagramOptions} moveFormatter={formatter} diagramVisible={diagramVisible} headerVisible={headerVisible}
157
- selection={selection} interactionMode={interactionMode} onMoveSelected={onMoveSelected}
158
- />
159
- );
160
- }
161
-
162
- private getInteractionMode() {
163
- const interactionMode = sanitizeOptional(this.props.interactionMode, sanitizeString);
164
- if (interactionMode === undefined || interactionMode === 'selectMove') {
165
- return interactionMode;
166
- }
167
- else {
168
- throw new IllegalArgument('Movetext', 'interactionMode');
169
- }
170
- }
171
-
172
- /**
173
- * Set the focus to the current component.
174
- *
175
- * @public
176
- */
177
- focus() {
178
- const movetextImpl = this.implRef.current;
179
- // istanbul ignore else
180
- if (movetextImpl) {
181
- movetextImpl.focus();
182
- }
183
- }
184
-
185
- /**
186
- * @deprecated
187
- */
188
- // istanbul ignore next
189
- static firstNodeId(game: Game, selection: string): string | undefined {
190
- return firstNodeIdImpl(game, selection);
191
- }
192
-
193
- /**
194
- * @deprecated
195
- */
196
- // istanbul ignore next
197
- static previousNodeId(game: Game, selection: string): string | undefined {
198
- return previousNodeIdImpl(game, selection);
199
- }
200
-
201
- /**
202
- * @deprecated
203
- */
204
- // istanbul ignore next
205
- static nextNodeId(game: Game, selection: string): string | undefined {
206
- return nextNodeIdImpl(game, selection);
207
- }
208
-
209
- /**
210
- * @deprecated
211
- */
212
- // istanbul ignore next
213
- static lastNodeId(game: Game, selection: string): string | undefined {
214
- return lastNodeIdImpl(game, selection);
215
- }
121
+ static defaultProps = {
122
+ game: new Game(),
123
+ gameIndex: 0,
124
+ diagramOptions: {},
125
+ pieceSymbols: 'native',
126
+ diagramVisible: true,
127
+ headerVisible: true,
128
+ };
129
+
130
+ private implRef: React.RefObject<MovetextImpl> = React.createRef();
131
+
132
+ render() {
133
+
134
+ // Validate the game and game-index attributes.
135
+ const info = parseGame(this.props.game, this.props.gameIndex, 'Movetext');
136
+ if (info.error) {
137
+ return info.errorBox;
138
+ }
139
+
140
+ // Validate the appearance attributes.
141
+ if (typeof this.props.diagramOptions !== 'object' || this.props.diagramOptions === null) {
142
+ throw new IllegalArgument('Movetext', 'diagramOptions');
143
+ }
144
+ const formatter = moveFormatter(this.props.pieceSymbols);
145
+ const diagramVisible = sanitizeBoolean(this.props.diagramVisible);
146
+ const headerVisible = sanitizeBoolean(this.props.headerVisible);
147
+
148
+ // Validate the interaction attributes and the callbacks.
149
+ const selection = sanitizeOptional(this.props.selection, sanitizeString);
150
+ const interactionMode = this.getInteractionMode();
151
+ const { onMoveSelected } = this.props;
152
+
153
+ return (
154
+ <MovetextImpl ref={this.implRef}
155
+ game={info.game}
156
+ diagramOptions={this.props.diagramOptions} moveFormatter={formatter} diagramVisible={diagramVisible} headerVisible={headerVisible}
157
+ selection={selection} interactionMode={interactionMode} onMoveSelected={onMoveSelected}
158
+ />
159
+ );
160
+ }
161
+
162
+ private getInteractionMode() {
163
+ const interactionMode = sanitizeOptional(this.props.interactionMode, sanitizeString);
164
+ if (interactionMode === undefined || interactionMode === 'selectMove') {
165
+ return interactionMode;
166
+ }
167
+ else {
168
+ throw new IllegalArgument('Movetext', 'interactionMode');
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Set the focus to the current component.
174
+ *
175
+ * @public
176
+ */
177
+ focus() {
178
+ const movetextImpl = this.implRef.current;
179
+ // istanbul ignore else
180
+ if (movetextImpl) {
181
+ movetextImpl.focus();
182
+ }
183
+ }
184
+
185
+ /**
186
+ * @deprecated
187
+ */
188
+ // istanbul ignore next
189
+ static firstNodeId(game: Game, selection: string): string | undefined {
190
+ return firstNodeIdImpl(game, selection);
191
+ }
192
+
193
+ /**
194
+ * @deprecated
195
+ */
196
+ // istanbul ignore next
197
+ static previousNodeId(game: Game, selection: string): string | undefined {
198
+ return previousNodeIdImpl(game, selection);
199
+ }
200
+
201
+ /**
202
+ * @deprecated
203
+ */
204
+ // istanbul ignore next
205
+ static nextNodeId(game: Game, selection: string): string | undefined {
206
+ return nextNodeIdImpl(game, selection);
207
+ }
208
+
209
+ /**
210
+ * @deprecated
211
+ */
212
+ // istanbul ignore next
213
+ static lastNodeId(game: Game, selection: string): string | undefined {
214
+ return lastNodeIdImpl(game, selection);
215
+ }
216
216
 
217
217
  }