@scrabble-solver/scrabble-solver 2.11.7 → 2.11.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +7 -7
  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/131.js +153 -115
  16. package/.next/server/chunks/277.js +1430 -691
  17. package/.next/server/chunks/44.js +3 -0
  18. package/.next/server/chunks/50.js +20 -78
  19. package/.next/server/chunks/865.js +153 -115
  20. package/.next/server/chunks/911.js +14 -14
  21. package/.next/server/middleware-build-manifest.js +1 -1
  22. package/.next/server/pages/404.html +1 -1
  23. package/.next/server/pages/404.js.nft.json +1 -1
  24. package/.next/server/pages/500.html +1 -1
  25. package/.next/server/pages/_app.js +8 -0
  26. package/.next/server/pages/_app.js.nft.json +1 -1
  27. package/.next/server/pages/api/solve.js +44 -11
  28. package/.next/server/pages/index.html +1 -1
  29. package/.next/server/pages/index.js +169 -15
  30. package/.next/server/pages/index.js.nft.json +1 -1
  31. package/.next/server/pages/index.json +1 -1
  32. package/.next/static/9oRWxnZ1xFLSs55FJtiYi/_buildManifest.js +1 -0
  33. package/.next/static/chunks/pages/{404-ca203fa27afc37d8.js → 404-b4b5ce15153d4825.js} +1 -1
  34. package/.next/static/chunks/pages/_app-b0231bed954dd413.js +28 -0
  35. package/.next/static/chunks/pages/index-4e8566409753e1c3.js +1 -0
  36. package/.next/static/css/60e8258da7362a1a.css +1 -0
  37. package/.next/static/css/fcc46fec97b11afc.css +2 -0
  38. package/.next/trace +52 -50
  39. package/package.json +14 -13
  40. package/src/components/Board/Board.module.scss +18 -4
  41. package/src/components/Board/Board.tsx +145 -76
  42. package/src/components/Board/BoardPure.tsx +32 -40
  43. package/src/components/Board/components/Actions/Actions.module.scss +6 -17
  44. package/src/components/Board/components/Actions/Actions.tsx +36 -18
  45. package/src/components/Board/components/Cell/Cell.module.scss +12 -13
  46. package/src/components/Board/components/Cell/Cell.tsx +53 -3
  47. package/src/components/Board/components/InputPrompt/InputPrompt.module.scss +47 -0
  48. package/src/components/Board/components/InputPrompt/InputPrompt.tsx +81 -0
  49. package/src/components/Board/components/InputPrompt/index.ts +1 -0
  50. package/src/components/Board/components/ToggleDirectionButton/ToggleDirectionButton.module.scss +21 -0
  51. package/src/components/Board/components/ToggleDirectionButton/ToggleDirectionButton.tsx +34 -0
  52. package/src/components/Board/components/ToggleDirectionButton/index.ts +1 -0
  53. package/src/components/Board/components/index.ts +2 -0
  54. package/src/components/Board/hooks/index.ts +4 -0
  55. package/src/components/Board/hooks/useBackgroundImage.tsx +13 -9
  56. package/src/components/Board/hooks/useBoardStyle.ts +27 -0
  57. package/src/components/Board/hooks/useFloatingActions.ts +22 -0
  58. package/src/components/Board/hooks/useFloatingFocus.ts +10 -0
  59. package/src/components/Board/hooks/useFloatingInputPrompt.ts +19 -0
  60. package/src/components/Board/hooks/useGrid.ts +19 -2
  61. package/src/components/Key/Key.module.scss +7 -11
  62. package/src/components/NavButtons/NavButtons.tsx +2 -2
  63. package/src/components/Rack/Rack.module.scss +6 -6
  64. package/src/components/Rack/Rack.tsx +102 -24
  65. package/src/components/Rack/components/InputPrompt/InputPrompt.module.scss +22 -0
  66. package/src/components/Rack/components/InputPrompt/InputPrompt.tsx +89 -0
  67. package/src/components/Rack/components/InputPrompt/index.ts +1 -0
  68. package/src/components/Rack/components/RackTile/RackTile.module.scss +11 -0
  69. package/src/components/Rack/{RackTile.tsx → components/RackTile/RackTile.tsx} +59 -9
  70. package/src/components/Rack/components/RackTile/index.ts +1 -0
  71. package/src/components/Rack/components/index.ts +2 -0
  72. package/src/components/Radio/Radio.module.scss +0 -8
  73. package/src/components/Solver/Solver.module.scss +0 -20
  74. package/src/components/Solver/Solver.tsx +2 -4
  75. package/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.tsx +2 -10
  76. package/src/components/Solver/components/index.ts +0 -1
  77. package/src/components/Tile/Tile.module.scss +5 -0
  78. package/src/components/Tile/Tile.tsx +8 -6
  79. package/src/components/Tile/TilePure.tsx +8 -0
  80. package/src/hooks/useAppLayout.ts +3 -1
  81. package/src/hooks/useLocalStorage.ts +8 -0
  82. package/src/i18n/de.json +6 -1
  83. package/src/i18n/en.json +6 -1
  84. package/src/i18n/es.json +6 -1
  85. package/src/i18n/fa.json +6 -1
  86. package/src/i18n/fr.json +6 -1
  87. package/src/i18n/pl.json +6 -1
  88. package/src/icons/Keyboard.svg +4 -3
  89. package/src/icons/KeyboardFill.svg +4 -0
  90. package/src/icons/index.ts +1 -0
  91. package/src/lib/extractCharacters.test.ts +26 -0
  92. package/src/lib/extractCharacters.ts +11 -9
  93. package/src/lib/extractCharactersByCase.test.ts +31 -0
  94. package/src/lib/extractCharactersByCase.ts +31 -0
  95. package/src/lib/index.ts +4 -1
  96. package/src/lib/isCtrl.ts +7 -0
  97. package/src/lib/isUpperCase.ts +7 -0
  98. package/src/modals/KeyMapModal/KeyMapModal.tsx +20 -4
  99. package/src/modals/KeyMapModal/components/Mapping/Mapping.module.scss +10 -4
  100. package/src/modals/SettingsModal/SettingsModal.tsx +5 -1
  101. package/src/modals/SettingsModal/components/InputModeSetting/InputModeSetting.module.scss +12 -0
  102. package/src/modals/SettingsModal/components/InputModeSetting/InputModeSetting.tsx +55 -0
  103. package/src/modals/SettingsModal/components/InputModeSetting/index.ts +1 -0
  104. package/src/modals/SettingsModal/components/InputModeSetting/lib.ts +13 -0
  105. package/src/modals/SettingsModal/components/InputModeSetting/types.ts +7 -0
  106. package/src/modals/SettingsModal/components/index.ts +1 -0
  107. package/src/state/localStorage.ts +10 -1
  108. package/src/state/selectors.ts +2 -0
  109. package/src/state/slices/settingsInitialState.ts +4 -1
  110. package/src/state/slices/settingsSlice.ts +6 -1
  111. package/src/styles/mixins.scss +1 -0
  112. package/src/styles/variables.scss +2 -0
  113. package/src/types/index.ts +7 -0
  114. package/.next/static/chunks/pages/_app-e89a3c225b87516a.js +0 -28
  115. package/.next/static/chunks/pages/index-58744f49bf6b891f.js +0 -1
  116. package/.next/static/css/34adfcf12a7d9bb6.css +0 -1
  117. package/.next/static/css/edaeaa48321b4cf2.css +0 -2
  118. package/.next/static/uhB6d-q63uRC6RubwepLq/_buildManifest.js +0 -1
  119. package/src/components/Solver/components/FloatingSolveButton/FloatingSolveButton.module.scss +0 -7
  120. package/src/components/Solver/components/FloatingSolveButton/FloatingSolveButton.tsx +0 -53
  121. package/src/components/Solver/components/FloatingSolveButton/index.ts +0 -1
  122. /package/.next/static/{uhB6d-q63uRC6RubwepLq → 9oRWxnZ1xFLSs55FJtiYi}/_ssgManifest.js +0 -0
@@ -1,11 +1,12 @@
1
1
  import { Board, Locale } from '@scrabble-solver/types';
2
2
  import store2 from 'store2';
3
3
 
4
- import { AutoGroupTiles, Rack } from 'types';
4
+ import { AutoGroupTiles, InputMode, Rack } from 'types';
5
5
 
6
6
  const AUTO_GROUP_TILES = 'auto-group-tiles';
7
7
  const BOARD = 'board';
8
8
  const CONFIG_ID = 'config-id';
9
+ const INPUT_MODE = 'input-mode';
9
10
  const LOCALE = 'locale';
10
11
  const RACK = 'rack';
11
12
 
@@ -38,6 +39,14 @@ const localStorage = {
38
39
  store.set(CONFIG_ID, configId, true);
39
40
  },
40
41
 
42
+ getInputMode(): InputMode | undefined {
43
+ return store.get(INPUT_MODE);
44
+ },
45
+
46
+ setInputMode(inputMode: InputMode | undefined): void {
47
+ store.set(INPUT_MODE, inputMode, true);
48
+ },
49
+
41
50
  getLocale(): Locale | undefined {
42
51
  return store.get(LOCALE);
43
52
  },
@@ -65,6 +65,8 @@ export const selectLocaleAutoGroupTiles = createSelector([selectLocale, selectSe
65
65
 
66
66
  export const selectBoard = selectBoardRoot;
67
67
 
68
+ export const selectInputMode = createSelector([selectSettingsRoot], (settings) => settings.inputMode);
69
+
68
70
  export const selectConfigId = createSelector([selectSettingsRoot], (settings) => settings.configId);
69
71
 
70
72
  export const selectConfig = createSelector([selectConfigId, selectLocale], getLocaleConfig);
@@ -2,21 +2,24 @@ import { literaki, scrabble } from '@scrabble-solver/configs';
2
2
  import { Locale } from '@scrabble-solver/types';
3
3
 
4
4
  import { guessLocale } from 'lib';
5
- import { AutoGroupTiles } from 'types';
5
+ import { AutoGroupTiles, InputMode } from 'types';
6
6
 
7
7
  import localStorage from '../localStorage';
8
8
 
9
9
  export interface SettingsState {
10
10
  autoGroupTiles: AutoGroupTiles;
11
11
  configId: typeof literaki.id | typeof scrabble.id;
12
+ inputMode: InputMode;
12
13
  locale: Locale;
13
14
  }
14
15
 
15
16
  const localStorageAutoGroupTiles = localStorage.getAutoGroupTiles();
17
+ const isTouchScreen = typeof globalThis.matchMedia !== 'undefined' && globalThis.matchMedia('(hover: none)').matches;
16
18
 
17
19
  const settingsInitialState: SettingsState = {
18
20
  autoGroupTiles: typeof localStorageAutoGroupTiles === 'undefined' ? 'left' : localStorageAutoGroupTiles,
19
21
  configId: localStorage.getConfigId() || scrabble.id,
22
+ inputMode: localStorage.getInputMode() || (isTouchScreen ? 'touchscreen' : 'keyboard'),
20
23
  locale: localStorage.getLocale() || guessLocale(),
21
24
  };
22
25
 
@@ -1,7 +1,7 @@
1
1
  import { createSlice, PayloadAction } from '@reduxjs/toolkit';
2
2
  import { Locale } from '@scrabble-solver/types';
3
3
 
4
- import { AutoGroupTiles } from 'types';
4
+ import { AutoGroupTiles, InputMode } from 'types';
5
5
 
6
6
  import settingsInitialState from './settingsInitialState';
7
7
 
@@ -19,6 +19,11 @@ const settingsSlice = createSlice({
19
19
  return { ...state, configId };
20
20
  },
21
21
 
22
+ changeInputMode: (state, action: PayloadAction<InputMode>) => {
23
+ const inputMode = action.payload;
24
+ return { ...state, inputMode };
25
+ },
26
+
22
27
  changeLocale: (state, action: PayloadAction<Locale>) => {
23
28
  const locale = action.payload;
24
29
  return { ...state, locale };
@@ -103,6 +103,7 @@ $media-expressions: (
103
103
  padding: 0 var(--spacing--l);
104
104
  transition: var(--transition);
105
105
  font-size: var(--font--size--m);
106
+ outline: none;
106
107
  }
107
108
 
108
109
  @mixin text-stroke($color, $size: 1px) {
@@ -107,6 +107,8 @@ $easeOutSine: cubic-bezier(0.61, 1, 0.88, 1);
107
107
  --button--icon--size: 24px;
108
108
  --dictionary--height: 260px;
109
109
  --dictionary--height--mobile: 110px;
110
+ --key--height: 36px;
111
+ --key--icon--size: 16px;
110
112
  --logo--aspect-ratio: 682 / 166;
111
113
  --logo--height: 60px;
112
114
  --modal--width: 370px;
@@ -4,6 +4,8 @@ export type AutoGroupTiles = 'left' | 'right' | null;
4
4
 
5
5
  export type Direction = 'horizontal' | 'vertical';
6
6
 
7
+ export type InputMode = 'keyboard' | 'touchscreen';
8
+
7
9
  export interface Point {
8
10
  x: number;
9
11
  y: number;
@@ -45,6 +47,7 @@ export enum ResultColumn {
45
47
  WordsCount = 'words-count',
46
48
  }
47
49
  export type TranslationKey =
50
+ | 'cell.enter-word'
48
51
  | 'cell.filter-cell'
49
52
  | 'cell.set-blank'
50
53
  | 'cell.set-not-blank'
@@ -89,6 +92,7 @@ export type TranslationKey =
89
92
  | 'menu'
90
93
  | 'rack.placeholder'
91
94
  | 'rack.tile.location'
95
+ | 'rack.touchscreen.placeholder'
92
96
  | 'remaining-tiles'
93
97
  | 'results'
94
98
  | 'results.empty-state.no-results'
@@ -104,6 +108,9 @@ export type TranslationKey =
104
108
  | 'settings.autoGroupTiles.right'
105
109
  | 'settings.autoGroupTiles.null'
106
110
  | 'settings.game'
111
+ | 'settings.inputMode'
112
+ | 'settings.inputMode.keyboard'
113
+ | 'settings.inputMode.touchscreen'
107
114
  | 'settings.language'
108
115
  | 'words'
109
116
  | 'words.invalid'