@scrabble-solver/scrabble-solver 2.8.9 → 2.8.11

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 (74) 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/server-production/0.pack +0 -0
  9. package/.next/cache/webpack/server-production/index.pack +0 -0
  10. package/.next/next-server.js.nft.json +1 -1
  11. package/.next/prerender-manifest.json +1 -1
  12. package/.next/routes-manifest.json +1 -1
  13. package/.next/server/chunks/413.js +189 -43
  14. package/.next/server/chunks/429.js +2 -13
  15. package/.next/server/chunks/515.js +469 -254
  16. package/.next/server/chunks/911.js +25 -3
  17. package/.next/server/middleware-build-manifest.js +1 -1
  18. package/.next/server/pages/404.html +2 -2
  19. package/.next/server/pages/404.js.nft.json +1 -1
  20. package/.next/server/pages/500.html +2 -2
  21. package/.next/server/pages/_app.js.nft.json +1 -1
  22. package/.next/server/pages/api/solve.js +77 -20
  23. package/.next/server/pages/index.html +3 -3
  24. package/.next/server/pages/index.js +1 -1
  25. package/.next/server/pages/index.js.nft.json +1 -1
  26. package/.next/server/pages/index.json +1 -1
  27. package/.next/static/VJkrGviICslA_8zNVJ-g-/_buildManifest.js +1 -0
  28. package/.next/static/{yCxjzzYpw5JjJE53PO_s6 → VJkrGviICslA_8zNVJ-g-}/_ssgManifest.js +0 -0
  29. package/.next/static/chunks/317-8e8909dd2f587b64.js +1 -0
  30. package/.next/static/chunks/546-447e243fc9de2c59.js +1 -0
  31. package/.next/static/chunks/pages/{404-90c624da3c83fd17.js → 404-7082923654d5996f.js} +1 -1
  32. package/.next/static/chunks/pages/_app-57c77cad0f197d93.js +1 -0
  33. package/.next/static/chunks/pages/index-d3360e075ca3c222.js +1 -0
  34. package/.next/static/css/9ac903004135f4b1.css +1 -0
  35. package/.next/trace +42 -42
  36. package/package.json +12 -12
  37. package/src/components/Badge/Badge.module.scss +1 -1
  38. package/src/components/Board/Board.tsx +4 -2
  39. package/src/components/Board/BoardPure.tsx +25 -5
  40. package/src/components/Board/components/Cell/CellPure.tsx +33 -31
  41. package/src/components/Board/hooks/useGrid.ts +217 -91
  42. package/src/components/Dictionary/Dictionary.tsx +8 -1
  43. package/src/components/Rack/Rack.tsx +51 -11
  44. package/src/components/Rack/RackTile.tsx +33 -16
  45. package/src/components/Results/Results.tsx +19 -3
  46. package/src/components/Sidebar/Sidebar.tsx +20 -1
  47. package/src/components/SquareButton/Link.tsx +1 -1
  48. package/src/components/Tile/Tile.module.scss +4 -0
  49. package/src/components/Tile/Tile.tsx +13 -4
  50. package/src/components/Tile/TilePure.tsx +3 -4
  51. package/src/lib/extractCharacters.ts +26 -0
  52. package/src/lib/extractInputValue.ts +17 -0
  53. package/src/lib/index.ts +2 -0
  54. package/src/lib/isCtrl.ts +1 -1
  55. package/src/lib/memoize.ts +15 -1
  56. package/src/pages/api/solve.ts +1 -1
  57. package/src/sdk/fetchJson.ts +36 -0
  58. package/src/sdk/findWordDefinitions.ts +4 -3
  59. package/src/sdk/solve.ts +8 -7
  60. package/src/sdk/verify.ts +5 -6
  61. package/src/state/sagas.ts +9 -3
  62. package/src/state/selectors.ts +9 -1
  63. package/src/state/slices/dictionaryInitialState.ts +10 -2
  64. package/src/state/slices/dictionarySlice.ts +10 -16
  65. package/src/state/slices/rackSlice.ts +7 -5
  66. package/src/state/slices/solveInitialState.ts +14 -2
  67. package/src/state/slices/solveSlice.ts +7 -4
  68. package/src/types/index.ts +2 -0
  69. package/.next/static/chunks/317-a33dd38e9b9a17ed.js +0 -1
  70. package/.next/static/chunks/758-f333b1dcdb941547.js +0 -1
  71. package/.next/static/chunks/pages/_app-f8f360878e1c2aff.js +0 -1
  72. package/.next/static/chunks/pages/index-ecea697d3e5d8a6f.js +0 -1
  73. package/.next/static/css/64dc2ce1811912f1.css +0 -1
  74. package/.next/static/yCxjzzYpw5JjJE53PO_s6/_buildManifest.js +0 -1
@@ -540,18 +540,20 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([stat
540
540
  const Board = ({ cellSize , className , innerRef })=>{
541
541
  const rows = (0,state__WEBPACK_IMPORTED_MODULE_1__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_1__/* .selectRowsWithCandidate */ .ZA);
542
542
  const board = (0,state__WEBPACK_IMPORTED_MODULE_1__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_1__/* .selectBoard */ .ZO);
543
- const [{ lastDirection , refs }, { onDirectionToggle , onFocus , onKeyDown }] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__/* .useGrid */ .N)(rows);
543
+ const [{ direction , refs }, { onChange , onDirectionToggle , onFocus , onKeyDown , onPaste }] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__/* .useGrid */ .N)(rows);
544
544
  return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_BoardPure__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
545
545
  className: className,
546
546
  cellSize: cellSize,
547
547
  center: board.center,
548
+ direction: direction,
548
549
  innerRef: innerRef,
549
- lastDirection: lastDirection,
550
550
  refs: refs,
551
551
  rows: rows,
552
+ onChange: onChange,
552
553
  onDirectionToggle: onDirectionToggle,
553
554
  onFocus: onFocus,
554
- onKeyDown: onKeyDown
555
+ onKeyDown: onKeyDown,
556
+ onPaste: onPaste
555
557
  });
556
558
  };
557
559
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Board);
@@ -585,16 +587,18 @@ _components__WEBPACK_IMPORTED_MODULE_3__ = (__webpack_async_dependencies__.then
585
587
 
586
588
 
587
589
 
588
- const BoardPure = ({ className , cellSize , center , innerRef , lastDirection , refs , rows , onDirectionToggle , onFocus , onKeyDown , })=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
590
+ const BoardPure = ({ className , cellSize , center , direction , innerRef , refs , rows , onChange , onDirectionToggle , onFocus , onKeyDown , onPaste , })=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
589
591
  className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Board_module_scss__WEBPACK_IMPORTED_MODULE_4___default().board), className),
590
592
  ref: innerRef,
593
+ onChange: onChange,
591
594
  onKeyDown: onKeyDown,
595
+ onPaste: onPaste,
592
596
  children: rows.map((cells, y)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
593
597
  className: (_Board_module_scss__WEBPACK_IMPORTED_MODULE_4___default().row),
594
598
  children: cells.map((cell, x)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components__WEBPACK_IMPORTED_MODULE_3__/* .Cell */ .b, {
595
599
  className: (_Board_module_scss__WEBPACK_IMPORTED_MODULE_4___default().cell),
596
600
  cell: cell,
597
- direction: lastDirection,
601
+ direction: direction,
598
602
  inputRef: refs[y][x],
599
603
  isCenter: center.x === x && center.y === y,
600
604
  size: cellSize,
@@ -666,7 +670,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
666
670
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
667
671
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
668
672
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
669
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92237);
673
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75558);
670
674
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51413);
671
675
  /* harmony import */ var _CellPure__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(80640);
672
676
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_5__, _CellPure__WEBPACK_IMPORTED_MODULE_6__]);
@@ -818,7 +822,7 @@ const CellPure = ({ bonus , cell , className , direction , inputRef , isCenter ,
818
822
  tabIndex: cell.x === 0 && cell.y === 0 ? undefined : -1,
819
823
  onFocus: onFocus
820
824
  }),
821
- /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
825
+ !cell.isCandidate() && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
822
826
  className: (_Cell_module_scss__WEBPACK_IMPORTED_MODULE_7___default().actions),
823
827
  children: [
824
828
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
@@ -978,17 +982,19 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
978
982
  /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
979
983
  /* harmony export */ });
980
984
  /* harmony import */ var _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7618);
981
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
982
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
983
- /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6022);
984
- /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
985
- /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(69755);
986
- /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_use__WEBPACK_IMPORTED_MODULE_3__);
987
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92237);
988
- /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51413);
989
- /* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(95137);
990
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_5__]);
991
- state__WEBPACK_IMPORTED_MODULE_5__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
985
+ /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34046);
986
+ /* harmony import */ var _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_scrabble_solver_types__WEBPACK_IMPORTED_MODULE_1__);
987
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
988
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
989
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
990
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
991
+ /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69755);
992
+ /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_use__WEBPACK_IMPORTED_MODULE_4__);
993
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75558);
994
+ /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(51413);
995
+ /* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(95137);
996
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_6__]);
997
+ state__WEBPACK_IMPORTED_MODULE_6__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
992
998
  /* eslint-disable max-lines, max-statements */
993
999
 
994
1000
 
@@ -996,22 +1002,24 @@ state__WEBPACK_IMPORTED_MODULE_5__ = (__webpack_async_dependencies__.then ? (awa
996
1002
 
997
1003
 
998
1004
 
1005
+
1006
+ const toggleDirection = (direction)=>direction === "vertical" ? "horizontal" : "vertical";
999
1007
  const useGrid = (rows)=>{
1000
1008
  const height = rows.length;
1001
1009
  const width = rows[0].length;
1002
- const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
1003
- const config = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectConfig */ .$o);
1004
- const refs = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .createGridOf */ .DI)(width, height, ()=>(0,react__WEBPACK_IMPORTED_MODULE_1__.createRef)()), [
1010
+ const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
1011
+ const config = (0,state__WEBPACK_IMPORTED_MODULE_6__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_6__/* .selectConfig */ .$o);
1012
+ const refs = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>(0,lib__WEBPACK_IMPORTED_MODULE_5__/* .createGridOf */ .DI)(width, height, ()=>(0,react__WEBPACK_IMPORTED_MODULE_2__.createRef)()), [
1005
1013
  width,
1006
1014
  height
1007
1015
  ]);
1008
- const activeIndexRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)({
1016
+ const activeIndexRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)({
1009
1017
  x: 0,
1010
1018
  y: 0
1011
1019
  });
1012
- const { 0: lastDirection , 1: setLastDirection } = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)("horizontal");
1013
- const lastDirectionRef = (0,react_use__WEBPACK_IMPORTED_MODULE_3__.useLatest)(lastDirection);
1014
- const changeActiveIndex = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((offsetX, offsetY)=>{
1020
+ const { 0: direction , 1: setLastDirection } = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)("horizontal");
1021
+ const directionRef = (0,react_use__WEBPACK_IMPORTED_MODULE_4__.useLatest)(direction);
1022
+ const changeActiveIndex = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((offsetX, offsetY)=>{
1015
1023
  const x = Math.min(Math.max(activeIndexRef.current.x + offsetX, 0), width - 1);
1016
1024
  const y = Math.min(Math.max(activeIndexRef.current.y + offsetY, 0), height - 1);
1017
1025
  activeIndexRef.current = {
@@ -1023,58 +1031,210 @@ const useGrid = (rows)=>{
1023
1031
  activeIndexRef,
1024
1032
  refs
1025
1033
  ]);
1026
- const getInputRefPosition = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((inputRef)=>{
1027
- return (0,_lib__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)(refs, (ref)=>ref.current === inputRef);
1034
+ const getInputRefPosition = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((inputRef)=>{
1035
+ return (0,_lib__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(refs, (ref)=>ref.current === inputRef);
1028
1036
  }, [
1029
1037
  refs
1030
1038
  ]);
1031
- const onDirectionToggle = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
1032
- setLastDirection((direction)=>{
1033
- return direction === "vertical" ? "horizontal" : "vertical";
1034
- });
1035
- }, []);
1036
- const onFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((x, y)=>{
1037
- activeIndexRef.current = {
1038
- x,
1039
- y
1040
- };
1041
- }, []);
1042
- const onMoveFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((direction)=>{
1043
- const offset = direction === "forward" ? 1 : -1;
1044
- if (lastDirectionRef.current === "horizontal") {
1039
+ const moveFocus = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((offset)=>{
1040
+ if (directionRef.current === "horizontal") {
1045
1041
  changeActiveIndex(offset, 0);
1046
1042
  } else {
1047
1043
  changeActiveIndex(0, offset);
1048
1044
  }
1049
1045
  }, [
1050
1046
  changeActiveIndex,
1051
- lastDirectionRef
1047
+ directionRef
1052
1048
  ]);
1053
- const onKeyDown = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{
1054
- return (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .createKeyboardNavigation */ .np)({
1049
+ const insertValue = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((position, value)=>{
1050
+ const characters = value ? (0,lib__WEBPACK_IMPORTED_MODULE_5__/* .extractCharacters */ .nK)(config, value).filter((character)=>character !== _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.BLANK) : [
1051
+ _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.BLANK
1052
+ ];
1053
+ const actions = [];
1054
+ let board = new _scrabble_solver_types__WEBPACK_IMPORTED_MODULE_1__.Board({
1055
+ rows: rows.map((row)=>row.map((cell)=>cell.clone()))
1056
+ });
1057
+ let { x , y } = position;
1058
+ const scheduleMoveFocus = ()=>{
1059
+ if (directionRef.current === "horizontal") {
1060
+ ++x;
1061
+ } else {
1062
+ ++y;
1063
+ }
1064
+ };
1065
+ characters.forEach((character)=>{
1066
+ if (x >= config.boardWidth || y >= config.boardHeight) {
1067
+ return;
1068
+ }
1069
+ const canCheckUp = y - 1 > 0;
1070
+ const canCheckLeft = x > 0;
1071
+ const canCheckRight = x + 1 < width;
1072
+ const canCheckDown = y + 1 < height;
1073
+ if (canCheckUp) {
1074
+ const cellUp = board.rows[y - 1][x];
1075
+ const twoCharacterCandidate = cellUp.tile.character + character;
1076
+ if (!cellUp.tile.isBlank && config.twoCharacterTiles.includes(twoCharacterCandidate)) {
1077
+ const action = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1078
+ x,
1079
+ y: y - 1,
1080
+ value: twoCharacterCandidate
1081
+ });
1082
+ board = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(board, action);
1083
+ actions.push(action);
1084
+ return;
1085
+ }
1086
+ }
1087
+ if (canCheckDown) {
1088
+ const cellDown = board.rows[y + 1][x];
1089
+ const twoCharacterCandidate1 = character + cellDown.tile.character;
1090
+ if (!cellDown.tile.isBlank && config.twoCharacterTiles.includes(twoCharacterCandidate1)) {
1091
+ const action1 = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1092
+ x,
1093
+ y,
1094
+ value: character
1095
+ });
1096
+ const action2 = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1097
+ x,
1098
+ y: y + 1,
1099
+ value: _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL
1100
+ });
1101
+ board = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(board, action1), action2);
1102
+ actions.push(action1, action2);
1103
+ scheduleMoveFocus();
1104
+ return;
1105
+ }
1106
+ }
1107
+ if (canCheckLeft) {
1108
+ const cellLeft = board.rows[y][x - 1];
1109
+ const twoCharacterCandidate2 = cellLeft.tile.character + character;
1110
+ if (!cellLeft.tile.isBlank && config.twoCharacterTiles.includes(twoCharacterCandidate2)) {
1111
+ const action3 = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1112
+ x: x - 1,
1113
+ y,
1114
+ value: twoCharacterCandidate2
1115
+ });
1116
+ board = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(board, action3);
1117
+ actions.push(action3);
1118
+ return;
1119
+ }
1120
+ }
1121
+ if (canCheckRight) {
1122
+ const cellRight = board.rows[y][x + 1];
1123
+ const twoCharacterCandidate3 = character + cellRight.tile.character;
1124
+ if (!cellRight.tile.isBlank && config.twoCharacterTiles.includes(twoCharacterCandidate3)) {
1125
+ const action11 = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1126
+ x,
1127
+ y,
1128
+ value: character
1129
+ });
1130
+ const action21 = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1131
+ x: x + 1,
1132
+ y,
1133
+ value: _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL
1134
+ });
1135
+ board = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(board, action11), action21);
1136
+ actions.push(action11, action21);
1137
+ scheduleMoveFocus();
1138
+ return;
1139
+ }
1140
+ }
1141
+ if (!canCheckDown || !canCheckRight) {
1142
+ const cell = board.rows[y][x];
1143
+ const twoCharacterCandidate4 = cell.tile.character + character;
1144
+ if (!cell.tile.isBlank && config.twoCharacterTiles.includes(twoCharacterCandidate4)) {
1145
+ const action4 = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1146
+ x,
1147
+ y,
1148
+ value: twoCharacterCandidate4
1149
+ });
1150
+ board = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(board, action4);
1151
+ actions.push(action4);
1152
+ return;
1153
+ }
1154
+ }
1155
+ const action5 = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1156
+ x,
1157
+ y,
1158
+ value: character
1159
+ });
1160
+ board = state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.reducer */ .I8.reducer(board, action5);
1161
+ actions.push(action5);
1162
+ scheduleMoveFocus();
1163
+ });
1164
+ moveFocus(Math.abs(position.x - x) + Math.abs(position.y - y));
1165
+ actions.forEach(dispatch);
1166
+ }, [
1167
+ config,
1168
+ directionRef,
1169
+ dispatch,
1170
+ moveFocus,
1171
+ rows
1172
+ ]);
1173
+ const onChange = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((event)=>{
1174
+ const position = getInputRefPosition(event.target);
1175
+ if (!position) {
1176
+ return;
1177
+ }
1178
+ const value = (0,lib__WEBPACK_IMPORTED_MODULE_5__/* .extractInputValue */ .WM)(event.target);
1179
+ if (!value) {
1180
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1181
+ ...position,
1182
+ value: _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL
1183
+ }));
1184
+ moveFocus(-1);
1185
+ return;
1186
+ }
1187
+ if (value === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL) {
1188
+ const { x , y } = position;
1189
+ const cell = rows[y][x];
1190
+ if (cell.hasTile()) {
1191
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(position));
1192
+ return;
1193
+ }
1194
+ }
1195
+ insertValue(position, value);
1196
+ }, [
1197
+ dispatch,
1198
+ insertValue,
1199
+ moveFocus,
1200
+ rows
1201
+ ]);
1202
+ const onDirectionToggle = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(()=>setLastDirection(toggleDirection), []);
1203
+ const onFocus = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((x, y)=>{
1204
+ activeIndexRef.current = {
1205
+ x,
1206
+ y
1207
+ };
1208
+ }, []);
1209
+ const onKeyDown = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>{
1210
+ return (0,lib__WEBPACK_IMPORTED_MODULE_5__/* .createKeyboardNavigation */ .np)({
1055
1211
  onArrowDown: (event)=>{
1056
- if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event)) {
1212
+ event.preventDefault();
1213
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event)) {
1057
1214
  onDirectionToggle();
1058
1215
  } else {
1059
1216
  changeActiveIndex(0, 1);
1060
1217
  }
1061
1218
  },
1062
1219
  onArrowLeft: (event)=>{
1063
- if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event)) {
1220
+ event.preventDefault();
1221
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event)) {
1064
1222
  onDirectionToggle();
1065
1223
  } else {
1066
1224
  changeActiveIndex(-1, 0);
1067
1225
  }
1068
1226
  },
1069
1227
  onArrowRight: (event)=>{
1070
- if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event)) {
1228
+ event.preventDefault();
1229
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event)) {
1071
1230
  onDirectionToggle();
1072
1231
  } else {
1073
1232
  changeActiveIndex(1, 0);
1074
1233
  }
1075
1234
  },
1076
1235
  onArrowUp: (event)=>{
1077
- if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event)) {
1236
+ event.preventDefault();
1237
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event)) {
1078
1238
  onDirectionToggle();
1079
1239
  } else {
1080
1240
  changeActiveIndex(0, -1);
@@ -1085,22 +1245,24 @@ const useGrid = (rows)=>{
1085
1245
  if (!position) {
1086
1246
  return;
1087
1247
  }
1088
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1248
+ event.preventDefault();
1249
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1089
1250
  ...position,
1090
1251
  value: _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL
1091
1252
  }));
1092
- onMoveFocus("backward");
1253
+ moveFocus(-1);
1093
1254
  },
1094
1255
  onDelete: (event)=>{
1095
1256
  const position = getInputRefPosition(event.target);
1096
1257
  if (!position) {
1097
1258
  return;
1098
1259
  }
1099
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1260
+ event.preventDefault();
1261
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1100
1262
  ...position,
1101
1263
  value: _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL
1102
1264
  }));
1103
- onMoveFocus("forward");
1265
+ moveFocus(1);
1104
1266
  },
1105
1267
  onKeyDown: (event)=>{
1106
1268
  const position = getInputRefPosition(event.target);
@@ -1109,129 +1271,82 @@ const useGrid = (rows)=>{
1109
1271
  }
1110
1272
  const { x , y } = position;
1111
1273
  const character = event.key.toLowerCase();
1112
- const isTogglingBlank = (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event) && character === "b";
1274
+ const isTogglingBlank = (0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event) && character === "b";
1113
1275
  const twoCharacterTile = config.getTwoCharacterTileByPrefix(character);
1114
1276
  if (isTogglingBlank) {
1115
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(position));
1277
+ event.preventDefault();
1278
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(position));
1116
1279
  return;
1117
1280
  }
1118
- if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event) && twoCharacterTile) {
1281
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_5__/* .isCtrl */ .yl)(event) && twoCharacterTile) {
1119
1282
  event.preventDefault();
1120
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1283
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1121
1284
  x,
1122
1285
  y,
1123
1286
  value: twoCharacterTile
1124
1287
  }));
1125
- onMoveFocus("forward");
1288
+ moveFocus(1);
1126
1289
  return;
1127
1290
  }
1128
- if (!config.hasCharacter(character)) {
1291
+ const cell = rows[y][x];
1292
+ const twoCharacterCandidate = cell.tile.character + character;
1293
+ if (config.twoCharacterTiles.includes(twoCharacterCandidate)) {
1294
+ event.preventDefault();
1295
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1296
+ ...position,
1297
+ value: twoCharacterCandidate
1298
+ }));
1299
+ moveFocus(1);
1129
1300
  return;
1130
1301
  }
1131
- const canCheckUp = y - 1 > 0;
1132
- const canCheckLeft = x > 0;
1133
- const canCheckRight = x + 1 < width;
1134
- const canCheckDown = y + 1 < height;
1135
- if (canCheckUp) {
1136
- const cellUp = rows[y - 1][x];
1137
- const twoCharacterCandidate = cellUp.tile.character + character;
1138
- if (config.twoCharacterTiles.includes(twoCharacterCandidate)) {
1139
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1140
- ...position,
1141
- y: y - 1,
1142
- value: twoCharacterCandidate
1143
- }));
1144
- return;
1145
- }
1146
- }
1147
- if (canCheckDown) {
1148
- const cellDown = rows[y + 1][x];
1149
- const twoCharacterCandidate1 = character + cellDown.tile.character;
1150
- if (config.twoCharacterTiles.includes(twoCharacterCandidate1)) {
1151
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1152
- ...position,
1153
- value: character
1154
- }));
1155
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1156
- ...position,
1157
- y: y + 1,
1158
- value: _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL
1159
- }));
1160
- onMoveFocus("forward");
1161
- return;
1162
- }
1163
- }
1164
- if (canCheckLeft) {
1165
- const cellLeft = rows[y][x - 1];
1166
- const twoCharacterCandidate2 = cellLeft.tile.character + character;
1167
- if (config.twoCharacterTiles.includes(twoCharacterCandidate2)) {
1168
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1169
- ...position,
1170
- x: x - 1,
1171
- value: twoCharacterCandidate2
1172
- }));
1173
- return;
1174
- }
1175
- }
1176
- if (canCheckRight) {
1177
- const cellRight = rows[y][x + 1];
1178
- const twoCharacterCandidate3 = character + cellRight.tile.character;
1179
- if (config.twoCharacterTiles.includes(twoCharacterCandidate3)) {
1180
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1181
- ...position,
1182
- value: character
1183
- }));
1184
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1185
- ...position,
1186
- x: x + 1,
1187
- value: _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_0__.EMPTY_CELL
1188
- }));
1189
- onMoveFocus("forward");
1190
- return;
1191
- }
1192
- }
1193
- if (!canCheckDown || !canCheckRight) {
1194
- const cell = rows[y][x];
1195
- const twoCharacterCandidate4 = cell.tile.character + character;
1196
- if (config.twoCharacterTiles.includes(twoCharacterCandidate4)) {
1197
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1198
- ...position,
1199
- value: twoCharacterCandidate4
1200
- }));
1201
- return;
1202
- }
1302
+ if (event.target instanceof HTMLInputElement && event.target.value === event.key) {
1303
+ // change event did not fire because the same character was typed over the current one
1304
+ // but we still want to move the caret
1305
+ event.preventDefault();
1306
+ moveFocus(1);
1203
1307
  }
1204
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.changeCellValue */ .I8.actions.changeCellValue({
1205
- ...position,
1206
- value: character
1207
- }));
1208
- onMoveFocus("forward");
1209
1308
  },
1210
1309
  onSpace: (event)=>{
1211
1310
  const position = getInputRefPosition(event.target);
1212
1311
  if (!position) {
1213
1312
  return;
1214
1313
  }
1215
- dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(position));
1314
+ event.preventDefault();
1315
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .boardSlice.actions.toggleCellIsBlank */ .I8.actions.toggleCellIsBlank(position));
1216
1316
  }
1217
1317
  });
1218
1318
  }, [
1219
1319
  changeActiveIndex,
1220
1320
  config,
1221
1321
  dispatch,
1222
- lastDirectionRef,
1223
1322
  onDirectionToggle,
1224
1323
  rows
1225
1324
  ]);
1325
+ const onPaste = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((event)=>{
1326
+ if (!(event.target instanceof HTMLInputElement)) {
1327
+ return;
1328
+ }
1329
+ const position = getInputRefPosition(event.target);
1330
+ if (!position) {
1331
+ return;
1332
+ }
1333
+ event.preventDefault();
1334
+ const value = event.clipboardData.getData("text/plain").toLocaleLowerCase();
1335
+ insertValue(position, value);
1336
+ }, [
1337
+ insertValue
1338
+ ]);
1226
1339
  return [
1227
1340
  {
1228
- lastDirection,
1341
+ direction,
1229
1342
  refs
1230
1343
  },
1231
1344
  {
1345
+ onChange,
1232
1346
  onDirectionToggle,
1233
1347
  onFocus,
1234
- onKeyDown
1348
+ onKeyDown,
1349
+ onPaste
1235
1350
  },
1236
1351
  ];
1237
1352
  };
@@ -1432,6 +1547,7 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([stat
1432
1547
  const Dictionary = ({ className })=>{
1433
1548
  const translate = (0,state__WEBPACK_IMPORTED_MODULE_2__/* .useTranslate */ .qM)();
1434
1549
  const { results , isLoading } = (0,state__WEBPACK_IMPORTED_MODULE_2__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_2__/* .selectDictionary */ .w1);
1550
+ const error = (0,state__WEBPACK_IMPORTED_MODULE_2__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_2__/* .selectDictionaryError */ .mK);
1435
1551
  const isFirstAllowed = results.length > 0 ? results[0].isAllowed : undefined;
1436
1552
  return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
1437
1553
  className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Dictionary_module_scss__WEBPACK_IMPORTED_MODULE_5___default().dictionary), className, {
@@ -1439,6 +1555,11 @@ const Dictionary = ({ className })=>{
1439
1555
  [(_Dictionary_module_scss__WEBPACK_IMPORTED_MODULE_5___default().isNotAllowed)]: isFirstAllowed === false
1440
1556
  }),
1441
1557
  children: [
1558
+ typeof error !== "undefined" && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_EmptyState__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
1559
+ className: (_Dictionary_module_scss__WEBPACK_IMPORTED_MODULE_5___default().emptyState),
1560
+ type: "error",
1561
+ children: error.message
1562
+ }),
1442
1563
  results.map(({ definitions , isAllowed , word })=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
1443
1564
  className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Dictionary_module_scss__WEBPACK_IMPORTED_MODULE_5___default().result), {
1444
1565
  [(_Dictionary_module_scss__WEBPACK_IMPORTED_MODULE_5___default().isAllowed)]: isAllowed === true,
@@ -1927,7 +2048,7 @@ __webpack_async_result__();
1927
2048
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
1928
2049
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
1929
2050
  /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6942);
1930
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(92237);
2051
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(75558);
1931
2052
  /* harmony import */ var _Key__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50237);
1932
2053
 
1933
2054
 
@@ -2475,12 +2596,13 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
2475
2596
  /* harmony export */ });
2476
2597
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
2477
2598
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
2478
- /* harmony import */ var _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7618);
2479
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
2480
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
2481
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16689);
2482
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
2483
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92237);
2599
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59003);
2600
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
2601
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
2602
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
2603
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
2604
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
2605
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75558);
2484
2606
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51413);
2485
2607
  /* harmony import */ var _Rack_module_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(42687);
2486
2608
  /* harmony import */ var _Rack_module_scss__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_Rack_module_scss__WEBPACK_IMPORTED_MODULE_7__);
@@ -2496,19 +2618,20 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([stat
2496
2618
 
2497
2619
 
2498
2620
  const Rack = ({ className })=>{
2621
+ const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
2499
2622
  const config = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectConfig */ .$o);
2500
2623
  const rack = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectRack */ .QB);
2501
2624
  const resultCandidateTiles = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectResultCandidateTiles */ .z$);
2502
- const tiles = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(()=>(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .zipCharactersAndTiles */ .gV)(rack, resultCandidateTiles), [
2625
+ const tiles = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .zipCharactersAndTiles */ .gV)(rack, resultCandidateTiles), [
2503
2626
  rack,
2504
2627
  resultCandidateTiles
2505
2628
  ]);
2506
2629
  const tilesCount = tiles.length;
2507
- const tilesRefs = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(()=>(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .createArray */ .Ri)(tilesCount).map(()=>/*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_3__.createRef)()), [
2630
+ const tilesRefs = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>(0,lib__WEBPACK_IMPORTED_MODULE_4__/* .createArray */ .Ri)(tilesCount).map(()=>/*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_2__.createRef)()), [
2508
2631
  tilesCount
2509
2632
  ]);
2510
- const activeIndexRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)();
2511
- const changeActiveIndex = (0,react__WEBPACK_IMPORTED_MODULE_3__.useCallback)((offset)=>{
2633
+ const activeIndexRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)();
2634
+ const changeActiveIndex = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((offset)=>{
2512
2635
  const nextActiveIndex = Math.min(Math.max((activeIndexRef.current || 0) + offset, 0), tilesCount - 1);
2513
2636
  const tileRef = tilesRefs[nextActiveIndex].current;
2514
2637
  if (tileRef) {
@@ -2520,7 +2643,33 @@ const Rack = ({ className })=>{
2520
2643
  tilesCount,
2521
2644
  tilesRefs
2522
2645
  ]);
2523
- const onKeyDown = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(()=>{
2646
+ const handleChange = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((event)=>{
2647
+ const value = (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .extractInputValue */ .WM)(event.target);
2648
+ const characters = value ? (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .extractCharacters */ .nK)(config, value) : [];
2649
+ changeActiveIndex(value ? characters.length : -1);
2650
+ }, [
2651
+ changeActiveIndex,
2652
+ config
2653
+ ]);
2654
+ const handlePaste = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((event)=>{
2655
+ const index = activeIndexRef.current;
2656
+ if (typeof index === "undefined") {
2657
+ return;
2658
+ }
2659
+ event.preventDefault();
2660
+ const value = event.clipboardData.getData("text/plain").toLocaleLowerCase();
2661
+ const characters = value ? (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .extractCharacters */ .nK)(config, value) : [];
2662
+ changeActiveIndex(value ? characters.length : -1);
2663
+ dispatch(state__WEBPACK_IMPORTED_MODULE_5__/* .rackSlice.actions.changeCharacters */ .O_.actions.changeCharacters({
2664
+ characters,
2665
+ index
2666
+ }));
2667
+ }, [
2668
+ changeActiveIndex,
2669
+ config,
2670
+ dispatch
2671
+ ]);
2672
+ const handleKeyDown = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>{
2524
2673
  return (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .createKeyboardNavigation */ .np)({
2525
2674
  onArrowLeft: (event)=>{
2526
2675
  event.preventDefault();
@@ -2530,12 +2679,18 @@ const Rack = ({ className })=>{
2530
2679
  event.preventDefault();
2531
2680
  changeActiveIndex(1);
2532
2681
  },
2533
- onBackspace: ()=>{
2682
+ onBackspace: (event)=>{
2683
+ event.preventDefault();
2534
2684
  changeActiveIndex(-1);
2535
2685
  },
2536
2686
  onKeyDown: (event)=>{
2537
- const character = event.key.toLowerCase();
2538
- if (config.hasCharacter(character) || character === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.BLANK) {
2687
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event) && config.isTwoCharacterTilePrefix(event.key)) {
2688
+ changeActiveIndex(1);
2689
+ } else if (event.currentTarget.value === event.key) {
2690
+ // change event did not fire because the same character was typed over the current one
2691
+ // but we still want to move the caret
2692
+ event.preventDefault();
2693
+ event.stopPropagation();
2539
2694
  changeActiveIndex(1);
2540
2695
  }
2541
2696
  }
@@ -2545,14 +2700,16 @@ const Rack = ({ className })=>{
2545
2700
  config
2546
2701
  ]);
2547
2702
  return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
2548
- className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_Rack_module_scss__WEBPACK_IMPORTED_MODULE_7___default().rack), className),
2703
+ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Rack_module_scss__WEBPACK_IMPORTED_MODULE_7___default().rack), className),
2704
+ onPaste: handlePaste,
2549
2705
  children: tiles.map(({ character , tile }, index)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_RackTile__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
2550
2706
  activeIndexRef: activeIndexRef,
2551
2707
  character: character,
2552
2708
  index: index,
2553
2709
  inputRef: tilesRefs[index],
2554
2710
  tile: tile,
2555
- onKeyDown: onKeyDown
2711
+ onChange: handleChange,
2712
+ onKeyDown: handleKeyDown
2556
2713
  }, index))
2557
2714
  });
2558
2715
  };
@@ -2578,7 +2735,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
2578
2735
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
2579
2736
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
2580
2737
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
2581
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92237);
2738
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75558);
2582
2739
  /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(90485);
2583
2740
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(51413);
2584
2741
  /* harmony import */ var _Tile__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(54031);
@@ -2595,7 +2752,7 @@ state__WEBPACK_IMPORTED_MODULE_6__ = (__webpack_async_dependencies__.then ? (awa
2595
2752
 
2596
2753
 
2597
2754
 
2598
- const RackTile = ({ activeIndexRef , character , index , inputRef , tile , onKeyDown })=>{
2755
+ const RackTile = ({ activeIndexRef , character , index , inputRef , tile , onChange , onKeyDown , })=>{
2599
2756
  const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
2600
2757
  const translate = (0,state__WEBPACK_IMPORTED_MODULE_6__/* .useTranslate */ .qM)();
2601
2758
  const config = (0,state__WEBPACK_IMPORTED_MODULE_6__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_6__/* .selectConfig */ .$o);
@@ -2605,33 +2762,48 @@ const RackTile = ({ activeIndexRef , character , index , inputRef , tile , onKey
2605
2762
  }, [
2606
2763
  index
2607
2764
  ]);
2608
- const handleCharacterChange = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((value)=>{
2609
- dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .rackSlice.actions.changeCharacter */ .O_.actions.changeCharacter({
2610
- character: value,
2765
+ const handleChange = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((event)=>{
2766
+ event.preventDefault();
2767
+ event.stopPropagation();
2768
+ const value = (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .extractInputValue */ .WM)(event.target);
2769
+ const characters = value ? (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .extractCharacters */ .nK)(config, value) : [
2770
+ null
2771
+ ];
2772
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .rackSlice.actions.changeCharacters */ .O_.actions.changeCharacters({
2773
+ characters,
2611
2774
  index
2612
2775
  }));
2776
+ onChange(event);
2613
2777
  }, [
2614
- index
2778
+ config,
2779
+ index,
2780
+ onChange
2615
2781
  ]);
2616
2782
  const handleKeyDown = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(()=>{
2617
2783
  return (0,lib__WEBPACK_IMPORTED_MODULE_4__/* .createKeyboardNavigation */ .np)({
2618
- onBackspace: ()=>handleCharacterChange(null),
2619
- onDelete: ()=>handleCharacterChange(null),
2784
+ onBackspace: (event)=>{
2785
+ event.preventDefault();
2786
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .rackSlice.actions.changeCharacter */ .O_.actions.changeCharacter({
2787
+ character: null,
2788
+ index
2789
+ }));
2790
+ },
2620
2791
  onKeyDown: (event)=>{
2621
- const newCharacter = event.key.toLowerCase();
2622
- const twoCharacterTile = config.getTwoCharacterTileByPrefix(newCharacter);
2623
- if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event) && twoCharacterTile) {
2792
+ if ((0,lib__WEBPACK_IMPORTED_MODULE_4__/* .isCtrl */ .yl)(event) && config.isTwoCharacterTilePrefix(event.key)) {
2624
2793
  event.preventDefault();
2625
- handleCharacterChange(twoCharacterTile);
2626
- } else if (config.hasCharacter(newCharacter) || newCharacter === _scrabble_solver_constants__WEBPACK_IMPORTED_MODULE_1__.BLANK) {
2627
- handleCharacterChange(newCharacter);
2794
+ event.stopPropagation();
2795
+ const twoTilesCharacter = config.getTwoCharacterTileByPrefix(event.key);
2796
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2797
+ dispatch(state__WEBPACK_IMPORTED_MODULE_6__/* .rackSlice.actions.changeCharacter */ .O_.actions.changeCharacter({
2798
+ character: twoTilesCharacter,
2799
+ index
2800
+ }));
2628
2801
  }
2629
2802
  onKeyDown(event);
2630
2803
  }
2631
2804
  });
2632
2805
  }, [
2633
- config,
2634
- handleCharacterChange,
2806
+ index,
2635
2807
  onKeyDown
2636
2808
  ]);
2637
2809
  return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Tile__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
@@ -2646,6 +2818,7 @@ const RackTile = ({ activeIndexRef , character , index , inputRef , tile , onKey
2646
2818
  raised: true,
2647
2819
  size: parameters__WEBPACK_IMPORTED_MODULE_5__/* .TILE_SIZE */ .I_,
2648
2820
  tabIndex: index === 0 ? undefined : -1,
2821
+ onChange: handleChange,
2649
2822
  onFocus: handleFocus,
2650
2823
  onKeyDown: handleKeyDown
2651
2824
  }, index);
@@ -3105,21 +3278,24 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
3105
3278
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
3106
3279
  /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59003);
3107
3280
  /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
3108
- /* harmony import */ var react_window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(80551);
3109
- /* harmony import */ var react_window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_window__WEBPACK_IMPORTED_MODULE_2__);
3110
- /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90485);
3111
- /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(51413);
3112
- /* harmony import */ var _EmptyState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(79590);
3113
- /* harmony import */ var _Loading__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(85907);
3114
- /* harmony import */ var _ResultsInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(57345);
3115
- /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(61157);
3116
- /* harmony import */ var _HeaderButton__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(53236);
3117
- /* harmony import */ var _Result__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(73829);
3118
- /* harmony import */ var _Results_module_scss__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(81177);
3119
- /* harmony import */ var _Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_Results_module_scss__WEBPACK_IMPORTED_MODULE_12__);
3120
- /* harmony import */ var _SolveButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(17290);
3121
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_4__, _EmptyState__WEBPACK_IMPORTED_MODULE_5__, _Loading__WEBPACK_IMPORTED_MODULE_6__, _ResultsInput__WEBPACK_IMPORTED_MODULE_7__, _HeaderButton__WEBPACK_IMPORTED_MODULE_9__, _Result__WEBPACK_IMPORTED_MODULE_10__, _SolveButton__WEBPACK_IMPORTED_MODULE_11__]);
3122
- ([state__WEBPACK_IMPORTED_MODULE_4__, _EmptyState__WEBPACK_IMPORTED_MODULE_5__, _Loading__WEBPACK_IMPORTED_MODULE_6__, _ResultsInput__WEBPACK_IMPORTED_MODULE_7__, _HeaderButton__WEBPACK_IMPORTED_MODULE_9__, _Result__WEBPACK_IMPORTED_MODULE_10__, _SolveButton__WEBPACK_IMPORTED_MODULE_11__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
3281
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
3282
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
3283
+ /* harmony import */ var react_window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(80551);
3284
+ /* harmony import */ var react_window__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_window__WEBPACK_IMPORTED_MODULE_3__);
3285
+ /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(90485);
3286
+ /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51413);
3287
+ /* harmony import */ var _EmptyState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(79590);
3288
+ /* harmony import */ var _Loading__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(85907);
3289
+ /* harmony import */ var _ResultsInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(57345);
3290
+ /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(61157);
3291
+ /* harmony import */ var _HeaderButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(53236);
3292
+ /* harmony import */ var _Result__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(73829);
3293
+ /* harmony import */ var _Results_module_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(81177);
3294
+ /* harmony import */ var _Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_Results_module_scss__WEBPACK_IMPORTED_MODULE_13__);
3295
+ /* harmony import */ var _SolveButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(17290);
3296
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_5__, _EmptyState__WEBPACK_IMPORTED_MODULE_6__, _Loading__WEBPACK_IMPORTED_MODULE_7__, _ResultsInput__WEBPACK_IMPORTED_MODULE_8__, _HeaderButton__WEBPACK_IMPORTED_MODULE_10__, _Result__WEBPACK_IMPORTED_MODULE_11__, _SolveButton__WEBPACK_IMPORTED_MODULE_12__]);
3297
+ ([state__WEBPACK_IMPORTED_MODULE_5__, _EmptyState__WEBPACK_IMPORTED_MODULE_6__, _Loading__WEBPACK_IMPORTED_MODULE_7__, _ResultsInput__WEBPACK_IMPORTED_MODULE_8__, _HeaderButton__WEBPACK_IMPORTED_MODULE_10__, _Result__WEBPACK_IMPORTED_MODULE_11__, _SolveButton__WEBPACK_IMPORTED_MODULE_12__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
3298
+
3123
3299
 
3124
3300
 
3125
3301
 
@@ -3134,68 +3310,84 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([stat
3134
3310
 
3135
3311
 
3136
3312
  const Results = ({ height , width })=>{
3137
- const translate = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTranslate */ .qM)();
3138
- const allResults = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectSortedResults */ .f2);
3139
- const results = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectSortedFilteredResults */ .dN);
3140
- const isLoading = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectIsLoading */ .xU);
3141
- const isOutdated = (0,state__WEBPACK_IMPORTED_MODULE_4__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_4__/* .selectAreResultsOutdated */ .Mj);
3313
+ const translate = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTranslate */ .qM)();
3314
+ const allResults = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectSortedResults */ .f2);
3315
+ const results = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectSortedFilteredResults */ .dN);
3316
+ const isLoading = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectIsLoading */ .xU);
3317
+ const isOutdated = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectAreResultsOutdated */ .Mj);
3318
+ const error = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTypedSelector */ .ix)(state__WEBPACK_IMPORTED_MODULE_5__/* .selectSolveError */ .Rn);
3319
+ const listRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)();
3320
+ (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(()=>{
3321
+ if (listRef.current) {
3322
+ listRef.current.scrollTo(0, 0);
3323
+ }
3324
+ }, [
3325
+ listRef,
3326
+ results
3327
+ ]);
3142
3328
  return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
3143
- className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().results),
3329
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().results),
3144
3330
  children: [
3145
3331
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
3146
- className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().header),
3147
- children: _constants__WEBPACK_IMPORTED_MODULE_8__/* .COLUMNS.map */ .L.map((column)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_HeaderButton__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z, {
3332
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().header),
3333
+ children: _constants__WEBPACK_IMPORTED_MODULE_9__/* .COLUMNS.map */ .L.map((column)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_HeaderButton__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z, {
3148
3334
  column: column
3149
3335
  }, column.id))
3150
3336
  }),
3151
- typeof results === "undefined" && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_EmptyState__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
3152
- className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().emptyState),
3337
+ typeof error !== "undefined" && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_EmptyState__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
3338
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().emptyState),
3339
+ type: "error",
3340
+ children: error.message
3341
+ }),
3342
+ typeof results === "undefined" && typeof error === "undefined" && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_EmptyState__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
3343
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().emptyState),
3153
3344
  type: "info",
3154
3345
  children: [
3155
3346
  translate("results.empty-state.uninitialized"),
3156
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_SolveButton__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z, {})
3347
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_SolveButton__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {})
3157
3348
  ]
3158
3349
  }),
3159
- typeof results !== "undefined" && typeof allResults !== "undefined" && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
3350
+ typeof results !== "undefined" && typeof allResults !== "undefined" && typeof error === "undefined" && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
3160
3351
  children: [
3161
- isOutdated && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_EmptyState__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
3162
- className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().emptyState),
3352
+ isOutdated && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_EmptyState__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
3353
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().emptyState),
3163
3354
  type: "info",
3164
3355
  children: [
3165
3356
  translate("results.empty-state.outdated"),
3166
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_SolveButton__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z, {})
3357
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_SolveButton__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {})
3167
3358
  ]
3168
3359
  }),
3169
3360
  !isOutdated && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
3170
3361
  children: [
3171
- allResults.length === 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_EmptyState__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
3172
- className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().emptyState),
3362
+ allResults.length === 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_EmptyState__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
3363
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().emptyState),
3173
3364
  type: "warning",
3174
3365
  children: translate("results.empty-state.no-results")
3175
3366
  }),
3176
- allResults.length > 0 && results.length === 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_EmptyState__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
3177
- className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().emptyState),
3367
+ allResults.length > 0 && results.length === 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_EmptyState__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
3368
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().emptyState),
3178
3369
  type: "info",
3179
3370
  children: translate("results.empty-state.no-filtered-results")
3180
3371
  }),
3181
- allResults.length > 0 && results.length > 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(react_window__WEBPACK_IMPORTED_MODULE_2__.FixedSizeList, {
3182
- className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().list), {
3183
- [(_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().outdated)]: isOutdated
3372
+ allResults.length > 0 && results.length > 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(react_window__WEBPACK_IMPORTED_MODULE_3__.FixedSizeList, {
3373
+ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().list), {
3374
+ [(_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().outdated)]: isOutdated
3184
3375
  }),
3185
- height: height - parameters__WEBPACK_IMPORTED_MODULE_3__/* .RESULTS_HEADER_HEIGHT */ .$L - parameters__WEBPACK_IMPORTED_MODULE_3__/* .RESULTS_INPUT_HEIGHT */ .qp,
3376
+ height: height - parameters__WEBPACK_IMPORTED_MODULE_4__/* .RESULTS_HEADER_HEIGHT */ .$L - parameters__WEBPACK_IMPORTED_MODULE_4__/* .RESULTS_INPUT_HEIGHT */ .qp,
3377
+ innerRef: listRef,
3186
3378
  itemCount: results.length,
3187
- itemSize: parameters__WEBPACK_IMPORTED_MODULE_3__/* .RESULTS_ITEM_HEIGHT */ .rx,
3379
+ itemSize: parameters__WEBPACK_IMPORTED_MODULE_4__/* .RESULTS_ITEM_HEIGHT */ .rx,
3188
3380
  width: width,
3189
- children: _Result__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z
3381
+ children: _Result__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z
3190
3382
  }),
3191
- allResults.length > 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_ResultsInput__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
3192
- className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_12___default().input)
3383
+ allResults.length > 0 && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_ResultsInput__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z, {
3384
+ className: (_Results_module_scss__WEBPACK_IMPORTED_MODULE_13___default().input)
3193
3385
  })
3194
3386
  ]
3195
3387
  })
3196
3388
  ]
3197
3389
  }),
3198
- isLoading && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Loading__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {})
3390
+ isLoading && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Loading__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {})
3199
3391
  ]
3200
3392
  });
3201
3393
  };
@@ -3344,7 +3536,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
3344
3536
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
3345
3537
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
3346
3538
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
3347
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92237);
3539
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75558);
3348
3540
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51413);
3349
3541
  /* harmony import */ var _ResultsInput_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(35628);
3350
3542
  /* harmony import */ var _ResultsInput_module_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_ResultsInput_module_scss__WEBPACK_IMPORTED_MODULE_6__);
@@ -3919,17 +4111,23 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
3919
4111
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
3920
4112
  /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59003);
3921
4113
  /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
3922
- /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(19931);
3923
- /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_2__);
3924
- /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6942);
3925
- /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(90485);
3926
- /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51413);
3927
- /* harmony import */ var _SquareButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49021);
3928
- /* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(79362);
3929
- /* harmony import */ var _Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32455);
3930
- /* harmony import */ var _Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8__);
3931
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_5__, _SquareButton__WEBPACK_IMPORTED_MODULE_6__]);
3932
- ([state__WEBPACK_IMPORTED_MODULE_5__, _SquareButton__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
4114
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16689);
4115
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
4116
+ /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(19931);
4117
+ /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_3__);
4118
+ /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69755);
4119
+ /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_use__WEBPACK_IMPORTED_MODULE_4__);
4120
+ /* harmony import */ var icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6942);
4121
+ /* harmony import */ var parameters__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(90485);
4122
+ /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(51413);
4123
+ /* harmony import */ var _SquareButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(49021);
4124
+ /* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(79362);
4125
+ /* harmony import */ var _Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(32455);
4126
+ /* harmony import */ var _Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10__);
4127
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_7__, _SquareButton__WEBPACK_IMPORTED_MODULE_8__]);
4128
+ ([state__WEBPACK_IMPORTED_MODULE_7__, _SquareButton__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
4129
+
4130
+
3933
4131
 
3934
4132
 
3935
4133
 
@@ -3940,38 +4138,53 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([stat
3940
4138
 
3941
4139
 
3942
4140
  const Sidebar = ({ children , className , isOpen , title , onClose })=>{
3943
- const translate = (0,state__WEBPACK_IMPORTED_MODULE_5__/* .useTranslate */ .qM)();
3944
- return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx((react_modal__WEBPACK_IMPORTED_MODULE_2___default()), {
4141
+ const translate = (0,state__WEBPACK_IMPORTED_MODULE_7__/* .useTranslate */ .qM)();
4142
+ const { 0: shouldReturnFocusAfterClose , 1: setShouldReturnFocusAfterClose } = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(true);
4143
+ (0,react_use__WEBPACK_IMPORTED_MODULE_4__.useKey)("Escape", ()=>{
4144
+ setShouldReturnFocusAfterClose(false);
4145
+ onClose();
4146
+ }, undefined, [
4147
+ onClose
4148
+ ]);
4149
+ (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(()=>{
4150
+ if (isOpen) {
4151
+ setShouldReturnFocusAfterClose(true);
4152
+ }
4153
+ }, [
4154
+ isOpen
4155
+ ]);
4156
+ return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx((react_modal__WEBPACK_IMPORTED_MODULE_3___default()), {
3945
4157
  className: {
3946
- afterOpen: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().afterOpen),
3947
- base: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().modal),
3948
- beforeClose: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().beforeClose)
4158
+ afterOpen: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().afterOpen),
4159
+ base: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().modal),
4160
+ beforeClose: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().beforeClose)
3949
4161
  },
3950
- closeTimeoutMS: parameters__WEBPACK_IMPORTED_MODULE_4__/* .TRANSITION_DURATION_LONG */ .MA,
4162
+ closeTimeoutMS: parameters__WEBPACK_IMPORTED_MODULE_6__/* .TRANSITION_DURATION_LONG */ .MA,
3951
4163
  contentLabel: title,
3952
4164
  isOpen: isOpen,
3953
- overlayClassName: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().overlay),
4165
+ overlayClassName: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().overlay),
4166
+ shouldReturnFocusAfterClose: shouldReturnFocusAfterClose,
3954
4167
  onRequestClose: onClose,
3955
4168
  children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
3956
- className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().sidebar), className),
4169
+ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().sidebar), className),
3957
4170
  children: [
3958
4171
  /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
3959
- className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().header),
4172
+ className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().header),
3960
4173
  children: [
3961
4174
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h1", {
3962
- className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().title),
4175
+ className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().title),
3963
4176
  children: title
3964
4177
  }),
3965
- /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_SquareButton__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
3966
- className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().closeButton),
3967
- Icon: icons__WEBPACK_IMPORTED_MODULE_3__/* .CrossFill */ .ME,
4178
+ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_SquareButton__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z, {
4179
+ className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().closeButton),
4180
+ Icon: icons__WEBPACK_IMPORTED_MODULE_5__/* .CrossFill */ .ME,
3968
4181
  tooltip: translate("common.close"),
3969
4182
  onClick: onClose
3970
4183
  })
3971
4184
  ]
3972
4185
  }),
3973
4186
  /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
3974
- className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_8___default().content),
4187
+ className: (_Sidebar_module_scss__WEBPACK_IMPORTED_MODULE_10___default().content),
3975
4188
  children: children
3976
4189
  })
3977
4190
  ]
@@ -3979,7 +4192,7 @@ const Sidebar = ({ children , className , isOpen , title , onClose })=>{
3979
4192
  });
3980
4193
  };
3981
4194
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Object.assign(Sidebar, {
3982
- Section: _components__WEBPACK_IMPORTED_MODULE_7__/* .Section */ .$
4195
+ Section: _components__WEBPACK_IMPORTED_MODULE_9__/* .Section */ .$
3983
4196
  }));
3984
4197
 
3985
4198
  __webpack_async_result__();
@@ -4134,7 +4347,6 @@ const Link = ({ className , Icon , tooltip , ...props })=>{
4134
4347
  const triggerProps = (0,_Tooltip__WEBPACK_IMPORTED_MODULE_2__/* .useTooltip */ .l)(tooltip, props);
4135
4348
  return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("a", {
4136
4349
  className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_SquareButton_module_scss__WEBPACK_IMPORTED_MODULE_3___default().squareButton), className),
4137
- type: "button",
4138
4350
  ...props,
4139
4351
  ...triggerProps,
4140
4352
  children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
@@ -4265,8 +4477,8 @@ var jsx_runtime_ = __webpack_require__(20997);
4265
4477
  var build = __webpack_require__(7618);
4266
4478
  // EXTERNAL MODULE: external "react"
4267
4479
  var external_react_ = __webpack_require__(16689);
4268
- // EXTERNAL MODULE: ./src/lib/index.ts + 27 modules
4269
- var lib = __webpack_require__(92237);
4480
+ // EXTERNAL MODULE: ./src/lib/index.ts + 29 modules
4481
+ var lib = __webpack_require__(75558);
4270
4482
  // EXTERNAL MODULE: external "classnames"
4271
4483
  var external_classnames_ = __webpack_require__(59003);
4272
4484
  var external_classnames_default = /*#__PURE__*/__webpack_require__.n(external_classnames_);
@@ -4278,8 +4490,7 @@ var Tile_module_default = /*#__PURE__*/__webpack_require__.n(Tile_module);
4278
4490
 
4279
4491
 
4280
4492
 
4281
- const handleChange = (event)=>event.preventDefault();
4282
- const TilePure = ({ autoFocus , canShowPoints , character , className , disabled , highlighted , inputRef , inputStyle , isBlank , placeholder , points , pointsStyle , raised , style , tabIndex , onFocus , onKeyDown , })=>/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
4493
+ const TilePure = ({ autoFocus , canShowPoints , character , className , disabled , highlighted , inputRef , inputStyle , isBlank , placeholder , points , pointsStyle , raised , style , tabIndex , onChange , onFocus , onKeyDown , })=>/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
4283
4494
  className: external_classnames_default()((Tile_module_default()).tile, className, {
4284
4495
  [(Tile_module_default()).highlighted]: highlighted,
4285
4496
  [(Tile_module_default()).blank]: isBlank,
@@ -4299,14 +4510,13 @@ const TilePure = ({ autoFocus , canShowPoints , character , className , disabled
4299
4510
  autoFocus: autoFocus,
4300
4511
  className: (Tile_module_default()).character,
4301
4512
  disabled: disabled,
4302
- maxLength: 1,
4303
4513
  placeholder: placeholder,
4304
4514
  ref: inputRef,
4305
4515
  spellCheck: false,
4306
4516
  style: inputStyle,
4307
4517
  tabIndex: tabIndex,
4308
4518
  value: character || "",
4309
- onChange: handleChange,
4519
+ onChange: onChange,
4310
4520
  onFocus: onFocus,
4311
4521
  onKeyDown: onKeyDown
4312
4522
  }),
@@ -4325,7 +4535,7 @@ const TilePure = ({ autoFocus , canShowPoints , character , className , disabled
4325
4535
 
4326
4536
 
4327
4537
 
4328
- const Tile = ({ autoFocus , className , character ="" , disabled , highlighted , inputRef: ref , isBlank , placeholder , points , raised , size , tabIndex , onFocus , onKeyDown , })=>{
4538
+ const Tile = ({ autoFocus , className , character ="" , disabled , highlighted , inputRef: ref , isBlank , placeholder , points , raised , size , tabIndex , onChange , onFocus =lib/* noop */.ZT , onKeyDown =lib/* noop */.ZT , })=>{
4329
4539
  const { pointsFontSize , tileFontSize , tileSize } = (0,lib/* getTileSizes */.vc)(size);
4330
4540
  const style = (0,external_react_.useMemo)(()=>({
4331
4541
  height: tileSize,
@@ -4348,6 +4558,10 @@ const Tile = ({ autoFocus , className , character ="" , disabled , highlighted ,
4348
4558
  ]);
4349
4559
  const isEmpty = !character || character === build.EMPTY_CELL;
4350
4560
  const canShowPoints = (isBlank || !isEmpty) && typeof points !== "undefined";
4561
+ const handleKeyDown = (event)=>{
4562
+ inputRef.current?.select();
4563
+ onKeyDown(event);
4564
+ };
4351
4565
  (0,external_react_.useEffect)(()=>{
4352
4566
  if (autoFocus && inputRef.current) {
4353
4567
  inputRef.current.focus();
@@ -4372,8 +4586,9 @@ const Tile = ({ autoFocus , className , character ="" , disabled , highlighted ,
4372
4586
  raised: raised,
4373
4587
  style: style,
4374
4588
  tabIndex: tabIndex,
4589
+ onChange: onChange,
4375
4590
  onFocus: onFocus,
4376
- onKeyDown: onKeyDown
4591
+ onKeyDown: handleKeyDown
4377
4592
  });
4378
4593
  };
4379
4594
  /* harmony default export */ const Tile_Tile = (Tile);
@@ -4463,7 +4678,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
4463
4678
  /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69755);
4464
4679
  /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_use__WEBPACK_IMPORTED_MODULE_4__);
4465
4680
  /* harmony import */ var hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(26183);
4466
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(92237);
4681
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(75558);
4467
4682
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8550);
4468
4683
  /* harmony import */ var _Tooltip_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(222);
4469
4684
  /* harmony import */ var _Tooltip_module_scss__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_Tooltip_module_scss__WEBPACK_IMPORTED_MODULE_8__);
@@ -5021,7 +5236,7 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
5021
5236
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
5022
5237
  /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69755);
5023
5238
  /* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_use__WEBPACK_IMPORTED_MODULE_2__);
5024
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(92237);
5239
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(75558);
5025
5240
  /* harmony import */ var state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(51413);
5026
5241
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([state__WEBPACK_IMPORTED_MODULE_4__]);
5027
5242
  state__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
@@ -5120,7 +5335,7 @@ __webpack_async_result__();
5120
5335
  /* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom_client__WEBPACK_IMPORTED_MODULE_2__);
5121
5336
  /* harmony import */ var react_portal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63938);
5122
5337
  /* harmony import */ var react_portal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_portal__WEBPACK_IMPORTED_MODULE_3__);
5123
- /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92237);
5338
+ /* harmony import */ var lib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75558);
5124
5339
 
5125
5340
 
5126
5341