@scrabble-solver/scrabble-solver 2.9.2 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) 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 +367 -185
  17. package/.next/server/chunks/44.js +71 -45
  18. package/.next/server/chunks/515.js +1135 -504
  19. package/.next/server/chunks/911.js +96 -2
  20. package/.next/server/middleware-build-manifest.js +1 -1
  21. package/.next/server/pages/404.html +2 -2
  22. package/.next/server/pages/404.js.nft.json +1 -1
  23. package/.next/server/pages/500.html +2 -2
  24. package/.next/server/pages/_app.js.nft.json +1 -1
  25. package/.next/server/pages/_error.js.nft.json +1 -1
  26. package/.next/server/pages/api/dictionary/[locale]/[word].js +48 -10
  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 +62 -49
  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 +4 -8
  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 +2 -2
  39. package/.next/static/chunks/368-d423e70be6c0c473.js +1 -0
  40. package/.next/static/chunks/pages/{404-7082923654d5996f.js → 404-932294135c3206dd.js} +1 -1
  41. package/.next/static/chunks/pages/_app-3f5508a5f544d9eb.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/vscqn7BEtAxJteWSwNnas/_buildManifest.js +1 -0
  47. package/.next/static/{Ntg-ilwD7GqTIFwRpSaTQ → vscqn7BEtAxJteWSwNnas}/_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 +4 -2
  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/Logo/Logo.svg +62 -0
  56. package/src/components/Logo/index.ts +1 -1
  57. package/src/components/NavButtons/NavButtons.module.scss +8 -7
  58. package/src/components/NavButtons/NavButtons.tsx +35 -28
  59. package/src/components/PlainTiles/PlainTiles.tsx +7 -1
  60. package/src/components/PlainTiles/Tile.tsx +4 -3
  61. package/src/components/Rack/Rack.tsx +4 -2
  62. package/src/components/Radio/Radio.module.scss +1 -1
  63. package/src/components/RemainingTiles/Character.tsx +7 -2
  64. package/src/components/RemainingTiles/RemainingTiles.tsx +28 -20
  65. package/src/components/Results/Cell.tsx +5 -3
  66. package/src/components/Results/Result.tsx +8 -3
  67. package/src/components/Results/Results.module.scss +31 -9
  68. package/src/components/Results/Results.tsx +6 -2
  69. package/src/components/Results/getColumns.ts +58 -0
  70. package/src/components/Settings/components/ConfigSetting/ConfigSetting.module.scss +1 -0
  71. package/src/components/Settings/components/LocaleSetting/LocaleSetting.module.scss +12 -1
  72. package/src/components/Settings/components/LocaleSetting/LocaleSetting.tsx +1 -1
  73. package/src/components/Settings/components/LocaleSetting/options.ts +7 -1
  74. package/src/components/Sidebar/Sidebar.module.scss +42 -8
  75. package/src/components/SvgFontCss/SvgFontCss.tsx +8 -7
  76. package/src/components/SvgFontCss/createCss.ts +11 -0
  77. package/src/components/SvgFontCss/createStyle.ts +9 -0
  78. package/src/components/SvgFontCss/createSvg.ts +10 -0
  79. package/src/components/SvgFontFix/SvgFontFix.module.scss +5 -0
  80. package/src/components/SvgFontFix/SvgFontFix.tsx +21 -0
  81. package/src/components/SvgFontFix/index.ts +1 -0
  82. package/src/components/Tile/Tile.module.scss +10 -2
  83. package/src/components/Tile/Tile.tsx +4 -0
  84. package/src/components/Tile/TilePure.tsx +3 -1
  85. package/src/components/Words/Words.tsx +4 -3
  86. package/src/components/index.ts +1 -0
  87. package/src/hooks/index.ts +2 -0
  88. package/src/hooks/useDirection.ts +22 -0
  89. package/src/hooks/useLanguage.ts +22 -0
  90. package/src/i18n/constants.ts +53 -0
  91. package/src/i18n/fa.json +56 -0
  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 +48 -23
  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/service-worker/routeVerifyRequests.ts +1 -1
  109. package/src/state/selectors.ts +5 -5
  110. package/src/styles/global.scss +6 -1
  111. package/.next/static/Ntg-ilwD7GqTIFwRpSaTQ/_buildManifest.js +0 -1
  112. package/.next/static/chunks/317-5e5334962dd7c681.js +0 -1
  113. package/.next/static/chunks/pages/_app-183f598b1d4d480b.js +0 -1
  114. package/.next/static/chunks/pages/index-b1ffeaddd9fb64b5.js +0 -1
  115. package/.next/static/css/751e8a14776d05d8.css +0 -1
  116. package/.next/static/css/ad2a08918868cad8.css +0 -1
  117. package/.next/static/css/e8de67ad5ea35427.css +0 -1
  118. package/src/components/Results/constants.ts +0 -42
  119. package/src/lib/comparator.ts +0 -16
  120. 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:
@@ -861,7 +955,104 @@ exports.VOWELS = ['a', 'ą', 'ä', 'e', 'ę', 'i', 'o', 'ó', 'ö', 'u', 'ü', '
861
955
 
862
956
  /***/ }),
863
957
 
864
- /***/ 75558:
958
+ /***/ 43898:
959
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
960
+
961
+
962
+ // EXPORTS
963
+ __webpack_require__.d(__webpack_exports__, {
964
+ "q": () => (/* reexport */ LOCALE_FEATURES),
965
+ "Z": () => (/* reexport */ i18n_i18n)
966
+ });
967
+
968
+ // EXTERNAL MODULE: ../types/build/index.js
969
+ var build = __webpack_require__(34046);
970
+ ;// CONCATENATED MODULE: ./src/i18n/de.json
971
+ 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"}');
972
+ ;// CONCATENATED MODULE: ./src/i18n/en.json
973
+ 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"}');
974
+ ;// CONCATENATED MODULE: ./src/i18n/es.json
975
+ 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"}');
976
+ ;// CONCATENATED MODULE: ./src/i18n/fa.json
977
+ 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":"معتبر"}');
978
+ ;// CONCATENATED MODULE: ./src/i18n/fr.json
979
+ 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"}');
980
+ ;// CONCATENATED MODULE: ./src/i18n/pl.json
981
+ 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"}');
982
+ ;// CONCATENATED MODULE: ./src/i18n/i18n.ts
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+ const i18n = {
991
+ [build.Locale.DE_DE]: de_namespaceObject,
992
+ [build.Locale.EN_GB]: en_namespaceObject,
993
+ [build.Locale.EN_US]: en_namespaceObject,
994
+ [build.Locale.ES_ES]: es_namespaceObject,
995
+ [build.Locale.FA_IR]: fa_namespaceObject,
996
+ [build.Locale.FR_FR]: fr_namespaceObject,
997
+ [build.Locale.PL_PL]: pl_namespaceObject
998
+ };
999
+ /* harmony default export */ const i18n_i18n = (i18n);
1000
+
1001
+ ;// CONCATENATED MODULE: ./src/i18n/constants.ts
1002
+
1003
+ const LOCALE_FEATURES = {
1004
+ [build.Locale.DE_DE]: {
1005
+ direction: "ltr",
1006
+ fontFamily: "Open Sans",
1007
+ consonants: true,
1008
+ vowels: true
1009
+ },
1010
+ [build.Locale.EN_GB]: {
1011
+ direction: "ltr",
1012
+ fontFamily: "Open Sans",
1013
+ consonants: true,
1014
+ vowels: true
1015
+ },
1016
+ [build.Locale.EN_US]: {
1017
+ direction: "ltr",
1018
+ fontFamily: "Open Sans",
1019
+ consonants: true,
1020
+ vowels: true
1021
+ },
1022
+ [build.Locale.ES_ES]: {
1023
+ direction: "ltr",
1024
+ fontFamily: "Open Sans",
1025
+ consonants: true,
1026
+ vowels: true
1027
+ },
1028
+ [build.Locale.FA_IR]: {
1029
+ direction: "rtl",
1030
+ fontFamily: "Vazirmatn",
1031
+ consonants: false,
1032
+ vowels: false
1033
+ },
1034
+ [build.Locale.FR_FR]: {
1035
+ direction: "ltr",
1036
+ fontFamily: "Open Sans",
1037
+ consonants: true,
1038
+ vowels: true
1039
+ },
1040
+ [build.Locale.PL_PL]: {
1041
+ direction: "ltr",
1042
+ fontFamily: "Open Sans",
1043
+ consonants: true,
1044
+ vowels: true
1045
+ }
1046
+ };
1047
+
1048
+ ;// CONCATENATED MODULE: ./src/i18n/index.ts
1049
+
1050
+
1051
+
1052
+
1053
+ /***/ }),
1054
+
1055
+ /***/ 30459:
865
1056
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
866
1057
 
867
1058
 
@@ -891,7 +1082,7 @@ __webpack_require__.d(__webpack_exports__, {
891
1082
  "gV": () => (/* reexport */ lib_zipCharactersAndTiles)
892
1083
  });
893
1084
 
894
- // UNUSED EXPORTS: comparator, createKeyComparator, getRemainingTilesCount, getTotalRemainingTilesCount, isStringArray, numberComparator, reverseComparator, stringComparator
1085
+ // UNUSED EXPORTS: createComparator, createKeyComparator, createStringComparator, getRemainingTilesCount, getTotalRemainingTilesCount, isStringArray, numberComparator, reverseComparator
895
1086
 
896
1087
  ;// CONCATENATED MODULE: ./src/lib/canUseDom.ts
897
1088
  const canUseDom = Boolean( false && 0);
@@ -968,6 +1159,9 @@ const detectLocale = ()=>{
968
1159
  if (window.navigator.languages.includes("en-GB")) {
969
1160
  return build.Locale.EN_GB;
970
1161
  }
1162
+ if (window.navigator.languages.includes("fa") || window.navigator.languages.includes("fa-IR")) {
1163
+ return build.Locale.FA_IR;
1164
+ }
971
1165
  if (window.navigator.languages.includes("fr-FR")) {
972
1166
  return build.Locale.FR_FR;
973
1167
  }
@@ -1030,23 +1224,24 @@ const getCellSize = (config, width, height)=>{
1030
1224
  };
1031
1225
  /* harmony default export */ const lib_getCellSize = (getCellSize);
1032
1226
 
1227
+ ;// CONCATENATED MODULE: ./src/lib/createStringComparator.ts
1228
+ const createStringComparator = (locale)=>(a, b)=>a.localeCompare(b, locale);
1229
+ /* harmony default export */ const lib_createStringComparator = (createStringComparator);
1230
+
1033
1231
  ;// CONCATENATED MODULE: ./src/lib/numberComparator.ts
1034
1232
  const numberComparator = (a, b)=>a - b;
1035
1233
  /* harmony default export */ const lib_numberComparator = (numberComparator);
1036
1234
 
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
1235
  ;// CONCATENATED MODULE: ./src/lib/createKeyComparator.ts
1042
1236
 
1043
1237
 
1044
- const createKeyComparator = (key)=>{
1238
+ const createKeyComparator = (key, locale)=>{
1239
+ const stringComparator = lib_createStringComparator(locale);
1045
1240
  return (a, b)=>{
1046
1241
  const aValue = a[key];
1047
1242
  const bValue = b[key];
1048
1243
  if (typeof aValue === "string" && typeof bValue === "string") {
1049
- return lib_stringComparator(aValue, bValue);
1244
+ return stringComparator(aValue, bValue);
1050
1245
  }
1051
1246
  if (typeof aValue === "number" && typeof bValue === "number") {
1052
1247
  return lib_numberComparator(aValue, bValue);
@@ -1059,7 +1254,7 @@ const createKeyComparator = (key)=>{
1059
1254
  ;// CONCATENATED MODULE: ./src/lib/getRemainingTiles.ts
1060
1255
 
1061
1256
 
1062
- const getRemainingTiles = (config, board, characters)=>{
1257
+ const getRemainingTiles = (config, board, characters, locale)=>{
1063
1258
  const nonEmptyCells = board.rows.flat().filter((cell)=>!cell.isEmpty);
1064
1259
  const letterCells = nonEmptyCells.filter((cell)=>!cell.tile.isBlank);
1065
1260
  const remainingTiles = Object.fromEntries(config.tiles.map((tile)=>[
@@ -1091,8 +1286,9 @@ const getRemainingTiles = (config, board, characters)=>{
1091
1286
  for (const letter1 of letters){
1092
1287
  ++remainingTiles[letter1].usedCount;
1093
1288
  }
1289
+ const comparator = lib_createKeyComparator("character", locale);
1094
1290
  return [
1095
- ...Object.values(remainingTiles).sort(lib_createKeyComparator("character")),
1291
+ ...Object.values(remainingTiles).sort(comparator),
1096
1292
  blank
1097
1293
  ];
1098
1294
  };
@@ -1115,38 +1311,52 @@ const getTotalRemainingTilesCount = (remainingTiles)=>{
1115
1311
 
1116
1312
 
1117
1313
  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
- {
1314
+ const consonants = remainingTiles.filter(isConsonant);
1315
+ const vowels = remainingTiles.filter(isVowel);
1316
+ const groups = [];
1317
+ if (consonants.length + vowels.length > 0) {
1318
+ groups.push({
1124
1319
  remainingCount: lib_getRemainingTilesCount(vowels),
1125
1320
  tiles: vowels,
1126
1321
  translationKey: "common.vowels",
1127
1322
  totalCount: lib_getTotalRemainingTilesCount(vowels)
1128
- },
1129
- {
1323
+ });
1324
+ groups.push({
1130
1325
  remainingCount: lib_getRemainingTilesCount(consonants),
1131
1326
  tiles: consonants,
1132
1327
  translationKey: "common.consonants",
1133
1328
  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
- ];
1329
+ });
1330
+ } else {
1331
+ const tiles = remainingTiles.filter(isLetter);
1332
+ groups.push({
1333
+ remainingCount: lib_getRemainingTilesCount(tiles),
1334
+ tiles,
1335
+ translationKey: "common.tiles",
1336
+ totalCount: lib_getTotalRemainingTilesCount(tiles)
1337
+ });
1338
+ }
1339
+ const twoCharacterTiles = remainingTiles.filter(isTwoCharacter);
1340
+ const blanks = remainingTiles.filter(isBlank);
1341
+ groups.push({
1342
+ remainingCount: lib_getRemainingTilesCount(twoCharacterTiles),
1343
+ tiles: twoCharacterTiles,
1344
+ translationKey: "common.two-letter-tiles",
1345
+ totalCount: lib_getTotalRemainingTilesCount(twoCharacterTiles)
1346
+ });
1347
+ groups.push({
1348
+ remainingCount: lib_getRemainingTilesCount(blanks),
1349
+ tiles: blanks,
1350
+ translationKey: "common.blanks",
1351
+ totalCount: lib_getTotalRemainingTilesCount(blanks)
1352
+ });
1148
1353
  return groups.filter(({ totalCount })=>totalCount > 0);
1149
1354
  };
1355
+ const isConsonant = (tile)=>constants_build.CONSONANTS.includes(tile.character);
1356
+ const isVowel = (tile)=>constants_build.VOWELS.includes(tile.character);
1357
+ const isLetter = (tile)=>!isBlank(tile) && !isTwoCharacter(tile);
1358
+ const isTwoCharacter = (tile)=>tile.character.length === 2;
1359
+ const isBlank = (tile)=>tile.character === constants_build.BLANK;
1150
1360
  /* harmony default export */ const lib_getRemainingTilesGroups = (getRemainingTilesGroups);
1151
1361
 
1152
1362
  ;// CONCATENATED MODULE: ./src/lib/getTileSizes.ts
@@ -1249,19 +1459,20 @@ const reverseComparator = (comparator)=>{
1249
1459
 
1250
1460
 
1251
1461
  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)=>{
1462
+ [types/* ResultColumn.BlanksCount */.M.BlanksCount]: (locale)=>lib_createKeyComparator("blanksCount", locale),
1463
+ [types/* ResultColumn.ConsonantsCount */.M.ConsonantsCount]: (locale)=>lib_createKeyComparator("consonantsCount", locale),
1464
+ [types/* ResultColumn.Points */.M.Points]: (locale)=>lib_createKeyComparator("points", locale),
1465
+ [types/* ResultColumn.TilesCount */.M.TilesCount]: (locale)=>lib_createKeyComparator("tilesCount", locale),
1466
+ [types/* ResultColumn.VowelsCount */.M.VowelsCount]: (locale)=>lib_createKeyComparator("vowelsCount", locale),
1467
+ [types/* ResultColumn.Word */.M.Word]: (locale)=>lib_createKeyComparator("word", locale),
1468
+ [types/* ResultColumn.WordsCount */.M.WordsCount]: (locale)=>lib_createKeyComparator("wordsCount", locale)
1469
+ };
1470
+ const sortResults = (results, column, sortDirection, locale)=>{
1261
1471
  if (typeof results === "undefined") {
1262
1472
  return results;
1263
1473
  }
1264
- const comparator = comparators[column];
1474
+ const createComparator = comparators[column];
1475
+ const comparator = createComparator(locale);
1265
1476
  const finalComparator = sortDirection === types/* SortDirection.Descending */.S.Descending ? lib_reverseComparator(comparator) : comparator;
1266
1477
  return [
1267
1478
  ...results
@@ -1269,32 +1480,36 @@ const sortResults = (results, column, sortDirection)=>{
1269
1480
  };
1270
1481
  /* harmony default export */ const lib_sortResults = (sortResults);
1271
1482
 
1272
- ;// CONCATENATED MODULE: ./src/lib/comparator.ts
1483
+ ;// CONCATENATED MODULE: ./src/lib/createComparator.ts
1273
1484
 
1274
1485
 
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;
1486
+ const createComparator = (locale)=>{
1487
+ const stringComparator = lib_createStringComparator(locale);
1488
+ return (a, b)=>{
1489
+ if (typeof a === "string" && typeof b === "string") {
1490
+ return stringComparator(a, b);
1491
+ }
1492
+ if (typeof a === "number" && typeof b === "number") {
1493
+ return lib_numberComparator(a, b);
1494
+ }
1495
+ return 0;
1496
+ };
1283
1497
  };
1284
- /* harmony default export */ const lib_comparator = (comparator);
1498
+ /* harmony default export */ const lib_createComparator = (createComparator);
1285
1499
 
1286
1500
  ;// CONCATENATED MODULE: ./src/lib/unorderedArraysEqual.ts
1287
1501
 
1288
- const unorderedArraysEqual = (a, b)=>{
1502
+ const unorderedArraysEqual = (a, b, locale)=>{
1289
1503
  if (a.length !== b.length) {
1290
1504
  return false;
1291
1505
  }
1506
+ const comparator = lib_createComparator(locale);
1292
1507
  const aSorted = [
1293
1508
  ...a
1294
- ].sort(lib_comparator);
1509
+ ].sort(comparator);
1295
1510
  const bSorted = [
1296
1511
  ...b
1297
- ].sort(lib_comparator);
1512
+ ].sort(comparator);
1298
1513
  return aSorted.every((character, index)=>character === bSorted[index]);
1299
1514
  };
1300
1515
  /* harmony default export */ const lib_unorderedArraysEqual = (unorderedArraysEqual);
@@ -1536,7 +1751,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1536
1751
  /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(89969);
1537
1752
  /* harmony import */ var _createAppStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(33282);
1538
1753
  /* harmony import */ var _localStorage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83773);
1539
- /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6114);
1754
+ /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(40897);
1540
1755
  /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99134);
1541
1756
  /* harmony import */ var _useTranslate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41573);
1542
1757
  /* harmony import */ var _useTypedSelector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(53872);
@@ -1650,7 +1865,7 @@ __webpack_require__.d(__webpack_exports__, {
1650
1865
  // EXTERNAL MODULE: external "redux-saga/effects"
1651
1866
  var effects_ = __webpack_require__(56477);
1652
1867
  // EXTERNAL MODULE: ./src/lib/index.ts + 29 modules
1653
- var lib = __webpack_require__(75558);
1868
+ var lib = __webpack_require__(30459);
1654
1869
  // EXTERNAL MODULE: ../types/build/index.js
1655
1870
  var build = __webpack_require__(34046);
1656
1871
  ;// CONCATENATED MODULE: ./src/sdk/fetch.ts
@@ -1748,8 +1963,8 @@ const visit = ()=>{
1748
1963
 
1749
1964
  // EXTERNAL MODULE: ./src/state/actions.ts
1750
1965
  var actions = __webpack_require__(89969);
1751
- // EXTERNAL MODULE: ./src/state/selectors.ts + 6 modules
1752
- var selectors = __webpack_require__(6114);
1966
+ // EXTERNAL MODULE: ./src/state/selectors.ts
1967
+ var selectors = __webpack_require__(40897);
1753
1968
  // EXTERNAL MODULE: ./src/state/slices/index.ts + 16 modules
1754
1969
  var slices = __webpack_require__(99134);
1755
1970
  ;// CONCATENATED MODULE: ./src/state/sagas.ts
@@ -1914,80 +2129,48 @@ function* ensureProperTilesCount() {
1914
2129
 
1915
2130
  /***/ }),
1916
2131
 
1917
- /***/ 6114:
2132
+ /***/ 40897:
1918
2133
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1919
2134
 
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
2135
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2136
+ /* harmony export */ "$o": () => (/* binding */ selectConfig),
2137
+ /* harmony export */ "En": () => (/* binding */ selectHasOverusedTiles),
2138
+ /* harmony export */ "HM": () => (/* binding */ selectVerify),
2139
+ /* harmony export */ "Mj": () => (/* binding */ selectAreResultsOutdated),
2140
+ /* harmony export */ "O0": () => (/* binding */ selectCellBonus),
2141
+ /* harmony export */ "Or": () => (/* binding */ selectCharacterPoints),
2142
+ /* harmony export */ "QB": () => (/* binding */ selectRack),
2143
+ /* harmony export */ "QL": () => (/* binding */ selectResultsQuery),
2144
+ /* harmony export */ "R": () => (/* binding */ selectResultsSortColumn),
2145
+ /* harmony export */ "Rn": () => (/* binding */ selectSolveError),
2146
+ /* harmony export */ "Yj": () => (/* binding */ selectRemainingTilesGroups),
2147
+ /* harmony export */ "ZA": () => (/* binding */ selectRowsWithCandidate),
2148
+ /* harmony export */ "ZO": () => (/* binding */ selectBoard),
2149
+ /* harmony export */ "Zf": () => (/* binding */ selectTilePoints),
2150
+ /* harmony export */ "bs": () => (/* binding */ selectHasInvalidWords),
2151
+ /* harmony export */ "dN": () => (/* binding */ selectSortedFilteredResults),
2152
+ /* harmony export */ "f2": () => (/* binding */ selectSortedResults),
2153
+ /* harmony export */ "fN": () => (/* binding */ selectLocale),
2154
+ /* harmony export */ "id": () => (/* binding */ selectCellIsFiltered),
2155
+ /* harmony export */ "mK": () => (/* binding */ selectDictionaryError),
2156
+ /* harmony export */ "md": () => (/* binding */ selectConfigId),
2157
+ /* harmony export */ "nb": () => (/* binding */ selectTranslations),
2158
+ /* harmony export */ "sH": () => (/* binding */ selectResultsSortDirection),
2159
+ /* harmony export */ "uz": () => (/* binding */ selectAutoGroupTiles),
2160
+ /* harmony export */ "w1": () => (/* binding */ selectDictionary),
2161
+ /* harmony export */ "xU": () => (/* binding */ selectIsLoading),
2162
+ /* harmony export */ "yp": () => (/* binding */ selectCharacters),
2163
+ /* harmony export */ "z$": () => (/* binding */ selectResultCandidateTiles)
2164
+ /* harmony export */ });
2165
+ /* unused harmony exports selectCellFilter, selectResults, selectResultCandidate, selectResultCandidateCells, selectTranslation, selectLastSolvedParameters, selectHaveCharactersChanged, selectHasBoardChanged, selectRemainingTiles */
2166
+ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
2167
+ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
2168
+ /* harmony import */ var _scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(89418);
2169
+ /* harmony import */ var _scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1__);
2170
+ /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(34046);
2171
+ /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__);
2172
+ /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43898);
2173
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30459);
1991
2174
 
1992
2175
 
1993
2176
 
@@ -2006,49 +2189,50 @@ const selectSettingsRoot = (state)=>state.settings;
2006
2189
  const selectSolveRoot = (state)=>state.solve;
2007
2190
  const selectVerifyRoot = (state)=>state.verify;
2008
2191
  const selectDictionary = selectDictionaryRoot;
2009
- const selectDictionaryError = (0,toolkit_.createSelector)([
2192
+ const selectDictionaryError = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2010
2193
  selectDictionaryRoot
2011
2194
  ], (dictionary)=>{
2012
- return (0,types_build.isError)(dictionary.error) ? dictionary.error : undefined;
2195
+ return (0,_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__.isError)(dictionary.error) ? dictionary.error : undefined;
2013
2196
  });
2014
- const selectAutoGroupTiles = (0,toolkit_.createSelector)([
2197
+ const selectAutoGroupTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2015
2198
  selectSettingsRoot
2016
2199
  ], (settings)=>settings.autoGroupTiles);
2017
- const selectLocale = (0,toolkit_.createSelector)([
2200
+ const selectLocale = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2018
2201
  selectSettingsRoot
2019
2202
  ], (settings)=>settings.locale);
2020
2203
  const selectBoard = selectBoardRoot;
2021
- const selectConfigId = (0,toolkit_.createSelector)([
2204
+ const selectConfigId = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2022
2205
  selectSettingsRoot
2023
2206
  ], (settings)=>settings.configId);
2024
- const selectConfig = (0,toolkit_.createSelector)([
2207
+ const selectConfig = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2025
2208
  selectConfigId,
2026
2209
  selectLocale
2027
- ], build.getLocaleConfig);
2210
+ ], _scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1__.getLocaleConfig);
2028
2211
  const selectCellFilter = selectCellFilterRoot;
2029
- const selectCellIsFiltered = (0,toolkit_.createSelector)([
2212
+ const selectCellIsFiltered = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2030
2213
  selectCellFilter,
2031
2214
  selectPoint
2032
2215
  ], (cellFilter, { x , y })=>{
2033
2216
  return cellFilter.some((cell)=>cell.x === x && cell.y === y);
2034
2217
  });
2035
- const selectResults = (0,toolkit_.createSelector)([
2218
+ const selectResults = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2036
2219
  selectResultsRoot
2037
2220
  ], (results)=>results.results);
2038
- const selectResultsQuery = (0,toolkit_.createSelector)([
2221
+ const selectResultsQuery = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2039
2222
  selectResultsRoot
2040
2223
  ], (results)=>results.query);
2041
- const selectResultsSortColumn = (0,toolkit_.createSelector)([
2224
+ const selectResultsSortColumn = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2042
2225
  selectResultsRoot
2043
2226
  ], (results)=>results.sort.column);
2044
- const selectResultsSortDirection = (0,toolkit_.createSelector)([
2227
+ const selectResultsSortDirection = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2045
2228
  selectResultsRoot
2046
2229
  ], (results)=>results.sort.direction);
2047
- const selectSortedResults = (0,toolkit_.createSelector)([
2230
+ const selectSortedResults = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2048
2231
  selectResults,
2049
2232
  selectResultsSortColumn,
2050
- selectResultsSortDirection
2051
- ], lib/* sortResults */.uj);
2233
+ selectResultsSortDirection,
2234
+ selectLocale
2235
+ ], lib__WEBPACK_IMPORTED_MODULE_4__/* .sortResults */ .uj);
2052
2236
  const filterResultsByQuery = (results, query)=>{
2053
2237
  if (query.trim().length === 0) {
2054
2238
  return results;
@@ -2064,7 +2248,7 @@ const filterResultsByQuery = (results, query)=>{
2064
2248
  return regExp.test(result.word);
2065
2249
  });
2066
2250
  };
2067
- const selectSortedFilteredResults = (0,toolkit_.createSelector)([
2251
+ const selectSortedFilteredResults = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2068
2252
  selectSortedResults,
2069
2253
  selectResultsQuery,
2070
2254
  selectCellFilter
@@ -2080,43 +2264,43 @@ const selectSortedFilteredResults = (0,toolkit_.createSelector)([
2080
2264
  return cellFilter.every(({ x , y })=>result.cells.some((cell)=>cell.x === x && cell.y === y));
2081
2265
  });
2082
2266
  });
2083
- const selectResultCandidate = (0,toolkit_.createSelector)([
2267
+ const selectResultCandidate = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2084
2268
  selectResultsRoot
2085
2269
  ], (results)=>results.candidate);
2086
- const selectResultCandidateCells = (0,toolkit_.createSelector)([
2270
+ const selectResultCandidateCells = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2087
2271
  selectResultCandidate
2088
2272
  ], (resultCandidate)=>resultCandidate?.cells || []);
2089
- const selectResultCandidateTiles = (0,toolkit_.createSelector)([
2273
+ const selectResultCandidateTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2090
2274
  selectResultCandidate
2091
2275
  ], (resultCandidate)=>resultCandidate?.tiles || []);
2092
- const selectRowsWithCandidate = (0,toolkit_.createSelector)([
2276
+ const selectRowsWithCandidate = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2093
2277
  selectBoardRoot,
2094
2278
  selectResultCandidateCells
2095
2279
  ], (board, cells)=>{
2096
- return board.rows.map((row, y)=>row.map((cell, x)=>(0,lib/* findCell */.Jp)(cells, x, y) || cell));
2280
+ return board.rows.map((row, y)=>row.map((cell, x)=>(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .findCell */ .Jp)(cells, x, y) || cell));
2097
2281
  });
2098
- const selectCellBonus = (0,toolkit_.createSelector)([
2282
+ const selectCellBonus = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2099
2283
  selectConfig,
2100
2284
  selectCell
2101
2285
  ], (config, cell)=>{
2102
2286
  return config.getCellBonus(cell);
2103
2287
  });
2104
- const selectCharacterPoints = (0,toolkit_.createSelector)([
2288
+ const selectCharacterPoints = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2105
2289
  selectConfig,
2106
2290
  selectCharacter
2107
2291
  ], (config, character)=>{
2108
2292
  return config.getCharacterPoints(character);
2109
2293
  });
2110
- const selectTilePoints = (0,toolkit_.createSelector)([
2294
+ const selectTilePoints = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2111
2295
  selectConfig,
2112
2296
  selectTile
2113
2297
  ], (config, tile)=>{
2114
2298
  return config.getTilePoints(tile);
2115
2299
  });
2116
- const selectTranslations = (0,toolkit_.createSelector)([
2300
+ const selectTranslations = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2117
2301
  selectLocale
2118
- ], (locale)=>src_i18n[locale]);
2119
- const selectTranslation = (0,toolkit_.createSelector)([
2302
+ ], (locale)=>i18n__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z[locale]);
2303
+ const selectTranslation = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2120
2304
  selectTranslations,
2121
2305
  selectLocale,
2122
2306
  (_, id)=>id
@@ -2128,47 +2312,49 @@ const selectTranslation = (0,toolkit_.createSelector)([
2128
2312
  return translation;
2129
2313
  });
2130
2314
  const selectRack = selectRackRoot;
2131
- const selectCharacters = (0,toolkit_.createSelector)(selectRackRoot, (rack)=>rack.filter((tile)=>tile !== null));
2132
- const selectLastSolvedParameters = (0,toolkit_.createSelector)([
2315
+ const selectCharacters = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectRackRoot, (rack)=>rack.filter((tile)=>tile !== null));
2316
+ const selectLastSolvedParameters = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2133
2317
  selectSolveRoot
2134
2318
  ], (solve)=>solve.lastSolvedParameters);
2135
- const selectIsLoading = (0,toolkit_.createSelector)([
2319
+ const selectIsLoading = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2136
2320
  selectSolveRoot
2137
2321
  ], (solve)=>solve.isLoading);
2138
- const selectSolveError = (0,toolkit_.createSelector)([
2322
+ const selectSolveError = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2139
2323
  selectSolveRoot
2140
2324
  ], (solve)=>{
2141
- return (0,types_build.isError)(solve.error) ? solve.error : undefined;
2325
+ return (0,_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_2__.isError)(solve.error) ? solve.error : undefined;
2142
2326
  });
2143
- const selectHaveCharactersChanged = (0,toolkit_.createSelector)([
2327
+ const selectHaveCharactersChanged = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2144
2328
  selectLastSolvedParameters,
2145
- selectCharacters
2146
- ], (lastSolvedParameters, characters)=>{
2147
- return !(0,lib/* unorderedArraysEqual */.DR)(lastSolvedParameters.characters, characters);
2329
+ selectCharacters,
2330
+ selectLocale
2331
+ ], (lastSolvedParameters, characters, locale)=>{
2332
+ return !(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .unorderedArraysEqual */ .DR)(lastSolvedParameters.characters, characters, locale);
2148
2333
  });
2149
- const selectHasBoardChanged = (0,toolkit_.createSelector)([
2334
+ const selectHasBoardChanged = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2150
2335
  selectLastSolvedParameters,
2151
2336
  selectBoardRoot
2152
2337
  ], (lastSolvedParameters, board)=>!lastSolvedParameters.board.equals(board));
2153
- const selectAreResultsOutdated = (0,toolkit_.createSelector)([
2338
+ const selectAreResultsOutdated = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2154
2339
  selectHasBoardChanged,
2155
2340
  selectHaveCharactersChanged
2156
2341
  ], (hasBoardChanged, haveCharactersChanged)=>hasBoardChanged || haveCharactersChanged);
2157
- const selectRemainingTiles = (0,toolkit_.createSelector)([
2342
+ const selectRemainingTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2158
2343
  selectConfig,
2159
2344
  selectBoardRoot,
2160
- selectCharacters
2161
- ], lib/* getRemainingTiles */.ZM);
2162
- const selectHasOverusedTiles = (0,toolkit_.createSelector)([
2345
+ selectCharacters,
2346
+ selectLocale
2347
+ ], lib__WEBPACK_IMPORTED_MODULE_4__/* .getRemainingTiles */ .ZM);
2348
+ const selectHasOverusedTiles = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2163
2349
  selectRemainingTiles
2164
2350
  ], (remainingTiles)=>{
2165
2351
  return remainingTiles.some(({ count , usedCount })=>usedCount > count);
2166
2352
  });
2167
- const selectRemainingTilesGroups = (0,toolkit_.createSelector)([
2353
+ const selectRemainingTilesGroups = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2168
2354
  selectRemainingTiles
2169
- ], lib/* getRemainingTilesGroups */.op);
2355
+ ], lib__WEBPACK_IMPORTED_MODULE_4__/* .getRemainingTilesGroups */ .op);
2170
2356
  const selectVerify = selectVerifyRoot;
2171
- const selectHasInvalidWords = (0,toolkit_.createSelector)([
2357
+ const selectHasInvalidWords = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)([
2172
2358
  selectVerify
2173
2359
  ], ({ invalidWords })=>{
2174
2360
  return invalidWords.length > 0;
@@ -2387,7 +2573,7 @@ const dictionarySlice = (0,toolkit_.createSlice)({
2387
2573
  /* harmony default export */ const slices_dictionarySlice = (dictionarySlice);
2388
2574
 
2389
2575
  // EXTERNAL MODULE: ./src/lib/index.ts + 29 modules
2390
- var lib = __webpack_require__(75558);
2576
+ var lib = __webpack_require__(30459);
2391
2577
  ;// CONCATENATED MODULE: ./src/state/slices/rackInitialState.ts
2392
2578
  const rackInitialState = [
2393
2579
  null,
@@ -2683,7 +2869,7 @@ const verifySlice = (0,toolkit_.createSlice)({
2683
2869
  /* harmony export */ });
2684
2870
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
2685
2871
  /* 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);
2872
+ /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(40897);
2687
2873
  /* harmony import */ var _useTypedSelector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(53872);
2688
2874
 
2689
2875
 
@@ -3239,6 +3425,7 @@ var Locale;
3239
3425
  Locale["EN_GB"] = "en-GB";
3240
3426
  Locale["EN_US"] = "en-US";
3241
3427
  Locale["ES_ES"] = "es-ES";
3428
+ Locale["FA_IR"] = "fa-IR";
3242
3429
  Locale["FR_FR"] = "fr-FR";
3243
3430
  Locale["PL_PL"] = "pl-PL";
3244
3431
  })(Locale || (Locale = {}));
@@ -3328,7 +3515,6 @@ class Result {
3328
3515
  this.points = points;
3329
3516
  this.pointsRatio = getPointsRatio(tiles, points);
3330
3517
  this.tiles = tiles;
3331
- this.tilesCharacters = getTilesCharacters(tiles);
3332
3518
  this.tilesCount = tiles.length;
3333
3519
  this.vowelsCount = getVowels(tiles).length;
3334
3520
  this.word = getWord(cells);
@@ -3352,15 +3538,11 @@ class Result {
3352
3538
  };
3353
3539
  }
3354
3540
  }
3355
- const charactersComparator = (a, b) => a.localeCompare(b);
3356
3541
  const getBlanks = (tiles) => tiles.filter(({ isBlank }) => isBlank);
3357
3542
  const getConsonants = (tiles) => tiles.filter(isConsonant);
3358
3543
  const getVowels = (tiles) => tiles.filter(isVowel);
3359
- const getNonBlankCharacters = (tiles) => getNonBlanks(tiles).map(({ character }) => character);
3360
- const getNonBlanks = (tiles) => tiles.filter(({ isBlank }) => !isBlank);
3361
3544
  const getPointsRatio = (tiles, points) => points / tiles.length;
3362
3545
  const getTiles = (cells) => cells.filter(({ isEmpty }) => isEmpty).map(({ tile }) => tile);
3363
- const getTilesCharacters = (tiles) => getNonBlankCharacters(tiles).sort(charactersComparator).join('');
3364
3546
  // eslint-disable-next-line prefer-template
3365
3547
  const getWord = (cells) => cells.reduce((word, cell) => word + cell.toString(), '');
3366
3548
  const getWords = (cells, collisions) => [cells, ...collisions].map(getWord);