scrabble-solver 2.16.0 → 2.16.2

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 (125) hide show
  1. package/.nx/workspace-data/d/server-process.json +2 -2
  2. package/.nx/workspace-data/file-map.json +303 -259
  3. package/.nx/workspace-data/lockfile-dependencies.hash +1 -1
  4. package/.nx/workspace-data/lockfile-nodes.hash +1 -1
  5. package/.nx/workspace-data/nx_files.nxt +0 -0
  6. package/.nx/workspace-data/parsed-lock-file.dependencies.json +194 -209
  7. package/.nx/workspace-data/parsed-lock-file.nodes.json +271 -208
  8. package/.nx/workspace-data/project-graph.json +500 -433
  9. package/README.md +3 -4
  10. package/bump-version.js +28 -7
  11. package/bun.lock +115 -75
  12. package/cypress/e2e/features/198-highlight-unreachable-cells.ts +101 -0
  13. package/cypress/e2e/features/91-hover-remaining-tile-highlights.ts +90 -0
  14. package/cypress/e2e/features.spec.cy.ts +2 -0
  15. package/lerna.json +1 -1
  16. package/package.json +6 -6
  17. package/packages/configs/package.json +3 -3
  18. package/packages/constants/package.json +1 -1
  19. package/packages/dictionaries/package.json +5 -5
  20. package/packages/logger/package.json +1 -1
  21. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  22. package/packages/scrabble-solver/.next/build-manifest.json +6 -6
  23. package/packages/scrabble-solver/.next/cache/.previewinfo +1 -1
  24. package/packages/scrabble-solver/.next/cache/.rscinfo +1 -1
  25. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  26. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  27. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  28. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack.old +0 -0
  29. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  30. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  31. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  32. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  33. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack.old +0 -0
  34. package/packages/scrabble-solver/.next/dev/build-manifest.json +31 -0
  35. package/packages/scrabble-solver/.next/dev/cache/webpack/client-development/0.pack.gz +0 -0
  36. package/packages/scrabble-solver/.next/dev/cache/webpack/client-development/index.pack.gz +0 -0
  37. package/packages/scrabble-solver/.next/dev/react-loadable-manifest.json +1 -0
  38. package/packages/scrabble-solver/.next/dev/server/middleware-build-manifest.js +31 -0
  39. package/packages/scrabble-solver/.next/dev/server/middleware-react-loadable-manifest.js +1 -0
  40. package/packages/scrabble-solver/.next/dev/server/next-font-manifest.js +1 -0
  41. package/packages/scrabble-solver/.next/dev/server/next-font-manifest.json +1 -0
  42. package/packages/scrabble-solver/.next/dev/server/pages/_app.js +4082 -0
  43. package/packages/scrabble-solver/.next/dev/server/pages/_error.js +4126 -0
  44. package/packages/scrabble-solver/.next/dev/server/pages/index.js +4804 -0
  45. package/packages/scrabble-solver/.next/dev/server/pages-manifest.json +6 -0
  46. package/packages/scrabble-solver/.next/dev/server/webpack-runtime.js +231 -0
  47. package/packages/scrabble-solver/.next/dev/static/chunks/pages/_app.js +5131 -0
  48. package/packages/scrabble-solver/.next/dev/static/chunks/webpack.js +1238 -0
  49. package/packages/scrabble-solver/.next/dev/static/development/_buildManifest.js +1 -0
  50. package/packages/scrabble-solver/.next/dev/static/development/_ssgManifest.js +1 -0
  51. package/packages/scrabble-solver/.next/prerender-manifest.json +4 -4
  52. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  53. package/packages/scrabble-solver/.next/server/chunks/712.js +1 -1
  54. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  55. package/packages/scrabble-solver/.next/server/pages/404.html +1 -1
  56. package/packages/scrabble-solver/.next/server/pages/500.html +1 -1
  57. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  58. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  59. package/packages/scrabble-solver/.next/server/pages/api/solve.js +1 -1
  60. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  61. package/packages/scrabble-solver/.next/server/pages/api/verify.js +1 -1
  62. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
  63. package/packages/scrabble-solver/.next/server/pages/index.html +1 -1
  64. package/packages/scrabble-solver/.next/server/pages/index.js +1 -1
  65. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  66. package/packages/scrabble-solver/.next/server/pages/not-found.html +1 -1
  67. package/packages/scrabble-solver/.next/static/{pw-RjyxoPdU0jV0ImxbXX → a98wTJsZR6CASwFn19QFv}/_buildManifest.js +1 -1
  68. package/packages/scrabble-solver/.next/static/chunks/pages/_app-31e560b7b14739d6.js +7 -0
  69. package/packages/scrabble-solver/.next/static/chunks/pages/index-35f70f1627836521.js +1 -0
  70. package/packages/scrabble-solver/.next/static/css/0af35adb4bab56f0.css +2 -0
  71. package/packages/scrabble-solver/.next/static/css/a78e04fe95452380.css +1 -0
  72. package/packages/scrabble-solver/.next/trace +21 -21
  73. package/packages/scrabble-solver/.next/trace-build +1 -1
  74. package/packages/scrabble-solver/package.json +9 -9
  75. package/packages/scrabble-solver/public/service-worker.js +2 -2
  76. package/packages/scrabble-solver/src/api/isBoardValid.ts +4 -4
  77. package/packages/scrabble-solver/src/components/Board/Board.tsx +3 -1
  78. package/packages/scrabble-solver/src/components/Board/BoardPure.tsx +3 -0
  79. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +6 -0
  80. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.tsx +11 -2
  81. package/packages/scrabble-solver/src/components/Board/lib.ts +83 -2
  82. package/packages/scrabble-solver/src/components/Board/selectors.ts +20 -1
  83. package/packages/scrabble-solver/src/components/Rack/components/RackTile/RackTile.tsx +4 -1
  84. package/packages/scrabble-solver/src/components/Tile/TilePure.tsx +20 -18
  85. package/packages/scrabble-solver/src/i18n/languages/english.json +3 -0
  86. package/packages/scrabble-solver/src/i18n/languages/french.json +3 -0
  87. package/packages/scrabble-solver/src/i18n/languages/german.json +3 -0
  88. package/packages/scrabble-solver/src/i18n/languages/persian.json +3 -0
  89. package/packages/scrabble-solver/src/i18n/languages/polish.json +3 -0
  90. package/packages/scrabble-solver/src/i18n/languages/romanian.json +3 -0
  91. package/packages/scrabble-solver/src/i18n/languages/spanish.json +3 -0
  92. package/packages/scrabble-solver/src/i18n/languages/turkish.json +3 -0
  93. package/packages/scrabble-solver/src/modals/RemainingTilesModal/components/Character/Character.module.scss +4 -0
  94. package/packages/scrabble-solver/src/modals/RemainingTilesModal/components/Character/Character.tsx +35 -2
  95. package/packages/scrabble-solver/src/modals/SettingsModal/SettingsModal.tsx +8 -0
  96. package/packages/scrabble-solver/src/modals/SettingsModal/components/AutoGroupTilesSetting/AutoGroupTilesSetting.tsx +4 -4
  97. package/packages/scrabble-solver/src/modals/SettingsModal/components/HighlightUnreachableCellsSetting/HighlightUnreachableCellsSetting.module.scss +12 -0
  98. package/packages/scrabble-solver/src/modals/SettingsModal/components/HighlightUnreachableCellsSetting/HighlightUnreachableCellsSetting.tsx +51 -0
  99. package/packages/scrabble-solver/src/modals/SettingsModal/components/HighlightUnreachableCellsSetting/index.ts +1 -0
  100. package/packages/scrabble-solver/src/modals/SettingsModal/components/index.ts +1 -0
  101. package/packages/scrabble-solver/src/state/hoveredTile/index.ts +4 -0
  102. package/packages/scrabble-solver/src/state/hoveredTile/initialState.ts +5 -0
  103. package/packages/scrabble-solver/src/state/hoveredTile/selectors.ts +3 -0
  104. package/packages/scrabble-solver/src/state/hoveredTile/slice.ts +16 -0
  105. package/packages/scrabble-solver/src/state/hoveredTile/types.ts +3 -0
  106. package/packages/scrabble-solver/src/state/index.ts +1 -0
  107. package/packages/scrabble-solver/src/state/localStorage.ts +1 -0
  108. package/packages/scrabble-solver/src/state/settings/initialState.ts +1 -0
  109. package/packages/scrabble-solver/src/state/settings/selectors.ts +5 -0
  110. package/packages/scrabble-solver/src/state/settings/slice.ts +5 -0
  111. package/packages/scrabble-solver/src/state/settings/types.ts +1 -0
  112. package/packages/scrabble-solver/src/state/store.ts +2 -0
  113. package/packages/scrabble-solver/src/state/types.ts +2 -0
  114. package/packages/scrabble-solver/src/types/index.ts +3 -0
  115. package/packages/scrabble-solver/tsconfig.tsbuildinfo +1 -1
  116. package/packages/solver/package.json +6 -6
  117. package/packages/types/package.json +2 -2
  118. package/packages/word-definitions/package.json +2 -2
  119. package/packages/word-lists/package.json +2 -2
  120. package/todo.txt +0 -2
  121. package/packages/scrabble-solver/.next/static/chunks/pages/_app-9c9aaea7b6881765.js +0 -7
  122. package/packages/scrabble-solver/.next/static/chunks/pages/index-e9ea63e97865edcf.js +0 -1
  123. package/packages/scrabble-solver/.next/static/css/78726ae7cf7a5497.css +0 -2
  124. package/packages/scrabble-solver/.next/static/css/addf6fd4f75742d0.css +0 -1
  125. /package/packages/scrabble-solver/.next/static/{pw-RjyxoPdU0jV0ImxbXX → a98wTJsZR6CASwFn19QFv}/_ssgManifest.js +0 -0
@@ -0,0 +1,5 @@
1
+ import type { HoveredTileState } from './types';
2
+
3
+ export const hoveredTileInitialState: HoveredTileState = {
4
+ character: null,
5
+ };
@@ -0,0 +1,3 @@
1
+ import type { RootState } from '../types';
2
+
3
+ export const selectHoveredCharacter = (state: RootState): string | null => state.hoveredTile.character;
@@ -0,0 +1,16 @@
1
+ import { createSlice, type PayloadAction } from '@reduxjs/toolkit';
2
+
3
+ import { hoveredTileInitialState } from './initialState';
4
+
5
+ export const hoveredTileSlice = createSlice({
6
+ initialState: hoveredTileInitialState,
7
+ name: 'hoveredTile',
8
+ reducers: {
9
+ set: (state, action: PayloadAction<string>) => {
10
+ state.character = action.payload;
11
+ },
12
+ clear: (state) => {
13
+ state.character = null;
14
+ },
15
+ },
16
+ });
@@ -0,0 +1,3 @@
1
+ export interface HoveredTileState {
2
+ character: string | null;
3
+ }
@@ -2,6 +2,7 @@ export * from './actions';
2
2
  export * from './board';
3
3
  export * from './cellFilters';
4
4
  export * from './dictionary';
5
+ export * from './hoveredTile';
5
6
  export * from './localStorage';
6
7
  export * from './rack';
7
8
  export * from './results';
@@ -12,6 +12,7 @@ const SETTINGS = 'settings';
12
12
  const LEGACY_KEYS: Record<keyof SettingsState, string> = {
13
13
  autoGroupTiles: 'auto-group-tiles',
14
14
  game: 'config-id',
15
+ highlightUnreachableCells: 'highlight-unreachable-cells',
15
16
  inputMode: 'input-mode',
16
17
  locale: 'locale',
17
18
  removeCellFilters: 'remove-cell-filters',
@@ -10,6 +10,7 @@ const isTouchScreen = typeof globalThis.matchMedia !== 'undefined' && globalThis
10
10
  export const settingsInitialState: SettingsState = {
11
11
  autoGroupTiles: null,
12
12
  game: Game.Scrabble,
13
+ highlightUnreachableCells: false,
13
14
  inputMode: isTouchScreen ? 'touchscreen' : 'keyboard',
14
15
  locale: guessLocale(),
15
16
  removeCellFilters: 'always',
@@ -19,6 +19,11 @@ export const selectAutoGroupTiles = createSelector([selectSettings], (settings)
19
19
 
20
20
  export const selectGame = createSelector([selectSettings], (settings) => settings.game);
21
21
 
22
+ export const selectHighlightUnreachableCells = createSelector(
23
+ [selectSettings],
24
+ (settings) => settings.highlightUnreachableCells,
25
+ );
26
+
22
27
  export const selectInputMode = createSelector([selectSettings], (settings) => settings.inputMode);
23
28
 
24
29
  export const selectLocale = createSelector([selectSettings], (settings) => settings.locale);
@@ -19,6 +19,11 @@ export const settingsSlice = createSlice({
19
19
  return { ...state, game };
20
20
  },
21
21
 
22
+ changeHighlightUnreachableCells: (state, action: PayloadAction<boolean>) => {
23
+ const highlightUnreachableCells = action.payload;
24
+ return { ...state, highlightUnreachableCells };
25
+ },
26
+
22
27
  changeInputMode: (state, action: PayloadAction<InputMode>) => {
23
28
  const inputMode = action.payload;
24
29
  return { ...state, inputMode };
@@ -5,6 +5,7 @@ import type { AutoGroupTiles, InputMode, RemoveCellFilters } from '@/types';
5
5
  export interface SettingsState {
6
6
  autoGroupTiles: AutoGroupTiles;
7
7
  game: Game;
8
+ highlightUnreachableCells: boolean;
8
9
  inputMode: InputMode;
9
10
  locale: Locale;
10
11
  showCoordinates: ShowCoordinates;
@@ -4,6 +4,7 @@ import reduxSaga from 'redux-saga';
4
4
  import { boardSlice } from './board';
5
5
  import { cellFiltersSlice } from './cellFilters';
6
6
  import { dictionarySlice } from './dictionary';
7
+ import { hoveredTileSlice } from './hoveredTile';
7
8
  import { rackSlice } from './rack';
8
9
  import { resultsSlice } from './results';
9
10
  import { rootSaga } from './sagas';
@@ -18,6 +19,7 @@ export const store = configureStore({
18
19
  board: boardSlice.reducer,
19
20
  cellFilters: cellFiltersSlice.reducer,
20
21
  dictionary: dictionarySlice.reducer,
22
+ hoveredTile: hoveredTileSlice.reducer,
21
23
  rack: rackSlice.reducer,
22
24
  results: resultsSlice.reducer,
23
25
  settings: settingsSlice.reducer,
@@ -1,6 +1,7 @@
1
1
  import type { BoardState } from './board';
2
2
  import type { CellFiltersState } from './cellFilters';
3
3
  import type { DictionaryState } from './dictionary';
4
+ import type { HoveredTileState } from './hoveredTile';
4
5
  import type { RackState } from './rack';
5
6
  import type { ResultsState } from './results';
6
7
  import type { SettingsState } from './settings';
@@ -11,6 +12,7 @@ export type RootState = {
11
12
  board: BoardState;
12
13
  cellFilters: CellFiltersState;
13
14
  dictionary: DictionaryState;
15
+ hoveredTile: HoveredTileState;
14
16
  rack: RackState;
15
17
  results: ResultsState;
16
18
  settings: SettingsState;
@@ -89,6 +89,8 @@ export type TranslationKey =
89
89
  | 'common.blanks'
90
90
  | 'common.consonants'
91
91
  | 'common.next'
92
+ | 'common.off'
93
+ | 'common.on'
92
94
  | 'common.points'
93
95
  | 'common.previous'
94
96
  | 'common.space'
@@ -140,6 +142,7 @@ export type TranslationKey =
140
142
  | 'settings.autoGroupTiles.right'
141
143
  | 'settings.autoGroupTiles.null'
142
144
  | 'settings.game'
145
+ | 'settings.highlightUnreachableCells'
143
146
  | 'settings.inputMode'
144
147
  | 'settings.inputMode.keyboard'
145
148
  | 'settings.inputMode.touchscreen'