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
@@ -21,13 +21,18 @@
21
21
  * *
22
22
  * -------------------------------------------------------------------------- */
23
23
  import * as React from 'react';
24
- import { Game, Node as GameNode } from 'kokopu';
25
- import { sanitizeBoolean, sanitizeOptional, sanitizeString } from '../sanitization';
24
+ import { Game, Node as GameNode, Variation } from 'kokopu';
25
+ import { IllegalArgument } from '../exception';
26
+ import { i18n } from '../i18n';
27
+ import { sanitizeBoolean, sanitizeOptional, sanitizeString, sanitizePartialObject } from '../sanitization';
26
28
  import { defaultDynamicBoardProps } from '../chessboard/BoardProperties';
27
29
  import { Chessboard } from '../chessboard/Chessboard';
28
30
  import { parseGame } from '../errorbox/parsing';
29
31
  import { NavigationField, firstNodeId, previousNodeId, nextNodeId, lastNodeId } from '../navigationboard/NavigationField';
30
- import { NavigationToolbar } from './NavigationToolbar';
32
+ import { GO_FIRST_ICON_PATH, GO_PREVIOUS_ICON_PATH, GO_NEXT_ICON_PATH, GO_LAST_ICON_PATH, PLAY_ICON_PATH, STOP_ICON_PATH, FLIP_ICON_PATH } from './iconPaths';
33
+ import { isNavigationBar, isNavigationBarScheme } from './NavigationButton';
34
+ import { NavigationToolbar, navigationToolbarSize } from './NavigationToolbar';
35
+ const INTER_MOVE_DURATION = 1000;
31
36
  /**
32
37
  * Component displaying the positions occurring in a chess game, with navigation buttons to browse these positions.
33
38
  */
@@ -37,10 +42,15 @@ export class NavigationBoard extends React.Component {
37
42
  this.navigationFieldRef = React.createRef();
38
43
  this.state = {
39
44
  nodeIdAsUncontrolled: sanitizeString(props.initialNodeId),
45
+ isPlayingAsUncontrolled: sanitizeBoolean(props.initialIsPlaying),
40
46
  flippedAsUncontrolled: sanitizeBoolean(props.initialFlipped),
41
47
  };
42
48
  }
49
+ componentWillUnmount() {
50
+ this.cancelCurrentTimeout();
51
+ }
43
52
  render() {
53
+ this.cancelCurrentTimeout();
44
54
  // Validate the game and game-index attributes.
45
55
  const info = parseGame(this.props.game, this.props.gameIndex, 'NavigationBoard');
46
56
  if (info.error) {
@@ -49,26 +59,63 @@ export class NavigationBoard extends React.Component {
49
59
  // Fetch the current node/variation.
50
60
  const currentNodeId = sanitizeOptional(this.props.nodeId, sanitizeString) ?? this.state.nodeIdAsUncontrolled;
51
61
  const currentNode = info.game.findById(currentNodeId) ?? info.game.mainVariation();
52
- // Flip state.
62
+ // State flags.
63
+ const isPlaying = sanitizeOptional(this.props.isPlaying, sanitizeBoolean) ?? this.state.isPlayingAsUncontrolled;
53
64
  const flipped = sanitizeOptional(this.props.flipped, sanitizeBoolean) ?? this.state.flippedAsUncontrolled;
54
65
  return (React.createElement("div", { className: "kokopu-navigationBoard" },
55
- this.renderBoard(info.game, currentNode, flipped),
66
+ this.renderBoard(info.game, currentNode, isPlaying, flipped),
56
67
  this.renderNavigationField(info.game, currentNode.id())));
57
68
  }
58
- renderBoard(game, node, flipped) {
69
+ renderBoard(game, node, isPlaying, flipped) {
59
70
  const position = node instanceof GameNode ? node.positionBefore() : node.initialPosition();
60
71
  const move = node instanceof GameNode ? node.notation() : undefined;
61
- return React.createElement(Chessboard, { position: position, move: move, flipped: flipped, squareMarkers: node.tag('csl'), arrowMarkers: node.tag('cal'), textMarkers: node.tag('ctl'), squareSize: this.props.squareSize, coordinateVisible: this.props.coordinateVisible, turnVisible: this.props.turnVisible, colorset: this.props.colorset, pieceset: this.props.pieceset, smallScreenLimits: this.props.smallScreenLimits, moveArrowVisible: this.props.moveArrowVisible, moveArrowColor: this.props.moveArrowColor, animated: this.props.animated, bottomComponent: ({ squareSize }) => this.renderToolbar(game, node.id(), squareSize) });
72
+ return React.createElement(Chessboard, { position: position, move: move, flipped: flipped, squareMarkers: node.tag('csl'), arrowMarkers: node.tag('cal'), textMarkers: node.tag('ctl'), squareSize: this.props.squareSize, coordinateVisible: this.props.coordinateVisible, turnVisible: this.props.turnVisible, colorset: this.props.colorset, pieceset: this.props.pieceset, smallScreenLimits: this.props.smallScreenLimits, moveArrowVisible: this.props.moveArrowVisible, moveArrowColor: this.props.moveArrowColor, animated: this.props.animated, bottomComponent: ({ squareSize }) => this.renderToolbar(game, node, squareSize, isPlaying) });
62
73
  }
63
74
  renderNavigationField(game, currentNodeId) {
64
- return React.createElement(NavigationField, { ref: this.navigationFieldRef, onFirstPressed: () => this.handleNavigationButtonClicked(firstNodeId(game, currentNodeId)), onPreviousPressed: () => this.handleNavigationButtonClicked(previousNodeId(game, currentNodeId)), onNextPressed: () => this.handleNavigationButtonClicked(nextNodeId(game, currentNodeId)), onLastPressed: () => this.handleNavigationButtonClicked(lastNodeId(game, currentNodeId)) });
75
+ return React.createElement(NavigationField, { ref: this.navigationFieldRef, onFirstPressed: () => this.handleNavClicked(firstNodeId(game, currentNodeId)), onPreviousPressed: () => this.handleNavClicked(previousNodeId(game, currentNodeId)), onNextPressed: () => this.handleNavClicked(nextNodeId(game, currentNodeId)), onLastPressed: () => this.handleNavClicked(lastNodeId(game, currentNodeId)) });
65
76
  }
66
- renderToolbar(game, currentNodeId, squareSize) {
67
- const flipButtonVisible = sanitizeBoolean(this.props.flipButtonVisible);
68
- return React.createElement(NavigationToolbar, { flipButtonVisible: flipButtonVisible, squareSize: squareSize, onFirstClicked: () => this.handleNavigationButtonClicked(firstNodeId(game, currentNodeId)), onPreviousClicked: () => this.handleNavigationButtonClicked(previousNodeId(game, currentNodeId)), onNextClicked: () => this.handleNavigationButtonClicked(nextNodeId(game, currentNodeId)), onLastClicked: () => this.handleNavigationButtonClicked(lastNodeId(game, currentNodeId)), onFlipClicked: () => this.handleFlipButtonClicked() });
77
+ renderToolbar(game, node, squareSize, isPlaying) {
78
+ // WARNING: the logic here must be the same as the one in `computeBarScheme()`.
79
+ const buttons = [];
80
+ // Core navigation buttons
81
+ const currentNodeId = node.id();
82
+ const hasPrevious = currentNodeId !== 'start';
83
+ const hasNext = (node instanceof Variation ? node.first() : node.next()) !== undefined;
84
+ buttons.push({ iconPath: GO_FIRST_ICON_PATH, tooltip: i18n.TOOLTIP_GO_FIRST, enabled: hasPrevious, onClick: () => this.handleNavClicked(firstNodeId(game, currentNodeId)) });
85
+ buttons.push({ iconPath: GO_PREVIOUS_ICON_PATH, tooltip: i18n.TOOLTIP_GO_PREVIOUS, enabled: hasPrevious, onClick: () => this.handleNavClicked(previousNodeId(game, currentNodeId)) });
86
+ if (sanitizeBoolean(this.props.playButtonVisible)) {
87
+ buttons.push({ iconPath: isPlaying ? STOP_ICON_PATH : PLAY_ICON_PATH, tooltip: i18n.TOOLTIP_PLAY_STOP, enabled: hasNext, onClick: () => this.handlePlayStopClicked(!isPlaying) });
88
+ }
89
+ buttons.push({ iconPath: GO_NEXT_ICON_PATH, tooltip: i18n.TOOLTIP_GO_NEXT, enabled: hasNext, onClick: () => this.handleNavClicked(nextNodeId(game, currentNodeId)) });
90
+ buttons.push({ iconPath: GO_LAST_ICON_PATH, tooltip: i18n.TOOLTIP_GO_LAST, enabled: hasNext, onClick: () => this.handleNavClicked(lastNodeId(game, currentNodeId)) });
91
+ buttons.push('spacer');
92
+ if (sanitizeBoolean(this.props.flipButtonVisible)) {
93
+ buttons.push({ iconPath: FLIP_ICON_PATH, tooltip: i18n.TOOLTIP_FLIP, onClick: () => this.handleFlipButtonClicked() });
94
+ }
95
+ buttons.push('spacer');
96
+ // Schedule the next transition if auto-play is enabled.
97
+ if (isPlaying) {
98
+ if (hasNext) {
99
+ this.timeoutId = window.setTimeout(() => this.handleNavClicked(nextNodeId(game, currentNodeId), false), INTER_MOVE_DURATION);
100
+ }
101
+ else {
102
+ // ... or stop the auto-play if at the end of the game.
103
+ this.timeoutId = window.setTimeout(() => this.handlePlayStopClicked(false, false), 0);
104
+ }
105
+ }
106
+ // Additional buttons.
107
+ if (!isNavigationBar(this.props.additionalButtons)) {
108
+ throw new IllegalArgument('NavigationBoard', 'additionalButtons');
109
+ }
110
+ for (const button of this.props.additionalButtons) {
111
+ buttons.push(button);
112
+ }
113
+ return React.createElement(NavigationToolbar, { squareSize: squareSize, buttons: buttons });
69
114
  }
70
- handleNavigationButtonClicked(targetNodeId) {
71
- this.focus();
115
+ handleNavClicked(targetNodeId, forceFocus = true) {
116
+ if (forceFocus) {
117
+ this.focus();
118
+ }
72
119
  if (targetNodeId === undefined) {
73
120
  return;
74
121
  }
@@ -79,6 +126,17 @@ export class NavigationBoard extends React.Component {
79
126
  this.props.onNodeIdChanged(targetNodeId);
80
127
  }
81
128
  }
129
+ handlePlayStopClicked(targetIsPlaying, forceFocus = true) {
130
+ if (forceFocus) {
131
+ this.focus();
132
+ }
133
+ if (this.props.isPlaying === undefined) { // uncontrolled is-playing state
134
+ this.setState({ isPlayingAsUncontrolled: targetIsPlaying });
135
+ }
136
+ else if (this.props.onIsPlayingChanged) { // controlled is-playing state
137
+ this.props.onIsPlayingChanged(targetIsPlaying);
138
+ }
139
+ }
82
140
  handleFlipButtonClicked() {
83
141
  this.focus();
84
142
  if (this.props.flipped === undefined) { // uncontrolled flip state
@@ -88,6 +146,12 @@ export class NavigationBoard extends React.Component {
88
146
  this.props.onFlippedChanged(!this.props.flipped);
89
147
  }
90
148
  }
149
+ cancelCurrentTimeout() {
150
+ if (this.timeoutId !== undefined) {
151
+ window.clearTimeout(this.timeoutId);
152
+ this.timeoutId = undefined;
153
+ }
154
+ }
91
155
  /**
92
156
  * Set the focus to the current component.
93
157
  *
@@ -100,13 +164,77 @@ export class NavigationBoard extends React.Component {
100
164
  target.focus();
101
165
  }
102
166
  }
167
+ /**
168
+ * Return the size of the {@link NavigationBoard}, assuming it is built with the given attributes.
169
+ */
170
+ static size(attr) {
171
+ const { squareSize, coordinateVisible, turnVisible, smallScreenLimits, playButtonVisible, flipButtonVisible, additionalButtons } = sanitizePartialObject(attr, () => new IllegalArgument('NavigationBoard.size()', 'attr'));
172
+ // Sanitization
173
+ const actualPlayButtonVisible = sanitizeOptional(playButtonVisible, sanitizeBoolean);
174
+ const actualFlipButtonVisible = sanitizeOptional(flipButtonVisible, sanitizeBoolean);
175
+ if (additionalButtons !== undefined && !isNavigationBarScheme(additionalButtons)) {
176
+ throw new IllegalArgument('NavigationBoard.size()', 'additionalButtons');
177
+ }
178
+ const buttons = computeBarScheme(actualPlayButtonVisible, actualFlipButtonVisible, additionalButtons);
179
+ return Chessboard.size({
180
+ squareSize: squareSize,
181
+ coordinateVisible: coordinateVisible,
182
+ turnVisible: turnVisible,
183
+ smallScreenLimits: smallScreenLimits,
184
+ bottomComponent: ({ squareSize: sz }) => navigationToolbarSize(sz, buttons),
185
+ });
186
+ }
187
+ /**
188
+ * Return the maximum square size that would allow the {@link NavigationBoard} to fit in a rectangle of size `width x height`.
189
+ */
190
+ static adaptSquareSize(width, height, attr) {
191
+ const { coordinateVisible, turnVisible, smallScreenLimits, playButtonVisible, flipButtonVisible, additionalButtons } = sanitizePartialObject(attr, () => new IllegalArgument('NavigationBoard.adaptSquareSize()', 'attr'));
192
+ // Sanitization
193
+ const actualPlayButtonVisible = sanitizeOptional(playButtonVisible, sanitizeBoolean);
194
+ const actualFlipButtonVisible = sanitizeOptional(flipButtonVisible, sanitizeBoolean);
195
+ if (additionalButtons !== undefined && !isNavigationBarScheme(additionalButtons)) {
196
+ throw new IllegalArgument('NavigationBoard.adaptSquareSize()', 'additionalButtons');
197
+ }
198
+ const buttons = computeBarScheme(actualPlayButtonVisible, actualFlipButtonVisible, additionalButtons);
199
+ return Chessboard.adaptSquareSize(width, height, {
200
+ coordinateVisible: coordinateVisible,
201
+ turnVisible: turnVisible,
202
+ smallScreenLimits: smallScreenLimits,
203
+ bottomComponent: ({ squareSize: sz }) => navigationToolbarSize(sz, buttons),
204
+ });
205
+ }
103
206
  }
104
207
  NavigationBoard.defaultProps = {
105
208
  ...defaultDynamicBoardProps(),
106
209
  game: new Game(),
107
210
  gameIndex: 0,
108
211
  initialNodeId: 'start',
212
+ initialIsPlaying: false,
109
213
  initialFlipped: false,
214
+ playButtonVisible: false,
110
215
  flipButtonVisible: true,
216
+ additionalButtons: [],
111
217
  };
218
+ function computeBarScheme(playButtonVisible, flipButtonVisible, additionalButtons) {
219
+ // WARNING: the logic here must be the same as the one in `renderToolbar()`.
220
+ const buttons = [];
221
+ buttons.push('button'); // go-first
222
+ buttons.push('button'); // go-previous
223
+ if (playButtonVisible ?? NavigationBoard.defaultProps.playButtonVisible) {
224
+ buttons.push('button');
225
+ }
226
+ buttons.push('button'); // go-next
227
+ buttons.push('button'); // go-last
228
+ buttons.push('spacer');
229
+ if (flipButtonVisible ?? NavigationBoard.defaultProps.flipButtonVisible) {
230
+ buttons.push('button');
231
+ }
232
+ buttons.push('spacer');
233
+ if (additionalButtons !== undefined) {
234
+ for (const button of additionalButtons) {
235
+ buttons.push(button);
236
+ }
237
+ }
238
+ return buttons;
239
+ }
112
240
  //# sourceMappingURL=NavigationBoard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationBoard.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationBoard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NavigationBoard.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationBoard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAGhF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAY,IAAI,EAAE,IAAI,IAAI,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE3G,OAAO,EAA4B,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC1H,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9J,OAAO,EAAsC,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG/E,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAkIjC;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK,CAAC,SAAqD;IAiB5F,YAAY,KAA2B;QACnC,KAAK,CAAC,KAAK,CAAC,CAAC;QAJT,uBAAkB,GAAqC,KAAK,CAAC,SAAS,EAAE,CAAC;QAK7E,IAAI,CAAC,KAAK,GAAG;YACT,oBAAoB,EAAE,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC;YACzD,uBAAuB,EAAE,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC;YAChE,qBAAqB,EAAE,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC;SAC/D,CAAC;IACN,CAAC;IAED,oBAAoB;QAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAED,MAAM;QACF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,+CAA+C;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACjF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,oCAAoC;QACpC,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAC7G,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAEnF,eAAe;QACf,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAChH,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;QAE1G,OAAO,CACH,6BAAK,SAAS,EAAC,wBAAwB;YAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;YAC5D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CACtD,CACT,CAAC;IACN,CAAC;IAEO,WAAW,CAAC,IAAU,EAAE,IAA0B,EAAE,SAAkB,EAAE,OAAgB;QAC5F,MAAM,QAAQ,GAAG,IAAI,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3F,MAAM,IAAI,GAAG,IAAI,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,OAAO,oBAAC,UAAU,IACd,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAChD,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAC3F,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EACjC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAC/C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EACnC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAC/C,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAC7C,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,GAC5F,CAAC;IACP,CAAC;IAEO,qBAAqB,CAAC,IAAU,EAAE,aAAqB;QAC3D,OAAO,oBAAC,eAAe,IAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAChD,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAC7E,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EACnF,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAC3E,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,GAC7E,CAAC;IACP,CAAC;IAEO,aAAa,CAAC,IAAU,EAAE,IAA0B,EAAE,UAAkB,EAAE,SAAkB;QAEhG,+EAA+E;QAC/E,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,0BAA0B;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,aAAa,KAAK,OAAO,CAAC;QAC9C,MAAM,OAAO,GAAG,CAAC,IAAI,YAAY,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7K,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;QACtL,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtL,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;QACtK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;QACtK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAC1H,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvB,wDAAwD;QACxD,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,mBAAmB,CAAC,CAAC;YACjI,CAAC;iBACI,CAAC;gBACF,uDAAuD;gBACvD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1F,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,oBAAC,iBAAiB,IAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;IAC3E,CAAC;IAEO,gBAAgB,CAAC,YAAgC,EAAE,UAAU,GAAG,IAAI;QACxE,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC,kCAAkC;YACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1D,CAAC;aACI,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,gCAAgC;YACnE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,eAAwB,EAAE,UAAU,GAAG,IAAI;QACrE,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC,gCAAgC;YACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,uBAAuB,EAAE,eAAe,EAAE,CAAC,CAAC;QAChE,CAAC;aACI,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,8BAA8B;YACpE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAEO,uBAAuB;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,0BAA0B;YAC9D,IAAI,CAAC,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAChF,CAAC;aACI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,wBAAwB;YAC5D,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAEO,oBAAoB;QACxB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAC/C,uBAAuB;QACvB,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,IAA8B;QACtC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAC5H,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,CAAC;QAE7F,eAAe;QACf,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QACrF,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QACrF,IAAI,iBAAiB,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,mBAAmB,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,CAAC;QACtG,OAAO,UAAU,CAAC,IAAI,CAAC;YACnB,UAAU,EAAE,UAAU;YACtB,iBAAiB,EAAE,iBAAiB;YACpC,WAAW,EAAE,WAAW;YACxB,iBAAiB,EAAE,iBAAiB;YACpC,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC;SAC9E,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAa,EAAE,MAAc,EAAE,IAAyC;QAE3F,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAChH,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC,CAAC;QAExG,eAAe;QACf,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QACrF,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QACrF,IAAI,iBAAiB,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE,mBAAmB,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,CAAC;QACtG,OAAO,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE;YAC7C,iBAAiB,EAAE,iBAAiB;YACpC,WAAW,EAAE,WAAW;YACxB,iBAAiB,EAAE,iBAAiB;YACpC,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC;SAC9E,CAAC,CAAC;IACP,CAAC;;AArOM,4BAAY,GAAG;IAClB,GAAG,wBAAwB,EAAE;IAC7B,IAAI,EAAE,IAAI,IAAI,EAAE;IAChB,SAAS,EAAE,CAAC;IACZ,aAAa,EAAE,OAAO;IACtB,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,KAAK;IACrB,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,EAAE;CACxB,AAVkB,CAUjB;AAgON,SAAS,gBAAgB,CAAC,iBAAsC,EAAE,iBAAsC,EACpG,iBAAkD;IAElD,4EAA4E;IAC5E,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;IACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc;IACtC,IAAI,iBAAiB,IAAI,eAAe,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;IAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;IAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,IAAI,iBAAiB,IAAI,eAAe,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEvB,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,66 @@
1
+ /*!
2
+ * -------------------------------------------------------------------------- *
3
+ * *
4
+ * Kokopu-React - A React-based library of chess-related components. *
5
+ * <https://www.npmjs.com/package/kokopu-react> *
6
+ * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
7
+ * *
8
+ * Kokopu-React is free software: you can redistribute it and/or *
9
+ * modify it under the terms of the GNU Lesser General Public License *
10
+ * as published by the Free Software Foundation, either version 3 of *
11
+ * the License, or (at your option) any later version. *
12
+ * *
13
+ * Kokopu-React is distributed in the hope that it will be useful, *
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16
+ * GNU Lesser General Public License for more details. *
17
+ * *
18
+ * You should have received a copy of the GNU Lesser General *
19
+ * Public License along with this program. If not, see *
20
+ * <http://www.gnu.org/licenses/>. *
21
+ * *
22
+ * -------------------------------------------------------------------------- */
23
+ /**
24
+ * Descriptor for additional buttons to be added to the toolbar of {@link NavigationBoard}.
25
+ */
26
+ export type NavigationButton = {
27
+ /**
28
+ * Button icon, defined as a SVG path (see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d#path_commands for more details
29
+ * on how to define a SVG path).
30
+ *
31
+ * 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.
32
+ */
33
+ iconPath: string;
34
+ /**
35
+ * Human-readable tooltip.
36
+ */
37
+ tooltip?: string;
38
+ /**
39
+ * Whether or not the button is enabled (true by default).
40
+ */
41
+ enabled?: boolean;
42
+ /**
43
+ * Callback invoked when the user clicks on the button.
44
+ */
45
+ onClick?: () => void;
46
+ };
47
+ /**
48
+ * List of additional buttons to be added to the toolbar of {@link NavigationBoard}, together with optional spacers in-between.
49
+ */
50
+ export type NavigationBar = (NavigationButton | 'spacer')[];
51
+ /**
52
+ * Scheme of additional button list to be added to the toolbar of {@link NavigationBoard}, together with optional spacers in-between.
53
+ */
54
+ export type NavigationBarScheme = ('button' | 'spacer')[];
55
+ /**
56
+ * Whether the given object is a {@link NavigationButton} or not.
57
+ */
58
+ export declare function isNavigationButton(button: unknown): button is NavigationButton;
59
+ /**
60
+ * Whether the given object is a {@link NavigationBar} or not.
61
+ */
62
+ export declare function isNavigationBar(buttons: unknown): buttons is NavigationBar;
63
+ /**
64
+ * Whether the given object is a {@link NavigationBarScheme} or not.
65
+ */
66
+ export declare function isNavigationBarScheme(buttons: unknown): buttons is NavigationBarScheme;
@@ -0,0 +1,67 @@
1
+ /*!
2
+ * -------------------------------------------------------------------------- *
3
+ * *
4
+ * Kokopu-React - A React-based library of chess-related components. *
5
+ * <https://www.npmjs.com/package/kokopu-react> *
6
+ * Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
7
+ * *
8
+ * Kokopu-React is free software: you can redistribute it and/or *
9
+ * modify it under the terms of the GNU Lesser General Public License *
10
+ * as published by the Free Software Foundation, either version 3 of *
11
+ * the License, or (at your option) any later version. *
12
+ * *
13
+ * Kokopu-React is distributed in the hope that it will be useful, *
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16
+ * GNU Lesser General Public License for more details. *
17
+ * *
18
+ * You should have received a copy of the GNU Lesser General *
19
+ * Public License along with this program. If not, see *
20
+ * <http://www.gnu.org/licenses/>. *
21
+ * *
22
+ * -------------------------------------------------------------------------- */
23
+ /**
24
+ * Whether the given object is a {@link NavigationButton} or not.
25
+ */
26
+ export function isNavigationButton(button) {
27
+ if (typeof button !== 'object' || button === null) {
28
+ return false;
29
+ }
30
+ return typeof button.iconPath === 'string' &&
31
+ (button.tooltip === undefined || typeof button.tooltip === 'string') &&
32
+ (button.enabled === undefined || typeof button.enabled === 'boolean') &&
33
+ (button.onClick === undefined || typeof button.onClick === 'function');
34
+ }
35
+ /**
36
+ * Whether the given object is a {@link NavigationBar} or not.
37
+ */
38
+ export function isNavigationBar(buttons) {
39
+ if (Array.isArray(buttons)) {
40
+ for (const button of buttons) {
41
+ if (!(isNavigationButton(button) || button === 'spacer')) {
42
+ return false;
43
+ }
44
+ }
45
+ return true;
46
+ }
47
+ else {
48
+ return false;
49
+ }
50
+ }
51
+ /**
52
+ * Whether the given object is a {@link NavigationBarScheme} or not.
53
+ */
54
+ export function isNavigationBarScheme(buttons) {
55
+ if (Array.isArray(buttons)) {
56
+ for (const button of buttons) {
57
+ if (!(button === 'button' || button === 'spacer')) {
58
+ return false;
59
+ }
60
+ }
61
+ return true;
62
+ }
63
+ else {
64
+ return false;
65
+ }
66
+ }
67
+ //# sourceMappingURL=NavigationButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationButton.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationButton.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AA6ChF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAQ,MAA2B,CAAC,QAAQ,KAAK,QAAQ;QAC5D,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,QAAQ,CAAC;QAChH,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,SAAS,CAAC;QACjH,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;AAC3H,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;SACI,CAAC;QACF,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;SACI,CAAC;QACF,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
@@ -23,14 +23,14 @@
23
23
 
24
24
 
25
25
  .kokopu-focusFieldContainer {
26
- position: fixed;
27
- bottom: 0px;
28
- right: 0px;
29
- width: 0px;
30
- height: 0px;
31
- overflow: hidden;
26
+ position: fixed;
27
+ bottom: 0px;
28
+ right: 0px;
29
+ width: 0px;
30
+ height: 0px;
31
+ overflow: hidden;
32
32
  }
33
33
 
34
34
  .kokopu-focusField {
35
- position: absolute; /* see #1 */
35
+ position: absolute; /* see #1 */
36
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationField.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NavigationField.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationField.tsx"],"names":[],"mappings":"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"}
@@ -23,29 +23,32 @@
23
23
 
24
24
 
25
25
  .kokopu-navigationBoard {
26
- display: flex;
27
- flex-direction: column;
28
- align-items: center;
26
+ display: flex;
27
+ flex-direction: column;
28
+ align-items: center;
29
29
  }
30
30
 
31
31
  .kokopu-navigationToolbar {
32
- line-height: 0px;
32
+ line-height: 0px;
33
33
  }
34
34
 
35
- .kokopu-navigationButton {
36
- display: inline-block;
37
- cursor: pointer;
35
+ .kokopu-enabledNavigationButton,
36
+ .kokopu-disabledNavigationButton {
37
+ display: inline-block;
38
38
  }
39
39
 
40
- .kokopu-navigationButton:hover {
41
- opacity: 0.6;
40
+ .kokopu-enabledNavigationButton {
41
+ cursor: pointer;
42
42
  }
43
43
 
44
- * + .kokopu-navigationButton {
45
- margin-left: 2px;
44
+ .kokopu-enabledNavigationButton:hover {
45
+ opacity: 0.6;
46
+ }
47
+
48
+ .kokopu-disabledNavigationButton {
49
+ opacity: 0.2;
46
50
  }
47
51
 
48
52
  .kokopu-navigationSpacer {
49
- display: inline-block;
50
- width: 10px;
53
+ display: inline-block;
51
54
  }
@@ -21,21 +21,21 @@
21
21
  * *
22
22
  * -------------------------------------------------------------------------- */
23
23
  import * as React from 'react';
24
+ import { NavigationBar, NavigationBarScheme } from './NavigationButton';
24
25
  import './NavigationToolbar.css';
25
26
  interface NavigationToolbarProps {
26
- flipButtonVisible: boolean;
27
27
  squareSize: number;
28
- onFirstClicked?: () => void;
29
- onPreviousClicked?: () => void;
30
- onNextClicked?: () => void;
31
- onLastClicked?: () => void;
32
- onFlipClicked?: () => void;
28
+ buttons: NavigationBar;
33
29
  }
34
30
  /**
35
31
  * Toolbar below the navigation board.
36
32
  */
37
- export declare class NavigationToolbar extends React.Component<NavigationToolbarProps> {
38
- render(): React.JSX.Element;
39
- private renderFlipButton;
40
- }
33
+ export declare function NavigationToolbar({ squareSize, buttons }: NavigationToolbarProps): React.JSX.Element;
34
+ /**
35
+ * Size of the navigation toolbar (taking into account the margin between the toolbar and the chessboard), assuming the given square size.
36
+ */
37
+ export declare function navigationToolbarSize(squareSize: number, buttons: NavigationBarScheme): {
38
+ width: number;
39
+ height: number;
40
+ };
41
41
  export {};