@scrabble-solver/scrabble-solver 2.8.8 → 2.8.9

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 (83) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +10 -10
  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/server-production/0.pack +0 -0
  9. package/.next/cache/webpack/server-production/index.pack +0 -0
  10. package/.next/next-server.js.nft.json +1 -1
  11. package/.next/prerender-manifest.json +1 -1
  12. package/.next/routes-manifest.json +1 -1
  13. package/.next/server/chunks/413.js +179 -44
  14. package/.next/server/chunks/44.js +802 -0
  15. package/.next/server/chunks/515.js +359 -95
  16. package/.next/server/chunks/911.js +53 -23
  17. package/.next/server/middleware-build-manifest.js +1 -1
  18. package/.next/server/pages/404.html +2 -2
  19. package/.next/server/pages/404.js.nft.json +1 -1
  20. package/.next/server/pages/500.html +2 -2
  21. package/.next/server/pages/_app.js.nft.json +1 -1
  22. package/.next/server/pages/_error.js.nft.json +1 -1
  23. package/.next/server/pages/api/solve.js +193 -927
  24. package/.next/server/pages/api/solve.js.nft.json +1 -1
  25. package/.next/server/pages/api/verify.js +217 -0
  26. package/.next/server/pages/api/verify.js.nft.json +1 -0
  27. package/.next/server/pages/index.html +3 -3
  28. package/.next/server/pages/index.js +7 -1
  29. package/.next/server/pages/index.js.nft.json +1 -1
  30. package/.next/server/pages/index.json +1 -1
  31. package/.next/server/pages-manifest.json +1 -0
  32. package/.next/static/chunks/317-a33dd38e9b9a17ed.js +1 -0
  33. package/.next/static/chunks/pages/{404-8eb3ba4f0ba17e08.js → 404-90c624da3c83fd17.js} +1 -1
  34. package/.next/static/chunks/pages/_app-f8f360878e1c2aff.js +1 -0
  35. package/.next/static/chunks/pages/index-ecea697d3e5d8a6f.js +1 -0
  36. package/.next/static/css/64dc2ce1811912f1.css +1 -0
  37. package/.next/static/css/{cdbc9e0afcff5473.css → ad2a08918868cad8.css} +1 -1
  38. package/.next/static/yCxjzzYpw5JjJE53PO_s6/_buildManifest.js +1 -0
  39. package/.next/static/{z3J3qmq1nazbDv_ENIkCo → yCxjzzYpw5JjJE53PO_s6}/_ssgManifest.js +0 -0
  40. package/.next/trace +42 -41
  41. package/package.json +9 -9
  42. package/src/components/Badge/Badge.module.scss +13 -0
  43. package/src/components/Badge/Badge.tsx +15 -0
  44. package/src/components/Badge/index.ts +1 -0
  45. package/src/components/NavButtons/NavButtons.tsx +33 -14
  46. package/src/components/RemainingTiles/RemainingTiles.module.scss +8 -7
  47. package/src/components/RemainingTiles/RemainingTiles.tsx +13 -4
  48. package/src/components/Sidebar/Sidebar.tsx +2 -2
  49. package/src/components/Sidebar/components/Section/Section.module.scss +0 -1
  50. package/src/components/Sidebar/components/Section/Section.tsx +1 -1
  51. package/src/components/SquareButton/SquareButton.module.scss +5 -0
  52. package/src/components/Words/Words.module.scss +35 -0
  53. package/src/components/Words/Words.tsx +57 -0
  54. package/src/components/Words/index.ts +1 -0
  55. package/src/components/index.ts +2 -0
  56. package/src/i18n/de.json +4 -1
  57. package/src/i18n/en.json +4 -1
  58. package/src/i18n/es.json +4 -1
  59. package/src/i18n/fr.json +4 -1
  60. package/src/i18n/pl.json +4 -1
  61. package/src/icons/BookHalf.svg +4 -0
  62. package/src/icons/Check.svg +4 -0
  63. package/src/icons/Cross.svg +2 -2
  64. package/src/icons/CrossFill.svg +4 -0
  65. package/src/icons/index.ts +3 -0
  66. package/src/pages/api/solve.ts +2 -3
  67. package/src/pages/api/verify.ts +71 -0
  68. package/src/pages/index.tsx +5 -0
  69. package/src/sdk/index.ts +1 -0
  70. package/src/sdk/verify.ts +24 -0
  71. package/src/state/rootReducer.ts +2 -0
  72. package/src/state/sagas.ts +33 -6
  73. package/src/state/selectors.ts +8 -0
  74. package/src/state/slices/index.ts +2 -0
  75. package/src/state/slices/verifyInitialState.ts +12 -0
  76. package/src/state/slices/verifySlice.ts +31 -0
  77. package/src/styles/variables.scss +2 -1
  78. package/src/types/index.ts +4 -1
  79. package/.next/static/chunks/615-d258f6c528c18622.js +0 -1
  80. package/.next/static/chunks/pages/_app-4a663fd3d5ca4524.js +0 -1
  81. package/.next/static/chunks/pages/index-1a9826d740cc8830.js +0 -1
  82. package/.next/static/css/180c6c26317ac90f.css +0 -1
  83. package/.next/static/z3J3qmq1nazbDv_ENIkCo/_buildManifest.js +0 -1
@@ -1416,7 +1416,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1416
1416
  /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(redux__WEBPACK_IMPORTED_MODULE_0__);
1417
1417
  /* harmony import */ var redux_saga__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(75998);
1418
1418
  /* harmony import */ var _rootReducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12935);
1419
- /* harmony import */ var _sagas__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(58531);
1419
+ /* harmony import */ var _sagas__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21701);
1420
1420
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([redux_saga__WEBPACK_IMPORTED_MODULE_1__]);
1421
1421
  redux_saga__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
1422
1422
 
@@ -1445,6 +1445,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1445
1445
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1446
1446
  /* harmony export */ "$o": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.$o),
1447
1447
  /* harmony export */ "En": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.En),
1448
+ /* harmony export */ "HM": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.HM),
1448
1449
  /* harmony export */ "I8": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__.I8),
1449
1450
  /* harmony export */ "Mj": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Mj),
1450
1451
  /* harmony export */ "O0": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.O0),
@@ -1460,6 +1461,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1460
1461
  /* harmony export */ "ZO": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.ZO),
1461
1462
  /* harmony export */ "Zf": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Zf),
1462
1463
  /* harmony export */ "_C": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__._C),
1464
+ /* harmony export */ "bs": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.bs),
1463
1465
  /* harmony export */ "dN": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.dN),
1464
1466
  /* harmony export */ "f2": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.f2),
1465
1467
  /* harmony export */ "fN": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.fN),
@@ -1483,7 +1485,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1483
1485
  /* harmony import */ var _createAppStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(33282);
1484
1486
  /* harmony import */ var _localStorage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83773);
1485
1487
  /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6114);
1486
- /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8772);
1488
+ /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99134);
1487
1489
  /* harmony import */ var _useTranslate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41573);
1488
1490
  /* harmony import */ var _useTypedSelector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(53872);
1489
1491
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_createAppStore__WEBPACK_IMPORTED_MODULE_1__]);
@@ -1566,7 +1568,7 @@ const localStorage = {
1566
1568
  /* harmony export */ });
1567
1569
  /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86695);
1568
1570
  /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(redux__WEBPACK_IMPORTED_MODULE_0__);
1569
- /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8772);
1571
+ /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99134);
1570
1572
 
1571
1573
 
1572
1574
  const rootReducer = (0,redux__WEBPACK_IMPORTED_MODULE_0__.combineReducers)({
@@ -1576,14 +1578,15 @@ const rootReducer = (0,redux__WEBPACK_IMPORTED_MODULE_0__.combineReducers)({
1576
1578
  rack: _slices__WEBPACK_IMPORTED_MODULE_1__/* .rackSlice.reducer */ .O_.reducer,
1577
1579
  results: _slices__WEBPACK_IMPORTED_MODULE_1__/* .resultsSlice.reducer */ ._C.reducer,
1578
1580
  settings: _slices__WEBPACK_IMPORTED_MODULE_1__/* .settingsSlice.reducer */ .xj.reducer,
1579
- solve: _slices__WEBPACK_IMPORTED_MODULE_1__/* .solveSlice.reducer */ .TP.reducer
1581
+ solve: _slices__WEBPACK_IMPORTED_MODULE_1__/* .solveSlice.reducer */ .TP.reducer,
1582
+ verify: _slices__WEBPACK_IMPORTED_MODULE_1__/* .verifySlice.reducer */ .Gt.reducer
1580
1583
  });
1581
1584
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (rootReducer);
1582
1585
 
1583
1586
 
1584
1587
  /***/ }),
1585
1588
 
1586
- /***/ 58531:
1589
+ /***/ 21701:
1587
1590
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1588
1591
 
1589
1592
 
@@ -1624,6 +1627,22 @@ const solve = ({ board , characters , configId , locale })=>{
1624
1627
  };
1625
1628
  /* harmony default export */ const sdk_solve = (solve);
1626
1629
 
1630
+ ;// CONCATENATED MODULE: ./src/sdk/verify.ts
1631
+ const verify = ({ board , configId , locale })=>{
1632
+ return fetch("/api/verify", {
1633
+ method: "POST",
1634
+ headers: {
1635
+ "Content-Type": "application/json"
1636
+ },
1637
+ body: JSON.stringify({
1638
+ board,
1639
+ configId,
1640
+ locale
1641
+ })
1642
+ }).then((response)=>response.json());
1643
+ };
1644
+ /* harmony default export */ const sdk_verify = (verify);
1645
+
1627
1646
  ;// CONCATENATED MODULE: ./src/sdk/visit.ts
1628
1647
  const visit = ()=>{
1629
1648
  return fetch("/api/visit", {
@@ -1637,12 +1656,13 @@ const visit = ()=>{
1637
1656
 
1638
1657
 
1639
1658
 
1659
+
1640
1660
  // EXTERNAL MODULE: ./src/state/actions.ts
1641
1661
  var actions = __webpack_require__(89969);
1642
1662
  // EXTERNAL MODULE: ./src/state/selectors.ts + 6 modules
1643
1663
  var selectors = __webpack_require__(6114);
1644
- // EXTERNAL MODULE: ./src/state/slices/index.ts + 14 modules
1645
- var slices = __webpack_require__(8772);
1664
+ // EXTERNAL MODULE: ./src/state/slices/index.ts + 16 modules
1665
+ var slices = __webpack_require__(99134);
1646
1666
  ;// CONCATENATED MODULE: ./src/state/sagas.ts
1647
1667
 
1648
1668
 
@@ -1662,13 +1682,15 @@ function* rootSaga() {
1662
1682
  yield (0,effects_.takeLatest)(slices/* dictionarySlice.actions.submit.type */.lj.actions.submit.type, onDictionarySubmit);
1663
1683
  yield (0,effects_.takeLatest)(actions/* initialize.type */.j.type, onInitialize);
1664
1684
  yield (0,effects_.takeLatest)(actions/* reset.type */.m.type, onReset);
1665
- yield (0,effects_.takeLatest)(slices/* solveSlice.actions.submit.type */.TP.actions.submit.type, onSubmit);
1685
+ yield (0,effects_.takeLatest)(slices/* solveSlice.actions.submit.type */.TP.actions.submit.type, onSolve);
1686
+ yield (0,effects_.takeLatest)(slices/* verifySlice.actions.submit.type */.Gt.actions.submit.type, onVerify);
1666
1687
  }
1667
1688
  function* onCellValueChange({ payload }) {
1668
1689
  const isFiltered = yield (0,effects_.select)((state)=>(0,selectors/* selectCellIsFiltered */.id)(state, payload));
1669
1690
  if (isFiltered) {
1670
1691
  yield (0,effects_.put)(slices/* cellFilterSlice.actions.toggle */.mO.actions.toggle(payload));
1671
1692
  }
1693
+ yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1672
1694
  }
1673
1695
  function* onApplyResult({ payload: result }) {
1674
1696
  const autoGroupTiles = yield (0,effects_.select)(selectors/* selectAutoGroupTiles */.uz);
@@ -1676,10 +1698,12 @@ function* onApplyResult({ payload: result }) {
1676
1698
  yield (0,effects_.put)(slices/* cellFilterSlice.actions.reset */.mO.actions.reset());
1677
1699
  yield (0,effects_.put)(slices/* rackSlice.actions.removeTiles */.O_.actions.removeTiles(result.tiles));
1678
1700
  yield (0,effects_.put)(slices/* rackSlice.actions.groupTiles */.O_.actions.groupTiles(autoGroupTiles));
1701
+ yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1679
1702
  }
1680
1703
  function* onConfigIdChange() {
1681
1704
  yield (0,effects_.put)(slices/* resultsSlice.actions.reset */._C.actions.reset());
1682
1705
  yield (0,effects_.put)(slices/* solveSlice.actions.submit */.TP.actions.submit());
1706
+ yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1683
1707
  yield* ensureProperTilesCount();
1684
1708
  }
1685
1709
  function* onDictionarySubmit() {
@@ -1705,11 +1729,13 @@ function* onReset() {
1705
1729
  yield (0,effects_.put)(slices/* dictionarySlice.actions.reset */.lj.actions.reset());
1706
1730
  yield (0,effects_.put)(slices/* rackSlice.actions.reset */.O_.actions.reset());
1707
1731
  yield (0,effects_.put)(slices/* resultsSlice.actions.reset */._C.actions.reset());
1732
+ yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1708
1733
  }
1709
1734
  function* onLocaleChange() {
1710
- yield (0,effects_.put)(slices/* solveSlice.actions.submit */.TP.actions.submit());
1711
- yield (0,effects_.put)(slices/* resultsSlice.actions.changeResultCandidate */._C.actions.changeResultCandidate(null));
1712
1735
  yield (0,effects_.put)(slices/* dictionarySlice.actions.reset */.lj.actions.reset());
1736
+ yield (0,effects_.put)(slices/* resultsSlice.actions.changeResultCandidate */._C.actions.changeResultCandidate(null));
1737
+ yield (0,effects_.put)(slices/* solveSlice.actions.submit */.TP.actions.submit());
1738
+ yield (0,effects_.put)(slices/* verifySlice.actions.submit */.Gt.actions.submit());
1713
1739
  }
1714
1740
  function* onResultCandidateChange({ payload: result }) {
1715
1741
  if (result) {
@@ -1717,7 +1743,7 @@ function* onResultCandidateChange({ payload: result }) {
1717
1743
  yield (0,effects_.put)(slices/* dictionarySlice.actions.submit */.lj.actions.submit());
1718
1744
  }
1719
1745
  }
1720
- function* onSubmit() {
1746
+ function* onSolve() {
1721
1747
  const board = yield (0,effects_.select)(selectors/* selectBoard */.ZO);
1722
1748
  const { config } = yield (0,effects_.select)(selectors/* selectConfig */.$o);
1723
1749
  const locale = yield (0,effects_.select)(selectors/* selectLocale */.fN);
@@ -1737,16 +1763,36 @@ function* onSubmit() {
1737
1763
  configId: config.id,
1738
1764
  locale
1739
1765
  });
1766
+ yield (0,effects_.put)(slices/* resultsSlice.actions.changeResults */._C.actions.changeResults(results.map(build.Result.fromJson)));
1740
1767
  yield (0,effects_.put)(slices/* solveSlice.actions.submitSuccess */.TP.actions.submitSuccess({
1741
1768
  board,
1742
1769
  characters
1743
1770
  }));
1744
- yield (0,effects_.put)(slices/* resultsSlice.actions.changeResults */._C.actions.changeResults(results.map(build.Result.fromJson)));
1745
1771
  } catch (error) {
1746
1772
  yield (0,effects_.put)(slices/* resultsSlice.actions.changeResults */._C.actions.changeResults([]));
1747
1773
  yield (0,effects_.put)(slices/* solveSlice.actions.submitFailure */.TP.actions.submitFailure());
1748
1774
  }
1749
1775
  }
1776
+ function* onVerify() {
1777
+ yield (0,effects_.delay)(SUBMIT_DELAY);
1778
+ const board = yield (0,effects_.select)(selectors/* selectBoard */.ZO);
1779
+ const { config } = yield (0,effects_.select)(selectors/* selectConfig */.$o);
1780
+ const locale = yield (0,effects_.select)(selectors/* selectLocale */.fN);
1781
+ try {
1782
+ const { invalidWords , validWords } = yield (0,effects_.call)(sdk_verify, {
1783
+ board: board.toJson(),
1784
+ configId: config.id,
1785
+ locale
1786
+ });
1787
+ yield (0,effects_.put)(slices/* verifySlice.actions.submitSuccess */.Gt.actions.submitSuccess({
1788
+ board,
1789
+ invalidWords,
1790
+ validWords
1791
+ }));
1792
+ } catch (error) {
1793
+ yield (0,effects_.put)(slices/* verifySlice.actions.submitFailure */.Gt.actions.submitFailure());
1794
+ }
1795
+ }
1750
1796
  function* ensureProperTilesCount() {
1751
1797
  const { config } = yield (0,effects_.select)(selectors/* selectConfig */.$o);
1752
1798
  const characters = yield (0,effects_.select)(selectors/* selectCharacters */.yp);
@@ -1787,6 +1833,7 @@ __webpack_require__.d(__webpack_exports__, {
1787
1833
  "$o": () => (/* binding */ selectConfig),
1788
1834
  "md": () => (/* binding */ selectConfigId),
1789
1835
  "w1": () => (/* binding */ selectDictionary),
1836
+ "bs": () => (/* binding */ selectHasInvalidWords),
1790
1837
  "En": () => (/* binding */ selectHasOverusedTiles),
1791
1838
  "xU": () => (/* binding */ selectIsLoading),
1792
1839
  "fN": () => (/* binding */ selectLocale),
@@ -1800,7 +1847,8 @@ __webpack_require__.d(__webpack_exports__, {
1800
1847
  "dN": () => (/* binding */ selectSortedFilteredResults),
1801
1848
  "f2": () => (/* binding */ selectSortedResults),
1802
1849
  "Zf": () => (/* binding */ selectTilePoints),
1803
- "nb": () => (/* binding */ selectTranslations)
1850
+ "nb": () => (/* binding */ selectTranslations),
1851
+ "HM": () => (/* binding */ selectVerify)
1804
1852
  });
1805
1853
 
1806
1854
  // UNUSED EXPORTS: selectCellFilter, selectHasBoardChanged, selectHaveCharactersChanged, selectLastSolvedParameters, selectRemainingTiles, selectResultCandidate, selectResultCandidateCells, selectResults, selectTranslation
@@ -1812,15 +1860,15 @@ var build = __webpack_require__(89418);
1812
1860
  // EXTERNAL MODULE: ../types/build/index.js
1813
1861
  var types_build = __webpack_require__(34046);
1814
1862
  ;// CONCATENATED MODULE: ./src/i18n/de.json
1815
- 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"}');
1863
+ 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"}');
1816
1864
  ;// CONCATENATED MODULE: ./src/i18n/en.json
1817
- 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 dictionary.","dictionary.empty-state.not-allowed":"This word is not allowed.","dictionary.empty-state.uninitialized":"Dictionary definition of the last 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"}');
1865
+ 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 dictionary.","dictionary.empty-state.not-allowed":"This word is not allowed.","dictionary.empty-state.uninitialized":"Dictionary definition of the last 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"}');
1818
1866
  ;// CONCATENATED MODULE: ./src/i18n/es.json
1819
- 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"}');
1867
+ 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"}');
1820
1868
  ;// CONCATENATED MODULE: ./src/i18n/fr.json
1821
- 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"}');
1869
+ 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"}');
1822
1870
  ;// CONCATENATED MODULE: ./src/i18n/pl.json
1823
- 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"}');
1871
+ 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"}');
1824
1872
  ;// CONCATENATED MODULE: ./src/i18n/index.ts
1825
1873
 
1826
1874
 
@@ -1856,6 +1904,7 @@ const selectRackRoot = (state)=>state.rack;
1856
1904
  const selectResultsRoot = (state)=>state.results;
1857
1905
  const selectSettingsRoot = (state)=>state.settings;
1858
1906
  const selectSolveRoot = (state)=>state.solve;
1907
+ const selectVerifyRoot = (state)=>state.verify;
1859
1908
  const selectDictionary = selectDictionaryRoot;
1860
1909
  const selectAutoGroupTiles = (0,toolkit_.createSelector)([
1861
1910
  selectSettingsRoot
@@ -2008,11 +2057,17 @@ const selectHasOverusedTiles = (0,toolkit_.createSelector)([
2008
2057
  const selectRemainingTilesGroups = (0,toolkit_.createSelector)([
2009
2058
  selectRemainingTiles
2010
2059
  ], lib/* getRemainingTilesGroups */.op);
2060
+ const selectVerify = selectVerifyRoot;
2061
+ const selectHasInvalidWords = (0,toolkit_.createSelector)([
2062
+ selectVerify
2063
+ ], ({ invalidWords })=>{
2064
+ return invalidWords.length > 0;
2065
+ });
2011
2066
 
2012
2067
 
2013
2068
  /***/ }),
2014
2069
 
2015
- /***/ 8772:
2070
+ /***/ 99134:
2016
2071
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2017
2072
 
2018
2073
 
@@ -2024,10 +2079,11 @@ __webpack_require__.d(__webpack_exports__, {
2024
2079
  "O_": () => (/* reexport */ slices_rackSlice),
2025
2080
  "_C": () => (/* reexport */ slices_resultsSlice),
2026
2081
  "xj": () => (/* reexport */ slices_settingsSlice),
2027
- "TP": () => (/* reexport */ slices_solveSlice)
2082
+ "TP": () => (/* reexport */ slices_solveSlice),
2083
+ "Gt": () => (/* reexport */ slices_verifySlice)
2028
2084
  });
2029
2085
 
2030
- // UNUSED EXPORTS: boardInitialState, cellFilterInitialState, dictionaryInitialState, rackInitialState, resultsInitialState, settingsInitialState, solveInitialState
2086
+ // UNUSED EXPORTS: boardInitialState, cellFilterInitialState, dictionaryInitialState, rackInitialState, resultsInitialState, settingsInitialState, solveInitialState, verifyInitialState
2031
2087
 
2032
2088
  // EXTERNAL MODULE: ../configs/build/index.js
2033
2089
  var build = __webpack_require__(89418);
@@ -2404,6 +2460,53 @@ const solveSlice = (0,toolkit_.createSlice)({
2404
2460
  });
2405
2461
  /* harmony default export */ const slices_solveSlice = (solveSlice);
2406
2462
 
2463
+ ;// CONCATENATED MODULE: ./src/state/slices/verifyInitialState.ts
2464
+
2465
+ const verifyInitialState = {
2466
+ isLoading: false,
2467
+ lastSolvedParameters: {
2468
+ board: slices_boardInitialState
2469
+ },
2470
+ invalidWords: [],
2471
+ validWords: []
2472
+ };
2473
+ /* harmony default export */ const slices_verifyInitialState = (verifyInitialState);
2474
+
2475
+ ;// CONCATENATED MODULE: ./src/state/slices/verifySlice.ts
2476
+
2477
+
2478
+ const verifySlice = (0,toolkit_.createSlice)({
2479
+ initialState: slices_verifyInitialState,
2480
+ name: "verify",
2481
+ reducers: {
2482
+ submit: (state)=>{
2483
+ return {
2484
+ ...state,
2485
+ isLoading: true
2486
+ };
2487
+ },
2488
+ submitFailure: (state)=>{
2489
+ return {
2490
+ ...state,
2491
+ isLoading: false
2492
+ };
2493
+ },
2494
+ submitSuccess: (state, action)=>{
2495
+ const { board , invalidWords , validWords } = action.payload;
2496
+ return {
2497
+ ...state,
2498
+ isLoading: false,
2499
+ lastSolvedParameters: {
2500
+ board
2501
+ },
2502
+ invalidWords,
2503
+ validWords
2504
+ };
2505
+ }
2506
+ }
2507
+ });
2508
+ /* harmony default export */ const slices_verifySlice = (verifySlice);
2509
+
2407
2510
  ;// CONCATENATED MODULE: ./src/state/slices/index.ts
2408
2511
 
2409
2512
 
@@ -2421,6 +2524,8 @@ const solveSlice = (0,toolkit_.createSlice)({
2421
2524
 
2422
2525
 
2423
2526
 
2527
+
2528
+
2424
2529
  /***/ }),
2425
2530
 
2426
2531
  /***/ 41573:
@@ -2581,6 +2686,22 @@ class Board {
2581
2686
  return count + row.reduce((rowCount, cell) => (cell.hasTile() ? rowCount + 1 : rowCount), 0);
2582
2687
  }, 0);
2583
2688
  }
2689
+ getWords() {
2690
+ const columns = [];
2691
+ for (let x = 0; x < this.columnsCount; ++x) {
2692
+ const column = [];
2693
+ for (let y = 0; y < this.rowsCount; ++y) {
2694
+ column.push(this.rows[y][x]);
2695
+ }
2696
+ columns.push(column);
2697
+ }
2698
+ const columnsBoard = new Board({ rows: columns });
2699
+ const lines = this.toString().split('\n').concat(columnsBoard.toString().split('\n'));
2700
+ const words = lines
2701
+ .flatMap((line) => line.replaceAll(/\s+/g, constants_1.EMPTY_CELL).split(' '))
2702
+ .filter((word) => word.length > 1);
2703
+ return words;
2704
+ }
2584
2705
  isEmpty() {
2585
2706
  return this.rows.every((row) => row.every(({ isEmpty }) => isEmpty));
2586
2707
  }
@@ -2588,7 +2709,7 @@ class Board {
2588
2709
  return this.rows.map((row) => row.map((cell) => cell.toJson()));
2589
2710
  }
2590
2711
  toString() {
2591
- return this.rows.map((row) => row.map(String)).join('\n');
2712
+ return this.rows.map((row) => row.map(String).join('')).join('\n');
2592
2713
  }
2593
2714
  updateCell(x, y, updateCell) {
2594
2715
  this.rows[y][x] = updateCell(this.rows[y][x]);
@@ -2856,7 +2977,7 @@ class Config {
2856
2977
  return tile.isBlank ? this.blankScore : this.getCharacterPoints(tile.character);
2857
2978
  }
2858
2979
  hasCharacter(character) {
2859
- return this.alphabet.includes(character);
2980
+ return character in this.pointsMap;
2860
2981
  }
2861
2982
  isTwoCharacterTilePrefix(character) {
2862
2983
  return typeof this.getTwoCharacterTileByPrefix(character) !== 'undefined';
@@ -2890,6 +3011,29 @@ const getPointsMap = (config) => config.tiles.reduce((pointsMap, { character, sc
2890
3011
  exports["default"] = Config;
2891
3012
 
2892
3013
 
3014
+ /***/ }),
3015
+
3016
+ /***/ 35905:
3017
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
3018
+
3019
+
3020
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3021
+ return (mod && mod.__esModule) ? mod : { "default": mod };
3022
+ };
3023
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
3024
+ const Pattern_1 = __importDefault(__webpack_require__(63207));
3025
+ class FinalPattern extends Pattern_1.default {
3026
+ constructor(pattern) {
3027
+ super(pattern.board, pattern.cells);
3028
+ this.collisions = pattern.getCollisions();
3029
+ }
3030
+ getCollisions() {
3031
+ return this.collisions;
3032
+ }
3033
+ }
3034
+ exports["default"] = FinalPattern;
3035
+
3036
+
2893
3037
  /***/ }),
2894
3038
 
2895
3039
  /***/ 49594:
@@ -2903,10 +3047,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
2903
3047
  const Pattern_1 = __importDefault(__webpack_require__(63207));
2904
3048
  class HorizontalPattern extends Pattern_1.default {
2905
3049
  clone() {
2906
- return new HorizontalPattern({
2907
- board: this.board,
2908
- cells: this.cells.map((cell) => cell.clone()),
2909
- });
3050
+ return new HorizontalPattern(this.board, this.cells.map((cell) => cell.clone()));
2910
3051
  }
2911
3052
  getCollisions() {
2912
3053
  const collisions = [];
@@ -2926,7 +3067,7 @@ class HorizontalPattern extends Pattern_1.default {
2926
3067
  const nextCells = column.slice(cell.y + 1, y);
2927
3068
  const cells = [...previousCells, cell, ...nextCells];
2928
3069
  if (cells.length > 1) {
2929
- const pattern = new Pattern_1.default({ board: this.board, cells });
3070
+ const pattern = new Pattern_1.default(this.board, cells);
2930
3071
  collisions.push(pattern);
2931
3072
  }
2932
3073
  });
@@ -2968,7 +3109,7 @@ exports["default"] = Locale;
2968
3109
 
2969
3110
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2970
3111
  class Pattern {
2971
- constructor({ board, cells }) {
3112
+ constructor(board, cells) {
2972
3113
  this.board = board;
2973
3114
  this.cells = cells;
2974
3115
  }
@@ -2979,10 +3120,7 @@ class Pattern {
2979
3120
  (this.hasAtLeast1NonEmptyCell() || this.collides() || (this.goesThroughBoardCenter() && this.board.isEmpty())));
2980
3121
  }
2981
3122
  clone() {
2982
- return new Pattern({
2983
- board: this.board,
2984
- cells: this.cells.map((cell) => cell.clone()),
2985
- });
3123
+ return new Pattern(this.board, this.cells.map((cell) => cell.clone()));
2986
3124
  }
2987
3125
  collides() {
2988
3126
  return this.cells.some((cell) => cell.isEmpty && this.board.collides(cell));
@@ -3076,11 +3214,9 @@ const getNonBlanks = (tiles) => tiles.filter(({ isBlank }) => !isBlank);
3076
3214
  const getPointsRatio = (tiles, points) => points / tiles.length;
3077
3215
  const getTiles = (cells) => cells.filter(({ isEmpty }) => isEmpty).map(({ tile }) => tile);
3078
3216
  const getTilesCharacters = (tiles) => getNonBlankCharacters(tiles).sort(charactersComparator).join('');
3079
- const getWord = (cells) => cells.map(String).join('');
3080
- const getWords = (cells, collisions) => [
3081
- getWord(cells),
3082
- ...collisions.map((collision) => collision.map(String).join('')),
3083
- ];
3217
+ // eslint-disable-next-line prefer-template
3218
+ const getWord = (cells) => cells.reduce((word, cell) => word + cell.toString(), '');
3219
+ const getWords = (cells, collisions) => [cells, ...collisions].map(getWord);
3084
3220
  const isConsonant = ({ character, isBlank }) => constants_1.CONSONANTS.includes(character) && !isBlank;
3085
3221
  const isVowel = ({ character, isBlank }) => constants_1.VOWELS.includes(character) && !isBlank;
3086
3222
  exports["default"] = Result;
@@ -3169,10 +3305,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
3169
3305
  const Pattern_1 = __importDefault(__webpack_require__(63207));
3170
3306
  class VerticalPattern extends Pattern_1.default {
3171
3307
  clone() {
3172
- return new VerticalPattern({
3173
- board: this.board,
3174
- cells: this.cells.map((cell) => cell.clone()),
3175
- });
3308
+ return new VerticalPattern(this.board, this.cells.map((cell) => cell.clone()));
3176
3309
  }
3177
3310
  getCollisions() {
3178
3311
  const collisions = [];
@@ -3192,7 +3325,7 @@ class VerticalPattern extends Pattern_1.default {
3192
3325
  const nextCells = row.slice(cell.x + 1, x);
3193
3326
  const cells = [...previousCells, cell, ...nextCells];
3194
3327
  if (cells.length > 1) {
3195
- const pattern = new Pattern_1.default({ board: this.board, cells });
3328
+ const pattern = new Pattern_1.default(this.board, cells);
3196
3329
  collisions.push(pattern);
3197
3330
  }
3198
3331
  });
@@ -3279,7 +3412,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3279
3412
  return (mod && mod.__esModule) ? mod : { "default": mod };
3280
3413
  };
3281
3414
  Object.defineProperty(exports, "__esModule", ({ value: true }));
3282
- exports.WordDefinition = exports.WordBonus = exports.VerticalPattern = exports.isTileJson = exports.Tile = exports.Result = exports.Pattern = exports.isLocale = exports.Locale = exports.isObject = exports.HorizontalPattern = exports.Config = exports.CharacterBonus = exports.isCellJson = exports.Cell = exports.Bonus = exports.isBoardJson = exports.Board = void 0;
3415
+ exports.WordDefinition = exports.WordBonus = exports.VerticalPattern = exports.isTileJson = exports.Tile = exports.Result = exports.Pattern = exports.isLocale = exports.Locale = exports.isObject = exports.HorizontalPattern = exports.FinalPattern = exports.Config = exports.CharacterBonus = exports.isCellJson = exports.Cell = exports.Bonus = exports.isBoardJson = exports.Board = void 0;
3283
3416
  var Board_1 = __webpack_require__(80559);
3284
3417
  Object.defineProperty(exports, "Board", ({ enumerable: true, get: function () { return __importDefault(Board_1).default; } }));
3285
3418
  var BoardJson_1 = __webpack_require__(46936);
@@ -3294,6 +3427,8 @@ var CharacterBonus_1 = __webpack_require__(19582);
3294
3427
  Object.defineProperty(exports, "CharacterBonus", ({ enumerable: true, get: function () { return __importDefault(CharacterBonus_1).default; } }));
3295
3428
  var Config_1 = __webpack_require__(28433);
3296
3429
  Object.defineProperty(exports, "Config", ({ enumerable: true, get: function () { return __importDefault(Config_1).default; } }));
3430
+ var FinalPattern_1 = __webpack_require__(35905);
3431
+ Object.defineProperty(exports, "FinalPattern", ({ enumerable: true, get: function () { return __importDefault(FinalPattern_1).default; } }));
3297
3432
  var HorizontalPattern_1 = __webpack_require__(49594);
3298
3433
  Object.defineProperty(exports, "HorizontalPattern", ({ enumerable: true, get: function () { return __importDefault(HorizontalPattern_1).default; } }));
3299
3434
  var isObject_1 = __webpack_require__(24814);