@scrabble-solver/scrabble-solver 2.9.3 → 2.10.1

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 (122) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +11 -11
  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/{429.js → 131.js} +2 -3652
  16. package/.next/server/chunks/413.js +399 -199
  17. package/.next/server/chunks/44.js +71 -45
  18. package/.next/server/chunks/515.js +1114 -542
  19. package/.next/server/chunks/911.js +96 -2
  20. package/.next/server/chunks/939.js +1 -0
  21. package/.next/server/middleware-build-manifest.js +1 -1
  22. package/.next/server/pages/404.html +2 -2
  23. package/.next/server/pages/404.js.nft.json +1 -1
  24. package/.next/server/pages/500.html +2 -2
  25. package/.next/server/pages/_app.js.nft.json +1 -1
  26. package/.next/server/pages/api/dictionary/[locale]/[word].js +49 -11
  27. package/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  28. package/.next/server/pages/api/dictionary/[locale].js +1 -8
  29. package/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  30. package/.next/server/pages/api/solve.js +67 -57
  31. package/.next/server/pages/api/solve.js.nft.json +1 -1
  32. package/.next/server/pages/api/verify.js +2 -9
  33. package/.next/server/pages/api/verify.js.nft.json +1 -1
  34. package/.next/server/pages/index.html +9 -1
  35. package/.next/server/pages/index.js +43 -36
  36. package/.next/server/pages/index.js.nft.json +1 -1
  37. package/.next/server/pages/index.json +1 -1
  38. package/.next/server/pages-manifest.json +1 -1
  39. package/.next/static/chunks/368-8b386c3106556f62.js +1 -0
  40. package/.next/static/chunks/pages/{404-8650986dc56dab75.js → 404-932294135c3206dd.js} +1 -1
  41. package/.next/static/chunks/pages/_app-8f0df20f771045ed.js +1 -0
  42. package/.next/static/chunks/pages/index-8af7a9d7a2cd98a7.js +1 -0
  43. package/.next/static/css/6b1833fd19d3a74a.css +1 -0
  44. package/.next/static/css/a6154e4ca046ca13.css +1 -0
  45. package/.next/static/css/bad53af6f8616677.css +1 -0
  46. package/.next/static/hf94cues-LcXZRCpAzQ6w/_buildManifest.js +1 -0
  47. package/.next/static/{s5pE_3C3ebZuSfaqE7xat → hf94cues-LcXZRCpAzQ6w}/_ssgManifest.js +0 -0
  48. package/.next/trace +52 -52
  49. package/package.json +9 -9
  50. package/src/components/Board/components/Cell/Cell.module.scss +45 -9
  51. package/src/components/Board/hooks/useGrid.ts +6 -4
  52. package/src/components/Dictionary/Dictionary.module.scss +8 -1
  53. package/src/components/EmptyState/EmptyState.tsx +6 -2
  54. package/src/components/Loading/Loading.tsx +13 -2
  55. package/src/components/NavButtons/NavButtons.module.scss +8 -7
  56. package/src/components/NavButtons/NavButtons.tsx +35 -28
  57. package/src/components/PlainTiles/PlainTiles.tsx +7 -1
  58. package/src/components/PlainTiles/Tile.tsx +4 -3
  59. package/src/components/Rack/Rack.tsx +18 -4
  60. package/src/components/Radio/Radio.module.scss +1 -1
  61. package/src/components/RemainingTiles/Character.tsx +7 -2
  62. package/src/components/RemainingTiles/RemainingTiles.tsx +28 -20
  63. package/src/components/Results/Cell.tsx +5 -3
  64. package/src/components/Results/Result.tsx +8 -3
  65. package/src/components/Results/Results.module.scss +31 -9
  66. package/src/components/Results/Results.tsx +8 -4
  67. package/src/components/Results/getColumns.ts +58 -0
  68. package/src/components/Settings/components/AutoGroupTilesSetting/AutoGroupTilesSetting.tsx +2 -2
  69. package/src/components/Settings/components/ConfigSetting/ConfigSetting.module.scss +1 -0
  70. package/src/components/Settings/components/LocaleSetting/LocaleSetting.module.scss +12 -1
  71. package/src/components/Settings/components/LocaleSetting/LocaleSetting.tsx +1 -1
  72. package/src/components/Settings/components/LocaleSetting/options.ts +16 -2
  73. package/src/components/Sidebar/Sidebar.module.scss +42 -8
  74. package/src/components/SvgFontCss/SvgFontCss.tsx +8 -7
  75. package/src/components/SvgFontCss/createCss.ts +11 -0
  76. package/src/components/SvgFontCss/createStyle.ts +9 -0
  77. package/src/components/SvgFontCss/createSvg.ts +10 -0
  78. package/src/components/SvgFontFix/SvgFontFix.module.scss +5 -0
  79. package/src/components/SvgFontFix/SvgFontFix.tsx +21 -0
  80. package/src/components/SvgFontFix/index.ts +1 -0
  81. package/src/components/Tile/Tile.module.scss +10 -2
  82. package/src/components/Tile/Tile.tsx +4 -0
  83. package/src/components/Tile/TilePure.tsx +3 -1
  84. package/src/components/Words/Words.tsx +4 -3
  85. package/src/components/index.ts +1 -0
  86. package/src/hooks/index.ts +2 -0
  87. package/src/hooks/useDirection.ts +22 -0
  88. package/src/hooks/useLanguage.ts +22 -0
  89. package/src/i18n/constants.ts +53 -0
  90. package/src/i18n/fa.json +56 -0
  91. package/src/i18n/fr.json +1 -1
  92. package/src/i18n/i18n.ts +22 -0
  93. package/src/i18n/index.ts +2 -20
  94. package/src/icons/FlagFa.svg +95 -0
  95. package/src/icons/index.ts +1 -0
  96. package/src/lib/createComparator.ts +22 -0
  97. package/src/lib/createKeyComparator.ts +4 -2
  98. package/src/lib/createStringComparator.ts +5 -0
  99. package/src/lib/detectLocale.ts +4 -0
  100. package/src/lib/getRemainingTiles.ts +4 -2
  101. package/src/lib/getRemainingTilesGroups.ts +54 -31
  102. package/src/lib/index.ts +2 -2
  103. package/src/lib/sortResults.ts +11 -9
  104. package/src/lib/unorderedArraysEqual.ts +3 -2
  105. package/src/pages/api/verify.ts +1 -1
  106. package/src/pages/index.module.scss +7 -18
  107. package/src/pages/index.tsx +10 -2
  108. package/src/sdk/findWordDefinitions.ts +1 -1
  109. package/src/service-worker/routeVerifyRequests.ts +1 -1
  110. package/src/state/sagas.ts +19 -5
  111. package/src/state/selectors.ts +15 -7
  112. package/src/styles/global.scss +6 -1
  113. package/.next/static/chunks/880-18e3aea6915aebe7.js +0 -1
  114. package/.next/static/chunks/pages/_app-183f598b1d4d480b.js +0 -1
  115. package/.next/static/chunks/pages/index-f1cef1e67e14d022.js +0 -1
  116. package/.next/static/css/751e8a14776d05d8.css +0 -1
  117. package/.next/static/css/ad2a08918868cad8.css +0 -1
  118. package/.next/static/css/e8de67ad5ea35427.css +0 -1
  119. package/.next/static/s5pE_3C3ebZuSfaqE7xat/_buildManifest.js +0 -1
  120. package/src/components/Results/constants.ts +0 -42
  121. package/src/lib/comparator.ts +0 -16
  122. package/src/lib/stringComparator.ts +0 -5
@@ -235,6 +235,7 @@ const literaki = {
235
235
  [types_1.Locale.EN_GB]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesEn }),
236
236
  [types_1.Locale.EN_US]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesEn }),
237
237
  [types_1.Locale.ES_ES]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesEs }),
238
+ [types_1.Locale.FA_IR]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesFa }),
238
239
  [types_1.Locale.FR_FR]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesFr }),
239
240
  [types_1.Locale.PL_PL]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesPl }),
240
241
  };
@@ -251,11 +252,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
251
252
  return (mod && mod.__esModule) ? mod : { "default": mod };
252
253
  };
253
254
  Object.defineProperty(exports, "__esModule", ({ value: true }));
254
- exports.tilesDe = exports.tilesPl = exports.tilesFr = exports.tilesEs = exports.tilesEn = void 0;
255
+ exports.tilesDe = exports.tilesPl = exports.tilesFr = exports.tilesFa = exports.tilesEs = exports.tilesEn = void 0;
255
256
  var tilesEn_1 = __webpack_require__(17910);
256
257
  Object.defineProperty(exports, "tilesEn", ({ enumerable: true, get: function () { return __importDefault(tilesEn_1).default; } }));
257
258
  var tilesEs_1 = __webpack_require__(63029);
258
259
  Object.defineProperty(exports, "tilesEs", ({ enumerable: true, get: function () { return __importDefault(tilesEs_1).default; } }));
260
+ var tilesFa_1 = __webpack_require__(35366);
261
+ Object.defineProperty(exports, "tilesFa", ({ enumerable: true, get: function () { return __importDefault(tilesFa_1).default; } }));
259
262
  var tilesFr_1 = __webpack_require__(59541);
260
263
  Object.defineProperty(exports, "tilesFr", ({ enumerable: true, get: function () { return __importDefault(tilesFr_1).default; } }));
261
264
  var tilesPl_1 = __webpack_require__(2647);
@@ -383,6 +386,50 @@ const tilesEs = [
383
386
  exports["default"] = tilesEs;
384
387
 
385
388
 
389
+ /***/ }),
390
+
391
+ /***/ 35366:
392
+ /***/ ((__unused_webpack_module, exports) => {
393
+
394
+
395
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
396
+ const tilesFa = [
397
+ { character: 'ا', count: 12, score: 1 },
398
+ { character: 'ب', count: 4, score: 1 },
399
+ { character: 'پ', count: 1, score: 6 },
400
+ { character: 'ت', count: 4, score: 1 },
401
+ { character: 'ث', count: 1, score: 10 },
402
+ { character: 'ج', count: 2, score: 5 },
403
+ { character: 'چ', count: 1, score: 6 },
404
+ { character: 'ح', count: 1, score: 6 },
405
+ { character: 'خ', count: 2, score: 5 },
406
+ { character: 'د', count: 6, score: 1 },
407
+ { character: 'ذ', count: 1, score: 10 },
408
+ { character: 'ر', count: 7, score: 1 },
409
+ { character: 'ز', count: 3, score: 4 },
410
+ { character: 'ژ', count: 1, score: 10 },
411
+ { character: 'س', count: 3, score: 2 },
412
+ { character: 'ش', count: 3, score: 3 },
413
+ { character: 'ص', count: 1, score: 6 },
414
+ { character: 'ض', count: 1, score: 8 },
415
+ { character: 'ط', count: 1, score: 8 },
416
+ { character: 'ظ', count: 1, score: 10 },
417
+ { character: 'ع', count: 2, score: 5 },
418
+ { character: 'غ', count: 1, score: 8 },
419
+ { character: 'ف', count: 2, score: 4 },
420
+ { character: 'ق', count: 2, score: 5 },
421
+ { character: 'ک', count: 3, score: 3 },
422
+ { character: 'گ', count: 2, score: 4 },
423
+ { character: 'ل', count: 3, score: 2 },
424
+ { character: 'م', count: 5, score: 1 },
425
+ { character: 'ن', count: 6, score: 1 },
426
+ { character: 'و', count: 5, score: 1 },
427
+ { character: 'ه', count: 5, score: 1 },
428
+ { character: 'ی', count: 8, score: 1 },
429
+ ];
430
+ exports["default"] = tilesFa;
431
+
432
+
386
433
  /***/ }),
387
434
 
388
435
  /***/ 59541:
@@ -585,6 +632,7 @@ const scrabble = {
585
632
  [types_1.Locale.DE_DE]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesDe }),
586
633
  [types_1.Locale.EN_US]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesEn }),
587
634
  [types_1.Locale.ES_ES]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesEs }),
635
+ [types_1.Locale.FA_IR]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesFa }),
588
636
  [types_1.Locale.FR_FR]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesFr }),
589
637
  [types_1.Locale.PL_PL]: types_1.Config.fromJson({ ...base, tiles: tiles_1.tilesPl }),
590
638
  };
@@ -601,11 +649,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
601
649
  return (mod && mod.__esModule) ? mod : { "default": mod };
602
650
  };
603
651
  Object.defineProperty(exports, "__esModule", ({ value: true }));
604
- exports.tilesDe = exports.tilesPl = exports.tilesFr = exports.tilesEs = exports.tilesEn = void 0;
652
+ exports.tilesDe = exports.tilesPl = exports.tilesFr = exports.tilesFa = exports.tilesEs = exports.tilesEn = void 0;
605
653
  var tilesEn_1 = __webpack_require__(76149);
606
654
  Object.defineProperty(exports, "tilesEn", ({ enumerable: true, get: function () { return __importDefault(tilesEn_1).default; } }));
607
655
  var tilesEs_1 = __webpack_require__(14537);
608
656
  Object.defineProperty(exports, "tilesEs", ({ enumerable: true, get: function () { return __importDefault(tilesEs_1).default; } }));
657
+ var tilesFa_1 = __webpack_require__(22878);
658
+ Object.defineProperty(exports, "tilesFa", ({ enumerable: true, get: function () { return __importDefault(tilesFa_1).default; } }));
609
659
  var tilesFr_1 = __webpack_require__(72866);
610
660
  Object.defineProperty(exports, "tilesFr", ({ enumerable: true, get: function () { return __importDefault(tilesFr_1).default; } }));
611
661
  var tilesPl_1 = __webpack_require__(85667);
@@ -733,6 +783,50 @@ const tilesEs = [
733
783
  exports["default"] = tilesEs;
734
784
 
735
785
 
786
+ /***/ }),
787
+
788
+ /***/ 22878:
789
+ /***/ ((__unused_webpack_module, exports) => {
790
+
791
+
792
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
793
+ const tilesFa = [
794
+ { character: 'ا', count: 12, score: 1 },
795
+ { character: 'ب', count: 4, score: 1 },
796
+ { character: 'پ', count: 1, score: 6 },
797
+ { character: 'ت', count: 4, score: 1 },
798
+ { character: 'ث', count: 1, score: 10 },
799
+ { character: 'ج', count: 2, score: 5 },
800
+ { character: 'چ', count: 1, score: 6 },
801
+ { character: 'ح', count: 1, score: 6 },
802
+ { character: 'خ', count: 2, score: 5 },
803
+ { character: 'د', count: 6, score: 1 },
804
+ { character: 'ذ', count: 1, score: 10 },
805
+ { character: 'ر', count: 7, score: 1 },
806
+ { character: 'ز', count: 3, score: 4 },
807
+ { character: 'ژ', count: 1, score: 10 },
808
+ { character: 'س', count: 3, score: 2 },
809
+ { character: 'ش', count: 3, score: 3 },
810
+ { character: 'ص', count: 1, score: 6 },
811
+ { character: 'ض', count: 1, score: 8 },
812
+ { character: 'ط', count: 1, score: 8 },
813
+ { character: 'ظ', count: 1, score: 10 },
814
+ { character: 'ع', count: 2, score: 5 },
815
+ { character: 'غ', count: 1, score: 8 },
816
+ { character: 'ف', count: 2, score: 4 },
817
+ { character: 'ق', count: 2, score: 5 },
818
+ { character: 'ک', count: 3, score: 3 },
819
+ { character: 'گ', count: 2, score: 4 },
820
+ { character: 'ل', count: 3, score: 2 },
821
+ { character: 'م', count: 5, score: 1 },
822
+ { character: 'ن', count: 6, score: 1 },
823
+ { character: 'و', count: 5, score: 1 },
824
+ { character: 'ه', count: 5, score: 1 },
825
+ { character: 'ی', count: 8, score: 1 },
826
+ ];
827
+ exports["default"] = tilesFa;
828
+
829
+
736
830
  /***/ }),
737
831
 
738
832
  /***/ 72866:
@@ -843,6 +937,7 @@ exports.CONSONANTS = [
843
937
  'm',
844
938
  'n',
845
939
  'ń',
940
+ 'ñ',
846
941
  'p',
847
942
  'q',
848
943
  'r',
@@ -861,7 +956,104 @@ exports.VOWELS = ['a', 'ą', 'ä', 'e', 'ę', 'i', 'o', 'ó', 'ö', 'u', 'ü', '
861
956
 
862
957
  /***/ }),
863
958
 
864
- /***/ 75558:
959
+ /***/ 43898:
960
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
961
+
962
+
963
+ // EXPORTS
964
+ __webpack_require__.d(__webpack_exports__, {
965
+ "q": () => (/* reexport */ LOCALE_FEATURES),
966
+ "Z": () => (/* reexport */ i18n_i18n)
967
+ });
968
+
969
+ // EXTERNAL MODULE: ../types/build/index.js
970
+ var build = __webpack_require__(34046);
971
+ ;// CONCATENATED MODULE: ./src/i18n/de.json
972
+ const de_namespaceObject = JSON.parse('{"cell.filter-cell":"Zielort - klicken zum Wechseln","cell.set-blank":"Als Blanko markieren","cell.set-not-blank":"Nicht als Blanko markieren","cell.toggle-direction":"Schreibrichtung - klicken zum Wechseln","common.blanks":"Blankos","common.clear":"Löschen","common.close":"Schließen","common.consonants":"Konsonanten","common.loading":"Laden","common.points":"Punkte","common.tiles":"Steine","common.two-letter-tiles":"Zwei-Buchstaben","common.vowels":"Vokale","common.word":"Wort","common.words":"Wörter","dictionary.empty-state.no-definitions":"Wort existiert im Wörterbuch aber hat keine Definition.","dictionary.empty-state.no-results":"Wort kann nicht im Wörterbuch gefunden werden.","dictionary.empty-state.not-allowed":"Dieses Wort ist nicht erlaubt.","dictionary.empty-state.uninitialized":"Die Wörterbuchdefinition des letzten markierten Wortes wird hier angezeigt.","dictionary.input.placeholder":"Durchsuche Wörterbuch...","empty-state.error":"Fehler","empty-state.info":"Info","empty-state.success":"Juhuu!","empty-state.warning":"Oje!","github":"Schau dieses Projekt auf GitHub an","keyMap":"Tastaturkürzel","keyMap.board":"Brett","keyMap.board.toggle-blank":"Als Blanko markieren / aufheben","keyMap.board.toggle-direction":"Schreibrichtung umschalten","keyMap.board-and-rack":"Brett & Ablage","keyMap.board-and-rack.insert-two-letter-tile":"Zwei-Buchstaben Stein hinzufügen","keyMap.board-and-rack.navigate":"Navigieren","keyMap.board-and-rack.remove-tile":"Stein entfernen","keyMap.board-and-rack.submit":"Lösen starten","keyMap.rack":"Ablage","keyMap.rack.insert-blank":"Blanko hinzufügen (Leertaste)","rack.placeholder":"Steine…","remaining-tiles":"Restliche Steine","results.empty-state.no-filtered-results":"Keine Ergebnisse für diese Anfrage.","results.empty-state.no-results":"Keine Ergebnisse - kein Wort konnte generiert werden.","results.empty-state.outdated":"Ergebnisse sind alt. Klicken zum Aktualisieren.","results.empty-state.uninitialized":"Wörter die aus deinen Buchstaben generiert wurden erscheinen hier.","results.input.placeholder":"Suchergebnisse... (RegExp)","results.solve":"Lösen","settings":"Einstellungen","settings.autoGroupTiles":"Restliche Steine gruppieren","settings.autoGroupTiles.left":"Linke Seite","settings.autoGroupTiles.right":"Rechte Seite","settings.autoGroupTiles.null":"Nicht gruppieren","settings.game":"Spiel","settings.language":"Sprache","words":"Gebildete Wörter","words.invalid":"Falsch","words.valid":"Korrekt"}');
973
+ ;// CONCATENATED MODULE: ./src/i18n/en.json
974
+ const en_namespaceObject = JSON.parse('{"cell.filter-cell":"Target destination - click to toggle","cell.set-blank":"Mark it a blank","cell.set-not-blank":"Mark it not a blank","cell.toggle-direction":"Typing direction - click to toggle","common.blanks":"Blanks","common.clear":"Clear","common.close":"Close","common.consonants":"Consonants","common.loading":"Loading","common.points":"Points","common.tiles":"Tiles","common.two-letter-tiles":"Two-letter","common.vowels":"Vowels","common.word":"Word","common.words":"Words","dictionary.empty-state.no-definitions":"Word exists in the dictionary but it does not have a definition.","dictionary.empty-state.no-results":"Unable to find word definition in the dictionary.","dictionary.empty-state.not-allowed":"This word is not allowed.","dictionary.empty-state.uninitialized":"Dictionary definition of the most recently highlighted word will be shown here.","dictionary.input.placeholder":"Search dictionary...","empty-state.error":"Error","empty-state.info":"Info","empty-state.success":"Yeah!","empty-state.warning":"Oops!","github":"See this project on GitHub","keyMap":"Keyboard shortcuts","keyMap.board":"Board","keyMap.board.toggle-blank":"Mark/unmark tile as a blank","keyMap.board.toggle-direction":"Toggle typing direction","keyMap.board-and-rack":"Board & rack","keyMap.board-and-rack.insert-two-letter-tile":"Insert two-letter tile","keyMap.board-and-rack.navigate":"Navigate","keyMap.board-and-rack.remove-tile":"Remove tile","keyMap.board-and-rack.submit":"Start solving","keyMap.rack":"Rack","keyMap.rack.insert-blank":"Insert blank (spacebar)","rack.placeholder":"Letters","remaining-tiles":"Remaining tiles","results.empty-state.no-filtered-results":"No result matches this query.","results.empty-state.no-results":"No results - unable to generate any words.","results.empty-state.outdated":"Results are outdated. Click below to update.","results.empty-state.uninitialized":"Words generated from your letters will be shown here.","results.input.placeholder":"Search results... (RegExp)","results.solve":"Solve","settings":"Settings","settings.autoGroupTiles":"Group remaining tiles","settings.autoGroupTiles.left":"On the left","settings.autoGroupTiles.right":"On the right","settings.autoGroupTiles.null":"Do not group","settings.game":"Game","settings.language":"Language","words":"Created words","words.invalid":"Invalid","words.valid":"Valid"}');
975
+ ;// CONCATENATED MODULE: ./src/i18n/es.json
976
+ const es_namespaceObject = JSON.parse('{"cell.filter-cell":"Destino objetivo: haga clic para alternar","cell.set-blank":"Marcar como en blanco","cell.set-not-blank":"Marcar como no en blanco","cell.toggle-direction":"Dirección de escritura: haga clic para alternar","common.blanks":"Blancos","common.clear":"Borrar","common.close":"Cerrar","common.consonants":"Consonantes","common.loading":"Cargando","common.points":"Puntos","common.tiles":"Longitud","common.two-letter-tiles":"Dos letras","common.vowels":"Vocales","common.word":"Palabra","common.words":"Palabras","dictionary.empty-state.no-definitions":"La palabra existe en el diccionario pero no tiene una definición.","dictionary.empty-state.no-results":"No se puede encontrar la definición de palabra en el diccionario.","dictionary.empty-state.not-allowed":"Esta palabra no es aceptable.","dictionary.empty-state.uninitialized":"Aquí se mostrará la definición del diccionario de la última palabra resaltada.","dictionary.input.placeholder":"Busca el diccionario...","empty-state.error":"Error","empty-state.info":"Info","empty-state.success":"Sí!","empty-state.warning":"Vaya!","github":"Ver este proyecto en GitHub","keyMap":"Atajos de teclado","keyMap.board":"Tablero","keyMap.board.toggle-blank":"Marcar / desmarcar un espacio en blanco","keyMap.board.toggle-direction":"Alternar dirección de escritura","keyMap.board-and-rack":"Tablero y estante","keyMap.board-and-rack.insert-two-letter-tile":"Insertar mosaico de dos letras","keyMap.board-and-rack.navigate":"Navegar","keyMap.board-and-rack.remove-tile":"Quitar Letra","keyMap.board-and-rack.submit":"Empezar a resolver","keyMap.rack":"Estante","keyMap.rack.insert-blank":"Insertar espacio en blanco (barra espaciadora)","rack.placeholder":"Letras…","remaining-tiles":"Casillas restantes","results.empty-state.no-filtered-results":"Ningún resultado coincide con esta consulta.","results.empty-state.no-results":"No hay resultados; no se pueden generar palabras","results.empty-state.outdated":"Los resultados están desactualizados. Haga clic a continuación para actualizar.","results.empty-state.uninitialized":"Aquí se mostrarán las palabras generadas a partir de sus letras.","results.input.placeholder":"Busque una solución... (RegExp)","results.solve":"Resolver","settings":"Configuración","settings.autoGroupTiles":"Agrupar casillas restantes","settings.autoGroupTiles.left":"A la izquierda","settings.autoGroupTiles.right":"A la derecha","settings.autoGroupTiles.null":"No agrupar","settings.game":"Juego","settings.language":"Idioma","words":"Palabras creadas","words.invalid":"Incorrecto","words.valid":"Correcto"}');
977
+ ;// CONCATENATED MODULE: ./src/i18n/fa.json
978
+ const fa_namespaceObject = JSON.parse('{"cell.filter-cell":"مقصد - کلیک برای تغییر","cell.set-blank":"علامت گذاری به عنوان خالی","cell.set-not-blank":"علامت گذاری به عنوان غیر خالی","cell.toggle-direction":"جهت تایپ - کلیک برای تغییر","common.blanks":"خالی","common.clear":"پاک کردن","common.close":"بستن","common.consonants":"حروف صامت","common.loading":"در حال بارگزاری","common.points":"امتیازات","common.tiles":"کاشی ها","common.two-letter-tiles":"دو حرفی","common.vowels":"حروف مصوت","common.word":"کلمه","common.words":"کلمات","dictionary.empty-state.no-definitions":"کلمه در فرهنگ لغت وجود دارد، ولی معنایی برای آن ثبت نشده است.","dictionary.empty-state.no-results":"کلمه در فرهنگ لغت یافت نشد.","dictionary.empty-state.not-allowed":"این کلمه مجاز نیست.","dictionary.empty-state.uninitialized":"معنی لغت اینجا نمایش داده خواهد شد.","dictionary.input.placeholder":"جستجو در فرهنگ لغت ...","empty-state.error":"خطا","empty-state.info":"اطلاعات","empty-state.success":"حله!","empty-state.warning":"اوووخ!","github":"به این پروژه در گیتهاب سر بزنید","keyMap":"میانبر های کیبورد","keyMap.board":"صفحه","keyMap.board.toggle-blank":"علامت/عدم علامت گذاری کاشی به عنوان خالی","keyMap.board.toggle-direction":"تغییر جهت تایپ","keyMap.board-and-rack":"صفحه و طاقچه","keyMap.board-and-rack.insert-two-letter-tile":"وارد کردن کاشی دو حرفی","keyMap.board-and-rack.navigate":"حرکت","keyMap.board-and-rack.remove-tile":"حذف کاشی","keyMap.board-and-rack.submit":"حل کردن","keyMap.rack":"طاقچه","keyMap.rack.insert-blank":"وارد کردن کاشی خالی (دکمه اسپیس)","rack.placeholder":"لیستحرف","remaining-tiles":"کاشی های باقی مانده","results.empty-state.no-filtered-results":"پاسخی یافت نشد.","results.empty-state.no-results":"کلمه قابل استفاده پیدا نشد.","results.empty-state.outdated":"نتایج به روز نیستند، برای بروز رسانی کلیک کنید.","results.empty-state.uninitialized":"کلمات تولید شده از حروف شما اینجا نمایش داده خواهد شد.","results.input.placeholder":"جستجو در نتایج (RegExp)","results.solve":"حل کن","settings":"تنظیمات","settings.autoGroupTiles":"کاشی های باقی مانده ی طاقچه را کنار هم قرار بده","settings.autoGroupTiles.left":"در سمت چپ","settings.autoGroupTiles.right":"در سمت راست","settings.autoGroupTiles.null":"کنار هم قرار نده","settings.game":"بازی","settings.language":"زبان","words":"کلمات ساخته شده","words.invalid":"نا معتبر","words.valid":"معتبر"}');
979
+ ;// CONCATENATED MODULE: ./src/i18n/fr.json
980
+ const fr_namespaceObject = JSON.parse('{"cell.filter-cell":"Destination cible - cliquer pour changer","cell.set-blank":"Marquer comme vide","cell.set-not-blank":"Marquer comme non vide","cell.toggle-direction":"Direction d\'écriture - cliquer pour changer","common.blanks":"Cases vides","common.clear":"Effacer","common.close":"Fermer","common.consonants":"Consonnes","common.loading":"Chargement","common.points":"Points","common.tiles":"Cases","common.two-letter-tiles":"Deux lettres","common.vowels":"Voyelles","common.word":"Mot","common.words":"Mots","dictionary.empty-state.no-definitions":"Le mot existe dans le dictionary mais n\'a pas de définition.","dictionary.empty-state.no-results":"Impossible de trouver une définition pour ce mot dans le dictionaire.","dictionary.empty-state.not-allowed":"Ce mot n\'est pas pas acceptable.","dictionary.empty-state.uninitialized":"La définition dictionaire du dernier mot surligné sera affichée ici.","dictionary.input.placeholder":"Rechercher dans le dictionnaire...","empty-state.error":"Erreur","empty-state.info":"Info","empty-state.success":"Ouais!","empty-state.warning":"Oups!","github":"Voir ce projet sur GitHub","keyMap":"Raccourcis clavier","keyMap.board":"Plateau","keyMap.board.toggle-blank":"Marqué/Démarqué la case en tant que vide","keyMap.board.toggle-direction":"Faire basculer la direction d\'écriture","keyMap.board-and-rack":"Plateau & chevalet","keyMap.board-and-rack.insert-two-letter-tile":"Insérer une tuile de deux lettres","keyMap.board-and-rack.navigate":"Naviguer","keyMap.board-and-rack.remove-tile":"Supprimer une case","keyMap.board-and-rack.submit":"Commencer la résolution","keyMap.rack":"Chevalet","keyMap.rack.insert-blank":"Inserer une case vide (spacebar)","rack.placeholder":"Lettres","remaining-tiles":"Cases restantes","results.empty-state.no-filtered-results":"Aucun résultat ne correspond à cette requête","results.empty-state.no-results":"Pas de résultats - impossible de générer des mots.","results.empty-state.outdated":"Les résultats sont dépassé. Cliquer ci-dessous pour mettre à jour.","results.empty-state.uninitialized":"Les mots générés à partir de vos lettres seront affichés ici.","results.input.placeholder":"Rechercher les résultats... (RegExp)","results.solve":"Résoudre","settings":"Options","settings.autoGroupTiles":"Grouper les cases restantes","settings.autoGroupTiles.left":"Vers la droite","settings.autoGroupTiles.right":"Vers la gauche","settings.autoGroupTiles.null":"Ne pas grouper","settings.game":"Jeu","settings.language":"Langue","words":"Mots créés","words.invalid":"Incorrect","words.valid":"Corriger"}');
981
+ ;// CONCATENATED MODULE: ./src/i18n/pl.json
982
+ const pl_namespaceObject = JSON.parse('{"cell.filter-cell":"Miejsce docelowe - kliknij aby zmienić","cell.set-blank":"Oznacz jako blank","cell.set-not-blank":"Oznacz jako nie blank","cell.toggle-direction":"Kierunek wpisywania - kliknij aby zmienić","common.blanks":"Blanki","common.clear":"Wyczyść","common.close":"Zamknij","common.consonants":"Spółgłoski","common.loading":"Ładowanie","common.points":"Punkty","common.tiles":"Płytki","common.two-letter-tiles":"Dwuliterowe","common.vowels":"Samogłoski","common.word":"Słowo","common.words":"Słowa","dictionary.empty-state.no-definitions":"Słowo istnieje w słowniku ale nie posiada definicji.","dictionary.empty-state.no-results":"Nie udało się znaleźć definicji słowa w słowniku.","dictionary.empty-state.not-allowed":"To słowo nie jest dopuszczalne w grach.","dictionary.empty-state.uninitialized":"Tu zostanie wyświetlona słownikowa definicja ostatnio podświetlonego słowa.","dictionary.input.placeholder":"Szukaj w słowniku...","empty-state.error":"Błąd","empty-state.info":"Info","empty-state.success":"Hurra!","empty-state.warning":"Ups!","github":"Zobacz ten projekt na GitHubie","keyMap":"Skróty klawiszowe","keyMap.board":"Plansza","keyMap.board.toggle-blank":"Oznacz/odznacz płytkę jako blank","keyMap.board.toggle-direction":"Zmień kierunek wpisywania","keyMap.board-and-rack":"Plansza i stojak","keyMap.board-and-rack.insert-two-letter-tile":"Wstaw dwuliterową płytkę","keyMap.board-and-rack.navigate":"Nawigacja","keyMap.board-and-rack.remove-tile":"Zdejmij płytkę","keyMap.board-and-rack.submit":"Rozpocznij wyszukiwanie","keyMap.rack":"Stojak","keyMap.rack.insert-blank":"Wstaw blanka (spacja)","rack.placeholder":"Literki","remaining-tiles":"Pozostałe płytki","results.empty-state.no-filtered-results":"Żaden wynik nie pasuje do tej kwerendy.","results.empty-state.no-results":"Brak wyników - nie można wygenerować żadnego słowa.","results.empty-state.outdated":"Wyniki są nieaktualne. Kliknij poniżej, aby zaktualizować.","results.empty-state.uninitialized":"Tu zostaną wyświetlone słowa wygenerowane z Twoich liter.","results.input.placeholder":"Szukaj rozwiązania... (RegExp)","results.solve":"Rozwiąż","settings":"Opcje","settings.autoGroupTiles":"Grupuj pozostałe płytki","settings.autoGroupTiles.left":"Po lewej","settings.autoGroupTiles.right":"Po prawej","settings.autoGroupTiles.null":"Nie grupuj","settings.game":"Gra","settings.language":"Język","words":"Utworzone słowa","words.invalid":"Niepoprawne","words.valid":"Poprawne"}');
983
+ ;// CONCATENATED MODULE: ./src/i18n/i18n.ts
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+ const i18n = {
992
+ [build.Locale.DE_DE]: de_namespaceObject,
993
+ [build.Locale.EN_GB]: en_namespaceObject,
994
+ [build.Locale.EN_US]: en_namespaceObject,
995
+ [build.Locale.ES_ES]: es_namespaceObject,
996
+ [build.Locale.FA_IR]: fa_namespaceObject,
997
+ [build.Locale.FR_FR]: fr_namespaceObject,
998
+ [build.Locale.PL_PL]: pl_namespaceObject
999
+ };
1000
+ /* harmony default export */ const i18n_i18n = (i18n);
1001
+
1002
+ ;// CONCATENATED MODULE: ./src/i18n/constants.ts
1003
+
1004
+ const LOCALE_FEATURES = {
1005
+ [build.Locale.DE_DE]: {
1006
+ direction: "ltr",
1007
+ fontFamily: "Open Sans",
1008
+ consonants: true,
1009
+ vowels: true
1010
+ },
1011
+ [build.Locale.EN_GB]: {
1012
+ direction: "ltr",
1013
+ fontFamily: "Open Sans",
1014
+ consonants: true,
1015
+ vowels: true
1016
+ },
1017
+ [build.Locale.EN_US]: {
1018
+ direction: "ltr",
1019
+ fontFamily: "Open Sans",
1020
+ consonants: true,
1021
+ vowels: true
1022
+ },
1023
+ [build.Locale.ES_ES]: {
1024
+ direction: "ltr",
1025
+ fontFamily: "Open Sans",
1026
+ consonants: true,
1027
+ vowels: true
1028
+ },
1029
+ [build.Locale.FA_IR]: {
1030
+ direction: "rtl",
1031
+ fontFamily: "Vazirmatn",
1032
+ consonants: false,
1033
+ vowels: false
1034
+ },
1035
+ [build.Locale.FR_FR]: {
1036
+ direction: "ltr",
1037
+ fontFamily: "Open Sans",
1038
+ consonants: true,
1039
+ vowels: true
1040
+ },
1041
+ [build.Locale.PL_PL]: {
1042
+ direction: "ltr",
1043
+ fontFamily: "Open Sans",
1044
+ consonants: true,
1045
+ vowels: true
1046
+ }
1047
+ };
1048
+
1049
+ ;// CONCATENATED MODULE: ./src/i18n/index.ts
1050
+
1051
+
1052
+
1053
+
1054
+ /***/ }),
1055
+
1056
+ /***/ 30459:
865
1057
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
866
1058
 
867
1059
 
@@ -891,7 +1083,7 @@ __webpack_require__.d(__webpack_exports__, {
891
1083
  "gV": () => (/* reexport */ lib_zipCharactersAndTiles)
892
1084
  });
893
1085
 
894
- // UNUSED EXPORTS: comparator, createKeyComparator, getRemainingTilesCount, getTotalRemainingTilesCount, isStringArray, numberComparator, reverseComparator, stringComparator
1086
+ // UNUSED EXPORTS: createComparator, createKeyComparator, createStringComparator, getRemainingTilesCount, getTotalRemainingTilesCount, isStringArray, numberComparator, reverseComparator
895
1087
 
896
1088
  ;// CONCATENATED MODULE: ./src/lib/canUseDom.ts
897
1089
  const canUseDom = Boolean( false && 0);
@@ -968,6 +1160,9 @@ const detectLocale = ()=>{
968
1160
  if (window.navigator.languages.includes("en-GB")) {
969
1161
  return build.Locale.EN_GB;
970
1162
  }
1163
+ if (window.navigator.languages.includes("fa") || window.navigator.languages.includes("fa-IR")) {
1164
+ return build.Locale.FA_IR;
1165
+ }
971
1166
  if (window.navigator.languages.includes("fr-FR")) {
972
1167
  return build.Locale.FR_FR;
973
1168
  }
@@ -1030,23 +1225,24 @@ const getCellSize = (config, width, height)=>{
1030
1225
  };
1031
1226
  /* harmony default export */ const lib_getCellSize = (getCellSize);
1032
1227
 
1228
+ ;// CONCATENATED MODULE: ./src/lib/createStringComparator.ts
1229
+ const createStringComparator = (locale)=>(a, b)=>a.localeCompare(b, locale);
1230
+ /* harmony default export */ const lib_createStringComparator = (createStringComparator);
1231
+
1033
1232
  ;// CONCATENATED MODULE: ./src/lib/numberComparator.ts
1034
1233
  const numberComparator = (a, b)=>a - b;
1035
1234
  /* harmony default export */ const lib_numberComparator = (numberComparator);
1036
1235
 
1037
- ;// CONCATENATED MODULE: ./src/lib/stringComparator.ts
1038
- const stringComparator = (a, b)=>a.localeCompare(b);
1039
- /* harmony default export */ const lib_stringComparator = (stringComparator);
1040
-
1041
1236
  ;// CONCATENATED MODULE: ./src/lib/createKeyComparator.ts
1042
1237
 
1043
1238
 
1044
- const createKeyComparator = (key)=>{
1239
+ const createKeyComparator = (key, locale)=>{
1240
+ const stringComparator = lib_createStringComparator(locale);
1045
1241
  return (a, b)=>{
1046
1242
  const aValue = a[key];
1047
1243
  const bValue = b[key];
1048
1244
  if (typeof aValue === "string" && typeof bValue === "string") {
1049
- return lib_stringComparator(aValue, bValue);
1245
+ return stringComparator(aValue, bValue);
1050
1246
  }
1051
1247
  if (typeof aValue === "number" && typeof bValue === "number") {
1052
1248
  return lib_numberComparator(aValue, bValue);
@@ -1059,7 +1255,7 @@ const createKeyComparator = (key)=>{
1059
1255
  ;// CONCATENATED MODULE: ./src/lib/getRemainingTiles.ts
1060
1256
 
1061
1257
 
1062
- const getRemainingTiles = (config, board, characters)=>{
1258
+ const getRemainingTiles = (config, board, characters, locale)=>{
1063
1259
  const nonEmptyCells = board.rows.flat().filter((cell)=>!cell.isEmpty);
1064
1260
  const letterCells = nonEmptyCells.filter((cell)=>!cell.tile.isBlank);
1065
1261
  const remainingTiles = Object.fromEntries(config.tiles.map((tile)=>[
@@ -1091,8 +1287,9 @@ const getRemainingTiles = (config, board, characters)=>{
1091
1287
  for (const letter1 of letters){
1092
1288
  ++remainingTiles[letter1].usedCount;
1093
1289
  }
1290
+ const comparator = lib_createKeyComparator("character", locale);
1094
1291
  return [
1095
- ...Object.values(remainingTiles).sort(lib_createKeyComparator("character")),
1292
+ ...Object.values(remainingTiles).sort(comparator),
1096
1293
  blank
1097
1294
  ];
1098
1295
  };
@@ -1115,38 +1312,49 @@ const getTotalRemainingTilesCount = (remainingTiles)=>{
1115
1312
 
1116
1313
 
1117
1314
  const getRemainingTilesGroups = (remainingTiles)=>{
1118
- const consonants = remainingTiles.filter(({ character })=>constants_build.CONSONANTS.includes(character));
1119
- const vowels = remainingTiles.filter(({ character })=>constants_build.VOWELS.includes(character));
1120
- const twoCharacterTiles = remainingTiles.filter(({ character })=>character.length === 2);
1121
- const blanks = remainingTiles.filter(({ character })=>character === constants_build.BLANK);
1122
- const groups = [
1123
- {
1124
- remainingCount: lib_getRemainingTilesCount(vowels),
1125
- tiles: vowels,
1126
- translationKey: "common.vowels",
1127
- totalCount: lib_getTotalRemainingTilesCount(vowels)
1128
- },
1129
- {
1130
- remainingCount: lib_getRemainingTilesCount(consonants),
1131
- tiles: consonants,
1132
- translationKey: "common.consonants",
1133
- totalCount: lib_getTotalRemainingTilesCount(consonants)
1134
- },
1135
- {
1136
- remainingCount: lib_getRemainingTilesCount(twoCharacterTiles),
1137
- tiles: twoCharacterTiles,
1138
- translationKey: "common.two-letter-tiles",
1139
- totalCount: lib_getTotalRemainingTilesCount(twoCharacterTiles)
1140
- },
1141
- {
1142
- remainingCount: lib_getRemainingTilesCount(blanks),
1143
- tiles: blanks,
1144
- translationKey: "common.blanks",
1145
- totalCount: lib_getTotalRemainingTilesCount(blanks)
1146
- },
1147
- ];
1315
+ const consonants = remainingTiles.filter(isConsonant);
1316
+ const vowels = remainingTiles.filter(isVowel);
1317
+ const other = remainingTiles.filter(isOther);
1318
+ const groups = [];
1319
+ groups.push({
1320
+ remainingCount: lib_getRemainingTilesCount(vowels),
1321
+ tiles: vowels,
1322
+ translationKey: "common.vowels",
1323
+ totalCount: lib_getTotalRemainingTilesCount(vowels)
1324
+ });
1325
+ groups.push({
1326
+ remainingCount: lib_getRemainingTilesCount(consonants),
1327
+ tiles: consonants,
1328
+ translationKey: "common.consonants",
1329
+ totalCount: lib_getTotalRemainingTilesCount(consonants)
1330
+ });
1331
+ groups.push({
1332
+ remainingCount: lib_getRemainingTilesCount(other),
1333
+ tiles: other,
1334
+ translationKey: "common.tiles",
1335
+ totalCount: lib_getTotalRemainingTilesCount(other)
1336
+ });
1337
+ const twoCharacterTiles = remainingTiles.filter(isTwoCharacter);
1338
+ const blanks = remainingTiles.filter(isBlank);
1339
+ groups.push({
1340
+ remainingCount: lib_getRemainingTilesCount(twoCharacterTiles),
1341
+ tiles: twoCharacterTiles,
1342
+ translationKey: "common.two-letter-tiles",
1343
+ totalCount: lib_getTotalRemainingTilesCount(twoCharacterTiles)
1344
+ });
1345
+ groups.push({
1346
+ remainingCount: lib_getRemainingTilesCount(blanks),
1347
+ tiles: blanks,
1348
+ translationKey: "common.blanks",
1349
+ totalCount: lib_getTotalRemainingTilesCount(blanks)
1350
+ });
1148
1351
  return groups.filter(({ totalCount })=>totalCount > 0);
1149
1352
  };
1353
+ const isConsonant = (tile)=>constants_build.CONSONANTS.includes(tile.character);
1354
+ const isVowel = (tile)=>constants_build.VOWELS.includes(tile.character);
1355
+ const isTwoCharacter = (tile)=>tile.character.length === 2;
1356
+ const isBlank = (tile)=>tile.character === constants_build.BLANK;
1357
+ const isOther = (tile)=>!isConsonant(tile) && !isVowel(tile) && !isBlank(tile) && !isTwoCharacter(tile);
1150
1358
  /* harmony default export */ const lib_getRemainingTilesGroups = (getRemainingTilesGroups);
1151
1359
 
1152
1360
  ;// CONCATENATED MODULE: ./src/lib/getTileSizes.ts
@@ -1249,19 +1457,20 @@ const reverseComparator = (comparator)=>{
1249
1457
 
1250
1458
 
1251
1459
  const comparators = {
1252
- [types/* ResultColumn.BlanksCount */.M.BlanksCount]: lib_createKeyComparator("blanksCount"),
1253
- [types/* ResultColumn.ConsonantsCount */.M.ConsonantsCount]: lib_createKeyComparator("consonantsCount"),
1254
- [types/* ResultColumn.Points */.M.Points]: lib_createKeyComparator("points"),
1255
- [types/* ResultColumn.TilesCount */.M.TilesCount]: lib_createKeyComparator("tilesCount"),
1256
- [types/* ResultColumn.VowelsCount */.M.VowelsCount]: lib_createKeyComparator("vowelsCount"),
1257
- [types/* ResultColumn.Word */.M.Word]: lib_createKeyComparator("word"),
1258
- [types/* ResultColumn.WordsCount */.M.WordsCount]: lib_createKeyComparator("wordsCount")
1259
- };
1260
- const sortResults = (results, column, sortDirection)=>{
1460
+ [types/* ResultColumn.BlanksCount */.M.BlanksCount]: (locale)=>lib_createKeyComparator("blanksCount", locale),
1461
+ [types/* ResultColumn.ConsonantsCount */.M.ConsonantsCount]: (locale)=>lib_createKeyComparator("consonantsCount", locale),
1462
+ [types/* ResultColumn.Points */.M.Points]: (locale)=>lib_createKeyComparator("points", locale),
1463
+ [types/* ResultColumn.TilesCount */.M.TilesCount]: (locale)=>lib_createKeyComparator("tilesCount", locale),
1464
+ [types/* ResultColumn.VowelsCount */.M.VowelsCount]: (locale)=>lib_createKeyComparator("vowelsCount", locale),
1465
+ [types/* ResultColumn.Word */.M.Word]: (locale)=>lib_createKeyComparator("word", locale),
1466
+ [types/* ResultColumn.WordsCount */.M.WordsCount]: (locale)=>lib_createKeyComparator("wordsCount", locale)
1467
+ };
1468
+ const sortResults = (results, column, sortDirection, locale)=>{
1261
1469
  if (typeof results === "undefined") {
1262
1470
  return results;
1263
1471
  }
1264
- const comparator = comparators[column];
1472
+ const createComparator = comparators[column];
1473
+ const comparator = createComparator(locale);
1265
1474
  const finalComparator = sortDirection === types/* SortDirection.Descending */.S.Descending ? lib_reverseComparator(comparator) : comparator;
1266
1475
  return [
1267
1476
  ...results
@@ -1269,32 +1478,36 @@ const sortResults = (results, column, sortDirection)=>{
1269
1478
  };
1270
1479
  /* harmony default export */ const lib_sortResults = (sortResults);
1271
1480
 
1272
- ;// CONCATENATED MODULE: ./src/lib/comparator.ts
1481
+ ;// CONCATENATED MODULE: ./src/lib/createComparator.ts
1273
1482
 
1274
1483
 
1275
- const comparator = (a, b)=>{
1276
- if (typeof a === "string" && typeof b === "string") {
1277
- return lib_stringComparator(a, b);
1278
- }
1279
- if (typeof a === "number" && typeof b === "number") {
1280
- return lib_numberComparator(a, b);
1281
- }
1282
- return 0;
1484
+ const createComparator = (locale)=>{
1485
+ const stringComparator = lib_createStringComparator(locale);
1486
+ return (a, b)=>{
1487
+ if (typeof a === "string" && typeof b === "string") {
1488
+ return stringComparator(a, b);
1489
+ }
1490
+ if (typeof a === "number" && typeof b === "number") {
1491
+ return lib_numberComparator(a, b);
1492
+ }
1493
+ return 0;
1494
+ };
1283
1495
  };
1284
- /* harmony default export */ const lib_comparator = (comparator);
1496
+ /* harmony default export */ const lib_createComparator = (createComparator);
1285
1497
 
1286
1498
  ;// CONCATENATED MODULE: ./src/lib/unorderedArraysEqual.ts
1287
1499
 
1288
- const unorderedArraysEqual = (a, b)=>{
1500
+ const unorderedArraysEqual = (a, b, locale)=>{
1289
1501
  if (a.length !== b.length) {
1290
1502
  return false;
1291
1503
  }
1504
+ const comparator = lib_createComparator(locale);
1292
1505
  const aSorted = [
1293
1506
  ...a
1294
- ].sort(lib_comparator);
1507
+ ].sort(comparator);
1295
1508
  const bSorted = [
1296
1509
  ...b
1297
- ].sort(lib_comparator);
1510
+ ].sort(comparator);
1298
1511
  return aSorted.every((character, index)=>character === bSorted[index]);
1299
1512
  };
1300
1513
  /* harmony default export */ const lib_unorderedArraysEqual = (unorderedArraysEqual);
@@ -1536,7 +1749,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1536
1749
  /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(89969);
1537
1750
  /* harmony import */ var _createAppStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(33282);
1538
1751
  /* harmony import */ var _localStorage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83773);
1539
- /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6114);
1752
+ /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(40897);
1540
1753
  /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99134);
1541
1754
  /* harmony import */ var _useTranslate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41573);
1542
1755
  /* harmony import */ var _useTypedSelector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(53872);
@@ -1650,7 +1863,7 @@ __webpack_require__.d(__webpack_exports__, {
1650
1863
  // EXTERNAL MODULE: external "redux-saga/effects"
1651
1864
  var effects_ = __webpack_require__(56477);
1652
1865
  // EXTERNAL MODULE: ./src/lib/index.ts + 29 modules
1653
- var lib = __webpack_require__(75558);
1866
+ var lib = __webpack_require__(30459);
1654
1867
  // EXTERNAL MODULE: ../types/build/index.js
1655
1868
  var build = __webpack_require__(34046);
1656
1869
  ;// CONCATENATED MODULE: ./src/sdk/fetch.ts
@@ -1696,7 +1909,7 @@ const fetchJson = async (input, init)=>{
1696
1909
 
1697
1910
 
1698
1911
  const findWordDefinitions = async (locale, word)=>{
1699
- const json = await sdk_fetchJson(`/api/dictionary/${locale}/${word}`);
1912
+ const json = await sdk_fetchJson(`/api/dictionary/${locale}/${encodeURIComponent(word)}`);
1700
1913
  return json.map(build.WordDefinition.fromJson);
1701
1914
  };
1702
1915
  /* harmony default export */ const sdk_findWordDefinitions = (findWordDefinitions);
@@ -1748,8 +1961,8 @@ const visit = ()=>{
1748
1961
 
1749
1962
  // EXTERNAL MODULE: ./src/state/actions.ts
1750
1963
  var actions = __webpack_require__(89969);
1751
- // EXTERNAL MODULE: ./src/state/selectors.ts + 6 modules
1752
- var selectors = __webpack_require__(6114);
1964
+ // EXTERNAL MODULE: ./src/state/selectors.ts
1965
+ var selectors = __webpack_require__(40897);
1753
1966
  // EXTERNAL MODULE: ./src/state/slices/index.ts + 16 modules
1754
1967
  var slices = __webpack_require__(99134);
1755
1968
  ;// CONCATENATED MODULE: ./src/state/sagas.ts
@@ -1789,7 +2002,7 @@ function* onRackValueChange() {
1789
2002
  yield (0,effects_.put)(slices/* resultsSlice.actions.changeResultCandidate */._C.actions.changeResultCandidate(null));
1790
2003
  }
1791
2004
  function* onApplyResult({ payload: result }) {
1792
- const autoGroupTiles = yield (0,effects_.select)(selectors/* selectAutoGroupTiles */.uz);
2005
+ const autoGroupTiles = yield (0,effects_.select)(selectors/* selectLocaleAutoGroupTiles */.lP);
1793
2006
  yield (0,effects_.put)(slices/* boardSlice.actions.applyResult */.I8.actions.applyResult(result));
1794
2007
  yield (0,effects_.put)(slices/* cellFilterSlice.actions.reset */.mO.actions.reset());
1795
2008
  yield (0,effects_.put)(slices/* rackSlice.actions.removeTiles */.O_.actions.removeTiles(result.tiles));
@@ -1797,8 +2010,13 @@ function* onApplyResult({ payload: result }) {
1797
2010
  yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1798
2011
  }
1799
2012
  function* onConfigIdChange() {
2013
+ const characters = yield (0,effects_.select)(selectors/* selectCharacters */.yp);
2014
+ if (characters.length > 0) {
2015
+ yield (0,effects_.put)(slices/* solveSlice.actions.submit */.TP.actions.submit());
2016
+ } else {
2017
+ yield (0,effects_.put)(slices/* resultsSlice.actions.reset */._C.actions.reset());
2018
+ }
1800
2019
  yield (0,effects_.put)(slices/* resultsSlice.actions.reset */._C.actions.reset());
1801
- yield (0,effects_.put)(slices/* solveSlice.actions.submit */.TP.actions.submit());
1802
2020
  yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1803
2021
  yield* ensureProperTilesCount();
1804
2022
  }
@@ -1829,9 +2047,14 @@ function* onReset() {
1829
2047
  yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1830
2048
  }
1831
2049
  function* onLocaleChange() {
2050
+ const characters = yield (0,effects_.select)(selectors/* selectCharacters */.yp);
2051
+ if (characters.length > 0) {
2052
+ yield (0,effects_.put)(slices/* solveSlice.actions.submit */.TP.actions.submit());
2053
+ } else {
2054
+ yield (0,effects_.put)(slices/* resultsSlice.actions.reset */._C.actions.reset());
2055
+ }
1832
2056
  yield (0,effects_.put)(slices/* dictionarySlice.actions.reset */.lj.actions.reset());
1833
2057
  yield (0,effects_.put)(slices/* resultsSlice.actions.changeResultCandidate */._C.actions.changeResultCandidate(null));
1834
- yield (0,effects_.put)(slices/* solveSlice.actions.submit */.TP.actions.submit());
1835
2058
  yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1836
2059
  }
1837
2060
  function* onResultCandidateChange({ payload: result }) {
@@ -1902,7 +2125,7 @@ function* ensureProperTilesCount() {
1902
2125
  } else if (config.maximumCharactersCount < characters.length) {
1903
2126
  const nonNulls = characters.filter(Boolean).slice(0, config.maximumCharactersCount);
1904
2127
  const differenceCount1 = Math.abs(config.maximumCharactersCount - nonNulls.length);
1905
- const autoGroupTiles = yield (0,effects_.select)(selectors/* selectAutoGroupTiles */.uz);
2128
+ const autoGroupTiles = yield (0,effects_.select)(selectors/* selectLocaleAutoGroupTiles */.lP);
1906
2129
  yield (0,effects_.put)(slices/* rackSlice.actions.init */.O_.actions.init([
1907
2130
  ...nonNulls,
1908
2131
  ...Array(differenceCount1).fill(null)
@@ -1914,80 +2137,49 @@ function* ensureProperTilesCount() {
1914
2137
 
1915
2138
  /***/ }),
1916
2139
 
1917
- /***/ 6114:
2140
+ /***/ 40897:
1918
2141
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1919
2142
 
1920
-
1921
- // EXPORTS
1922
- __webpack_require__.d(__webpack_exports__, {
1923
- "Mj": () => (/* binding */ selectAreResultsOutdated),
1924
- "uz": () => (/* binding */ selectAutoGroupTiles),
1925
- "ZO": () => (/* binding */ selectBoard),
1926
- "O0": () => (/* binding */ selectCellBonus),
1927
- "id": () => (/* binding */ selectCellIsFiltered),
1928
- "Or": () => (/* binding */ selectCharacterPoints),
1929
- "yp": () => (/* binding */ selectCharacters),
1930
- "$o": () => (/* binding */ selectConfig),
1931
- "md": () => (/* binding */ selectConfigId),
1932
- "w1": () => (/* binding */ selectDictionary),
1933
- "mK": () => (/* binding */ selectDictionaryError),
1934
- "bs": () => (/* binding */ selectHasInvalidWords),
1935
- "En": () => (/* binding */ selectHasOverusedTiles),
1936
- "xU": () => (/* binding */ selectIsLoading),
1937
- "fN": () => (/* binding */ selectLocale),
1938
- "QB": () => (/* binding */ selectRack),
1939
- "Yj": () => (/* binding */ selectRemainingTilesGroups),
1940
- "z$": () => (/* binding */ selectResultCandidateTiles),
1941
- "QL": () => (/* binding */ selectResultsQuery),
1942
- "R": () => (/* binding */ selectResultsSortColumn),
1943
- "sH": () => (/* binding */ selectResultsSortDirection),
1944
- "ZA": () => (/* binding */ selectRowsWithCandidate),
1945
- "Rn": () => (/* binding */ selectSolveError),
1946
- "dN": () => (/* binding */ selectSortedFilteredResults),
1947
- "f2": () => (/* binding */ selectSortedResults),
1948
- "Zf": () => (/* binding */ selectTilePoints),
1949
- "nb": () => (/* binding */ selectTranslations),
1950
- "HM": () => (/* binding */ selectVerify)
1951
- });
1952
-
1953
- // UNUSED EXPORTS: selectCellFilter, selectHasBoardChanged, selectHaveCharactersChanged, selectLastSolvedParameters, selectRemainingTiles, selectResultCandidate, selectResultCandidateCells, selectResults, selectTranslation
1954
-
1955
- // EXTERNAL MODULE: external "@reduxjs/toolkit"
1956
- var toolkit_ = __webpack_require__(75184);
1957
- // EXTERNAL MODULE: ../configs/build/index.js
1958
- var build = __webpack_require__(89418);
1959
- // EXTERNAL MODULE: ../types/build/index.js
1960
- var types_build = __webpack_require__(34046);
1961
- ;// CONCATENATED MODULE: ./src/i18n/de.json
1962
- const de_namespaceObject = JSON.parse('{"cell.filter-cell":"Zielort - klicken zum Wechseln","cell.set-blank":"Als Blanko markieren","cell.set-not-blank":"Nicht als Blanko markieren","cell.toggle-direction":"Schreibrichtung - klicken zum Wechseln","common.blanks":"Blankos","common.clear":"Löschen","common.close":"Schließen","common.consonants":"Konsonanten","common.loading":"Laden","common.points":"Punkte","common.tiles":"Steine","common.two-letter-tiles":"Zwei-Buchstaben","common.vowels":"Vokale","common.word":"Wort","common.words":"Wörter","dictionary.empty-state.no-definitions":"Wort existiert im Wörterbuch aber hat keine Definition.","dictionary.empty-state.no-results":"Wort kann nicht im Wörterbuch gefunden werden.","dictionary.empty-state.not-allowed":"Dieses Wort ist nicht erlaubt.","dictionary.empty-state.uninitialized":"Die Wörterbuchdefinition des letzten markierten Wortes wird hier angezeigt.","dictionary.input.placeholder":"Durchsuche Wörterbuch...","empty-state.error":"Fehler","empty-state.info":"Info","empty-state.success":"Juhuu!","empty-state.warning":"Oje!","github":"Schau dieses Projekt auf GitHub an","keyMap":"Tastaturkürzel","keyMap.board":"Brett","keyMap.board.toggle-blank":"Als Blanko markieren / aufheben","keyMap.board.toggle-direction":"Schreibrichtung umschalten","keyMap.board-and-rack":"Brett & Ablage","keyMap.board-and-rack.insert-two-letter-tile":"Zwei-Buchstaben Stein hinzufügen","keyMap.board-and-rack.navigate":"Navigieren","keyMap.board-and-rack.remove-tile":"Stein entfernen","keyMap.board-and-rack.submit":"Lösen starten","keyMap.rack":"Ablage","keyMap.rack.insert-blank":"Blanko hinzufügen (Leertaste)","rack.placeholder":"Steine…","remaining-tiles":"Restliche Steine","results.empty-state.no-filtered-results":"Keine Ergebnisse für diese Anfrage.","results.empty-state.no-results":"Keine Ergebnisse - kein Wort konnte generiert werden.","results.empty-state.outdated":"Ergebnisse sind alt. Klicken zum Aktualisieren.","results.empty-state.uninitialized":"Wörter die aus deinen Buchstaben generiert wurden erscheinen hier.","results.input.placeholder":"Suchergebnisse... (RegExp)","results.solve":"Lösen","settings":"Einstellungen","settings.autoGroupTiles":"Restliche Steine gruppieren","settings.autoGroupTiles.left":"Linke Seite","settings.autoGroupTiles.right":"Rechte Seite","settings.autoGroupTiles.null":"Nicht gruppieren","settings.game":"Spiel","settings.language":"Sprache","words":"Gebildete Wörter","words.invalid":"Falsch","words.valid":"Korrekt"}');
1963
- ;// CONCATENATED MODULE: ./src/i18n/en.json
1964
- const en_namespaceObject = JSON.parse('{"cell.filter-cell":"Target destination - click to toggle","cell.set-blank":"Mark it a blank","cell.set-not-blank":"Mark it not a blank","cell.toggle-direction":"Typing direction - click to toggle","common.blanks":"Blanks","common.clear":"Clear","common.close":"Close","common.consonants":"Consonants","common.loading":"Loading","common.points":"Points","common.tiles":"Tiles","common.two-letter-tiles":"Two-letter","common.vowels":"Vowels","common.word":"Word","common.words":"Words","dictionary.empty-state.no-definitions":"Word exists in the dictionary but it does not have a definition.","dictionary.empty-state.no-results":"Unable to find word definition in the dictionary.","dictionary.empty-state.not-allowed":"This word is not allowed.","dictionary.empty-state.uninitialized":"Dictionary definition of the most recently highlighted word will be shown here.","dictionary.input.placeholder":"Search dictionary...","empty-state.error":"Error","empty-state.info":"Info","empty-state.success":"Yeah!","empty-state.warning":"Oops!","github":"See this project on GitHub","keyMap":"Keyboard shortcuts","keyMap.board":"Board","keyMap.board.toggle-blank":"Mark/unmark tile as a blank","keyMap.board.toggle-direction":"Toggle typing direction","keyMap.board-and-rack":"Board & rack","keyMap.board-and-rack.insert-two-letter-tile":"Insert two-letter tile","keyMap.board-and-rack.navigate":"Navigate","keyMap.board-and-rack.remove-tile":"Remove tile","keyMap.board-and-rack.submit":"Start solving","keyMap.rack":"Rack","keyMap.rack.insert-blank":"Insert blank (spacebar)","rack.placeholder":"Letters","remaining-tiles":"Remaining tiles","results.empty-state.no-filtered-results":"No result matches this query.","results.empty-state.no-results":"No results - unable to generate any words.","results.empty-state.outdated":"Results are outdated. Click below to update.","results.empty-state.uninitialized":"Words generated from your letters will be shown here.","results.input.placeholder":"Search results... (RegExp)","results.solve":"Solve","settings":"Settings","settings.autoGroupTiles":"Group remaining tiles","settings.autoGroupTiles.left":"On the left","settings.autoGroupTiles.right":"On the right","settings.autoGroupTiles.null":"Do not group","settings.game":"Game","settings.language":"Language","words":"Created words","words.invalid":"Invalid","words.valid":"Valid"}');
1965
- ;// CONCATENATED MODULE: ./src/i18n/es.json
1966
- const es_namespaceObject = JSON.parse('{"cell.filter-cell":"Destino objetivo: haga clic para alternar","cell.set-blank":"Marcar como en blanco","cell.set-not-blank":"Marcar como no en blanco","cell.toggle-direction":"Dirección de escritura: haga clic para alternar","common.blanks":"Blancos","common.clear":"Borrar","common.close":"Cerrar","common.consonants":"Consonantes","common.loading":"Cargando","common.points":"Puntos","common.tiles":"Longitud","common.two-letter-tiles":"Dos letras","common.vowels":"Vocales","common.word":"Palabra","common.words":"Palabras","dictionary.empty-state.no-definitions":"La palabra existe en el diccionario pero no tiene una definición.","dictionary.empty-state.no-results":"No se puede encontrar la definición de palabra en el diccionario.","dictionary.empty-state.not-allowed":"Esta palabra no es aceptable.","dictionary.empty-state.uninitialized":"Aquí se mostrará la definición del diccionario de la última palabra resaltada.","dictionary.input.placeholder":"Busca el diccionario...","empty-state.error":"Error","empty-state.info":"Info","empty-state.success":"Sí!","empty-state.warning":"Vaya!","github":"Ver este proyecto en GitHub","keyMap":"Atajos de teclado","keyMap.board":"Tablero","keyMap.board.toggle-blank":"Marcar / desmarcar un espacio en blanco","keyMap.board.toggle-direction":"Alternar dirección de escritura","keyMap.board-and-rack":"Tablero y estante","keyMap.board-and-rack.insert-two-letter-tile":"Insertar mosaico de dos letras","keyMap.board-and-rack.navigate":"Navegar","keyMap.board-and-rack.remove-tile":"Quitar Letra","keyMap.board-and-rack.submit":"Empezar a resolver","keyMap.rack":"Estante","keyMap.rack.insert-blank":"Insertar espacio en blanco (barra espaciadora)","rack.placeholder":"Letras…","remaining-tiles":"Casillas restantes","results.empty-state.no-filtered-results":"Ningún resultado coincide con esta consulta.","results.empty-state.no-results":"No hay resultados; no se pueden generar palabras","results.empty-state.outdated":"Los resultados están desactualizados. Haga clic a continuación para actualizar.","results.empty-state.uninitialized":"Aquí se mostrarán las palabras generadas a partir de sus letras.","results.input.placeholder":"Busque una solución... (RegExp)","results.solve":"Resolver","settings":"Configuración","settings.autoGroupTiles":"Agrupar casillas restantes","settings.autoGroupTiles.left":"A la izquierda","settings.autoGroupTiles.right":"A la derecha","settings.autoGroupTiles.null":"No agrupar","settings.game":"Juego","settings.language":"Idioma","words":"Palabras creadas","words.invalid":"Incorrecto","words.valid":"Correcto"}');
1967
- ;// CONCATENATED MODULE: ./src/i18n/fr.json
1968
- const fr_namespaceObject = JSON.parse('{"cell.filter-cell":"Destination cible - cliquer pour changer","cell.set-blank":"Marquer comme vide","cell.set-not-blank":"Marquer comme non vide","cell.toggle-direction":"Direction d\'écriture - cliquer pour changer","common.blanks":"Cases vides","common.clear":"Effacer","common.close":"Fermer","common.consonants":"Consonnes","common.loading":"Chargement","common.points":"Points","common.tiles":"Cases","common.two-letter-tiles":"Deux lettres","common.vowels":"Voyelles","common.word":"Mot","common.words":"Mots","dictionary.empty-state.no-definitions":"Le mot existe dans le dictionary mais n\'a pas de définition.","dictionary.empty-state.no-results":"Impossible de trouver une définition pour ce mot dans le dictionaire.","dictionary.empty-state.not-allowed":"Ce mot n\'est pas pas acceptable.","dictionary.empty-state.uninitialized":"La définition dictionaire du dernier mot surligné sera affichée ici.","dictionary.input.placeholder":"Rechercher dans le dictionnaire...","empty-state.error":"Erreur","empty-state.info":"Info","empty-state.success":"Ouais!","empty-state.warning":"Oups!","github":"Voir ce projet sur GitHub","keyMap":"Raccourcis clavier","keyMap.board":"Plateau","keyMap.board.toggle-blank":"Marqué/Démarqué la case en tant que vide","keyMap.board.toggle-direction":"Faire basculer la direction d\'écriture","keyMap.board-and-rack":"Plateau & chevalet","keyMap.board-and-rack.insert-two-letter-tile":"Insérer une tuile de deux lettres","keyMap.board-and-rack.navigate":"Naviguer","keyMap.board-and-rack.remove-tile":"Supprimer une case","keyMap.board-and-rack.submit":"Commencer la résolution","keyMap.rack":"Chevalet","keyMap.rack.insert-blank":"Inserer une case vide (spacebar)","rack.placeholder":"Lettres","remaining-tiles":"Cases restantes","results.empty-state.no-filtered-results":"Aucun résultat ne correspond à cette requête","results.empty-state.no-results":"Pas de résultats - impossible de générer des mots.","results.empty-state.outdated":"Les résultats sont dépassé. Cliquer ci-dessous pour mettre à jour.","results.empty-state.uninitialized":"Words generated from your letters will be shown here.","results.input.placeholder":"Rechercher les résultats... (RegExp)","results.solve":"Résoudre","settings":"Options","settings.autoGroupTiles":"Grouper les cases restantes","settings.autoGroupTiles.left":"Vers la droite","settings.autoGroupTiles.right":"Vers la gauche","settings.autoGroupTiles.null":"Ne pas grouper","settings.game":"Jeu","settings.language":"Langue","words":"Mots créés","words.invalid":"Incorrect","words.valid":"Corriger"}');
1969
- ;// CONCATENATED MODULE: ./src/i18n/pl.json
1970
- const pl_namespaceObject = JSON.parse('{"cell.filter-cell":"Miejsce docelowe - kliknij aby zmienić","cell.set-blank":"Oznacz jako blank","cell.set-not-blank":"Oznacz jako nie blank","cell.toggle-direction":"Kierunek wpisywania - kliknij aby zmienić","common.blanks":"Blanki","common.clear":"Wyczyść","common.close":"Zamknij","common.consonants":"Spółgłoski","common.loading":"Ładowanie","common.points":"Punkty","common.tiles":"Płytki","common.two-letter-tiles":"Dwuliterowe","common.vowels":"Samogłoski","common.word":"Słowo","common.words":"Słowa","dictionary.empty-state.no-definitions":"Słowo istnieje w słowniku ale nie posiada definicji.","dictionary.empty-state.no-results":"Nie udało się znaleźć definicji słowa w słowniku.","dictionary.empty-state.not-allowed":"To słowo nie jest dopuszczalne w grach.","dictionary.empty-state.uninitialized":"Tu zostanie wyświetlona słownikowa definicja ostatnio podświetlonego słowa.","dictionary.input.placeholder":"Szukaj w słowniku...","empty-state.error":"Błąd","empty-state.info":"Info","empty-state.success":"Hurra!","empty-state.warning":"Ups!","github":"Zobacz ten projekt na GitHubie","keyMap":"Skróty klawiszowe","keyMap.board":"Plansza","keyMap.board.toggle-blank":"Oznacz/odznacz płytkę jako blank","keyMap.board.toggle-direction":"Zmień kierunek wpisywania","keyMap.board-and-rack":"Plansza i stojak","keyMap.board-and-rack.insert-two-letter-tile":"Wstaw dwuliterową płytkę","keyMap.board-and-rack.navigate":"Nawigacja","keyMap.board-and-rack.remove-tile":"Zdejmij płytkę","keyMap.board-and-rack.submit":"Rozpocznij wyszukiwanie","keyMap.rack":"Stojak","keyMap.rack.insert-blank":"Wstaw blanka (spacja)","rack.placeholder":"Literki","remaining-tiles":"Pozostałe płytki","results.empty-state.no-filtered-results":"Żaden wynik nie pasuje do tej kwerendy.","results.empty-state.no-results":"Brak wyników - nie można wygenerować żadnego słowa.","results.empty-state.outdated":"Wyniki są nieaktualne. Kliknij poniżej, aby zaktualizować.","results.empty-state.uninitialized":"Tu zostaną wyświetlone słowa wygenerowane z Twoich liter.","results.input.placeholder":"Szukaj rozwiązania... (RegExp)","results.solve":"Rozwiąż","settings":"Opcje","settings.autoGroupTiles":"Grupuj pozostałe płytki","settings.autoGroupTiles.left":"Po lewej","settings.autoGroupTiles.right":"Po prawej","settings.autoGroupTiles.null":"Nie grupuj","settings.game":"Gra","settings.language":"Język","words":"Utworzone słowa","words.invalid":"Niepoprawne","words.valid":"Poprawne"}');
1971
- ;// CONCATENATED MODULE: ./src/i18n/index.ts
1972
-
1973
-
1974
-
1975
-
1976
-
1977
-
1978
- const i18n = {
1979
- [types_build.Locale.DE_DE]: de_namespaceObject,
1980
- [types_build.Locale.EN_GB]: en_namespaceObject,
1981
- [types_build.Locale.EN_US]: en_namespaceObject,
1982
- [types_build.Locale.ES_ES]: es_namespaceObject,
1983
- [types_build.Locale.FR_FR]: fr_namespaceObject,
1984
- [types_build.Locale.PL_PL]: pl_namespaceObject
1985
- };
1986
- /* harmony default export */ const src_i18n = (i18n);
1987
-
1988
- // EXTERNAL MODULE: ./src/lib/index.ts + 29 modules
1989
- var lib = __webpack_require__(75558);
1990
- ;// CONCATENATED MODULE: ./src/state/selectors.ts
2143
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2144
+ /* harmony export */ "$o": () => (/* binding */ selectConfig),
2145
+ /* harmony export */ "En": () => (/* binding */ selectHasOverusedTiles),
2146
+ /* harmony export */ "HM": () => (/* binding */ selectVerify),
2147
+ /* harmony export */ "Mj": () => (/* binding */ selectAreResultsOutdated),
2148
+ /* harmony export */ "O0": () => (/* binding */ selectCellBonus),
2149
+ /* harmony export */ "Or": () => (/* binding */ selectCharacterPoints),
2150
+ /* harmony export */ "QB": () => (/* binding */ selectRack),
2151
+ /* harmony export */ "QL": () => (/* binding */ selectResultsQuery),
2152
+ /* harmony export */ "R": () => (/* binding */ selectResultsSortColumn),
2153
+ /* harmony export */ "Rn": () => (/* binding */ selectSolveError),
2154
+ /* harmony export */ "Yj": () => (/* binding */ selectRemainingTilesGroups),
2155
+ /* harmony export */ "ZA": () => (/* binding */ selectRowsWithCandidate),
2156
+ /* harmony export */ "ZO": () => (/* binding */ selectBoard),
2157
+ /* harmony export */ "Zf": () => (/* binding */ selectTilePoints),
2158
+ /* harmony export */ "bs": () => (/* binding */ selectHasInvalidWords),
2159
+ /* harmony export */ "dN": () => (/* binding */ selectSortedFilteredResults),
2160
+ /* harmony export */ "f2": () => (/* binding */ selectSortedResults),
2161
+ /* harmony export */ "fN": () => (/* binding */ selectLocale),
2162
+ /* harmony export */ "id": () => (/* binding */ selectCellIsFiltered),
2163
+ /* harmony export */ "lP": () => (/* binding */ selectLocaleAutoGroupTiles),
2164
+ /* harmony export */ "mK": () => (/* binding */ selectDictionaryError),
2165
+ /* harmony export */ "md": () => (/* binding */ selectConfigId),
2166
+ /* harmony export */ "nb": () => (/* binding */ selectTranslations),
2167
+ /* harmony export */ "sH": () => (/* binding */ selectResultsSortDirection),
2168
+ /* harmony export */ "uz": () => (/* binding */ selectAutoGroupTiles),
2169
+ /* harmony export */ "w1": () => (/* binding */ selectDictionary),
2170
+ /* harmony export */ "xU": () => (/* binding */ selectIsLoading),
2171
+ /* harmony export */ "yp": () => (/* binding */ selectCharacters),
2172
+ /* harmony export */ "z$": () => (/* binding */ selectResultCandidateTiles)
2173
+ /* harmony export */ });
2174
+ /* unused harmony exports selectCellFilter, selectResults, selectResultCandidate, selectResultCandidateCells, selectTranslation, selectLastSolvedParameters, selectHaveCharactersChanged, selectHasBoardChanged, selectRemainingTiles */
2175
+ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
2176
+ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
2177
+ /* harmony import */ var _scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(89418);
2178
+ /* harmony import */ var _scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1__);
2179
+ /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(34046);
2180
+ /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__);
2181
+ /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43898);
2182
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30459);
1991
2183
 
1992
2184
 
1993
2185
 
@@ -2006,49 +2198,59 @@ const selectSettingsRoot = (state)=>state.settings;
2006
2198
  const selectSolveRoot = (state)=>state.solve;
2007
2199
  const selectVerifyRoot = (state)=>state.verify;
2008
2200
  const selectDictionary = selectDictionaryRoot;
2009
- const selectDictionaryError = (0,toolkit_.createSelector)([
2201
+ const selectDictionaryError = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2010
2202
  selectDictionaryRoot
2011
2203
  ], (dictionary)=>{
2012
- return (0,types_build.isError)(dictionary.error) ? dictionary.error : undefined;
2204
+ return (0,_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__.isError)(dictionary.error) ? dictionary.error : undefined;
2013
2205
  });
2014
- const selectAutoGroupTiles = (0,toolkit_.createSelector)([
2206
+ const selectLocale = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2207
+ selectSettingsRoot
2208
+ ], (settings)=>settings.locale);
2209
+ const selectAutoGroupTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2015
2210
  selectSettingsRoot
2016
2211
  ], (settings)=>settings.autoGroupTiles);
2017
- const selectLocale = (0,toolkit_.createSelector)([
2212
+ const selectLocaleAutoGroupTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2213
+ selectLocale,
2018
2214
  selectSettingsRoot
2019
- ], (settings)=>settings.locale);
2215
+ ], (locale, settings)=>{
2216
+ if (i18n__WEBPACK_IMPORTED_MODULE_3__/* .LOCALE_FEATURES */ .q[locale].direction === "ltr" || settings.autoGroupTiles === null) {
2217
+ return settings.autoGroupTiles;
2218
+ }
2219
+ return settings.autoGroupTiles === "left" ? "right" : "left";
2220
+ });
2020
2221
  const selectBoard = selectBoardRoot;
2021
- const selectConfigId = (0,toolkit_.createSelector)([
2222
+ const selectConfigId = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2022
2223
  selectSettingsRoot
2023
2224
  ], (settings)=>settings.configId);
2024
- const selectConfig = (0,toolkit_.createSelector)([
2225
+ const selectConfig = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2025
2226
  selectConfigId,
2026
2227
  selectLocale
2027
- ], build.getLocaleConfig);
2228
+ ], _scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1__.getLocaleConfig);
2028
2229
  const selectCellFilter = selectCellFilterRoot;
2029
- const selectCellIsFiltered = (0,toolkit_.createSelector)([
2230
+ const selectCellIsFiltered = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2030
2231
  selectCellFilter,
2031
2232
  selectPoint
2032
2233
  ], (cellFilter, { x , y })=>{
2033
2234
  return cellFilter.some((cell)=>cell.x === x && cell.y === y);
2034
2235
  });
2035
- const selectResults = (0,toolkit_.createSelector)([
2236
+ const selectResults = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2036
2237
  selectResultsRoot
2037
2238
  ], (results)=>results.results);
2038
- const selectResultsQuery = (0,toolkit_.createSelector)([
2239
+ const selectResultsQuery = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2039
2240
  selectResultsRoot
2040
2241
  ], (results)=>results.query);
2041
- const selectResultsSortColumn = (0,toolkit_.createSelector)([
2242
+ const selectResultsSortColumn = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2042
2243
  selectResultsRoot
2043
2244
  ], (results)=>results.sort.column);
2044
- const selectResultsSortDirection = (0,toolkit_.createSelector)([
2245
+ const selectResultsSortDirection = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2045
2246
  selectResultsRoot
2046
2247
  ], (results)=>results.sort.direction);
2047
- const selectSortedResults = (0,toolkit_.createSelector)([
2248
+ const selectSortedResults = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2048
2249
  selectResults,
2049
2250
  selectResultsSortColumn,
2050
- selectResultsSortDirection
2051
- ], lib/* sortResults */.uj);
2251
+ selectResultsSortDirection,
2252
+ selectLocale
2253
+ ], lib__WEBPACK_IMPORTED_MODULE_4__/* .sortResults */ .uj);
2052
2254
  const filterResultsByQuery = (results, query)=>{
2053
2255
  if (query.trim().length === 0) {
2054
2256
  return results;
@@ -2064,7 +2266,7 @@ const filterResultsByQuery = (results, query)=>{
2064
2266
  return regExp.test(result.word);
2065
2267
  });
2066
2268
  };
2067
- const selectSortedFilteredResults = (0,toolkit_.createSelector)([
2269
+ const selectSortedFilteredResults = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2068
2270
  selectSortedResults,
2069
2271
  selectResultsQuery,
2070
2272
  selectCellFilter
@@ -2080,43 +2282,43 @@ const selectSortedFilteredResults = (0,toolkit_.createSelector)([
2080
2282
  return cellFilter.every(({ x , y })=>result.cells.some((cell)=>cell.x === x && cell.y === y));
2081
2283
  });
2082
2284
  });
2083
- const selectResultCandidate = (0,toolkit_.createSelector)([
2285
+ const selectResultCandidate = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2084
2286
  selectResultsRoot
2085
2287
  ], (results)=>results.candidate);
2086
- const selectResultCandidateCells = (0,toolkit_.createSelector)([
2288
+ const selectResultCandidateCells = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2087
2289
  selectResultCandidate
2088
2290
  ], (resultCandidate)=>resultCandidate?.cells || []);
2089
- const selectResultCandidateTiles = (0,toolkit_.createSelector)([
2291
+ const selectResultCandidateTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2090
2292
  selectResultCandidate
2091
2293
  ], (resultCandidate)=>resultCandidate?.tiles || []);
2092
- const selectRowsWithCandidate = (0,toolkit_.createSelector)([
2294
+ const selectRowsWithCandidate = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2093
2295
  selectBoardRoot,
2094
2296
  selectResultCandidateCells
2095
2297
  ], (board, cells)=>{
2096
- return board.rows.map((row, y)=>row.map((cell, x)=>(0,lib/* findCell */.Jp)(cells, x, y) || cell));
2298
+ return board.rows.map((row, y)=>row.map((cell, x)=>(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .findCell */ .Jp)(cells, x, y) || cell));
2097
2299
  });
2098
- const selectCellBonus = (0,toolkit_.createSelector)([
2300
+ const selectCellBonus = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2099
2301
  selectConfig,
2100
2302
  selectCell
2101
2303
  ], (config, cell)=>{
2102
2304
  return config.getCellBonus(cell);
2103
2305
  });
2104
- const selectCharacterPoints = (0,toolkit_.createSelector)([
2306
+ const selectCharacterPoints = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2105
2307
  selectConfig,
2106
2308
  selectCharacter
2107
2309
  ], (config, character)=>{
2108
2310
  return config.getCharacterPoints(character);
2109
2311
  });
2110
- const selectTilePoints = (0,toolkit_.createSelector)([
2312
+ const selectTilePoints = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2111
2313
  selectConfig,
2112
2314
  selectTile
2113
2315
  ], (config, tile)=>{
2114
2316
  return config.getTilePoints(tile);
2115
2317
  });
2116
- const selectTranslations = (0,toolkit_.createSelector)([
2318
+ const selectTranslations = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2117
2319
  selectLocale
2118
- ], (locale)=>src_i18n[locale]);
2119
- const selectTranslation = (0,toolkit_.createSelector)([
2320
+ ], (locale)=>i18n__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z[locale]);
2321
+ const selectTranslation = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2120
2322
  selectTranslations,
2121
2323
  selectLocale,
2122
2324
  (_, id)=>id
@@ -2128,47 +2330,49 @@ const selectTranslation = (0,toolkit_.createSelector)([
2128
2330
  return translation;
2129
2331
  });
2130
2332
  const selectRack = selectRackRoot;
2131
- const selectCharacters = (0,toolkit_.createSelector)(selectRackRoot, (rack)=>rack.filter((tile)=>tile !== null));
2132
- const selectLastSolvedParameters = (0,toolkit_.createSelector)([
2333
+ const selectCharacters = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectRackRoot, (rack)=>rack.filter((tile)=>tile !== null));
2334
+ const selectLastSolvedParameters = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2133
2335
  selectSolveRoot
2134
2336
  ], (solve)=>solve.lastSolvedParameters);
2135
- const selectIsLoading = (0,toolkit_.createSelector)([
2337
+ const selectIsLoading = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2136
2338
  selectSolveRoot
2137
2339
  ], (solve)=>solve.isLoading);
2138
- const selectSolveError = (0,toolkit_.createSelector)([
2340
+ const selectSolveError = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2139
2341
  selectSolveRoot
2140
2342
  ], (solve)=>{
2141
- return (0,types_build.isError)(solve.error) ? solve.error : undefined;
2343
+ return (0,_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__.isError)(solve.error) ? solve.error : undefined;
2142
2344
  });
2143
- const selectHaveCharactersChanged = (0,toolkit_.createSelector)([
2345
+ const selectHaveCharactersChanged = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2144
2346
  selectLastSolvedParameters,
2145
- selectCharacters
2146
- ], (lastSolvedParameters, characters)=>{
2147
- return !(0,lib/* unorderedArraysEqual */.DR)(lastSolvedParameters.characters, characters);
2347
+ selectCharacters,
2348
+ selectLocale
2349
+ ], (lastSolvedParameters, characters, locale)=>{
2350
+ return !(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .unorderedArraysEqual */ .DR)(lastSolvedParameters.characters, characters, locale);
2148
2351
  });
2149
- const selectHasBoardChanged = (0,toolkit_.createSelector)([
2352
+ const selectHasBoardChanged = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2150
2353
  selectLastSolvedParameters,
2151
2354
  selectBoardRoot
2152
2355
  ], (lastSolvedParameters, board)=>!lastSolvedParameters.board.equals(board));
2153
- const selectAreResultsOutdated = (0,toolkit_.createSelector)([
2356
+ const selectAreResultsOutdated = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2154
2357
  selectHasBoardChanged,
2155
2358
  selectHaveCharactersChanged
2156
2359
  ], (hasBoardChanged, haveCharactersChanged)=>hasBoardChanged || haveCharactersChanged);
2157
- const selectRemainingTiles = (0,toolkit_.createSelector)([
2360
+ const selectRemainingTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2158
2361
  selectConfig,
2159
2362
  selectBoardRoot,
2160
- selectCharacters
2161
- ], lib/* getRemainingTiles */.ZM);
2162
- const selectHasOverusedTiles = (0,toolkit_.createSelector)([
2363
+ selectCharacters,
2364
+ selectLocale
2365
+ ], lib__WEBPACK_IMPORTED_MODULE_4__/* .getRemainingTiles */ .ZM);
2366
+ const selectHasOverusedTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2163
2367
  selectRemainingTiles
2164
2368
  ], (remainingTiles)=>{
2165
2369
  return remainingTiles.some(({ count , usedCount })=>usedCount > count);
2166
2370
  });
2167
- const selectRemainingTilesGroups = (0,toolkit_.createSelector)([
2371
+ const selectRemainingTilesGroups = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2168
2372
  selectRemainingTiles
2169
- ], lib/* getRemainingTilesGroups */.op);
2373
+ ], lib__WEBPACK_IMPORTED_MODULE_4__/* .getRemainingTilesGroups */ .op);
2170
2374
  const selectVerify = selectVerifyRoot;
2171
- const selectHasInvalidWords = (0,toolkit_.createSelector)([
2375
+ const selectHasInvalidWords = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2172
2376
  selectVerify
2173
2377
  ], ({ invalidWords })=>{
2174
2378
  return invalidWords.length > 0;
@@ -2387,7 +2591,7 @@ const dictionarySlice = (0,toolkit_.createSlice)({
2387
2591
  /* harmony default export */ const slices_dictionarySlice = (dictionarySlice);
2388
2592
 
2389
2593
  // EXTERNAL MODULE: ./src/lib/index.ts + 29 modules
2390
- var lib = __webpack_require__(75558);
2594
+ var lib = __webpack_require__(30459);
2391
2595
  ;// CONCATENATED MODULE: ./src/state/slices/rackInitialState.ts
2392
2596
  const rackInitialState = [
2393
2597
  null,
@@ -2683,7 +2887,7 @@ const verifySlice = (0,toolkit_.createSlice)({
2683
2887
  /* harmony export */ });
2684
2888
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
2685
2889
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2686
- /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6114);
2890
+ /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(40897);
2687
2891
  /* harmony import */ var _useTypedSelector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(53872);
2688
2892
 
2689
2893
 
@@ -3239,6 +3443,7 @@ var Locale;
3239
3443
  Locale["EN_GB"] = "en-GB";
3240
3444
  Locale["EN_US"] = "en-US";
3241
3445
  Locale["ES_ES"] = "es-ES";
3446
+ Locale["FA_IR"] = "fa-IR";
3242
3447
  Locale["FR_FR"] = "fr-FR";
3243
3448
  Locale["PL_PL"] = "pl-PL";
3244
3449
  })(Locale || (Locale = {}));
@@ -3328,7 +3533,6 @@ class Result {
3328
3533
  this.points = points;
3329
3534
  this.pointsRatio = getPointsRatio(tiles, points);
3330
3535
  this.tiles = tiles;
3331
- this.tilesCharacters = getTilesCharacters(tiles);
3332
3536
  this.tilesCount = tiles.length;
3333
3537
  this.vowelsCount = getVowels(tiles).length;
3334
3538
  this.word = getWord(cells);
@@ -3352,15 +3556,11 @@ class Result {
3352
3556
  };
3353
3557
  }
3354
3558
  }
3355
- const charactersComparator = (a, b) => a.localeCompare(b);
3356
3559
  const getBlanks = (tiles) => tiles.filter(({ isBlank }) => isBlank);
3357
3560
  const getConsonants = (tiles) => tiles.filter(isConsonant);
3358
3561
  const getVowels = (tiles) => tiles.filter(isVowel);
3359
- const getNonBlankCharacters = (tiles) => getNonBlanks(tiles).map(({ character }) => character);
3360
- const getNonBlanks = (tiles) => tiles.filter(({ isBlank }) => !isBlank);
3361
3562
  const getPointsRatio = (tiles, points) => points / tiles.length;
3362
3563
  const getTiles = (cells) => cells.filter(({ isEmpty }) => isEmpty).map(({ tile }) => tile);
3363
- const getTilesCharacters = (tiles) => getNonBlankCharacters(tiles).sort(charactersComparator).join('');
3364
3564
  // eslint-disable-next-line prefer-template
3365
3565
  const getWord = (cells) => cells.reduce((word, cell) => word + cell.toString(), '');
3366
3566
  const getWords = (cells, collisions) => [cells, ...collisions].map(getWord);