@scrabble-solver/scrabble-solver 2.17.0 → 2.18.0
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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +22 -20
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack.old +0 -0
- package/.next/diagnostics/framework.json +1 -1
- package/.next/dynamic-css-manifest.json +8 -1
- package/.next/next-minimal-server.js.nft.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +4 -4
- package/.next/react-loadable-manifest.json +176 -1
- package/.next/routes-manifest.json +1 -1
- package/.next/server/chunks/309.js +1 -0
- package/.next/server/chunks/{785.js → 316.js} +1 -1
- package/.next/server/chunks/344.js +1 -0
- package/.next/server/chunks/371.js +1 -0
- package/.next/server/chunks/465.js +1 -0
- package/.next/server/chunks/546.js +1 -0
- package/.next/server/chunks/623.js +1 -0
- package/.next/server/chunks/624.js +1 -0
- package/.next/server/chunks/641.js +1 -0
- package/.next/server/chunks/671.js +1 -1
- package/.next/server/chunks/692.js +1 -0
- package/.next/server/chunks/705.js +1 -0
- package/.next/server/chunks/712.js +1 -1
- package/.next/server/chunks/846.js +1 -0
- package/.next/server/chunks/853.js +15 -0
- package/.next/server/chunks/886.js +1 -0
- package/.next/server/chunks/916.js +1 -0
- package/.next/server/chunks/953.js +1 -0
- package/.next/server/chunks/961.js +1 -0
- package/.next/server/chunks/968.js +1 -0
- package/.next/server/dynamic-css-manifest.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +28 -1
- package/.next/server/pages/500.html +28 -1
- package/.next/server/pages/_app.js +1 -1
- package/.next/server/pages/_app.js.nft.json +1 -1
- package/.next/server/pages/_document.js +28 -1
- package/.next/server/pages/_document.js.nft.json +1 -1
- package/.next/server/pages/_error.js +28 -1
- package/.next/server/pages/_error.js.nft.json +1 -1
- package/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
- package/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
- package/.next/server/pages/api/solve.js +1 -1
- package/.next/server/pages/api/solve.js.nft.json +1 -1
- package/.next/server/pages/api/verify.js.nft.json +1 -1
- package/.next/server/pages/api/visit.js.nft.json +1 -1
- package/.next/server/pages/index.html +28 -1
- package/.next/server/pages/index.js +30 -1
- package/.next/server/pages/index.js.nft.json +1 -1
- package/.next/server/pages/index.json +1 -1
- package/.next/server/pages/not-found.html +28 -1
- package/.next/server/pages/not-found.js.nft.json +1 -1
- package/.next/server/pages-manifest.json +1 -1
- package/.next/server/webpack-api-runtime.js +1 -1
- package/.next/server/webpack-runtime.js +1 -1
- package/.next/static/FL82obwzFHRzvV6z76I-U/_buildManifest.js +1 -0
- package/.next/static/chunks/101-829ab8a8d310e7a0.js +3 -0
- package/.next/static/chunks/106.e414e88694add27f.js +1 -0
- package/.next/static/chunks/127.125d896a19061d71.js +1 -0
- package/.next/static/chunks/18.8b91e137d239e15c.js +1 -0
- package/.next/static/chunks/277.6785dfaf22fdb0b7.js +1 -0
- package/.next/static/chunks/307.67f52f13e3d60d4e.js +1 -0
- package/.next/static/chunks/341.79535ba85bf1986f.js +1 -0
- package/.next/static/chunks/363.01eed3233f92b6a4.js +1 -0
- package/.next/static/chunks/422.1559ae6756912ca5.js +1 -0
- package/.next/static/chunks/541.dcd9e8b804f88da5.js +1 -0
- package/.next/static/chunks/631.98d42abad0a60af6.js +1 -0
- package/.next/static/chunks/663.d2c9ca36b26695b8.js +1 -0
- package/.next/static/chunks/711.ba7b8f900dfd40d0.js +1 -0
- package/.next/static/chunks/744.b06c9a3de4a1d877.js +1 -0
- package/.next/static/chunks/820.97b82f751ca49579.js +1 -0
- package/.next/static/chunks/865.a9b563a45848a83c.js +1 -0
- package/.next/static/chunks/912.ff8037ba9d4db5c8.js +1 -0
- package/.next/static/chunks/939.19b33a3d3c351d73.js +1 -0
- package/.next/static/chunks/990.61296e5870b91f11.js +1 -0
- package/.next/static/chunks/framework-626cbd48ac5aca57.js +1 -0
- package/.next/static/chunks/main-b92e08f3fc96dd8d.js +5 -0
- package/.next/static/chunks/pages/_app-ba5d628e81a15461.js +1 -0
- package/.next/static/chunks/pages/{_error-afeda7c5231b6c3c.js → _error-f0290a98eb3ed0ec.js} +1 -1
- package/.next/static/chunks/pages/index-5f9fa6ac3cd3d97b.js +1 -0
- package/.next/static/chunks/pages/not-found-23d61fd3ed791cad.js +1 -0
- package/.next/static/chunks/webpack-e34c3ae12275e978.js +1 -0
- package/.next/static/css/2d03f0da2c678dfc.css +1 -0
- package/.next/static/css/7b6724d2df70f48f.css +1 -0
- package/.next/static/css/abc2425d3ba607bc.css +1 -0
- package/.next/static/css/b736be3bd02b5d99.css +1 -0
- package/.next/static/css/b74cd7de82dabcdd.css +1 -0
- package/.next/static/css/c403ce739a9c0d83.css +1 -0
- package/.next/static/css/ca311e6c030663d4.css +1 -0
- package/.next/static/css/dee878eb64099d92.css +1 -0
- package/.next/static/css/fbfdce70731d0d2b.css +1 -0
- package/.next/trace +21 -21
- package/.next/trace-build +1 -1
- package/empty-module.js +2 -0
- package/next.config.js +13 -2
- package/package.json +34 -15
- package/public/llms.txt +11 -0
- package/public/robots.txt +4 -0
- package/scripts/generate-scss-types.ts +112 -0
- package/src/@types/scss.d.ts +6 -9
- package/src/@types/svg.d.ts +1 -1
- package/src/components/Alert/Alert.module.scss.d.ts +13 -0
- package/src/components/Alert/Alert.tsx +4 -1
- package/src/components/Badge/Badge.module.scss.d.ts +6 -0
- package/src/components/Board/Board.module.scss +10 -0
- package/src/components/Board/Board.module.scss.d.ts +17 -0
- package/src/components/Board/Board.tsx +14 -26
- package/src/components/Board/BoardPure.tsx +54 -49
- package/src/components/Board/components/Actions/Actions.module.scss +18 -18
- package/src/components/Board/components/Actions/Actions.module.scss.d.ts +7 -0
- package/src/components/Board/components/Actions/Actions.tsx +6 -3
- package/src/components/Board/components/Actions/lib.ts +3 -1
- package/src/components/Board/components/Cell/Cell.module.scss.d.ts +13 -0
- package/src/components/Board/components/Cell/Cell.tsx +28 -33
- package/src/components/Board/components/InputPrompt/InputPrompt.module.scss.d.ts +10 -0
- package/src/components/Board/components/InputPrompt/InputPrompt.tsx +1 -1
- package/src/components/Board/components/ToggleDirectionButton/ToggleDirectionButton.module.scss.d.ts +8 -0
- package/src/components/Board/components/ToggleDirectionButton/ToggleDirectionButton.tsx +2 -2
- package/src/components/Board/getBoardBackground.ts +175 -0
- package/src/components/Board/hooks/index.ts +0 -1
- package/src/components/Board/hooks/useBoardStyle.ts +10 -20
- package/src/components/Board/hooks/useFloatingActions.ts +3 -6
- package/src/components/Board/hooks/useGrid.ts +6 -3
- package/src/components/Board/selectors.ts +1 -1
- package/src/components/Button/Button.module.scss.d.ts +12 -0
- package/src/components/Dictionary/Dictionary.module.scss +1 -0
- package/src/components/Dictionary/Dictionary.module.scss.d.ts +14 -0
- package/src/components/Dictionary/Dictionary.tsx +1 -3
- package/src/components/DictionaryInput/DictionaryInput.module.scss.d.ts +7 -0
- package/src/components/DictionaryInput/DictionaryInput.tsx +1 -1
- package/src/components/EmptyState/EmptyState.module.scss.d.ts +7 -0
- package/src/components/EmptyState/EmptyState.tsx +1 -1
- package/src/components/IconButton/IconButton.module.scss.d.ts +8 -0
- package/src/components/Key/Key.module.scss.d.ts +6 -0
- package/src/components/Keys/Arrows/Arrows.module.scss.d.ts +11 -0
- package/src/components/Keys/Arrows/Arrows.tsx +4 -1
- package/src/components/Keys/index.tsx +1 -1
- package/src/components/Loading/Loading.module.scss.d.ts +9 -0
- package/src/components/Loading/Loading.tsx +1 -1
- package/src/components/Logo/Logo.tsx +4 -9
- package/src/components/Logo/LogoBlueprint.tsx +1 -0
- package/src/components/Modal/Modal.module.scss.d.ts +15 -0
- package/src/components/Modal/Modal.tsx +16 -3
- package/src/components/Modal/components/Section/Section.module.scss.d.ts +7 -0
- package/src/components/NavButtons/NavButtons.module.scss +20 -0
- package/src/components/NavButtons/NavButtons.module.scss.d.ts +13 -0
- package/src/components/NavButtons/NavButtons.tsx +29 -45
- package/src/components/NotFound/NotFound.module.scss.d.ts +9 -0
- package/src/components/NotFound/NotFound.tsx +1 -1
- package/src/components/PlainTiles/PlainTiles.module.scss.d.ts +11 -0
- package/src/components/PlainTiles/PlainTiles.tsx +0 -1
- package/src/components/PlainTiles/Tile.tsx +3 -4
- package/src/components/PlainTiles/lib.ts +4 -19
- package/src/components/PlainTiles/types.ts +0 -1
- package/src/components/Progress/Progress.module.scss +7 -0
- package/src/components/Progress/Progress.module.scss.d.ts +6 -0
- package/src/components/Progress/Progress.tsx +2 -11
- package/src/components/Rack/Rack.module.scss +3 -0
- package/src/components/Rack/Rack.module.scss.d.ts +10 -0
- package/src/components/Rack/Rack.tsx +8 -11
- package/src/components/Rack/components/InputPrompt/InputPrompt.module.scss +2 -0
- package/src/components/Rack/components/InputPrompt/InputPrompt.module.scss.d.ts +7 -0
- package/src/components/Rack/components/InputPrompt/InputPrompt.tsx +1 -13
- package/src/components/Rack/components/InputPrompt/lib.ts +1 -1
- package/src/components/Rack/components/RackTile/RackTile.module.scss.d.ts +6 -0
- package/src/components/Rack/components/RackTile/RackTile.tsx +5 -4
- package/src/components/Rack/selectors.ts +1 -1
- package/src/components/Radio/Radio.module.scss.d.ts +12 -0
- package/src/components/Results/Cell.tsx +3 -12
- package/src/components/Results/Header.tsx +9 -18
- package/src/components/Results/HeaderButton.tsx +4 -5
- package/src/components/Results/Result.tsx +4 -12
- package/src/components/Results/Results.module.scss +4 -6
- package/src/components/Results/Results.module.scss.d.ts +27 -0
- package/src/components/Results/Results.tsx +4 -3
- package/src/components/Results/SolveButton.tsx +1 -1
- package/src/components/ResultsInput/ResultsInput.module.scss.d.ts +7 -0
- package/src/components/ResultsInput/ResultsInput.tsx +1 -1
- package/src/components/Solver/Solver.module.scss +6 -5
- package/src/components/Solver/Solver.module.scss.d.ts +20 -0
- package/src/components/Solver/Solver.tsx +19 -21
- package/src/components/Solver/components/InsertButton/InsertButton.module.scss.d.ts +7 -0
- package/src/components/Solver/components/InsertButton/InsertButton.tsx +1 -1
- package/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.module.scss.d.ts +18 -0
- package/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.tsx +3 -1
- package/src/components/Spinner/Spinner.module.scss.d.ts +10 -0
- package/src/components/Tile/Tile.module.scss +3 -0
- package/src/components/Tile/Tile.module.scss.d.ts +19 -0
- package/src/components/Tile/Tile.tsx +5 -14
- package/src/components/Tile/TilePure.tsx +2 -12
- package/src/components/Tooltip/Tooltip.module.scss.d.ts +7 -0
- package/src/components/Tooltip/Tooltip.tsx +14 -3
- package/src/components/Tooltip/useTooltip.ts +1 -0
- package/src/hooks/useColumns.ts +4 -7
- package/src/hooks/useDeferredRender.ts +20 -0
- package/src/hooks/useDirection.ts +4 -3
- package/src/hooks/useLanguage.ts +2 -2
- package/src/hooks/useLocalStorage.ts +32 -8
- package/src/hooks/useMedia.ts +26 -26
- package/src/i18n/constants.ts +2 -15
- package/src/i18n/i18n.ts +18 -17
- package/src/i18n/languages/english.json +0 -1
- package/src/i18n/languages/french.json +0 -1
- package/src/i18n/languages/german.json +0 -1
- package/src/i18n/languages/persian.json +0 -1
- package/src/i18n/languages/polish.json +0 -1
- package/src/i18n/languages/romanian.json +0 -1
- package/src/i18n/languages/spanish.json +0 -1
- package/src/i18n/languages/turkish.json +0 -1
- package/src/i18n/localeIcons.ts +24 -0
- package/src/lib/localeTransliterate.test.ts +5 -0
- package/src/lib/localeTransliterate.ts +26 -6
- package/src/lib/waitForIdleOrFirstIntent.ts +33 -0
- package/src/modals/DictionaryModal/DictionaryModal.module.scss.d.ts +8 -0
- package/src/modals/DictionaryModal/DictionaryModal.tsx +3 -1
- package/src/modals/KeyMapModal/KeyMapModal.tsx +3 -1
- package/src/modals/KeyMapModal/components/Mapping/Mapping.module.scss.d.ts +11 -0
- package/src/modals/MenuModal/MenuModal.module.scss +5 -0
- package/src/modals/MenuModal/MenuModal.module.scss.d.ts +10 -0
- package/src/modals/MenuModal/MenuModal.tsx +16 -5
- package/src/modals/RemainingTilesModal/RemainingTilesModal.module.scss +4 -1
- package/src/modals/RemainingTilesModal/RemainingTilesModal.module.scss.d.ts +9 -0
- package/src/modals/RemainingTilesModal/RemainingTilesModal.tsx +4 -6
- package/src/modals/RemainingTilesModal/components/Character/Character.module.scss +1 -0
- package/src/modals/RemainingTilesModal/components/Character/Character.module.scss.d.ts +12 -0
- package/src/modals/RemainingTilesModal/components/Character/Character.tsx +5 -12
- package/src/modals/ResultsModal/ResultsModal.module.scss.d.ts +8 -0
- package/src/modals/ResultsModal/ResultsModal.tsx +8 -4
- package/src/modals/SettingsModal/SettingsModal.tsx +2 -2
- package/src/modals/SettingsModal/components/AutoGroupTilesSetting/AutoGroupTilesSetting.module.scss.d.ts +7 -0
- package/src/modals/SettingsModal/components/AutoGroupTilesSetting/AutoGroupTilesSetting.tsx +1 -1
- package/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.module.scss.d.ts +7 -0
- package/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.tsx +1 -1
- package/src/modals/SettingsModal/components/HighlightUnreachableCellsSetting/HighlightUnreachableCellsSetting.module.scss.d.ts +7 -0
- package/src/modals/SettingsModal/components/HighlightUnreachableCellsSetting/HighlightUnreachableCellsSetting.tsx +1 -1
- package/src/modals/SettingsModal/components/InputModeSetting/InputModeSetting.module.scss.d.ts +7 -0
- package/src/modals/SettingsModal/components/InputModeSetting/InputModeSetting.tsx +1 -1
- package/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.module.scss.d.ts +8 -0
- package/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.tsx +24 -21
- package/src/modals/SettingsModal/components/RemoveCellFiltersSetting/RemoveCellFiltersSetting.module.scss.d.ts +7 -0
- package/src/modals/SettingsModal/components/RemoveCellFiltersSetting/RemoveCellFiltersSetting.tsx +1 -1
- package/src/modals/SettingsModal/components/ShowCoordinatesSetting/ShowCoordinatesSetting.module.scss.d.ts +7 -0
- package/src/modals/SettingsModal/components/ShowCoordinatesSetting/ShowCoordinatesSetting.tsx +1 -5
- package/src/modals/WordsModal/WordsModal.module.scss.d.ts +11 -0
- package/src/modals/WordsModal/WordsModal.tsx +4 -2
- package/src/modals/preload.ts +24 -0
- package/src/pages/_app.tsx +5 -8
- package/src/pages/_document.tsx +91 -5
- package/src/pages/api/solve.ts +1 -1
- package/src/pages/index.module.scss +1 -0
- package/src/pages/index.module.scss.d.ts +11 -0
- package/src/pages/index.tsx +98 -38
- package/src/pages/not-found.tsx +1 -1
- package/src/parameters/index.ts +24 -93
- package/src/serviceWorkerManager.ts +5 -2
- package/src/state/actions.ts +1 -1
- package/src/state/app/index.ts +4 -0
- package/src/state/app/initialState.ts +6 -0
- package/src/state/app/selectors.ts +5 -0
- package/src/state/app/slice.ts +20 -0
- package/src/state/app/types.ts +4 -0
- package/src/state/board/initialState.ts +1 -2
- package/src/state/i18n/index.ts +4 -0
- package/src/state/i18n/initialState.ts +5 -0
- package/src/state/i18n/selectors.ts +3 -0
- package/src/state/i18n/slice.ts +16 -0
- package/src/state/i18n/types.ts +7 -0
- package/src/state/index.ts +2 -0
- package/src/state/lib.ts +1 -1
- package/src/state/localStorage.ts +86 -29
- package/src/state/rack/initialState.ts +1 -2
- package/src/state/rack/slice.ts +4 -1
- package/src/state/results/lib.ts +5 -5
- package/src/state/results/selectors.ts +1 -1
- package/src/state/sagas.ts +125 -9
- package/src/state/selectors.ts +1 -1
- package/src/state/settings/initialState.ts +7 -10
- package/src/state/settings/selectors.ts +7 -2
- package/src/state/settings/slice.ts +5 -2
- package/src/state/store.ts +4 -0
- package/src/state/types.ts +4 -0
- package/src/styles/_tokens.scss +1 -0
- package/src/styles/global.scss +9 -0
- package/src/styles/variables.module.scss +0 -21
- package/src/styles/variables.module.scss.d.ts +27 -0
- package/src/styles/variables.scss +46 -2
- package/src/types/index.ts +1 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/.next/server/chunks/129.js +0 -1
- package/.next/server/chunks/318.js +0 -3
- package/.next/server/chunks/791.js +0 -15
- package/.next/static/OLE8_ZInlGH7ENU0NIOpf/_buildManifest.js +0 -1
- package/.next/static/chunks/830.661816bf0de8c2f1.js +0 -1
- package/.next/static/chunks/framework-3cf15b8041c59dd3.js +0 -1
- package/.next/static/chunks/main-5b999f3f24ebfa84.js +0 -5
- package/.next/static/chunks/pages/_app-7024e7a27ffbb2fa.js +0 -7
- package/.next/static/chunks/pages/index-8b398b0a5d870773.js +0 -1
- package/.next/static/chunks/pages/not-found-9e076427bad69d90.js +0 -1
- package/.next/static/chunks/webpack-3943d624bbb47a64.js +0 -1
- package/.next/static/css/a78e04fe95452380.css +0 -1
- package/.next/static/css/aedeaada218d7280.css +0 -2
- package/src/app-layout/AppLayoutContext.tsx +0 -25
- package/src/app-layout/index.ts +0 -1
- package/src/app-layout/useAppLayoutValue.ts +0 -112
- package/src/components/Board/hooks/useBackgroundImage.tsx +0 -279
- package/src/components/index.ts +0 -26
- package/src/hooks/index.ts +0 -12
- package/src/hooks/useOnWindowResize.ts +0 -11
- package/src/hooks/useViewportSize.ts +0 -17
- package/src/i18n/index.ts +0 -2
- package/src/icons/Flag.svg +0 -4
- package/src/icons/Star.svg +0 -4
- package/src/icons/index.ts +0 -49
- package/src/lib/getTileSizes.ts +0 -13
- package/src/lib/index.ts +0 -24
- package/src/modals/index.ts +0 -7
- /package/.next/static/{OLE8_ZInlGH7ENU0NIOpf → FL82obwzFHRzvV6z76I-U}/_ssgManifest.js +0 -0
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { autoUpdate, offset, shift, useFloating } from '@floating-ui/react';
|
|
2
2
|
|
|
3
|
-
import { useAppLayout } from '@/app-layout';
|
|
4
3
|
import { BOARD_CELL_ACTIONS_OFFSET } from '@/parameters';
|
|
5
4
|
|
|
6
5
|
export const useFloatingActions = () => {
|
|
7
|
-
const { actionsWidth } = useAppLayout();
|
|
8
|
-
|
|
9
6
|
return useFloating({
|
|
10
7
|
middleware: [
|
|
11
|
-
offset({
|
|
8
|
+
offset(({ rects }) => ({
|
|
12
9
|
mainAxis: -BOARD_CELL_ACTIONS_OFFSET,
|
|
13
|
-
alignmentAxis: BOARD_CELL_ACTIONS_OFFSET -
|
|
14
|
-
}),
|
|
10
|
+
alignmentAxis: BOARD_CELL_ACTIONS_OFFSET - rects.floating.width,
|
|
11
|
+
})),
|
|
15
12
|
shift(),
|
|
16
13
|
],
|
|
17
14
|
placement: 'top-end',
|
|
@@ -15,9 +15,12 @@ import {
|
|
|
15
15
|
} from 'react';
|
|
16
16
|
import { useDispatch } from 'react-redux';
|
|
17
17
|
|
|
18
|
-
import { useLatest } from '@/hooks';
|
|
19
|
-
import { LOCALE_FEATURES } from '@/i18n';
|
|
20
|
-
import { createKeyboardNavigation
|
|
18
|
+
import { useLatest } from '@/hooks/useLatest';
|
|
19
|
+
import { LOCALE_FEATURES } from '@/i18n/constants';
|
|
20
|
+
import { createKeyboardNavigation } from '@/lib/createKeyboardNavigation';
|
|
21
|
+
import { extractCharacters } from '@/lib/extractCharacters';
|
|
22
|
+
import { extractInputValue } from '@/lib/extractInputValue';
|
|
23
|
+
import { isCtrl } from '@/lib/isCtrl';
|
|
21
24
|
import { boardSlice, cellFiltersSlice, selectConfig, selectLocale, useTypedSelector } from '@/state';
|
|
22
25
|
import { type Direction, type Point } from '@/types';
|
|
23
26
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Generated by scripts/generate-scss-types.ts - do not edit.
|
|
2
|
+
declare const styles: {
|
|
3
|
+
readonly button: string;
|
|
4
|
+
readonly content: string;
|
|
5
|
+
readonly default: string;
|
|
6
|
+
readonly icon: string;
|
|
7
|
+
readonly label: string;
|
|
8
|
+
readonly primary: string;
|
|
9
|
+
readonly wide: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default styles;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Generated by scripts/generate-scss-types.ts - do not edit.
|
|
2
|
+
declare const styles: {
|
|
3
|
+
readonly content: string;
|
|
4
|
+
readonly definition: string;
|
|
5
|
+
readonly definitions: string;
|
|
6
|
+
readonly dictionary: string;
|
|
7
|
+
readonly isAllowed: string;
|
|
8
|
+
readonly isNotAllowed: string;
|
|
9
|
+
readonly result: string;
|
|
10
|
+
readonly resultContent: string;
|
|
11
|
+
readonly word: string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default styles;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import classNames from 'classnames';
|
|
2
2
|
import { type FunctionComponent } from 'react';
|
|
3
3
|
|
|
4
|
-
import { useAppLayout } from '@/app-layout';
|
|
5
4
|
import {
|
|
6
5
|
selectDictionaryError,
|
|
7
6
|
selectDictionaryIsLoading,
|
|
@@ -21,13 +20,12 @@ interface Props {
|
|
|
21
20
|
|
|
22
21
|
export const Dictionary: FunctionComponent<Props> = ({ className }) => {
|
|
23
22
|
const translate = useTranslate();
|
|
24
|
-
const { dictionaryResultsHeight } = useAppLayout();
|
|
25
23
|
const results = useTypedSelector(selectDictionaryResults);
|
|
26
24
|
const isLoading = useTypedSelector(selectDictionaryIsLoading);
|
|
27
25
|
const error = useTypedSelector(selectDictionaryError);
|
|
28
26
|
|
|
29
27
|
return (
|
|
30
|
-
<div className={classNames(styles.dictionary, className)}
|
|
28
|
+
<div className={classNames(styles.dictionary, className)}>
|
|
31
29
|
<div className={styles.content}>
|
|
32
30
|
{typeof error !== 'undefined' && !isLoading && <EmptyState variant="error">{error.message}</EmptyState>}
|
|
33
31
|
|
|
@@ -2,7 +2,7 @@ import classNames from 'classnames';
|
|
|
2
2
|
import { type ChangeEvent, type FunctionComponent, type SubmitEvent } from 'react';
|
|
3
3
|
import { useDispatch } from 'react-redux';
|
|
4
4
|
|
|
5
|
-
import { LOCALE_FEATURES } from '@/i18n';
|
|
5
|
+
import { LOCALE_FEATURES } from '@/i18n/constants';
|
|
6
6
|
import { dictionarySlice, selectDictionary, selectLocale, useTranslate, useTypedSelector } from '@/state';
|
|
7
7
|
|
|
8
8
|
import styles from './DictionaryInput.module.scss';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import classNames from 'classnames';
|
|
2
2
|
import { type FunctionComponent, type ReactNode, useMemo } from 'react';
|
|
3
3
|
|
|
4
|
-
import { LOCALE_FEATURES } from '@/i18n';
|
|
4
|
+
import { LOCALE_FEATURES } from '@/i18n/constants';
|
|
5
5
|
import { COLOR_BLUE, COLOR_GREEN, COLOR_RED, COLOR_YELLOW } from '@/parameters';
|
|
6
6
|
import { selectLocale, useTranslate, useTypedSelector } from '@/state';
|
|
7
7
|
import { type Translations } from '@/types';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Generated by scripts/generate-scss-types.ts - do not edit.
|
|
2
|
+
declare const styles: {
|
|
3
|
+
readonly arrow: string;
|
|
4
|
+
readonly arrows: string;
|
|
5
|
+
readonly down: string;
|
|
6
|
+
readonly left: string;
|
|
7
|
+
readonly right: string;
|
|
8
|
+
readonly up: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default styles;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import classNames from 'classnames';
|
|
2
2
|
import { type FunctionComponent } from 'react';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import ArrowDown from '@/icons/ArrowDown.svg';
|
|
5
|
+
import ArrowLeft from '@/icons/ArrowLeft.svg';
|
|
6
|
+
import ArrowRight from '@/icons/ArrowRight.svg';
|
|
7
|
+
import ArrowUp from '@/icons/ArrowUp.svg';
|
|
5
8
|
|
|
6
9
|
import { Key } from '../../Key';
|
|
7
10
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import classNames from 'classnames';
|
|
2
2
|
import { type FunctionComponent, useMemo } from 'react';
|
|
3
3
|
|
|
4
|
-
import { LOCALE_FEATURES } from '@/i18n';
|
|
4
|
+
import { LOCALE_FEATURES } from '@/i18n/constants';
|
|
5
5
|
import { selectLocale, useTranslate, useTypedSelector } from '@/state';
|
|
6
6
|
|
|
7
7
|
import { PlainTiles } from '../PlainTiles';
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import Image from 'next/image';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import { LOGO_SRC } from '@/parameters';
|
|
4
|
+
import { LOGO_HEIGHT, LOGO_SRC, LOGO_WIDTH } from '@/parameters';
|
|
6
5
|
|
|
7
6
|
interface Props {
|
|
8
7
|
className?: string;
|
|
9
8
|
}
|
|
10
9
|
|
|
11
|
-
export const Logo = forwardRef<HTMLImageElement, Props>((props, ref) =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<Image {...props} alt="Scrabble Solver 2" height={logoHeight} priority ref={ref} src={LOGO_SRC} width={logoWidth} />
|
|
16
|
-
);
|
|
17
|
-
});
|
|
10
|
+
export const Logo = forwardRef<HTMLImageElement, Props>((props, ref) => (
|
|
11
|
+
<Image {...props} alt="Scrabble Solver 2" height={LOGO_HEIGHT} priority ref={ref} src={LOGO_SRC} width={LOGO_WIDTH} />
|
|
12
|
+
));
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* - using font-family: Open Sans
|
|
5
5
|
* - transformed into paths (manually with Inkscape)
|
|
6
6
|
* - arranged (centered vertically against respective rows)
|
|
7
|
+
* - tile fills substituted with concrete colors
|
|
7
8
|
*/
|
|
8
9
|
import { type CSSProperties, type FunctionComponent } from 'react';
|
|
9
10
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Generated by scripts/generate-scss-types.ts - do not edit.
|
|
2
|
+
declare const styles: {
|
|
3
|
+
readonly afterOpen: string;
|
|
4
|
+
readonly beforeClose: string;
|
|
5
|
+
readonly closeButton: string;
|
|
6
|
+
readonly container: string;
|
|
7
|
+
readonly content: string;
|
|
8
|
+
readonly footer: string;
|
|
9
|
+
readonly header: string;
|
|
10
|
+
readonly modal: string;
|
|
11
|
+
readonly overlay: string;
|
|
12
|
+
readonly title: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default styles;
|
|
@@ -2,7 +2,7 @@ import classNames from 'classnames';
|
|
|
2
2
|
import { type FunctionComponent, type ReactNode, useCallback, useEffect, useState } from 'react';
|
|
3
3
|
import ReactModal from 'react-modal';
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import CrossSquareFill from '@/icons/CrossSquareFill.svg';
|
|
6
6
|
import { TRANSITION_DURATION_LONG } from '@/parameters';
|
|
7
7
|
import { useTranslate } from '@/state';
|
|
8
8
|
|
|
@@ -11,16 +11,29 @@ import { IconButton } from '../IconButton';
|
|
|
11
11
|
import { Section } from './components';
|
|
12
12
|
import styles from './Modal.module.scss';
|
|
13
13
|
|
|
14
|
+
if (typeof document !== 'undefined') {
|
|
15
|
+
ReactModal.setAppElement('#__next');
|
|
16
|
+
}
|
|
17
|
+
|
|
14
18
|
export interface Props {
|
|
15
19
|
children: ReactNode;
|
|
16
20
|
className?: string;
|
|
17
21
|
footer?: ReactNode;
|
|
18
22
|
isOpen: boolean;
|
|
23
|
+
modalClassName?: string;
|
|
19
24
|
title: string;
|
|
20
25
|
onClose: () => void;
|
|
21
26
|
}
|
|
22
27
|
|
|
23
|
-
const ModalBase: FunctionComponent<Props> = ({
|
|
28
|
+
const ModalBase: FunctionComponent<Props> = ({
|
|
29
|
+
children,
|
|
30
|
+
className,
|
|
31
|
+
footer,
|
|
32
|
+
isOpen,
|
|
33
|
+
modalClassName,
|
|
34
|
+
title,
|
|
35
|
+
onClose,
|
|
36
|
+
}) => {
|
|
24
37
|
const translate = useTranslate();
|
|
25
38
|
const [shouldReturnFocusAfterClose, setShouldReturnFocusAfterClose] = useState(true);
|
|
26
39
|
|
|
@@ -55,7 +68,7 @@ const ModalBase: FunctionComponent<Props> = ({ children, className, footer, isOp
|
|
|
55
68
|
aria={{ modal: true }}
|
|
56
69
|
className={{
|
|
57
70
|
afterOpen: styles.afterOpen,
|
|
58
|
-
base: styles.modal,
|
|
71
|
+
base: classNames(styles.modal, modalClassName),
|
|
59
72
|
beforeClose: styles.beforeClose,
|
|
60
73
|
}}
|
|
61
74
|
closeTimeoutMS={TRANSITION_DURATION_LONG}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use 'styles/mixins' as *;
|
|
2
|
+
|
|
1
3
|
.navButtons {
|
|
2
4
|
display: flex;
|
|
3
5
|
align-items: center;
|
|
@@ -31,3 +33,21 @@
|
|
|
31
33
|
color: var(--color--error);
|
|
32
34
|
}
|
|
33
35
|
}
|
|
36
|
+
|
|
37
|
+
.fullNav {
|
|
38
|
+
@include media('<s') {
|
|
39
|
+
display: none;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.shortNav {
|
|
44
|
+
@include media('>=s') {
|
|
45
|
+
display: none;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.keyMapButton {
|
|
50
|
+
@include media('touch') {
|
|
51
|
+
display: none;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Generated by scripts/generate-scss-types.ts - do not edit.
|
|
2
|
+
declare const styles: {
|
|
3
|
+
readonly button: string;
|
|
4
|
+
readonly error: string;
|
|
5
|
+
readonly fullNav: string;
|
|
6
|
+
readonly group: string;
|
|
7
|
+
readonly keyMapButton: string;
|
|
8
|
+
readonly navButtons: string;
|
|
9
|
+
readonly separator: string;
|
|
10
|
+
readonly shortNav: string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default styles;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import classNames from 'classnames';
|
|
2
2
|
import { type FunctionComponent, memo } from 'react';
|
|
3
3
|
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import CardChecklist from '@/icons/CardChecklist.svg';
|
|
5
|
+
import Cog from '@/icons/Cog.svg';
|
|
6
|
+
import Eraser from '@/icons/Eraser.svg';
|
|
7
|
+
import Github from '@/icons/Github.svg';
|
|
8
|
+
import KeyboardFill from '@/icons/KeyboardFill.svg';
|
|
9
|
+
import List from '@/icons/List.svg';
|
|
10
|
+
import Sack from '@/icons/Sack.svg';
|
|
6
11
|
import { GITHUB_PROJECT_URL } from '@/parameters';
|
|
7
12
|
import { selectConfig, useTranslate, useTypedSelector } from '@/state';
|
|
8
13
|
|
|
@@ -32,35 +37,6 @@ const NavButtonsBase: FunctionComponent<Props> = ({
|
|
|
32
37
|
const config = useTypedSelector(selectConfig);
|
|
33
38
|
const hasInvalidWords = useTypedSelector(selectHasInvalidWords);
|
|
34
39
|
const hasOverusedTiles = useTypedSelector(selectHasOverusedTiles);
|
|
35
|
-
const { showKeyMap, showShortNav } = useAppLayout();
|
|
36
|
-
|
|
37
|
-
if (showShortNav) {
|
|
38
|
-
return (
|
|
39
|
-
<div className={styles.navButtons}>
|
|
40
|
-
<div className={styles.group}>
|
|
41
|
-
<IconButton
|
|
42
|
-
aria-label={translate('common.clear')}
|
|
43
|
-
className={styles.button}
|
|
44
|
-
Icon={Eraser}
|
|
45
|
-
tooltip={translate('common.clear')}
|
|
46
|
-
onClick={onClear}
|
|
47
|
-
/>
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
<div className={styles.separator} />
|
|
51
|
-
|
|
52
|
-
<div className={styles.group}>
|
|
53
|
-
<IconButton
|
|
54
|
-
aria-label={translate('menu')}
|
|
55
|
-
className={styles.button}
|
|
56
|
-
Icon={List}
|
|
57
|
-
tooltip={translate('menu')}
|
|
58
|
-
onClick={onShowMenu}
|
|
59
|
-
/>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
40
|
|
|
65
41
|
return (
|
|
66
42
|
<div className={styles.navButtons}>
|
|
@@ -76,7 +52,7 @@ const NavButtonsBase: FunctionComponent<Props> = ({
|
|
|
76
52
|
|
|
77
53
|
<div className={styles.separator} />
|
|
78
54
|
|
|
79
|
-
<div className={styles.group}>
|
|
55
|
+
<div className={classNames(styles.group, styles.fullNav)}>
|
|
80
56
|
{config.supportsRemainingTiles && (
|
|
81
57
|
<IconButton
|
|
82
58
|
aria-label={translate('remaining-tiles')}
|
|
@@ -100,9 +76,9 @@ const NavButtonsBase: FunctionComponent<Props> = ({
|
|
|
100
76
|
/>
|
|
101
77
|
</div>
|
|
102
78
|
|
|
103
|
-
<div className={styles.separator} />
|
|
79
|
+
<div className={classNames(styles.separator, styles.fullNav)} />
|
|
104
80
|
|
|
105
|
-
<div className={styles.group}>
|
|
81
|
+
<div className={classNames(styles.group, styles.fullNav)}>
|
|
106
82
|
<IconButton.Link
|
|
107
83
|
aria-label={translate('github')}
|
|
108
84
|
className={styles.button}
|
|
@@ -114,18 +90,16 @@ const NavButtonsBase: FunctionComponent<Props> = ({
|
|
|
114
90
|
/>
|
|
115
91
|
</div>
|
|
116
92
|
|
|
117
|
-
<div className={styles.separator} />
|
|
93
|
+
<div className={classNames(styles.separator, styles.fullNav)} />
|
|
118
94
|
|
|
119
|
-
<div className={styles.group}>
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
/>
|
|
128
|
-
)}
|
|
95
|
+
<div className={classNames(styles.group, styles.fullNav)}>
|
|
96
|
+
<IconButton
|
|
97
|
+
aria-label={translate('keyMap')}
|
|
98
|
+
className={classNames(styles.button, styles.keyMapButton)}
|
|
99
|
+
Icon={KeyboardFill}
|
|
100
|
+
tooltip={translate('keyMap')}
|
|
101
|
+
onClick={onShowKeyMap}
|
|
102
|
+
/>
|
|
129
103
|
|
|
130
104
|
<IconButton
|
|
131
105
|
aria-label={translate('settings')}
|
|
@@ -136,6 +110,16 @@ const NavButtonsBase: FunctionComponent<Props> = ({
|
|
|
136
110
|
onClick={onShowSettings}
|
|
137
111
|
/>
|
|
138
112
|
</div>
|
|
113
|
+
|
|
114
|
+
<div className={classNames(styles.group, styles.shortNav)}>
|
|
115
|
+
<IconButton
|
|
116
|
+
aria-label={translate('menu')}
|
|
117
|
+
className={styles.button}
|
|
118
|
+
Icon={List}
|
|
119
|
+
tooltip={translate('menu')}
|
|
120
|
+
onClick={onShowMenu}
|
|
121
|
+
/>
|
|
122
|
+
</div>
|
|
139
123
|
</div>
|
|
140
124
|
);
|
|
141
125
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Generated by scripts/generate-scss-types.ts - do not edit.
|
|
2
|
+
declare const styles: {
|
|
3
|
+
readonly dropShadow: string;
|
|
4
|
+
readonly hide: string;
|
|
5
|
+
readonly rotate: string;
|
|
6
|
+
readonly show: string;
|
|
7
|
+
readonly tile: string;
|
|
8
|
+
readonly wave: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default styles;
|
|
@@ -6,14 +6,13 @@ interface Props {
|
|
|
6
6
|
color: string;
|
|
7
7
|
points?: number;
|
|
8
8
|
size: number;
|
|
9
|
-
transform?: string;
|
|
10
9
|
x: number;
|
|
11
10
|
y: number;
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
export const Tile: FunctionComponent<Props> = ({ character, className, color, points, size,
|
|
15
|
-
<g className={className}
|
|
16
|
-
<rect
|
|
13
|
+
export const Tile: FunctionComponent<Props> = ({ character, className, color, points, size, x, y }) => (
|
|
14
|
+
<g className={className} style={{ fill: 'var(--color--foreground)' }}>
|
|
15
|
+
<rect height={size} rx={size * 0.15} style={{ fill: color }} width={size} x={x} y={y} />
|
|
17
16
|
|
|
18
17
|
<text
|
|
19
18
|
dominantBaseline="central"
|
|
@@ -3,12 +3,8 @@ import { Game, Locale } from '@scrabble-solver/types';
|
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
PLAIN_TILES_COLOR_DEFAULT,
|
|
6
|
-
PLAIN_TILES_PADDING_HORIZONTAL,
|
|
7
|
-
PLAIN_TILES_PADDING_VERTICAL,
|
|
8
6
|
PLAIN_TILES_POINTS_COLORS,
|
|
9
7
|
PLAIN_TILES_TILE_MARGIN,
|
|
10
|
-
PLAIN_TILES_TILE_MAX_ROTATE,
|
|
11
|
-
PLAIN_TILES_TILE_MAX_SCATTER,
|
|
12
8
|
PLAIN_TILES_TILE_SIZE,
|
|
13
9
|
} from '@/parameters';
|
|
14
10
|
|
|
@@ -47,17 +43,14 @@ export const createPlainTile = ({
|
|
|
47
43
|
const points = showPoints ? configPoints : undefined;
|
|
48
44
|
const defaultColor =
|
|
49
45
|
typeof configPoints === 'number' ? PLAIN_TILES_POINTS_COLORS[configPoints] : PLAIN_TILES_COLOR_DEFAULT;
|
|
50
|
-
const x = getX(cellIndex) + PLAIN_TILES_TILE_SIZE / 2;
|
|
51
|
-
const y = getY(0) + PLAIN_TILES_TILE_SIZE / 2;
|
|
52
46
|
|
|
53
47
|
return {
|
|
54
48
|
character,
|
|
55
49
|
color: color || defaultColor,
|
|
56
50
|
points,
|
|
57
51
|
size: PLAIN_TILES_TILE_SIZE,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
y: randomize(getY(rowIndex), PLAIN_TILES_TILE_MAX_SCATTER),
|
|
52
|
+
x: getOffset(cellIndex),
|
|
53
|
+
y: getOffset(rowIndex),
|
|
61
54
|
};
|
|
62
55
|
};
|
|
63
56
|
|
|
@@ -77,14 +70,6 @@ export const getViewbox = (content: string[][]): string => {
|
|
|
77
70
|
return `0 0 ${width} ${height}`;
|
|
78
71
|
};
|
|
79
72
|
|
|
80
|
-
|
|
81
|
-
return
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
export const getY = (index: number): number => {
|
|
85
|
-
return PLAIN_TILES_PADDING_VERTICAL + index * (PLAIN_TILES_TILE_SIZE + PLAIN_TILES_TILE_MARGIN);
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
export const randomize = (value: number, maxChange: number): number => {
|
|
89
|
-
return value + maxChange * 2 * (0.5 - Math.random());
|
|
73
|
+
const getOffset = (index: number): number => {
|
|
74
|
+
return index * (PLAIN_TILES_TILE_SIZE + PLAIN_TILES_TILE_MARGIN);
|
|
90
75
|
};
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
width: 100%;
|
|
3
3
|
min-height: 1px;
|
|
4
4
|
border-radius: var(--border--radius);
|
|
5
|
+
background-image: linear-gradient(
|
|
6
|
+
90deg,
|
|
7
|
+
var(--color--progress) 0%,
|
|
8
|
+
var(--color--progress) var(--progress),
|
|
9
|
+
var(--color--progress--background) var(--progress),
|
|
10
|
+
var(--color--progress--background) 100%
|
|
11
|
+
);
|
|
5
12
|
|
|
6
13
|
[dir='rtl'] & {
|
|
7
14
|
transform: scaleX(-1);
|