kokopu-react 3.0.2 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/.eslintrc.yml +1 -1
  2. package/CHANGELOG.md +13 -1
  3. package/dist/lib/chessboard/BoardProperties.d.ts +91 -0
  4. package/dist/lib/chessboard/BoardProperties.js +43 -0
  5. package/dist/lib/chessboard/BoardProperties.js.map +1 -0
  6. package/dist/lib/chessboard/Chessboard.css +13 -13
  7. package/dist/lib/chessboard/Chessboard.d.ts +14 -58
  8. package/dist/lib/chessboard/Chessboard.js +26 -92
  9. package/dist/lib/chessboard/Chessboard.js.map +1 -1
  10. package/dist/lib/chessboard/ChessboardImpl.js.map +1 -1
  11. package/dist/lib/chessboard/Draggable.js.map +1 -1
  12. package/dist/lib/chessboard/Motion.js.map +1 -1
  13. package/dist/lib/chessboard/colorsets.js.map +1 -1
  14. package/dist/lib/chessboard/piecesets.js.map +1 -1
  15. package/dist/lib/errorbox/ErrorBox.css +18 -18
  16. package/dist/lib/errorbox/ErrorBox.js.map +1 -1
  17. package/dist/lib/errorbox/parsing.d.ts +57 -0
  18. package/dist/lib/errorbox/parsing.js +140 -0
  19. package/dist/lib/errorbox/parsing.js.map +1 -0
  20. package/dist/lib/exception.js.map +1 -1
  21. package/dist/lib/i18n.d.ts +6 -0
  22. package/dist/lib/i18n.js +7 -0
  23. package/dist/lib/i18n.js.map +1 -1
  24. package/dist/lib/icons/AnnotationSymbolShape.css +6 -6
  25. package/dist/lib/icons/AnnotationSymbolShape.js.map +1 -1
  26. package/dist/lib/icons/ArrowMarkerIcon.js.map +1 -1
  27. package/dist/lib/icons/ArrowTip.js.map +1 -1
  28. package/dist/lib/icons/ChessPieceIcon.js.map +1 -1
  29. package/dist/lib/icons/SquareMarkerIcon.js.map +1 -1
  30. package/dist/lib/icons/TextMarkerIcon.js.map +1 -1
  31. package/dist/lib/icons/arrow.css +1 -1
  32. package/dist/lib/index.d.ts +5 -1
  33. package/dist/lib/index.js +3 -0
  34. package/dist/lib/index.js.map +1 -1
  35. package/dist/lib/movetext/Movetext.css +27 -40
  36. package/dist/lib/movetext/Movetext.d.ts +9 -43
  37. package/dist/lib/movetext/Movetext.js +15 -67
  38. package/dist/lib/movetext/Movetext.js.map +1 -1
  39. package/dist/lib/movetext/MovetextImpl.d.ts +7 -28
  40. package/dist/lib/movetext/MovetextImpl.js +15 -94
  41. package/dist/lib/movetext/MovetextImpl.js.map +1 -1
  42. package/dist/lib/movetext/fonts.css +7 -7
  43. package/dist/lib/movetext/htmlFilter.js.map +1 -1
  44. package/dist/lib/movetext/moveFormatter.js.map +1 -1
  45. package/dist/lib/navigationboard/NavigationBoard.d.ts +156 -0
  46. package/dist/lib/navigationboard/NavigationBoard.js +195 -0
  47. package/dist/lib/navigationboard/NavigationBoard.js.map +1 -0
  48. package/dist/lib/navigationboard/NavigationButton.d.ts +54 -0
  49. package/dist/lib/navigationboard/NavigationButton.js +35 -0
  50. package/dist/lib/navigationboard/NavigationButton.js.map +1 -0
  51. package/dist/lib/navigationboard/NavigationField.css +36 -0
  52. package/dist/lib/navigationboard/NavigationField.d.ts +81 -0
  53. package/dist/lib/navigationboard/NavigationField.js +154 -0
  54. package/dist/lib/navigationboard/NavigationField.js.map +1 -0
  55. package/dist/lib/navigationboard/NavigationToolbar.css +54 -0
  56. package/dist/lib/navigationboard/NavigationToolbar.d.ts +34 -0
  57. package/dist/lib/navigationboard/NavigationToolbar.js +73 -0
  58. package/dist/lib/navigationboard/NavigationToolbar.js.map +1 -0
  59. package/dist/lib/navigationboard/iconPaths.d.ts +29 -0
  60. package/dist/lib/navigationboard/iconPaths.js +91 -0
  61. package/dist/lib/navigationboard/iconPaths.js.map +1 -0
  62. package/dist/lib/sanitization.js.map +1 -1
  63. package/dist/lib/types.js.map +1 -1
  64. package/dist/lib/util.js.map +1 -1
  65. package/doc_src/demo/PageChessboardBase.tsx +115 -115
  66. package/doc_src/demo/PageChessboardInteraction.tsx +303 -303
  67. package/doc_src/demo/PageChessboardMove.tsx +173 -156
  68. package/doc_src/demo/PageChessboardSmallScreens.tsx +94 -94
  69. package/doc_src/demo/PageMovetextBase.tsx +180 -180
  70. package/doc_src/demo/PageMovetextInteraction.tsx +123 -123
  71. package/doc_src/demo/PageNavigationBoardBase.tsx +201 -0
  72. package/doc_src/demo/PageNavigationBoardUncontrolledVsControlled.tsx +114 -0
  73. package/doc_src/demo/decs.d.ts +4 -4
  74. package/doc_src/demo/demo.css +12 -12
  75. package/doc_src/demo/game-3.pgn +10 -0
  76. package/doc_src/demo/util.ts +1 -1
  77. package/doc_src/examples/Movetext.md +1 -1
  78. package/doc_src/examples/NavigationBoard.md +15 -0
  79. package/doc_src/theming/LogoRenderer.js +13 -13
  80. package/doc_src/theming/theming.css +5 -5
  81. package/package.json +95 -95
  82. package/scripts/doc.styleguide.config.js +133 -123
  83. package/scripts/doc.tsconfig.json +5 -5
  84. package/scripts/docker-compose.yml +1 -1
  85. package/scripts/test-graphic.tsconfig.json +5 -5
  86. package/scripts/test-graphic.webpack.config.js +57 -57
  87. package/scripts/test-headless.webpack.config.js +29 -29
  88. package/src/chessboard/BoardProperties.ts +131 -0
  89. package/src/chessboard/Chessboard.css +13 -13
  90. package/src/chessboard/Chessboard.tsx +389 -518
  91. package/src/chessboard/ChessboardImpl.tsx +557 -557
  92. package/src/chessboard/Draggable.tsx +185 -185
  93. package/src/chessboard/Motion.tsx +67 -67
  94. package/src/chessboard/colorsets.ts +66 -66
  95. package/src/chessboard/piecesets.ts +84 -84
  96. package/src/decs.d.ts +2 -2
  97. package/src/errorbox/ErrorBox.css +18 -18
  98. package/src/errorbox/ErrorBox.tsx +75 -75
  99. package/src/errorbox/parsing.tsx +158 -0
  100. package/src/exception.ts +17 -17
  101. package/src/i18n.ts +8 -0
  102. package/src/icons/AnnotationSymbolShape.css +6 -6
  103. package/src/icons/AnnotationSymbolShape.tsx +31 -31
  104. package/src/icons/ArrowMarkerIcon.tsx +34 -34
  105. package/src/icons/ArrowTip.tsx +14 -14
  106. package/src/icons/ChessPieceIcon.tsx +45 -45
  107. package/src/icons/SquareMarkerIcon.tsx +20 -20
  108. package/src/icons/TextMarkerIcon.tsx +29 -29
  109. package/src/icons/arrow.css +1 -1
  110. package/src/index.ts +8 -3
  111. package/src/movetext/Movetext.css +27 -40
  112. package/src/movetext/Movetext.tsx +163 -228
  113. package/src/movetext/MovetextImpl.tsx +351 -438
  114. package/src/movetext/fonts.css +7 -7
  115. package/src/movetext/htmlFilter.tsx +129 -129
  116. package/src/movetext/moveFormatter.tsx +37 -37
  117. package/src/navigationboard/NavigationBoard.tsx +350 -0
  118. package/src/navigationboard/NavigationButton.ts +72 -0
  119. package/src/navigationboard/NavigationField.css +36 -0
  120. package/src/navigationboard/NavigationField.tsx +185 -0
  121. package/src/navigationboard/NavigationToolbar.css +54 -0
  122. package/src/navigationboard/NavigationToolbar.tsx +117 -0
  123. package/src/navigationboard/iconPaths.ts +98 -0
  124. package/src/sanitization.ts +17 -17
  125. package/src/types.ts +116 -116
  126. package/src/util.ts +11 -11
  127. package/test/01_types.js +167 -167
  128. package/test/02_chessboard_util.js +114 -114
  129. package/test/03_error_box_graphic.js +16 -16
  130. package/test/04_icons_graphic.js +32 -32
  131. package/test/05_chessboard_graphic.js +60 -58
  132. package/test/06_chessboard_animation.js +36 -36
  133. package/test/07_chessboard_interaction.js +101 -101
  134. package/test/08_chessboard_play_moves.js +62 -62
  135. package/test/09_chessboard_small_screens.js +42 -21
  136. package/test/10_movetext_graphic.js +36 -31
  137. package/test/11_movetext_interaction.js +100 -96
  138. package/test/12_navigation_board_base.js +151 -0
  139. package/test/13_navigation_board_graphic.js +68 -0
  140. package/test/14_navigation_board_autoplay.js +100 -0
  141. package/test/common/graphic.js +106 -97
  142. package/test/graphic_references/05_chessboard_graphic/move/illegal_null-move.png +0 -0
  143. package/test/graphic_references/05_chessboard_graphic/move/null-move.png +0 -0
  144. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/default_bottom_component.png +0 -0
  145. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/default_top_component.png +0 -0
  146. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/reduced_bottom_component.png +0 -0
  147. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/reduced_top_component.png +0 -0
  148. package/test/graphic_references/10_movetext_graphic/format_move/format_text.png +0 -0
  149. package/test/graphic_references/10_movetext_graphic/options/wrong_piece_symbol_value.png +0 -0
  150. package/test/graphic_references/11_movetext_interaction/select_moves/click_on_unselected_without_callback.png +0 -0
  151. package/test/graphic_references/12_navigation_board_base/controlled/default.png +0 -0
  152. package/test/graphic_references/12_navigation_board_base/controlled/forbidden_navigation_0.png +0 -0
  153. package/test/graphic_references/12_navigation_board_base/controlled/forbidden_navigation_1.png +0 -0
  154. package/test/graphic_references/12_navigation_board_base/controlled/invalid_node_id.png +0 -0
  155. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_0.png +0 -0
  156. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_1.png +0 -0
  157. package/test/graphic_references/12_navigation_board_base/controlled/overriding_initial_node_id.png +0 -0
  158. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_0.png +0 -0
  159. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_1.png +0 -0
  160. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_2.png +0 -0
  161. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_3.png +0 -0
  162. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_0.png +0 -0
  163. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_1.png +0 -0
  164. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_2.png +0 -0
  165. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_0.png +0 -0
  166. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_1.png +0 -0
  167. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_2.png +0 -0
  168. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_end.png +0 -0
  169. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_specific_id.png +0 -0
  170. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_default.png +0 -0
  171. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_default_with_game_index.png +0 -0
  172. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_on_null-move.png +0 -0
  173. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_0.png +0 -0
  174. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_1.png +0 -0
  175. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_2.png +0 -0
  176. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_3.png +0 -0
  177. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_4.png +0 -0
  178. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_flipping_0.png +0 -0
  179. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_flipping_1.png +0 -0
  180. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_0.png +0 -0
  181. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_1.png +0 -0
  182. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_2.png +0 -0
  183. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_3.png +0 -0
  184. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_4.png +0 -0
  185. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_5.png +0 -0
  186. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_1.png +0 -0
  187. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_2.png +0 -0
  188. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/multiple_buttons.png +0 -0
  189. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/single_button.png +0 -0
  190. package/test/graphic_references/13_navigation_board_graphic/error/pgn_parsing_error.png +0 -0
  191. package/test/graphic_references/13_navigation_board_graphic/error/wrong_game_type.png +0 -0
  192. package/test/graphic_references/13_navigation_board_graphic/theme/custom_1.png +0 -0
  193. package/test/graphic_references/13_navigation_board_graphic/theme/custom_2.png +0 -0
  194. package/test/graphic_references/13_navigation_board_graphic/theme/large.png +0 -0
  195. package/test/graphic_references/13_navigation_board_graphic/theme/small.png +0 -0
  196. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_acknowledging_is-playing_changes.png +0 -0
  197. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_not_acknowledging_is-playing_changes.png +0 -0
  198. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_acknowledging_node_changes.png +0 -0
  199. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_not_acknowledging_node_changes.png +0 -0
  200. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_reaching_the_end.png +0 -0
  201. package/test/graphic_references/14_navigation_board_autoplay/controlled/already_at_the_end.png +0 -0
  202. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_is-playing_changes.png +0 -0
  203. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_node_changes.png +0 -0
  204. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_at_the_end.png +0 -0
  205. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_close_to_end.png +0 -0
  206. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_is-playing_changes.png +0 -0
  207. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_node_changes.png +0 -0
  208. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_after_stop.png +0 -0
  209. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_before_stop.png +0 -0
  210. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_after_stop.png +0 -0
  211. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_before_stop.png +0 -0
  212. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_close_to_end.png +0 -0
  213. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_default.png +0 -0
  214. package/test/graphic_test_app/03_error_box_graphic/base.tsx +14 -14
  215. package/test/graphic_test_app/03_error_box_graphic/localization.tsx +1 -1
  216. package/test/graphic_test_app/04_icons_graphic/chess_piece.tsx +7 -7
  217. package/test/graphic_test_app/04_icons_graphic/marker.tsx +15 -15
  218. package/test/graphic_test_app/05_chessboard_graphic/annotations.tsx +7 -7
  219. package/test/graphic_test_app/05_chessboard_graphic/base.tsx +6 -6
  220. package/test/graphic_test_app/05_chessboard_graphic/chess_variants.tsx +7 -7
  221. package/test/graphic_test_app/05_chessboard_graphic/flipped.tsx +5 -5
  222. package/test/graphic_test_app/05_chessboard_graphic/move.tsx +12 -10
  223. package/test/graphic_test_app/05_chessboard_graphic/theme.tsx +12 -12
  224. package/test/graphic_test_app/06_chessboard_animation/base_1.tsx +6 -6
  225. package/test/graphic_test_app/06_chessboard_animation/base_2.tsx +6 -6
  226. package/test/graphic_test_app/06_chessboard_animation/base_3.tsx +6 -6
  227. package/test/graphic_test_app/06_chessboard_animation/on_redraw.tsx +16 -16
  228. package/test/graphic_test_app/07_chessboard_interaction/click_squares.tsx +5 -5
  229. package/test/graphic_test_app/07_chessboard_interaction/edit_arrows.tsx +4 -4
  230. package/test/graphic_test_app/07_chessboard_interaction/error.tsx +2 -2
  231. package/test/graphic_test_app/07_chessboard_interaction/move_pieces.tsx +5 -5
  232. package/test/graphic_test_app/08_chessboard_play_moves/base.tsx +8 -8
  233. package/test/graphic_test_app/08_chessboard_play_moves/promotions.tsx +4 -4
  234. package/test/graphic_test_app/09_chessboard_small_screens/base.tsx +9 -9
  235. package/test/graphic_test_app/09_chessboard_small_screens/top_bottom_components.tsx +48 -0
  236. package/test/graphic_test_app/10_movetext_graphic/base.tsx +4 -4
  237. package/test/graphic_test_app/10_movetext_graphic/error.tsx +6 -6
  238. package/test/graphic_test_app/10_movetext_graphic/format_move.tsx +31 -0
  239. package/test/graphic_test_app/10_movetext_graphic/html.tsx +5 -5
  240. package/test/graphic_test_app/10_movetext_graphic/options.tsx +10 -9
  241. package/test/graphic_test_app/11_movetext_interaction/error.tsx +1 -1
  242. package/test/graphic_test_app/11_movetext_interaction/select_moves.tsx +11 -10
  243. package/test/graphic_test_app/12_navigation_board_base/controlled.tsx +43 -0
  244. package/test/graphic_test_app/12_navigation_board_base/uncontrolled.tsx +56 -0
  245. package/test/graphic_test_app/13_navigation_board_graphic/additional_buttons.tsx +49 -0
  246. package/test/graphic_test_app/13_navigation_board_graphic/error.tsx +34 -0
  247. package/test/graphic_test_app/13_navigation_board_graphic/theme.tsx +38 -0
  248. package/test/graphic_test_app/14_navigation_board_autoplay/controlled.tsx +73 -0
  249. package/test/graphic_test_app/14_navigation_board_autoplay/uncontrolled.tsx +34 -0
  250. package/test/graphic_test_app/common/decs.d.ts +2 -2
  251. package/test/graphic_test_app/common/test_app.css +15 -15
  252. package/test/graphic_test_app/common/test_app.tsx +48 -48
  253. package/tsconfig.json +13 -13
package/src/types.ts CHANGED
@@ -50,7 +50,7 @@ export type ChessPieceIconType = ColoredPiece | 'wx' | 'bx';
50
50
  * Whether the given object is a {@link ChessPieceIconType} or not.
51
51
  */
52
52
  export function isChessPieceIconType(iconType: unknown): iconType is ChessPieceIconType {
53
- return isColoredPiece(iconType) || iconType === 'wx' || iconType === 'bx';
53
+ return isColoredPiece(iconType) || iconType === 'wx' || iconType === 'bx';
54
54
  }
55
55
 
56
56
 
@@ -61,23 +61,23 @@ export function isChessPieceIconType(iconType: unknown): iconType is ChessPieceI
61
61
  */
62
62
  export type Colorset = {
63
63
 
64
- /** Color of the black squares. */
65
- b: string;
64
+ /** Color of the black squares. */
65
+ b: string;
66
66
 
67
- /** Color of the white squares. */
68
- w: string;
67
+ /** Color of the white squares. */
68
+ w: string;
69
69
 
70
- /** Color of the blue markers. */
71
- cb: string;
70
+ /** Color of the blue markers. */
71
+ cb: string;
72
72
 
73
- /** Color of the green markers. */
74
- cg: string;
73
+ /** Color of the green markers. */
74
+ cg: string;
75
75
 
76
- /** Color of the red markers. */
77
- cr: string;
76
+ /** Color of the red markers. */
77
+ cr: string;
78
78
 
79
- /** Color of the yellow markers. */
80
- cy: string;
79
+ /** Color of the yellow markers. */
80
+ cy: string;
81
81
  };
82
82
 
83
83
 
@@ -88,47 +88,47 @@ export type Colorset = {
88
88
  */
89
89
  export type Pieceset = {
90
90
 
91
- /** Image for the black bishops. */
92
- bb: string;
91
+ /** Image for the black bishops. */
92
+ bb: string;
93
93
 
94
- /** Image for the black kings. */
95
- bk: string;
94
+ /** Image for the black kings. */
95
+ bk: string;
96
96
 
97
- /** Image for the black knights. */
98
- bn: string;
97
+ /** Image for the black knights. */
98
+ bn: string;
99
99
 
100
- /** Image for the black pawns. */
101
- bp: string;
100
+ /** Image for the black pawns. */
101
+ bp: string;
102
102
 
103
- /** Image for the black queens. */
104
- bq: string;
103
+ /** Image for the black queens. */
104
+ bq: string;
105
105
 
106
- /** Image for the black rooks. */
107
- br: string;
106
+ /** Image for the black rooks. */
107
+ br: string;
108
108
 
109
- /** Image for the black turn flags. */
110
- bx: string;
109
+ /** Image for the black turn flags. */
110
+ bx: string;
111
111
 
112
- /** Image for the white bishops. */
113
- wb: string;
112
+ /** Image for the white bishops. */
113
+ wb: string;
114
114
 
115
- /** Image for the white kings. */
116
- wk: string;
115
+ /** Image for the white kings. */
116
+ wk: string;
117
117
 
118
- /** Image for the white knights. */
119
- wn: string;
118
+ /** Image for the white knights. */
119
+ wn: string;
120
120
 
121
- /** Image for the white pawns. */
122
- wp: string;
121
+ /** Image for the white pawns. */
122
+ wp: string;
123
123
 
124
- /** Image for the white queens. */
125
- wq: string;
124
+ /** Image for the white queens. */
125
+ wq: string;
126
126
 
127
- /** Image for the white rooks. */
128
- wr: string;
127
+ /** Image for the white rooks. */
128
+ wr: string;
129
129
 
130
- /** Image for the white turn flags. */
131
- wx: string;
130
+ /** Image for the white turn flags. */
131
+ wx: string;
132
132
  };
133
133
 
134
134
 
@@ -136,12 +136,12 @@ export type Pieceset = {
136
136
  * Set of aliases for chess pieces symbols.
137
137
  */
138
138
  export type PieceSymbolMapping = {
139
- K: string;
140
- Q: string;
141
- R: string;
142
- B: string;
143
- N: string;
144
- P: string;
139
+ K: string;
140
+ Q: string;
141
+ R: string;
142
+ B: string;
143
+ N: string;
144
+ P: string;
145
145
  };
146
146
 
147
147
 
@@ -149,15 +149,15 @@ export type PieceSymbolMapping = {
149
149
  * Whether the given object is a {@link PieceSymbolMapping} or not.
150
150
  */
151
151
  export function isPieceSymbolMapping(mapping: unknown): mapping is PieceSymbolMapping {
152
- if (typeof mapping !== 'object' || mapping === null) {
153
- return false;
154
- }
155
- return typeof (mapping as PieceSymbolMapping).K === 'string' &&
156
- typeof (mapping as PieceSymbolMapping).Q === 'string' &&
157
- typeof (mapping as PieceSymbolMapping).R === 'string' &&
158
- typeof (mapping as PieceSymbolMapping).B === 'string' &&
159
- typeof (mapping as PieceSymbolMapping).N === 'string' &&
160
- typeof (mapping as PieceSymbolMapping).P === 'string';
152
+ if (typeof mapping !== 'object' || mapping === null) {
153
+ return false;
154
+ }
155
+ return typeof (mapping as PieceSymbolMapping).K === 'string' &&
156
+ typeof (mapping as PieceSymbolMapping).Q === 'string' &&
157
+ typeof (mapping as PieceSymbolMapping).R === 'string' &&
158
+ typeof (mapping as PieceSymbolMapping).B === 'string' &&
159
+ typeof (mapping as PieceSymbolMapping).N === 'string' &&
160
+ typeof (mapping as PieceSymbolMapping).P === 'string';
161
161
  }
162
162
 
163
163
 
@@ -165,16 +165,16 @@ export function isPieceSymbolMapping(mapping: unknown): mapping is PieceSymbolMa
165
165
  * Symbol that can be chosen to decorate a square in a {@link Chessboard}.
166
166
  */
167
167
  export type AnnotationSymbol = 'plus' | 'times' | 'dot' | 'circle' |
168
- 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' |
169
- 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' |
170
- '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
168
+ 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' |
169
+ 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' |
170
+ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
171
171
 
172
172
 
173
173
  /**
174
174
  * Whether the given object is a {@link AnnotationSymbol} or not.
175
175
  */
176
176
  export function isAnnotationSymbol(symbol: unknown): symbol is AnnotationSymbol {
177
- return typeof symbol === 'string' && /^(?:[A-Za-z0-9]|plus|times|dot|circle)$/.test(symbol);
177
+ return typeof symbol === 'string' && /^(?:[A-Za-z0-9]|plus|times|dot|circle)$/.test(symbol);
178
178
  }
179
179
 
180
180
 
@@ -188,7 +188,7 @@ export type AnnotationColor = 'b' | 'g' | 'r' | 'y';
188
188
  * Whether the given object is a {@link AnnotationSymbol} or not.
189
189
  */
190
190
  export function isAnnotationColor(color: unknown): color is AnnotationColor {
191
- return color === 'b' || color === 'g' || color === 'r' || color === 'y';
191
+ return color === 'b' || color === 'g' || color === 'r' || color === 'y';
192
192
  }
193
193
 
194
194
 
@@ -217,14 +217,14 @@ export type ArrowMarkerSet = Partial<Record<SquareCouple, AnnotationColor>>;
217
217
  * @returns For example: `'Gd5,Ge4'`
218
218
  */
219
219
  export function flattenSquareMarkers(markers: SquareMarkerSet): string {
220
- if (typeof markers !== 'object' || markers === null) {
221
- throw new IllegalArgument('flattenSquareMarkers()', 'markers');
222
- }
223
- return Object.entries(markers)
224
- .filter(([ sq, color ]) => isSquare(sq) && isAnnotationColor(color))
225
- .sort((a, b) => a[0].localeCompare(b[0]))
226
- .map(([ sq, color ]) => color.toUpperCase() + sq)
227
- .join(',');
220
+ if (typeof markers !== 'object' || markers === null) {
221
+ throw new IllegalArgument('flattenSquareMarkers()', 'markers');
222
+ }
223
+ return Object.entries(markers)
224
+ .filter(([ sq, color ]) => isSquare(sq) && isAnnotationColor(color))
225
+ .sort((a, b) => a[0].localeCompare(b[0]))
226
+ .map(([ sq, color ]) => color.toUpperCase() + sq)
227
+ .join(',');
228
228
  }
229
229
 
230
230
 
@@ -235,14 +235,14 @@ export function flattenSquareMarkers(markers: SquareMarkerSet): string {
235
235
  * @returns For example: `'Rzd5,GAe4,Y(plus)h3'`
236
236
  */
237
237
  export function flattenTextMarkers(markers: TextMarkerSet): string {
238
- if (typeof markers !== 'object' || markers === null) {
239
- throw new IllegalArgument('flattenTextMarkers()', 'markers');
240
- }
241
- return Object.entries(markers)
242
- .filter(([ sq, desc ]) => isSquare(sq) && desc && isAnnotationColor(desc.color) && isAnnotationSymbol(desc.symbol))
243
- .sort((a, b) => a[0].localeCompare(b[0]))
244
- .map(([ sq, desc ]) => desc.color.toUpperCase() + (desc.symbol.length === 1 ? desc.symbol : `(${desc.symbol})`) + sq)
245
- .join(',');
238
+ if (typeof markers !== 'object' || markers === null) {
239
+ throw new IllegalArgument('flattenTextMarkers()', 'markers');
240
+ }
241
+ return Object.entries(markers)
242
+ .filter(([ sq, desc ]) => isSquare(sq) && desc && isAnnotationColor(desc.color) && isAnnotationSymbol(desc.symbol))
243
+ .sort((a, b) => a[0].localeCompare(b[0]))
244
+ .map(([ sq, desc ]) => desc.color.toUpperCase() + (desc.symbol.length === 1 ? desc.symbol : `(${desc.symbol})`) + sq)
245
+ .join(',');
246
246
  }
247
247
 
248
248
 
@@ -253,14 +253,14 @@ export function flattenTextMarkers(markers: TextMarkerSet): string {
253
253
  * @returns For example: `'Ge2e4,Rg8f6,Bg8h6'`
254
254
  */
255
255
  export function flattenArrowMarkers(markers: ArrowMarkerSet): string {
256
- if (typeof markers !== 'object' || markers === null) {
257
- throw new IllegalArgument('flattenArrowMarkers()', 'markers');
258
- }
259
- return Object.entries(markers)
260
- .filter(([ vect, color ]) => isSquareCouple(vect) && isAnnotationColor(color))
261
- .sort((a, b) => a[0].localeCompare(b[0]))
262
- .map(([ vect, color ]) => color.toUpperCase() + vect)
263
- .join(',');
256
+ if (typeof markers !== 'object' || markers === null) {
257
+ throw new IllegalArgument('flattenArrowMarkers()', 'markers');
258
+ }
259
+ return Object.entries(markers)
260
+ .filter(([ vect, color ]) => isSquareCouple(vect) && isAnnotationColor(color))
261
+ .sort((a, b) => a[0].localeCompare(b[0]))
262
+ .map(([ vect, color ]) => color.toUpperCase() + vect)
263
+ .join(',');
264
264
  }
265
265
 
266
266
 
@@ -271,14 +271,14 @@ export function flattenArrowMarkers(markers: ArrowMarkerSet): string {
271
271
  * @returns For example: `{ e4: 'g', d5: 'r' }`
272
272
  */
273
273
  export function parseSquareMarkers(markers: string): SquareMarkerSet {
274
- if (typeof markers !== 'string') {
275
- throw new IllegalArgument('parseSquareMarkers()', 'markers');
276
- }
277
- return parseMarkers<Square, AnnotationColor>(markers, token => {
278
- return /^([BGRY])([a-h][1-8])$/.test(token) ?
279
- { key: RegExp.$2 as Square, value: RegExp.$1.toLowerCase() as AnnotationColor } :
280
- undefined;
281
- });
274
+ if (typeof markers !== 'string') {
275
+ throw new IllegalArgument('parseSquareMarkers()', 'markers');
276
+ }
277
+ return parseMarkers<Square, AnnotationColor>(markers, token => {
278
+ return /^([BGRY])([a-h][1-8])$/.test(token) ?
279
+ { key: RegExp.$2 as Square, value: RegExp.$1.toLowerCase() as AnnotationColor } :
280
+ undefined;
281
+ });
282
282
  }
283
283
 
284
284
 
@@ -289,14 +289,14 @@ export function parseSquareMarkers(markers: string): SquareMarkerSet {
289
289
  * @returns For example: `{ e4: { symbol: 'A', color: 'g' }, d5: { symbol: 'z', color: 'r' }, h3: { symbol: 'plus', color: 'y' } }`
290
290
  */
291
291
  export function parseTextMarkers(markers: string): TextMarkerSet {
292
- if (typeof markers !== 'string') {
293
- throw new IllegalArgument('parseTextMarkers()', 'markers');
294
- }
295
- return parseMarkers<Square, { symbol: AnnotationSymbol, color: AnnotationColor }>(markers, token => {
296
- return /^([BGRY])(?:([A-Za-z0-9])|\((plus|times|dot|circle)\))([a-h][1-8])$/.test(token) ?
297
- { key: RegExp.$4 as Square, value: { symbol: (RegExp.$2 || RegExp.$3) as AnnotationSymbol, color: RegExp.$1.toLowerCase() as AnnotationColor } } :
298
- undefined;
299
- });
292
+ if (typeof markers !== 'string') {
293
+ throw new IllegalArgument('parseTextMarkers()', 'markers');
294
+ }
295
+ return parseMarkers<Square, { symbol: AnnotationSymbol, color: AnnotationColor }>(markers, token => {
296
+ return /^([BGRY])(?:([A-Za-z0-9])|\((plus|times|dot|circle)\))([a-h][1-8])$/.test(token) ?
297
+ { key: RegExp.$4 as Square, value: { symbol: (RegExp.$2 || RegExp.$3) as AnnotationSymbol, color: RegExp.$1.toLowerCase() as AnnotationColor } } :
298
+ undefined;
299
+ });
300
300
  }
301
301
 
302
302
 
@@ -307,23 +307,23 @@ export function parseTextMarkers(markers: string): TextMarkerSet {
307
307
  * @returns For example: `{ e2e4: 'g', g8f6: 'r', g8h6: 'b' }`
308
308
  */
309
309
  export function parseArrowMarkers(markers: string): ArrowMarkerSet {
310
- if (typeof markers !== 'string') {
311
- throw new IllegalArgument('parseArrowMarkers()', 'markers');
312
- }
313
- return parseMarkers<SquareCouple, AnnotationColor>(markers, token => {
314
- return /^([BGRY])([a-h][1-8][a-h][1-8])$/.test(token) ?
315
- { key: RegExp.$2 as SquareCouple, value: RegExp.$1.toLowerCase() as AnnotationColor } :
316
- undefined;
317
- });
310
+ if (typeof markers !== 'string') {
311
+ throw new IllegalArgument('parseArrowMarkers()', 'markers');
312
+ }
313
+ return parseMarkers<SquareCouple, AnnotationColor>(markers, token => {
314
+ return /^([BGRY])([a-h][1-8][a-h][1-8])$/.test(token) ?
315
+ { key: RegExp.$2 as SquareCouple, value: RegExp.$1.toLowerCase() as AnnotationColor } :
316
+ undefined;
317
+ });
318
318
  }
319
319
 
320
320
 
321
321
  function parseMarkers<K extends string, V>(markers: string, tokenParser: (token: string) => { key: K, value: V } | undefined): Partial<Record<K, V>> {
322
- const result: Partial<Record<K, V>> = {};
323
- markers.split(',').map(token => tokenParser(token.trim())).forEach(marker => {
324
- if (marker) {
325
- result[marker.key] = marker.value;
326
- }
327
- });
328
- return result;
322
+ const result: Partial<Record<K, V>> = {};
323
+ markers.split(',').map(token => tokenParser(token.trim())).forEach(marker => {
324
+ if (marker) {
325
+ result[marker.key] = marker.value;
326
+ }
327
+ });
328
+ return result;
329
329
  }
package/src/util.ts CHANGED
@@ -23,19 +23,19 @@
23
23
 
24
24
 
25
25
  export function generateRandomId() {
26
- const buffer = new Uint32Array(8);
27
- crypto.getRandomValues(buffer);
28
- let result = '';
29
- for (let i = 0; i < buffer.length; ++i) {
30
- result += buffer[i].toString(16);
31
- }
32
- return result;
26
+ const buffer = new Uint32Array(8);
27
+ crypto.getRandomValues(buffer);
28
+ let result = '';
29
+ for (let i = 0; i < buffer.length; ++i) {
30
+ result += buffer[i].toString(16);
31
+ }
32
+ return result;
33
33
  }
34
34
 
35
35
 
36
36
  export function fillPlaceholder(message: string, ...placeholderValues: unknown[]) {
37
- return message.replace(/{(\d+)}/g, (match, placeholder) => {
38
- const placeholderIndex = Number(placeholder);
39
- return placeholderIndex < placeholderValues.length ? String(placeholderValues[placeholderIndex]) : match;
40
- });
37
+ return message.replace(/{(\d+)}/g, (match, placeholder) => {
38
+ const placeholderIndex = Number(placeholder);
39
+ return placeholderIndex < placeholderValues.length ? String(placeholderValues[placeholderIndex]) : match;
40
+ });
41
41
  }