@scrabble-solver/scrabble-solver 2.11.6 → 2.11.8

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 (86) 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/277.js +653 -399
  16. package/.next/server/chunks/865.js +153 -115
  17. package/.next/server/middleware-build-manifest.js +1 -1
  18. package/.next/server/pages/404.html +1 -1
  19. package/.next/server/pages/404.js.nft.json +1 -1
  20. package/.next/server/pages/500.html +1 -1
  21. package/.next/server/pages/_app.js +9 -2
  22. package/.next/server/pages/_app.js.nft.json +1 -1
  23. package/.next/server/pages/api/solve.js +30 -1
  24. package/.next/server/pages/index.html +1 -1
  25. package/.next/server/pages/index.js +35 -6
  26. package/.next/server/pages/index.js.nft.json +1 -1
  27. package/.next/server/pages/index.json +1 -1
  28. package/.next/server/pages-manifest.json +3 -3
  29. package/.next/static/5ttGCAW8jcIKxpR8om9fK/_buildManifest.js +1 -0
  30. package/.next/static/chunks/framework-2c5cac93e8c637b5.js +49 -0
  31. package/.next/static/chunks/pages/{404-8176f4acd0cfeb42.js → 404-ca203fa27afc37d8.js} +1 -1
  32. package/.next/static/chunks/pages/_app-76a8840b6244d5a2.js +28 -0
  33. package/.next/static/chunks/pages/index-6894f40e6cac9243.js +1 -0
  34. package/.next/static/css/af871fef886ef5b7.css +2 -0
  35. package/.next/static/css/c6e0e01f44fc0425.css +1 -0
  36. package/.next/trace +50 -50
  37. package/package.json +9 -9
  38. package/src/components/Board/Board.module.scss +2 -59
  39. package/src/components/Board/Board.tsx +22 -10
  40. package/src/components/Board/BoardPure.tsx +13 -8
  41. package/src/components/Board/components/Cell/Cell.module.scss +8 -140
  42. package/src/components/Board/components/Cell/Cell.tsx +18 -37
  43. package/src/components/Board/hooks/index.ts +1 -0
  44. package/src/components/Board/hooks/useBackgroundImage.tsx +174 -0
  45. package/src/components/Board/hooks/useGrid.ts +17 -1
  46. package/src/components/Board/lib/getBonusColor.ts +18 -0
  47. package/src/components/Board/lib/index.ts +1 -0
  48. package/src/components/DictionaryInput/DictionaryInput.tsx +5 -3
  49. package/src/components/Key/Key.module.scss +7 -11
  50. package/src/components/Rack/Rack.tsx +4 -1
  51. package/src/components/Rack/RackTile.tsx +12 -2
  52. package/src/components/Results/Cell.tsx +2 -2
  53. package/src/components/Results/Result.tsx +4 -8
  54. package/src/components/Results/Results.module.scss +5 -3
  55. package/src/components/Solver/Solver.tsx +2 -2
  56. package/src/components/Tile/Tile.module.scss +4 -0
  57. package/src/components/Tooltip/Tooltip.module.scss +2 -0
  58. package/src/hooks/useAppLayout.ts +1 -0
  59. package/src/i18n/constants.ts +25 -8
  60. package/src/i18n/de.json +2 -2
  61. package/src/i18n/en.json +2 -2
  62. package/src/i18n/es.json +2 -2
  63. package/src/i18n/fa.json +2 -2
  64. package/src/i18n/fr.json +2 -2
  65. package/src/i18n/pl.json +2 -2
  66. package/src/lib/dataUrlToBlob.ts +20 -0
  67. package/src/lib/index.ts +2 -0
  68. package/src/lib/isCtrl.ts +7 -0
  69. package/src/modals/KeyMapModal/KeyMapModal.tsx +20 -4
  70. package/src/modals/KeyMapModal/components/Mapping/Mapping.module.scss +10 -4
  71. package/src/pages/_app.tsx +1 -3
  72. package/src/parameters/index.ts +33 -2
  73. package/src/state/index.ts +1 -1
  74. package/src/state/sagas.ts +3 -4
  75. package/src/state/store.ts +34 -0
  76. package/src/styles/variables.scss +4 -0
  77. package/.next/static/Jmk00rVXCbdjFgP77tKXQ/_buildManifest.js +0 -1
  78. package/.next/static/chunks/framework-2c79e2a64abdb08b.js +0 -33
  79. package/.next/static/chunks/pages/_app-b4fa92112b8f0385.js +0 -28
  80. package/.next/static/chunks/pages/index-ccd762f8f5028729.js +0 -1
  81. package/.next/static/css/1cd302e7648d209c.css +0 -2
  82. package/.next/static/css/34adfcf12a7d9bb6.css +0 -1
  83. package/src/components/Board/components/Cell/CellPure.tsx +0 -93
  84. package/src/components/Board/components/Cell/lib.ts +0 -59
  85. package/src/state/createAppStore.ts +0 -38
  86. /package/.next/static/{Jmk00rVXCbdjFgP77tKXQ → 5ttGCAW8jcIKxpR8om9fK}/_ssgManifest.js +0 -0
@@ -989,8 +989,6 @@ module.exports = {
989
989
  // Exports
990
990
  module.exports = {
991
991
  "board": "Board_board__eA_bB",
992
- "row": "Board_row__mezHN",
993
- "cell": "Board_cell__RJssv",
994
992
  "actions": "Board_actions__W2CX9",
995
993
  "hide": "Board_hide__Fskbc",
996
994
  "shown": "Board_shown__T9Txa",
@@ -1021,25 +1019,11 @@ module.exports = {
1021
1019
 
1022
1020
  // Exports
1023
1021
  module.exports = {
1024
- "cell": "Cell_cell__2GOSl",
1025
- "bottom": "Cell_bottom__kFkxx",
1026
- "right": "Cell_right__ItPQR",
1027
- "bonusStart": "Cell_bonusStart__zy3BV",
1028
- "bonusCharacter1": "Cell_bonusCharacter1__zJUuA",
1029
- "bonusCharacter2": "Cell_bonusCharacter2__HZDn8",
1030
- "bonusCharacter3": "Cell_bonusCharacter3__pWf1f",
1031
- "bonusCharacter5": "Cell_bonusCharacter5__LdDrj",
1032
- "bonusCharacterMultiplier2": "Cell_bonusCharacterMultiplier2__Qpcd7",
1033
- "bonusCharacterMultiplier3": "Cell_bonusCharacterMultiplier3__0qtZY",
1034
- "bonusWord2": "Cell_bonusWord2__Ztd1C",
1035
- "bonusWord3": "Cell_bonusWord3__eTB6G",
1036
- "filtered": "Cell_filtered__16gx1",
1037
- "sharpTopLeft": "Cell_sharpTopLeft__EGQgw",
1038
1022
  "tile": "Cell_tile__bTdCO",
1023
+ "sharpTopLeft": "Cell_sharpTopLeft__EGQgw",
1039
1024
  "sharpTopRight": "Cell_sharpTopRight__rzADZ",
1040
1025
  "sharpBottomLeft": "Cell_sharpBottomLeft__YGRug",
1041
- "sharpBottomRight": "Cell_sharpBottomRight__twtbd",
1042
- "icon": "Cell_icon__8EWsQ"
1026
+ "sharpBottomRight": "Cell_sharpBottomRight__twtbd"
1043
1027
  };
1044
1028
 
1045
1029
 
@@ -1559,15 +1543,17 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1559
1543
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6022);
1560
1544
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
1561
1545
  /* harmony import */ var hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75704);
1562
- /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(64534);
1563
- /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83067);
1564
- /* harmony import */ var _Board_module_scss__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(33791);
1565
- /* harmony import */ var _Board_module_scss__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_Board_module_scss__WEBPACK_IMPORTED_MODULE_11__);
1566
- /* harmony import */ var _BoardPure__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(86058);
1567
- /* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(94347);
1568
- /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(48327);
1569
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__, hooks__WEBPACK_IMPORTED_MODULE_5__, state__WEBPACK_IMPORTED_MODULE_7__, _BoardPure__WEBPACK_IMPORTED_MODULE_8__, _components__WEBPACK_IMPORTED_MODULE_9__, _hooks__WEBPACK_IMPORTED_MODULE_10__]);
1570
- ([_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__, hooks__WEBPACK_IMPORTED_MODULE_5__, state__WEBPACK_IMPORTED_MODULE_7__, _BoardPure__WEBPACK_IMPORTED_MODULE_8__, _components__WEBPACK_IMPORTED_MODULE_9__, _hooks__WEBPACK_IMPORTED_MODULE_10__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1546
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20208);
1547
+ /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(64534);
1548
+ /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(83067);
1549
+ /* harmony import */ var _Board_module_scss__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(33791);
1550
+ /* harmony import */ var _Board_module_scss__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_Board_module_scss__WEBPACK_IMPORTED_MODULE_12__);
1551
+ /* harmony import */ var _BoardPure__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(86058);
1552
+ /* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(94347);
1553
+ /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(48327);
1554
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__, hooks__WEBPACK_IMPORTED_MODULE_5__, state__WEBPACK_IMPORTED_MODULE_8__, _BoardPure__WEBPACK_IMPORTED_MODULE_9__, _components__WEBPACK_IMPORTED_MODULE_10__, _hooks__WEBPACK_IMPORTED_MODULE_11__]);
1555
+ ([_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__, hooks__WEBPACK_IMPORTED_MODULE_5__, state__WEBPACK_IMPORTED_MODULE_8__, _BoardPure__WEBPACK_IMPORTED_MODULE_9__, _components__WEBPACK_IMPORTED_MODULE_10__, _hooks__WEBPACK_IMPORTED_MODULE_11__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1556
+
1571
1557
 
1572
1558
 
1573
1559
 
@@ -1580,21 +1566,34 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_flo
1580
1566
 
1581
1567
 
1582
1568
 
1583
- const Board = ({ cellSize , className })=>{
1569
+ const Board = ({ className })=>{
1584
1570
  const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_4__.useDispatch)();
1585
- const rows = (0,state__WEBPACK_IMPORTED_MODULE_7__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_7__/* .selectRowsWithCandidate */ .ZA);
1586
- const board = (0,state__WEBPACK_IMPORTED_MODULE_7__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_7__/* .selectBoard */ .ZO);
1587
- const { actionsWidth } = (0,hooks__WEBPACK_IMPORTED_MODULE_5__/* .useAppLayout */ .Ft)();
1588
- const [{ activeIndex , direction , inputRefs }, { onChange , onDirectionToggle , onFocus , onKeyDown , onPaste }] = (0,_hooks__WEBPACK_IMPORTED_MODULE_10__/* .useGrid */ .N)(rows);
1571
+ const rows = (0,state__WEBPACK_IMPORTED_MODULE_8__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_8__/* .selectRowsWithCandidate */ .ZA);
1572
+ const config = (0,state__WEBPACK_IMPORTED_MODULE_8__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_8__/* .selectConfig */ .$o);
1573
+ const { actionsWidth , cellSize } = (0,hooks__WEBPACK_IMPORTED_MODULE_5__/* .useAppLayout */ .Ft)();
1574
+ const { tileFontSize } = (0,lib__WEBPACK_IMPORTED_MODULE_6__/* .getTileSizes */ .vc)(cellSize);
1575
+ const [{ activeIndex , direction , inputRefs }, { onChange , onDirectionToggle , onFocus , onKeyDown , onPaste }] = (0,_hooks__WEBPACK_IMPORTED_MODULE_11__/* .useGrid */ .N)(rows);
1576
+ const backgroundImage = (0,_hooks__WEBPACK_IMPORTED_MODULE_11__/* .useBackgroundImage */ .c)();
1577
+ const boardStyle = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(()=>({
1578
+ backgroundImage,
1579
+ fontSize: tileFontSize,
1580
+ gridTemplateColumns: `repeat(${config.boardWidth}, 1fr)`,
1581
+ gridTemplateRows: `repeat(${config.boardHeight}, 1fr)`
1582
+ }), [
1583
+ backgroundImage,
1584
+ config.boardHeight,
1585
+ config.boardWidth,
1586
+ tileFontSize
1587
+ ]);
1588
+ const [showActions, setShowActions] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false);
1589
+ const [transition, setTransition] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(parameters__WEBPACK_IMPORTED_MODULE_7__/* .TRANSITION */ .yz);
1589
1590
  const inputRef = inputRefs[activeIndex.y][activeIndex.x];
1590
1591
  const cell = rows[activeIndex.y][activeIndex.x];
1591
- const [showActions, setShowActions] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false);
1592
- const [transition, setTransition] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(parameters__WEBPACK_IMPORTED_MODULE_6__/* .TRANSITION */ .yz);
1593
1592
  const { x , y , strategy , refs } = (0,_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__.useFloating)({
1594
1593
  middleware: [
1595
1594
  (0,_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__.offset)({
1596
- mainAxis: -parameters__WEBPACK_IMPORTED_MODULE_6__/* .BOARD_CELL_ACTIONS_OFFSET */ .IO,
1597
- alignmentAxis: parameters__WEBPACK_IMPORTED_MODULE_6__/* .BOARD_CELL_ACTIONS_OFFSET */ .IO - actionsWidth
1595
+ mainAxis: -parameters__WEBPACK_IMPORTED_MODULE_7__/* .BOARD_CELL_ACTIONS_OFFSET */ .IO,
1596
+ alignmentAxis: parameters__WEBPACK_IMPORTED_MODULE_7__/* .BOARD_CELL_ACTIONS_OFFSET */ .IO - actionsWidth
1598
1597
  }),
1599
1598
  (0,_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__.shift)()
1600
1599
  ],
@@ -1643,7 +1642,7 @@ const Board = ({ cellSize , className })=>{
1643
1642
  ]);
1644
1643
  const handleToggleBlank = (0,react__WEBPACK_IMPORTED_MODULE_3__.useCallback)(()=>{
1645
1644
  inputRef.current?.focus();
1646
- dispatch(state__WEBPACK_IMPORTED_MODULE_7__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(cell));
1645
+ dispatch(state__WEBPACK_IMPORTED_MODULE_8__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(cell));
1647
1646
  }, [
1648
1647
  cell,
1649
1648
  dispatch,
@@ -1651,7 +1650,7 @@ const Board = ({ cellSize , className })=>{
1651
1650
  ]);
1652
1651
  const handleToggleFilterCell = (0,react__WEBPACK_IMPORTED_MODULE_3__.useCallback)(()=>{
1653
1652
  inputRef.current?.focus();
1654
- dispatch(state__WEBPACK_IMPORTED_MODULE_7__/* .cellFilterSlice.actions.toggle */ .mO.actions.toggle(cell));
1653
+ dispatch(state__WEBPACK_IMPORTED_MODULE_8__/* .cellFilterSlice.actions.toggle */ .mO.actions.toggle(cell));
1655
1654
  }, [
1656
1655
  cell,
1657
1656
  dispatch,
@@ -1659,12 +1658,12 @@ const Board = ({ cellSize , className })=>{
1659
1658
  ]);
1660
1659
  return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
1661
1660
  children: [
1662
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_BoardPure__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z, {
1661
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_BoardPure__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z, {
1663
1662
  className: className,
1664
1663
  cellSize: cellSize,
1665
- center: board.center,
1666
1664
  inputRefs: inputRefs,
1667
1665
  rows: rows,
1666
+ style: boardStyle,
1668
1667
  onBlur: handleBlur,
1669
1668
  onChange: onChange,
1670
1669
  onFocus: handleFocus,
@@ -1672,10 +1671,10 @@ const Board = ({ cellSize , className })=>{
1672
1671
  onPaste: onPaste
1673
1672
  }),
1674
1673
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__.FloatingPortal, {
1675
- children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components__WEBPACK_IMPORTED_MODULE_9__/* .Actions */ .e, {
1674
+ children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components__WEBPACK_IMPORTED_MODULE_10__/* .Actions */ .e, {
1676
1675
  cell: cell,
1677
- className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_Board_module_scss__WEBPACK_IMPORTED_MODULE_11___default().actions), {
1678
- [(_Board_module_scss__WEBPACK_IMPORTED_MODULE_11___default().shown)]: showActions
1676
+ className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_Board_module_scss__WEBPACK_IMPORTED_MODULE_12___default().actions), {
1677
+ [(_Board_module_scss__WEBPACK_IMPORTED_MODULE_12___default().shown)]: showActions
1679
1678
  }),
1680
1679
  disabled: !showActions,
1681
1680
  direction: direction,
@@ -1729,13 +1728,13 @@ _components__WEBPACK_IMPORTED_MODULE_3__ = (__webpack_async_dependencies__.then
1729
1728
 
1730
1729
 
1731
1730
 
1732
- const BoardPure = ({ className , cellSize , center , inputRefs , rows , onBlur , onChange , onFocus , onKeyDown , onPaste })=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
1731
+ const BoardPure = ({ className , cellSize , inputRefs , rows , style , onBlur , onChange , onFocus , onKeyDown , onPaste })=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
1733
1732
  className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Board_module_scss__WEBPACK_IMPORTED_MODULE_4___default().board), className),
1733
+ style: style,
1734
1734
  onBlur: onBlur,
1735
1735
  onKeyDown: onKeyDown,
1736
1736
  onPaste: onPaste,
1737
- children: rows.map((cells, y)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
1738
- className: (_Board_module_scss__WEBPACK_IMPORTED_MODULE_4___default().row),
1737
+ children: rows.map((cells, y)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
1739
1738
  children: cells.map((cell, x)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components__WEBPACK_IMPORTED_MODULE_3__/* .Cell */ .b, {
1740
1739
  className: (_Board_module_scss__WEBPACK_IMPORTED_MODULE_4___default().cell),
1741
1740
  cell: cell,
@@ -1744,9 +1743,6 @@ const BoardPure = ({ className , cellSize , center , inputRefs , rows , onBlur ,
1744
1743
  cellRight: x < rows.length - 1 ? rows[y][x + 1] : undefined,
1745
1744
  cellTop: y > 0 ? rows[y - 1][x] : undefined,
1746
1745
  inputRef: inputRefs[y][x],
1747
- isBottom: y === rows.length - 1,
1748
- isCenter: center.x === x && center.y === y,
1749
- isRight: x === cells.length - 1,
1750
1746
  size: cellSize,
1751
1747
  onChange: onChange,
1752
1748
  onFocus: onFocus
@@ -1776,7 +1772,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1776
1772
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16689);
1777
1773
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1778
1774
  /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(58966);
1779
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(65175);
1775
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20208);
1780
1776
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83067);
1781
1777
  /* harmony import */ var _Button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83900);
1782
1778
  /* harmony import */ var _Actions_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(79739);
@@ -1874,62 +1870,55 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
1874
1870
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
1875
1871
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
1876
1872
  /* harmony import */ var _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7618);
1877
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
1878
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
1879
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(65175);
1873
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
1874
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
1875
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16689);
1876
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1880
1877
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(83067);
1881
- /* harmony import */ var _CellPure__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(12418);
1882
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_4__, _CellPure__WEBPACK_IMPORTED_MODULE_5__]);
1883
- ([state__WEBPACK_IMPORTED_MODULE_4__, _CellPure__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1878
+ /* harmony import */ var _Tile__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(96815);
1879
+ /* harmony import */ var _Cell_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7576);
1880
+ /* harmony import */ var _Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6__);
1881
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_4__, _Tile__WEBPACK_IMPORTED_MODULE_5__]);
1882
+ ([state__WEBPACK_IMPORTED_MODULE_4__, _Tile__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1883
+
1884
1884
 
1885
1885
 
1886
1886
 
1887
1887
 
1888
1888
 
1889
1889
 
1890
- const Cell = ({ cell , cellBottom , cellLeft , cellRight , cellTop , className , inputRef , isBottom , isCenter , isRight , size , onChange , onFocus })=>{
1890
+ const Cell = ({ cell , cellBottom , cellLeft , cellRight , cellTop , className , inputRef , size , onChange , onFocus })=>{
1891
1891
  const { tile , x , y } = cell;
1892
1892
  const translate = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTranslate */ .qM)();
1893
1893
  const locale = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectLocale */ .fN);
1894
- const bonus = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)((state)=>(0,state__WEBPACK_IMPORTED_MODULE_4__/* .selectCellBonus */ .O0)(state, cell));
1895
1894
  const points = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)((state)=>(0,state__WEBPACK_IMPORTED_MODULE_4__/* .selectTilePoints */ .Zf)(state, cell.tile));
1896
- const isFiltered = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)((state)=>(0,state__WEBPACK_IMPORTED_MODULE_4__/* .selectCellIsFiltered */ .id)(state, cell));
1897
1895
  const isValid = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)((state)=>(0,state__WEBPACK_IMPORTED_MODULE_4__/* .selectCellIsValid */ .fZ)(state, cell));
1898
- const { tileFontSize } = (0,lib__WEBPACK_IMPORTED_MODULE_3__/* .getTileSizes */ .vc)(size);
1899
1896
  const isEmpty = tile.character === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.EMPTY_CELL;
1900
- const style = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>({
1901
- fontSize: tileFontSize
1902
- }), [
1903
- tileFontSize
1904
- ]);
1905
- const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(()=>onFocus(x, y), [
1897
+ const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_3__.useCallback)(()=>onFocus(x, y), [
1906
1898
  x,
1907
1899
  y,
1908
1900
  onFocus
1909
1901
  ]);
1910
- return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_CellPure__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
1902
+ return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Tile__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
1911
1903
  "aria-label": translate("cell.tile.location", {
1912
1904
  x: (x + 1).toLocaleString(locale),
1913
1905
  y: (y + 1).toLocaleString(locale)
1914
1906
  }),
1915
- bonus: bonus,
1916
- cell: cell,
1917
- cellBottom: cellBottom,
1918
- cellLeft: cellLeft,
1919
- cellRight: cellRight,
1920
- cellTop: cellTop,
1921
- className: className,
1907
+ className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().tile), className, {
1908
+ [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpTopLeft)]: cellTop?.hasTile() || cellLeft?.hasTile(),
1909
+ [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpTopRight)]: cellTop?.hasTile() || cellRight?.hasTile(),
1910
+ [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpBottomLeft)]: cellBottom?.hasTile() || cellLeft?.hasTile(),
1911
+ [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpBottomRight)]: cellBottom?.hasTile() || cellRight?.hasTile()
1912
+ }),
1913
+ character: isEmpty ? undefined : tile.character,
1914
+ highlighted: cell.isCandidate(),
1922
1915
  inputRef: inputRef,
1923
- isBottom: isBottom,
1924
- isCenter: isCenter,
1925
- isRight: isRight,
1926
- isEmpty: isEmpty,
1927
- isFiltered: isFiltered,
1916
+ isBlank: tile.isBlank,
1928
1917
  isValid: isValid,
1929
1918
  points: points,
1919
+ raised: !isEmpty,
1930
1920
  size: size,
1931
- style: style,
1932
- tile: tile,
1921
+ tabIndex: cell.x === 0 && cell.y === 0 ? undefined : -1,
1933
1922
  onChange: onChange,
1934
1923
  onFocus: handleFocus
1935
1924
  });
@@ -1941,76 +1930,6 @@ __webpack_async_result__();
1941
1930
 
1942
1931
  /***/ }),
1943
1932
 
1944
- /***/ 12418:
1945
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
1946
-
1947
- "use strict";
1948
- __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
1949
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1950
- /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
1951
- /* harmony export */ });
1952
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
1953
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
1954
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59003);
1955
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
1956
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
1957
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
1958
- /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(58966);
1959
- /* harmony import */ var _Tile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(96815);
1960
- /* harmony import */ var _Cell_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7576);
1961
- /* harmony import */ var _Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6__);
1962
- /* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(97569);
1963
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_Tile__WEBPACK_IMPORTED_MODULE_4__]);
1964
- _Tile__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
1965
-
1966
-
1967
-
1968
-
1969
-
1970
-
1971
-
1972
- const CellPure = ({ "aria-label": ariaLabel , bonus , cell , cellBottom , cellLeft , cellRight , cellTop , className , inputRef , isBottom , isCenter , isRight , isEmpty , isFiltered , isValid , points , size , style , tile , onChange , onFocus })=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
1973
- className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().cell), className, (0,_lib__WEBPACK_IMPORTED_MODULE_5__/* .getBonusClassname */ .K)(cell, bonus, isCenter), {
1974
- [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().bottom)]: isBottom,
1975
- [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().filtered)]: isFiltered,
1976
- [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().right)]: isRight,
1977
- [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpTopLeft)]: cellTop?.hasTile() || cellLeft?.hasTile(),
1978
- [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpTopRight)]: cellTop?.hasTile() || cellRight?.hasTile(),
1979
- [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpBottomLeft)]: cellBottom?.hasTile() || cellLeft?.hasTile(),
1980
- [(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().sharpBottomRight)]: cellBottom?.hasTile() || cellRight?.hasTile()
1981
- }),
1982
- style: style,
1983
- children: [
1984
- isCenter && isEmpty && !isFiltered && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(icons__WEBPACK_IMPORTED_MODULE_3__/* .Star */ .Ux, {
1985
- className: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().icon)
1986
- }),
1987
- isFiltered && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(icons__WEBPACK_IMPORTED_MODULE_3__/* .FlagFill */ .aR, {
1988
- className: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().icon)
1989
- }),
1990
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Tile__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {
1991
- "aria-label": ariaLabel,
1992
- className: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_6___default().tile),
1993
- character: isEmpty ? undefined : tile.character,
1994
- highlighted: cell.isCandidate(),
1995
- inputRef: inputRef,
1996
- isBlank: tile.isBlank,
1997
- isValid: isValid,
1998
- points: points,
1999
- raised: !isEmpty,
2000
- size: size,
2001
- tabIndex: cell.x === 0 && cell.y === 0 ? undefined : -1,
2002
- onChange: onChange,
2003
- onFocus: onFocus
2004
- })
2005
- ]
2006
- });
2007
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_2__.memo)(CellPure));
2008
-
2009
- __webpack_async_result__();
2010
- } catch(e) { __webpack_async_result__(e); } });
2011
-
2012
- /***/ }),
2013
-
2014
1933
  /***/ 21533:
2015
1934
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
2016
1935
 
@@ -2029,77 +1948,40 @@ __webpack_async_result__();
2029
1948
 
2030
1949
  /***/ }),
2031
1950
 
2032
- /***/ 97569:
2033
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1951
+ /***/ 94347:
1952
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
2034
1953
 
2035
1954
  "use strict";
1955
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
2036
1956
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2037
- /* harmony export */ "K": () => (/* binding */ getBonusClassname)
1957
+ /* harmony export */ "b": () => (/* reexport safe */ _Cell__WEBPACK_IMPORTED_MODULE_1__.Z),
1958
+ /* harmony export */ "e": () => (/* reexport safe */ _Actions__WEBPACK_IMPORTED_MODULE_0__.Z)
2038
1959
  /* harmony export */ });
2039
- /* harmony import */ var _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7618);
2040
- /* harmony import */ var _Cell_module_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7576);
2041
- /* harmony import */ var _Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1__);
1960
+ /* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38833);
1961
+ /* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21533);
1962
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_Actions__WEBPACK_IMPORTED_MODULE_0__, _Cell__WEBPACK_IMPORTED_MODULE_1__]);
1963
+ ([_Actions__WEBPACK_IMPORTED_MODULE_0__, _Cell__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
2042
1964
 
2043
1965
 
2044
- const CHARACTER_CLASSNAMES = {
2045
- 1: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusCharacter1),
2046
- 2: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusCharacter2),
2047
- 3: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusCharacter3),
2048
- 5: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusCharacter5)
2049
- };
2050
- const WORD_CLASSNAMES = {
2051
- 2: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusWord2),
2052
- 3: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusWord3)
2053
- };
2054
- const CHARACTER_MULTIPLIER_CLASSNAMES = {
2055
- 2: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusCharacterMultiplier2),
2056
- 3: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusCharacterMultiplier3)
2057
- };
2058
- const getBonusClassname = (cell, bonus, isCenter)=>{
2059
- if (!cell.isEmpty) {
2060
- return undefined;
2061
- }
2062
- if (isCenter) {
2063
- return (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_1___default().bonusStart);
2064
- }
2065
- if (!bonus) {
2066
- return undefined;
2067
- }
2068
- const { type } = bonus;
2069
- if (type === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.BONUS_WORD) {
2070
- return getWordBonusClassname(bonus);
2071
- }
2072
- if (type === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.BONUS_CHARACTER) {
2073
- return getCharacterBonusClassname(bonus);
2074
- }
2075
- throw new Error(`Unknown bonus type: ${type} ${bonus.x} ${bonus.y} ${bonus.multiplier} ${bonus.score}`);
2076
- };
2077
- const getWordBonusClassname = (bonus)=>{
2078
- return WORD_CLASSNAMES[bonus.multiplier];
2079
- };
2080
- const getCharacterBonusClassname = (bonus)=>{
2081
- if (bonus.score) {
2082
- return CHARACTER_CLASSNAMES[bonus.score];
2083
- }
2084
- return CHARACTER_MULTIPLIER_CLASSNAMES[bonus.multiplier];
2085
- };
2086
1966
 
1967
+ __webpack_async_result__();
1968
+ } catch(e) { __webpack_async_result__(e); } });
2087
1969
 
2088
1970
  /***/ }),
2089
1971
 
2090
- /***/ 94347:
1972
+ /***/ 48327:
2091
1973
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
2092
1974
 
2093
1975
  "use strict";
2094
1976
  __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
2095
1977
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2096
- /* harmony export */ "b": () => (/* reexport safe */ _Cell__WEBPACK_IMPORTED_MODULE_1__.Z),
2097
- /* harmony export */ "e": () => (/* reexport safe */ _Actions__WEBPACK_IMPORTED_MODULE_0__.Z)
1978
+ /* harmony export */ "N": () => (/* reexport safe */ _useGrid__WEBPACK_IMPORTED_MODULE_1__.Z),
1979
+ /* harmony export */ "c": () => (/* reexport safe */ _useBackgroundImage__WEBPACK_IMPORTED_MODULE_0__.Z)
2098
1980
  /* harmony export */ });
2099
- /* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38833);
2100
- /* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21533);
2101
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_Actions__WEBPACK_IMPORTED_MODULE_0__, _Cell__WEBPACK_IMPORTED_MODULE_1__]);
2102
- ([_Actions__WEBPACK_IMPORTED_MODULE_0__, _Cell__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1981
+ /* harmony import */ var _useBackgroundImage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96589);
1982
+ /* harmony import */ var _useGrid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27070);
1983
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_useBackgroundImage__WEBPACK_IMPORTED_MODULE_0__, _useGrid__WEBPACK_IMPORTED_MODULE_1__]);
1984
+ ([_useBackgroundImage__WEBPACK_IMPORTED_MODULE_0__, _useGrid__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
2103
1985
 
2104
1986
 
2105
1987
 
@@ -2108,19 +1990,252 @@ __webpack_async_result__();
2108
1990
 
2109
1991
  /***/ }),
2110
1992
 
2111
- /***/ 48327:
1993
+ /***/ 96589:
2112
1994
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
2113
1995
 
2114
1996
  "use strict";
2115
1997
  __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
2116
1998
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2117
- /* harmony export */ "N": () => (/* reexport safe */ _useGrid__WEBPACK_IMPORTED_MODULE_0__.Z)
1999
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
2118
2000
  /* harmony export */ });
2119
- /* harmony import */ var _useGrid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27070);
2120
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_useGrid__WEBPACK_IMPORTED_MODULE_0__]);
2121
- _useGrid__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
2001
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
2002
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
2003
+ /* harmony import */ var _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7618);
2004
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
2005
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
2006
+ /* harmony import */ var react_dom_server__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(78684);
2007
+ /* harmony import */ var react_dom_server__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom_server__WEBPACK_IMPORTED_MODULE_3__);
2008
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6022);
2009
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
2010
+ /* harmony import */ var hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75704);
2011
+ /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(58966);
2012
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(20208);
2013
+ /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(64534);
2014
+ /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(83067);
2015
+ /* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(41051);
2016
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([hooks__WEBPACK_IMPORTED_MODULE_5__, state__WEBPACK_IMPORTED_MODULE_9__]);
2017
+ ([hooks__WEBPACK_IMPORTED_MODULE_5__, state__WEBPACK_IMPORTED_MODULE_9__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
2018
+ /* eslint-disable max-statements */
2019
+
2020
+
2021
+
2022
+
2023
+
2024
+
2025
+
2026
+
2122
2027
 
2123
2028
 
2029
+ const BORDER_RADIUS_XS = 3;
2030
+ const GRID_LINE_SIZE = 1;
2031
+ const HORIZONTAL_LINE = "h";
2032
+ const VERTICAL_LINE = "v";
2033
+ const BONUS = "b";
2034
+ const BONUS_WORD_2 = "b2";
2035
+ const BONUS_WORD_3 = "b3";
2036
+ const CELL_FILTER = "c";
2037
+ const useBackgroundImage = ()=>{
2038
+ const { boardSize , cellSize } = (0,hooks__WEBPACK_IMPORTED_MODULE_5__/* .useAppLayout */ .Ft)();
2039
+ const { isLessThanXs } = (0,hooks__WEBPACK_IMPORTED_MODULE_5__/* .useMediaQueries */ .lS)();
2040
+ const borderRadius = isLessThanXs ? BORDER_RADIUS_XS : parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_RADIUS */ .n_;
2041
+ const config = (0,state__WEBPACK_IMPORTED_MODULE_9__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_9__/* .selectConfig */ .$o);
2042
+ const center = {
2043
+ x: Math.floor(config.boardWidth / 2),
2044
+ y: Math.floor(config.boardHeight / 2)
2045
+ };
2046
+ const cellFilter = (0,state__WEBPACK_IMPORTED_MODULE_9__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_9__/* .selectCellFilter */ .Jw);
2047
+ const viewBoxHeight = boardSize;
2048
+ const viewBoxWidth = boardSize;
2049
+ const bonusSize = cellSize * 0.8;
2050
+ const bonusOffset = cellSize * 0.1;
2051
+ const iconSize = cellSize * 0.4;
2052
+ const iconOffset = (cellSize - iconSize) / 2;
2053
+ const { tileFontSize } = (0,lib__WEBPACK_IMPORTED_MODULE_7__/* .getTileSizes */ .vc)(cellSize);
2054
+ const fontSize = tileFontSize * 0.6;
2055
+ const fontOffset = cellSize / 2;
2056
+ const characterBonuses = config.bonuses.filter((bonus)=>bonus.type === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.BONUS_CHARACTER);
2057
+ const word2Bonuses = config.bonuses.filter((bonus)=>bonus.type === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.BONUS_WORD && bonus.multiplier === 2);
2058
+ const word3Bonuses = config.bonuses.filter((bonus)=>bonus.type === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.BONUS_WORD && bonus.multiplier === 3);
2059
+ const getX = (point)=>point.x * (cellSize + parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_WIDTH */ .YF);
2060
+ const getY = (point)=>point.y * (cellSize + parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_WIDTH */ .YF);
2061
+ const backgroundSvg = (0,react_dom_server__WEBPACK_IMPORTED_MODULE_3__.renderToString)(/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(react_redux__WEBPACK_IMPORTED_MODULE_4__.Provider, {
2062
+ store: state__WEBPACK_IMPORTED_MODULE_9__/* .store */ .h,
2063
+ children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", {
2064
+ height: viewBoxHeight,
2065
+ viewBox: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,
2066
+ width: viewBoxWidth,
2067
+ xmlns: "http://www.w3.org/2000/svg",
2068
+ children: [
2069
+ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("defs", {
2070
+ children: [
2071
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("symbol", {
2072
+ id: HORIZONTAL_LINE,
2073
+ children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2074
+ fill: parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_COLOR_LIGHT */ .uI,
2075
+ height: GRID_LINE_SIZE,
2076
+ width: viewBoxWidth
2077
+ })
2078
+ }),
2079
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("symbol", {
2080
+ id: VERTICAL_LINE,
2081
+ children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2082
+ fill: parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_COLOR_LIGHT */ .uI,
2083
+ height: viewBoxHeight,
2084
+ width: GRID_LINE_SIZE
2085
+ })
2086
+ }),
2087
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("symbol", {
2088
+ id: BONUS,
2089
+ children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2090
+ height: bonusSize,
2091
+ rx: borderRadius,
2092
+ width: bonusSize,
2093
+ x: bonusOffset,
2094
+ y: bonusOffset
2095
+ })
2096
+ }),
2097
+ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("symbol", {
2098
+ id: BONUS_WORD_2,
2099
+ children: [
2100
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2101
+ height: bonusSize,
2102
+ rx: borderRadius,
2103
+ width: bonusSize,
2104
+ x: bonusOffset,
2105
+ y: bonusOffset
2106
+ }),
2107
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("text", {
2108
+ dominantBaseline: "central",
2109
+ fill: "white",
2110
+ fontFamily: "system-ui, sans-serif",
2111
+ fontSize: fontSize,
2112
+ fontWeight: "bold",
2113
+ textAnchor: "middle",
2114
+ x: fontOffset,
2115
+ y: fontOffset,
2116
+ children: "x2"
2117
+ })
2118
+ ]
2119
+ }),
2120
+ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("symbol", {
2121
+ id: BONUS_WORD_3,
2122
+ children: [
2123
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2124
+ height: bonusSize,
2125
+ rx: borderRadius,
2126
+ width: bonusSize,
2127
+ x: bonusOffset,
2128
+ y: bonusOffset
2129
+ }),
2130
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("text", {
2131
+ dominantBaseline: "central",
2132
+ fill: "white",
2133
+ fontFamily: "system-ui, sans-serif",
2134
+ fontSize: fontSize,
2135
+ fontWeight: "bold",
2136
+ textAnchor: "middle",
2137
+ x: fontOffset,
2138
+ y: fontOffset,
2139
+ children: "x3"
2140
+ })
2141
+ ]
2142
+ }),
2143
+ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("symbol", {
2144
+ id: CELL_FILTER,
2145
+ children: [
2146
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2147
+ fill: parameters__WEBPACK_IMPORTED_MODULE_8__/* .COLOR_FILTERED */ .pS,
2148
+ height: bonusSize,
2149
+ rx: borderRadius,
2150
+ width: bonusSize,
2151
+ x: bonusOffset,
2152
+ y: bonusOffset
2153
+ }),
2154
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(icons__WEBPACK_IMPORTED_MODULE_6__/* .FlagFill */ .aR, {
2155
+ color: "white",
2156
+ height: iconSize,
2157
+ width: iconSize,
2158
+ x: iconOffset,
2159
+ y: iconOffset
2160
+ })
2161
+ ]
2162
+ })
2163
+ ]
2164
+ }),
2165
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2166
+ fill: "white",
2167
+ height: viewBoxHeight,
2168
+ rx: borderRadius,
2169
+ width: viewBoxWidth,
2170
+ x: "0",
2171
+ y: "0"
2172
+ }),
2173
+ Array.from({
2174
+ length: config.boardHeight - 1
2175
+ }).map((_value, index)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("use", {
2176
+ href: `#${HORIZONTAL_LINE}`,
2177
+ y: (index + 1) * (cellSize + parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_WIDTH */ .YF) - parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_WIDTH */ .YF
2178
+ }, index)),
2179
+ Array.from({
2180
+ length: config.boardWidth - 1
2181
+ }).map((_value, index)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("use", {
2182
+ href: `#${VERTICAL_LINE}`,
2183
+ x: (index + 1) * (cellSize + parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_WIDTH */ .YF) - parameters__WEBPACK_IMPORTED_MODULE_8__/* .BORDER_WIDTH */ .YF
2184
+ }, index)),
2185
+ characterBonuses.map((bonus, index)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("use", {
2186
+ fill: (0,_lib__WEBPACK_IMPORTED_MODULE_10__/* .getBonusColor */ .T)(bonus),
2187
+ href: `#${BONUS}`,
2188
+ x: getX(bonus),
2189
+ y: getY(bonus)
2190
+ }, index)),
2191
+ word2Bonuses.map((bonus, index)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("use", {
2192
+ fill: (0,_lib__WEBPACK_IMPORTED_MODULE_10__/* .getBonusColor */ .T)(bonus),
2193
+ href: `#${BONUS_WORD_2}`,
2194
+ x: getX(bonus),
2195
+ y: getY(bonus)
2196
+ }, index)),
2197
+ word3Bonuses.map((bonus, index)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("use", {
2198
+ fill: (0,_lib__WEBPACK_IMPORTED_MODULE_10__/* .getBonusColor */ .T)(bonus),
2199
+ href: `#${BONUS_WORD_3}`,
2200
+ x: getX(bonus),
2201
+ y: getY(bonus)
2202
+ }, index)),
2203
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("rect", {
2204
+ fill: parameters__WEBPACK_IMPORTED_MODULE_8__/* .COLOR_BONUS_START */ .HC,
2205
+ height: bonusSize,
2206
+ rx: borderRadius,
2207
+ width: bonusSize,
2208
+ x: getX(center) + bonusOffset,
2209
+ y: getY(center) + bonusOffset
2210
+ }),
2211
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(icons__WEBPACK_IMPORTED_MODULE_6__/* .Star */ .Ux, {
2212
+ color: "white",
2213
+ height: iconSize,
2214
+ width: iconSize,
2215
+ x: getX(center) + iconOffset,
2216
+ y: getY(center) + iconOffset
2217
+ }),
2218
+ cellFilter.map((cell, index)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("use", {
2219
+ href: `#${CELL_FILTER}`,
2220
+ x: getX(cell),
2221
+ y: getY(cell)
2222
+ }, index))
2223
+ ]
2224
+ })
2225
+ }));
2226
+ const encodedSvg = globalThis.btoa(backgroundSvg);
2227
+ const dataUrl = `data:image/svg+xml;base64,${encodedSvg}`;
2228
+ const blob = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>(0,lib__WEBPACK_IMPORTED_MODULE_7__/* .dataUrlToBlob */ .kD)(dataUrl), [
2229
+ dataUrl
2230
+ ]);
2231
+ const blobUrl = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>URL.createObjectURL(blob), [
2232
+ blob
2233
+ ]);
2234
+ const url = `url(${blobUrl})`;
2235
+ return url;
2236
+ };
2237
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useBackgroundImage);
2238
+
2124
2239
  __webpack_async_result__();
2125
2240
  } catch(e) { __webpack_async_result__(e); } });
2126
2241
 
@@ -2143,9 +2258,9 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
2143
2258
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
2144
2259
  /* harmony import */ var hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75704);
2145
2260
  /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(36743);
2146
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(65175);
2261
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20208);
2147
2262
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83067);
2148
- /* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(97792);
2263
+ /* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(41051);
2149
2264
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([hooks__WEBPACK_IMPORTED_MODULE_4__, state__WEBPACK_IMPORTED_MODULE_7__]);
2150
2265
  ([hooks__WEBPACK_IMPORTED_MODULE_4__, state__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
2151
2266
  /* eslint-disable max-lines, max-statements */
@@ -2187,7 +2302,7 @@ const useGrid = (rows)=>{
2187
2302
  inputRefs
2188
2303
  ]);
2189
2304
  const getInputRefPosition = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((inputRef)=>{
2190
- return (0,_lib__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(inputRefs, (ref)=>ref.current === inputRef);
2305
+ return (0,_lib__WEBPACK_IMPORTED_MODULE_8__/* .getPositionInGrid */ .I)(inputRefs, (ref)=>ref.current === inputRef);
2191
2306
  }, [
2192
2307
  inputRefs
2193
2308
  ]);
@@ -2427,6 +2542,23 @@ const useGrid = (rows)=>{
2427
2542
  }
2428
2543
  const { x , y } = position;
2429
2544
  const character = event.key.toLowerCase();
2545
+ const isTogglingBlank = (0,lib__WEBPACK_IMPORTED_MODULE_6__/* .isCtrl */ .yl)(event) && character === "b";
2546
+ const twoCharacterTile = config.getTwoCharacterTileByPrefix(character);
2547
+ if (isTogglingBlank) {
2548
+ event.preventDefault();
2549
+ dispatch(state__WEBPACK_IMPORTED_MODULE_7__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(position));
2550
+ return;
2551
+ }
2552
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_6__/* .isCtrl */ .yl)(event) && twoCharacterTile) {
2553
+ event.preventDefault();
2554
+ dispatch(state__WEBPACK_IMPORTED_MODULE_7__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
2555
+ x,
2556
+ y,
2557
+ value: twoCharacterTile
2558
+ }));
2559
+ moveFocus(1);
2560
+ return;
2561
+ }
2430
2562
  const cell = rows[y][x];
2431
2563
  const twoCharacterCandidate = cell.tile.character + character;
2432
2564
  if (config.twoCharacterTiles.includes(twoCharacterCandidate)) {
@@ -2518,13 +2650,36 @@ __webpack_async_result__();
2518
2650
 
2519
2651
  /***/ }),
2520
2652
 
2521
- /***/ 97792:
2653
+ /***/ 41051:
2522
2654
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2523
2655
 
2524
2656
  "use strict";
2525
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2526
- /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
2527
- /* harmony export */ });
2657
+
2658
+ // EXPORTS
2659
+ __webpack_require__.d(__webpack_exports__, {
2660
+ "T": () => (/* reexport */ lib_getBonusColor),
2661
+ "I": () => (/* reexport */ lib_getPositionInGrid)
2662
+ });
2663
+
2664
+ // EXTERNAL MODULE: ../constants/build/index.js
2665
+ var build = __webpack_require__(7618);
2666
+ // EXTERNAL MODULE: ./src/parameters/index.ts
2667
+ var parameters = __webpack_require__(64534);
2668
+ ;// CONCATENATED MODULE: ./src/components/Board/lib/getBonusColor.ts
2669
+
2670
+
2671
+ const getBonusColor = (bonus)=>{
2672
+ if (bonus.type === build.BONUS_WORD) {
2673
+ return parameters/* COLOR_BONUS_WORD */.ti[bonus.multiplier];
2674
+ }
2675
+ if (bonus.score) {
2676
+ return parameters/* COLOR_BONUS_CHARACTER */.kr[bonus.score];
2677
+ }
2678
+ return parameters/* COLOR_BONUS_CHARACTER_MULTIPLIER */.$P[bonus.multiplier];
2679
+ };
2680
+ /* harmony default export */ const lib_getBonusColor = (getBonusColor);
2681
+
2682
+ ;// CONCATENATED MODULE: ./src/components/Board/lib/getPositionInGrid.ts
2528
2683
  const getPositionInGrid = (grid, constraint)=>{
2529
2684
  for(let y = 0; y < grid.length; ++y){
2530
2685
  for(let x = 0; x < grid[0].length; ++x){
@@ -2538,7 +2693,11 @@ const getPositionInGrid = (grid, constraint)=>{
2538
2693
  }
2539
2694
  return undefined;
2540
2695
  };
2541
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPositionInGrid);
2696
+ /* harmony default export */ const lib_getPositionInGrid = (getPositionInGrid);
2697
+
2698
+ ;// CONCATENATED MODULE: ./src/components/Board/lib/index.ts
2699
+
2700
+
2542
2701
 
2543
2702
 
2544
2703
  /***/ }),
@@ -2843,11 +3002,11 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
2843
3002
  /* harmony export */ });
2844
3003
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
2845
3004
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
2846
- /* harmony import */ var _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7618);
2847
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
2848
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
2849
- /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
2850
- /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
3005
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59003);
3006
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
3007
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6022);
3008
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
3009
+ /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(36743);
2851
3010
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(83067);
2852
3011
  /* harmony import */ var _DictionaryInput_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(80309);
2853
3012
  /* harmony import */ var _DictionaryInput_module_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_DictionaryInput_module_scss__WEBPACK_IMPORTED_MODULE_5__);
@@ -2860,9 +3019,11 @@ state__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (awa
2860
3019
 
2861
3020
 
2862
3021
  const DictionaryInput = ({ className })=>{
2863
- const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
3022
+ const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
2864
3023
  const translate = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTranslate */ .qM)();
3024
+ const locale = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectLocale */ .fN);
2865
3025
  const { input } = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectDictionary */ .w1);
3026
+ const { comma } = i18n__WEBPACK_IMPORTED_MODULE_3__/* .LOCALE_FEATURES */ .q0[locale];
2866
3027
  const handleChange = (event)=>{
2867
3028
  dispatch(state__WEBPACK_IMPORTED_MODULE_4__/* .dictionarySlice.actions.changeInput */ .lj.actions.changeInput(event.target.value));
2868
3029
  };
@@ -2871,11 +3032,11 @@ const DictionaryInput = ({ className })=>{
2871
3032
  dispatch(state__WEBPACK_IMPORTED_MODULE_4__/* .dictionarySlice.actions.submit */ .lj.actions.submit());
2872
3033
  };
2873
3034
  return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("form", {
2874
- className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_DictionaryInput_module_scss__WEBPACK_IMPORTED_MODULE_5___default().dictionaryInput), className),
3035
+ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_DictionaryInput_module_scss__WEBPACK_IMPORTED_MODULE_5___default().dictionaryInput), className),
2875
3036
  onSubmit: handleSubmit,
2876
3037
  children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("input", {
2877
3038
  className: (_DictionaryInput_module_scss__WEBPACK_IMPORTED_MODULE_5___default().input),
2878
- pattern: `.*[^\\s${_scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.COMMA_ARABIC}${_scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.COMMA_LATIN}].*`,
3039
+ pattern: `.*[^\\s${comma}].*`,
2879
3040
  placeholder: translate("dictionary.input.placeholder"),
2880
3041
  required: true,
2881
3042
  title: translate("dictionary.input.title"),
@@ -3975,7 +4136,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
3975
4136
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
3976
4137
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
3977
4138
  /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(36743);
3978
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(65175);
4139
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20208);
3979
4140
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83067);
3980
4141
  /* harmony import */ var _Rack_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(52404);
3981
4142
  /* harmony import */ var _Rack_module_scss__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_Rack_module_scss__WEBPACK_IMPORTED_MODULE_8__);
@@ -4075,7 +4236,9 @@ const Rack = ({ className , tileSize })=>{
4075
4236
  changeActiveIndex(1);
4076
4237
  },
4077
4238
  onKeyDown: (event)=>{
4078
- if (event.currentTarget.value === event.key) {
4239
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event) && config.isTwoCharacterTilePrefix(event.key)) {
4240
+ changeActiveIndex(1);
4241
+ } else if (event.currentTarget.value === event.key) {
4079
4242
  // change event did not fire because the same character was typed over the current one
4080
4243
  // but we still want to move the caret
4081
4244
  event.preventDefault();
@@ -4135,7 +4298,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
4135
4298
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
4136
4299
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6022);
4137
4300
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
4138
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(65175);
4301
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20208);
4139
4302
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83067);
4140
4303
  /* harmony import */ var _Tile__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(96815);
4141
4304
  /* harmony import */ var _Rack_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(52404);
@@ -4189,7 +4352,19 @@ const RackTile = ({ activeIndexRef , character , className , index , inputRef ,
4189
4352
  index
4190
4353
  }));
4191
4354
  },
4192
- onKeyDown
4355
+ onKeyDown: (event)=>{
4356
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event) && config.isTwoCharacterTilePrefix(event.key)) {
4357
+ event.preventDefault();
4358
+ event.stopPropagation();
4359
+ const twoTilesCharacter = config.getTwoCharacterTileByPrefix(event.key);
4360
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
4361
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .rackSlice.actions.changeCharacter */ .O_.actions.changeCharacter({
4362
+ character: twoTilesCharacter,
4363
+ index
4364
+ }));
4365
+ }
4366
+ onKeyDown(event);
4367
+ }
4193
4368
  });
4194
4369
  }, [
4195
4370
  index,
@@ -4322,7 +4497,7 @@ const Cell = ({ className , translationKey , tooltip , value })=>{
4322
4497
  const locale = (0,state__WEBPACK_IMPORTED_MODULE_2__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_2__/* .selectLocale */ .fN);
4323
4498
  const formattedValue = value.toLocaleString(locale);
4324
4499
  const triggerProps = (0,_Tooltip__WEBPACK_IMPORTED_MODULE_3__/* .useTooltip */ .l)(`${translate(translationKey)}: ${tooltip || formattedValue}`);
4325
- return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
4500
+ return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
4326
4501
  className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Results_module_scss__WEBPACK_IMPORTED_MODULE_4___default().cell), className),
4327
4502
  ...triggerProps,
4328
4503
  children: formattedValue
@@ -4428,7 +4603,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
4428
4603
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
4429
4604
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
4430
4605
  /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(36743);
4431
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(65175);
4606
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20208);
4432
4607
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83067);
4433
4608
  /* harmony import */ var types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1966);
4434
4609
  /* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(29287);
@@ -4452,10 +4627,12 @@ const Result = ({ data , index , style })=>{
4452
4627
  const ref = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);
4453
4628
  const columns = (0,_useColumns__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)();
4454
4629
  const locale = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectLocale */ .fN);
4455
- const { consonants , vowels } = i18n__WEBPACK_IMPORTED_MODULE_3__/* .LOCALE_FEATURES */ .q0[locale];
4630
+ const { consonants , direction , separator , vowels } = i18n__WEBPACK_IMPORTED_MODULE_3__/* .LOCALE_FEATURES */ .q0[locale];
4456
4631
  const result = results[index];
4457
4632
  const isMatching = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)((state)=>(0,state__WEBPACK_IMPORTED_MODULE_5__/* .selectIsResultMatching */ .yJ)(state, index));
4458
- const otherWords = result.words.slice(1).join(" / ").toLocaleUpperCase();
4633
+ const words = direction === "rtl" ? [
4634
+ ...result.words
4635
+ ].reverse() : result.words;
4459
4636
  const enabledColumns = Object.fromEntries(columns.map((column)=>[
4460
4637
  column.id,
4461
4638
  true
@@ -4485,7 +4662,7 @@ const Result = ({ data , index , style })=>{
4485
4662
  enabledColumns[types__WEBPACK_IMPORTED_MODULE_6__/* .ResultColumn.Word */ .M.Word] && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Cell__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
4486
4663
  className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_9___default().word),
4487
4664
  translationKey: "common.word",
4488
- value: `${result.word.toLocaleUpperCase()}${otherWords.length > 0 ? ` (${otherWords})` : ""}`
4665
+ value: result.word
4489
4666
  }),
4490
4667
  enabledColumns[types__WEBPACK_IMPORTED_MODULE_6__/* .ResultColumn.TilesCount */ .M.TilesCount] && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Cell__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
4491
4668
  className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_9___default().stat),
@@ -4510,7 +4687,7 @@ const Result = ({ data , index , style })=>{
4510
4687
  enabledColumns[types__WEBPACK_IMPORTED_MODULE_6__/* .ResultColumn.WordsCount */ .M.WordsCount] && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Cell__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
4511
4688
  className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_9___default().stat),
4512
4689
  translationKey: "common.words",
4513
- tooltip: `${result.wordsCount} (${result.words.join(" / ").toLocaleUpperCase()})`,
4690
+ tooltip: `${result.wordsCount.toLocaleString(locale)} (${words.join(separator)})`,
4514
4691
  value: result.wordsCount
4515
4692
  }),
4516
4693
  enabledColumns[types__WEBPACK_IMPORTED_MODULE_6__/* .ResultColumn.Points */ .M.Points] && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Cell__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
@@ -4900,7 +5077,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
4900
5077
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
4901
5078
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
4902
5079
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
4903
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(65175);
5080
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20208);
4904
5081
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83067);
4905
5082
  /* harmony import */ var _ResultsInput_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60066);
4906
5083
  /* harmony import */ var _ResultsInput_module_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_ResultsInput_module_scss__WEBPACK_IMPORTED_MODULE_6__);
@@ -5045,7 +5222,7 @@ const Solver = ({ className , onShowResults })=>{
5045
5222
  const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
5046
5223
  const translate = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTranslate */ .qM)();
5047
5224
  const isTouchDevice = (0,hooks__WEBPACK_IMPORTED_MODULE_4__/* .useIsTouchDevice */ .YQ)();
5048
- const { cellSize , maxControlsWidth , showCompactControls , showFloatingSolveButton , tileSize } = (0,hooks__WEBPACK_IMPORTED_MODULE_4__/* .useAppLayout */ .Ft)();
5225
+ const { maxControlsWidth , showCompactControls , showFloatingSolveButton , tileSize } = (0,hooks__WEBPACK_IMPORTED_MODULE_4__/* .useAppLayout */ .Ft)();
5049
5226
  const error = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectSolveError */ .Rn);
5050
5227
  const isOutdated = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectAreResultsOutdated */ .Mj);
5051
5228
  const resultCandidate = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectResultCandidate */ .Xk);
@@ -5111,7 +5288,6 @@ const Solver = ({ className , onShowResults })=>{
5111
5288
  onSubmit: handleSubmit,
5112
5289
  children: [
5113
5290
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Board__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
5114
- cellSize: cellSize,
5115
5291
  className: (_Solver_module_scss__WEBPACK_IMPORTED_MODULE_13___default().board)
5116
5292
  }),
5117
5293
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("input", {
@@ -5216,7 +5392,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
5216
5392
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6022);
5217
5393
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
5218
5394
  /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(58966);
5219
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(65175);
5395
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20208);
5220
5396
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83067);
5221
5397
  /* harmony import */ var _Button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83900);
5222
5398
  /* harmony import */ var _Spinner__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(33538);
@@ -5624,7 +5800,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
5624
5800
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16689);
5625
5801
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
5626
5802
  /* harmony import */ var hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75704);
5627
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(65175);
5803
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20208);
5628
5804
  /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(64534);
5629
5805
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83067);
5630
5806
  /* harmony import */ var _TilePure__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(83147);
@@ -5841,7 +6017,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
5841
6017
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16689);
5842
6018
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
5843
6019
  /* harmony import */ var hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75704);
5844
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(65175);
6020
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20208);
5845
6021
  /* harmony import */ var _Tooltip_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(53229);
5846
6022
  /* harmony import */ var _Tooltip_module_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_Tooltip_module_scss__WEBPACK_IMPORTED_MODULE_6__);
5847
6023
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_floating_ui_react__WEBPACK_IMPORTED_MODULE_1__, hooks__WEBPACK_IMPORTED_MODULE_4__]);
@@ -6141,6 +6317,7 @@ const useAppLayout = ()=>{
6141
6317
  return {
6142
6318
  actionsWidth: 2 * parameters__WEBPACK_IMPORTED_MODULE_0__/* .BUTTON_HEIGHT */ .FZ - parameters__WEBPACK_IMPORTED_MODULE_0__/* .BORDER_WIDTH */ .YF,
6143
6319
  animateTile: !isLessThanXs,
6320
+ boardSize,
6144
6321
  cellSize,
6145
6322
  dictionaryHeight,
6146
6323
  isModalFullWidth: isLessThanS,
@@ -6174,7 +6351,7 @@ __webpack_async_result__();
6174
6351
  /* harmony export */ });
6175
6352
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
6176
6353
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6177
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65175);
6354
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20208);
6178
6355
 
6179
6356
 
6180
6357
  const useDirection = (direction)=>{
@@ -6239,7 +6416,7 @@ const useIsTouchDevice = ()=>{
6239
6416
  /* harmony export */ });
6240
6417
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
6241
6418
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6242
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65175);
6419
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20208);
6243
6420
 
6244
6421
 
6245
6422
  const useLanguage = (language)=>{
@@ -6478,7 +6655,7 @@ const useOnWindowResize = (onResize)=>{
6478
6655
  /* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom_client__WEBPACK_IMPORTED_MODULE_2__);
6479
6656
  /* harmony import */ var react_portal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63938);
6480
6657
  /* harmony import */ var react_portal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_portal__WEBPACK_IMPORTED_MODULE_3__);
6481
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(65175);
6658
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20208);
6482
6659
 
6483
6660
 
6484
6661
 
@@ -6568,8 +6745,10 @@ __webpack_require__.d(__webpack_exports__, {
6568
6745
  "ZP": () => (/* reexport */ i18n_i18n)
6569
6746
  });
6570
6747
 
6748
+ // EXTERNAL MODULE: ../constants/build/index.js
6749
+ var build = __webpack_require__(7618);
6571
6750
  // EXTERNAL MODULE: ../types/build/index.js
6572
- var build = __webpack_require__(34046);
6751
+ var types_build = __webpack_require__(34046);
6573
6752
  // EXTERNAL MODULE: ./src/icons/index.ts + 41 modules
6574
6753
  var icons = __webpack_require__(58966);
6575
6754
  // EXTERNAL MODULE: ./src/i18n/i18n.module.scss
@@ -6579,107 +6758,122 @@ var i18n_module_default = /*#__PURE__*/__webpack_require__.n(i18n_module);
6579
6758
 
6580
6759
 
6581
6760
 
6761
+
6582
6762
  const LOCALE_FEATURES = {
6583
- [build.Locale.DE_DE]: {
6584
- direction: "ltr",
6763
+ [types_build.Locale.DE_DE]: {
6764
+ comma: build.COMMA_LATIN,
6585
6765
  consonants: true,
6766
+ direction: "ltr",
6767
+ separator: `${build.COMMA_LATIN} `,
6586
6768
  vowels: true
6587
6769
  },
6588
- [build.Locale.EN_GB]: {
6589
- direction: "ltr",
6770
+ [types_build.Locale.EN_GB]: {
6771
+ comma: build.COMMA_LATIN,
6590
6772
  consonants: true,
6773
+ direction: "ltr",
6774
+ separator: `${build.COMMA_LATIN} `,
6591
6775
  vowels: true
6592
6776
  },
6593
- [build.Locale.EN_US]: {
6594
- direction: "ltr",
6777
+ [types_build.Locale.EN_US]: {
6778
+ comma: build.COMMA_LATIN,
6595
6779
  consonants: true,
6780
+ direction: "ltr",
6781
+ separator: `${build.COMMA_LATIN} `,
6596
6782
  vowels: true
6597
6783
  },
6598
- [build.Locale.ES_ES]: {
6599
- direction: "ltr",
6784
+ [types_build.Locale.ES_ES]: {
6785
+ comma: build.COMMA_LATIN,
6600
6786
  consonants: true,
6787
+ direction: "ltr",
6788
+ separator: `${build.COMMA_LATIN} `,
6601
6789
  vowels: true
6602
6790
  },
6603
- [build.Locale.FA_IR]: {
6604
- direction: "rtl",
6791
+ [types_build.Locale.FA_IR]: {
6792
+ comma: build.COMMA_ARABIC,
6605
6793
  consonants: false,
6794
+ direction: "rtl",
6795
+ separator: `${build.COMMA_ARABIC} `,
6606
6796
  vowels: false
6607
6797
  },
6608
- [build.Locale.FR_FR]: {
6609
- direction: "ltr",
6798
+ [types_build.Locale.FR_FR]: {
6799
+ comma: build.COMMA_LATIN,
6610
6800
  consonants: true,
6801
+ direction: "ltr",
6802
+ separator: `${build.COMMA_LATIN} `,
6611
6803
  vowels: true
6612
6804
  },
6613
- [build.Locale.PL_PL]: {
6614
- direction: "ltr",
6805
+ [types_build.Locale.PL_PL]: {
6806
+ comma: build.COMMA_LATIN,
6615
6807
  consonants: true,
6808
+ direction: "ltr",
6809
+ separator: `${build.COMMA_LATIN} `,
6616
6810
  vowels: true
6617
6811
  }
6618
6812
  };
6619
6813
  const LOCALE_FLAGS = {
6620
- [build.Locale.DE_DE]: {
6814
+ [types_build.Locale.DE_DE]: {
6621
6815
  className: (i18n_module_default()).de,
6622
6816
  Icon: icons/* FlagDe */.rV,
6623
6817
  label: "Deutsch",
6624
6818
  name: "German",
6625
- value: build.Locale.DE_DE
6819
+ value: types_build.Locale.DE_DE
6626
6820
  },
6627
- [build.Locale.EN_GB]: {
6821
+ [types_build.Locale.EN_GB]: {
6628
6822
  className: (i18n_module_default()).gb,
6629
6823
  Icon: icons/* FlagGb */.eP,
6630
6824
  label: "English (GB)",
6631
6825
  name: "English (GB)",
6632
- value: build.Locale.EN_GB
6826
+ value: types_build.Locale.EN_GB
6633
6827
  },
6634
- [build.Locale.EN_US]: {
6828
+ [types_build.Locale.EN_US]: {
6635
6829
  className: (i18n_module_default()).us,
6636
6830
  Icon: icons/* FlagUs */.YK,
6637
6831
  label: "English (US)",
6638
6832
  name: "English (US)",
6639
- value: build.Locale.EN_US
6833
+ value: types_build.Locale.EN_US
6640
6834
  },
6641
- [build.Locale.ES_ES]: {
6835
+ [types_build.Locale.ES_ES]: {
6642
6836
  className: (i18n_module_default()).es,
6643
6837
  Icon: icons/* FlagEs */.d,
6644
6838
  label: "Espa\xf1ol",
6645
6839
  name: "Spanish",
6646
- value: build.Locale.ES_ES
6840
+ value: types_build.Locale.ES_ES
6647
6841
  },
6648
- [build.Locale.FA_IR]: {
6842
+ [types_build.Locale.FA_IR]: {
6649
6843
  className: (i18n_module_default()).fa,
6650
6844
  Icon: icons/* FlagFa */.$M,
6651
6845
  label: "فارسی",
6652
6846
  name: "Persian",
6653
- value: build.Locale.FA_IR
6847
+ value: types_build.Locale.FA_IR
6654
6848
  },
6655
- [build.Locale.FR_FR]: {
6849
+ [types_build.Locale.FR_FR]: {
6656
6850
  className: (i18n_module_default()).fr,
6657
6851
  Icon: icons/* FlagFr */.OV,
6658
6852
  label: "Fran\xe7ais",
6659
6853
  name: "French",
6660
- value: build.Locale.FR_FR
6854
+ value: types_build.Locale.FR_FR
6661
6855
  },
6662
- [build.Locale.PL_PL]: {
6856
+ [types_build.Locale.PL_PL]: {
6663
6857
  className: (i18n_module_default()).pl,
6664
6858
  Icon: icons/* FlagPl */.fd,
6665
6859
  label: "Polski",
6666
6860
  name: "Polish",
6667
- value: build.Locale.PL_PL
6861
+ value: types_build.Locale.PL_PL
6668
6862
  }
6669
6863
  };
6670
6864
 
6671
6865
  ;// CONCATENATED MODULE: ./src/i18n/de.json
6672
- 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.tile.location":"Brett: Stein ({{x}}, {{y}})","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.next":"Weiter","common.points":"Punkte","common.previous":"Zurück","common.tiles":"Steine","common.two-letter-tiles":"Zwei-Buchstaben","common.vowels":"Vokale","common.word":"Wort","common.words":"Wörter","dictionary":"Wörterbuch","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örterbuchdéfinition wird hier angezeigt.","dictionary.input.placeholder":"Durchsuche Wörterbuch...","dictionary.input.title":"Durch Kommas getrennte Wörter","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)","menu":"Menü","rack.placeholder":"Steine…","rack.tile.location":"Ablage: Stein ({{index}})","remaining-tiles":"Restliche Steine","results":"Ergebnisse","results.empty-state.no-results":"Keine Ergebnisse - kein Wort konnte generiert werden.","results.empty-state.outdated":"Ergebnisse sind alt.","results.empty-state.uninitialized":"Wörter die aus deinen Buchstaben generiert wurden erscheinen hier.","results.input.placeholder":"Suchergebnisse... (RegExp)","results.insert":"Hinzufügen","results.preview":"Vorschau","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"}');
6866
+ const de_namespaceObject = JSON.parse('{"cell.filter-cell":"Zielort","cell.set-blank":"Als Blanko markieren","cell.set-not-blank":"Nicht als Blanko markieren","cell.tile.location":"Brett: Stein ({{x}}, {{y}})","cell.toggle-direction":"Schreibrichtung","common.blanks":"Blankos","common.clear":"Löschen","common.close":"Schließen","common.consonants":"Konsonanten","common.loading":"Laden","common.next":"Weiter","common.points":"Punkte","common.previous":"Zurück","common.tiles":"Steine","common.two-letter-tiles":"Zwei-Buchstaben","common.vowels":"Vokale","common.word":"Wort","common.words":"Wörter","dictionary":"Wörterbuch","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örterbuchdéfinition wird hier angezeigt.","dictionary.input.placeholder":"Durchsuche Wörterbuch...","dictionary.input.title":"Durch Kommas getrennte Wörter","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)","menu":"Menü","rack.placeholder":"Steine…","rack.tile.location":"Ablage: Stein ({{index}})","remaining-tiles":"Restliche Steine","results":"Ergebnisse","results.empty-state.no-results":"Keine Ergebnisse - kein Wort konnte generiert werden.","results.empty-state.outdated":"Ergebnisse sind alt.","results.empty-state.uninitialized":"Wörter die aus deinen Buchstaben generiert wurden erscheinen hier.","results.input.placeholder":"Suchergebnisse... (RegExp)","results.insert":"Hinzufügen","results.preview":"Vorschau","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"}');
6673
6867
  ;// CONCATENATED MODULE: ./src/i18n/en.json
6674
- 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.tile.location":"Board: tile ({{x}}, {{y}})","cell.toggle-direction":"Typing direction - click to toggle","common.blanks":"Blanks","common.clear":"Clear","common.close":"Close","common.consonants":"Consonants","common.loading":"Loading","common.next":"Next","common.points":"Points","common.previous":"Previous","common.tiles":"Tiles","common.two-letter-tiles":"Two-letter","common.vowels":"Vowels","common.word":"Word","common.words":"Words","dictionary":"Dictionary","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":"Word definition will be shown here.","dictionary.input.placeholder":"Search dictionary...","dictionary.input.title":"Comma-separated words","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)","menu":"Menu","rack.placeholder":"Letters","rack.tile.location":"Rack: tile ({{index}})","remaining-tiles":"Remaining tiles","results":"Results","results.empty-state.no-results":"No results - unable to generate any words.","results.empty-state.outdated":"Results are outdated.","results.empty-state.uninitialized":"Words generated from your letters will be shown here.","results.input.placeholder":"Search results... (RegExp)","results.insert":"Insert","results.preview":"Preview","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"}');
6868
+ const en_namespaceObject = JSON.parse('{"cell.filter-cell":"Target destination","cell.set-blank":"Mark it a blank","cell.set-not-blank":"Mark it not a blank","cell.tile.location":"Board: tile ({{x}}, {{y}})","cell.toggle-direction":"Typing direction","common.blanks":"Blanks","common.clear":"Clear","common.close":"Close","common.consonants":"Consonants","common.loading":"Loading","common.next":"Next","common.points":"Points","common.previous":"Previous","common.tiles":"Tiles","common.two-letter-tiles":"Two-letter","common.vowels":"Vowels","common.word":"Word","common.words":"Words","dictionary":"Dictionary","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":"Word definition will be shown here.","dictionary.input.placeholder":"Search dictionary...","dictionary.input.title":"Comma-separated words","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)","menu":"Menu","rack.placeholder":"Letters","rack.tile.location":"Rack: tile ({{index}})","remaining-tiles":"Remaining tiles","results":"Results","results.empty-state.no-results":"No results - unable to generate any words.","results.empty-state.outdated":"Results are outdated.","results.empty-state.uninitialized":"Words generated from your letters will be shown here.","results.input.placeholder":"Search results... (RegExp)","results.insert":"Insert","results.preview":"Preview","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"}');
6675
6869
  ;// CONCATENATED MODULE: ./src/i18n/es.json
6676
- 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.tile.location":"Tablero: espacio ({{x}}, {{y}})","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.next":"Siguiente","common.points":"Puntos","common.previous":"Anterior","common.tiles":"Longitud","common.two-letter-tiles":"Dos letras","common.vowels":"Vocales","common.word":"Palabra","common.words":"Palabras","dictionary":"Diccionario","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.","dictionary.input.placeholder":"Busca el diccionario...","dictionary.input.title":"Palabras separadas por comas","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)","menu":"Menú","rack.placeholder":"Letras…","rack.tile.location":"Estante: espacio ({{index}})","remaining-tiles":"Casillas restantes","results":"Resultados","results.empty-state.no-results":"No hay resultados; no se pueden generar palabras","results.empty-state.outdated":"Los resultados están desactualizados.","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.insert":"Insertar","results.preview":"Vista previa","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"}');
6870
+ const es_namespaceObject = JSON.parse('{"cell.filter-cell":"Destino objetivo","cell.set-blank":"Marcar como en blanco","cell.set-not-blank":"Marcar como no en blanco","cell.tile.location":"Tablero: espacio ({{x}}, {{y}})","cell.toggle-direction":"Dirección de escritura","common.blanks":"Blancos","common.clear":"Borrar","common.close":"Cerrar","common.consonants":"Consonantes","common.loading":"Cargando","common.next":"Siguiente","common.points":"Puntos","common.previous":"Anterior","common.tiles":"Longitud","common.two-letter-tiles":"Dos letras","common.vowels":"Vocales","common.word":"Palabra","common.words":"Palabras","dictionary":"Diccionario","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.","dictionary.input.placeholder":"Busca el diccionario...","dictionary.input.title":"Palabras separadas por comas","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)","menu":"Menú","rack.placeholder":"Letras…","rack.tile.location":"Estante: espacio ({{index}})","remaining-tiles":"Casillas restantes","results":"Resultados","results.empty-state.no-results":"No hay resultados; no se pueden generar palabras","results.empty-state.outdated":"Los resultados están desactualizados.","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.insert":"Insertar","results.preview":"Vista previa","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"}');
6677
6871
  ;// CONCATENATED MODULE: ./src/i18n/fa.json
6678
- const fa_namespaceObject = JSON.parse('{"cell.filter-cell":"مقصد - کلیک برای تغییر","cell.set-blank":"علامت گذاری به عنوان خالی","cell.set-not-blank":"علامت گذاری به عنوان غیر خالی","cell.toggle-direction":"جهت تایپ - کلیک برای تغییر","cell.tile.location":"({{x}}، {{y}}) کاشی: صفحه","common.blanks":"خالی","common.clear":"پاک کردن","common.close":"بستن","common.consonants":"حروف صامت","common.loading":"در حال بارگزاری","common.next":"بعدی","common.points":"امتیازات","common.previous":"قبلی","common.tiles":"کاشی ها","common.two-letter-tiles":"دو حرفی","common.vowels":"حروف مصوت","common.word":"کلمه","common.words":"کلمات","dictionary":"فرهنگ لغت","dictionary.empty-state.no-definitions":"کلمه در فرهنگ لغت وجود دارد، ولی معنایی برای آن ثبت نشده است.","dictionary.empty-state.no-results":"کلمه در فرهنگ لغت یافت نشد.","dictionary.empty-state.not-allowed":"این کلمه مجاز نیست.","dictionary.empty-state.uninitialized":"معنی لغت اینجا نمایش داده خواهد شد.","dictionary.input.placeholder":"جستجو در فرهنگ لغت ...","dictionary.input.title":"کلمات جدا شده با کاما","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":"وارد کردن کاشی خالی (دکمه اسپیس)","menu":"منو","rack.placeholder":"لیستحرف","rack.tile.location":"({{index}}) کاشی: طاقچه","remaining-tiles":"کاشی های باقی مانده","results":"نتایج","results.empty-state.no-results":"کلمه قابل استفاده پیدا نشد.","results.empty-state.outdated":"نتایج به روز نیستند، برای بروز.","results.empty-state.uninitialized":"کلمات تولید شده از حروف شما اینجا نمایش داده خواهد شد.","results.input.placeholder":"جستجو در نتایج (RegExp)","results.insert":"وارد کردن","results.preview":"پیش نمایش","results.solve":"حل کن","settings":"تنظیمات","settings.autoGroupTiles":"کاشی های باقی مانده ی طاقچه را کنار هم قرار بده","settings.autoGroupTiles.left":"در سمت چپ","settings.autoGroupTiles.right":"در سمت راست","settings.autoGroupTiles.null":"کنار هم قرار نده","settings.game":"بازی","settings.language":"زبان","words":"کلمات ساخته شده","words.invalid":"نا معتبر","words.valid":"معتبر"}');
6872
+ const fa_namespaceObject = JSON.parse('{"cell.filter-cell":"مقصد","cell.set-blank":"علامت گذاری به عنوان خالی","cell.set-not-blank":"علامت گذاری به عنوان غیر خالی","cell.tile.location":"({{x}}، {{y}}) کاشی: صفحه","cell.toggle-direction":"جهت تایپ","common.blanks":"خالی","common.clear":"پاک کردن","common.close":"بستن","common.consonants":"حروف صامت","common.loading":"در حال بارگزاری","common.next":"بعدی","common.points":"امتیازات","common.previous":"قبلی","common.tiles":"کاشی ها","common.two-letter-tiles":"دو حرفی","common.vowels":"حروف مصوت","common.word":"کلمه","common.words":"کلمات","dictionary":"فرهنگ لغت","dictionary.empty-state.no-definitions":"کلمه در فرهنگ لغت وجود دارد، ولی معنایی برای آن ثبت نشده است.","dictionary.empty-state.no-results":"کلمه در فرهنگ لغت یافت نشد.","dictionary.empty-state.not-allowed":"این کلمه مجاز نیست.","dictionary.empty-state.uninitialized":"معنی لغت اینجا نمایش داده خواهد شد.","dictionary.input.placeholder":"جستجو در فرهنگ لغت ...","dictionary.input.title":"کلمات جدا شده با کاما","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":"وارد کردن کاشی خالی (دکمه اسپیس)","menu":"منو","rack.placeholder":"لیستحرف","rack.tile.location":"({{index}}) کاشی: طاقچه","remaining-tiles":"کاشی های باقی مانده","results":"نتایج","results.empty-state.no-results":"کلمه قابل استفاده پیدا نشد.","results.empty-state.outdated":"نتایج به روز نیستند، برای بروز.","results.empty-state.uninitialized":"کلمات تولید شده از حروف شما اینجا نمایش داده خواهد شد.","results.input.placeholder":"جستجو در نتایج (RegExp)","results.insert":"وارد کردن","results.preview":"پیش نمایش","results.solve":"حل کن","settings":"تنظیمات","settings.autoGroupTiles":"کاشی های باقی مانده ی طاقچه را کنار هم قرار بده","settings.autoGroupTiles.left":"در سمت چپ","settings.autoGroupTiles.right":"در سمت راست","settings.autoGroupTiles.null":"کنار هم قرار نده","settings.game":"بازی","settings.language":"زبان","words":"کلمات ساخته شده","words.invalid":"نا معتبر","words.valid":"معتبر"}');
6679
6873
  ;// CONCATENATED MODULE: ./src/i18n/fr.json
6680
- 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.tile.location":"Plateau: la case ({{x}}, {{y}})","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.next":"Suivant","common.points":"Points","common.previous":"Précédent","common.tiles":"Cases","common.two-letter-tiles":"Deux lettres","common.vowels":"Voyelles","common.word":"Mot","common.words":"Mots","dictionary":"Dictionnaire","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 sera affichée ici.","dictionary.input.placeholder":"Rechercher dans le dictionnaire...","dictionary.input.title":"Mots séparées par des virgules","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)","menu":"Menu","rack.placeholder":"Lettres","rack.tile.location":"Chevalet: la case ({{index}})","remaining-tiles":"Cases restantes","results":"Résultats","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é.","results.empty-state.uninitialized":"Les mots générés à partir de vos lettres seront affichés ici.","results.input.placeholder":"Rechercher les résultats... (RegExp)","results.insert":"Inserer","results.preview":"Prévisualisation","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"}');
6874
+ const fr_namespaceObject = JSON.parse('{"cell.filter-cell":"Destination cible","cell.set-blank":"Marquer comme vide","cell.set-not-blank":"Marquer comme non vide","cell.tile.location":"Plateau: la case ({{x}}, {{y}})","cell.toggle-direction":"Direction d\'écriture","common.blanks":"Cases vides","common.clear":"Effacer","common.close":"Fermer","common.consonants":"Consonnes","common.loading":"Chargement","common.next":"Suivant","common.points":"Points","common.previous":"Précédent","common.tiles":"Cases","common.two-letter-tiles":"Deux lettres","common.vowels":"Voyelles","common.word":"Mot","common.words":"Mots","dictionary":"Dictionnaire","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 sera affichée ici.","dictionary.input.placeholder":"Rechercher dans le dictionnaire...","dictionary.input.title":"Mots séparées par des virgules","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)","menu":"Menu","rack.placeholder":"Lettres","rack.tile.location":"Chevalet: la case ({{index}})","remaining-tiles":"Cases restantes","results":"Résultats","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é.","results.empty-state.uninitialized":"Les mots générés à partir de vos lettres seront affichés ici.","results.input.placeholder":"Rechercher les résultats... (RegExp)","results.insert":"Inserer","results.preview":"Prévisualisation","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"}');
6681
6875
  ;// CONCATENATED MODULE: ./src/i18n/pl.json
6682
- 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.tile.location":"Plansza: płytka ({{x}}, {{y}})","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.next":"Następne","common.points":"Punkty","common.previous":"Poprzednie","common.tiles":"Płytki","common.two-letter-tiles":"Dwuliterowe","common.vowels":"Samogłoski","common.word":"Słowo","common.words":"Słowa","dictionary":"Słownik","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 definicja słowa.","dictionary.input.placeholder":"Szukaj w słowniku...","dictionary.input.title":"Słowa rozdzielone przecinkiem","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)","menu":"Menu","rack.placeholder":"Literki","rack.tile.location":"Stojak: płytka ({{index}})","remaining-tiles":"Pozostałe płytki","results":"Wyniki","results.empty-state.no-results":"Brak wyników - nie można wygenerować żadnego słowa.","results.empty-state.outdated":"Wyniki są nieaktualne.","results.empty-state.uninitialized":"Tu zostaną wyświetlone słowa wygenerowane z Twoich liter.","results.input.placeholder":"Szukaj rozwiązania... (RegExp)","results.insert":"Wstaw","results.preview":"Podgląd","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"}');
6876
+ const pl_namespaceObject = JSON.parse('{"cell.filter-cell":"Miejsce docelowe","cell.set-blank":"Oznacz jako blank","cell.set-not-blank":"Oznacz jako nie blank","cell.tile.location":"Plansza: płytka ({{x}}, {{y}})","cell.toggle-direction":"Kierunek wpisywania","common.blanks":"Blanki","common.clear":"Wyczyść","common.close":"Zamknij","common.consonants":"Spółgłoski","common.loading":"Ładowanie","common.next":"Następne","common.points":"Punkty","common.previous":"Poprzednie","common.tiles":"Płytki","common.two-letter-tiles":"Dwuliterowe","common.vowels":"Samogłoski","common.word":"Słowo","common.words":"Słowa","dictionary":"Słownik","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 definicja słowa.","dictionary.input.placeholder":"Szukaj w słowniku...","dictionary.input.title":"Słowa rozdzielone przecinkiem","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)","menu":"Menu","rack.placeholder":"Literki","rack.tile.location":"Stojak: płytka ({{index}})","remaining-tiles":"Pozostałe płytki","results":"Wyniki","results.empty-state.no-results":"Brak wyników - nie można wygenerować żadnego słowa.","results.empty-state.outdated":"Wyniki są nieaktualne.","results.empty-state.uninitialized":"Tu zostaną wyświetlone słowa wygenerowane z Twoich liter.","results.input.placeholder":"Szukaj rozwiązania... (RegExp)","results.insert":"Wstaw","results.preview":"Podgląd","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"}');
6683
6877
  ;// CONCATENATED MODULE: ./src/i18n/i18n.ts
6684
6878
 
6685
6879
 
@@ -6689,13 +6883,13 @@ const pl_namespaceObject = JSON.parse('{"cell.filter-cell":"Miejsce docelowe - k
6689
6883
 
6690
6884
 
6691
6885
  const i18n = {
6692
- [build.Locale.DE_DE]: de_namespaceObject,
6693
- [build.Locale.EN_GB]: en_namespaceObject,
6694
- [build.Locale.EN_US]: en_namespaceObject,
6695
- [build.Locale.ES_ES]: es_namespaceObject,
6696
- [build.Locale.FA_IR]: fa_namespaceObject,
6697
- [build.Locale.FR_FR]: fr_namespaceObject,
6698
- [build.Locale.PL_PL]: pl_namespaceObject
6886
+ [types_build.Locale.DE_DE]: de_namespaceObject,
6887
+ [types_build.Locale.EN_GB]: en_namespaceObject,
6888
+ [types_build.Locale.EN_US]: en_namespaceObject,
6889
+ [types_build.Locale.ES_ES]: es_namespaceObject,
6890
+ [types_build.Locale.FA_IR]: fa_namespaceObject,
6891
+ [types_build.Locale.FR_FR]: fr_namespaceObject,
6892
+ [types_build.Locale.PL_PL]: pl_namespaceObject
6699
6893
  };
6700
6894
  /* harmony default export */ const i18n_i18n = (i18n);
6701
6895
 
@@ -7708,7 +7902,7 @@ var SvgStar = function SvgStar(props) {
7708
7902
 
7709
7903
  /***/ }),
7710
7904
 
7711
- /***/ 65175:
7905
+ /***/ 20208:
7712
7906
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
7713
7907
 
7714
7908
  "use strict";
@@ -7722,6 +7916,7 @@ __webpack_require__.d(__webpack_exports__, {
7722
7916
  "np": () => (/* reexport */ lib_createKeyboardNavigation),
7723
7917
  "Ml": () => (/* reexport */ lib_createNullMovingComparator),
7724
7918
  "GF": () => (/* reexport */ lib_createRegExp),
7919
+ "kD": () => (/* reexport */ lib_dataUrlToBlob),
7725
7920
  "nK": () => (/* reexport */ lib_extractCharacters),
7726
7921
  "WM": () => (/* reexport */ lib_extractInputValue),
7727
7922
  "Jp": () => (/* reexport */ lib_findCell),
@@ -7731,6 +7926,7 @@ __webpack_require__.d(__webpack_exports__, {
7731
7926
  "CU": () => (/* reexport */ lib_groupResults),
7732
7927
  "sf": () => (/* reexport */ lib_guessLocale),
7733
7928
  "Mf": () => (/* reexport */ lib_inverseDirection),
7929
+ "yl": () => (/* reexport */ lib_isCtrl),
7734
7930
  "V5": () => (/* reexport */ lib_isMac),
7735
7931
  "Kj": () => (/* reexport */ lib_isRegExp),
7736
7932
  "HP": () => (/* reexport */ lib_memoize),
@@ -7825,6 +8021,27 @@ const createRegExp = (input)=>{
7825
8021
  };
7826
8022
  /* harmony default export */ const lib_createRegExp = (createRegExp);
7827
8023
 
8024
+ ;// CONCATENATED MODULE: ./src/lib/dataUrlToBlob.ts
8025
+ const dataUrlToBlob = (dataUrl)=>{
8026
+ const [mime = "", data] = dataUrl.split(",");
8027
+ const [, type] = mime.match(/:(.*?);/) || [];
8028
+ if (typeof type !== "string") {
8029
+ throw new Error("Unsupported data URL");
8030
+ }
8031
+ const byteString = globalThis.atob(data);
8032
+ const u8arr = new Uint8Array(byteString.length);
8033
+ let index = byteString.length;
8034
+ while(index--){
8035
+ u8arr[index] = byteString.charCodeAt(index);
8036
+ }
8037
+ return new Blob([
8038
+ u8arr
8039
+ ], {
8040
+ type
8041
+ });
8042
+ };
8043
+ /* harmony default export */ const lib_dataUrlToBlob = (dataUrlToBlob);
8044
+
7828
8045
  // EXTERNAL MODULE: ../types/build/index.js
7829
8046
  var build = __webpack_require__(34046);
7830
8047
  ;// CONCATENATED MODULE: ./src/lib/detectLocale.ts
@@ -8095,6 +8312,12 @@ const inverseDirection = (direction)=>{
8095
8312
  };
8096
8313
  /* harmony default export */ const lib_inverseDirection = (inverseDirection);
8097
8314
 
8315
+ ;// CONCATENATED MODULE: ./src/lib/isCtrl.ts
8316
+ const isCtrl = (event)=>{
8317
+ return event.ctrlKey || event.metaKey;
8318
+ };
8319
+ /* harmony default export */ const lib_isCtrl = (isCtrl);
8320
+
8098
8321
  ;// CONCATENATED MODULE: ./src/lib/isMac.ts
8099
8322
  const isMac = ()=>{
8100
8323
  if (!globalThis.navigator) {
@@ -8290,6 +8513,8 @@ const zipCharactersAndTiles = (characters, tiles)=>{
8290
8513
 
8291
8514
 
8292
8515
 
8516
+
8517
+
8293
8518
 
8294
8519
 
8295
8520
 
@@ -8303,10 +8528,12 @@ const zipCharactersAndTiles = (characters, tiles)=>{
8303
8528
  /* harmony export */ "$B": () => (/* binding */ BOARD_TILE_FONT_SIZE_POINTS_MIN),
8304
8529
  /* harmony export */ "$L": () => (/* binding */ RESULTS_HEADER_HEIGHT),
8305
8530
  /* harmony export */ "$M": () => (/* binding */ RACK_TILE_SIZE_MAX),
8531
+ /* harmony export */ "$P": () => (/* binding */ COLOR_BONUS_CHARACTER_MULTIPLIER),
8306
8532
  /* harmony export */ "BF": () => (/* binding */ PLAIN_TILES_COLOR_DEFAULT),
8307
8533
  /* harmony export */ "D": () => (/* binding */ PLAIN_TILES_TILE_MAX_SCATTER),
8308
8534
  /* harmony export */ "F1": () => (/* binding */ COLOR_GREEN),
8309
8535
  /* harmony export */ "FZ": () => (/* binding */ BUTTON_HEIGHT),
8536
+ /* harmony export */ "HC": () => (/* binding */ COLOR_BONUS_START),
8310
8537
  /* harmony export */ "IO": () => (/* binding */ BOARD_CELL_ACTIONS_OFFSET),
8311
8538
  /* harmony export */ "Kc": () => (/* binding */ EASE_OUT_CUBIC),
8312
8539
  /* harmony export */ "Kw": () => (/* binding */ BOARD_TILE_SIZE_MAX),
@@ -8325,12 +8552,15 @@ const zipCharactersAndTiles = (characters, tiles)=>{
8325
8552
  /* harmony export */ "iF": () => (/* binding */ MODAL_WIDTH),
8326
8553
  /* harmony export */ "j$": () => (/* binding */ BREAKPOINTS),
8327
8554
  /* harmony export */ "kD": () => (/* binding */ TEXT_INPUT_HEIGHT),
8555
+ /* harmony export */ "kr": () => (/* binding */ COLOR_BONUS_CHARACTER),
8328
8556
  /* harmony export */ "ku": () => (/* binding */ PLAIN_TILES_TILE_MARGIN),
8329
8557
  /* harmony export */ "mM": () => (/* binding */ REMAINING_TILES_TILE_SIZE),
8330
8558
  /* harmony export */ "n6": () => (/* binding */ DICTIONARY_HEIGHT),
8559
+ /* harmony export */ "n_": () => (/* binding */ BORDER_RADIUS),
8331
8560
  /* harmony export */ "oj": () => (/* binding */ BOARD_TILE_SIZE_MIN),
8332
8561
  /* harmony export */ "op": () => (/* binding */ COMPONENTS_SPACING_SMALL),
8333
8562
  /* harmony export */ "pI": () => (/* binding */ COLOR_BLUE),
8563
+ /* harmony export */ "pS": () => (/* binding */ COLOR_FILTERED),
8334
8564
  /* harmony export */ "pc": () => (/* binding */ LOGO_ASPECT_RATIO),
8335
8565
  /* harmony export */ "pt": () => (/* binding */ SOLVER_COLUMN_WIDTH),
8336
8566
  /* harmony export */ "rV": () => (/* binding */ PLAIN_TILES_TILE_SIZE),
@@ -8338,7 +8568,9 @@ const zipCharactersAndTiles = (characters, tiles)=>{
8338
8568
  /* harmony export */ "sk": () => (/* binding */ LOGO_SRC),
8339
8569
  /* harmony export */ "t": () => (/* binding */ LOGO_HEIGHT_SMALL),
8340
8570
  /* harmony export */ "t$": () => (/* binding */ NAV_PADDING),
8571
+ /* harmony export */ "ti": () => (/* binding */ COLOR_BONUS_WORD),
8341
8572
  /* harmony export */ "tr": () => (/* binding */ COMPONENTS_SPACING),
8573
+ /* harmony export */ "uI": () => (/* binding */ BORDER_COLOR_LIGHT),
8342
8574
  /* harmony export */ "uX": () => (/* binding */ PLAIN_TILES_PADDING_VERTICAL),
8343
8575
  /* harmony export */ "xZ": () => (/* binding */ PROGRESS_COLOR_VALUE),
8344
8576
  /* harmony export */ "y7": () => (/* binding */ LOGO_HEIGHT),
@@ -8346,7 +8578,7 @@ const zipCharactersAndTiles = (characters, tiles)=>{
8346
8578
  /* harmony export */ "yr": () => (/* binding */ COLOR_YELLOW),
8347
8579
  /* harmony export */ "yz": () => (/* binding */ TRANSITION)
8348
8580
  /* harmony export */ });
8349
- /* unused harmony exports TRANSITION_DURATION, SPACING_XS, SPACING_S, SPACING_M, SPACING_L, SPACING_XL, BOARD_CELL_BORDER_WIDTH, BUTTON_ICON_SIZE, BUTTON_PADDING_VERTICAL, TILE_SIZE, PLAIN_TILES_VERSION_TILE_COLOR, PLAIN_TILES_VERSION_TILE_SIZE */
8581
+ /* unused harmony exports TRANSITION_DURATION, COLOR_BONUS_CHARACTER_1, COLOR_BONUS_CHARACTER_2, COLOR_BONUS_CHARACTER_3, COLOR_BONUS_CHARACTER_5, COLOR_BONUS_CHARACTER_MULTIPLIER_2, COLOR_BONUS_CHARACTER_MULTIPLIER_3, COLOR_BONUS_WORD_MULTIPLIER_2, COLOR_BONUS_WORD_MULTIPLIER_3, SPACING_XS, SPACING_S, SPACING_M, SPACING_L, SPACING_XL, BOARD_CELL_BORDER_WIDTH, BORDER_COLOR, BUTTON_ICON_SIZE, BUTTON_PADDING_VERTICAL, TILE_SIZE, PLAIN_TILES_VERSION_TILE_COLOR, PLAIN_TILES_VERSION_TILE_SIZE */
8350
8582
  const BREAKPOINTS = {
8351
8583
  xs: 480,
8352
8584
  s: 768,
@@ -8363,6 +8595,30 @@ const COLOR_BLUE = "#c7d8f9";
8363
8595
  const COLOR_GREEN = "#bae3ba";
8364
8596
  const COLOR_RED = "#f7c2aa";
8365
8597
  const COLOR_YELLOW = "#efe3ae";
8598
+ const COLOR_BONUS_CHARACTER_1 = "#f7f1d6";
8599
+ const COLOR_BONUS_CHARACTER_2 = "#d6ebd6";
8600
+ const COLOR_BONUS_CHARACTER_3 = "#dde4f6";
8601
+ const COLOR_BONUS_CHARACTER_5 = "#fbe0d4";
8602
+ const COLOR_BONUS_CHARACTER_MULTIPLIER_2 = "#b8d5ed";
8603
+ const COLOR_BONUS_CHARACTER_MULTIPLIER_3 = "#86aed1";
8604
+ const COLOR_BONUS_START = "#b284b8";
8605
+ const COLOR_BONUS_WORD_MULTIPLIER_2 = "#fbc997";
8606
+ const COLOR_BONUS_WORD_MULTIPLIER_3 = "#f19393";
8607
+ const COLOR_FILTERED = "#444";
8608
+ const COLOR_BONUS_CHARACTER = {
8609
+ 1: COLOR_BONUS_CHARACTER_1,
8610
+ 2: COLOR_BONUS_CHARACTER_2,
8611
+ 3: COLOR_BONUS_CHARACTER_3,
8612
+ 5: COLOR_BONUS_CHARACTER_5
8613
+ };
8614
+ const COLOR_BONUS_CHARACTER_MULTIPLIER = {
8615
+ 2: COLOR_BONUS_CHARACTER_MULTIPLIER_2,
8616
+ 3: COLOR_BONUS_CHARACTER_MULTIPLIER_3
8617
+ };
8618
+ const COLOR_BONUS_WORD = {
8619
+ 2: COLOR_BONUS_WORD_MULTIPLIER_2,
8620
+ 3: COLOR_BONUS_WORD_MULTIPLIER_3
8621
+ };
8366
8622
  const SPACING_XS = 2;
8367
8623
  const SPACING_S = 5;
8368
8624
  const SPACING_M = 10;
@@ -8380,6 +8636,9 @@ const BOARD_TILE_SIZE_MAX = 64;
8380
8636
  * 21 - fits all board tiles without horizontal scrollbar on 375px viewport width (font-size: 14px)
8381
8637
  * 26 - tiles start to look good (font-size: 16px)
8382
8638
  */ const BOARD_TILE_SIZE_MIN = 20;
8639
+ const BORDER_COLOR = "#cdcdcd";
8640
+ const BORDER_COLOR_LIGHT = "#d9d9d9";
8641
+ const BORDER_RADIUS = 5;
8383
8642
  const BORDER_WIDTH = 1;
8384
8643
  const BUTTON_ICON_SIZE = 24;
8385
8644
  const BUTTON_PADDING_VERTICAL = SPACING_M;
@@ -8419,8 +8678,8 @@ const PROGRESS_COLOR_VALUE = "var(--color--violet--light)";
8419
8678
  const PROGRESS_COLOR_BACKGROUND = "var(--color--inactive)";
8420
8679
  const RACK_TILE_SIZE_MAX = 80;
8421
8680
  const REMAINING_TILES_TILE_SIZE = 50;
8422
- const RESULTS_HEADER_HEIGHT = 35;
8423
8681
  const RESULTS_ITEM_HEIGHT = 40;
8682
+ const RESULTS_HEADER_HEIGHT = RESULTS_ITEM_HEIGHT;
8424
8683
  const SOLVER_COLUMN_WIDTH = 580;
8425
8684
  const TEXT_INPUT_HEIGHT = 40;
8426
8685
  const TILE_APPEAR_DURATION = 200;
@@ -8455,52 +8714,6 @@ const initialize = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createAction
8455
8714
  const reset = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createAction)("reset");
8456
8715
 
8457
8716
 
8458
- /***/ }),
8459
-
8460
- /***/ 60860:
8461
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
8462
-
8463
- "use strict";
8464
- __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
8465
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8466
- /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
8467
- /* harmony export */ });
8468
- /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
8469
- /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
8470
- /* harmony import */ var redux_saga__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(75998);
8471
- /* harmony import */ var _sagas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(23599);
8472
- /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(67647);
8473
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([redux_saga__WEBPACK_IMPORTED_MODULE_1__]);
8474
- redux_saga__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
8475
-
8476
-
8477
-
8478
-
8479
- const sagaMiddleware = (0,redux_saga__WEBPACK_IMPORTED_MODULE_1__["default"])();
8480
- const createAppStore = ()=>{
8481
- const store = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.configureStore)({
8482
- reducer: {
8483
- board: _slices__WEBPACK_IMPORTED_MODULE_3__/* .boardSlice.reducer */ .I8.reducer,
8484
- cellFilter: _slices__WEBPACK_IMPORTED_MODULE_3__/* .cellFilterSlice.reducer */ .mO.reducer,
8485
- dictionary: _slices__WEBPACK_IMPORTED_MODULE_3__/* .dictionarySlice.reducer */ .lj.reducer,
8486
- rack: _slices__WEBPACK_IMPORTED_MODULE_3__/* .rackSlice.reducer */ .O_.reducer,
8487
- results: _slices__WEBPACK_IMPORTED_MODULE_3__/* .resultsSlice.reducer */ ._C.reducer,
8488
- settings: _slices__WEBPACK_IMPORTED_MODULE_3__/* .settingsSlice.reducer */ .xj.reducer,
8489
- solve: _slices__WEBPACK_IMPORTED_MODULE_3__/* .solveSlice.reducer */ .TP.reducer,
8490
- verify: _slices__WEBPACK_IMPORTED_MODULE_3__/* .verifySlice.reducer */ .Gt.reducer
8491
- },
8492
- middleware: [
8493
- sagaMiddleware
8494
- ]
8495
- });
8496
- sagaMiddleware.run(_sagas__WEBPACK_IMPORTED_MODULE_2__/* .rootSaga */ .R);
8497
- return store;
8498
- };
8499
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createAppStore);
8500
-
8501
- __webpack_async_result__();
8502
- } catch(e) { __webpack_async_result__(e); } });
8503
-
8504
8717
  /***/ }),
8505
8718
 
8506
8719
  /***/ 83067:
@@ -8509,58 +8722,58 @@ __webpack_async_result__();
8509
8722
  "use strict";
8510
8723
  __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
8511
8724
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8512
- /* harmony export */ "$o": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.$o),
8513
- /* harmony export */ "AN": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.AN),
8514
- /* harmony export */ "En": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.En),
8515
- /* harmony export */ "GL": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.GL),
8516
- /* harmony export */ "HM": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.HM),
8517
- /* harmony export */ "I8": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__.I8),
8518
- /* harmony export */ "Mj": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Mj),
8519
- /* harmony export */ "O0": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.O0),
8520
- /* harmony export */ "O_": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__.O_),
8521
- /* harmony export */ "Or": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Or),
8522
- /* harmony export */ "QB": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.QB),
8523
- /* harmony export */ "QL": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.QL),
8524
- /* harmony export */ "R": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.R),
8525
- /* harmony export */ "Rn": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Rn),
8526
- /* harmony export */ "TP": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__.TP),
8527
- /* harmony export */ "Xb": () => (/* reexport safe */ _localStorage__WEBPACK_IMPORTED_MODULE_2__.Z),
8528
- /* harmony export */ "Xk": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Xk),
8529
- /* harmony export */ "Yj": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Yj),
8530
- /* harmony export */ "ZA": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.ZA),
8531
- /* harmony export */ "ZO": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.ZO),
8532
- /* harmony export */ "Zf": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.Zf),
8533
- /* harmony export */ "_C": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__._C),
8534
- /* harmony export */ "bs": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.bs),
8535
- /* harmony export */ "fN": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.fN),
8536
- /* harmony export */ "fZ": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.fZ),
8537
- /* harmony export */ "id": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.id),
8725
+ /* harmony export */ "$o": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.$o),
8726
+ /* harmony export */ "AN": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.AN),
8727
+ /* harmony export */ "En": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.En),
8728
+ /* harmony export */ "GL": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.GL),
8729
+ /* harmony export */ "HM": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.HM),
8730
+ /* harmony export */ "I8": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_3__.I8),
8731
+ /* harmony export */ "Jw": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.Jw),
8732
+ /* harmony export */ "Mj": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.Mj),
8733
+ /* harmony export */ "O_": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_3__.O_),
8734
+ /* harmony export */ "Or": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.Or),
8735
+ /* harmony export */ "QB": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.QB),
8736
+ /* harmony export */ "QL": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.QL),
8737
+ /* harmony export */ "R": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.R),
8738
+ /* harmony export */ "Rn": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.Rn),
8739
+ /* harmony export */ "TP": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_3__.TP),
8740
+ /* harmony export */ "Xb": () => (/* reexport safe */ _localStorage__WEBPACK_IMPORTED_MODULE_1__.Z),
8741
+ /* harmony export */ "Xk": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.Xk),
8742
+ /* harmony export */ "Yj": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.Yj),
8743
+ /* harmony export */ "ZA": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.ZA),
8744
+ /* harmony export */ "ZO": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.ZO),
8745
+ /* harmony export */ "Zf": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.Zf),
8746
+ /* harmony export */ "_C": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_3__._C),
8747
+ /* harmony export */ "bs": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.bs),
8748
+ /* harmony export */ "fN": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.fN),
8749
+ /* harmony export */ "fZ": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.fZ),
8750
+ /* harmony export */ "h": () => (/* reexport safe */ _store__WEBPACK_IMPORTED_MODULE_4__.Z),
8751
+ /* harmony export */ "id": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.id),
8538
8752
  /* harmony export */ "ix": () => (/* reexport safe */ _useTypedSelector__WEBPACK_IMPORTED_MODULE_6__.Z),
8539
8753
  /* harmony export */ "j2": () => (/* reexport safe */ _actions__WEBPACK_IMPORTED_MODULE_0__.j),
8540
- /* harmony export */ "lj": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__.lj),
8541
- /* harmony export */ "mK": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.mK),
8542
- /* harmony export */ "mO": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__.mO),
8754
+ /* harmony export */ "lj": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_3__.lj),
8755
+ /* harmony export */ "mK": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.mK),
8756
+ /* harmony export */ "mO": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_3__.mO),
8543
8757
  /* harmony export */ "mc": () => (/* reexport safe */ _actions__WEBPACK_IMPORTED_MODULE_0__.m),
8544
- /* harmony export */ "md": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.md),
8758
+ /* harmony export */ "md": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.md),
8545
8759
  /* harmony export */ "qM": () => (/* reexport safe */ _useTranslate__WEBPACK_IMPORTED_MODULE_5__.Z),
8546
- /* harmony export */ "uz": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.uz),
8547
- /* harmony export */ "vY": () => (/* reexport safe */ _createAppStore__WEBPACK_IMPORTED_MODULE_1__.Z),
8548
- /* harmony export */ "w1": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.w1),
8549
- /* harmony export */ "x5": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.x5),
8550
- /* harmony export */ "xU": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.xU),
8551
- /* harmony export */ "xj": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_4__.xj),
8552
- /* harmony export */ "yJ": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.yJ),
8553
- /* harmony export */ "z$": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_3__.z$)
8760
+ /* harmony export */ "uz": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.uz),
8761
+ /* harmony export */ "w1": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.w1),
8762
+ /* harmony export */ "x5": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.x5),
8763
+ /* harmony export */ "xU": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.xU),
8764
+ /* harmony export */ "xj": () => (/* reexport safe */ _slices__WEBPACK_IMPORTED_MODULE_3__.xj),
8765
+ /* harmony export */ "yJ": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.yJ),
8766
+ /* harmony export */ "z$": () => (/* reexport safe */ _selectors__WEBPACK_IMPORTED_MODULE_2__.z$)
8554
8767
  /* harmony export */ });
8555
8768
  /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23617);
8556
- /* harmony import */ var _createAppStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(60860);
8557
- /* harmony import */ var _localStorage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(79579);
8558
- /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96076);
8559
- /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67647);
8769
+ /* harmony import */ var _localStorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(79579);
8770
+ /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96076);
8771
+ /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(67647);
8772
+ /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(18415);
8560
8773
  /* harmony import */ var _useTranslate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22522);
8561
8774
  /* harmony import */ var _useTypedSelector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76631);
8562
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_createAppStore__WEBPACK_IMPORTED_MODULE_1__]);
8563
- _createAppStore__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
8775
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store__WEBPACK_IMPORTED_MODULE_4__]);
8776
+ _store__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
8564
8777
 
8565
8778
 
8566
8779
 
@@ -8642,14 +8855,14 @@ __webpack_require__.d(__webpack_exports__, {
8642
8855
  "R": () => (/* binding */ rootSaga)
8643
8856
  });
8644
8857
 
8645
- // EXTERNAL MODULE: ../constants/build/index.js
8646
- var build = __webpack_require__(7618);
8647
- // EXTERNAL MODULE: ../types/build/index.js
8648
- var types_build = __webpack_require__(34046);
8649
8858
  // EXTERNAL MODULE: external "redux-saga/effects"
8650
8859
  var effects_ = __webpack_require__(56477);
8651
- // EXTERNAL MODULE: ./src/lib/index.ts + 32 modules
8652
- var lib = __webpack_require__(65175);
8860
+ // EXTERNAL MODULE: ./src/i18n/index.ts + 8 modules
8861
+ var i18n = __webpack_require__(36743);
8862
+ // EXTERNAL MODULE: ./src/lib/index.ts + 34 modules
8863
+ var lib = __webpack_require__(20208);
8864
+ // EXTERNAL MODULE: ../types/build/index.js
8865
+ var build = __webpack_require__(34046);
8653
8866
  ;// CONCATENATED MODULE: ./src/sdk/fetch.ts
8654
8867
 
8655
8868
  const fetch_fetch = async (input, init)=>{
@@ -8657,7 +8870,7 @@ const fetch_fetch = async (input, init)=>{
8657
8870
  try {
8658
8871
  response = await window.fetch(input, init);
8659
8872
  } catch (error) {
8660
- const message = (0,types_build.isError)(error) ? error.message : "Unknown error";
8873
+ const message = (0,build.isError)(error) ? error.message : "Unknown error";
8661
8874
  throw new Error(`Network error: ${message}`);
8662
8875
  }
8663
8876
  if (response.ok) {
@@ -8665,7 +8878,7 @@ const fetch_fetch = async (input, init)=>{
8665
8878
  }
8666
8879
  try {
8667
8880
  const json = await response.json();
8668
- if ((0,types_build.isError)(json)) {
8881
+ if ((0,build.isError)(json)) {
8669
8882
  throw new Error(json.message);
8670
8883
  }
8671
8884
  } finally{
@@ -8694,7 +8907,7 @@ const fetchJson = async (input, init)=>{
8694
8907
 
8695
8908
  const findWordDefinitions = async (locale, word)=>{
8696
8909
  const json = await sdk_fetchJson(`/api/dictionary/${locale}/${encodeURIComponent(word)}`);
8697
- return json.map(types_build.WordDefinition.fromJson);
8910
+ return json.map(build.WordDefinition.fromJson);
8698
8911
  };
8699
8912
  /* harmony default export */ const sdk_findWordDefinitions = (findWordDefinitions);
8700
8913
 
@@ -8711,7 +8924,7 @@ const solve = async ({ board , characters , configId , locale })=>{
8711
8924
  locale
8712
8925
  })
8713
8926
  });
8714
- return json.map(types_build.Result.fromJson);
8927
+ return json.map(build.Result.fromJson);
8715
8928
  };
8716
8929
  /* harmony default export */ const sdk_solve = (solve);
8717
8930
 
@@ -8757,7 +8970,6 @@ var slices = __webpack_require__(67647);
8757
8970
 
8758
8971
 
8759
8972
 
8760
-
8761
8973
  const SUBMIT_DELAY = 150;
8762
8974
  const memoizedFindWordDefinitions = (0,lib/* memoize */.HP)(sdk_findWordDefinitions);
8763
8975
  function* rootSaga() {
@@ -8850,8 +9062,7 @@ function* onLocaleChange() {
8850
9062
  function* onResultCandidateChange({ payload: result }) {
8851
9063
  if (result) {
8852
9064
  const locale = yield (0,effects_.select)(selectors/* selectLocale */.fN);
8853
- const comma = locale === types_build.Locale.FA_IR ? ` ${build.COMMA_ARABIC}` : `${build.COMMA_LATIN} `;
8854
- yield (0,effects_.put)(slices/* dictionarySlice.actions.changeInput */.lj.actions.changeInput(result.words.join(comma)));
9065
+ yield (0,effects_.put)(slices/* dictionarySlice.actions.changeInput */.lj.actions.changeInput(result.words.join(i18n/* LOCALE_FEATURES */.q0[locale].separator)));
8855
9066
  yield (0,effects_.put)(slices/* dictionarySlice.actions.submit */.lj.actions.submit());
8856
9067
  }
8857
9068
  }
@@ -8939,8 +9150,8 @@ function* ensureProperTilesCount() {
8939
9150
  /* harmony export */ "En": () => (/* binding */ selectHasOverusedTiles),
8940
9151
  /* harmony export */ "GL": () => (/* binding */ selectResultCandidateCells),
8941
9152
  /* harmony export */ "HM": () => (/* binding */ selectVerify),
9153
+ /* harmony export */ "Jw": () => (/* binding */ selectCellFilter),
8942
9154
  /* harmony export */ "Mj": () => (/* binding */ selectAreResultsOutdated),
8943
- /* harmony export */ "O0": () => (/* binding */ selectCellBonus),
8944
9155
  /* harmony export */ "Or": () => (/* binding */ selectCharacterPoints),
8945
9156
  /* harmony export */ "QB": () => (/* binding */ selectRack),
8946
9157
  /* harmony export */ "QL": () => (/* binding */ selectResultsQuery),
@@ -8967,7 +9178,7 @@ function* ensureProperTilesCount() {
8967
9178
  /* harmony export */ "yp": () => (/* binding */ selectCharacters),
8968
9179
  /* harmony export */ "z$": () => (/* binding */ selectResultCandidateTiles)
8969
9180
  /* harmony export */ });
8970
- /* unused harmony exports selectCellFilter, selectResultsRaw, selectSortedResults, selectGroupedResults, selectTranslation, selectLastSolvedParameters, selectHaveCharactersChanged, selectHasBoardChanged, selectRemainingTiles */
9181
+ /* unused harmony exports selectResultsRaw, selectSortedResults, selectGroupedResults, selectCellBonus, selectTranslation, selectLastSolvedParameters, selectHaveCharactersChanged, selectHasBoardChanged, selectRemainingTiles */
8971
9182
  /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
8972
9183
  /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
8973
9184
  /* harmony import */ var _scrabble_solver_configs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(89418);
@@ -8976,7 +9187,7 @@ function* ensureProperTilesCount() {
8976
9187
  /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(34046);
8977
9188
  /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_3__);
8978
9189
  /* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(36743);
8979
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(65175);
9190
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20208);
8980
9191
  /* eslint-disable max-lines */
8981
9192
 
8982
9193
 
@@ -9220,8 +9431,8 @@ var build = __webpack_require__(89418);
9220
9431
  var types_build = __webpack_require__(34046);
9221
9432
  // EXTERNAL MODULE: ./src/state/localStorage.ts
9222
9433
  var localStorage = __webpack_require__(79579);
9223
- // EXTERNAL MODULE: ./src/lib/index.ts + 32 modules
9224
- var lib = __webpack_require__(65175);
9434
+ // EXTERNAL MODULE: ./src/lib/index.ts + 34 modules
9435
+ var lib = __webpack_require__(20208);
9225
9436
  ;// CONCATENATED MODULE: ./src/state/slices/settingsInitialState.ts
9226
9437
 
9227
9438
 
@@ -9711,6 +9922,49 @@ const verifySlice = (0,toolkit_.createSlice)({
9711
9922
 
9712
9923
 
9713
9924
 
9925
+ /***/ }),
9926
+
9927
+ /***/ 18415:
9928
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
9929
+
9930
+ "use strict";
9931
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
9932
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9933
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
9934
+ /* harmony export */ });
9935
+ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
9936
+ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
9937
+ /* harmony import */ var redux_saga__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(75998);
9938
+ /* harmony import */ var _sagas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(23599);
9939
+ /* harmony import */ var _slices__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(67647);
9940
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([redux_saga__WEBPACK_IMPORTED_MODULE_1__]);
9941
+ redux_saga__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
9942
+
9943
+
9944
+
9945
+
9946
+ const sagaMiddleware = (0,redux_saga__WEBPACK_IMPORTED_MODULE_1__["default"])();
9947
+ const store = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.configureStore)({
9948
+ reducer: {
9949
+ board: _slices__WEBPACK_IMPORTED_MODULE_3__/* .boardSlice.reducer */ .I8.reducer,
9950
+ cellFilter: _slices__WEBPACK_IMPORTED_MODULE_3__/* .cellFilterSlice.reducer */ .mO.reducer,
9951
+ dictionary: _slices__WEBPACK_IMPORTED_MODULE_3__/* .dictionarySlice.reducer */ .lj.reducer,
9952
+ rack: _slices__WEBPACK_IMPORTED_MODULE_3__/* .rackSlice.reducer */ .O_.reducer,
9953
+ results: _slices__WEBPACK_IMPORTED_MODULE_3__/* .resultsSlice.reducer */ ._C.reducer,
9954
+ settings: _slices__WEBPACK_IMPORTED_MODULE_3__/* .settingsSlice.reducer */ .xj.reducer,
9955
+ solve: _slices__WEBPACK_IMPORTED_MODULE_3__/* .solveSlice.reducer */ .TP.reducer,
9956
+ verify: _slices__WEBPACK_IMPORTED_MODULE_3__/* .verifySlice.reducer */ .Gt.reducer
9957
+ },
9958
+ middleware: [
9959
+ sagaMiddleware
9960
+ ]
9961
+ });
9962
+ sagaMiddleware.run(_sagas__WEBPACK_IMPORTED_MODULE_2__/* .rootSaga */ .R);
9963
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (store);
9964
+
9965
+ __webpack_async_result__();
9966
+ } catch(e) { __webpack_async_result__(e); } });
9967
+
9714
9968
  /***/ }),
9715
9969
 
9716
9970
  /***/ 22522: