@scrabble-solver/scrabble-solver 2.15.13 → 2.15.15

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 (216) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build/chunks/[root-of-the-server]__6e020478._.js +441 -0
  3. package/.next/build/chunks/[root-of-the-server]__6e020478._.js.map +7 -0
  4. package/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +500 -0
  5. package/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +11 -0
  6. package/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_c84aa21a._.js +12 -0
  7. package/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_c84aa21a._.js.map +5 -0
  8. package/.next/build/chunks/[turbopack]_runtime.js +770 -0
  9. package/.next/build/chunks/[turbopack]_runtime.js.map +10 -0
  10. package/.next/build/package.json +1 -0
  11. package/.next/build/webpack-loaders.js +6 -0
  12. package/.next/build/webpack-loaders.js.map +5 -0
  13. package/.next/build-manifest.json +29 -32
  14. package/.next/cache/.previewinfo +1 -1
  15. package/.next/cache/.rscinfo +1 -1
  16. package/.next/cache/.tsbuildinfo +1 -1
  17. package/.next/diagnostics/build-diagnostics.json +1 -1
  18. package/.next/diagnostics/framework.json +1 -1
  19. package/.next/fallback-build-manifest.json +24 -0
  20. package/.next/images-manifest.json +12 -3
  21. package/.next/next-minimal-server.js.nft.json +1 -1
  22. package/.next/next-server.js.nft.json +1 -1
  23. package/.next/prerender-manifest.json +4 -4
  24. package/.next/required-server-files.json +104 -73
  25. package/.next/routes-manifest.json +30 -9
  26. package/.next/server/chunks/[root-of-the-server]__378b5933._.js +3 -0
  27. package/.next/server/chunks/[root-of-the-server]__378b5933._.js.map +1 -0
  28. package/.next/server/chunks/[root-of-the-server]__51a21f60._.js +3 -0
  29. package/.next/server/chunks/[root-of-the-server]__51a21f60._.js.map +1 -0
  30. package/.next/server/chunks/[root-of-the-server]__53eb4a3b._.js +4 -0
  31. package/.next/server/chunks/[root-of-the-server]__53eb4a3b._.js.map +1 -0
  32. package/.next/server/chunks/[root-of-the-server]__7e4e99cd._.js +3 -0
  33. package/.next/server/chunks/[root-of-the-server]__7e4e99cd._.js.map +1 -0
  34. package/.next/server/chunks/[root-of-the-server]__a6a82e19._.js +3 -0
  35. package/.next/server/chunks/[root-of-the-server]__a6a82e19._.js.map +1 -0
  36. package/.next/server/chunks/[root-of-the-server]__a84df743._.js +3 -0
  37. package/.next/server/chunks/[root-of-the-server]__a84df743._.js.map +1 -0
  38. package/.next/server/chunks/[root-of-the-server]__a99303dc._.js +3 -0
  39. package/.next/server/chunks/[root-of-the-server]__a99303dc._.js.map +1 -0
  40. package/.next/server/chunks/[root-of-the-server]__bfa4320b._.js +3 -0
  41. package/.next/server/chunks/[root-of-the-server]__bfa4320b._.js.map +1 -0
  42. package/.next/server/chunks/[turbopack]_runtime.js +770 -0
  43. package/.next/server/chunks/[turbopack]_runtime.js.map +10 -0
  44. package/.next/server/chunks/scrabble-solver_b903dbba._.js +3 -0
  45. package/.next/server/chunks/scrabble-solver_b903dbba._.js.map +1 -0
  46. package/.next/server/chunks/scrabble-solver_packages_configs_build_5accd600._.js +3 -0
  47. package/.next/server/chunks/scrabble-solver_packages_configs_build_5accd600._.js.map +1 -0
  48. package/.next/server/chunks/ssr/1b834_next_d69de9fa._.js +3 -0
  49. package/.next/server/chunks/ssr/1b834_next_d69de9fa._.js.map +1 -0
  50. package/.next/server/chunks/ssr/[externals]_fs_54ffce70._.js +3 -0
  51. package/.next/server/chunks/ssr/[externals]_fs_54ffce70._.js.map +1 -0
  52. package/.next/server/chunks/ssr/[externals]_transliteration_b8916dda._.js +3 -0
  53. package/.next/server/chunks/ssr/[externals]_transliteration_b8916dda._.js.map +1 -0
  54. package/.next/server/chunks/ssr/[root-of-the-server]__1115f13a._.js +3 -0
  55. package/.next/server/chunks/ssr/[root-of-the-server]__1115f13a._.js.map +1 -0
  56. package/.next/server/chunks/ssr/[root-of-the-server]__421f2b10._.js +3 -0
  57. package/.next/server/chunks/ssr/[root-of-the-server]__421f2b10._.js.map +1 -0
  58. package/.next/server/chunks/ssr/[root-of-the-server]__b87cf431._.js +3 -0
  59. package/.next/server/chunks/ssr/[root-of-the-server]__b87cf431._.js.map +1 -0
  60. package/.next/server/chunks/ssr/[root-of-the-server]__bdcde4df._.js +5 -0
  61. package/.next/server/chunks/ssr/[root-of-the-server]__bdcde4df._.js.map +1 -0
  62. package/.next/server/chunks/ssr/[root-of-the-server]__c803ce2b._.js +3 -0
  63. package/.next/server/chunks/ssr/[root-of-the-server]__c803ce2b._.js.map +1 -0
  64. package/.next/server/chunks/ssr/[turbopack]_runtime.js +770 -0
  65. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
  66. package/.next/server/chunks/ssr/scrabble-solver_1bf76a93._.js +3 -0
  67. package/.next/server/chunks/ssr/scrabble-solver_1bf76a93._.js.map +1 -0
  68. package/.next/server/chunks/ssr/scrabble-solver_a6d23152._.js +8 -0
  69. package/.next/server/chunks/ssr/scrabble-solver_a6d23152._.js.map +1 -0
  70. package/.next/server/chunks/ssr/scrabble-solver_packages_scrabble-solver_src_i18n_languages_1f0474f1._.js +3 -0
  71. package/.next/server/chunks/ssr/scrabble-solver_packages_scrabble-solver_src_i18n_languages_1f0474f1._.js.map +1 -0
  72. package/.next/server/middleware-build-manifest.js +40 -1
  73. package/.next/server/middleware-manifest.json +2 -2
  74. package/.next/server/next-font-manifest.js +1 -1
  75. package/.next/server/next-font-manifest.json +6 -1
  76. package/.next/server/pages/404.html +1 -1
  77. package/.next/server/pages/500.html +1 -1
  78. package/.next/server/pages/_app/build-manifest.json +18 -0
  79. package/.next/server/pages/_app/client-build-manifest.json +5 -0
  80. package/.next/server/pages/_app/next-font-manifest.json +6 -0
  81. package/.next/server/pages/_app/pages-manifest.json +3 -0
  82. package/.next/server/pages/_app/react-loadable-manifest.json +1 -0
  83. package/.next/server/pages/_app.js +6 -1
  84. package/.next/server/pages/_app.js.map +5 -0
  85. package/.next/server/pages/_app.js.nft.json +1 -1
  86. package/.next/server/pages/_document/next-font-manifest.json +6 -0
  87. package/.next/server/pages/_document/pages-manifest.json +3 -0
  88. package/.next/server/pages/_document/react-loadable-manifest.json +1 -0
  89. package/.next/server/pages/_document.js +5 -1
  90. package/.next/server/pages/_document.js.map +5 -0
  91. package/.next/server/pages/_document.js.nft.json +1 -1
  92. package/.next/server/pages/_error/build-manifest.json +15 -0
  93. package/.next/server/pages/_error/client-build-manifest.json +5 -0
  94. package/.next/server/pages/_error/next-font-manifest.json +6 -0
  95. package/.next/server/pages/_error/pages-manifest.json +3 -0
  96. package/.next/server/pages/_error/react-loadable-manifest.json +1 -0
  97. package/.next/server/pages/_error.js +10 -1
  98. package/.next/server/pages/_error.js.map +5 -0
  99. package/.next/server/pages/_error.js.nft.json +1 -1
  100. package/.next/server/pages/api/dictionary/[locale]/[word]/pages-manifest.json +3 -0
  101. package/.next/server/pages/api/dictionary/[locale]/[word].js +8 -2
  102. package/.next/server/pages/api/dictionary/[locale]/[word].js.map +5 -0
  103. package/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  104. package/.next/server/pages/api/dictionary/[locale]/pages-manifest.json +3 -0
  105. package/.next/server/pages/api/dictionary/[locale].js +6 -1
  106. package/.next/server/pages/api/dictionary/[locale].js.map +5 -0
  107. package/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  108. package/.next/server/pages/api/solve/pages-manifest.json +3 -0
  109. package/.next/server/pages/api/solve.js +8 -1
  110. package/.next/server/pages/api/solve.js.map +5 -0
  111. package/.next/server/pages/api/solve.js.nft.json +1 -1
  112. package/.next/server/pages/api/verify/pages-manifest.json +3 -0
  113. package/.next/server/pages/api/verify.js +7 -1
  114. package/.next/server/pages/api/verify.js.map +5 -0
  115. package/.next/server/pages/api/verify.js.nft.json +1 -1
  116. package/.next/server/pages/api/visit/pages-manifest.json +3 -0
  117. package/.next/server/pages/api/visit.js +5 -1
  118. package/.next/server/pages/api/visit.js.map +5 -0
  119. package/.next/server/pages/api/visit.js.nft.json +1 -1
  120. package/.next/server/pages/index/build-manifest.json +18 -0
  121. package/.next/server/pages/index/client-build-manifest.json +5 -0
  122. package/.next/server/pages/index/next-font-manifest.json +6 -0
  123. package/.next/server/pages/index/pages-manifest.json +3 -0
  124. package/.next/server/pages/index/react-loadable-manifest.json +1 -0
  125. package/.next/server/pages/index.html +1 -1
  126. package/.next/server/pages/index.js +11 -1
  127. package/.next/server/pages/index.js.map +5 -0
  128. package/.next/server/pages/index.js.nft.json +1 -1
  129. package/.next/server/pages/index.json +1 -1
  130. package/.next/server/pages/not-found/build-manifest.json +17 -0
  131. package/.next/server/pages/not-found/client-build-manifest.json +5 -0
  132. package/.next/server/pages/not-found/next-font-manifest.json +6 -0
  133. package/.next/server/pages/not-found/pages-manifest.json +3 -0
  134. package/.next/server/pages/not-found/react-loadable-manifest.json +1 -0
  135. package/.next/server/pages/not-found.html +1 -0
  136. package/.next/server/pages/not-found.js.map +5 -0
  137. package/.next/server/pages/not-found.js.nft.json +1 -0
  138. package/.next/server/pages-manifest.json +6 -5
  139. package/.next/server/server-reference-manifest.js +1 -0
  140. package/.next/server/server-reference-manifest.json +5 -0
  141. package/.next/static/7kzTSHcrJ7tE47btIJcLO/_buildManifest.js +27 -0
  142. package/.next/static/chunks/060b82a3f336704f.js +3 -0
  143. package/.next/static/chunks/18159e87dc14f3cf.js +1 -0
  144. package/.next/static/chunks/27692b9d65f8b241.js +8 -0
  145. package/.next/static/chunks/2f5ae49118c8c86e.js +1 -0
  146. package/.next/static/chunks/339ed8704781040d.js +5 -0
  147. package/.next/static/chunks/3c8b810de7908416.js +3 -0
  148. package/.next/static/chunks/50e709cb7765c2f9.js +1 -0
  149. package/.next/static/chunks/69fdc9801e177051.js +1 -0
  150. package/.next/static/chunks/77bd0d5f1fb6eeba.js +3 -0
  151. package/.next/static/chunks/88b0985f454c1075.js +1 -0
  152. package/.next/static/chunks/95230bbbdd629d16.js +1 -0
  153. package/.next/static/chunks/997907c5fccf02bb.js +5 -0
  154. package/.next/static/chunks/9b2e7a689e581b58.js +7 -0
  155. package/.next/static/chunks/a4580bbcd72cf165.css +2 -0
  156. package/.next/static/chunks/e37c75eaddd8268a.css +47 -0
  157. package/.next/static/chunks/e75d2aeb209c3d8c.js +8 -0
  158. package/.next/static/chunks/eebac312ab720248.js +1 -0
  159. package/.next/static/chunks/turbopack-3eaa540498b1c1e9.js +3 -0
  160. package/.next/static/chunks/turbopack-6422aba52462ed1d.js +3 -0
  161. package/.next/static/chunks/turbopack-c70c4122d677e1a8.js +3 -0
  162. package/.next/static/chunks/turbopack-cc316a12eadf598b.js +3 -0
  163. package/.next/trace +1 -24
  164. package/.next/trace-build +1 -0
  165. package/.next/turbopack +0 -0
  166. package/.next/types/routes.d.ts +57 -0
  167. package/.next/types/validator.ts +106 -0
  168. package/next-env.d.ts +1 -0
  169. package/next.config.js +9 -32
  170. package/package.json +27 -27
  171. package/src/components/Modal/Modal.tsx +1 -0
  172. package/src/components/Results/Result.tsx +13 -17
  173. package/src/components/Results/Results.tsx +23 -24
  174. package/src/hooks/useMedia.ts +1 -0
  175. package/src/pages/_app.tsx +1 -1
  176. package/src/pages/{404.tsx → not-found.tsx} +2 -0
  177. package/src/state/cellFilters/slice.ts +1 -2
  178. package/src/state/settings/selectors.ts +0 -1
  179. package/src/styles/global.scss +1 -1
  180. package/src/styles/variables.scss +2 -2
  181. package/.next/cache/webpack/client-production/0.pack +0 -0
  182. package/.next/cache/webpack/client-production/index.pack +0 -0
  183. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  184. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  185. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  186. package/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  187. package/.next/cache/webpack/server-production/0.pack +0 -0
  188. package/.next/cache/webpack/server-production/index.pack +0 -0
  189. package/.next/cache/webpack/server-production/index.pack.old +0 -0
  190. package/.next/server/InjectManifest.js.nft.json +0 -1
  191. package/.next/server/chunks/106.js +0 -1
  192. package/.next/server/chunks/30.js +0 -6
  193. package/.next/server/chunks/318.js +0 -1
  194. package/.next/server/chunks/50.js +0 -19
  195. package/.next/server/chunks/812.js +0 -1
  196. package/.next/server/chunks/929.js +0 -1
  197. package/.next/server/chunks/974.js +0 -1
  198. package/.next/server/dynamic-css-manifest.js +0 -1
  199. package/.next/server/middleware-react-loadable-manifest.js +0 -1
  200. package/.next/server/pages/404.js.nft.json +0 -1
  201. package/.next/server/webpack-api-runtime.js +0 -1
  202. package/.next/server/webpack-runtime.js +0 -1
  203. package/.next/static/MhrqAqLI9_L8obb7tgjvi/_buildManifest.js +0 -1
  204. package/.next/static/chunks/framework-aad31c68dd0bb0ea.js +0 -1
  205. package/.next/static/chunks/main-eab5847b41f0af4a.js +0 -1
  206. package/.next/static/chunks/pages/404-04457ede98c6b53e.js +0 -1
  207. package/.next/static/chunks/pages/_app-bf81f201c021fdc1.js +0 -1
  208. package/.next/static/chunks/pages/_error-a9800cedd835bcad.js +0 -1
  209. package/.next/static/chunks/pages/index-79a390f3c2a2499f.js +0 -1
  210. package/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  211. package/.next/static/chunks/webpack-6224d37324e372cb.js +0 -1
  212. package/.next/static/css/04a3767982ec10e8.css +0 -1
  213. package/.next/static/css/1fae874a25934f54.css +0 -2
  214. /package/.next/{react-loadable-manifest.json → server/app-paths-manifest.json} +0 -0
  215. /package/.next/{dynamic-css-manifest.json → static/7kzTSHcrJ7tE47btIJcLO/_clientMiddlewareManifest.json} +0 -0
  216. /package/.next/static/{MhrqAqLI9_L8obb7tgjvi → 7kzTSHcrJ7tE47btIJcLO}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ [{"name":"run-typescript","duration":2175226,"timestamp":7353403028,"id":13,"parentId":1,"tags":{},"startTime":1765217409878,"traceId":"2c6a9b8e4b3b2cff"},{"name":"run-turbopack","duration":2334309,"timestamp":7355580124,"id":15,"parentId":1,"tags":{},"startTime":1765217412055,"traceId":"2c6a9b8e4b3b2cff"},{"name":"static-check","duration":193050,"timestamp":7358348351,"id":17,"parentId":1,"tags":{},"startTime":1765217414823,"traceId":"2c6a9b8e4b3b2cff"},{"name":"static-generation","duration":568678,"timestamp":7358543899,"id":34,"parentId":1,"tags":{},"startTime":1765217415018,"traceId":"2c6a9b8e4b3b2cff"},{"name":"telemetry-flush","duration":25,"timestamp":7359120410,"id":45,"parentId":1,"tags":{},"startTime":1765217415595,"traceId":"2c6a9b8e4b3b2cff"},{"name":"next-build","duration":5923308,"timestamp":7353197131,"id":1,"tags":{"buildMode":"default","version":"16.0.7","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1765217409672,"traceId":"2c6a9b8e4b3b2cff"}]
File without changes
@@ -0,0 +1,57 @@
1
+ // This file is generated automatically by Next.js
2
+ // Do not edit this file manually
3
+
4
+ type AppRoutes = never
5
+ type PageRoutes = "/" | "/not-found"
6
+ type LayoutRoutes = never
7
+ type RedirectRoutes = never
8
+ type RewriteRoutes = never
9
+ type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRoutes
10
+
11
+
12
+ interface ParamMap {
13
+ "/": {}
14
+ "/not-found": {}
15
+ }
16
+
17
+
18
+ export type ParamsOf<Route extends Routes> = ParamMap[Route]
19
+
20
+ interface LayoutSlotMap {
21
+ }
22
+
23
+
24
+ export type { AppRoutes, PageRoutes, LayoutRoutes, RedirectRoutes, RewriteRoutes, ParamMap }
25
+
26
+ declare global {
27
+ /**
28
+ * Props for Next.js App Router page components
29
+ * @example
30
+ * ```tsx
31
+ * export default function Page(props: PageProps<'/blog/[slug]'>) {
32
+ * const { slug } = await props.params
33
+ * return <div>Blog post: {slug}</div>
34
+ * }
35
+ * ```
36
+ */
37
+ interface PageProps<AppRoute extends AppRoutes> {
38
+ params: Promise<ParamMap[AppRoute]>
39
+ searchParams: Promise<Record<string, string | string[] | undefined>>
40
+ }
41
+
42
+ /**
43
+ * Props for Next.js App Router layout components
44
+ * @example
45
+ * ```tsx
46
+ * export default function Layout(props: LayoutProps<'/dashboard'>) {
47
+ * return <div>{props.children}</div>
48
+ * }
49
+ * ```
50
+ */
51
+ type LayoutProps<LayoutRoute extends LayoutRoutes> = {
52
+ params: Promise<ParamMap[LayoutRoute]>
53
+ children: React.ReactNode
54
+ } & {
55
+ [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
56
+ }
57
+ }
@@ -0,0 +1,106 @@
1
+ // This file is generated automatically by Next.js
2
+ // Do not edit this file manually
3
+ // This file validates that all pages and layouts export the correct types
4
+
5
+
6
+ import type { NextApiHandler } from "next/types.js"
7
+
8
+ type PagesPageConfig = {
9
+ default: React.ComponentType<any> | ((props: any) => React.ReactNode | Promise<React.ReactNode> | never | void)
10
+ getStaticProps?: (context: any) => Promise<any> | any
11
+ getStaticPaths?: (context: any) => Promise<any> | any
12
+ getServerSideProps?: (context: any) => Promise<any> | any
13
+ getInitialProps?: (context: any) => Promise<any> | any
14
+ /**
15
+ * Segment configuration for legacy Pages Router pages.
16
+ * Validated at build-time by parsePagesSegmentConfig.
17
+ */
18
+ config?: {
19
+ maxDuration?: number
20
+ runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const
21
+ regions?: string[]
22
+ }
23
+ }
24
+
25
+ type ApiRouteConfig = {
26
+ default: (req: any, res: any) => ReturnType<NextApiHandler>
27
+ config?: {
28
+ api?: {
29
+ bodyParser?: boolean | { sizeLimit?: string }
30
+ responseLimit?: string | number | boolean
31
+ externalResolver?: boolean
32
+ }
33
+ runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const
34
+ maxDuration?: number
35
+ }
36
+ }
37
+
38
+
39
+
40
+
41
+
42
+
43
+ // Validate ../../src/pages/index.tsx
44
+ {
45
+ type __IsExpected<Specific extends PagesPageConfig> = Specific
46
+ const handler = {} as typeof import("../../src/pages/index.js")
47
+ type __Check = __IsExpected<typeof handler>
48
+ // @ts-ignore
49
+ type __Unused = __Check
50
+ }
51
+
52
+ // Validate ../../src/pages/not-found.tsx
53
+ {
54
+ type __IsExpected<Specific extends PagesPageConfig> = Specific
55
+ const handler = {} as typeof import("../../src/pages/not-found.js")
56
+ type __Check = __IsExpected<typeof handler>
57
+ // @ts-ignore
58
+ type __Unused = __Check
59
+ }
60
+
61
+ // Validate ../../src/pages/api/dictionary/[locale]/[word].ts
62
+ {
63
+ type __IsExpected<Specific extends ApiRouteConfig> = Specific
64
+ const handler = {} as typeof import("../../src/pages/api/dictionary/[locale]/[word].js")
65
+ type __Check = __IsExpected<typeof handler>
66
+ // @ts-ignore
67
+ type __Unused = __Check
68
+ }
69
+
70
+ // Validate ../../src/pages/api/dictionary/[locale]/index.ts
71
+ {
72
+ type __IsExpected<Specific extends ApiRouteConfig> = Specific
73
+ const handler = {} as typeof import("../../src/pages/api/dictionary/[locale]/index.js")
74
+ type __Check = __IsExpected<typeof handler>
75
+ // @ts-ignore
76
+ type __Unused = __Check
77
+ }
78
+
79
+ // Validate ../../src/pages/api/solve.ts
80
+ {
81
+ type __IsExpected<Specific extends ApiRouteConfig> = Specific
82
+ const handler = {} as typeof import("../../src/pages/api/solve.js")
83
+ type __Check = __IsExpected<typeof handler>
84
+ // @ts-ignore
85
+ type __Unused = __Check
86
+ }
87
+
88
+ // Validate ../../src/pages/api/verify.ts
89
+ {
90
+ type __IsExpected<Specific extends ApiRouteConfig> = Specific
91
+ const handler = {} as typeof import("../../src/pages/api/verify.js")
92
+ type __Check = __IsExpected<typeof handler>
93
+ // @ts-ignore
94
+ type __Unused = __Check
95
+ }
96
+
97
+ // Validate ../../src/pages/api/visit.ts
98
+ {
99
+ type __IsExpected<Specific extends ApiRouteConfig> = Specific
100
+ const handler = {} as typeof import("../../src/pages/api/visit.js")
101
+ type __Check = __IsExpected<typeof handler>
102
+ // @ts-ignore
103
+ type __Unused = __Check
104
+ }
105
+
106
+
package/next-env.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /// <reference types="next" />
2
2
  /// <reference types="next/image-types/global" />
3
+ import "./.next/types/routes.d.ts";
3
4
 
4
5
  // NOTE: This file should not be edited
5
6
  // see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.
package/next.config.js CHANGED
@@ -1,48 +1,25 @@
1
1
  /* eslint-disable @typescript-eslint/no-var-requires */
2
2
 
3
- const fs = require('fs');
4
3
  const path = require('path');
5
4
  const WorkboxPlugin = require('workbox-webpack-plugin');
6
5
 
7
- const tsConfig = fs.readFileSync(path.resolve(__dirname, 'tsconfig.json'), 'utf-8');
8
- const tsConfigJson = JSON.parse(tsConfig);
9
- const tsConfigAliases = Object.keys(tsConfigJson.compilerOptions.paths).reduce(
10
- (result, key) => ({
11
- ...result,
12
- [key]: path.resolve(__dirname, tsConfigJson.compilerOptions.paths[key][0]),
13
- }),
14
- {},
15
- );
16
-
17
6
  module.exports = {
18
7
  compress: false,
19
8
  eslint: {
20
9
  ignoreDuringBuilds: true,
21
10
  },
22
11
  reactStrictMode: true,
23
- webpack: (config) => ({
24
- ...config,
25
- resolve: {
26
- ...config.resolve,
27
- alias: {
28
- ...config.resolve.alias,
29
- ...tsConfigAliases,
12
+ sassOptions: {
13
+ loadPaths: ['./src', path.join(__dirname, '../../node_modules/include-media/dist')],
14
+ },
15
+ turbopack: {
16
+ rules: {
17
+ '*.svg': {
18
+ loaders: ['@svgr/webpack'],
19
+ as: '*.js',
30
20
  },
31
21
  },
32
- module: {
33
- ...config.module,
34
- rules: [
35
- ...config.module.rules,
36
- {
37
- test: /\.svg$/,
38
- include: [path.resolve(__dirname, 'src/icons')],
39
- issuer: /\.tsx?$/,
40
- use: ['@svgr/webpack'],
41
- },
42
- ],
43
- },
44
22
  plugins: [
45
- ...config.plugins,
46
23
  process.env.NODE_ENV === 'production'
47
24
  ? new WorkboxPlugin.InjectManifest({
48
25
  swSrc: path.join(__dirname, 'src/service-worker/index.ts'),
@@ -51,5 +28,5 @@ module.exports = {
51
28
  })
52
29
  : undefined,
53
30
  ].filter(Boolean),
54
- }),
31
+ },
55
32
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/scrabble-solver",
3
- "version": "2.15.13",
3
+ "version": "2.15.15",
4
4
  "description": "Scrabble Solver 2 - App",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,52 +25,52 @@
25
25
  "type-check": "tsc --noEmit"
26
26
  },
27
27
  "dependencies": {
28
- "@floating-ui/react": "^0.27.13",
28
+ "@floating-ui/react": "^0.27.16",
29
29
  "@kamilmielnik/trie": "^4.0.0",
30
- "@reduxjs/toolkit": "^2.8.2",
31
- "@scrabble-solver/configs": "^2.15.13",
32
- "@scrabble-solver/constants": "^2.15.13",
33
- "@scrabble-solver/dictionaries": "^2.15.13",
34
- "@scrabble-solver/logger": "^2.15.13",
35
- "@scrabble-solver/solver": "^2.15.13",
36
- "@scrabble-solver/types": "^2.15.13",
37
- "@scrabble-solver/word-definitions": "^2.15.13",
30
+ "@reduxjs/toolkit": "^2.11.1",
31
+ "@scrabble-solver/configs": "^2.15.15",
32
+ "@scrabble-solver/constants": "^2.15.15",
33
+ "@scrabble-solver/dictionaries": "^2.15.15",
34
+ "@scrabble-solver/logger": "^2.15.15",
35
+ "@scrabble-solver/solver": "^2.15.15",
36
+ "@scrabble-solver/types": "^2.15.15",
37
+ "@scrabble-solver/word-definitions": "^2.15.15",
38
38
  "classnames": "^2.5.1",
39
- "env-cmd": "^10.1.0",
39
+ "env-cmd": "^11.0.0",
40
40
  "include-media": "^2.0.0",
41
41
  "include-media-query-builder": "^1.1.0",
42
- "next": "^15.4.2",
42
+ "next": "^16.0.7",
43
43
  "normalize.css": "^8.0.1",
44
- "react": "^19.1.0",
44
+ "react": "^19.2.1",
45
45
  "react-cool-onclickoutside": "^1.7.0",
46
- "react-dom": "^19.1.0",
46
+ "react-dom": "^19.2.1",
47
47
  "react-highlight-words": "^0.21.0",
48
48
  "react-modal": "^3.16.3",
49
49
  "react-redux": "^9.2.0",
50
- "react-window": "^1.8.11",
51
- "redux-saga": "^1.3.0",
50
+ "react-window": "^2.2.3",
51
+ "redux-saga": "^1.4.2",
52
52
  "store2": "^2.14.4",
53
53
  "transliteration": "^2.3.5",
54
- "use-debounce": "^10.0.5",
55
- "workbox-expiration": "^7.3.0",
56
- "workbox-precaching": "^7.3.0",
57
- "workbox-routing": "^7.3.0",
58
- "workbox-webpack-plugin": "^7.3.0",
59
- "workbox-window": "^7.3.0"
54
+ "use-debounce": "^10.0.6",
55
+ "workbox-expiration": "^7.4.0",
56
+ "workbox-precaching": "^7.4.0",
57
+ "workbox-routing": "^7.4.0",
58
+ "workbox-webpack-plugin": "^7.4.0",
59
+ "workbox-window": "^7.4.0"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@svgr/webpack": "^8.1.0",
63
63
  "@types/classnames": "^2.3.4",
64
- "@types/react": "^19.1.8",
65
- "@types/react-dom": "^19.1.6",
64
+ "@types/react": "^19.2.7",
65
+ "@types/react-dom": "^19.2.3",
66
66
  "@types/react-highlight-words": "^0.20.0",
67
67
  "@types/react-modal": "^3.16.3",
68
68
  "@types/react-portal": "^4.0.7",
69
69
  "@types/react-redux": "^7.1.34",
70
- "@types/react-window": "^1.8.8",
70
+ "@types/react-window": "^2.0.0",
71
71
  "@types/redux": "^3.6.31",
72
72
  "@types/redux-saga": "^0.10.5",
73
- "sass": "^1.89.2"
73
+ "sass": "^1.94.2"
74
74
  },
75
- "gitHead": "fd3e02f7051acdb8cc6dd138a959679bc00f1ed6"
75
+ "gitHead": "5035e8363c499f920bec5790467723a4d0d9a4c7"
76
76
  }
@@ -46,6 +46,7 @@ const ModalBase: FunctionComponent<Props> = ({ children, className, footer, isOp
46
46
 
47
47
  useEffect(() => {
48
48
  if (isOpen) {
49
+ // eslint-disable-next-line react-hooks/set-state-in-effect
49
50
  setShouldReturnFocusAfterClose(true);
50
51
  }
51
52
  }, [isOpen]);
@@ -1,6 +1,7 @@
1
1
  import classNames from 'classnames';
2
- import { type CSSProperties, type FocusEventHandler, type MouseEventHandler, type ReactElement, useRef } from 'react';
2
+ import { type FocusEventHandler, type MouseEventHandler, type ReactElement, useRef } from 'react';
3
3
  import Highlighter from 'react-highlight-words';
4
+ import { type RowComponentProps } from 'react-window';
4
5
 
5
6
  import { useAppLayout, useColumns } from 'hooks';
6
7
  import { LOCALE_FEATURES } from 'i18n';
@@ -18,22 +19,17 @@ import { Cell } from './Cell';
18
19
  import styles from './Results.module.scss';
19
20
  import { type ResultData } from './types';
20
21
 
21
- interface Props {
22
- data: ResultData;
23
- index: number;
24
- style?: CSSProperties;
25
- }
26
-
27
- export const Result = ({ data, index, style }: Props): ReactElement => {
28
- const {
29
- highlightedIndex,
30
- results = [],
31
- onBlur = noop,
32
- onClick = noop,
33
- onFocus = noop,
34
- onMouseEnter = noop,
35
- onMouseLeave = noop,
36
- } = data;
22
+ export const Result = ({
23
+ index,
24
+ highlightedIndex,
25
+ results = [],
26
+ onBlur = noop,
27
+ onClick = noop,
28
+ onFocus = noop,
29
+ onMouseEnter = noop,
30
+ onMouseLeave = noop,
31
+ style,
32
+ }: RowComponentProps<ResultData>): ReactElement => {
37
33
  const { resultWordWidth } = useAppLayout();
38
34
  const ref = useRef<HTMLButtonElement>(null);
39
35
  const columns = useColumns();
@@ -1,17 +1,17 @@
1
1
  import classNames from 'classnames';
2
- import { type FunctionComponent, useEffect, useMemo, useState } from 'react';
3
- import { FixedSizeList } from 'react-window';
2
+ import { useEffect, useMemo, type FunctionComponent } from 'react';
3
+ import { List, useListRef } from 'react-window';
4
4
  import { useDebounce } from 'use-debounce';
5
5
 
6
- import { useAppLayout, useLatest } from 'hooks';
6
+ import { useLatest } from 'hooks';
7
7
  import { LOCALE_FEATURES } from 'i18n';
8
- import { BORDER_WIDTH, RESULTS_HEADER_HEIGHT, RESULTS_ITEM_HEIGHT, TEXT_INPUT_HEIGHT } from 'parameters';
8
+ import { RESULTS_ITEM_HEIGHT } from 'parameters';
9
9
  import {
10
10
  selectAreResultsOutdated,
11
- selectSolveIsLoading,
12
11
  selectLocale,
13
12
  selectProcessedResults,
14
13
  selectSolveError,
14
+ selectSolveIsLoading,
15
15
  useTranslate,
16
16
  useTypedSelector,
17
17
  } from 'state';
@@ -36,7 +36,6 @@ const IS_LOADING_DEBOUNCE = 100;
36
36
 
37
37
  export const Results: FunctionComponent<Props> = ({ callbacks, className, highlightedIndex }) => {
38
38
  const translate = useTranslate();
39
- const { resultsHeight, resultsWidth } = useAppLayout();
40
39
  const locale = useTypedSelector(selectLocale);
41
40
  const { direction } = LOCALE_FEATURES[locale];
42
41
  const results = useTypedSelector(selectProcessedResults);
@@ -44,22 +43,25 @@ export const Results: FunctionComponent<Props> = ({ callbacks, className, highli
44
43
  const [isLoadingDebounced] = useDebounce(isLoading, IS_LOADING_DEBOUNCE);
45
44
  const isOutdated = useTypedSelector(selectAreResultsOutdated);
46
45
  const error = useTypedSelector(selectSolveError);
47
- const itemData = useMemo(() => ({ ...callbacks, highlightedIndex, results }), [callbacks, highlightedIndex, results]);
48
- const [listRef, setListRef] = useState<FixedSizeList<ResultData> | null>(null);
46
+ const itemData = useMemo<ResultData>(
47
+ () => ({ ...callbacks, highlightedIndex, results }),
48
+ [callbacks, highlightedIndex, results],
49
+ );
50
+ const listRef = useListRef(null);
49
51
  const scrollToIndex = typeof highlightedIndex === 'number' ? highlightedIndex : 0;
50
52
  const scrollToIndexRef = useLatest(scrollToIndex);
51
53
  const hasResults = typeof error === 'undefined' && typeof results !== 'undefined';
52
54
  const showInput = hasResults && results.length > 0 && !isOutdated;
53
- const height = resultsHeight - RESULTS_HEADER_HEIGHT - (showInput ? TEXT_INPUT_HEIGHT : 0) - 2 * BORDER_WIDTH;
54
- const width = resultsWidth - 2 * BORDER_WIDTH;
55
55
 
56
56
  useEffect(() => {
57
57
  // without setTimeout, the initial scrolling offset is calculated
58
58
  // incorrectly, as the list is not fully rendered by the browser yet
59
59
  const timeout = globalThis.setTimeout(() => {
60
- if (listRef) {
61
- listRef.scrollToItem(scrollToIndexRef.current, 'center');
62
- }
60
+ listRef.current?.scrollToRow({
61
+ align: 'center',
62
+ behavior: 'instant',
63
+ index: scrollToIndexRef.current,
64
+ });
63
65
  }, 0);
64
66
 
65
67
  return () => {
@@ -104,20 +106,17 @@ export const Results: FunctionComponent<Props> = ({ callbacks, className, highli
104
106
 
105
107
  {!isOutdated && results.length > 0 && (
106
108
  <div className={styles.listContainer}>
107
- <FixedSizeList
109
+ <List
108
110
  className={classNames(styles.list, {
109
111
  [styles.outdated]: isOutdated,
110
112
  })}
111
- direction={direction}
112
- height={height}
113
- itemCount={results.length}
114
- itemData={itemData}
115
- itemSize={RESULTS_ITEM_HEIGHT}
116
- ref={setListRef}
117
- width={width}
118
- >
119
- {Result}
120
- </FixedSizeList>
113
+ dir={direction}
114
+ listRef={listRef}
115
+ rowComponent={Result}
116
+ rowCount={results.length}
117
+ rowHeight={RESULTS_ITEM_HEIGHT}
118
+ rowProps={itemData}
119
+ />
121
120
  </div>
122
121
  )}
123
122
  </>
@@ -22,6 +22,7 @@ export const useMedia = (query: string, defaultState?: boolean) => {
22
22
  setState(mediaQuery.matches);
23
23
  };
24
24
 
25
+ // eslint-disable-next-line react-hooks/set-state-in-effect
25
26
  setState(mediaQuery.matches);
26
27
  mediaQuery.addEventListener('change', handleChange);
27
28
 
@@ -7,7 +7,7 @@ import { Provider } from 'react-redux';
7
7
  import { SeoMessage } from 'components';
8
8
  import { store } from 'state';
9
9
 
10
- import 'styles/global.scss';
10
+ import '../styles/global.scss';
11
11
 
12
12
  const DESCRIPTION =
13
13
  // eslint-disable-next-line max-len
@@ -1,3 +1,5 @@
1
+ 'use-client';
2
+
1
3
  import { NotFound } from 'components';
2
4
 
3
5
  export default NotFound;
@@ -41,8 +41,7 @@ export const cellFiltersSlice = createSlice({
41
41
 
42
42
  removeCells: (state, action: PayloadAction<Cell[]>) => {
43
43
  const cellsToRemove = action.payload;
44
- return state.filter((entry) =>
45
- cellsToRemove.every((cell) => cell.x !== entry.x || cell.y !== entry.y));
44
+ return state.filter((entry) => cellsToRemove.every((cell) => cell.x !== entry.x || cell.y !== entry.y));
46
45
  },
47
46
 
48
47
  reset: () => cellFiltersInitialState,
@@ -66,4 +66,3 @@ export const selectCellIsValid = createSelector([selectConfig, selectCell], (con
66
66
  export const selectTranslations = createSelector([selectLocale], (locale) => i18n[locale]);
67
67
 
68
68
  export const selectRemoveCellFilters = createSelector([selectSettings], (settings) => settings.removeCellFilters);
69
-
@@ -1,4 +1,4 @@
1
- @import '~normalize.css';
1
+ @import 'normalize.css';
2
2
 
3
3
  @import './mixins';
4
4
  @import './variables';
@@ -62,8 +62,8 @@ $easeOutSine: cubic-bezier(0.61, 1, 0.88, 1);
62
62
  --color--tooltip--foreground: var(--color--white);
63
63
 
64
64
  --font--family: system-ui, sans-serif;
65
- --font--family--monospace: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono',
66
- monospace;
65
+ --font--family--monospace:
66
+ ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
67
67
  --font--size--h1: 30px;
68
68
  --font--size--h2: 22px;
69
69
  --font--size--h3: 18px;
@@ -1 +0,0 @@
1
- {"version":1,"files":["../../public/service-worker.js"]}