@scrabble-solver/scrabble-solver 2.17.0 → 2.18.1

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 (331) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +22 -20
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +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/client-production/index.pack.old +0 -0
  9. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  10. package/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  11. package/.next/cache/webpack/server-production/0.pack +0 -0
  12. package/.next/cache/webpack/server-production/index.pack +0 -0
  13. package/.next/cache/webpack/server-production/index.pack.old +0 -0
  14. package/.next/diagnostics/framework.json +1 -1
  15. package/.next/dynamic-css-manifest.json +8 -1
  16. package/.next/next-minimal-server.js.nft.json +1 -1
  17. package/.next/next-server.js.nft.json +1 -1
  18. package/.next/prerender-manifest.json +4 -4
  19. package/.next/react-loadable-manifest.json +176 -1
  20. package/.next/routes-manifest.json +1 -1
  21. package/.next/server/chunks/309.js +1 -0
  22. package/.next/server/chunks/{785.js → 316.js} +1 -1
  23. package/.next/server/chunks/344.js +1 -0
  24. package/.next/server/chunks/371.js +1 -0
  25. package/.next/server/chunks/465.js +1 -0
  26. package/.next/server/chunks/546.js +1 -0
  27. package/.next/server/chunks/623.js +1 -0
  28. package/.next/server/chunks/624.js +1 -0
  29. package/.next/server/chunks/641.js +1 -0
  30. package/.next/server/chunks/671.js +1 -1
  31. package/.next/server/chunks/692.js +1 -0
  32. package/.next/server/chunks/705.js +1 -0
  33. package/.next/server/chunks/712.js +1 -1
  34. package/.next/server/chunks/846.js +1 -0
  35. package/.next/server/chunks/853.js +15 -0
  36. package/.next/server/chunks/886.js +1 -0
  37. package/.next/server/chunks/916.js +1 -0
  38. package/.next/server/chunks/953.js +1 -0
  39. package/.next/server/chunks/961.js +1 -0
  40. package/.next/server/chunks/968.js +1 -0
  41. package/.next/server/dynamic-css-manifest.js +1 -1
  42. package/.next/server/middleware-build-manifest.js +1 -1
  43. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  44. package/.next/server/pages/404.html +29 -1
  45. package/.next/server/pages/500.html +29 -1
  46. package/.next/server/pages/_app.js +1 -1
  47. package/.next/server/pages/_app.js.nft.json +1 -1
  48. package/.next/server/pages/_document.js +28 -1
  49. package/.next/server/pages/_document.js.nft.json +1 -1
  50. package/.next/server/pages/_error.js +28 -1
  51. package/.next/server/pages/_error.js.nft.json +1 -1
  52. package/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  53. package/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  54. package/.next/server/pages/api/solve.js +1 -1
  55. package/.next/server/pages/api/solve.js.nft.json +1 -1
  56. package/.next/server/pages/api/verify.js.nft.json +1 -1
  57. package/.next/server/pages/api/visit.js.nft.json +1 -1
  58. package/.next/server/pages/index.html +29 -1
  59. package/.next/server/pages/index.js +30 -1
  60. package/.next/server/pages/index.js.nft.json +1 -1
  61. package/.next/server/pages/index.json +1 -1
  62. package/.next/server/pages/not-found.html +29 -1
  63. package/.next/server/pages/not-found.js.nft.json +1 -1
  64. package/.next/server/pages-manifest.json +1 -1
  65. package/.next/server/webpack-api-runtime.js +1 -1
  66. package/.next/server/webpack-runtime.js +1 -1
  67. package/.next/static/5KOWzYqfY1Z2rjrzptr8D/_buildManifest.js +1 -0
  68. package/.next/static/chunks/101-829ab8a8d310e7a0.js +3 -0
  69. package/.next/static/chunks/106.e414e88694add27f.js +1 -0
  70. package/.next/static/chunks/127.125d896a19061d71.js +1 -0
  71. package/.next/static/chunks/18.8b91e137d239e15c.js +1 -0
  72. package/.next/static/chunks/277.6785dfaf22fdb0b7.js +1 -0
  73. package/.next/static/chunks/307.67f52f13e3d60d4e.js +1 -0
  74. package/.next/static/chunks/341.79535ba85bf1986f.js +1 -0
  75. package/.next/static/chunks/363.01eed3233f92b6a4.js +1 -0
  76. package/.next/static/chunks/422.1559ae6756912ca5.js +1 -0
  77. package/.next/static/chunks/541.dcd9e8b804f88da5.js +1 -0
  78. package/.next/static/chunks/631.98d42abad0a60af6.js +1 -0
  79. package/.next/static/chunks/663.d2c9ca36b26695b8.js +1 -0
  80. package/.next/static/chunks/711.ba7b8f900dfd40d0.js +1 -0
  81. package/.next/static/chunks/744.b06c9a3de4a1d877.js +1 -0
  82. package/.next/static/chunks/820.97b82f751ca49579.js +1 -0
  83. package/.next/static/chunks/865.a9b563a45848a83c.js +1 -0
  84. package/.next/static/chunks/912.ff8037ba9d4db5c8.js +1 -0
  85. package/.next/static/chunks/939.19b33a3d3c351d73.js +1 -0
  86. package/.next/static/chunks/990.61296e5870b91f11.js +1 -0
  87. package/.next/static/chunks/framework-626cbd48ac5aca57.js +1 -0
  88. package/.next/static/chunks/main-b92e08f3fc96dd8d.js +5 -0
  89. package/.next/static/chunks/pages/_app-2e607dcd4135f340.js +1 -0
  90. package/.next/static/chunks/pages/{_error-afeda7c5231b6c3c.js → _error-f0290a98eb3ed0ec.js} +1 -1
  91. package/.next/static/chunks/pages/index-e0087247c995328d.js +1 -0
  92. package/.next/static/chunks/pages/not-found-a59f9deeeff63d17.js +1 -0
  93. package/.next/static/chunks/webpack-cfb34d175e081981.js +1 -0
  94. package/.next/static/css/2d03f0da2c678dfc.css +1 -0
  95. package/.next/static/css/4dbcacc1122ac6b9.css +2 -0
  96. package/.next/static/css/7b6724d2df70f48f.css +1 -0
  97. package/.next/static/css/b736be3bd02b5d99.css +1 -0
  98. package/.next/static/css/b74cd7de82dabcdd.css +1 -0
  99. package/.next/static/css/c403ce739a9c0d83.css +1 -0
  100. package/.next/static/css/ca311e6c030663d4.css +1 -0
  101. package/.next/static/css/dee878eb64099d92.css +1 -0
  102. package/.next/static/css/fbfdce70731d0d2b.css +1 -0
  103. package/.next/trace +21 -21
  104. package/.next/trace-build +1 -1
  105. package/empty-module.js +2 -0
  106. package/next.config.js +13 -2
  107. package/package.json +43 -17
  108. package/public/llms.txt +11 -0
  109. package/public/robots.txt +5 -0
  110. package/public/site.webmanifest +14 -0
  111. package/scripts/generate-scss-types.ts +112 -0
  112. package/src/@types/scss.d.ts +6 -9
  113. package/src/@types/svg.d.ts +1 -1
  114. package/src/components/Alert/Alert.module.scss.d.ts +13 -0
  115. package/src/components/Alert/Alert.tsx +4 -1
  116. package/src/components/Badge/Badge.module.scss.d.ts +6 -0
  117. package/src/components/Board/Board.module.scss +10 -0
  118. package/src/components/Board/Board.module.scss.d.ts +17 -0
  119. package/src/components/Board/Board.tsx +14 -26
  120. package/src/components/Board/BoardPure.tsx +54 -49
  121. package/src/components/Board/components/Actions/Actions.module.scss +18 -18
  122. package/src/components/Board/components/Actions/Actions.module.scss.d.ts +7 -0
  123. package/src/components/Board/components/Actions/Actions.tsx +6 -3
  124. package/src/components/Board/components/Actions/lib.ts +3 -1
  125. package/src/components/Board/components/Cell/Cell.module.scss.d.ts +13 -0
  126. package/src/components/Board/components/Cell/Cell.tsx +28 -33
  127. package/src/components/Board/components/InputPrompt/InputPrompt.module.scss.d.ts +10 -0
  128. package/src/components/Board/components/InputPrompt/InputPrompt.tsx +1 -1
  129. package/src/components/Board/components/ToggleDirectionButton/ToggleDirectionButton.module.scss.d.ts +8 -0
  130. package/src/components/Board/components/ToggleDirectionButton/ToggleDirectionButton.tsx +2 -2
  131. package/src/components/Board/getBoardBackground.ts +175 -0
  132. package/src/components/Board/hooks/index.ts +0 -1
  133. package/src/components/Board/hooks/useBoardStyle.ts +10 -20
  134. package/src/components/Board/hooks/useFloatingActions.ts +3 -6
  135. package/src/components/Board/hooks/useGrid.ts +6 -3
  136. package/src/components/Board/selectors.ts +1 -1
  137. package/src/components/Button/Button.module.scss.d.ts +12 -0
  138. package/src/components/Dictionary/Dictionary.module.scss +1 -0
  139. package/src/components/Dictionary/Dictionary.module.scss.d.ts +14 -0
  140. package/src/components/Dictionary/Dictionary.tsx +1 -3
  141. package/src/components/DictionaryInput/DictionaryInput.module.scss.d.ts +7 -0
  142. package/src/components/DictionaryInput/DictionaryInput.tsx +1 -1
  143. package/src/components/EmptyState/EmptyState.module.scss.d.ts +7 -0
  144. package/src/components/EmptyState/EmptyState.tsx +1 -1
  145. package/src/components/IconButton/IconButton.module.scss.d.ts +8 -0
  146. package/src/components/Key/Key.module.scss.d.ts +6 -0
  147. package/src/components/Keys/Arrows/Arrows.module.scss.d.ts +11 -0
  148. package/src/components/Keys/Arrows/Arrows.tsx +4 -1
  149. package/src/components/Keys/index.tsx +1 -1
  150. package/src/components/Loading/Loading.module.scss.d.ts +9 -0
  151. package/src/components/Loading/Loading.tsx +1 -1
  152. package/src/components/Logo/Logo.tsx +4 -9
  153. package/src/components/Logo/LogoBlueprint.tsx +1 -0
  154. package/src/components/Modal/Modal.module.scss.d.ts +15 -0
  155. package/src/components/Modal/Modal.tsx +16 -3
  156. package/src/components/Modal/components/Section/Section.module.scss.d.ts +7 -0
  157. package/src/components/NavButtons/NavButtons.module.scss +20 -0
  158. package/src/components/NavButtons/NavButtons.module.scss.d.ts +13 -0
  159. package/src/components/NavButtons/NavButtons.tsx +29 -45
  160. package/src/components/NotFound/NotFound.module.scss.d.ts +9 -0
  161. package/src/components/NotFound/NotFound.tsx +1 -1
  162. package/src/components/PlainTiles/PlainTiles.module.scss.d.ts +11 -0
  163. package/src/components/PlainTiles/PlainTiles.tsx +0 -1
  164. package/src/components/PlainTiles/Tile.tsx +3 -4
  165. package/src/components/PlainTiles/lib.ts +4 -19
  166. package/src/components/PlainTiles/types.ts +0 -1
  167. package/src/components/Progress/Progress.module.scss +7 -0
  168. package/src/components/Progress/Progress.module.scss.d.ts +6 -0
  169. package/src/components/Progress/Progress.tsx +2 -11
  170. package/src/components/Rack/Rack.module.scss +3 -0
  171. package/src/components/Rack/Rack.module.scss.d.ts +10 -0
  172. package/src/components/Rack/Rack.tsx +8 -11
  173. package/src/components/Rack/components/InputPrompt/InputPrompt.module.scss +2 -0
  174. package/src/components/Rack/components/InputPrompt/InputPrompt.module.scss.d.ts +7 -0
  175. package/src/components/Rack/components/InputPrompt/InputPrompt.tsx +1 -13
  176. package/src/components/Rack/components/InputPrompt/lib.ts +1 -1
  177. package/src/components/Rack/components/RackTile/RackTile.module.scss.d.ts +6 -0
  178. package/src/components/Rack/components/RackTile/RackTile.tsx +5 -4
  179. package/src/components/Rack/selectors.ts +1 -1
  180. package/src/components/Radio/Radio.module.scss.d.ts +12 -0
  181. package/src/components/Results/Cell.tsx +3 -12
  182. package/src/components/Results/Header.tsx +9 -18
  183. package/src/components/Results/HeaderButton.tsx +4 -5
  184. package/src/components/Results/Result.tsx +4 -12
  185. package/src/components/Results/Results.module.scss +4 -6
  186. package/src/components/Results/Results.module.scss.d.ts +27 -0
  187. package/src/components/Results/Results.tsx +4 -3
  188. package/src/components/Results/SolveButton.tsx +1 -1
  189. package/src/components/ResultsInput/ResultsInput.module.scss.d.ts +7 -0
  190. package/src/components/ResultsInput/ResultsInput.tsx +1 -1
  191. package/src/components/Solver/Solver.module.scss +6 -5
  192. package/src/components/Solver/Solver.module.scss.d.ts +20 -0
  193. package/src/components/Solver/Solver.tsx +19 -21
  194. package/src/components/Solver/components/InsertButton/InsertButton.module.scss.d.ts +7 -0
  195. package/src/components/Solver/components/InsertButton/InsertButton.tsx +1 -1
  196. package/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.module.scss.d.ts +18 -0
  197. package/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.tsx +3 -1
  198. package/src/components/Spinner/Spinner.module.scss.d.ts +10 -0
  199. package/src/components/Tile/Tile.module.scss +3 -0
  200. package/src/components/Tile/Tile.module.scss.d.ts +19 -0
  201. package/src/components/Tile/Tile.tsx +5 -14
  202. package/src/components/Tile/TilePure.tsx +2 -12
  203. package/src/components/Tooltip/Tooltip.module.scss.d.ts +7 -0
  204. package/src/components/Tooltip/Tooltip.tsx +14 -3
  205. package/src/components/Tooltip/useTooltip.ts +1 -0
  206. package/src/hooks/useColumns.ts +4 -7
  207. package/src/hooks/useDeferredRender.ts +20 -0
  208. package/src/hooks/useDirection.ts +4 -3
  209. package/src/hooks/useLanguage.ts +2 -2
  210. package/src/hooks/useLocalStorage.ts +32 -8
  211. package/src/hooks/useMedia.ts +26 -26
  212. package/src/i18n/constants.ts +2 -15
  213. package/src/i18n/i18n.ts +18 -17
  214. package/src/i18n/languages/english.json +0 -1
  215. package/src/i18n/languages/french.json +0 -1
  216. package/src/i18n/languages/german.json +0 -1
  217. package/src/i18n/languages/persian.json +0 -1
  218. package/src/i18n/languages/polish.json +0 -1
  219. package/src/i18n/languages/romanian.json +0 -1
  220. package/src/i18n/languages/spanish.json +0 -1
  221. package/src/i18n/languages/turkish.json +0 -1
  222. package/src/i18n/localeIcons.ts +24 -0
  223. package/src/lib/localeTransliterate.test.ts +5 -0
  224. package/src/lib/localeTransliterate.ts +26 -6
  225. package/src/lib/waitForIdleOrFirstIntent.ts +44 -0
  226. package/src/modals/DictionaryModal/DictionaryModal.module.scss.d.ts +8 -0
  227. package/src/modals/DictionaryModal/DictionaryModal.tsx +3 -1
  228. package/src/modals/KeyMapModal/KeyMapModal.tsx +3 -1
  229. package/src/modals/KeyMapModal/components/Mapping/Mapping.module.scss.d.ts +11 -0
  230. package/src/modals/MenuModal/MenuModal.module.scss +5 -0
  231. package/src/modals/MenuModal/MenuModal.module.scss.d.ts +10 -0
  232. package/src/modals/MenuModal/MenuModal.tsx +16 -5
  233. package/src/modals/RemainingTilesModal/RemainingTilesModal.module.scss +4 -1
  234. package/src/modals/RemainingTilesModal/RemainingTilesModal.module.scss.d.ts +9 -0
  235. package/src/modals/RemainingTilesModal/RemainingTilesModal.tsx +4 -6
  236. package/src/modals/RemainingTilesModal/components/Character/Character.module.scss +1 -0
  237. package/src/modals/RemainingTilesModal/components/Character/Character.module.scss.d.ts +12 -0
  238. package/src/modals/RemainingTilesModal/components/Character/Character.tsx +5 -12
  239. package/src/modals/ResultsModal/ResultsModal.module.scss.d.ts +8 -0
  240. package/src/modals/ResultsModal/ResultsModal.tsx +8 -4
  241. package/src/modals/SettingsModal/SettingsModal.tsx +2 -2
  242. package/src/modals/SettingsModal/components/AutoGroupTilesSetting/AutoGroupTilesSetting.module.scss.d.ts +7 -0
  243. package/src/modals/SettingsModal/components/AutoGroupTilesSetting/AutoGroupTilesSetting.tsx +1 -1
  244. package/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.module.scss.d.ts +7 -0
  245. package/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.tsx +1 -1
  246. package/src/modals/SettingsModal/components/HighlightUnreachableCellsSetting/HighlightUnreachableCellsSetting.module.scss.d.ts +7 -0
  247. package/src/modals/SettingsModal/components/HighlightUnreachableCellsSetting/HighlightUnreachableCellsSetting.tsx +1 -1
  248. package/src/modals/SettingsModal/components/InputModeSetting/InputModeSetting.module.scss.d.ts +7 -0
  249. package/src/modals/SettingsModal/components/InputModeSetting/InputModeSetting.tsx +1 -1
  250. package/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.module.scss.d.ts +8 -0
  251. package/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.tsx +24 -21
  252. package/src/modals/SettingsModal/components/RemoveCellFiltersSetting/RemoveCellFiltersSetting.module.scss.d.ts +7 -0
  253. package/src/modals/SettingsModal/components/RemoveCellFiltersSetting/RemoveCellFiltersSetting.tsx +1 -1
  254. package/src/modals/SettingsModal/components/ShowCoordinatesSetting/ShowCoordinatesSetting.module.scss.d.ts +7 -0
  255. package/src/modals/SettingsModal/components/ShowCoordinatesSetting/ShowCoordinatesSetting.tsx +1 -5
  256. package/src/modals/WordsModal/WordsModal.module.scss.d.ts +11 -0
  257. package/src/modals/WordsModal/WordsModal.tsx +4 -2
  258. package/src/modals/preload.ts +24 -0
  259. package/src/pages/_app.tsx +37 -76
  260. package/src/pages/_document.tsx +112 -24
  261. package/src/pages/api/solve.ts +1 -1
  262. package/src/pages/index.module.scss +1 -0
  263. package/src/pages/index.module.scss.d.ts +11 -0
  264. package/src/pages/index.tsx +127 -40
  265. package/src/pages/not-found.tsx +14 -3
  266. package/src/parameters/index.ts +31 -93
  267. package/src/serviceWorkerManager.ts +5 -2
  268. package/src/state/actions.ts +1 -1
  269. package/src/state/app/index.ts +4 -0
  270. package/src/state/app/initialState.ts +6 -0
  271. package/src/state/app/selectors.ts +5 -0
  272. package/src/state/app/slice.ts +20 -0
  273. package/src/state/app/types.ts +4 -0
  274. package/src/state/board/initialState.ts +1 -2
  275. package/src/state/i18n/index.ts +4 -0
  276. package/src/state/i18n/initialState.ts +5 -0
  277. package/src/state/i18n/selectors.ts +3 -0
  278. package/src/state/i18n/slice.ts +16 -0
  279. package/src/state/i18n/types.ts +7 -0
  280. package/src/state/index.ts +2 -0
  281. package/src/state/lib.ts +1 -1
  282. package/src/state/localStorage.ts +86 -29
  283. package/src/state/rack/initialState.ts +1 -2
  284. package/src/state/rack/slice.ts +4 -1
  285. package/src/state/results/lib.ts +5 -5
  286. package/src/state/results/selectors.ts +1 -1
  287. package/src/state/sagas.ts +125 -9
  288. package/src/state/selectors.ts +1 -1
  289. package/src/state/settings/initialState.ts +7 -10
  290. package/src/state/settings/selectors.ts +7 -2
  291. package/src/state/settings/slice.ts +5 -2
  292. package/src/state/store.ts +4 -0
  293. package/src/state/types.ts +4 -0
  294. package/src/styles/_tokens.scss +1 -0
  295. package/src/styles/global.scss +9 -0
  296. package/src/styles/variables.module.scss +0 -21
  297. package/src/styles/variables.module.scss.d.ts +27 -0
  298. package/src/styles/variables.scss +46 -2
  299. package/src/types/index.ts +1 -2
  300. package/tsconfig.tsbuildinfo +1 -1
  301. package/.next/server/chunks/129.js +0 -1
  302. package/.next/server/chunks/318.js +0 -3
  303. package/.next/server/chunks/791.js +0 -15
  304. package/.next/static/OLE8_ZInlGH7ENU0NIOpf/_buildManifest.js +0 -1
  305. package/.next/static/chunks/830.661816bf0de8c2f1.js +0 -1
  306. package/.next/static/chunks/framework-3cf15b8041c59dd3.js +0 -1
  307. package/.next/static/chunks/main-5b999f3f24ebfa84.js +0 -5
  308. package/.next/static/chunks/pages/_app-7024e7a27ffbb2fa.js +0 -7
  309. package/.next/static/chunks/pages/index-8b398b0a5d870773.js +0 -1
  310. package/.next/static/chunks/pages/not-found-9e076427bad69d90.js +0 -1
  311. package/.next/static/chunks/webpack-3943d624bbb47a64.js +0 -1
  312. package/.next/static/css/a78e04fe95452380.css +0 -1
  313. package/.next/static/css/aedeaada218d7280.css +0 -2
  314. package/src/app-layout/AppLayoutContext.tsx +0 -25
  315. package/src/app-layout/index.ts +0 -1
  316. package/src/app-layout/useAppLayoutValue.ts +0 -112
  317. package/src/components/Board/hooks/useBackgroundImage.tsx +0 -279
  318. package/src/components/SeoMessage/SeoMessage.tsx +0 -18
  319. package/src/components/SeoMessage/index.ts +0 -1
  320. package/src/components/index.ts +0 -26
  321. package/src/hooks/index.ts +0 -12
  322. package/src/hooks/useOnWindowResize.ts +0 -11
  323. package/src/hooks/useViewportSize.ts +0 -17
  324. package/src/i18n/index.ts +0 -2
  325. package/src/icons/Flag.svg +0 -4
  326. package/src/icons/Star.svg +0 -4
  327. package/src/icons/index.ts +0 -49
  328. package/src/lib/getTileSizes.ts +0 -13
  329. package/src/lib/index.ts +0 -24
  330. package/src/modals/index.ts +0 -7
  331. /package/.next/static/{OLE8_ZInlGH7ENU0NIOpf → 5KOWzYqfY1Z2rjrzptr8D}/_ssgManifest.js +0 -0
@@ -1,7 +1,6 @@
1
1
  import classNames from 'classnames';
2
- import { type FunctionComponent, type HTMLProps } from 'react';
2
+ import { type CSSProperties, type FunctionComponent, type HTMLProps } from 'react';
3
3
 
4
- import { PROGRESS_COLOR_BACKGROUND, PROGRESS_COLOR_VALUE } from '@/parameters';
5
4
  import { selectLocale, useTypedSelector } from '@/state';
6
5
 
7
6
  import styles from './Progress.module.scss';
@@ -12,11 +11,6 @@ interface Props extends HTMLProps<HTMLDivElement> {
12
11
  value: number;
13
12
  }
14
13
 
15
- const getGradient = (progress: number, color: string, background: string) => {
16
- const percent = 100 * progress;
17
- return `linear-gradient(90deg, ${color} 0%, ${color} ${percent}%, ${background} ${percent}%, ${background} 100%)`;
18
- };
19
-
20
14
  export const Progress: FunctionComponent<Props> = ({ className, max, min = 0, style, value, ...props }) => {
21
15
  const locale = useTypedSelector(selectLocale);
22
16
  const progress = value / (max - min);
@@ -31,10 +25,7 @@ export const Progress: FunctionComponent<Props> = ({ className, max, min = 0, st
31
25
  aria-valuetext={`${percent.toLocaleString(locale)}%`}
32
26
  className={classNames(styles.progress, className)}
33
27
  role="progressbar"
34
- style={{
35
- ...style,
36
- backgroundImage: getGradient(progress, PROGRESS_COLOR_VALUE, PROGRESS_COLOR_BACKGROUND),
37
- }}
28
+ style={{ ...style, '--progress': `${100 * progress}%` } as CSSProperties}
38
29
  title={`${percent.toLocaleString(locale)}%`}
39
30
  />
40
31
  );
@@ -65,12 +65,15 @@
65
65
  }
66
66
 
67
67
  .rack {
68
+ --tile-size: var(--rack-tile-size);
69
+
68
70
  position: relative;
69
71
  display: flex;
70
72
  box-shadow: var(--box-shadow);
71
73
  border-radius: var(--border--radius);
72
74
  transition: var(--transition);
73
75
  opacity: 1;
76
+ font-size: max(14px, calc(var(--rack-tile-size) * 0.6));
74
77
  }
75
78
 
76
79
  .tile {
@@ -0,0 +1,10 @@
1
+ // Generated by scripts/generate-scss-types.ts - do not edit.
2
+ declare const styles: {
3
+ readonly hidden: string;
4
+ readonly rack: string;
5
+ readonly sharpLeft: string;
6
+ readonly sharpRight: string;
7
+ readonly tile: string;
8
+ };
9
+
10
+ export default styles;
@@ -16,9 +16,11 @@ import {
16
16
  import useOnclickOutside from 'react-cool-onclickoutside';
17
17
  import { useDispatch } from 'react-redux';
18
18
 
19
- import { useAppLayout } from '@/app-layout';
20
- import { LOCALE_FEATURES } from '@/i18n';
21
- import { createKeyboardNavigation, extractCharacters, extractInputValue, getTileSizes, isCtrl } from '@/lib';
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';
22
24
  import { rackSlice, selectConfig, selectInputMode, selectLocale, selectRack, useTypedSelector } from '@/state';
23
25
 
24
26
  import { InputPrompt, RackTile } from './components';
@@ -27,12 +29,10 @@ import { selectRemainingTilesGroups } from './selectors';
27
29
 
28
30
  interface Props {
29
31
  className?: string;
30
- tileSize: number;
31
32
  }
32
33
 
33
- export const Rack: FunctionComponent<Props> = ({ className, tileSize }) => {
34
+ export const Rack: FunctionComponent<Props> = ({ className }) => {
34
35
  const dispatch = useDispatch();
35
- const { rackHeight } = useAppLayout();
36
36
  const config = useTypedSelector(selectConfig);
37
37
  const locale = useTypedSelector(selectLocale);
38
38
  const rack = useTypedSelector(selectRack);
@@ -47,7 +47,6 @@ export const Rack: FunctionComponent<Props> = ({ className, tileSize }) => {
47
47
  const [hasFocus, setHasFocus] = useState(false);
48
48
  const [input, setInput] = useState('');
49
49
  const { direction } = LOCALE_FEATURES[locale];
50
- const { tileFontSize } = getTileSizes(tileSize);
51
50
  const showInputPrompt = inputMode === 'touchscreen' && hasFocus;
52
51
  const ref = useRef<HTMLDivElement>(null);
53
52
 
@@ -58,7 +57,7 @@ export const Rack: FunctionComponent<Props> = ({ className, tileSize }) => {
58
57
 
59
58
  useOnclickOutside(() => setHasFocus(false), {
60
59
  ignoreClass: [InputPrompt.styles.form, InputPrompt.styles.input],
61
- refs: ref.current ? [ref as RefObject<HTMLDivElement>] : [],
60
+ refs: [ref as RefObject<HTMLDivElement>],
62
61
  });
63
62
 
64
63
  const changeActiveIndex = useCallback(
@@ -158,7 +157,6 @@ export const Rack: FunctionComponent<Props> = ({ className, tileSize }) => {
158
157
  })}
159
158
  data-testid="rack"
160
159
  ref={ref}
161
- style={{ fontSize: tileFontSize }}
162
160
  onPaste={handlePaste}
163
161
  >
164
162
  {tiles.map(({ character, tile }, index) => (
@@ -172,7 +170,6 @@ export const Rack: FunctionComponent<Props> = ({ className, tileSize }) => {
172
170
  index={index}
173
171
  inputRef={tilesRefs[index]}
174
172
  key={index}
175
- size={tileSize}
176
173
  tile={tile}
177
174
  onChange={handleChange}
178
175
  onKeyDown={handleKeyDown}
@@ -187,7 +184,7 @@ export const Rack: FunctionComponent<Props> = ({ className, tileSize }) => {
187
184
  ref={floatingInputPrompt.refs.setFloating}
188
185
  style={{
189
186
  position: floatingInputPrompt.strategy,
190
- top: floatingInputPrompt.y ? floatingInputPrompt.y - rackHeight : 0,
187
+ top: floatingInputPrompt.y ? `calc(${floatingInputPrompt.y}px - var(--rack-tile-size))` : 0,
191
188
  left: floatingInputPrompt.x ?? 0,
192
189
  }}
193
190
  value={input}
@@ -3,6 +3,8 @@
3
3
  .form {
4
4
  @include focus-effect;
5
5
 
6
+ width: calc(var(--rack-size) * var(--rack-tile-size));
7
+ height: var(--rack-tile-size);
6
8
  border-radius: var(--border--radius);
7
9
  }
8
10
 
@@ -0,0 +1,7 @@
1
+ // Generated by scripts/generate-scss-types.ts - do not edit.
2
+ declare const styles: {
3
+ readonly form: string;
4
+ readonly input: string;
5
+ };
6
+
7
+ export default styles;
@@ -10,7 +10,6 @@ import {
10
10
  } from 'react';
11
11
  import { useDispatch } from 'react-redux';
12
12
 
13
- import { useAppLayout } from '@/app-layout';
14
13
  import { rackSlice, selectConfig, useTranslate, useTypedSelector } from '@/state';
15
14
 
16
15
  import styles from './InputPrompt.module.scss';
@@ -29,7 +28,6 @@ const InputPromptBase = forwardRef<HTMLFormElement, Props>(
29
28
  ({ className, style, value, onBlur, onChange, onSubmit, ...props }, ref) => {
30
29
  const dispatch = useDispatch();
31
30
  const translate = useTranslate();
32
- const { rackHeight, rackWidth } = useAppLayout();
33
31
  const config = useTypedSelector(selectConfig);
34
32
  const [inputRef, setInputRef] = useState<HTMLInputElement | null>(null);
35
33
 
@@ -52,17 +50,7 @@ const InputPromptBase = forwardRef<HTMLFormElement, Props>(
52
50
  }, [inputRef]);
53
51
 
54
52
  return (
55
- <form
56
- className={classNames(styles.form, className)}
57
- ref={ref}
58
- style={{
59
- width: rackWidth,
60
- height: rackHeight,
61
- ...style,
62
- }}
63
- onSubmit={handleSubmit}
64
- {...props}
65
- >
53
+ <form className={classNames(styles.form, className)} ref={ref} style={style} onSubmit={handleSubmit} {...props}>
66
54
  <input
67
55
  autoCapitalize="none"
68
56
  autoComplete="off"
@@ -1,6 +1,6 @@
1
1
  import { type Config } from '@scrabble-solver/types';
2
2
 
3
- import { extractCharacters } from '@/lib';
3
+ import { extractCharacters } from '@/lib/extractCharacters';
4
4
 
5
5
  export const extractRack = (config: Config, value: string): (string | null)[] => {
6
6
  const charactersByCase = extractCharacters(config, value, {
@@ -0,0 +1,6 @@
1
+ // Generated by scripts/generate-scss-types.ts - do not edit.
2
+ declare const styles: {
3
+ readonly rackTile: string;
4
+ };
5
+
6
+ export default styles;
@@ -15,7 +15,10 @@ import {
15
15
  } from 'react';
16
16
  import { useDispatch } from 'react-redux';
17
17
 
18
- import { createKeyboardNavigation, extractCharacters, extractInputValue, isCtrl } from '@/lib';
18
+ import { createKeyboardNavigation } from '@/lib/createKeyboardNavigation';
19
+ import { extractCharacters } from '@/lib/extractCharacters';
20
+ import { extractInputValue } from '@/lib/extractInputValue';
21
+ import { isCtrl } from '@/lib/isCtrl';
19
22
  import {
20
23
  rackSlice,
21
24
  selectCharacterIsValid,
@@ -38,7 +41,6 @@ interface Props {
38
41
  className?: string;
39
42
  index: number;
40
43
  inputRef: RefObject<HTMLInputElement | null>;
41
- size: number;
42
44
  tile: TileModel | null;
43
45
  onChange: ChangeEventHandler<HTMLInputElement>;
44
46
  onKeyDown: KeyboardEventHandler<HTMLInputElement>;
@@ -51,7 +53,6 @@ export const RackTile: FunctionComponent<Props> = ({
51
53
  className,
52
54
  index,
53
55
  inputRef,
54
- size,
55
56
  tile,
56
57
  onChange,
57
58
  onKeyDown,
@@ -149,10 +150,10 @@ export const RackTile: FunctionComponent<Props> = ({
149
150
  isBlank={character === BLANK}
150
151
  isValid={isValid}
151
152
  key={index}
153
+ locale={locale}
152
154
  placeholder={translate('rack.placeholder')[index]}
153
155
  points={points}
154
156
  raised
155
- size={size}
156
157
  tabIndex={index === 0 ? undefined : -1}
157
158
  onChange={handleChange}
158
159
  onFocus={handleFocus}
@@ -1,6 +1,6 @@
1
1
  import { createSelector } from '@reduxjs/toolkit';
2
2
 
3
- import { zipCharactersAndTiles } from '@/lib';
3
+ import { zipCharactersAndTiles } from '@/lib/zipCharactersAndTiles';
4
4
  import { selectRack, selectResultCandidateTiles } from '@/state';
5
5
 
6
6
  export const selectRemainingTilesGroups = createSelector(
@@ -0,0 +1,12 @@
1
+ // Generated by scripts/generate-scss-types.ts - do not edit.
2
+ declare const styles: {
3
+ readonly checked: string;
4
+ readonly content: string;
5
+ readonly disabled: string;
6
+ readonly icon: string;
7
+ readonly iconContent: string;
8
+ readonly input: string;
9
+ readonly radio: string;
10
+ };
11
+
12
+ export default styles;
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import { type CSSProperties, type FunctionComponent, type ReactNode } from 'react';
2
+ import { type FunctionComponent, type ReactNode } from 'react';
3
3
 
4
4
  import { selectLocale, useTranslate, useTypedSelector } from '@/state';
5
5
  import { type TranslationKey } from '@/types';
@@ -12,28 +12,19 @@ interface Props {
12
12
  children?: ReactNode;
13
13
  className?: string;
14
14
  dataTestId?: string;
15
- style?: CSSProperties;
16
15
  translationKey: TranslationKey;
17
16
  tooltip?: string | number;
18
17
  value: string | number;
19
18
  }
20
19
 
21
- export const Cell: FunctionComponent<Props> = ({
22
- children,
23
- className,
24
- dataTestId,
25
- style,
26
- translationKey,
27
- tooltip,
28
- value,
29
- }) => {
20
+ export const Cell: FunctionComponent<Props> = ({ children, className, dataTestId, translationKey, tooltip, value }) => {
30
21
  const translate = useTranslate();
31
22
  const locale = useTypedSelector(selectLocale);
32
23
  const formattedValue = value.toLocaleString(locale);
33
24
 
34
25
  return (
35
26
  <Tooltip tooltip={`${translate(translationKey)}: ${tooltip || formattedValue}`}>
36
- <div className={classNames(styles.cell, className)} data-testid={dataTestId} style={style}>
27
+ <div className={classNames(styles.cell, className)} data-testid={dataTestId}>
37
28
  {children || formattedValue}
38
29
  </div>
39
30
  </Tooltip>
@@ -1,16 +1,19 @@
1
1
  import { type FunctionComponent } from 'react';
2
2
 
3
- import { useAppLayout } from '@/app-layout';
4
- import { useColumns } from '@/hooks';
5
- import { GeoAlt, OneTwoThree, Square, SquareA, SquareB, Squares, Words } from '@/icons';
6
- import { RESULTS_COLUMN_WIDTH } from '@/parameters';
3
+ import { useColumns } from '@/hooks/useColumns';
4
+ import GeoAlt from '@/icons/GeoAlt.svg';
5
+ import OneTwoThree from '@/icons/OneTwoThree.svg';
6
+ import Square from '@/icons/Square.svg';
7
+ import SquareA from '@/icons/SquareA.svg';
8
+ import SquareB from '@/icons/SquareB.svg';
9
+ import Squares from '@/icons/Squares.svg';
10
+ import Words from '@/icons/Words.svg';
7
11
  import { ResultColumnId } from '@/types';
8
12
 
9
13
  import { HeaderButton } from './HeaderButton';
10
14
  import styles from './Results.module.scss';
11
15
 
12
16
  export const Header: FunctionComponent = () => {
13
- const { resultWordWidth } = useAppLayout();
14
17
  const columns = useColumns();
15
18
 
16
19
  return (
@@ -20,18 +23,12 @@ export const Header: FunctionComponent = () => {
20
23
  className={styles.coordinates}
21
24
  Icon={GeoAlt}
22
25
  id={ResultColumnId.Coordinates}
23
- style={{ flexBasis: RESULTS_COLUMN_WIDTH[ResultColumnId.Coordinates] }}
24
26
  translationKey="settings.showCoordinates"
25
27
  />
26
28
  )}
27
29
 
28
30
  {columns[ResultColumnId.Word] && (
29
- <HeaderButton
30
- className={styles.word}
31
- id={ResultColumnId.Word}
32
- style={{ flexBasis: resultWordWidth }}
33
- translationKey="common.word"
34
- />
31
+ <HeaderButton className={styles.word} id={ResultColumnId.Word} translationKey="common.word" />
35
32
  )}
36
33
 
37
34
  {columns[ResultColumnId.TilesCount] && (
@@ -39,7 +36,6 @@ export const Header: FunctionComponent = () => {
39
36
  className={styles.stat}
40
37
  Icon={Squares}
41
38
  id={ResultColumnId.TilesCount}
42
- style={{ flexBasis: RESULTS_COLUMN_WIDTH[ResultColumnId.TilesCount] }}
43
39
  translationKey="common.tiles"
44
40
  />
45
41
  )}
@@ -49,7 +45,6 @@ export const Header: FunctionComponent = () => {
49
45
  className={styles.stat}
50
46
  Icon={SquareA}
51
47
  id={ResultColumnId.VowelsCount}
52
- style={{ flexBasis: RESULTS_COLUMN_WIDTH[ResultColumnId.VowelsCount] }}
53
48
  translationKey="common.vowels"
54
49
  />
55
50
  )}
@@ -59,7 +54,6 @@ export const Header: FunctionComponent = () => {
59
54
  className={styles.stat}
60
55
  Icon={SquareB}
61
56
  id={ResultColumnId.ConsonantsCount}
62
- style={{ flexBasis: RESULTS_COLUMN_WIDTH[ResultColumnId.ConsonantsCount] }}
63
57
  translationKey="common.consonants"
64
58
  />
65
59
  )}
@@ -69,7 +63,6 @@ export const Header: FunctionComponent = () => {
69
63
  className={styles.stat}
70
64
  Icon={Square}
71
65
  id={ResultColumnId.BlanksCount}
72
- style={{ flexBasis: RESULTS_COLUMN_WIDTH[ResultColumnId.BlanksCount] }}
73
66
  translationKey="common.blanks"
74
67
  />
75
68
  )}
@@ -79,7 +72,6 @@ export const Header: FunctionComponent = () => {
79
72
  className={styles.stat}
80
73
  Icon={Words}
81
74
  id={ResultColumnId.WordsCount}
82
- style={{ flexBasis: RESULTS_COLUMN_WIDTH[ResultColumnId.WordsCount] }}
83
75
  translationKey="common.words"
84
76
  />
85
77
  )}
@@ -89,7 +81,6 @@ export const Header: FunctionComponent = () => {
89
81
  className={styles.points}
90
82
  Icon={OneTwoThree}
91
83
  id={ResultColumnId.Points}
92
- style={{ flexBasis: RESULTS_COLUMN_WIDTH[ResultColumnId.Points] }}
93
84
  translationKey="common.points"
94
85
  />
95
86
  )}
@@ -1,8 +1,9 @@
1
1
  import classNames from 'classnames';
2
- import { type CSSProperties, type FunctionComponent, type ReactElement, type SVGAttributes, useCallback } from 'react';
2
+ import { type FunctionComponent, type ReactElement, type SVGAttributes, useCallback } from 'react';
3
3
  import { useDispatch } from 'react-redux';
4
4
 
5
- import { SortDown, SortUp } from '@/icons';
5
+ import SortDown from '@/icons/SortDown.svg';
6
+ import SortUp from '@/icons/SortUp.svg';
6
7
  import { resultsSlice, selectResultsSort, useTranslate, useTypedSelector } from '@/state';
7
8
  import { type ResultColumnId, SortDirection, type TranslationKey } from '@/types';
8
9
 
@@ -15,10 +16,9 @@ interface Props {
15
16
  Icon?: FunctionComponent<SVGAttributes<SVGElement>>;
16
17
  id: ResultColumnId;
17
18
  translationKey: TranslationKey;
18
- style?: CSSProperties;
19
19
  }
20
20
 
21
- export const HeaderButton = ({ className, Icon, id, translationKey, style }: Props): ReactElement => {
21
+ export const HeaderButton = ({ className, Icon, id, translationKey }: Props): ReactElement => {
22
22
  const dispatch = useDispatch();
23
23
  const translate = useTranslate();
24
24
  const sort = useTypedSelector(selectResultsSort);
@@ -32,7 +32,6 @@ export const HeaderButton = ({ className, Icon, id, translationKey, style }: Pro
32
32
  <button
33
33
  aria-label={translate(translationKey)}
34
34
  className={classNames(styles.headerButton, className)}
35
- style={style}
36
35
  type="button"
37
36
  onClick={handleClick}
38
37
  >
@@ -3,10 +3,9 @@ import { type FocusEventHandler, type MouseEventHandler, type ReactElement, useR
3
3
  import Highlighter from 'react-highlight-words';
4
4
  import { type RowComponentProps } from 'react-window';
5
5
 
6
- import { useAppLayout } from '@/app-layout';
7
- import { useColumns } from '@/hooks';
8
- import { LOCALE_FEATURES } from '@/i18n';
9
- import { noop } from '@/lib';
6
+ import { useColumns } from '@/hooks/useColumns';
7
+ import { LOCALE_FEATURES } from '@/i18n/constants';
8
+ import { noop } from '@/lib/noop';
10
9
  import {
11
10
  selectIsResultMatching,
12
11
  selectLocale,
@@ -30,7 +29,6 @@ export const Result = ({
30
29
  onMouseEnter = noop,
31
30
  style,
32
31
  }: RowComponentProps<ResultData>): ReactElement => {
33
- const { resultWordWidth } = useAppLayout();
34
32
  const ref = useRef<HTMLButtonElement>(null);
35
33
  const columns = useColumns();
36
34
  const locale = useTypedSelector(selectLocale);
@@ -53,7 +51,6 @@ export const Result = ({
53
51
  aria-label={result.word}
54
52
  className={classNames(styles.result, {
55
53
  [styles.highlighted]: index === highlightedIndex,
56
- [styles.notMatching]: !isMatching,
57
54
  })}
58
55
  data-testid="result"
59
56
  ref={ref}
@@ -70,12 +67,7 @@ export const Result = ({
70
67
  )}
71
68
 
72
69
  {columns[ResultColumnId.Word] && (
73
- <Cell
74
- className={styles.word}
75
- style={{ flexBasis: resultWordWidth }}
76
- translationKey="common.word"
77
- value={result.word}
78
- >
70
+ <Cell className={styles.word} translationKey="common.word" value={result.word}>
79
71
  <Highlighter highlightClassName={styles.highlight} searchWords={[query]} textToHighlight={result.word} />
80
72
  </Cell>
81
73
  )}
@@ -145,14 +145,11 @@ $row-padding-horizontal: calc(var(--spacing--m) + var(--spacing--s));
145
145
  justify-content: flex-start;
146
146
  padding-inline-start: $row-padding-horizontal;
147
147
  }
148
-
149
- &:last-child {
150
- flex: 1;
151
- }
152
148
  }
153
149
 
154
150
  .word {
155
- flex: 0 0;
151
+ flex: 1 1 0;
152
+ min-width: 0;
156
153
  text-transform: uppercase;
157
154
  }
158
155
 
@@ -167,7 +164,8 @@ $row-padding-horizontal: calc(var(--spacing--m) + var(--spacing--s));
167
164
  .points {
168
165
  $width: 80px;
169
166
 
170
- flex: 1 0 $width;
167
+ flex: 0 0 $width;
168
+ max-width: $width;
171
169
  font-weight: bold;
172
170
  }
173
171
 
@@ -0,0 +1,27 @@
1
+ // Generated by scripts/generate-scss-types.ts - do not edit.
2
+ declare const styles: {
3
+ readonly cell: string;
4
+ readonly content: string;
5
+ readonly coordinates: string;
6
+ readonly emptyState: string;
7
+ readonly header: string;
8
+ readonly headerButton: string;
9
+ readonly headerButtonIcon: string;
10
+ readonly headerButtonLabel: string;
11
+ readonly highlight: string;
12
+ readonly highlighted: string;
13
+ readonly input: string;
14
+ readonly list: string;
15
+ readonly listContainer: string;
16
+ readonly outdated: string;
17
+ readonly points: string;
18
+ readonly result: string;
19
+ readonly resultContent: string;
20
+ readonly results: string;
21
+ readonly solveButton: string;
22
+ readonly sortIcon: string;
23
+ readonly stat: string;
24
+ readonly word: string;
25
+ };
26
+
27
+ export default styles;
@@ -3,9 +3,9 @@ import { useEffect, useMemo, type FunctionComponent } from 'react';
3
3
  import { List, useListRef } from 'react-window';
4
4
  import { useDebounce } from 'use-debounce';
5
5
 
6
- import { useLatest } from '@/hooks';
7
- import { LOCALE_FEATURES } from '@/i18n';
8
- import { RESULTS_ITEM_HEIGHT } from '@/parameters';
6
+ import { useLatest } from '@/hooks/useLatest';
7
+ import { LOCALE_FEATURES } from '@/i18n/constants';
8
+ import { RESULTS_ITEM_HEIGHT, RESULTS_OVERSCAN_COUNT } from '@/parameters';
9
9
  import {
10
10
  selectAreResultsOutdated,
11
11
  selectLocale,
@@ -126,6 +126,7 @@ export const Results: FunctionComponent<Props> = ({ callbacks, className, highli
126
126
  })}
127
127
  dir={direction}
128
128
  listRef={listRef}
129
+ overscanCount={RESULTS_OVERSCAN_COUNT}
129
130
  rowComponent={Result}
130
131
  rowCount={results.length}
131
132
  rowHeight={RESULTS_ITEM_HEIGHT}
@@ -1,7 +1,7 @@
1
1
  import { type FunctionComponent } from 'react';
2
2
  import { useDispatch } from 'react-redux';
3
3
 
4
- import { Search } from '@/icons';
4
+ import Search from '@/icons/Search.svg';
5
5
  import {
6
6
  selectAreResultsOutdated,
7
7
  selectSolveIsLoading,
@@ -0,0 +1,7 @@
1
+ // Generated by scripts/generate-scss-types.ts - do not edit.
2
+ declare const styles: {
3
+ readonly input: string;
4
+ readonly resultsInput: string;
5
+ };
6
+
7
+ export default styles;
@@ -2,7 +2,7 @@ import classNames from 'classnames';
2
2
  import { type ChangeEvent, type FunctionComponent, type SubmitEventHandler, useState } from 'react';
3
3
  import { useDispatch } from 'react-redux';
4
4
 
5
- import { isRegExp } from '@/lib';
5
+ import { isRegExp } from '@/lib/isRegExp';
6
6
  import { resultsSlice, selectResultsQuery, useTranslate, useTypedSelector } from '@/state';
7
7
 
8
8
  import styles from './ResultsInput.module.scss';
@@ -1,17 +1,13 @@
1
1
  @use 'styles/mixins' as *;
2
2
 
3
3
  .solver {
4
- --spacing: var(--spacing--xl);
4
+ --spacing: var(--components-spacing);
5
5
 
6
6
  position: relative;
7
7
  margin: 0 var(--spacing);
8
8
  display: flex;
9
9
  flex-direction: column;
10
10
 
11
- @include media('<xl') {
12
- --spacing: var(--spacing--l);
13
- }
14
-
15
11
  @include media('<l', 'touch') {
16
12
  margin-bottom: calc(3 * var(--spacing--l) + var(--button--icon--size));
17
13
  }
@@ -108,6 +104,11 @@
108
104
 
109
105
  .controls {
110
106
  width: 100%;
107
+ max-width: var(--controls-max-width);
108
+
109
+ @include media('>=l') {
110
+ display: none;
111
+ }
111
112
  }
112
113
 
113
114
  .emptyState {
@@ -0,0 +1,20 @@
1
+ // Generated by scripts/generate-scss-types.ts - do not edit.
2
+ declare const styles: {
3
+ readonly board: string;
4
+ readonly boardContainer: string;
5
+ readonly bottomContainer: string;
6
+ readonly bottomContent: string;
7
+ readonly column: string;
8
+ readonly container: string;
9
+ readonly content: string;
10
+ readonly controls: string;
11
+ readonly dictionary: string;
12
+ readonly dictionaryContainer: string;
13
+ readonly dictionaryInput: string;
14
+ readonly emptyState: string;
15
+ readonly results: string;
16
+ readonly solver: string;
17
+ readonly submitInput: string;
18
+ };
19
+
20
+ export default styles;