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,99 +21,69 @@
21
21
  * *
22
22
  * -------------------------------------------------------------------------- */
23
23
  import * as React from 'react';
24
- import { i18n } from '../i18n';
25
24
  import './NavigationToolbar.css';
26
- const THICKNESS = 2;
27
- const CHEVRON_SIZE = 7;
28
- const ARROW_SIZE = 5;
29
- const ARROW_LENGTH = 16;
30
25
  /**
31
26
  * Toolbar below the navigation board.
32
27
  */
33
- export class NavigationToolbar extends React.Component {
34
- render() {
35
- const buttonSize = computeButtonSize(this.props.squareSize);
36
- const marginTop = Math.round(buttonSize / 4);
37
- return (React.createElement("div", { className: "kokopu-navigationToolbar", style: { marginTop: marginTop } },
38
- React.createElement(NavigationButton, { size: buttonSize, tooltip: i18n.TOOLTIP_GO_FIRST, path: chevronPath(14, 16, -1) + ' ' + chevronPath(10, 16, -1), onClick: this.props.onFirstClicked }),
39
- React.createElement(NavigationButton, { size: buttonSize, tooltip: i18n.TOOLTIP_GO_PREVIOUS, path: chevronPath(12, 16, -1), onClick: this.props.onPreviousClicked }),
40
- React.createElement(NavigationButton, { size: buttonSize, tooltip: i18n.TOOLTIP_GO_NEXT, path: chevronPath(20, 16, 1), onClick: this.props.onNextClicked }),
41
- React.createElement(NavigationButton, { size: buttonSize, tooltip: i18n.TOOLTIP_GO_LAST, path: chevronPath(18, 16, 1) + ' ' + chevronPath(22, 16, 1), onClick: this.props.onLastClicked }),
42
- this.renderFlipButton(buttonSize)));
43
- }
44
- renderFlipButton(buttonSize) {
45
- if (!this.props.flipButtonVisible) {
46
- return undefined;
28
+ export function NavigationToolbar({ squareSize, buttons }) {
29
+ const buttonSize = computeButtonSize(squareSize);
30
+ const spacerSize = computeSpacerSize(squareSize);
31
+ const buttonNodes = [];
32
+ let atLeastOneButtonEncountered = false;
33
+ for (let i = 0; i < buttons.length; ++i) {
34
+ const button = buttons[i];
35
+ // Skip the spacers.
36
+ if (button === 'spacer') {
37
+ continue;
38
+ }
39
+ // Enqueue a spacer if necessary.
40
+ // Remark: consecutive spacers are collapsed into a single one for rendering, and spacers at the begin and end of the button list are not rendered.
41
+ if (atLeastOneButtonEncountered && buttons[i - 1] === 'spacer') {
42
+ buttonNodes.push(React.createElement("div", { key: buttonNodes.length, className: "kokopu-navigationSpacer", style: { width: spacerSize } }));
47
43
  }
48
- return (React.createElement(React.Fragment, null,
49
- React.createElement("div", { className: "kokopu-navigationSpacer" }),
50
- React.createElement(NavigationButton, { size: buttonSize, tooltip: i18n.TOOLTIP_FLIP, path: arrowPath(11, 25, 1) + ' ' + arrowPath(21, 7, -1), onClick: this.props.onFlipClicked })));
44
+ atLeastOneButtonEncountered = true;
45
+ // Enqueue the button node.
46
+ buttonNodes.push(React.createElement(NavigationButtonImpl, { key: buttonNodes.length, tooltip: button.tooltip, iconPath: button.iconPath, enabled: button.enabled, onClick: button.onClick, size: buttonSize, spaceOnLeft: i === 0 || buttons[i - 1] === 'spacer', spaceOnRight: i === buttons.length - 1 || buttons[i + 1] === 'spacer' }));
51
47
  }
48
+ return React.createElement("div", { className: "kokopu-navigationToolbar", style: { marginTop: computeMarginTop(squareSize) } }, buttonNodes);
52
49
  }
53
50
  /**
54
51
  * Button for the navigation toolbar.
55
52
  */
56
- function NavigationButton({ size, tooltip, path, onClick }) {
57
- return (React.createElement("div", { className: "kokopu-navigationButton", title: tooltip, onClick: onClick },
53
+ function NavigationButtonImpl({ size, spaceOnLeft, spaceOnRight, iconPath, tooltip, enabled, onClick }) {
54
+ const leftBoundary = spaceOnLeft ? 'A 16 16 0 0 0 16 32' : 'L 1 0 L 1 32 L 16 32';
55
+ const rightBoundary = spaceOnRight ? 'A 16 16 0 0 0 16 0' : 'L 31 32 L 31 0 L 16 0';
56
+ const actuallyEnabled = enabled ?? true;
57
+ return (React.createElement("div", { className: actuallyEnabled ? 'kokopu-enabledNavigationButton' : 'kokopu-disabledNavigationButton', title: tooltip, onClick: actuallyEnabled ? onClick : undefined },
58
58
  React.createElement("svg", { viewBox: "0 0 32 32", width: size, height: size },
59
- React.createElement("path", { d: `M 16 0 A 16 16 0 0 0 16 32 A 16 16 0 0 0 16 0 Z ${path}`, fill: "currentcolor" }))));
59
+ React.createElement("path", { d: `M 16 0 ${leftBoundary} ${rightBoundary} Z ${iconPath}`, fill: "currentcolor" }))));
60
60
  }
61
61
  /**
62
- * * C
63
- * / \
64
- * B * \
65
- * \ \
66
- * \ \
67
- * A * * D
68
- * / /
69
- * / /
70
- * F * /
71
- * \ /
72
- * * E
73
- *
74
- * (x,y) = middle of [AD]
62
+ * Size of the navigation toolbar (taking into account the margin between the toolbar and the chessboard), assuming the given square size.
75
63
  */
76
- function chevronPath(x, y, direction) {
77
- const xA = x - direction * THICKNESS * Math.sqrt(2) / 2;
78
- const xB = x - direction * (CHEVRON_SIZE + THICKNESS / Math.sqrt(2) / 2);
79
- const xC = x - direction * (CHEVRON_SIZE - THICKNESS / Math.sqrt(2) / 2);
80
- const xD = x + direction * THICKNESS * Math.sqrt(2) / 2;
81
- const yB = y - direction * (CHEVRON_SIZE - THICKNESS / Math.sqrt(2) / 2);
82
- const yC = y - direction * (CHEVRON_SIZE + THICKNESS / Math.sqrt(2) / 2);
83
- const yE = y + direction * (CHEVRON_SIZE + THICKNESS / Math.sqrt(2) / 2);
84
- const yF = y + direction * (CHEVRON_SIZE - THICKNESS / Math.sqrt(2) / 2);
85
- return `M ${xA} ${y} L ${xB} ${yB} L ${xC} ${yC} L ${xD} ${y} L ${xC} ${yE} L ${xB} ${yF} Z`;
86
- }
87
- /**
88
- * D +---+ E
89
- * | |
90
- * | |
91
- * | |
92
- * B * | | * G
93
- * / \ | | / \
94
- * A * \| |/ * H
95
- * \ * * /
96
- * \ C F /
97
- * \ O /
98
- * \ * /
99
- * \ /
100
- * \ /
101
- * *
102
- * (x,y)
103
- */
104
- function arrowPath(x, y, direction) {
105
- const xA = x - direction * (ARROW_SIZE + THICKNESS / Math.sqrt(2) / 2);
106
- const xB = x - direction * (ARROW_SIZE - THICKNESS / Math.sqrt(2) / 2);
107
- const xC = x - direction * THICKNESS / 2;
108
- const xF = x + direction * THICKNESS / 2;
109
- const xG = x + direction * (ARROW_SIZE - THICKNESS / Math.sqrt(2) / 2);
110
- const xH = x + direction * (ARROW_SIZE + THICKNESS / Math.sqrt(2) / 2);
111
- const y0 = y - direction * THICKNESS * Math.sqrt(2) / 2;
112
- const yA = y0 - direction * (ARROW_SIZE - THICKNESS / Math.sqrt(2) / 2);
113
- const yB = y0 - direction * (ARROW_SIZE + THICKNESS / Math.sqrt(2) / 2);
114
- const yC = yB + (xC - xB);
115
- const yD = y - direction * ARROW_LENGTH;
116
- return `M ${x} ${y} L ${xA} ${yA} L ${xB} ${yB} L ${xC} ${yC} V ${yD} H ${xF} V ${yC} L ${xG} ${yB} L ${xH} ${yA} Z`;
64
+ export function navigationToolbarSize(squareSize, buttons) {
65
+ const buttonSize = computeButtonSize(squareSize);
66
+ const spacerSize = computeSpacerSize(squareSize);
67
+ let width = 0;
68
+ let atLeastOneButtonEncountered = false;
69
+ for (let i = 0; i < buttons.length; ++i) {
70
+ // Skip the spacers.
71
+ if (buttons[i] === 'spacer') {
72
+ continue;
73
+ }
74
+ // Enqueue a spacer if necessary.
75
+ // Remark: consecutive spacers are collapsed into a single one for rendering, and spacers at the begin and end of the button list are not rendered.
76
+ if (atLeastOneButtonEncountered && buttons[i - 1] === 'spacer') {
77
+ width += spacerSize;
78
+ }
79
+ atLeastOneButtonEncountered = true;
80
+ // Enqueue the button node.
81
+ width += buttonSize;
82
+ }
83
+ return {
84
+ width: width,
85
+ height: buttonSize + computeMarginTop(squareSize),
86
+ };
117
87
  }
118
88
  /**
119
89
  * Return the height/width of the buttons assuming the given square size.
@@ -121,4 +91,16 @@ function arrowPath(x, y, direction) {
121
91
  function computeButtonSize(squareSize) {
122
92
  return Math.round((squareSize * 2 + 116) / 7);
123
93
  }
94
+ /**
95
+ * Return the width of the spacer between button groups, assuming the given square size.
96
+ */
97
+ function computeSpacerSize(squareSize) {
98
+ return Math.round((squareSize * 2 + 116) / 14);
99
+ }
100
+ /**
101
+ * Return the height of the margin between the toolbar and the chessboard.
102
+ */
103
+ function computeMarginTop(squareSize) {
104
+ return Math.round((squareSize * 2 + 116) / 28);
105
+ }
124
106
  //# sourceMappingURL=NavigationToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationToolbar.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationToolbar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NavigationToolbar.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationToolbar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
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
+ export declare const GO_FIRST_ICON_PATH: string;
24
+ export declare const GO_PREVIOUS_ICON_PATH: string;
25
+ export declare const GO_NEXT_ICON_PATH: string;
26
+ export declare const GO_LAST_ICON_PATH: string;
27
+ export declare const PLAY_ICON_PATH = "M 23 16 L 12 23 V 9 Z";
28
+ export declare const STOP_ICON_PATH = "M 11 11 H 21 V 21 H 11 Z";
29
+ export declare const FLIP_ICON_PATH: string;
@@ -0,0 +1,91 @@
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
+ const THICKNESS = 2;
24
+ const CHEVRON_SIZE = 7;
25
+ const ARROW_SIZE = 5;
26
+ const ARROW_LENGTH = 16;
27
+ /**
28
+ * * C
29
+ * / \
30
+ * B * \
31
+ * \ \
32
+ * \ \
33
+ * A * * D
34
+ * / /
35
+ * / /
36
+ * F * /
37
+ * \ /
38
+ * * E
39
+ *
40
+ * (x,y) = middle of [AD]
41
+ */
42
+ function chevronPath(x, y, direction) {
43
+ const xA = x - direction * THICKNESS * Math.sqrt(2) / 2;
44
+ const xB = x - direction * (CHEVRON_SIZE + THICKNESS / Math.sqrt(2) / 2);
45
+ const xC = x - direction * (CHEVRON_SIZE - THICKNESS / Math.sqrt(2) / 2);
46
+ const xD = x + direction * THICKNESS * Math.sqrt(2) / 2;
47
+ const yB = y - direction * (CHEVRON_SIZE - THICKNESS / Math.sqrt(2) / 2);
48
+ const yC = y - direction * (CHEVRON_SIZE + THICKNESS / Math.sqrt(2) / 2);
49
+ const yE = y + direction * (CHEVRON_SIZE + THICKNESS / Math.sqrt(2) / 2);
50
+ const yF = y + direction * (CHEVRON_SIZE - THICKNESS / Math.sqrt(2) / 2);
51
+ return `M ${xA} ${y} L ${xB} ${yB} L ${xC} ${yC} L ${xD} ${y} L ${xC} ${yE} L ${xB} ${yF} Z`;
52
+ }
53
+ /**
54
+ * D +---+ E
55
+ * | |
56
+ * | |
57
+ * | |
58
+ * B * | | * G
59
+ * / \ | | / \
60
+ * A * \| |/ * H
61
+ * \ * * /
62
+ * \ C F /
63
+ * \ O /
64
+ * \ * /
65
+ * \ /
66
+ * \ /
67
+ * *
68
+ * (x,y)
69
+ */
70
+ function arrowPath(x, y, direction) {
71
+ const xA = x - direction * (ARROW_SIZE + THICKNESS / Math.sqrt(2) / 2);
72
+ const xB = x - direction * (ARROW_SIZE - THICKNESS / Math.sqrt(2) / 2);
73
+ const xC = x - direction * THICKNESS / 2;
74
+ const xF = x + direction * THICKNESS / 2;
75
+ const xG = x + direction * (ARROW_SIZE - THICKNESS / Math.sqrt(2) / 2);
76
+ const xH = x + direction * (ARROW_SIZE + THICKNESS / Math.sqrt(2) / 2);
77
+ const y0 = y - direction * THICKNESS * Math.sqrt(2) / 2;
78
+ const yA = y0 - direction * (ARROW_SIZE - THICKNESS / Math.sqrt(2) / 2);
79
+ const yB = y0 - direction * (ARROW_SIZE + THICKNESS / Math.sqrt(2) / 2);
80
+ const yC = yB + (xC - xB);
81
+ const yD = y - direction * ARROW_LENGTH;
82
+ return `M ${x} ${y} L ${xA} ${yA} L ${xB} ${yB} L ${xC} ${yC} V ${yD} H ${xF} V ${yC} L ${xG} ${yB} L ${xH} ${yA} Z`;
83
+ }
84
+ export const GO_FIRST_ICON_PATH = chevronPath(14, 16, -1) + ' ' + chevronPath(10, 16, -1);
85
+ export const GO_PREVIOUS_ICON_PATH = chevronPath(12, 16, -1);
86
+ export const GO_NEXT_ICON_PATH = chevronPath(20, 16, 1);
87
+ export const GO_LAST_ICON_PATH = chevronPath(18, 16, 1) + ' ' + chevronPath(22, 16, 1);
88
+ export const PLAY_ICON_PATH = 'M 23 16 L 12 23 V 9 Z';
89
+ export const STOP_ICON_PATH = 'M 11 11 H 21 V 21 H 11 Z';
90
+ export const FLIP_ICON_PATH = arrowPath(11, 25, 1) + ' ' + arrowPath(21, 7, -1);
91
+ //# sourceMappingURL=iconPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconPaths.js","sourceRoot":"","sources":["../../../src/navigationboard/iconPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAGhF,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,YAAY,GAAG,EAAE,CAAC;AAGxB;;;;;;;;;;;;;;GAcG;AACH,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,SAAiB;IACxD,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;AACjG,CAAC;AAGD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,SAAiB;IACtD,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;AACzH,CAAC;AAGD,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,cAAc,GAAG,uBAAuB,CAAC;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitization.js","sourceRoot":"","sources":["../../src/sanitization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAMhF,MAAM,UAAU,cAAc,CAAC,KAAa;IAC3C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC7C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAGD,MAAM,UAAU,qBAAqB,CAAI,KAA6B,EAAE,gBAAuC;IAC9G,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC;IACX,CAAC;SACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,gBAAgB,EAAE,CAAC;IAC1B,CAAC;SACI,CAAC;QACL,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,gBAAuC;IACrF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAGD,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,gBAAuC;IACtH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/E,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAI,KAAoB,EAAE,oBAAmC;IAC5F,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC"}
1
+ {"version":3,"file":"sanitization.js","sourceRoot":"","sources":["../../src/sanitization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAMhF,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAGD,MAAM,UAAU,qBAAqB,CAAI,KAA6B,EAAE,gBAAuC;IAC3G,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACd,CAAC;SACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,gBAAgB,EAAE,CAAC;IAC7B,CAAC;SACI,CAAC;QACF,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,gBAAuC;IAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,gBAAgB,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAGD,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,gBAAuC;IACnH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAClF,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAI,KAAoB,EAAE,oBAAmC;IACzF,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAGhF,MAAM,UAAU,gBAAgB;IAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,GAAG,iBAA4B;IAC/E,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QACzD,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7C,OAAO,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1G,CAAC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAGhF,MAAM,UAAU,gBAAgB;IAC5B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,GAAG,iBAA4B;IAC5E,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7C,OAAO,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7G,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -48,125 +48,125 @@ const ARROW_MARKERS = 'Gd3b6,Rf3d6,Yh3f6';
48
48
 
49
49
 
50
50
  interface PageState {
51
- position: string;
52
- flipped: boolean;
53
- squareSize: number;
54
- coordinateVisible: boolean;
55
- turnVisible: boolean;
56
- annotationVisible: boolean;
57
- colorset: string;
58
- pieceset: string;
51
+ position: string;
52
+ flipped: boolean;
53
+ squareSize: number;
54
+ coordinateVisible: boolean;
55
+ turnVisible: boolean;
56
+ annotationVisible: boolean;
57
+ colorset: string;
58
+ pieceset: string;
59
59
  }
60
60
 
61
61
 
62
62
  export default class Page extends React.Component<object, PageState> {
63
63
 
64
- constructor(props: object) {
65
- super(props);
66
- this.state = {
67
- position: 'start',
68
- flipped: false,
69
- squareSize: 40,
70
- coordinateVisible: true,
71
- turnVisible: true,
72
- annotationVisible: false,
73
- colorset: 'original',
74
- pieceset: 'cburnett',
75
- };
76
- }
77
-
78
- render() {
79
- return (
80
- <Stack spacing={2} mt={2}>
81
- {this.renderControls()}
82
- {this.renderChessboard()}
83
- {this.renderCode()}
84
- </Stack>
85
- );
86
- }
87
-
88
- private renderControls() {
89
- return (<>
90
- <Stack direction="row" spacing={2} alignItems="center">
91
- <FormControlLabel label="Flip"
92
- control={<Switch checked={this.state.flipped} onChange={() => this.setState({ flipped: !this.state.flipped })} color="primary" />}
93
- />
94
- <FormControlLabel label="Show coordinates"
95
- control={<Switch checked={this.state.coordinateVisible} onChange={() => this.setState({ coordinateVisible: !this.state.coordinateVisible })} color="primary" />}
96
- />
97
- <FormControlLabel label="Show turn"
98
- control={<Switch checked={this.state.turnVisible} onChange={() => this.setState({ turnVisible: !this.state.turnVisible })} color="primary" />}
99
- />
100
- <FormControlLabel label="Show annotations"
101
- control={<Switch checked={this.state.annotationVisible} onChange={() => this.setState({ annotationVisible: !this.state.annotationVisible })} color="primary" />}
102
- />
103
- </Stack>
104
- <Box>
105
- <Typography gutterBottom>Square size</Typography>
106
- <Slider
107
- value={this.state.squareSize} onChange={(_, newValue) => this.setState({ squareSize: newValue as number })}
108
- min={Chessboard.minSquareSize()} max={Chessboard.maxSquareSize()} step={1} valueLabelDisplay="on" color="primary"
109
- />
110
- </Box>
111
- <Stack direction="row" spacing={2} alignItems="center">
112
- <FormControl variant="standard">
113
- <InputLabel id="colorset-label">Colorset</InputLabel>
114
- <Select labelId="colorset-label" sx={{ width: '8em' }} value={this.state.colorset} onChange={evt => this.setState({ colorset: evt.target.value })}>
115
- {Object.keys(Chessboard.colorsets()).sort().map(colorset => <MenuItem key={colorset} value={colorset}>{colorset}</MenuItem>)}
116
- </Select>
117
- </FormControl>
118
- <FormControl variant="standard">
119
- <InputLabel id="pieceset-label">Pieceset</InputLabel>
120
- <Select labelId="pieceset-label" sx={{ width: '8em' }} value={this.state.pieceset} onChange={evt => this.setState({ pieceset: evt.target.value })}>
121
- {Object.keys(Chessboard.piecesets()).sort().map(pieceset => <MenuItem key={pieceset} value={pieceset}>{pieceset}</MenuItem>)}
122
- </Select>
123
- </FormControl>
124
- <ButtonGroup color="primary" size="small">
125
- <Button onClick={() => this.setState({ position: 'empty' })}>Clear</Button>
126
- <Button onClick={() => this.setState({ position: 'start' })}>Reset</Button>
127
- <Button onClick={() => this.setState({ position: '8/8/8/8/8/4k3/q7/4K3 b - - 0 1' })}>Set FEN</Button>
128
- <Button onClick={() => this.setState({ position: 'I\'m an invalid FEN string' })}>Set ill-formed FEN</Button>
129
- </ButtonGroup>
130
- </Stack>
131
- </>);
132
- }
133
-
134
- private renderChessboard() {
135
- return (
136
- <Box>
137
- <Chessboard
138
- position={this.state.position}
139
- flipped={this.state.flipped}
140
- squareSize={this.state.squareSize}
141
- coordinateVisible={this.state.coordinateVisible}
142
- turnVisible={this.state.turnVisible}
143
- squareMarkers={this.state.annotationVisible ? SQUARE_MARKERS : ''}
144
- arrowMarkers={this.state.annotationVisible ? ARROW_MARKERS : ''}
145
- colorset={this.state.colorset}
146
- pieceset={this.state.pieceset}
147
- />
148
- </Box>
149
- );
150
- }
151
-
152
- private renderCode() {
153
- const attributes: string[] = [];
154
- if (this.state.position !== 'start') {
155
- attributes.push(`position="${this.state.position}"`);
156
- }
157
- if (this.state.flipped) {
158
- attributes.push('flipped');
159
- }
160
- if (this.state.annotationVisible) {
161
- attributes.push(`squareMarkers="${SQUARE_MARKERS}"`);
162
- attributes.push(`arrowMarkers="${ARROW_MARKERS}"`);
163
- }
164
- attributes.push(`squareSize={${this.state.squareSize}}`);
165
- attributes.push(`coordinateVisible={${this.state.coordinateVisible}}`);
166
- attributes.push(`turnVisible={${this.state.turnVisible}}`);
167
- attributes.push(`colorset="${this.state.colorset}"`);
168
- attributes.push(`pieceset="${this.state.pieceset}"`);
169
- return <pre className="kokopu-demoCode">{buildComponentDemoCode('Chessboard', attributes)}</pre>;
170
- }
64
+ constructor(props: object) {
65
+ super(props);
66
+ this.state = {
67
+ position: 'start',
68
+ flipped: false,
69
+ squareSize: 40,
70
+ coordinateVisible: true,
71
+ turnVisible: true,
72
+ annotationVisible: false,
73
+ colorset: 'original',
74
+ pieceset: 'cburnett',
75
+ };
76
+ }
77
+
78
+ render() {
79
+ return (
80
+ <Stack spacing={2} mt={2}>
81
+ {this.renderControls()}
82
+ {this.renderChessboard()}
83
+ {this.renderCode()}
84
+ </Stack>
85
+ );
86
+ }
87
+
88
+ private renderControls() {
89
+ return (<>
90
+ <Stack direction="row" spacing={2} alignItems="center">
91
+ <FormControlLabel label="Flip"
92
+ control={<Switch checked={this.state.flipped} onChange={() => this.setState({ flipped: !this.state.flipped })} color="primary" />}
93
+ />
94
+ <FormControlLabel label="Show coordinates"
95
+ control={<Switch checked={this.state.coordinateVisible} onChange={() => this.setState({ coordinateVisible: !this.state.coordinateVisible })} color="primary" />}
96
+ />
97
+ <FormControlLabel label="Show turn"
98
+ control={<Switch checked={this.state.turnVisible} onChange={() => this.setState({ turnVisible: !this.state.turnVisible })} color="primary" />}
99
+ />
100
+ <FormControlLabel label="Show annotations"
101
+ control={<Switch checked={this.state.annotationVisible} onChange={() => this.setState({ annotationVisible: !this.state.annotationVisible })} color="primary" />}
102
+ />
103
+ </Stack>
104
+ <Box>
105
+ <Typography gutterBottom>Square size</Typography>
106
+ <Slider
107
+ value={this.state.squareSize} onChange={(_, newValue) => this.setState({ squareSize: newValue as number })}
108
+ min={Chessboard.minSquareSize()} max={Chessboard.maxSquareSize()} step={1} valueLabelDisplay="on" color="primary"
109
+ />
110
+ </Box>
111
+ <Stack direction="row" spacing={2} alignItems="center">
112
+ <FormControl variant="standard">
113
+ <InputLabel id="colorset-label">Colorset</InputLabel>
114
+ <Select labelId="colorset-label" sx={{ width: '8em' }} value={this.state.colorset} onChange={evt => this.setState({ colorset: evt.target.value })}>
115
+ {Object.keys(Chessboard.colorsets()).sort().map(colorset => <MenuItem key={colorset} value={colorset}>{colorset}</MenuItem>)}
116
+ </Select>
117
+ </FormControl>
118
+ <FormControl variant="standard">
119
+ <InputLabel id="pieceset-label">Pieceset</InputLabel>
120
+ <Select labelId="pieceset-label" sx={{ width: '8em' }} value={this.state.pieceset} onChange={evt => this.setState({ pieceset: evt.target.value })}>
121
+ {Object.keys(Chessboard.piecesets()).sort().map(pieceset => <MenuItem key={pieceset} value={pieceset}>{pieceset}</MenuItem>)}
122
+ </Select>
123
+ </FormControl>
124
+ <ButtonGroup color="primary" size="small">
125
+ <Button onClick={() => this.setState({ position: 'empty' })}>Clear</Button>
126
+ <Button onClick={() => this.setState({ position: 'start' })}>Reset</Button>
127
+ <Button onClick={() => this.setState({ position: '8/8/8/8/8/4k3/q7/4K3 b - - 0 1' })}>Set FEN</Button>
128
+ <Button onClick={() => this.setState({ position: 'I\'m an invalid FEN string' })}>Set ill-formed FEN</Button>
129
+ </ButtonGroup>
130
+ </Stack>
131
+ </>);
132
+ }
133
+
134
+ private renderChessboard() {
135
+ return (
136
+ <Box>
137
+ <Chessboard
138
+ position={this.state.position}
139
+ flipped={this.state.flipped}
140
+ squareSize={this.state.squareSize}
141
+ coordinateVisible={this.state.coordinateVisible}
142
+ turnVisible={this.state.turnVisible}
143
+ squareMarkers={this.state.annotationVisible ? SQUARE_MARKERS : ''}
144
+ arrowMarkers={this.state.annotationVisible ? ARROW_MARKERS : ''}
145
+ colorset={this.state.colorset}
146
+ pieceset={this.state.pieceset}
147
+ />
148
+ </Box>
149
+ );
150
+ }
151
+
152
+ private renderCode() {
153
+ const attributes: string[] = [];
154
+ if (this.state.position !== 'start') {
155
+ attributes.push(`position="${this.state.position}"`);
156
+ }
157
+ if (this.state.flipped) {
158
+ attributes.push('flipped');
159
+ }
160
+ if (this.state.annotationVisible) {
161
+ attributes.push(`squareMarkers="${SQUARE_MARKERS}"`);
162
+ attributes.push(`arrowMarkers="${ARROW_MARKERS}"`);
163
+ }
164
+ attributes.push(`squareSize={${this.state.squareSize}}`);
165
+ attributes.push(`coordinateVisible={${this.state.coordinateVisible}}`);
166
+ attributes.push(`turnVisible={${this.state.turnVisible}}`);
167
+ attributes.push(`colorset="${this.state.colorset}"`);
168
+ attributes.push(`pieceset="${this.state.pieceset}"`);
169
+ return <pre className="kokopu-demoCode">{buildComponentDemoCode('Chessboard', attributes)}</pre>;
170
+ }
171
171
 
172
172
  }