scrabble-solver 2.10.2 → 2.10.4
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.
- package/README.md +29 -18
- package/lerna.json +1 -1
- package/package.json +2 -2
- package/packages/configs/package-lock.json +4 -4
- package/packages/configs/package.json +3 -3
- package/packages/constants/package-lock.json +2 -2
- package/packages/constants/package.json +1 -1
- package/packages/dictionaries/package-lock.json +2 -2
- package/packages/dictionaries/package.json +4 -4
- package/packages/logger/package-lock.json +2 -2
- package/packages/logger/package.json +1 -1
- package/packages/scrabble-solver/.next/BUILD_ID +1 -1
- package/packages/scrabble-solver/.next/build-manifest.json +31 -19
- package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
- package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
- package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
- package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
- package/packages/scrabble-solver/.next/server/chunks/176.js +1269 -1559
- package/packages/scrabble-solver/.next/server/chunks/579.js +50 -26
- package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
- package/packages/scrabble-solver/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
- package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
- package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +2 -1
- package/packages/scrabble-solver/.next/server/pages/api/solve.js +22 -6
- package/packages/scrabble-solver/.next/server/pages/index.html +2 -2
- package/packages/scrabble-solver/.next/server/pages/index.js +1539 -52
- package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
- package/packages/scrabble-solver/.next/server/pages-manifest.json +1 -1
- package/packages/scrabble-solver/.next/static/P7XhuDLmwJJqC8kgPjX42/_buildManifest.js +1 -0
- package/packages/scrabble-solver/.next/static/{FjrbXpI5fkt4lmko-vL_7 → P7XhuDLmwJJqC8kgPjX42}/_ssgManifest.js +0 -0
- package/packages/scrabble-solver/.next/static/chunks/490-d29992f1c264d70e.js +5 -0
- package/packages/scrabble-solver/.next/static/chunks/528-9942ddad0031ff79.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/{404-24f9617eeb8d6dc1.js → 404-6c99a0c91257c60b.js} +1 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-fa0661b072fc6af9.js +24 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/index-d761f0af070273d2.js +1 -0
- package/packages/scrabble-solver/.next/static/css/78e42ad01f580f64.css +1 -0
- package/packages/scrabble-solver/.next/static/css/97eb6ee0c4300c83.css +1 -0
- package/packages/scrabble-solver/.next/static/css/dcca0c1a39cf5ef5.css +1 -0
- package/packages/scrabble-solver/.next/trace +55 -52
- package/packages/scrabble-solver/package-lock.json +27 -2
- package/packages/scrabble-solver/package.json +10 -8
- package/packages/scrabble-solver/src/components/Badge/Badge.module.scss +4 -5
- package/packages/scrabble-solver/src/components/Board/BoardPure.tsx +5 -5
- package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +15 -2
- package/packages/scrabble-solver/src/components/Button/Button.module.scss +10 -38
- package/packages/scrabble-solver/src/components/Button/Button.tsx +6 -5
- package/packages/scrabble-solver/src/components/Dictionary/Dictionary.module.scss +1 -2
- package/packages/scrabble-solver/src/components/Dictionary/Dictionary.tsx +2 -6
- package/packages/scrabble-solver/src/components/DictionaryInput/DictionaryInput.module.scss +1 -3
- package/packages/scrabble-solver/src/components/EmptyState/EmptyState.module.scss +6 -7
- package/packages/scrabble-solver/src/components/EmptyState/EmptyState.tsx +6 -6
- package/packages/scrabble-solver/src/components/Key/Key.module.scss +0 -1
- package/packages/scrabble-solver/src/components/{Splash/Splash.module.scss → LogoSplashScreen/LogoSplashScreen.module.scss} +1 -1
- package/packages/scrabble-solver/src/components/{Splash/Splash.tsx → LogoSplashScreen/LogoSplashScreen.tsx} +7 -7
- package/packages/scrabble-solver/src/components/LogoSplashScreen/index.ts +1 -0
- package/packages/scrabble-solver/src/components/{Sidebar/Sidebar.module.scss → Modal/Modal.module.scss} +25 -20
- package/packages/scrabble-solver/src/components/{Sidebar/Sidebar.tsx → Modal/Modal.tsx} +9 -9
- package/packages/scrabble-solver/src/components/{Sidebar → Modal}/components/Section/Section.module.scss +0 -0
- package/packages/scrabble-solver/src/components/{Sidebar → Modal}/components/Section/Section.tsx +0 -0
- package/packages/scrabble-solver/src/components/{Sidebar → Modal}/components/Section/index.ts +0 -0
- package/packages/scrabble-solver/src/components/{Sidebar → Modal}/components/index.ts +0 -0
- package/packages/scrabble-solver/src/components/Modal/index.ts +1 -0
- package/packages/scrabble-solver/src/components/NavButtons/NavButtons.tsx +22 -3
- package/packages/scrabble-solver/src/components/Progress/Progress.module.scss +9 -0
- package/packages/scrabble-solver/src/components/Progress/Progress.tsx +38 -0
- package/packages/scrabble-solver/src/components/Progress/index.ts +1 -0
- package/packages/scrabble-solver/src/components/Rack/Rack.module.scss +2 -0
- package/packages/scrabble-solver/src/components/Rack/Rack.tsx +3 -1
- package/packages/scrabble-solver/src/components/Rack/RackTile.tsx +3 -2
- package/packages/scrabble-solver/src/components/ResultCandidatePicker/ResultCandidatePicker.module.scss +76 -0
- package/packages/scrabble-solver/src/components/ResultCandidatePicker/ResultCandidatePicker.tsx +38 -0
- package/packages/scrabble-solver/src/components/ResultCandidatePicker/index.ts +1 -0
- package/packages/scrabble-solver/src/components/Results/Result.tsx +64 -43
- package/packages/scrabble-solver/src/components/Results/Results.module.scss +9 -16
- package/packages/scrabble-solver/src/components/Results/Results.tsx +45 -28
- package/packages/scrabble-solver/src/components/Results/SolveButton.tsx +9 -7
- package/packages/scrabble-solver/src/components/Results/{getColumns.ts → getLocaleColumns.ts} +2 -2
- package/packages/scrabble-solver/src/components/Results/types.ts +16 -0
- package/packages/scrabble-solver/src/components/Results/useColumns.ts +44 -0
- package/packages/scrabble-solver/src/components/ResultsInput/ResultsInput.module.scss +1 -3
- package/packages/scrabble-solver/src/components/Sizer/Sizer.module.scss +10 -0
- package/packages/scrabble-solver/src/components/Sizer/Sizer.tsx +10 -0
- package/packages/scrabble-solver/src/components/Sizer/index.ts +1 -0
- package/packages/scrabble-solver/src/components/Solver/Solver.module.scss +83 -27
- package/packages/scrabble-solver/src/components/Solver/Solver.tsx +157 -24
- package/packages/scrabble-solver/src/components/Solver/components/ApplyButton/ApplyButton.module.scss +5 -0
- package/packages/scrabble-solver/src/components/Solver/components/ApplyButton/ApplyButton.tsx +37 -0
- package/packages/scrabble-solver/src/components/Solver/components/ApplyButton/index.ts +1 -0
- package/packages/scrabble-solver/src/components/Solver/components/EmptyState/EmptyState.module.scss +59 -0
- package/packages/scrabble-solver/src/components/Solver/components/EmptyState/EmptyState.tsx +41 -0
- package/packages/scrabble-solver/src/components/Solver/components/EmptyState/index.ts +1 -0
- package/packages/scrabble-solver/src/components/Solver/components/SolveButton/SolveButton.module.scss +4 -0
- package/packages/scrabble-solver/src/components/Solver/components/SolveButton/SolveButton.tsx +42 -0
- package/packages/scrabble-solver/src/components/Solver/components/SolveButton/index.ts +1 -0
- package/packages/scrabble-solver/src/components/Solver/components/index.ts +3 -0
- package/packages/scrabble-solver/src/components/{Screen/Screen.module.scss → SplashScreen/SplashScreen.module.scss} +2 -12
- package/packages/scrabble-solver/src/components/{Screen/Screen.tsx → SplashScreen/SplashScreen.tsx} +4 -4
- package/packages/scrabble-solver/src/components/SplashScreen/index.ts +1 -0
- package/packages/scrabble-solver/src/components/SquareButton/SquareButton.module.scss +3 -3
- package/packages/scrabble-solver/src/components/Tile/Tile.module.scss +7 -15
- package/packages/scrabble-solver/src/components/Tooltip/Tooltip.module.scss +0 -1
- package/packages/scrabble-solver/src/components/index.ts +6 -7
- package/packages/scrabble-solver/src/hooks/index.ts +1 -1
- package/packages/scrabble-solver/src/hooks/useMediaQuery.ts +11 -0
- package/packages/scrabble-solver/src/hooks/usePortal.tsx +1 -1
- package/packages/scrabble-solver/src/i18n/de.json +2 -0
- package/packages/scrabble-solver/src/i18n/en.json +2 -0
- package/packages/scrabble-solver/src/i18n/es.json +2 -0
- package/packages/scrabble-solver/src/i18n/fa.json +2 -0
- package/packages/scrabble-solver/src/i18n/fr.json +2 -0
- package/packages/scrabble-solver/src/i18n/pl.json +2 -0
- package/packages/scrabble-solver/src/icons/CardChecklist.svg +5 -0
- package/packages/scrabble-solver/src/icons/Check.svg +2 -2
- package/packages/scrabble-solver/src/icons/ChevronDown.svg +4 -0
- package/packages/scrabble-solver/src/icons/CrossCircleFill.svg +4 -0
- package/packages/scrabble-solver/src/icons/{CrossFill.svg → CrossSquareFill.svg} +0 -0
- package/packages/scrabble-solver/src/icons/ExclamationTriangleFill.svg +4 -0
- package/packages/scrabble-solver/src/icons/InfoCircleFill.svg +4 -0
- package/packages/scrabble-solver/src/icons/List.svg +4 -0
- package/packages/scrabble-solver/src/icons/Search.svg +4 -0
- package/packages/scrabble-solver/src/icons/index.ts +8 -2
- package/packages/scrabble-solver/src/{components/KeyMap/KeyMap.tsx → modals/KeyMapModal/KeyMapModal.tsx} +11 -13
- package/packages/scrabble-solver/src/{components/KeyMap → modals/KeyMapModal}/components/Mapping/Mapping.module.scss +0 -0
- package/packages/scrabble-solver/src/{components/KeyMap → modals/KeyMapModal}/components/Mapping/Mapping.tsx +0 -0
- package/packages/scrabble-solver/src/{components/KeyMap → modals/KeyMapModal}/components/Mapping/index.ts +0 -0
- package/packages/scrabble-solver/src/{components/KeyMap → modals/KeyMapModal}/components/index.ts +0 -0
- package/packages/scrabble-solver/src/modals/KeyMapModal/index.ts +1 -0
- package/packages/scrabble-solver/src/{components/KeyMap → modals/KeyMapModal}/keys.tsx +1 -2
- package/packages/scrabble-solver/src/modals/MenuModal/MenuModal.module.scss +46 -0
- package/packages/scrabble-solver/src/modals/MenuModal/MenuModal.tsx +54 -0
- package/packages/scrabble-solver/src/modals/MenuModal/index.ts +1 -0
- package/packages/scrabble-solver/src/modals/RemainingTilesModal/RemainingTilesModal.module.scss +28 -0
- package/packages/scrabble-solver/src/{components/RemainingTiles/RemainingTiles.tsx → modals/RemainingTilesModal/RemainingTilesModal.tsx} +14 -12
- package/packages/scrabble-solver/src/{components/RemainingTiles → modals/RemainingTilesModal/components/Character}/Character.module.scss +6 -2
- package/packages/scrabble-solver/src/{components/RemainingTiles → modals/RemainingTilesModal/components/Character}/Character.tsx +11 -3
- package/packages/scrabble-solver/src/modals/RemainingTilesModal/components/Character/index.ts +1 -0
- package/packages/scrabble-solver/src/modals/RemainingTilesModal/components/index.ts +1 -0
- package/packages/scrabble-solver/src/modals/RemainingTilesModal/index.ts +1 -0
- package/packages/scrabble-solver/src/modals/ResultsModal/ResultsModal.module.scss +7 -0
- package/packages/scrabble-solver/src/modals/ResultsModal/ResultsModal.tsx +58 -0
- package/packages/scrabble-solver/src/modals/ResultsModal/index.ts +1 -0
- package/packages/scrabble-solver/src/modals/SettingsModal/SettingsModal.tsx +34 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/AutoGroupTilesSetting/AutoGroupTilesSetting.module.scss +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/AutoGroupTilesSetting/AutoGroupTilesSetting.tsx +1 -2
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/AutoGroupTilesSetting/constants.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/AutoGroupTilesSetting/index.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/AutoGroupTilesSetting/lib.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/ConfigSetting/ConfigSetting.module.scss +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/ConfigSetting/ConfigSetting.tsx +1 -2
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/ConfigSetting/index.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/ConfigSetting/options.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/ConfigSetting/types.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/LocaleSetting/LocaleSetting.module.scss +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/LocaleSetting/LocaleSetting.tsx +1 -2
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/LocaleSetting/index.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/LocaleSetting/options.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/LocaleSetting/types.ts +0 -0
- package/packages/scrabble-solver/src/{components/Settings → modals/SettingsModal}/components/index.ts +0 -0
- package/packages/scrabble-solver/src/modals/SettingsModal/index.ts +1 -0
- package/packages/scrabble-solver/src/{components/Words/Words.module.scss → modals/WordsModal/WordsModal.module.scss} +7 -1
- package/packages/scrabble-solver/src/{components/Words/Words.tsx → modals/WordsModal/WordsModal.tsx} +10 -12
- package/packages/scrabble-solver/src/modals/WordsModal/index.ts +1 -0
- package/packages/scrabble-solver/src/modals/index.ts +6 -0
- package/packages/scrabble-solver/src/pages/api/dictionary/[locale]/[word].ts +2 -1
- package/packages/scrabble-solver/src/pages/index.module.scss +6 -4
- package/packages/scrabble-solver/src/pages/index.tsx +63 -26
- package/packages/scrabble-solver/src/parameters/index.ts +28 -6
- package/packages/scrabble-solver/src/state/createAppStore.ts +7 -4
- package/packages/scrabble-solver/src/styles/mixins.scss +15 -13
- package/packages/scrabble-solver/src/styles/variables.scss +15 -17
- package/packages/scrabble-solver/src/types/index.ts +2 -0
- package/packages/scrabble-solver/tsconfig.json +1 -0
- package/packages/solver/package-lock.json +2 -2
- package/packages/solver/package.json +5 -5
- package/packages/types/package-lock.json +3 -3
- package/packages/types/package.json +2 -2
- package/packages/word-definitions/package-lock.json +8 -8
- package/packages/word-definitions/package.json +2 -2
- package/packages/word-lists/package-lock.json +2 -2
- package/packages/word-lists/package.json +2 -2
- package/packages/scrabble-solver/.next/cache/webpack/client-development/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-development/1.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-development/2.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-development/3.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-development/4.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-development/index.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-development/index.pack.old +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-development/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-development/10.pack_ +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-development/5.pack_ +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-development/8.pack_ +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-development/index.pack +0 -0
- package/packages/scrabble-solver/.next/static/FjrbXpI5fkt4lmko-vL_7/_buildManifest.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/361-d16f336a9752a55a.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/724-eb48df4d1ba3df8b.js +0 -5
- package/packages/scrabble-solver/.next/static/chunks/amp.js +0 -720
- package/packages/scrabble-solver/.next/static/chunks/main.js +0 -1076
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-959e495f0f221247.js +0 -24
- package/packages/scrabble-solver/.next/static/chunks/pages/_app.js +0 -2121
- package/packages/scrabble-solver/.next/static/chunks/pages/_error.js +0 -28
- package/packages/scrabble-solver/.next/static/chunks/pages/index-1e30dafa41bddb80.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/index.js +0 -5314
- package/packages/scrabble-solver/.next/static/chunks/react-refresh.js +0 -62
- package/packages/scrabble-solver/.next/static/chunks/webpack.js +0 -1237
- package/packages/scrabble-solver/.next/static/css/aafd07997120f1e4.css +0 -1
- package/packages/scrabble-solver/.next/static/css/c8d26240c04079b9.css +0 -1
- package/packages/scrabble-solver/.next/static/css/eb9d57f7103525ab.css +0 -1
- package/packages/scrabble-solver/.next/static/development/_buildManifest.js +0 -1
- package/packages/scrabble-solver/.next/static/development/_ssgManifest.js +0 -1
- package/packages/scrabble-solver/.next/static/webpack/fb4b50d5e70ee127.webpack.hot-update.json +0 -1
- package/packages/scrabble-solver/.next/static/webpack/pages/index.fb4b50d5e70ee127.hot-update.js +0 -171
- package/packages/scrabble-solver/.next/static/webpack/webpack.fb4b50d5e70ee127.hot-update.js +0 -18
- package/packages/scrabble-solver/src/components/KeyMap/index.ts +0 -1
- package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.module.scss +0 -16
- package/packages/scrabble-solver/src/components/RemainingTiles/index.ts +0 -1
- package/packages/scrabble-solver/src/components/Screen/index.ts +0 -1
- package/packages/scrabble-solver/src/components/Settings/Settings.tsx +0 -35
- package/packages/scrabble-solver/src/components/Settings/index.ts +0 -1
- package/packages/scrabble-solver/src/components/Sidebar/index.ts +0 -1
- package/packages/scrabble-solver/src/components/Splash/index.ts +0 -1
- package/packages/scrabble-solver/src/components/Words/index.ts +0 -1
- package/packages/scrabble-solver/src/hooks/useIsTablet.ts +0 -10
- package/packages/scrabble-solver/src/icons/Play.svg +0 -4
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Modal } from 'components';
|
|
4
|
+
import { CardChecklist, Cog, Github, Sack } from 'icons';
|
|
5
|
+
import { GITHUB_PROJECT_URL } from 'parameters';
|
|
6
|
+
import { useTranslate } from 'state';
|
|
7
|
+
|
|
8
|
+
import styles from './MenuModal.module.scss';
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
className?: string;
|
|
12
|
+
isOpen: boolean;
|
|
13
|
+
onClose: () => void;
|
|
14
|
+
onShowRemainingTiles: () => void;
|
|
15
|
+
onShowSettings: () => void;
|
|
16
|
+
onShowWords: () => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const Menu: FunctionComponent<Props> = ({
|
|
20
|
+
className,
|
|
21
|
+
isOpen,
|
|
22
|
+
onClose,
|
|
23
|
+
onShowRemainingTiles,
|
|
24
|
+
onShowSettings,
|
|
25
|
+
onShowWords,
|
|
26
|
+
}) => {
|
|
27
|
+
const translate = useTranslate();
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<Modal className={className} isOpen={isOpen} title={translate('menu')} onClose={onClose}>
|
|
31
|
+
<button className={styles.button} onClick={onShowRemainingTiles}>
|
|
32
|
+
<Sack className={styles.icon} />
|
|
33
|
+
<div className={styles.content}>{translate('remaining-tiles')}</div>
|
|
34
|
+
</button>
|
|
35
|
+
|
|
36
|
+
<button className={styles.button} onClick={onShowWords}>
|
|
37
|
+
<CardChecklist className={styles.icon} />
|
|
38
|
+
<div className={styles.content}>{translate('words')}</div>
|
|
39
|
+
</button>
|
|
40
|
+
|
|
41
|
+
<a className={styles.button} href={GITHUB_PROJECT_URL} rel="noopener noreferrer" target="_blank">
|
|
42
|
+
<Github className={styles.icon} />
|
|
43
|
+
<div className={styles.content}>{translate('github')}</div>
|
|
44
|
+
</a>
|
|
45
|
+
|
|
46
|
+
<button className={styles.button} onClick={onShowSettings}>
|
|
47
|
+
<Cog className={styles.icon} />
|
|
48
|
+
<div className={styles.content}>{translate('settings')}</div>
|
|
49
|
+
</button>
|
|
50
|
+
</Modal>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export default Menu;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './MenuModal';
|
package/packages/scrabble-solver/src/modals/RemainingTilesModal/RemainingTilesModal.module.scss
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
.title {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: space-between;
|
|
5
|
+
flex-wrap: wrap;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.content {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-wrap: wrap;
|
|
11
|
+
gap: var(--spacing--l);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.badge {
|
|
15
|
+
[dir='ltr'] & {
|
|
16
|
+
margin-left: var(--spacing--m);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[dir='rtl'] & {
|
|
20
|
+
margin-right: var(--spacing--m);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.character {
|
|
25
|
+
display: flex;
|
|
26
|
+
flex: 0 1;
|
|
27
|
+
max-width: 50px;
|
|
28
|
+
}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { FunctionComponent } from 'react';
|
|
2
2
|
|
|
3
|
+
import { Badge, Modal } from 'components';
|
|
3
4
|
import { LOCALE_FEATURES } from 'i18n';
|
|
4
5
|
import { selectLocale, selectRemainingTilesGroups, useTranslate, useTypedSelector } from 'state';
|
|
5
6
|
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
import Character from './Character';
|
|
10
|
-
import styles from './RemainingTiles.module.scss';
|
|
7
|
+
import { Character } from './components';
|
|
8
|
+
import styles from './RemainingTilesModal.module.scss';
|
|
11
9
|
|
|
12
10
|
interface Props {
|
|
13
11
|
className?: string;
|
|
@@ -15,20 +13,20 @@ interface Props {
|
|
|
15
13
|
onClose: () => void;
|
|
16
14
|
}
|
|
17
15
|
|
|
18
|
-
const
|
|
16
|
+
const RemainingTilesModal: FunctionComponent<Props> = ({ className, isOpen, onClose }) => {
|
|
19
17
|
const translate = useTranslate();
|
|
20
18
|
const locale = useTypedSelector(selectLocale);
|
|
21
19
|
const groups = useTypedSelector(selectRemainingTilesGroups);
|
|
22
20
|
const { direction } = LOCALE_FEATURES[locale];
|
|
23
21
|
|
|
24
22
|
return (
|
|
25
|
-
<
|
|
23
|
+
<Modal className={className} isOpen={isOpen} title={translate('remaining-tiles')} onClose={onClose}>
|
|
26
24
|
{groups.map(({ remainingCount, tiles, translationKey, totalCount }) => {
|
|
27
25
|
const current = direction === 'ltr' ? remainingCount : totalCount;
|
|
28
26
|
const total = direction === 'ltr' ? totalCount : remainingCount;
|
|
29
27
|
|
|
30
28
|
return (
|
|
31
|
-
<
|
|
29
|
+
<Modal.Section
|
|
32
30
|
key={translationKey}
|
|
33
31
|
title={
|
|
34
32
|
<span className={styles.title}>
|
|
@@ -41,14 +39,18 @@ const RemainingTiles: FunctionComponent<Props> = ({ className, isOpen, onClose }
|
|
|
41
39
|
>
|
|
42
40
|
<div className={styles.content}>
|
|
43
41
|
{tiles.map((tile) => {
|
|
44
|
-
return
|
|
42
|
+
return (
|
|
43
|
+
<div className={styles.character} key={tile.character}>
|
|
44
|
+
<Character tile={tile} />
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
45
47
|
})}
|
|
46
48
|
</div>
|
|
47
|
-
</
|
|
49
|
+
</Modal.Section>
|
|
48
50
|
);
|
|
49
51
|
})}
|
|
50
|
-
</
|
|
52
|
+
</Modal>
|
|
51
53
|
);
|
|
52
54
|
};
|
|
53
55
|
|
|
54
|
-
export default
|
|
56
|
+
export default RemainingTilesModal;
|
|
@@ -2,13 +2,12 @@ import { BLANK } from '@scrabble-solver/constants';
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { FunctionComponent } from 'react';
|
|
4
4
|
|
|
5
|
+
import { Progress, Tile } from 'components';
|
|
5
6
|
import { LOCALE_FEATURES } from 'i18n';
|
|
6
7
|
import { REMAINING_TILES_TILE_SIZE } from 'parameters';
|
|
7
8
|
import { selectCharacterPoints, selectLocale, useTypedSelector } from 'state';
|
|
8
9
|
import { RemainingTile } from 'types';
|
|
9
10
|
|
|
10
|
-
import Tile from '../Tile';
|
|
11
|
-
|
|
12
11
|
import styles from './Character.module.scss';
|
|
13
12
|
|
|
14
13
|
interface Props {
|
|
@@ -30,7 +29,6 @@ const Character: FunctionComponent<Props> = ({ tile }) => {
|
|
|
30
29
|
[styles.finished]: remainingCount <= 0,
|
|
31
30
|
[styles.overused]: remainingCount < 0,
|
|
32
31
|
})}
|
|
33
|
-
key={character}
|
|
34
32
|
>
|
|
35
33
|
<Tile
|
|
36
34
|
character={character}
|
|
@@ -42,6 +40,16 @@ const Character: FunctionComponent<Props> = ({ tile }) => {
|
|
|
42
40
|
raised
|
|
43
41
|
size={REMAINING_TILES_TILE_SIZE}
|
|
44
42
|
/>
|
|
43
|
+
|
|
44
|
+
<Progress
|
|
45
|
+
className={styles.remaining}
|
|
46
|
+
max={count}
|
|
47
|
+
style={{
|
|
48
|
+
width: REMAINING_TILES_TILE_SIZE,
|
|
49
|
+
}}
|
|
50
|
+
value={remainingCount}
|
|
51
|
+
/>
|
|
52
|
+
|
|
45
53
|
<div className={styles.count}>
|
|
46
54
|
{current.toLocaleString(locale)} / {total.toLocaleString(locale)}
|
|
47
55
|
</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Character';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Character } from './Character';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './RemainingTilesModal';
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Result } from '@scrabble-solver/types';
|
|
2
|
+
import { FunctionComponent, useMemo } from 'react';
|
|
3
|
+
import { useDispatch } from 'react-redux';
|
|
4
|
+
import { useMeasure } from 'react-use';
|
|
5
|
+
|
|
6
|
+
import { Modal, Results, Sizer, Well } from 'components';
|
|
7
|
+
import { useMediaQuery } from 'hooks';
|
|
8
|
+
import {
|
|
9
|
+
resultsSlice,
|
|
10
|
+
selectResultCandidate,
|
|
11
|
+
selectSortedFilteredResults,
|
|
12
|
+
useTranslate,
|
|
13
|
+
useTypedSelector,
|
|
14
|
+
} from 'state';
|
|
15
|
+
|
|
16
|
+
import styles from './ResultsModal.module.scss';
|
|
17
|
+
|
|
18
|
+
interface Props {
|
|
19
|
+
className?: string;
|
|
20
|
+
isOpen: boolean;
|
|
21
|
+
onClose: () => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const ResultsModal: FunctionComponent<Props> = ({ className, isOpen, onClose }) => {
|
|
25
|
+
const dispatch = useDispatch();
|
|
26
|
+
const translate = useTranslate();
|
|
27
|
+
const [sizerRef, { height, width }] = useMeasure<HTMLDivElement>();
|
|
28
|
+
const isLessThanM = useMediaQuery('<m');
|
|
29
|
+
const results = useTypedSelector(selectSortedFilteredResults);
|
|
30
|
+
const resultCandidate = useTypedSelector(selectResultCandidate);
|
|
31
|
+
const index = (results || []).findIndex((result) => result.id === resultCandidate?.id);
|
|
32
|
+
const highlightedIndex = index === -1 ? undefined : index;
|
|
33
|
+
|
|
34
|
+
const callbacks = useMemo(
|
|
35
|
+
() => ({
|
|
36
|
+
onClick: (result: Result) => {
|
|
37
|
+
dispatch(resultsSlice.actions.changeResultCandidate(result));
|
|
38
|
+
|
|
39
|
+
if (isLessThanM) {
|
|
40
|
+
onClose();
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
}),
|
|
44
|
+
[dispatch, isLessThanM, onClose],
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<Modal className={className} isOpen={isOpen} title={translate('results')} onClose={onClose}>
|
|
49
|
+
<Well className={styles.content}>
|
|
50
|
+
<Sizer ref={sizerRef} />
|
|
51
|
+
|
|
52
|
+
<Results callbacks={callbacks} height={height} highlightedIndex={highlightedIndex} width={width} />
|
|
53
|
+
</Well>
|
|
54
|
+
</Modal>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default ResultsModal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './ResultsModal';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Modal } from 'components';
|
|
4
|
+
import { useTranslate } from 'state';
|
|
5
|
+
|
|
6
|
+
import { AutoGroupTilesSetting, ConfigSetting, LocaleSetting } from './components';
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
className?: string;
|
|
10
|
+
isOpen: boolean;
|
|
11
|
+
onClose: () => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const SettingsModal: FunctionComponent<Props> = ({ className, isOpen, onClose }) => {
|
|
15
|
+
const translate = useTranslate();
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<Modal className={className} isOpen={isOpen} title={translate('settings')} onClose={onClose}>
|
|
19
|
+
<Modal.Section title={translate('settings.game')}>
|
|
20
|
+
<ConfigSetting disabled={!isOpen} />
|
|
21
|
+
</Modal.Section>
|
|
22
|
+
|
|
23
|
+
<Modal.Section title={translate('settings.language')}>
|
|
24
|
+
<LocaleSetting disabled={!isOpen} />
|
|
25
|
+
</Modal.Section>
|
|
26
|
+
|
|
27
|
+
<Modal.Section title={translate('settings.autoGroupTiles')}>
|
|
28
|
+
<AutoGroupTilesSetting disabled={!isOpen} />
|
|
29
|
+
</Modal.Section>
|
|
30
|
+
</Modal>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default SettingsModal;
|
|
File without changes
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { ChangeEvent, FunctionComponent } from 'react';
|
|
2
2
|
import { useDispatch } from 'react-redux';
|
|
3
3
|
|
|
4
|
+
import { Radio } from 'components';
|
|
4
5
|
import { selectAutoGroupTiles, settingsSlice, useTranslate, useTypedSelector } from 'state';
|
|
5
6
|
|
|
6
|
-
import Radio from '../../../Radio';
|
|
7
|
-
|
|
8
7
|
import styles from './AutoGroupTilesSetting.module.scss';
|
|
9
8
|
import { NULL_VALUE } from './constants';
|
|
10
9
|
import { parseValue } from './lib';
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { ChangeEvent, FunctionComponent } from 'react';
|
|
2
2
|
import { useDispatch } from 'react-redux';
|
|
3
3
|
|
|
4
|
+
import { Radio } from 'components';
|
|
4
5
|
import { selectConfigId, settingsSlice, useTypedSelector } from 'state';
|
|
5
6
|
|
|
6
|
-
import Radio from '../../../Radio';
|
|
7
|
-
|
|
8
7
|
import styles from './ConfigSetting.module.scss';
|
|
9
8
|
import options from './options';
|
|
10
9
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -3,10 +3,9 @@ import classNames from 'classnames';
|
|
|
3
3
|
import { ChangeEvent, FunctionComponent } from 'react';
|
|
4
4
|
import { useDispatch } from 'react-redux';
|
|
5
5
|
|
|
6
|
+
import { Radio } from 'components';
|
|
6
7
|
import { selectLocale, settingsSlice, useTypedSelector } from 'state';
|
|
7
8
|
|
|
8
|
-
import Radio from '../../../Radio';
|
|
9
|
-
|
|
10
9
|
import styles from './LocaleSetting.module.scss';
|
|
11
10
|
import options from './options';
|
|
12
11
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SettingsModal';
|
package/packages/scrabble-solver/src/{components/Words/Words.tsx → modals/WordsModal/WordsModal.tsx}
RENAMED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import classNames from 'classnames';
|
|
2
2
|
import { FunctionComponent } from 'react';
|
|
3
3
|
|
|
4
|
+
import { Badge, Modal } from 'components';
|
|
4
5
|
import { Check, Cross } from 'icons';
|
|
5
6
|
import { selectLocale, selectVerify, useTranslate, useTypedSelector } from 'state';
|
|
6
7
|
|
|
7
|
-
import
|
|
8
|
-
import Sidebar from '../Sidebar';
|
|
9
|
-
|
|
10
|
-
import styles from './Words.module.scss';
|
|
8
|
+
import styles from './WordsModal.module.scss';
|
|
11
9
|
|
|
12
10
|
interface Props {
|
|
13
11
|
className?: string;
|
|
@@ -15,14 +13,14 @@ interface Props {
|
|
|
15
13
|
onClose: () => void;
|
|
16
14
|
}
|
|
17
15
|
|
|
18
|
-
const
|
|
16
|
+
const WordsModal: FunctionComponent<Props> = ({ className, isOpen, onClose }) => {
|
|
19
17
|
const translate = useTranslate();
|
|
20
18
|
const locale = useTypedSelector(selectLocale);
|
|
21
19
|
const { invalidWords, validWords } = useTypedSelector(selectVerify);
|
|
22
20
|
|
|
23
21
|
return (
|
|
24
|
-
<
|
|
25
|
-
<
|
|
22
|
+
<Modal className={className} isOpen={isOpen} title={translate('words')} onClose={onClose}>
|
|
23
|
+
<Modal.Section
|
|
26
24
|
title={
|
|
27
25
|
<span className={styles.title}>
|
|
28
26
|
<span>{translate('words.invalid')}</span>
|
|
@@ -35,9 +33,9 @@ const Words: FunctionComponent<Props> = ({ className, isOpen, onClose }) => {
|
|
|
35
33
|
<Cross className={classNames(styles.icon, styles.invalid)} /> {word}
|
|
36
34
|
</div>
|
|
37
35
|
))}
|
|
38
|
-
</
|
|
36
|
+
</Modal.Section>
|
|
39
37
|
|
|
40
|
-
<
|
|
38
|
+
<Modal.Section
|
|
41
39
|
title={
|
|
42
40
|
<span className={styles.title}>
|
|
43
41
|
<span>{translate('words.valid')}</span>
|
|
@@ -50,9 +48,9 @@ const Words: FunctionComponent<Props> = ({ className, isOpen, onClose }) => {
|
|
|
50
48
|
<Check className={classNames(styles.icon, styles.valid)} /> {word}
|
|
51
49
|
</div>
|
|
52
50
|
))}
|
|
53
|
-
</
|
|
54
|
-
</
|
|
51
|
+
</Modal.Section>
|
|
52
|
+
</Modal>
|
|
55
53
|
);
|
|
56
54
|
};
|
|
57
55
|
|
|
58
|
-
export default
|
|
56
|
+
export default WordsModal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './WordsModal';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as KeyMapModal } from './KeyMapModal';
|
|
2
|
+
export { default as MenuModal } from './MenuModal';
|
|
3
|
+
export { default as RemainingTilesModal } from './RemainingTilesModal';
|
|
4
|
+
export { default as ResultsModal } from './ResultsModal';
|
|
5
|
+
export { default as SettingsModal } from './SettingsModal';
|
|
6
|
+
export { default as WordsModal } from './WordsModal';
|
|
@@ -12,7 +12,8 @@ interface RequestData {
|
|
|
12
12
|
words: string[];
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
const
|
|
15
|
+
const MAXIMUM_COLLISIONS_COUNT = scrabble['en-US'].maximumCharactersCount;
|
|
16
|
+
const MAXIMUM_WORDS_COUNT = MAXIMUM_COLLISIONS_COUNT + 1;
|
|
16
17
|
|
|
17
18
|
const dictionary = async (request: NextApiRequest, response: NextApiResponse): Promise<void> => {
|
|
18
19
|
const meta = getServerLoggingData(request);
|
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
6
|
height: 100%;
|
|
7
|
-
min-width: 900px;
|
|
8
|
-
min-height: 700px;
|
|
9
7
|
opacity: 0;
|
|
10
|
-
overflow:
|
|
8
|
+
overflow: auto;
|
|
11
9
|
transition: var(--transition);
|
|
12
10
|
transition-duration: var(--transition--duration--long);
|
|
13
11
|
|
|
@@ -20,6 +18,10 @@
|
|
|
20
18
|
position: relative;
|
|
21
19
|
z-index: 1;
|
|
22
20
|
flex: 0 0 auto;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.navContent {
|
|
24
|
+
width: 100%;
|
|
23
25
|
display: flex;
|
|
24
26
|
align-items: flex-start;
|
|
25
27
|
padding: var(--spacing--l);
|
|
@@ -38,7 +40,7 @@
|
|
|
38
40
|
height: 60px;
|
|
39
41
|
user-select: none;
|
|
40
42
|
|
|
41
|
-
@include
|
|
43
|
+
@include media('<l') {
|
|
42
44
|
height: 48px;
|
|
43
45
|
}
|
|
44
46
|
}
|