scrabble-solver 2.8.2 → 2.8.4

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 (216) hide show
  1. package/.eslintrc.js +1 -1
  2. package/.gitattributes +2 -0
  3. package/HISTORY.md +17 -0
  4. package/README.md +8 -26
  5. package/lerna.json +1 -1
  6. package/package.json +13 -13
  7. package/packages/configs/build/getConfig.js +6 -12
  8. package/packages/configs/build/getLocaleConfig.js +2 -2
  9. package/packages/configs/build/isConfigId.js +5 -8
  10. package/packages/configs/build/literaki/bonuses.js +2 -2
  11. package/packages/configs/build/literaki/literaki.js +14 -27
  12. package/packages/configs/build/literaki/tiles/tilesDe.js +1 -1
  13. package/packages/configs/build/literaki/tiles/tilesEn.js +1 -1
  14. package/packages/configs/build/literaki/tiles/tilesEs.js +1 -1
  15. package/packages/configs/build/literaki/tiles/tilesFr.js +1 -1
  16. package/packages/configs/build/literaki/tiles/tilesPl.js +1 -1
  17. package/packages/configs/build/scrabble/bonuses.js +2 -2
  18. package/packages/configs/build/scrabble/scrabble.js +14 -27
  19. package/packages/configs/build/scrabble/tiles/tilesDe.js +1 -1
  20. package/packages/configs/build/scrabble/tiles/tilesEn.js +1 -1
  21. package/packages/configs/build/scrabble/tiles/tilesEs.js +1 -1
  22. package/packages/configs/build/scrabble/tiles/tilesFr.js +1 -1
  23. package/packages/configs/build/scrabble/tiles/tilesPl.js +1 -1
  24. package/packages/configs/package.json +3 -3
  25. package/packages/constants/package.json +1 -1
  26. package/packages/dictionaries/build/Dictionaries.js +37 -110
  27. package/packages/dictionaries/build/constants/index.js +2 -2
  28. package/packages/dictionaries/build/index.js +1 -1
  29. package/packages/dictionaries/build/lib/DiskCache.js +29 -91
  30. package/packages/dictionaries/build/lib/LayeredCache.js +37 -101
  31. package/packages/dictionaries/build/lib/MemoryCache.js +16 -17
  32. package/packages/dictionaries/build/lib/createAsyncProxy.js +14 -58
  33. package/packages/dictionaries/build/lib/createCacheTimestampComparator.js +4 -4
  34. package/packages/dictionaries/build/lib/downloadDictionary.js +10 -54
  35. package/packages/dictionaries/build/lib/getDictionaryFilepath.js +4 -4
  36. package/packages/dictionaries/build/lib/index.d.ts +0 -2
  37. package/packages/dictionaries/build/lib/index.js +1 -5
  38. package/packages/dictionaries/package-lock.json +10 -10
  39. package/packages/dictionaries/package.json +5 -5
  40. package/packages/dictionaries/src/lib/DiskCache.ts +2 -4
  41. package/packages/dictionaries/src/lib/LayeredCache.ts +17 -8
  42. package/packages/dictionaries/src/lib/index.ts +0 -2
  43. package/packages/logger/build/constants.js +2 -2
  44. package/packages/logger/build/logger.js +4 -4
  45. package/packages/logger/package-lock.json +2 -2
  46. package/packages/logger/package.json +1 -1
  47. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  48. package/packages/scrabble-solver/.next/build-manifest.json +10 -10
  49. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  50. package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
  51. package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
  52. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  53. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  54. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  55. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  56. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  57. package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
  58. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  59. package/packages/scrabble-solver/.next/server/chunks/206.js +98 -97
  60. package/packages/scrabble-solver/.next/server/chunks/413.js +396 -677
  61. package/packages/scrabble-solver/.next/server/chunks/515.js +546 -550
  62. package/packages/scrabble-solver/.next/server/chunks/907.js +399 -681
  63. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  64. package/packages/scrabble-solver/.next/server/pages/404.html +5 -1
  65. package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
  66. package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
  67. package/packages/scrabble-solver/.next/server/pages/_app.js +7 -10
  68. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  69. package/packages/scrabble-solver/.next/server/pages/_document.js +0 -3
  70. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  71. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +114 -171
  72. package/packages/scrabble-solver/.next/server/pages/api/solve.js +426 -1206
  73. package/packages/scrabble-solver/.next/server/pages/index.html +17 -1
  74. package/packages/scrabble-solver/.next/server/pages/index.js +7 -14
  75. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  76. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  77. package/packages/scrabble-solver/.next/static/-UOLkxdxU0PlKbXa09-xO/_buildManifest.js +1 -0
  78. package/packages/scrabble-solver/.next/static/{nXSSCVI5pGlS_NxEidxkS → -UOLkxdxU0PlKbXa09-xO}/_ssgManifest.js +0 -0
  79. package/packages/scrabble-solver/.next/static/chunks/56-2d34867599a0ac66.js +1 -0
  80. package/packages/scrabble-solver/.next/static/chunks/pages/{404-02d949d2fe59e960.js → 404-30c06e61d256c5b2.js} +1 -1
  81. package/packages/scrabble-solver/.next/static/chunks/pages/_app-6ffa2ab900772b67.js +1 -0
  82. package/packages/scrabble-solver/.next/static/chunks/pages/{index-75517525489ab316.js → index-13ea7770a65c69ee.js} +1 -1
  83. package/packages/scrabble-solver/.next/static/css/{d676d43c6b9c9a57.css → 551d09cac435debb.css} +1 -1
  84. package/packages/scrabble-solver/.next/static/css/{6a9e5ba3f77c27f2.css → cdbc9e0afcff5473.css} +1 -1
  85. package/packages/scrabble-solver/.next/trace +42 -42
  86. package/packages/scrabble-solver/package-lock.json +85 -85
  87. package/packages/scrabble-solver/package.json +13 -13
  88. package/packages/scrabble-solver/src/components/Board/Board.tsx +1 -1
  89. package/packages/scrabble-solver/src/components/Board/BoardPure.tsx +1 -1
  90. package/packages/scrabble-solver/src/components/Board/components/Cell/Button.tsx +1 -1
  91. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.tsx +1 -1
  92. package/packages/scrabble-solver/src/components/Board/components/Cell/CellPure.tsx +1 -1
  93. package/packages/scrabble-solver/src/components/Board/hooks/useGrid.ts +9 -0
  94. package/packages/scrabble-solver/src/components/Button/Button.tsx +1 -1
  95. package/packages/scrabble-solver/src/components/Checkbox/Checkbox.tsx +1 -1
  96. package/packages/scrabble-solver/src/components/Dictionary/Dictionary.tsx +1 -1
  97. package/packages/scrabble-solver/src/components/DictionaryInput/DictionaryInput.tsx +1 -1
  98. package/packages/scrabble-solver/src/components/EmptyState/EmptyState.tsx +1 -1
  99. package/packages/scrabble-solver/src/components/Key/Key.tsx +1 -1
  100. package/packages/scrabble-solver/src/components/KeyMap/KeyMap.tsx +2 -2
  101. package/packages/scrabble-solver/src/components/KeyMap/components/Mapping/Mapping.module.scss +4 -0
  102. package/packages/scrabble-solver/src/components/KeyMap/components/Mapping/Mapping.tsx +16 -12
  103. package/packages/scrabble-solver/src/components/Loading/Loading.tsx +1 -1
  104. package/packages/scrabble-solver/src/components/Logo/Logo.tsx +1 -1
  105. package/packages/scrabble-solver/src/components/NavButtons/NavButtons.tsx +1 -1
  106. package/packages/scrabble-solver/src/components/NotFound/NotFound.tsx +1 -1
  107. package/packages/scrabble-solver/src/components/PlainTiles/PlainTiles.tsx +5 -1
  108. package/packages/scrabble-solver/src/components/PlainTiles/Tile.tsx +1 -1
  109. package/packages/scrabble-solver/src/components/Rack/Rack.tsx +1 -1
  110. package/packages/scrabble-solver/src/components/Rack/RackTile.tsx +1 -1
  111. package/packages/scrabble-solver/src/components/Radio/Radio.tsx +1 -1
  112. package/packages/scrabble-solver/src/components/RemainingTiles/Character.tsx +1 -1
  113. package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.tsx +1 -1
  114. package/packages/scrabble-solver/src/components/Results/Cell.tsx +1 -1
  115. package/packages/scrabble-solver/src/components/Results/HeaderButton.tsx +1 -1
  116. package/packages/scrabble-solver/src/components/Results/Result.tsx +1 -1
  117. package/packages/scrabble-solver/src/components/Results/Results.tsx +1 -1
  118. package/packages/scrabble-solver/src/components/Results/SolveButton.tsx +1 -1
  119. package/packages/scrabble-solver/src/components/ResultsInput/ResultsInput.tsx +1 -1
  120. package/packages/scrabble-solver/src/components/Screen/Screen.tsx +1 -1
  121. package/packages/scrabble-solver/src/components/Settings/Settings.tsx +1 -1
  122. package/packages/scrabble-solver/src/components/Settings/components/AutoGroupTilesSetting/AutoGroupTilesSetting.tsx +1 -1
  123. package/packages/scrabble-solver/src/components/Settings/components/ConfigSetting/ConfigSetting.tsx +1 -1
  124. package/packages/scrabble-solver/src/components/Settings/components/LocaleSetting/LocaleSetting.tsx +1 -1
  125. package/packages/scrabble-solver/src/components/Sidebar/Sidebar.tsx +1 -1
  126. package/packages/scrabble-solver/src/components/Sidebar/components/Section/Section.tsx +1 -1
  127. package/packages/scrabble-solver/src/components/Splash/Splash.tsx +1 -1
  128. package/packages/scrabble-solver/src/components/SquareButton/Link.tsx +1 -1
  129. package/packages/scrabble-solver/src/components/SquareButton/SquareButton.tsx +1 -1
  130. package/packages/scrabble-solver/src/components/SvgFontCss/SvgFontCss.tsx +12 -0
  131. package/packages/scrabble-solver/src/components/SvgFontCss/index.ts +1 -0
  132. package/packages/scrabble-solver/src/components/Tile/Tile.tsx +1 -1
  133. package/packages/scrabble-solver/src/components/Tile/TilePure.tsx +2 -2
  134. package/packages/scrabble-solver/src/components/Tooltip/useTooltip.tsx +1 -1
  135. package/packages/scrabble-solver/src/components/Well/Well.tsx +1 -1
  136. package/packages/scrabble-solver/src/components/index.ts +1 -0
  137. package/packages/scrabble-solver/src/hooks/usePortal.tsx +19 -9
  138. package/packages/scrabble-solver/src/lib/createKeyboardNavigation.ts +3 -0
  139. package/packages/scrabble-solver/src/lib/memoize.ts +1 -1
  140. package/packages/scrabble-solver/src/pages/_app.tsx +1 -1
  141. package/packages/scrabble-solver/src/pages/_document.tsx +1 -1
  142. package/packages/scrabble-solver/src/pages/index.tsx +6 -15
  143. package/packages/scrabble-solver/src/styles/global.scss +3 -0
  144. package/packages/solver/build/PatternsFiller.js +38 -72
  145. package/packages/solver/build/PatternsGenerator.js +43 -72
  146. package/packages/solver/build/ScoresCalculator.js +20 -24
  147. package/packages/solver/build/Solver.js +19 -24
  148. package/packages/solver/package-lock.json +17 -17
  149. package/packages/solver/package.json +7 -7
  150. package/packages/solver/src/PatternsFiller.ts +5 -10
  151. package/packages/solver/src/PatternsGenerator.ts +17 -16
  152. package/packages/solver/src/Solver.ts +4 -8
  153. package/packages/types/build/Board.js +68 -85
  154. package/packages/types/build/Bonus.js +15 -21
  155. package/packages/types/build/Cell.js +31 -33
  156. package/packages/types/build/CharacterBonus.js +18 -40
  157. package/packages/types/build/Config.js +62 -117
  158. package/packages/types/build/HorizontalPattern.js +17 -63
  159. package/packages/types/build/Pattern.js +37 -41
  160. package/packages/types/build/Result.js +23 -46
  161. package/packages/types/build/Tile.js +22 -24
  162. package/packages/types/build/VerticalPattern.js +17 -63
  163. package/packages/types/build/WordBonus.js +13 -35
  164. package/packages/types/build/WordDefinition.js +13 -15
  165. package/packages/types/package.json +2 -2
  166. package/packages/types/src/Cell.ts +1 -1
  167. package/packages/types/src/Pattern.ts +1 -1
  168. package/packages/word-definitions/build/crawl/crawl.js +15 -16
  169. package/packages/word-definitions/build/crawl/crawlEnglish.js +3 -3
  170. package/packages/word-definitions/build/crawl/crawlFrench.js +3 -3
  171. package/packages/word-definitions/build/crawl/crawlGerman.js +3 -3
  172. package/packages/word-definitions/build/crawl/crawlPolish.js +3 -3
  173. package/packages/word-definitions/build/crawl/crawlSpanish.js +3 -3
  174. package/packages/word-definitions/build/getWordDefinition.js +9 -52
  175. package/packages/word-definitions/build/lib/normalizeDefinition.js +15 -15
  176. package/packages/word-definitions/build/lib/request.js +8 -20
  177. package/packages/word-definitions/build/lib/unique.js +1 -1
  178. package/packages/word-definitions/build/parse/parse.js +18 -19
  179. package/packages/word-definitions/build/parse/parseEnglish.js +5 -5
  180. package/packages/word-definitions/build/parse/parseFrench.js +5 -5
  181. package/packages/word-definitions/build/parse/parseGerman.js +6 -6
  182. package/packages/word-definitions/build/parse/parsePolish.js +6 -6
  183. package/packages/word-definitions/build/parse/parseSpanish.js +9 -9
  184. package/packages/word-definitions/package-lock.json +8 -8
  185. package/packages/word-definitions/package.json +2 -2
  186. package/packages/word-lists/build/getDeDeWordList.js +5 -43
  187. package/packages/word-lists/build/getEnGbWordList.js +5 -43
  188. package/packages/word-lists/build/getEnUsWordList.js +5 -43
  189. package/packages/word-lists/build/getEsEsWordList.js +7 -50
  190. package/packages/word-lists/build/getFrFrWordList.js +9 -50
  191. package/packages/word-lists/build/getPlPlWordList.js +33 -91
  192. package/packages/word-lists/build/getWordList.js +16 -17
  193. package/packages/word-lists/build/lib/downloadFile.d.ts +1 -2
  194. package/packages/word-lists/build/lib/downloadFile.js +28 -10
  195. package/packages/word-lists/build/lib/downloadHtml.js +8 -8
  196. package/packages/word-lists/build/lib/extractWords.js +5 -5
  197. package/packages/word-lists/build/lib/findFirstWordIndex.js +6 -6
  198. package/packages/word-lists/build/lib/getHash.js +2 -5
  199. package/packages/word-lists/build/lib/getTempFilename.js +3 -3
  200. package/packages/word-lists/build/lib/getTxtWordList.js +10 -56
  201. package/packages/word-lists/package-lock.json +2 -2
  202. package/packages/word-lists/package.json +2 -2
  203. package/packages/word-lists/src/getFrFrWordList.ts +1 -0
  204. package/packages/word-lists/src/getPlPlWordList.ts +2 -3
  205. package/packages/word-lists/src/lib/downloadFile.ts +25 -7
  206. package/packages/word-lists/src/lib/getTxtWordList.ts +2 -4
  207. package/tsconfig.json +1 -1
  208. package/packages/dictionaries/build/lib/readFile.d.ts +0 -2
  209. package/packages/dictionaries/build/lib/readFile.js +0 -57
  210. package/packages/dictionaries/build/lib/writeFile.d.ts +0 -2
  211. package/packages/dictionaries/build/lib/writeFile.js +0 -57
  212. package/packages/dictionaries/src/lib/readFile.ts +0 -15
  213. package/packages/dictionaries/src/lib/writeFile.ts +0 -15
  214. package/packages/scrabble-solver/.next/static/chunks/195-fcadef5c6eed8338.js +0 -1
  215. package/packages/scrabble-solver/.next/static/chunks/pages/_app-f4030148d742bcd2.js +0 -1
  216. package/packages/scrabble-solver/.next/static/nXSSCVI5pGlS_NxEidxkS/_buildManifest.js +0 -1
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/scrabble-solver",
3
- "version": "2.8.2",
3
+ "version": "2.8.4",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/scrabble-solver",
9
- "version": "2.8.2",
9
+ "version": "2.8.4",
10
10
  "license": "CC BY-NC-ND 4.0",
11
11
  "dependencies": {
12
12
  "@popperjs/core": "^2.11.6",
@@ -19,7 +19,7 @@
19
19
  "react-modal": "^3.15.1",
20
20
  "react-popper": "^2.3.0",
21
21
  "react-portal": "^4.2.2",
22
- "react-redux": "^8.0.2",
22
+ "react-redux": "^8.0.4",
23
23
  "react-use": "^17.4.0",
24
24
  "react-window": "^1.8.7",
25
25
  "redux": "^4.2.0",
@@ -28,9 +28,9 @@
28
28
  "uuid": "^9.0.0"
29
29
  },
30
30
  "devDependencies": {
31
- "@svgr/webpack": "^6.3.1",
31
+ "@svgr/webpack": "^6.4.0",
32
32
  "@types/classnames": "^2.3.0",
33
- "@types/react": "^18.0.20",
33
+ "@types/react": "^18.0.21",
34
34
  "@types/react-dom": "^18.0.6",
35
35
  "@types/react-modal": "^3.13.1",
36
36
  "@types/react-portal": "^4.0.4",
@@ -40,10 +40,10 @@
40
40
  "@types/redux-saga": "^0.10.5",
41
41
  "@types/uuid": "^8.3.4",
42
42
  "env-cmd": "^10.1.0",
43
- "sass": "^1.54.9"
43
+ "sass": "^1.55.0"
44
44
  },
45
45
  "engines": {
46
- "node": ">=16.0.0"
46
+ "node": ">=16"
47
47
  }
48
48
  },
49
49
  "node_modules/@ampproject/remapping": {
@@ -2345,9 +2345,9 @@
2345
2345
  }
2346
2346
  },
2347
2347
  "node_modules/@svgr/babel-preset": {
2348
- "version": "6.3.1",
2349
- "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz",
2350
- "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==",
2348
+ "version": "6.4.0",
2349
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.4.0.tgz",
2350
+ "integrity": "sha512-Ytuh7N282fv2Cy1JePf6HZ29/G5Hb8mQAjx4iykPjvfFl9NK6o5lZavmewgjOGT8kNPtwgvheuOQn4CifHRUhQ==",
2351
2351
  "dev": true,
2352
2352
  "dependencies": {
2353
2353
  "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1",
@@ -2371,12 +2371,13 @@
2371
2371
  }
2372
2372
  },
2373
2373
  "node_modules/@svgr/core": {
2374
- "version": "6.3.1",
2375
- "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz",
2376
- "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==",
2374
+ "version": "6.4.0",
2375
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.4.0.tgz",
2376
+ "integrity": "sha512-wU9uyF6BUnwAqG7fDOowmDQzmbvovj1uq/iETfMK9xwQNaT+e7yN7SmDDcETXC72dnOrMcRuEWw0JEvpJha+yg==",
2377
2377
  "dev": true,
2378
2378
  "dependencies": {
2379
- "@svgr/plugin-jsx": "^6.3.1",
2379
+ "@svgr/babel-preset": "^6.4.0",
2380
+ "@svgr/plugin-jsx": "^6.4.0",
2380
2381
  "camelcase": "^6.2.0",
2381
2382
  "cosmiconfig": "^7.0.1"
2382
2383
  },
@@ -2389,9 +2390,9 @@
2389
2390
  }
2390
2391
  },
2391
2392
  "node_modules/@svgr/hast-util-to-babel-ast": {
2392
- "version": "6.3.1",
2393
- "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz",
2394
- "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==",
2393
+ "version": "6.4.0",
2394
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.4.0.tgz",
2395
+ "integrity": "sha512-PjcU8jCneKXJnrREycsgfgQ/bzR1ogSKC5MBeUu2wmEoJIjzXX7X14DDktUjU9bkBy26yMDiVHn46Nl82P3WEg==",
2395
2396
  "dev": true,
2396
2397
  "dependencies": {
2397
2398
  "@babel/types": "^7.18.4",
@@ -2405,27 +2406,15 @@
2405
2406
  "url": "https://github.com/sponsors/gregberge"
2406
2407
  }
2407
2408
  },
2408
- "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": {
2409
- "version": "4.4.0",
2410
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
2411
- "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
2412
- "dev": true,
2413
- "engines": {
2414
- "node": ">=0.12"
2415
- },
2416
- "funding": {
2417
- "url": "https://github.com/fb55/entities?sponsor=1"
2418
- }
2419
- },
2420
2409
  "node_modules/@svgr/plugin-jsx": {
2421
- "version": "6.3.1",
2422
- "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz",
2423
- "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==",
2410
+ "version": "6.4.0",
2411
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.4.0.tgz",
2412
+ "integrity": "sha512-gu6E7v8qRAtCxbymI1et3G7athogvKvzsJkSWiHVZsuVZbyx5O2b7+DIkKvAGh2RvEzgSvfGf8QD1BaHal2vBw==",
2424
2413
  "dev": true,
2425
2414
  "dependencies": {
2426
2415
  "@babel/core": "^7.18.5",
2427
- "@svgr/babel-preset": "^6.3.1",
2428
- "@svgr/hast-util-to-babel-ast": "^6.3.1",
2416
+ "@svgr/babel-preset": "^6.4.0",
2417
+ "@svgr/hast-util-to-babel-ast": "^6.4.0",
2429
2418
  "svg-parser": "^2.0.4"
2430
2419
  },
2431
2420
  "engines": {
@@ -2470,9 +2459,9 @@
2470
2459
  }
2471
2460
  },
2472
2461
  "node_modules/@svgr/webpack": {
2473
- "version": "6.3.1",
2474
- "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.3.1.tgz",
2475
- "integrity": "sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A==",
2462
+ "version": "6.4.0",
2463
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.4.0.tgz",
2464
+ "integrity": "sha512-ejt2JdVX6k0XzUjVObMcTzTgsaCadEVCHBvOt3J0Vcp3eFirf0nqsjQCUD+ogFep25+ICDMZa1nLlotbXxKDXw==",
2476
2465
  "dev": true,
2477
2466
  "dependencies": {
2478
2467
  "@babel/core": "^7.18.5",
@@ -2480,8 +2469,8 @@
2480
2469
  "@babel/preset-env": "^7.18.2",
2481
2470
  "@babel/preset-react": "^7.17.12",
2482
2471
  "@babel/preset-typescript": "^7.17.12",
2483
- "@svgr/core": "^6.3.1",
2484
- "@svgr/plugin-jsx": "^6.3.1",
2472
+ "@svgr/core": "^6.4.0",
2473
+ "@svgr/plugin-jsx": "^6.4.0",
2485
2474
  "@svgr/plugin-svgo": "^6.3.1"
2486
2475
  },
2487
2476
  "engines": {
@@ -2545,9 +2534,9 @@
2545
2534
  "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
2546
2535
  },
2547
2536
  "node_modules/@types/react": {
2548
- "version": "18.0.20",
2549
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.20.tgz",
2550
- "integrity": "sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA==",
2537
+ "version": "18.0.21",
2538
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz",
2539
+ "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==",
2551
2540
  "dependencies": {
2552
2541
  "@types/prop-types": "*",
2553
2542
  "@types/scheduler": "*",
@@ -3018,6 +3007,18 @@
3018
3007
  "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==",
3019
3008
  "dev": true
3020
3009
  },
3010
+ "node_modules/entities": {
3011
+ "version": "4.4.0",
3012
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
3013
+ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
3014
+ "dev": true,
3015
+ "engines": {
3016
+ "node": ">=0.12"
3017
+ },
3018
+ "funding": {
3019
+ "url": "https://github.com/fb55/entities?sponsor=1"
3020
+ }
3021
+ },
3021
3022
  "node_modules/env-cmd": {
3022
3023
  "version": "10.1.0",
3023
3024
  "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz",
@@ -3733,9 +3734,9 @@
3733
3734
  }
3734
3735
  },
3735
3736
  "node_modules/react-redux": {
3736
- "version": "8.0.2",
3737
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz",
3738
- "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==",
3737
+ "version": "8.0.4",
3738
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.4.tgz",
3739
+ "integrity": "sha512-yMfQ7mX6bWuicz2fids6cR1YT59VTuT8MKyyE310wJQlINKENCeT1UcPdEiX6znI5tF8zXyJ/VYvDgeGuaaNwQ==",
3739
3740
  "dependencies": {
3740
3741
  "@babel/runtime": "^7.12.1",
3741
3742
  "@types/hoist-non-react-statics": "^3.3.1",
@@ -3993,9 +3994,9 @@
3993
3994
  }
3994
3995
  },
3995
3996
  "node_modules/sass": {
3996
- "version": "1.54.9",
3997
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.9.tgz",
3998
- "integrity": "sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==",
3997
+ "version": "1.55.0",
3998
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz",
3999
+ "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
3999
4000
  "devOptional": true,
4000
4001
  "dependencies": {
4001
4002
  "chokidar": ">=3.0.0 <4.0.0",
@@ -6005,9 +6006,9 @@
6005
6006
  "requires": {}
6006
6007
  },
6007
6008
  "@svgr/babel-preset": {
6008
- "version": "6.3.1",
6009
- "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz",
6010
- "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==",
6009
+ "version": "6.4.0",
6010
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.4.0.tgz",
6011
+ "integrity": "sha512-Ytuh7N282fv2Cy1JePf6HZ29/G5Hb8mQAjx4iykPjvfFl9NK6o5lZavmewgjOGT8kNPtwgvheuOQn4CifHRUhQ==",
6011
6012
  "dev": true,
6012
6013
  "requires": {
6013
6014
  "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1",
@@ -6021,43 +6022,36 @@
6021
6022
  }
6022
6023
  },
6023
6024
  "@svgr/core": {
6024
- "version": "6.3.1",
6025
- "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz",
6026
- "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==",
6025
+ "version": "6.4.0",
6026
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.4.0.tgz",
6027
+ "integrity": "sha512-wU9uyF6BUnwAqG7fDOowmDQzmbvovj1uq/iETfMK9xwQNaT+e7yN7SmDDcETXC72dnOrMcRuEWw0JEvpJha+yg==",
6027
6028
  "dev": true,
6028
6029
  "requires": {
6029
- "@svgr/plugin-jsx": "^6.3.1",
6030
+ "@svgr/babel-preset": "^6.4.0",
6031
+ "@svgr/plugin-jsx": "^6.4.0",
6030
6032
  "camelcase": "^6.2.0",
6031
6033
  "cosmiconfig": "^7.0.1"
6032
6034
  }
6033
6035
  },
6034
6036
  "@svgr/hast-util-to-babel-ast": {
6035
- "version": "6.3.1",
6036
- "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz",
6037
- "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==",
6037
+ "version": "6.4.0",
6038
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.4.0.tgz",
6039
+ "integrity": "sha512-PjcU8jCneKXJnrREycsgfgQ/bzR1ogSKC5MBeUu2wmEoJIjzXX7X14DDktUjU9bkBy26yMDiVHn46Nl82P3WEg==",
6038
6040
  "dev": true,
6039
6041
  "requires": {
6040
6042
  "@babel/types": "^7.18.4",
6041
6043
  "entities": "^4.3.0"
6042
- },
6043
- "dependencies": {
6044
- "entities": {
6045
- "version": "4.4.0",
6046
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
6047
- "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
6048
- "dev": true
6049
- }
6050
6044
  }
6051
6045
  },
6052
6046
  "@svgr/plugin-jsx": {
6053
- "version": "6.3.1",
6054
- "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz",
6055
- "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==",
6047
+ "version": "6.4.0",
6048
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.4.0.tgz",
6049
+ "integrity": "sha512-gu6E7v8qRAtCxbymI1et3G7athogvKvzsJkSWiHVZsuVZbyx5O2b7+DIkKvAGh2RvEzgSvfGf8QD1BaHal2vBw==",
6056
6050
  "dev": true,
6057
6051
  "requires": {
6058
6052
  "@babel/core": "^7.18.5",
6059
- "@svgr/babel-preset": "^6.3.1",
6060
- "@svgr/hast-util-to-babel-ast": "^6.3.1",
6053
+ "@svgr/babel-preset": "^6.4.0",
6054
+ "@svgr/hast-util-to-babel-ast": "^6.4.0",
6061
6055
  "svg-parser": "^2.0.4"
6062
6056
  }
6063
6057
  },
@@ -6081,9 +6075,9 @@
6081
6075
  }
6082
6076
  },
6083
6077
  "@svgr/webpack": {
6084
- "version": "6.3.1",
6085
- "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.3.1.tgz",
6086
- "integrity": "sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A==",
6078
+ "version": "6.4.0",
6079
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.4.0.tgz",
6080
+ "integrity": "sha512-ejt2JdVX6k0XzUjVObMcTzTgsaCadEVCHBvOt3J0Vcp3eFirf0nqsjQCUD+ogFep25+ICDMZa1nLlotbXxKDXw==",
6087
6081
  "dev": true,
6088
6082
  "requires": {
6089
6083
  "@babel/core": "^7.18.5",
@@ -6091,8 +6085,8 @@
6091
6085
  "@babel/preset-env": "^7.18.2",
6092
6086
  "@babel/preset-react": "^7.17.12",
6093
6087
  "@babel/preset-typescript": "^7.17.12",
6094
- "@svgr/core": "^6.3.1",
6095
- "@svgr/plugin-jsx": "^6.3.1",
6088
+ "@svgr/core": "^6.4.0",
6089
+ "@svgr/plugin-jsx": "^6.4.0",
6096
6090
  "@svgr/plugin-svgo": "^6.3.1"
6097
6091
  }
6098
6092
  },
@@ -6145,9 +6139,9 @@
6145
6139
  "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
6146
6140
  },
6147
6141
  "@types/react": {
6148
- "version": "18.0.20",
6149
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.20.tgz",
6150
- "integrity": "sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA==",
6142
+ "version": "18.0.21",
6143
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz",
6144
+ "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==",
6151
6145
  "requires": {
6152
6146
  "@types/prop-types": "*",
6153
6147
  "@types/scheduler": "*",
@@ -6521,6 +6515,12 @@
6521
6515
  "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==",
6522
6516
  "dev": true
6523
6517
  },
6518
+ "entities": {
6519
+ "version": "4.4.0",
6520
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
6521
+ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
6522
+ "dev": true
6523
+ },
6524
6524
  "env-cmd": {
6525
6525
  "version": "10.1.0",
6526
6526
  "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz",
@@ -7042,9 +7042,9 @@
7042
7042
  }
7043
7043
  },
7044
7044
  "react-redux": {
7045
- "version": "8.0.2",
7046
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz",
7047
- "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==",
7045
+ "version": "8.0.4",
7046
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.4.tgz",
7047
+ "integrity": "sha512-yMfQ7mX6bWuicz2fids6cR1YT59VTuT8MKyyE310wJQlINKENCeT1UcPdEiX6znI5tF8zXyJ/VYvDgeGuaaNwQ==",
7048
7048
  "requires": {
7049
7049
  "@babel/runtime": "^7.12.1",
7050
7050
  "@types/hoist-non-react-statics": "^3.3.1",
@@ -7238,9 +7238,9 @@
7238
7238
  }
7239
7239
  },
7240
7240
  "sass": {
7241
- "version": "1.54.9",
7242
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.9.tgz",
7243
- "integrity": "sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==",
7241
+ "version": "1.55.0",
7242
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz",
7243
+ "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
7244
7244
  "devOptional": true,
7245
7245
  "requires": {
7246
7246
  "chokidar": ">=3.0.0 <4.0.0",
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@scrabble-solver/scrabble-solver",
3
- "version": "2.8.2",
3
+ "version": "2.8.4",
4
4
  "description": "Scrabble Solver 2 - App",
5
5
  "engines": {
6
- "node": ">=16.0.0"
6
+ "node": ">=16"
7
7
  },
8
8
  "repository": {
9
9
  "type": "git",
@@ -30,13 +30,13 @@
30
30
  "dependencies": {
31
31
  "@popperjs/core": "^2.11.6",
32
32
  "@reduxjs/toolkit": "^1.8.5",
33
- "@scrabble-solver/configs": "^2.8.2",
34
- "@scrabble-solver/constants": "^2.8.2",
35
- "@scrabble-solver/dictionaries": "^2.8.2",
36
- "@scrabble-solver/logger": "^2.8.2",
37
- "@scrabble-solver/solver": "^2.8.2",
38
- "@scrabble-solver/types": "^2.8.2",
39
- "@scrabble-solver/word-definitions": "^2.8.2",
33
+ "@scrabble-solver/configs": "^2.8.4",
34
+ "@scrabble-solver/constants": "^2.8.4",
35
+ "@scrabble-solver/dictionaries": "^2.8.4",
36
+ "@scrabble-solver/logger": "^2.8.4",
37
+ "@scrabble-solver/solver": "^2.8.4",
38
+ "@scrabble-solver/types": "^2.8.4",
39
+ "@scrabble-solver/word-definitions": "^2.8.4",
40
40
  "classnames": "^2.3.2",
41
41
  "next": "^12.3.1",
42
42
  "normalize.css": "^8.0.1",
@@ -45,7 +45,7 @@
45
45
  "react-modal": "^3.15.1",
46
46
  "react-popper": "^2.3.0",
47
47
  "react-portal": "^4.2.2",
48
- "react-redux": "^8.0.2",
48
+ "react-redux": "^8.0.4",
49
49
  "react-use": "^17.4.0",
50
50
  "react-window": "^1.8.7",
51
51
  "redux": "^4.2.0",
@@ -54,9 +54,9 @@
54
54
  "uuid": "^9.0.0"
55
55
  },
56
56
  "devDependencies": {
57
- "@svgr/webpack": "^6.3.1",
57
+ "@svgr/webpack": "^6.4.0",
58
58
  "@types/classnames": "^2.3.0",
59
- "@types/react": "^18.0.20",
59
+ "@types/react": "^18.0.21",
60
60
  "@types/react-dom": "^18.0.6",
61
61
  "@types/react-modal": "^3.13.1",
62
62
  "@types/react-portal": "^4.0.4",
@@ -66,7 +66,7 @@
66
66
  "@types/redux-saga": "^0.10.5",
67
67
  "@types/uuid": "^8.3.4",
68
68
  "env-cmd": "^10.1.0",
69
- "sass": "^1.54.9"
69
+ "sass": "^1.55.0"
70
70
  },
71
71
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
72
72
  }
@@ -1,4 +1,4 @@
1
- import React, { FunctionComponent, Ref } from 'react';
1
+ import { FunctionComponent, Ref } from 'react';
2
2
 
3
3
  import { selectRowsWithCandidate, useTypedSelector } from 'state';
4
4
 
@@ -1,6 +1,6 @@
1
1
  import { Cell } from '@scrabble-solver/types';
2
2
  import classNames from 'classnames';
3
- import React, { FunctionComponent, KeyboardEventHandler, memo, Ref, RefObject } from 'react';
3
+ import { FunctionComponent, KeyboardEventHandler, memo, Ref, RefObject } from 'react';
4
4
 
5
5
  import styles from './Board.module.scss';
6
6
  import { Cell as CellComponent } from './components';
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { ButtonHTMLAttributes, FunctionComponent, MouseEventHandler, ReactNode } from 'react';
2
+ import { ButtonHTMLAttributes, FunctionComponent, MouseEventHandler, ReactNode } from 'react';
3
3
 
4
4
  import { useTooltip } from '../../../Tooltip';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { EMPTY_CELL } from '@scrabble-solver/constants';
2
2
  import { Cell as CellModel } from '@scrabble-solver/types';
3
- import React, { FunctionComponent, RefObject, useCallback, useMemo } from 'react';
3
+ import { FunctionComponent, RefObject, useCallback, useMemo } from 'react';
4
4
  import { useDispatch } from 'react-redux';
5
5
 
6
6
  import { getTileSizes } from 'lib';
@@ -1,6 +1,6 @@
1
1
  import { Bonus, Cell, Tile as TileModel } from '@scrabble-solver/types';
2
2
  import classNames from 'classnames';
3
- import React, { CSSProperties, FocusEventHandler, FunctionComponent, memo, MouseEventHandler, RefObject } from 'react';
3
+ import { CSSProperties, FocusEventHandler, FunctionComponent, memo, MouseEventHandler, RefObject } from 'react';
4
4
 
5
5
  import { ArrowDown } from 'icons';
6
6
  import { Translate } from 'types';
@@ -214,6 +214,15 @@ const useGrid = (rows: Cell[][]): [State, Actions] => {
214
214
  dispatch(boardSlice.actions.changeCellValue({ ...position, value: character }));
215
215
  onMoveFocus('forward');
216
216
  },
217
+ onSpace: (event) => {
218
+ const position = getInputRefPosition(event.target as HTMLInputElement);
219
+
220
+ if (!position) {
221
+ return;
222
+ }
223
+
224
+ dispatch(boardSlice.actions.toggleCellIsBlank(position));
225
+ },
217
226
  });
218
227
  }, [changeActiveIndex, config, dispatch, lastDirectionRef, onDirectionToggle, rows]);
219
228
 
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { ButtonHTMLAttributes, FunctionComponent, MouseEventHandler, ReactNode, SVGAttributes } from 'react';
2
+ import { ButtonHTMLAttributes, FunctionComponent, MouseEventHandler, ReactNode, SVGAttributes } from 'react';
3
3
 
4
4
  import { useTooltip } from '../Tooltip';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { ChangeEventHandler, FunctionComponent, ReactNode } from 'react';
2
+ import { ChangeEventHandler, FunctionComponent, ReactNode } from 'react';
3
3
 
4
4
  import { CheckboxChecked, CheckboxEmpty } from 'icons';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { FunctionComponent } from 'react';
2
+ import { FunctionComponent } from 'react';
3
3
 
4
4
  import { selectDictionary, useTranslate, useTypedSelector } from 'state';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { ChangeEvent, FormEvent, FunctionComponent } from 'react';
2
+ import { ChangeEvent, FormEvent, FunctionComponent } from 'react';
3
3
  import { useDispatch } from 'react-redux';
4
4
 
5
5
  import { dictionarySlice, selectDictionary, useTranslate, useTypedSelector } from 'state';
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { FunctionComponent, ReactNode, useMemo } from 'react';
2
+ import { FunctionComponent, ReactNode, useMemo } from 'react';
3
3
 
4
4
  import { COLOR_BLUE, COLOR_GREEN, COLOR_RED, COLOR_YELLOW } from 'parameters';
5
5
  import { useTranslate } from 'state';
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { FunctionComponent, ReactNode } from 'react';
2
+ import { FunctionComponent, ReactNode } from 'react';
3
3
 
4
4
  import styles from './Key.module.scss';
5
5
 
@@ -1,4 +1,4 @@
1
- import React, { FunctionComponent } from 'react';
1
+ import { FunctionComponent } from 'react';
2
2
 
3
3
  import { selectConfig, useTranslate, useTypedSelector } from 'state';
4
4
 
@@ -42,7 +42,7 @@ const KeyMap: FunctionComponent<Props> = ({ className, isOpen, onClose }) => {
42
42
  </Sidebar.Section>
43
43
 
44
44
  <Sidebar.Section title={translate('keyMap.board')}>
45
- <Mapping description={translate('keyMap.board.toggle-blank')} mapping={[[CTRL, <Key key="b">B</Key>]]} />
45
+ <Mapping description={translate('keyMap.board.toggle-blank')} mapping={[SPACE, [CTRL, <Key key="b">B</Key>]]} />
46
46
  <Mapping description={translate('keyMap.board.toggle-direction')} mapping={[[CTRL, ARROWS]]} />
47
47
  </Sidebar.Section>
48
48
 
@@ -24,6 +24,10 @@
24
24
  margin: 0 var(--spacing--s);
25
25
  }
26
26
 
27
+ .slash {
28
+ margin: 0 var(--spacing--m);
29
+ }
30
+
27
31
  .group {
28
32
  &:first-child {
29
33
  margin-left: 0;
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { FunctionComponent, ReactNode } from 'react';
2
+ import { Fragment, FunctionComponent, ReactNode } from 'react';
3
3
 
4
4
  import styles from './Mapping.module.scss';
5
5
 
@@ -15,17 +15,21 @@ const Mapping: FunctionComponent<Props> = ({ className, description, mapping })
15
15
 
16
16
  <div className={styles.keys}>
17
17
  {mapping.map((key, index) => (
18
- <div className={styles.group} key={index}>
19
- {Array.isArray(key) ? (
20
- <>
21
- {key[0]}
22
- <span className={styles.plus}>+</span>
23
- {key[1]}
24
- </>
25
- ) : (
26
- key
27
- )}
28
- </div>
18
+ <Fragment key={index}>
19
+ <div className={styles.group}>
20
+ {Array.isArray(key) ? (
21
+ <>
22
+ {key[0]}
23
+ <span className={styles.plus}>+</span>
24
+ {key[1]}
25
+ </>
26
+ ) : (
27
+ key
28
+ )}
29
+ </div>
30
+
31
+ {mapping.length > 1 && index < mapping.length - 1 && <span className={styles.slash}>/</span>}
32
+ </Fragment>
29
33
  ))}
30
34
  </div>
31
35
  </div>
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { FunctionComponent, useMemo } from 'react';
2
+ import { FunctionComponent, useMemo } from 'react';
3
3
 
4
4
  import { useTranslate } from 'state';
5
5
 
@@ -1,4 +1,4 @@
1
- import React, { CSSProperties, FunctionComponent } from 'react';
1
+ import { CSSProperties, FunctionComponent } from 'react';
2
2
 
3
3
  import PlainTiles from '../PlainTiles';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { FunctionComponent } from 'react';
2
+ import { FunctionComponent } from 'react';
3
3
 
4
4
  import { Cog, Eraser, Github, Keyboard, Sack } from 'icons';
5
5
  import { GITHUB_PROJECT_URL } from 'parameters';
@@ -1,5 +1,5 @@
1
1
  import Link from 'next/link';
2
- import React, { FunctionComponent } from 'react';
2
+ import { FunctionComponent } from 'react';
3
3
 
4
4
  import { DashCircleFill } from 'icons';
5
5
 
@@ -1,5 +1,7 @@
1
1
  import classNames from 'classnames';
2
- import React, { CSSProperties, FunctionComponent, useMemo } from 'react';
2
+ import { CSSProperties, FunctionComponent, useMemo } from 'react';
3
+
4
+ import SvgFontCss from '../SvgFontCss';
3
5
 
4
6
  import { createPlainTiles, getViewbox } from './lib';
5
7
  import styles from './PlainTiles.module.scss';
@@ -28,6 +30,8 @@ const PlainTiles: FunctionComponent<Props> = ({ className, color, content, dropS
28
30
  viewBox={getViewbox(content)}
29
31
  xmlns="http://www.w3.org/2000/svg"
30
32
  >
33
+ <SvgFontCss />
34
+
31
35
  {tiles.map((tile, index) => (
32
36
  <Tile
33
37
  character={tile.character}