scrabble-solver 2.8.3 → 2.8.5

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 (102) hide show
  1. package/.gitattributes +2 -0
  2. package/HISTORY.md +17 -0
  3. package/README.md +8 -26
  4. package/lerna.json +1 -1
  5. package/package.json +13 -13
  6. package/packages/configs/package.json +3 -3
  7. package/packages/constants/package.json +1 -1
  8. package/packages/dictionaries/build/lib/DiskCache.js +2 -4
  9. package/packages/dictionaries/build/lib/index.d.ts +0 -2
  10. package/packages/dictionaries/build/lib/index.js +1 -5
  11. package/packages/dictionaries/package-lock.json +10 -10
  12. package/packages/dictionaries/package.json +5 -5
  13. package/packages/dictionaries/src/lib/DiskCache.ts +2 -4
  14. package/packages/dictionaries/src/lib/index.ts +0 -2
  15. package/packages/logger/package-lock.json +2 -2
  16. package/packages/logger/package.json +1 -1
  17. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  18. package/packages/scrabble-solver/.next/build-manifest.json +10 -10
  19. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  20. package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
  21. package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
  22. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  23. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  24. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  25. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  26. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  27. package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
  28. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  29. package/packages/scrabble-solver/.next/server/chunks/206.js +98 -97
  30. package/packages/scrabble-solver/.next/server/chunks/413.js +5 -4
  31. package/packages/scrabble-solver/.next/server/chunks/515.js +135 -53
  32. package/packages/scrabble-solver/.next/server/chunks/907.js +2 -2
  33. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  34. package/packages/scrabble-solver/.next/server/pages/404.html +5 -1
  35. package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
  36. package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
  37. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  38. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  39. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +1 -1
  40. package/packages/scrabble-solver/.next/server/pages/api/solve.js +50 -94
  41. package/packages/scrabble-solver/.next/server/pages/index.html +17 -1
  42. package/packages/scrabble-solver/.next/server/pages/index.js +5 -12
  43. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  44. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  45. package/packages/scrabble-solver/.next/static/TzKQ3IntkvaYmHBkWpfoi/_buildManifest.js +1 -0
  46. package/packages/scrabble-solver/.next/static/{OhUvTNKwyrrzmNwKBnpUU → TzKQ3IntkvaYmHBkWpfoi}/_ssgManifest.js +0 -0
  47. package/packages/scrabble-solver/.next/static/chunks/56-2d34867599a0ac66.js +1 -0
  48. package/packages/scrabble-solver/.next/static/chunks/pages/{404-02d949d2fe59e960.js → 404-30c06e61d256c5b2.js} +1 -1
  49. package/packages/scrabble-solver/.next/static/chunks/pages/_app-6ffa2ab900772b67.js +1 -0
  50. package/packages/scrabble-solver/.next/static/chunks/pages/{index-75517525489ab316.js → index-13ea7770a65c69ee.js} +1 -1
  51. package/packages/scrabble-solver/.next/static/css/{d676d43c6b9c9a57.css → 551d09cac435debb.css} +1 -1
  52. package/packages/scrabble-solver/.next/static/css/{6a9e5ba3f77c27f2.css → cdbc9e0afcff5473.css} +1 -1
  53. package/packages/scrabble-solver/.next/trace +42 -42
  54. package/packages/scrabble-solver/package-lock.json +85 -85
  55. package/packages/scrabble-solver/package.json +13 -13
  56. package/packages/scrabble-solver/src/components/Board/hooks/useGrid.ts +9 -0
  57. package/packages/scrabble-solver/src/components/KeyMap/KeyMap.tsx +1 -1
  58. package/packages/scrabble-solver/src/components/KeyMap/components/Mapping/Mapping.module.scss +4 -0
  59. package/packages/scrabble-solver/src/components/KeyMap/components/Mapping/Mapping.tsx +16 -12
  60. package/packages/scrabble-solver/src/components/PlainTiles/PlainTiles.tsx +4 -0
  61. package/packages/scrabble-solver/src/components/SvgFontCss/SvgFontCss.tsx +12 -0
  62. package/packages/scrabble-solver/src/components/SvgFontCss/index.ts +1 -0
  63. package/packages/scrabble-solver/src/components/Tile/TilePure.tsx +1 -1
  64. package/packages/scrabble-solver/src/components/index.ts +1 -0
  65. package/packages/scrabble-solver/src/lib/createKeyboardNavigation.ts +3 -0
  66. package/packages/scrabble-solver/src/pages/index.tsx +5 -14
  67. package/packages/scrabble-solver/src/styles/global.scss +3 -0
  68. package/packages/solver/build/PatternsFiller.js +2 -6
  69. package/packages/solver/build/PatternsGenerator.js +13 -9
  70. package/packages/solver/build/Solver.js +3 -4
  71. package/packages/solver/package-lock.json +17 -17
  72. package/packages/solver/package.json +7 -7
  73. package/packages/solver/src/PatternsFiller.ts +2 -8
  74. package/packages/solver/src/PatternsGenerator.ts +17 -16
  75. package/packages/solver/src/Solver.ts +4 -8
  76. package/packages/types/build/Cell.js +1 -1
  77. package/packages/types/build/Pattern.js +1 -1
  78. package/packages/types/package.json +2 -2
  79. package/packages/types/src/Cell.ts +1 -1
  80. package/packages/types/src/Pattern.ts +1 -1
  81. package/packages/word-definitions/build/crawl/crawlGerman.js +1 -1
  82. package/packages/word-definitions/package-lock.json +8 -8
  83. package/packages/word-definitions/package.json +2 -2
  84. package/packages/word-definitions/src/crawl/crawlGerman.ts +1 -1
  85. package/packages/word-lists/build/getPlPlWordList.js +2 -3
  86. package/packages/word-lists/build/lib/downloadFile.d.ts +1 -2
  87. package/packages/word-lists/build/lib/downloadFile.js +24 -6
  88. package/packages/word-lists/build/lib/getTxtWordList.js +2 -4
  89. package/packages/word-lists/package-lock.json +2 -2
  90. package/packages/word-lists/package.json +2 -2
  91. package/packages/word-lists/src/getPlPlWordList.ts +2 -3
  92. package/packages/word-lists/src/lib/downloadFile.ts +25 -7
  93. package/packages/word-lists/src/lib/getTxtWordList.ts +2 -4
  94. package/packages/dictionaries/build/lib/readFile.d.ts +0 -2
  95. package/packages/dictionaries/build/lib/readFile.js +0 -19
  96. package/packages/dictionaries/build/lib/writeFile.d.ts +0 -2
  97. package/packages/dictionaries/build/lib/writeFile.js +0 -19
  98. package/packages/dictionaries/src/lib/readFile.ts +0 -15
  99. package/packages/dictionaries/src/lib/writeFile.ts +0 -15
  100. package/packages/scrabble-solver/.next/static/OhUvTNKwyrrzmNwKBnpUU/_buildManifest.js +0 -1
  101. package/packages/scrabble-solver/.next/static/chunks/195-4b75c9c697b7b455.js +0 -1
  102. package/packages/scrabble-solver/.next/static/chunks/pages/_app-72522bfb306a8aef.js +0 -1
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/scrabble-solver",
3
- "version": "2.8.3",
3
+ "version": "2.8.5",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/scrabble-solver",
9
- "version": "2.8.3",
9
+ "version": "2.8.5",
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.3",
3
+ "version": "2.8.5",
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.3",
34
- "@scrabble-solver/constants": "^2.8.3",
35
- "@scrabble-solver/dictionaries": "^2.8.3",
36
- "@scrabble-solver/logger": "^2.8.3",
37
- "@scrabble-solver/solver": "^2.8.3",
38
- "@scrabble-solver/types": "^2.8.3",
39
- "@scrabble-solver/word-definitions": "^2.8.3",
33
+ "@scrabble-solver/configs": "^2.8.5",
34
+ "@scrabble-solver/constants": "^2.8.5",
35
+ "@scrabble-solver/dictionaries": "^2.8.5",
36
+ "@scrabble-solver/logger": "^2.8.5",
37
+ "@scrabble-solver/solver": "^2.8.5",
38
+ "@scrabble-solver/types": "^2.8.5",
39
+ "@scrabble-solver/word-definitions": "^2.8.5",
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
  }
@@ -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
 
@@ -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 { 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,6 +1,8 @@
1
1
  import classNames from 'classnames';
2
2
  import { CSSProperties, FunctionComponent, useMemo } from 'react';
3
3
 
4
+ import SvgFontCss from '../SvgFontCss';
5
+
4
6
  import { createPlainTiles, getViewbox } from './lib';
5
7
  import styles from './PlainTiles.module.scss';
6
8
  import Tile from './Tile';
@@ -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}
@@ -0,0 +1,12 @@
1
+ import { FunctionComponent } from 'react';
2
+
3
+ // eslint-disable-next-line max-len
4
+ const CSS = `@import url('https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700&family=Open+Sans:wght@400;700&family=Roboto+Mono&display=swap');
5
+
6
+ text {
7
+ font-family: 'Open Sans';
8
+ }`;
9
+
10
+ const SvgFontCss: FunctionComponent = () => <style type="text/css">{CSS}</style>;
11
+
12
+ export default SvgFontCss;
@@ -0,0 +1 @@
1
+ export { default } from './SvgFontCss';
@@ -66,7 +66,7 @@ const TilePure: FunctionComponent<Props> = ({
66
66
  style={style}
67
67
  >
68
68
  <input
69
- autoCapitalize="off"
69
+ autoCapitalize="none"
70
70
  autoComplete="off"
71
71
  autoCorrect="off"
72
72
  autoFocus={autoFocus}
@@ -21,6 +21,7 @@ export { default as Settings } from './Settings';
21
21
  export { default as Sidebar } from './Sidebar';
22
22
  export { default as Splash } from './Splash';
23
23
  export { default as SquareButton } from './SquareButton';
24
+ export { default as SvgFontCss } from './SvgFontCss';
24
25
  export { default as Tile } from './Tile';
25
26
  export { useTooltip } from './Tooltip';
26
27
  export { default as Well } from './Well';
@@ -11,6 +11,7 @@ interface Parameters {
11
11
  onDelete?: KeyboardEventHandler<HTMLInputElement>;
12
12
  onEnter?: KeyboardEventHandler<HTMLInputElement>;
13
13
  onKeyDown?: KeyboardEventHandler<HTMLInputElement>;
14
+ onSpace?: KeyboardEventHandler<HTMLInputElement>;
14
15
  }
15
16
 
16
17
  const createKeyboardNavigation = ({
@@ -22,6 +23,7 @@ const createKeyboardNavigation = ({
22
23
  onDelete = noop,
23
24
  onEnter = noop,
24
25
  onKeyDown = noop,
26
+ onSpace = noop,
25
27
  }: Parameters): KeyboardEventHandler<HTMLInputElement> => {
26
28
  const handlers: Record<string, KeyboardEventHandler<HTMLInputElement>> = {
27
29
  ArrowUp: onArrowUp,
@@ -31,6 +33,7 @@ const createKeyboardNavigation = ({
31
33
  Backspace: onBackspace,
32
34
  Delete: onDelete,
33
35
  Enter: onEnter,
36
+ ' ': onSpace,
34
37
  };
35
38
 
36
39
  const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {
@@ -134,20 +134,11 @@ export const getStaticProps = async (): Promise<{ props: Props }> => {
134
134
  return { props: { version } };
135
135
  };
136
136
 
137
- const readVersion = (): Promise<string> => {
138
- return new Promise((resolve, reject) => {
139
- const packageJsonFilepath = path.resolve(process.cwd(), 'package.json');
140
-
141
- fs.readFile(packageJsonFilepath, 'utf-8', (error, data) => {
142
- if (error) {
143
- reject(error);
144
- return;
145
- }
146
-
147
- const packageJson = JSON.parse(data);
148
- resolve(packageJson.version);
149
- });
150
- });
137
+ const readVersion = async (): Promise<string> => {
138
+ const packageJsonFilepath = path.resolve(process.cwd(), 'package.json');
139
+ const data = await fs.promises.readFile(packageJsonFilepath, 'utf-8');
140
+ const packageJson = JSON.parse(data);
141
+ return packageJson.version;
151
142
  };
152
143
 
153
144
  export default Index;
@@ -15,6 +15,9 @@ html,
15
15
  body {
16
16
  margin: 0 auto;
17
17
  padding: 0;
18
+ }
19
+
20
+ body {
18
21
  background-color: var(--color--background);
19
22
  color: var(--color--foreground);
20
23
  font-family: var(--font--family);
@@ -16,7 +16,7 @@ class PatternsFiller {
16
16
  const tilesPermutations = this.generateBlankTilesPermutations(tiles);
17
17
  for (let index = 0; index < tilesPermutations.length; ++index) {
18
18
  const tilesPermutation = tilesPermutations[index];
19
- this.fillPattern(pattern, String(pattern), tilesPermutation, onPatternFound);
19
+ this.fillPattern(pattern, pattern.toString(), tilesPermutation, onPatternFound);
20
20
  }
21
21
  return patterns;
22
22
  }
@@ -51,11 +51,7 @@ class PatternsFiller {
51
51
  }
52
52
  }
53
53
  canAddPattern(pattern, word) {
54
- return (this.trie.has(word) &&
55
- pattern
56
- .getCollisions()
57
- .map(String)
58
- .every((collision) => this.trie.has(collision)));
54
+ return this.trie.has(word) && pattern.getCollisions().every((collision) => this.trie.has(collision.toString()));
59
55
  }
60
56
  generateBlankTilesPermutations(tiles) {
61
57
  const { alphabet } = this.config;