kokopu-react 3.1.0 → 3.3.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 (236) hide show
  1. package/.eslintrc.yml +1 -1
  2. package/CHANGELOG.md +10 -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.d.ts +27 -2
  6. package/dist/lib/chessboard/Chessboard.js +36 -17
  7. package/dist/lib/chessboard/Chessboard.js.map +1 -1
  8. package/dist/lib/chessboard/ChessboardImpl.js.map +1 -1
  9. package/dist/lib/chessboard/Draggable.js.map +1 -1
  10. package/dist/lib/chessboard/Motion.js.map +1 -1
  11. package/dist/lib/chessboard/colorsets.js.map +1 -1
  12. package/dist/lib/chessboard/piecesets.js.map +1 -1
  13. package/dist/lib/errorbox/ErrorBox.css +18 -18
  14. package/dist/lib/errorbox/ErrorBox.js.map +1 -1
  15. package/dist/lib/errorbox/parsing.js.map +1 -1
  16. package/dist/lib/exception.js.map +1 -1
  17. package/dist/lib/i18n.d.ts +1 -0
  18. package/dist/lib/i18n.js +1 -0
  19. package/dist/lib/i18n.js.map +1 -1
  20. package/dist/lib/icons/AnnotationSymbolShape.css +6 -6
  21. package/dist/lib/icons/AnnotationSymbolShape.js.map +1 -1
  22. package/dist/lib/icons/ArrowMarkerIcon.js.map +1 -1
  23. package/dist/lib/icons/ArrowTip.js.map +1 -1
  24. package/dist/lib/icons/ChessPieceIcon.js.map +1 -1
  25. package/dist/lib/icons/SquareMarkerIcon.js.map +1 -1
  26. package/dist/lib/icons/TextMarkerIcon.js.map +1 -1
  27. package/dist/lib/icons/arrow.css +1 -1
  28. package/dist/lib/index.d.ts +1 -0
  29. package/dist/lib/index.js +1 -0
  30. package/dist/lib/index.js.map +1 -1
  31. package/dist/lib/movetext/Movetext.css +27 -27
  32. package/dist/lib/movetext/Movetext.js.map +1 -1
  33. package/dist/lib/movetext/MovetextImpl.js.map +1 -1
  34. package/dist/lib/movetext/fonts.css +7 -7
  35. package/dist/lib/movetext/htmlFilter.js.map +1 -1
  36. package/dist/lib/movetext/moveFormatter.js.map +1 -1
  37. package/dist/lib/navigationboard/NavigationBoard.d.ts +68 -1
  38. package/dist/lib/navigationboard/NavigationBoard.js +141 -13
  39. package/dist/lib/navigationboard/NavigationBoard.js.map +1 -1
  40. package/dist/lib/navigationboard/NavigationButton.d.ts +66 -0
  41. package/dist/lib/navigationboard/NavigationButton.js +67 -0
  42. package/dist/lib/navigationboard/NavigationButton.js.map +1 -0
  43. package/dist/lib/navigationboard/NavigationField.css +7 -7
  44. package/dist/lib/navigationboard/NavigationField.js.map +1 -1
  45. package/dist/lib/navigationboard/NavigationToolbar.css +16 -13
  46. package/dist/lib/navigationboard/NavigationToolbar.d.ts +10 -10
  47. package/dist/lib/navigationboard/NavigationToolbar.js +61 -79
  48. package/dist/lib/navigationboard/NavigationToolbar.js.map +1 -1
  49. package/dist/lib/navigationboard/iconPaths.d.ts +29 -0
  50. package/dist/lib/navigationboard/iconPaths.js +91 -0
  51. package/dist/lib/navigationboard/iconPaths.js.map +1 -0
  52. package/dist/lib/sanitization.js.map +1 -1
  53. package/dist/lib/types.js.map +1 -1
  54. package/dist/lib/util.js.map +1 -1
  55. package/doc_src/demo/PageChessboardBase.tsx +115 -115
  56. package/doc_src/demo/PageChessboardInteraction.tsx +303 -303
  57. package/doc_src/demo/PageChessboardMove.tsx +173 -173
  58. package/doc_src/demo/PageChessboardSmallScreens.tsx +94 -94
  59. package/doc_src/demo/PageMovetextBase.tsx +180 -180
  60. package/doc_src/demo/PageMovetextInteraction.tsx +123 -123
  61. package/doc_src/demo/PageNavigationBoardBase.tsx +144 -137
  62. package/doc_src/demo/PageNavigationBoardUncontrolledVsControlled.tsx +69 -69
  63. package/doc_src/demo/decs.d.ts +4 -4
  64. package/doc_src/demo/demo.css +12 -12
  65. package/doc_src/demo/util.ts +1 -1
  66. package/doc_src/examples/NavigationBoard.md +1 -1
  67. package/doc_src/theming/LogoRenderer.js +13 -13
  68. package/doc_src/theming/theming.css +5 -5
  69. package/package.json +95 -95
  70. package/scripts/doc.styleguide.config.js +131 -131
  71. package/scripts/doc.tsconfig.json +5 -5
  72. package/scripts/docker-compose.yml +1 -1
  73. package/scripts/test-graphic.tsconfig.json +5 -5
  74. package/scripts/test-graphic.webpack.config.js +57 -57
  75. package/scripts/test-headless.webpack.config.js +29 -29
  76. package/src/chessboard/BoardProperties.ts +68 -68
  77. package/src/chessboard/Chessboard.css +13 -13
  78. package/src/chessboard/Chessboard.tsx +436 -380
  79. package/src/chessboard/ChessboardImpl.tsx +557 -557
  80. package/src/chessboard/Draggable.tsx +185 -185
  81. package/src/chessboard/Motion.tsx +67 -67
  82. package/src/chessboard/colorsets.ts +66 -66
  83. package/src/chessboard/piecesets.ts +84 -84
  84. package/src/decs.d.ts +2 -2
  85. package/src/errorbox/ErrorBox.css +18 -18
  86. package/src/errorbox/ErrorBox.tsx +75 -75
  87. package/src/errorbox/parsing.tsx +95 -95
  88. package/src/exception.ts +17 -17
  89. package/src/i18n.ts +1 -0
  90. package/src/icons/AnnotationSymbolShape.css +6 -6
  91. package/src/icons/AnnotationSymbolShape.tsx +31 -31
  92. package/src/icons/ArrowMarkerIcon.tsx +34 -34
  93. package/src/icons/ArrowTip.tsx +14 -14
  94. package/src/icons/ChessPieceIcon.tsx +45 -45
  95. package/src/icons/SquareMarkerIcon.tsx +20 -20
  96. package/src/icons/TextMarkerIcon.tsx +29 -29
  97. package/src/icons/arrow.css +1 -1
  98. package/src/index.ts +3 -2
  99. package/src/movetext/Movetext.css +27 -27
  100. package/src/movetext/Movetext.tsx +158 -158
  101. package/src/movetext/MovetextImpl.tsx +345 -345
  102. package/src/movetext/fonts.css +7 -7
  103. package/src/movetext/htmlFilter.tsx +129 -129
  104. package/src/movetext/moveFormatter.tsx +37 -37
  105. package/src/navigationboard/NavigationBoard.tsx +386 -180
  106. package/src/navigationboard/NavigationButton.ts +114 -0
  107. package/src/navigationboard/NavigationField.css +7 -7
  108. package/src/navigationboard/NavigationField.tsx +90 -90
  109. package/src/navigationboard/NavigationToolbar.css +16 -13
  110. package/src/navigationboard/NavigationToolbar.tsx +98 -112
  111. package/src/navigationboard/iconPaths.ts +98 -0
  112. package/src/sanitization.ts +17 -17
  113. package/src/types.ts +116 -116
  114. package/src/util.ts +11 -11
  115. package/test/01_types.js +167 -167
  116. package/test/02_chessboard_util.js +191 -115
  117. package/test/03_error_box_graphic.js +16 -16
  118. package/test/04_icons_graphic.js +32 -32
  119. package/test/05_chessboard_graphic.js +60 -60
  120. package/test/06_chessboard_animation.js +36 -36
  121. package/test/07_chessboard_interaction.js +101 -101
  122. package/test/08_chessboard_play_moves.js +62 -62
  123. package/test/09_chessboard_small_screens.js +32 -32
  124. package/test/10_movetext_graphic.js +32 -32
  125. package/test/11_movetext_interaction.js +100 -100
  126. package/test/12_navigation_board_base.js +151 -0
  127. package/test/13_navigation_board_graphic.js +68 -0
  128. package/test/14_navigation_board_autoplay.js +100 -0
  129. package/test/common/graphic.js +106 -97
  130. package/test/graphic_references/12_navigation_board_base/controlled/default.png +0 -0
  131. package/test/graphic_references/{12_navigation_board/controlled/forbidden_navigation_1.png → 12_navigation_board_base/controlled/forbidden_navigation_0.png} +0 -0
  132. package/test/graphic_references/{12_navigation_board/controlled/invalid_node_id.png → 12_navigation_board_base/controlled/forbidden_navigation_1.png} +0 -0
  133. package/test/graphic_references/{12_navigation_board/controlled/forbidden_navigation_0.png → 12_navigation_board_base/controlled/invalid_node_id.png} +0 -0
  134. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_0.png +0 -0
  135. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/controlled/no_callback_defined_1.png +0 -0
  136. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/controlled/overriding_initial_node_id.png +0 -0
  137. package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_1.png → 12_navigation_board_base/controlled/regular_navigation_0.png} +0 -0
  138. 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
  139. package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_3.png → 12_navigation_board_base/controlled/regular_navigation_2.png} +0 -0
  140. package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_0.png → 12_navigation_board_base/controlled/regular_navigation_3.png} +0 -0
  141. 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
  142. 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
  143. 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
  144. 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
  145. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_1.png +0 -0
  146. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_2.png +0 -0
  147. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_at_end.png +0 -0
  148. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_specific_id.png +0 -0
  149. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_default.png +0 -0
  150. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_default_with_game_index.png +0 -0
  151. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_on_null-move.png +0 -0
  152. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_0.png +0 -0
  153. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_1.png +0 -0
  154. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_2.png +0 -0
  155. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_3.png +0 -0
  156. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_4.png +0 -0
  157. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_flipping_0.png +0 -0
  158. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_flipping_1.png +0 -0
  159. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_0.png +0 -0
  160. package/test/graphic_references/{12_navigation_board/controlled/default.png → 12_navigation_board_base/uncontrolled/regular_navigation_1.png} +0 -0
  161. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_2.png +0 -0
  162. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_3.png +0 -0
  163. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_4.png +0 -0
  164. package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_5.png +0 -0
  165. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_1.png +0 -0
  166. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_2.png +0 -0
  167. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/multiple_buttons.png +0 -0
  168. package/test/graphic_references/{12_navigation_board/uncontrolled/regular_navigation_3.png → 13_navigation_board_graphic/additional_buttons/single_button.png} +0 -0
  169. package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/custom_1.png +0 -0
  170. package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/custom_2.png +0 -0
  171. package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/large.png +0 -0
  172. package/test/graphic_references/13_navigation_board_graphic/theme/small.png +0 -0
  173. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_acknowledging_is-playing_changes.png +0 -0
  174. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_not_acknowledging_is-playing_changes.png +0 -0
  175. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_acknowledging_node_changes.png +0 -0
  176. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_not_acknowledging_node_changes.png +0 -0
  177. 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
  178. 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
  179. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_is-playing_changes.png +0 -0
  180. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_node_changes.png +0 -0
  181. 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
  182. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_close_to_end.png +0 -0
  183. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_is-playing_changes.png +0 -0
  184. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_node_changes.png +0 -0
  185. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_after_stop.png +0 -0
  186. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_before_stop.png +0 -0
  187. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_after_stop.png +0 -0
  188. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_before_stop.png +0 -0
  189. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_close_to_end.png +0 -0
  190. package/test/graphic_references/{12_navigation_board/uncontrolled/navigation_with_keys_1.png → 14_navigation_board_autoplay/uncontrolled/initial_state_default.png} +0 -0
  191. package/test/graphic_test_app/03_error_box_graphic/base.tsx +14 -14
  192. package/test/graphic_test_app/03_error_box_graphic/localization.tsx +1 -1
  193. package/test/graphic_test_app/04_icons_graphic/chess_piece.tsx +7 -7
  194. package/test/graphic_test_app/04_icons_graphic/marker.tsx +15 -15
  195. package/test/graphic_test_app/05_chessboard_graphic/annotations.tsx +7 -7
  196. package/test/graphic_test_app/05_chessboard_graphic/base.tsx +6 -6
  197. package/test/graphic_test_app/05_chessboard_graphic/chess_variants.tsx +7 -7
  198. package/test/graphic_test_app/05_chessboard_graphic/flipped.tsx +5 -5
  199. package/test/graphic_test_app/05_chessboard_graphic/move.tsx +12 -12
  200. package/test/graphic_test_app/05_chessboard_graphic/theme.tsx +12 -12
  201. package/test/graphic_test_app/06_chessboard_animation/base_1.tsx +6 -6
  202. package/test/graphic_test_app/06_chessboard_animation/base_2.tsx +6 -6
  203. package/test/graphic_test_app/06_chessboard_animation/base_3.tsx +6 -6
  204. package/test/graphic_test_app/06_chessboard_animation/on_redraw.tsx +16 -16
  205. package/test/graphic_test_app/07_chessboard_interaction/click_squares.tsx +5 -5
  206. package/test/graphic_test_app/07_chessboard_interaction/edit_arrows.tsx +4 -4
  207. package/test/graphic_test_app/07_chessboard_interaction/error.tsx +2 -2
  208. package/test/graphic_test_app/07_chessboard_interaction/move_pieces.tsx +5 -5
  209. package/test/graphic_test_app/08_chessboard_play_moves/base.tsx +8 -8
  210. package/test/graphic_test_app/08_chessboard_play_moves/promotions.tsx +4 -4
  211. package/test/graphic_test_app/09_chessboard_small_screens/base.tsx +9 -9
  212. package/test/graphic_test_app/09_chessboard_small_screens/top_bottom_components.tsx +9 -9
  213. package/test/graphic_test_app/10_movetext_graphic/base.tsx +4 -4
  214. package/test/graphic_test_app/10_movetext_graphic/error.tsx +6 -6
  215. package/test/graphic_test_app/10_movetext_graphic/format_move.tsx +1 -1
  216. package/test/graphic_test_app/10_movetext_graphic/html.tsx +5 -5
  217. package/test/graphic_test_app/10_movetext_graphic/options.tsx +10 -10
  218. package/test/graphic_test_app/11_movetext_interaction/error.tsx +1 -1
  219. package/test/graphic_test_app/11_movetext_interaction/select_moves.tsx +11 -11
  220. package/test/graphic_test_app/{12_navigation_board → 12_navigation_board_base}/controlled.tsx +5 -5
  221. package/test/graphic_test_app/{12_navigation_board → 12_navigation_board_base}/uncontrolled.tsx +7 -7
  222. package/test/graphic_test_app/13_navigation_board_graphic/additional_buttons.tsx +49 -0
  223. package/test/graphic_test_app/{12_navigation_board → 13_navigation_board_graphic}/error.tsx +2 -2
  224. package/test/graphic_test_app/{12_navigation_board → 13_navigation_board_graphic}/theme.tsx +4 -4
  225. package/test/graphic_test_app/14_navigation_board_autoplay/controlled.tsx +73 -0
  226. package/test/graphic_test_app/14_navigation_board_autoplay/uncontrolled.tsx +34 -0
  227. package/test/graphic_test_app/common/decs.d.ts +2 -2
  228. package/test/graphic_test_app/common/test_app.css +15 -15
  229. package/test/graphic_test_app/common/test_app.tsx +48 -48
  230. package/tsconfig.json +13 -13
  231. package/test/12_navigation_board.js +0 -168
  232. package/test/graphic_references/12_navigation_board/controlled/regular_navigation_2.png +0 -0
  233. package/test/graphic_references/12_navigation_board/theme/small.png +0 -0
  234. package/test/graphic_references/12_navigation_board/uncontrolled/regular_navigation_1.png +0 -0
  235. /package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/error/pgn_parsing_error.png +0 -0
  236. /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, NavigationBar, NavigationBarScheme, isNavigationButton, isNavigationBar, isNavigationBarScheme } 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
  }