@scrabble-solver/scrabble-solver 2.11.0 → 2.11.2

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 (137) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +7 -7
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/eslint/.cache_8dgz12 +1 -1
  5. package/.next/cache/next-server.js.nft.json +1 -1
  6. package/.next/cache/webpack/client-production/0.pack +0 -0
  7. package/.next/cache/webpack/client-production/index.pack +0 -0
  8. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  9. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  10. package/.next/cache/webpack/server-production/0.pack +0 -0
  11. package/.next/cache/webpack/server-production/index.pack +0 -0
  12. package/.next/next-server.js.nft.json +1 -1
  13. package/.next/prerender-manifest.json +1 -1
  14. package/.next/routes-manifest.json +1 -1
  15. package/.next/server/chunks/277.js +523 -611
  16. package/.next/server/middleware-build-manifest.js +1 -1
  17. package/.next/server/pages/404.html +2 -2
  18. package/.next/server/pages/404.js.nft.json +1 -1
  19. package/.next/server/pages/500.html +1 -1
  20. package/.next/server/pages/_app.js +0 -24
  21. package/.next/server/pages/_app.js.nft.json +1 -1
  22. package/.next/server/pages/_document.js.nft.json +1 -1
  23. package/.next/server/pages/api/dictionary/[locale]/[word].js +0 -1
  24. package/.next/server/pages/api/dictionary/[locale].js +0 -1
  25. package/.next/server/pages/api/solve.js +28 -8
  26. package/.next/server/pages/api/verify.js +0 -1
  27. package/.next/server/pages/api/visit.js +0 -1
  28. package/.next/server/pages/index.html +1 -1
  29. package/.next/server/pages/index.js +49 -90
  30. package/.next/server/pages/index.js.nft.json +1 -1
  31. package/.next/server/pages/index.json +1 -1
  32. package/.next/static/Mdvi3FY0PqkILKLbPlVBU/_buildManifest.js +1 -0
  33. package/.next/static/chunks/pages/{404-e0f30450e9920dc3.js → 404-448ba28510855455.js} +1 -1
  34. package/.next/static/chunks/pages/_app-495e6f4ccc278bb2.js +28 -0
  35. package/.next/static/chunks/pages/index-5ecc51900ca29685.js +1 -0
  36. package/.next/static/css/17b0a2db8742105f.css +1 -0
  37. package/.next/static/css/e1ffeb2558330c55.css +2 -0
  38. package/.next/trace +54 -55
  39. package/package.json +9 -14
  40. package/src/components/{Solver/components/EmptyState/EmptyState.module.scss → Alert/Alert.module.scss} +11 -7
  41. package/src/components/{Solver/components/EmptyState/EmptyState.tsx → Alert/Alert.tsx} +8 -6
  42. package/src/components/Alert/index.ts +1 -0
  43. package/src/components/Board/Board.module.scss +55 -0
  44. package/src/components/Board/BoardPure.tsx +4 -0
  45. package/src/components/Board/components/Cell/Cell.module.scss +51 -2
  46. package/src/components/Board/components/Cell/Cell.tsx +12 -0
  47. package/src/components/Board/components/Cell/CellPure.tsx +12 -0
  48. package/src/components/Board/hooks/useGrid.ts +9 -26
  49. package/src/components/Board/lib/getPositionInGrid.ts +1 -1
  50. package/src/components/Dictionary/Dictionary.module.scss +4 -0
  51. package/src/components/DictionaryInput/DictionaryInput.module.scss +1 -0
  52. package/src/components/EmptyState/EmptyState.module.scss +2 -1
  53. package/src/components/EmptyState/EmptyState.tsx +1 -2
  54. package/src/components/Loading/Loading.module.scss +1 -1
  55. package/src/components/Logo/Logo.tsx +5 -0
  56. package/src/components/LogoSplashScreen/LogoSplashScreen.module.scss +4 -1
  57. package/src/components/Modal/Modal.module.scss +14 -0
  58. package/src/components/Modal/Modal.tsx +4 -1
  59. package/src/components/PlainTiles/PlainTiles.module.scss +1 -1
  60. package/src/components/PlainTiles/Tile.tsx +3 -3
  61. package/src/components/Rack/Rack.module.scss +25 -0
  62. package/src/components/Rack/Rack.tsx +5 -4
  63. package/src/components/Rack/RackTile.tsx +6 -13
  64. package/src/components/Results/HeaderButton.tsx +5 -12
  65. package/src/components/Results/Result.tsx +5 -3
  66. package/src/components/Results/Results.module.scss +41 -1
  67. package/src/components/Results/Results.tsx +29 -43
  68. package/src/components/Results/types.ts +1 -1
  69. package/src/components/ResultsInput/ResultsInput.module.scss +1 -0
  70. package/src/components/Solver/Solver.module.scss +9 -4
  71. package/src/components/Solver/Solver.tsx +17 -19
  72. package/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.tsx +5 -6
  73. package/src/components/Solver/components/index.ts +0 -1
  74. package/src/components/Tile/Tile.module.scss +42 -61
  75. package/src/components/Tile/Tile.tsx +4 -3
  76. package/src/components/Tile/TilePure.tsx +4 -13
  77. package/src/components/Tooltip/Tooltip.module.scss +1 -72
  78. package/src/components/Tooltip/useTooltip.tsx +25 -35
  79. package/src/components/index.ts +1 -0
  80. package/src/hooks/index.ts +0 -1
  81. package/src/hooks/useAppLayout.ts +3 -1
  82. package/src/i18n/de.json +0 -1
  83. package/src/i18n/en.json +0 -1
  84. package/src/i18n/es.json +0 -1
  85. package/src/i18n/fa.json +0 -1
  86. package/src/i18n/fr.json +0 -1
  87. package/src/i18n/pl.json +0 -1
  88. package/src/lib/createRegExp.ts +13 -0
  89. package/src/lib/groupResults.ts +38 -0
  90. package/src/lib/guessLocale.ts +22 -0
  91. package/src/lib/index.ts +4 -2
  92. package/src/lib/sortResults.ts +6 -10
  93. package/src/modals/DictionaryModal/DictionaryModal.module.scss +6 -2
  94. package/src/modals/KeyMapModal/KeyMapModal.tsx +5 -21
  95. package/src/modals/KeyMapModal/components/Mapping/Mapping.module.scss +4 -0
  96. package/src/modals/MenuModal/MenuModal.module.scss +7 -0
  97. package/src/modals/RemainingTilesModal/components/Character/Character.module.scss +1 -0
  98. package/src/modals/ResultsModal/ResultsModal.module.scss +3 -3
  99. package/src/modals/ResultsModal/ResultsModal.tsx +23 -11
  100. package/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.module.scss +2 -0
  101. package/src/modals/WordsModal/WordsModal.module.scss +8 -1
  102. package/src/pages/api/dictionary/[locale]/[word].ts +0 -1
  103. package/src/pages/api/dictionary/[locale]/index.ts +0 -1
  104. package/src/pages/api/solve.ts +0 -1
  105. package/src/pages/api/verify.ts +0 -1
  106. package/src/pages/api/visit.ts +0 -1
  107. package/src/pages/index.tsx +13 -15
  108. package/src/parameters/index.ts +2 -2
  109. package/src/state/createAppStore.ts +26 -10
  110. package/src/state/sagas.ts +1 -0
  111. package/src/state/selectors.ts +37 -37
  112. package/src/state/slices/boardInitialState.ts +3 -1
  113. package/src/state/slices/cellFilterInitialState.ts +3 -3
  114. package/src/state/slices/cellFilterSlice.ts +3 -1
  115. package/src/state/slices/dictionaryInitialState.ts +2 -2
  116. package/src/state/slices/rackInitialState.ts +3 -1
  117. package/src/state/slices/resultsInitialState.ts +11 -4
  118. package/src/state/slices/settingsInitialState.ts +10 -21
  119. package/src/state/slices/solveInitialState.ts +2 -2
  120. package/src/state/slices/solveSlice.ts +2 -0
  121. package/src/state/slices/verifyInitialState.ts +13 -4
  122. package/src/state/types.ts +20 -2
  123. package/src/styles/mixins.scss +25 -1
  124. package/src/styles/variables.scss +17 -1
  125. package/src/types/index.ts +10 -2
  126. package/.next/static/45ye7793DY705HOcuK9lJ/_buildManifest.js +0 -1
  127. package/.next/static/chunks/pages/_app-d7acee5e526752d9.js +0 -28
  128. package/.next/static/chunks/pages/index-35d2c1c79a201ae2.js +0 -1
  129. package/.next/static/css/a48caa6f57de6e98.css +0 -1
  130. package/.next/static/css/c49bbe944ddd1b39.css +0 -2
  131. package/src/components/Board/types/index.ts +0 -4
  132. package/src/components/Solver/components/EmptyState/index.ts +0 -1
  133. package/src/components/Tooltip/constants.ts +0 -28
  134. package/src/hooks/useUniqueId.ts +0 -9
  135. package/src/lib/isCtrl.ts +0 -7
  136. package/src/state/rootReducer.ts +0 -25
  137. /package/.next/static/{45ye7793DY705HOcuK9lJ → Mdvi3FY0PqkILKLbPlVBU}/_ssgManifest.js +0 -0
@@ -117,7 +117,7 @@ module.exports = require("zlib");
117
117
 
118
118
  /***/ }),
119
119
 
120
- /***/ 11210:
120
+ /***/ 72066:
121
121
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
122
122
 
123
123
  // ESM COMPAT FLAG
@@ -199,7 +199,6 @@ const BREAKPOINTS = {
199
199
  const EASE_OUT_CUBIC = "cubic-bezier(0.33, 1, 0.68, 1)"; // https://easings.net/#easeOutCubic
200
200
  const TRANSITION = "var(--transition)";
201
201
  const GITHUB_PROJECT_URL = "https://github.com/kamilmielnik/scrabble-solver";
202
- const INITIALIZATION_DURATION = 100;
203
202
  const TRANSITION_DURATION = 100;
204
203
  const TRANSITION_DURATION_LONG = 250;
205
204
  const COLOR_BLUE = "#c7d8f9";
@@ -246,6 +245,7 @@ const PROGRESS_COLOR_BACKGROUND = "var(--color--inactive)";
246
245
  const RACK_TILE_SIZE_MAX = 80;
247
246
  const REMAINING_TILES_TILE_SIZE = 50;
248
247
  const RESULTS_ITEM_HEIGHT = 40;
248
+ const SOLVER_COLUMN_WIDTH = 580;
249
249
  const TILE_APPEAR_DURATION = 200;
250
250
  const TILE_APPEAR_KEYFRAMES = [
251
251
  {
@@ -372,6 +372,24 @@ const getTileSizes = (tileSize)=>({
372
372
  });
373
373
  /* harmony default export */ const lib_getTileSizes = ((/* unused pure expression or super */ null && (getTileSizes)));
374
374
 
375
+ ;// CONCATENATED MODULE: ./src/lib/guessLocale.ts
376
+
377
+ const guessLocale = ()=>{
378
+ if (!globalThis.navigator) {
379
+ return Locale.EN_US;
380
+ }
381
+ const locales = Object.values(Locale);
382
+ const exactMatch = locales.find((locale)=>globalThis.navigator.language === locale);
383
+ if (exactMatch) {
384
+ return exactMatch;
385
+ }
386
+ const partialMatch = locales.find((locale)=>{
387
+ return globalThis.navigator.language === locale.substring(0, 2);
388
+ });
389
+ return partialMatch || Locale.EN_US;
390
+ };
391
+ /* harmony default export */ const lib_guessLocale = ((/* unused pure expression or super */ null && (guessLocale)));
392
+
375
393
  ;// CONCATENATED MODULE: ./src/lib/isStringArray.ts
376
394
  const isStringArray = (value)=>{
377
395
  return Array.isArray(value) && value.every((item)=>typeof item === "string");
@@ -435,16 +453,17 @@ const comparators = {
435
453
  [ResultColumn.Word]: (locale)=>lib_createKeyComparator("word", locale),
436
454
  [ResultColumn.WordsCount]: (locale)=>lib_createKeyComparator("wordsCount", locale)
437
455
  };
438
- const sortResults = (results, column, sortDirection, locale)=>{
456
+ const sortResults = (results, sort, locale)=>{
439
457
  if (typeof results === "undefined") {
440
458
  return results;
441
459
  }
442
- const createComparator = comparators[column];
460
+ const createComparator = comparators[sort.column];
443
461
  const comparator = createComparator(locale);
444
- const finalComparator = sortDirection === SortDirection.Descending ? reverseComparator(comparator) : comparator;
445
- return [
462
+ const finalComparator = sort.direction === SortDirection.Descending ? reverseComparator(comparator) : comparator;
463
+ const sortedResults = [
446
464
  ...results
447
465
  ].sort(finalComparator);
466
+ return sortedResults;
448
467
  };
449
468
  /* harmony default export */ const lib_sortResults = ((/* unused pure expression or super */ null && (sortResults)));
450
469
 
@@ -504,6 +523,8 @@ const zipCharactersAndTiles = (characters, tiles)=>{
504
523
 
505
524
 
506
525
 
526
+
527
+
507
528
 
508
529
 
509
530
 
@@ -548,7 +569,6 @@ const solve = async (request, response)=>{
548
569
  error: "Server error",
549
570
  message
550
571
  });
551
- throw error;
552
572
  }
553
573
  };
554
574
  const parseRequest = (request)=>{
@@ -975,7 +995,7 @@ exports["default"] = solve;
975
995
  var __webpack_require__ = require("../../webpack-api-runtime.js");
976
996
  __webpack_require__.C(exports);
977
997
  var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
978
- var __webpack_exports__ = __webpack_require__.X(0, [50,131,417,44,911], () => (__webpack_exec__(11210)));
998
+ var __webpack_exports__ = __webpack_require__.X(0, [50,131,417,44,911], () => (__webpack_exec__(72066)));
979
999
  module.exports = __webpack_exports__;
980
1000
 
981
1001
  })();
@@ -170,7 +170,6 @@ const verify = async (request, response)=>{
170
170
  error: "Server error",
171
171
  message
172
172
  });
173
- throw error;
174
173
  }
175
174
  };
176
175
  const parseRequest = (request)=>{
@@ -111,7 +111,6 @@ const visit = async (request, response)=>{
111
111
  error: "Server error",
112
112
  message
113
113
  });
114
- throw error;
115
114
  }
116
115
  };
117
116
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (visit);
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><title>Scrabble Solver 2 by Kamil Mielnik</title><meta charSet="utf-8"/><meta name="author" content="Kamil Mielnik"/><meta name="description" content="Scrabble Solver 2 - Free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish."/><meta name="keywords" content="Scrabble Solver,Scrabble,Solver,Board,Open-source,Open,Source,Word,Finder,Cheating,Literaki,Word,English,Français,Deutsch,Polski,فارسی,Español,SOWPODS,TWL06,SJP,FISE-2017,FISE-2,CNRTL,Kamil Mielnik"/><meta name="robots" content="index, follow, notranslate, noimageindex"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="Scrabble Solver 2 - Free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish."/><meta property="og:type" content="website"/><meta property="og:url" content="https://scrabble-solver.org"/><meta property="og:image" content="https://scrabble-solver.org/og.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Scrabble Solver 2 - Free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish."/><meta name="next-head-count" content="15"/><link crossorigin="anonymous" href="https://fonts.gstatic.com" rel="preconnect"/><link rel="apple-touch-icon-precomposed" sizes="57x57" href="icons/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon-precomposed" sizes="114x114" href="icons/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon-precomposed" sizes="72x72" href="icons/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon-precomposed" sizes="144x144" href="icons/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon-precomposed" sizes="60x60" href="icons/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon-precomposed" sizes="120x120" href="icons/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon-precomposed" sizes="76x76" href="icons/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon-precomposed" sizes="152x152" href="icons/apple-touch-icon-152x152.png"/><link rel="icon" type="image/png" href="icons/favicon-196x196.png" sizes="196x196"/><link rel="icon" type="image/png" href="icons/favicon-96x96.png" sizes="96x96"/><link rel="icon" type="image/png" href="icons/favicon-32x32.png" sizes="32x32"/><link rel="icon" type="image/png" href="icons/favicon-16x16.png" sizes="16x16"/><link rel="icon" type="image/png" href="icons/favicon-128.png" sizes="128x128"/><meta name="application-name" content="Scrabble Solver"/><meta name="msapplication-TileColor" content="#EFE3AE"/><meta name="msapplication-TileImage" content="icons/mstile-144x144.png"/><meta name="msapplication-square70x70logo" content="icons/mstile-70x70.png"/><meta name="msapplication-square150x150logo" content="icons/mstile-150x150.png"/><meta name="msapplication-wide310x150logo" content="icons/mstile-310x150.png"/><meta name="msapplication-square310x310logo" content="icons/mstile-310x310.png"/><link rel="preload" href="/_next/static/css/c49bbe944ddd1b39.css" as="style"/><link rel="stylesheet" href="/_next/static/css/c49bbe944ddd1b39.css" data-n-g=""/><link rel="preload" href="/_next/static/css/a48caa6f57de6e98.css" as="style"/><link rel="stylesheet" href="/_next/static/css/a48caa6f57de6e98.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-6ef43a8d4a395f49.js" defer=""></script><script src="/_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="/_next/static/chunks/main-0ecb9ccfcb6c9b24.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d7acee5e526752d9.js" defer=""></script><script src="/_next/static/chunks/pages/index-35d2c1c79a201ae2.js" defer=""></script><script src="/_next/static/45ye7793DY705HOcuK9lJ/_buildManifest.js" defer=""></script><script src="/_next/static/45ye7793DY705HOcuK9lJ/_ssgManifest.js" defer=""></script></head><body><div id="__next"><p style="color:transparent;pointer-events:none;position:absolute;user-select:none;transform:translateY(-9999px)">Scrabble Solver 2 is a free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish. Source code is available on GitHub - contributions are welcome!</p></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"version":"v2.10.11"},"__N_SSG":true},"page":"/","query":{},"buildId":"45ye7793DY705HOcuK9lJ","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><title>Scrabble Solver 2 by Kamil Mielnik</title><meta charSet="utf-8"/><meta name="author" content="Kamil Mielnik"/><meta name="description" content="Scrabble Solver 2 - Free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish."/><meta name="keywords" content="Scrabble Solver,Scrabble,Solver,Board,Open-source,Open,Source,Word,Finder,Cheating,Literaki,Word,English,Français,Deutsch,Polski,فارسی,Español,SOWPODS,TWL06,SJP,FISE-2017,FISE-2,CNRTL,Kamil Mielnik"/><meta name="robots" content="index, follow, notranslate, noimageindex"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="Scrabble Solver 2 - Free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish."/><meta property="og:type" content="website"/><meta property="og:url" content="https://scrabble-solver.org"/><meta property="og:image" content="https://scrabble-solver.org/og.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Scrabble Solver 2 - Free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish."/><meta name="next-head-count" content="15"/><link crossorigin="anonymous" href="https://fonts.gstatic.com" rel="preconnect"/><link rel="apple-touch-icon-precomposed" sizes="57x57" href="icons/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon-precomposed" sizes="114x114" href="icons/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon-precomposed" sizes="72x72" href="icons/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon-precomposed" sizes="144x144" href="icons/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon-precomposed" sizes="60x60" href="icons/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon-precomposed" sizes="120x120" href="icons/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon-precomposed" sizes="76x76" href="icons/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon-precomposed" sizes="152x152" href="icons/apple-touch-icon-152x152.png"/><link rel="icon" type="image/png" href="icons/favicon-196x196.png" sizes="196x196"/><link rel="icon" type="image/png" href="icons/favicon-96x96.png" sizes="96x96"/><link rel="icon" type="image/png" href="icons/favicon-32x32.png" sizes="32x32"/><link rel="icon" type="image/png" href="icons/favicon-16x16.png" sizes="16x16"/><link rel="icon" type="image/png" href="icons/favicon-128.png" sizes="128x128"/><meta name="application-name" content="Scrabble Solver"/><meta name="msapplication-TileColor" content="#EFE3AE"/><meta name="msapplication-TileImage" content="icons/mstile-144x144.png"/><meta name="msapplication-square70x70logo" content="icons/mstile-70x70.png"/><meta name="msapplication-square150x150logo" content="icons/mstile-150x150.png"/><meta name="msapplication-wide310x150logo" content="icons/mstile-310x150.png"/><meta name="msapplication-square310x310logo" content="icons/mstile-310x310.png"/><link rel="preload" href="/_next/static/css/e1ffeb2558330c55.css" as="style"/><link rel="stylesheet" href="/_next/static/css/e1ffeb2558330c55.css" data-n-g=""/><link rel="preload" href="/_next/static/css/17b0a2db8742105f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/17b0a2db8742105f.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-6ef43a8d4a395f49.js" defer=""></script><script src="/_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="/_next/static/chunks/main-0ecb9ccfcb6c9b24.js" defer=""></script><script src="/_next/static/chunks/pages/_app-495e6f4ccc278bb2.js" defer=""></script><script src="/_next/static/chunks/pages/index-5ecc51900ca29685.js" defer=""></script><script src="/_next/static/Mdvi3FY0PqkILKLbPlVBU/_buildManifest.js" defer=""></script><script src="/_next/static/Mdvi3FY0PqkILKLbPlVBU/_ssgManifest.js" defer=""></script></head><body><div id="__next"><p style="color:transparent;pointer-events:none;position:absolute;user-select:none;transform:translateY(-9999px)">Scrabble Solver 2 is a free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish &amp; Spanish. Source code is available on GitHub - contributions are welcome!</p></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"version":"v2.11.1"},"__N_SSG":true},"page":"/","query":{},"buildId":"Mdvi3FY0PqkILKLbPlVBU","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body></html>
@@ -253,7 +253,6 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([comp
253
253
 
254
254
  const KeyMapModal = ({ className , isOpen , onClose })=>{
255
255
  const translate = (0,state__WEBPACK_IMPORTED_MODULE_2__/* .useTranslate */ .qM)();
256
- const config = (0,state__WEBPACK_IMPORTED_MODULE_2__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_2__/* .selectConfig */ .$o);
257
256
  return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(components__WEBPACK_IMPORTED_MODULE_1__/* .Modal */ .u_, {
258
257
  className: className,
259
258
  isOpen: isOpen,
@@ -281,19 +280,6 @@ const KeyMapModal = ({ className , isOpen , onClose })=>{
281
280
  mapping: [
282
281
  _keys__WEBPACK_IMPORTED_MODULE_4__/* .ENTER */ .K5
283
282
  ]
284
- }),
285
- config.twoCharacterTiles.length > 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components__WEBPACK_IMPORTED_MODULE_3__/* .Mapping */ .v, {
286
- description: translate("keyMap.board-and-rack.insert-two-letter-tile"),
287
- mapping: [
288
- [
289
- _keys__WEBPACK_IMPORTED_MODULE_4__/* .CTRL */ .HF,
290
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
291
- children: config.twoCharacterTiles.map(([firstLetter])=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_1__/* .Key */ .sr, {
292
- children: firstLetter.toUpperCase()
293
- }, firstLetter))
294
- })
295
- ]
296
- ]
297
283
  })
298
284
  ]
299
285
  }),
@@ -303,22 +289,13 @@ const KeyMapModal = ({ className , isOpen , onClose })=>{
303
289
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components__WEBPACK_IMPORTED_MODULE_3__/* .Mapping */ .v, {
304
290
  description: translate("keyMap.board.toggle-blank"),
305
291
  mapping: [
306
- _keys__WEBPACK_IMPORTED_MODULE_4__/* .SPACE */ .L_,
307
- [
308
- _keys__WEBPACK_IMPORTED_MODULE_4__/* .CTRL */ .HF,
309
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_1__/* .Key */ .sr, {
310
- children: "B"
311
- }, "b")
312
- ]
292
+ _keys__WEBPACK_IMPORTED_MODULE_4__/* .SPACE */ .L_
313
293
  ]
314
294
  }),
315
295
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components__WEBPACK_IMPORTED_MODULE_3__/* .Mapping */ .v, {
316
296
  description: translate("keyMap.board.toggle-direction"),
317
297
  mapping: [
318
- [
319
- _keys__WEBPACK_IMPORTED_MODULE_4__/* .CTRL */ .HF,
320
- _keys__WEBPACK_IMPORTED_MODULE_4__/* .ARROWS */ .JY
321
- ]
298
+ _keys__WEBPACK_IMPORTED_MODULE_4__/* .ARROWS */ .JY
322
299
  ]
323
300
  })
324
301
  ]
@@ -435,21 +412,20 @@ __webpack_async_result__();
435
412
  "use strict";
436
413
  __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
437
414
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
438
- /* harmony export */ "HF": () => (/* binding */ CTRL),
439
415
  /* harmony export */ "JY": () => (/* binding */ ARROWS),
440
416
  /* harmony export */ "K5": () => (/* binding */ ENTER),
441
417
  /* harmony export */ "L_": () => (/* binding */ SPACE),
442
418
  /* harmony export */ "ZH": () => (/* binding */ BACKSPACE),
443
419
  /* harmony export */ "fU": () => (/* binding */ DEL)
444
420
  /* harmony export */ });
445
- /* unused harmony exports ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP */
421
+ /* unused harmony exports ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, CTRL */
446
422
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
447
423
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
448
424
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
449
425
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
450
426
  /* harmony import */ var components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(34277);
451
427
  /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(69461);
452
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(86953);
428
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(10129);
453
429
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([components__WEBPACK_IMPORTED_MODULE_2__]);
454
430
  components__WEBPACK_IMPORTED_MODULE_2__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
455
431
 
@@ -820,11 +796,13 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
820
796
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6022);
821
797
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
822
798
  /* harmony import */ var components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(34277);
823
- /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(83067);
824
- /* harmony import */ var _ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(67458);
825
- /* harmony import */ var _ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_5__);
826
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([components__WEBPACK_IMPORTED_MODULE_3__, state__WEBPACK_IMPORTED_MODULE_4__]);
827
- ([components__WEBPACK_IMPORTED_MODULE_3__, state__WEBPACK_IMPORTED_MODULE_4__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
799
+ /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69461);
800
+ /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83067);
801
+ /* harmony import */ var _ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(67458);
802
+ /* harmony import */ var _ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_6__);
803
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([components__WEBPACK_IMPORTED_MODULE_3__, state__WEBPACK_IMPORTED_MODULE_5__]);
804
+ ([components__WEBPACK_IMPORTED_MODULE_3__, state__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
805
+
828
806
 
829
807
 
830
808
 
@@ -833,10 +811,10 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([comp
833
811
 
834
812
  const ResultsModal = ({ className , isOpen , onClose })=>{
835
813
  const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
836
- const translate = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTranslate */ .qM)();
837
- const results = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectSortedFilteredResults */ .dN);
838
- const resultCandidate = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectResultCandidate */ .Xk);
839
- const index = (results || []).findIndex((result)=>result.id === resultCandidate?.id);
814
+ const translate = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTranslate */ .qM)();
815
+ const results = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectResults */ .x5);
816
+ const resultCandidate = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectResultCandidate */ .Xk);
817
+ const index = results ? results.findIndex((result)=>result.id === resultCandidate?.id) : -1;
840
818
  const highlightedIndex = index === -1 ? undefined : index;
841
819
  const callbacks = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>({
842
820
  onClick: (result)=>{
@@ -844,7 +822,7 @@ const ResultsModal = ({ className , isOpen , onClose })=>{
844
822
  if (isSelected) {
845
823
  onClose();
846
824
  } else {
847
- dispatch(state__WEBPACK_IMPORTED_MODULE_4__/* .resultsSlice.actions.changeResultCandidate */ ._C.actions.changeResultCandidate(result));
825
+ dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .resultsSlice.actions.changeResultCandidate */ ._C.actions.changeResultCandidate(result));
848
826
  }
849
827
  }
850
828
  }), [
@@ -854,19 +832,28 @@ const ResultsModal = ({ className , isOpen , onClose })=>{
854
832
  ]);
855
833
  return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_3__/* .Modal */ .u_, {
856
834
  className: className,
835
+ footer: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_3__/* .Button */ .zx, {
836
+ "aria-label": translate("results.insert"),
837
+ disabled: !resultCandidate,
838
+ Icon: icons__WEBPACK_IMPORTED_MODULE_4__/* .Check */ .Jr,
839
+ tooltip: translate("results.insert"),
840
+ variant: "primary",
841
+ onClick: onClose,
842
+ children: translate("results.insert")
843
+ }),
857
844
  isOpen: isOpen,
858
845
  title: translate("results"),
859
846
  onClose: onClose,
860
847
  children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
861
- className: (_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_5___default().content),
848
+ className: (_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_6___default().content),
862
849
  children: [
863
850
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_3__/* .Results */ .u9, {
864
851
  callbacks: callbacks,
865
- className: (_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_5___default().results),
852
+ className: (_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_6___default().results),
866
853
  highlightedIndex: highlightedIndex
867
854
  }),
868
855
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_3__/* .Dictionary */ .Xy, {
869
- className: (_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_5___default().dictionary)
856
+ className: (_ResultsModal_module_scss__WEBPACK_IMPORTED_MODULE_6___default().dictionary)
870
857
  })
871
858
  ]
872
859
  })
@@ -1548,14 +1535,12 @@ __webpack_require__.r(__webpack_exports__);
1548
1535
  /* harmony import */ var hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(75704);
1549
1536
  /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(36743);
1550
1537
  /* harmony import */ var modals__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(13366);
1551
- /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(64534);
1552
- /* harmony import */ var serviceWorkerManager__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(53042);
1553
- /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(83067);
1554
- /* harmony import */ var _index_module_scss__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(66684);
1555
- /* harmony import */ var _index_module_scss__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_index_module_scss__WEBPACK_IMPORTED_MODULE_15__);
1556
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([components__WEBPACK_IMPORTED_MODULE_8__, hooks__WEBPACK_IMPORTED_MODULE_9__, modals__WEBPACK_IMPORTED_MODULE_11__, state__WEBPACK_IMPORTED_MODULE_14__]);
1557
- ([components__WEBPACK_IMPORTED_MODULE_8__, hooks__WEBPACK_IMPORTED_MODULE_9__, modals__WEBPACK_IMPORTED_MODULE_11__, state__WEBPACK_IMPORTED_MODULE_14__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1558
-
1538
+ /* harmony import */ var serviceWorkerManager__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(53042);
1539
+ /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(83067);
1540
+ /* harmony import */ var _index_module_scss__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(66684);
1541
+ /* harmony import */ var _index_module_scss__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_index_module_scss__WEBPACK_IMPORTED_MODULE_14__);
1542
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([components__WEBPACK_IMPORTED_MODULE_8__, hooks__WEBPACK_IMPORTED_MODULE_9__, modals__WEBPACK_IMPORTED_MODULE_11__, state__WEBPACK_IMPORTED_MODULE_13__]);
1543
+ ([components__WEBPACK_IMPORTED_MODULE_8__, hooks__WEBPACK_IMPORTED_MODULE_9__, modals__WEBPACK_IMPORTED_MODULE_11__, state__WEBPACK_IMPORTED_MODULE_13__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1559
1544
 
1560
1545
 
1561
1546
 
@@ -1575,7 +1560,7 @@ react_modal__WEBPACK_IMPORTED_MODULE_5___default().setAppElement("#__next");
1575
1560
  // eslint-disable-next-line max-statements
1576
1561
  const Index = ({ version })=>{
1577
1562
  const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_6__.useDispatch)();
1578
- const locale = (0,state__WEBPACK_IMPORTED_MODULE_14__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_14__/* .selectLocale */ .fN);
1563
+ const locale = (0,state__WEBPACK_IMPORTED_MODULE_13__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_13__/* .selectLocale */ .fN);
1579
1564
  const { showResultsInModal } = (0,hooks__WEBPACK_IMPORTED_MODULE_9__/* .useAppLayout */ .Ft)();
1580
1565
  const [showDictionary, setShowDictionary] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
1581
1566
  const [showKeyMap, setShowKeyMap] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
@@ -1591,17 +1576,15 @@ const Index = ({ version })=>{
1591
1576
  const solverWidth = indexWidth;
1592
1577
  const [isClient, setIsClient] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
1593
1578
  const handleClear = ()=>{
1594
- dispatch((0,state__WEBPACK_IMPORTED_MODULE_14__/* .reset */ .mc)());
1579
+ dispatch((0,state__WEBPACK_IMPORTED_MODULE_13__/* .reset */ .mc)());
1595
1580
  };
1596
1581
  (0,hooks__WEBPACK_IMPORTED_MODULE_9__/* .useDirection */ .gm)(i18n__WEBPACK_IMPORTED_MODULE_10__/* .LOCALE_FEATURES */ .q[locale].direction);
1597
1582
  (0,hooks__WEBPACK_IMPORTED_MODULE_9__/* .useLanguage */ .ZK)(locale);
1598
1583
  (0,hooks__WEBPACK_IMPORTED_MODULE_9__/* .useLocalStorage */ ._)();
1599
1584
  (0,react_use__WEBPACK_IMPORTED_MODULE_7__.useEffectOnce)(()=>{
1600
1585
  setIsClient(true);
1601
- dispatch((0,state__WEBPACK_IMPORTED_MODULE_14__/* .initialize */ .j2)());
1602
- globalThis.setTimeout(()=>{
1603
- setIsInitialized(true);
1604
- }, parameters__WEBPACK_IMPORTED_MODULE_12__/* .INITIALIZATION_DURATION */ .uk);
1586
+ dispatch((0,state__WEBPACK_IMPORTED_MODULE_13__/* .initialize */ .j2)());
1587
+ setIsInitialized(true);
1605
1588
  });
1606
1589
  (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(()=>{
1607
1590
  if (!showResultsInModal) {
@@ -1612,7 +1595,7 @@ const Index = ({ version })=>{
1612
1595
  ]);
1613
1596
  (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(()=>{
1614
1597
  if (true) {
1615
- (0,serviceWorkerManager__WEBPACK_IMPORTED_MODULE_13__/* .registerServiceWorker */ .$)();
1598
+ (0,serviceWorkerManager__WEBPACK_IMPORTED_MODULE_12__/* .registerServiceWorker */ .$)();
1616
1599
  }
1617
1600
  }, []);
1618
1601
  if (!isClient) {
@@ -1622,25 +1605,25 @@ const Index = ({ version })=>{
1622
1605
  children: [
1623
1606
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_8__/* .SvgFontFix */ .uz, {}),
1624
1607
  /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
1625
- className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().index), {
1626
- [(_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().initialized)]: isInitialized
1608
+ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().index), {
1609
+ [(_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().initialized)]: isInitialized
1627
1610
  }),
1628
1611
  ref: indexRef,
1629
1612
  children: [
1630
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
1631
- className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().nav),
1613
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("nav", {
1614
+ className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().nav),
1632
1615
  ref: navRef,
1633
1616
  children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
1634
- className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().navContent),
1617
+ className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().navContent),
1635
1618
  children: [
1636
1619
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
1637
- className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().navLogo),
1620
+ className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().navLogo),
1638
1621
  children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("a", {
1639
- className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().logoContainer),
1622
+ className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().logoContainer),
1640
1623
  href: "/",
1641
1624
  title: version,
1642
1625
  children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_8__/* .Logo */ .TR, {
1643
- className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().logo)
1626
+ className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().logo)
1644
1627
  })
1645
1628
  })
1646
1629
  }),
@@ -1655,8 +1638,8 @@ const Index = ({ version })=>{
1655
1638
  ]
1656
1639
  })
1657
1640
  }),
1658
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_8__/* .Solver */ .ME, {
1659
- className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_15___default().solver),
1641
+ solverHeight > 0 && solverWidth > 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components__WEBPACK_IMPORTED_MODULE_8__/* .Solver */ .ME, {
1642
+ className: (_index_module_scss__WEBPACK_IMPORTED_MODULE_14___default().solver),
1660
1643
  height: solverHeight,
1661
1644
  width: solverWidth,
1662
1645
  onShowResults: ()=>setShowResults(true)
@@ -1880,14 +1863,6 @@ module.exports = require("react-modal");
1880
1863
 
1881
1864
  /***/ }),
1882
1865
 
1883
- /***/ 42932:
1884
- /***/ ((module) => {
1885
-
1886
- "use strict";
1887
- module.exports = require("react-popper");
1888
-
1889
- /***/ }),
1890
-
1891
1866
  /***/ 63938:
1892
1867
  /***/ ((module) => {
1893
1868
 
@@ -1928,14 +1903,6 @@ module.exports = require("react/jsx-runtime");
1928
1903
 
1929
1904
  /***/ }),
1930
1905
 
1931
- /***/ 86695:
1932
- /***/ ((module) => {
1933
-
1934
- "use strict";
1935
- module.exports = require("redux");
1936
-
1937
- /***/ }),
1938
-
1939
1906
  /***/ 56477:
1940
1907
  /***/ ((module) => {
1941
1908
 
@@ -1968,14 +1935,6 @@ module.exports = import("redux-saga");;
1968
1935
 
1969
1936
  /***/ }),
1970
1937
 
1971
- /***/ 46555:
1972
- /***/ ((module) => {
1973
-
1974
- "use strict";
1975
- module.exports = import("uuid");;
1976
-
1977
- /***/ }),
1978
-
1979
1938
  /***/ 57147:
1980
1939
  /***/ ((module) => {
1981
1940