scrabble-solver 2.16.7 → 2.17.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.
Files changed (276) hide show
  1. package/.nx/workspace-data/d/server-process.json +2 -2
  2. package/.nx/workspace-data/file-map.json +548 -572
  3. package/.nx/workspace-data/lockfile-dependencies.hash +1 -1
  4. package/.nx/workspace-data/lockfile-nodes.hash +1 -1
  5. package/.nx/workspace-data/nx_files.nxt +0 -0
  6. package/.nx/workspace-data/parsed-lock-file.dependencies.json +185 -160
  7. package/.nx/workspace-data/parsed-lock-file.nodes.json +406 -370
  8. package/.nx/workspace-data/project-graph.json +656 -552
  9. package/.nx/workspace-data/source-maps.json +96 -0
  10. package/.oxlintrc.json +6 -0
  11. package/CLAUDE.md +22 -17
  12. package/README.md +9 -0
  13. package/bun.lock +107 -133
  14. package/cypress/e2e/app.spec.cy.ts +4 -4
  15. package/cypress/e2e/features/solver-paths.ts +66 -0
  16. package/cypress/e2e/features.spec.cy.ts +1 -0
  17. package/cypress/support/lib/actions.ts +28 -9
  18. package/lerna.json +1 -1
  19. package/package.json +8 -7
  20. package/packages/configs/package.json +3 -3
  21. package/packages/constants/package.json +1 -1
  22. package/packages/dictionaries/README.md +1 -1
  23. package/packages/dictionaries/build/Dictionaries.d.ts +2 -2
  24. package/packages/dictionaries/build/Dictionaries.js +6 -6
  25. package/packages/dictionaries/build/lib/DiskCache.d.ts +11 -4
  26. package/packages/dictionaries/build/lib/DiskCache.js +27 -10
  27. package/packages/dictionaries/build/lib/LayeredCache.d.ts +4 -4
  28. package/packages/dictionaries/build/lib/LayeredCache.js +3 -3
  29. package/packages/dictionaries/build/lib/MemoryCache.d.ts +4 -4
  30. package/packages/dictionaries/build/lib/MemoryCache.js +2 -2
  31. package/packages/dictionaries/build/lib/createCacheTimestampComparator.d.ts +2 -2
  32. package/packages/dictionaries/build/lib/downloadDictionary.d.ts +2 -2
  33. package/packages/dictionaries/build/lib/downloadDictionary.js +4 -3
  34. package/packages/dictionaries/build/lib/getDictionaryFilepath.d.ts +3 -1
  35. package/packages/dictionaries/build/lib/getDictionaryFilepath.js +8 -3
  36. package/packages/dictionaries/package.json +7 -6
  37. package/packages/dictionaries/src/Dictionaries.ts +12 -12
  38. package/packages/dictionaries/src/lib/DiskCache.test.ts +85 -0
  39. package/packages/dictionaries/src/lib/DiskCache.ts +34 -14
  40. package/packages/dictionaries/src/lib/LayeredCache.ts +7 -7
  41. package/packages/dictionaries/src/lib/MemoryCache.ts +6 -6
  42. package/packages/dictionaries/src/lib/createCacheTimestampComparator.ts +2 -2
  43. package/packages/dictionaries/src/lib/downloadDictionary.ts +5 -4
  44. package/packages/dictionaries/src/lib/getDictionaryFilepath.ts +7 -2
  45. package/packages/gaddag/build/Gaddag.d.ts +39 -0
  46. package/packages/gaddag/build/Gaddag.js +128 -0
  47. package/packages/gaddag/build/buildGaddag.d.ts +10 -0
  48. package/packages/gaddag/build/buildGaddag.js +360 -0
  49. package/packages/gaddag/build/constants.d.ts +12 -0
  50. package/packages/gaddag/build/constants.js +15 -0
  51. package/packages/gaddag/build/index.d.ts +3 -0
  52. package/packages/gaddag/build/index.js +13 -0
  53. package/packages/logger/package.json +1 -1
  54. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  55. package/packages/scrabble-solver/.next/build-manifest.json +13 -13
  56. package/packages/scrabble-solver/.next/cache/.previewinfo +1 -1
  57. package/packages/scrabble-solver/.next/cache/.rscinfo +1 -1
  58. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  59. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  60. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  61. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack.old +0 -0
  62. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  63. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  64. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  65. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  66. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack.old +0 -0
  67. package/packages/scrabble-solver/.next/diagnostics/framework.json +1 -1
  68. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  69. package/packages/scrabble-solver/.next/prerender-manifest.json +4 -4
  70. package/packages/scrabble-solver/.next/required-server-files.js +3 -2
  71. package/packages/scrabble-solver/.next/required-server-files.json +3 -2
  72. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  73. package/packages/scrabble-solver/.next/server/chunks/129.js +1 -0
  74. package/packages/scrabble-solver/.next/server/chunks/30.js +1 -1
  75. package/packages/scrabble-solver/.next/server/chunks/392.js +1 -1
  76. package/packages/scrabble-solver/.next/server/chunks/671.js +1 -1
  77. package/packages/scrabble-solver/.next/server/chunks/712.js +1 -1
  78. package/packages/scrabble-solver/.next/server/chunks/785.js +1 -0
  79. package/packages/scrabble-solver/.next/server/chunks/791.js +1 -1
  80. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  81. package/packages/scrabble-solver/.next/server/pages/404.html +1 -1
  82. package/packages/scrabble-solver/.next/server/pages/500.html +1 -1
  83. package/packages/scrabble-solver/.next/server/pages/_app.js +1 -1
  84. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  85. package/packages/scrabble-solver/.next/server/pages/_error.js +1 -1
  86. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  87. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +1 -1
  88. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  89. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js +1 -1
  90. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  91. package/packages/scrabble-solver/.next/server/pages/api/solve.js +1 -1
  92. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  93. package/packages/scrabble-solver/.next/server/pages/api/verify.js +1 -1
  94. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
  95. package/packages/scrabble-solver/.next/server/pages/index.html +1 -1
  96. package/packages/scrabble-solver/.next/server/pages/index.js +1 -1
  97. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  98. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  99. package/packages/scrabble-solver/.next/server/pages/not-found.html +1 -1
  100. package/packages/scrabble-solver/.next/server/pages/not-found.js.nft.json +1 -1
  101. package/packages/scrabble-solver/.next/server/pages-manifest.json +1 -1
  102. package/packages/scrabble-solver/.next/server/webpack-runtime.js +1 -1
  103. package/packages/scrabble-solver/.next/static/{vYpMmuC_yEurZGcyGVnLf → OLE8_ZInlGH7ENU0NIOpf}/_buildManifest.js +1 -1
  104. package/packages/scrabble-solver/.next/static/chunks/583.7a46807be14c377e.js +1 -0
  105. package/packages/scrabble-solver/.next/static/chunks/830.661816bf0de8c2f1.js +1 -0
  106. package/packages/scrabble-solver/.next/static/chunks/{main-852475ca502b4e49.js → main-5b999f3f24ebfa84.js} +2 -2
  107. package/packages/scrabble-solver/.next/static/chunks/pages/_app-7024e7a27ffbb2fa.js +7 -0
  108. package/packages/scrabble-solver/.next/static/chunks/pages/{index-ec0f6aeeaf7be227.js → index-8b398b0a5d870773.js} +1 -1
  109. package/packages/scrabble-solver/.next/static/chunks/webpack-3943d624bbb47a64.js +1 -0
  110. package/packages/scrabble-solver/.next/static/css/aedeaada218d7280.css +2 -0
  111. package/packages/scrabble-solver/.next/trace +21 -21
  112. package/packages/scrabble-solver/.next/trace-build +1 -1
  113. package/packages/scrabble-solver/next.config.js +0 -6
  114. package/packages/scrabble-solver/package.json +10 -10
  115. package/packages/scrabble-solver/public/service-worker.js +2 -2
  116. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.tsx +4 -1
  117. package/packages/scrabble-solver/src/components/Board/hooks/useGrid.ts +17 -6
  118. package/packages/scrabble-solver/src/components/Dictionary/Dictionary.module.scss +7 -22
  119. package/packages/scrabble-solver/src/components/Dictionary/Dictionary.tsx +1 -8
  120. package/packages/scrabble-solver/src/components/Results/Result.tsx +0 -3
  121. package/packages/scrabble-solver/src/components/Results/Results.module.scss +0 -1
  122. package/packages/scrabble-solver/src/components/Results/Results.tsx +10 -2
  123. package/packages/scrabble-solver/src/components/Results/types.ts +3 -3
  124. package/packages/scrabble-solver/src/components/Solver/Solver.tsx +4 -3
  125. package/packages/scrabble-solver/src/components/Tooltip/useTooltip.ts +1 -1
  126. package/packages/scrabble-solver/src/pages/api/dictionary/[locale]/[word].ts +2 -2
  127. package/packages/scrabble-solver/src/pages/api/dictionary/[locale]/index.ts +80 -3
  128. package/packages/scrabble-solver/src/pages/api/solve.ts +2 -2
  129. package/packages/scrabble-solver/src/pages/api/verify.ts +12 -3
  130. package/packages/scrabble-solver/src/sdk/solve.ts +13 -7
  131. package/packages/scrabble-solver/src/sdk/verify.ts +12 -6
  132. package/packages/scrabble-solver/src/service-worker/appShell.test.ts +86 -0
  133. package/packages/scrabble-solver/src/service-worker/appShell.ts +39 -0
  134. package/packages/scrabble-solver/src/service-worker/index.ts +4 -5
  135. package/packages/scrabble-solver/src/serviceWorkerManager.ts +1 -18
  136. package/packages/scrabble-solver/src/solver-worker/client.test.ts +151 -0
  137. package/packages/scrabble-solver/src/solver-worker/client.ts +106 -0
  138. package/packages/scrabble-solver/src/solver-worker/dictionaries/constants.ts +9 -0
  139. package/packages/scrabble-solver/src/solver-worker/dictionaries/getDictionary.ts +21 -0
  140. package/packages/scrabble-solver/src/solver-worker/dictionaries/index.ts +2 -0
  141. package/packages/scrabble-solver/src/solver-worker/dictionaries/revalidateDictionary.test.ts +199 -0
  142. package/packages/scrabble-solver/src/solver-worker/dictionaries/revalidateDictionary.ts +86 -0
  143. package/packages/scrabble-solver/src/solver-worker/dictionaries/revalidatedAt.ts +43 -0
  144. package/packages/scrabble-solver/src/solver-worker/getGaddag.test.ts +109 -0
  145. package/packages/scrabble-solver/src/solver-worker/getGaddag.ts +62 -0
  146. package/packages/scrabble-solver/src/solver-worker/index.ts +1 -0
  147. package/packages/scrabble-solver/src/solver-worker/index.worker.ts +124 -0
  148. package/packages/scrabble-solver/src/solver-worker/messages.ts +20 -0
  149. package/packages/scrabble-solver/src/state/index.ts +1 -0
  150. package/packages/scrabble-solver/src/state/sagas.ts +19 -9
  151. package/packages/scrabble-solver/src/state/useTypedStore.ts +6 -0
  152. package/packages/scrabble-solver/src/types/api.ts +1 -2
  153. package/packages/scrabble-solver/tsconfig.json +4 -0
  154. package/packages/scrabble-solver/tsconfig.tsbuildinfo +1 -1
  155. package/packages/solver/README.md +24 -0
  156. package/packages/solver/benchmarks/index.ts +15 -0
  157. package/packages/solver/benchmarks/lib.ts +31 -0
  158. package/packages/solver/benchmarks/renderChart.ts +165 -0
  159. package/packages/solver/benchmarks/results/chart.svg +65 -0
  160. package/packages/solver/benchmarks/runBenchmarks.ts +66 -0
  161. package/packages/solver/benchmarks/scenarios.ts +64 -0
  162. package/packages/solver/benchmarks/types.ts +16 -0
  163. package/packages/solver/benchmarks/updateReadme.ts +53 -0
  164. package/packages/solver/build/MoveGenerator.d.ts +116 -0
  165. package/packages/solver/build/MoveGenerator.js +686 -0
  166. package/packages/solver/build/index.d.ts +0 -13
  167. package/packages/solver/build/index.js +1 -27
  168. package/packages/solver/build/solve.d.ts +2 -2
  169. package/packages/solver/build/solve.js +3 -19
  170. package/packages/solver/package.json +7 -6
  171. package/packages/solver/src/MoveGenerator.test.ts +1009 -0
  172. package/packages/solver/src/MoveGenerator.ts +926 -0
  173. package/packages/solver/src/ReferenceSolver.ts +401 -0
  174. package/packages/solver/src/index.ts +0 -13
  175. package/packages/solver/src/solve.test.ts +21 -21
  176. package/packages/solver/src/solve.ts +4 -22
  177. package/packages/solver/tsconfig.json +1 -1
  178. package/packages/types/build/Cell.d.ts +1 -0
  179. package/packages/types/build/Cell.js +3 -0
  180. package/packages/types/build/Result.d.ts +3 -2
  181. package/packages/types/build/Result.js +11 -6
  182. package/packages/types/build/ResultJson.d.ts +5 -4
  183. package/packages/types/build/index.d.ts +0 -6
  184. package/packages/types/build/index.js +1 -9
  185. package/packages/types/build/readResultCells.d.ts +5 -0
  186. package/packages/types/build/readResultCells.js +75 -0
  187. package/packages/types/package.json +4 -3
  188. package/packages/types/src/Cell.ts +4 -0
  189. package/packages/types/src/Result.ts +15 -6
  190. package/packages/types/src/ResultJson.ts +5 -5
  191. package/packages/types/src/index.ts +0 -6
  192. package/packages/types/src/readResultCells.test.ts +140 -0
  193. package/packages/types/src/readResultCells.ts +90 -0
  194. package/packages/word-definitions/package.json +2 -2
  195. package/packages/word-lists/package.json +2 -2
  196. package/packages/scrabble-solver/.next/static/chunks/pages/_app-a5bbe02710f13d05.js +0 -7
  197. package/packages/scrabble-solver/.next/static/chunks/webpack-1a7a166b34ed8d24.js +0 -1
  198. package/packages/scrabble-solver/.next/static/css/0af35adb4bab56f0.css +0 -2
  199. package/packages/scrabble-solver/src/sdk/getDictionary.ts +0 -9
  200. package/packages/scrabble-solver/src/service-worker/average.ts +0 -7
  201. package/packages/scrabble-solver/src/service-worker/dictionaries/constants.ts +0 -5
  202. package/packages/scrabble-solver/src/service-worker/dictionaries/getDictionary.ts +0 -20
  203. package/packages/scrabble-solver/src/service-worker/dictionaries/index.ts +0 -2
  204. package/packages/scrabble-solver/src/service-worker/dictionaries/revalidateDictionary.ts +0 -33
  205. package/packages/scrabble-solver/src/service-worker/getTrie.ts +0 -24
  206. package/packages/scrabble-solver/src/service-worker/routeSolveRequests.ts +0 -91
  207. package/packages/scrabble-solver/src/service-worker/routeVerifyRequests.ts +0 -37
  208. package/packages/solver/build/areDigraphsValid.d.ts +0 -2
  209. package/packages/solver/build/areDigraphsValid.js +0 -17
  210. package/packages/solver/build/fillPattern.d.ts +0 -6
  211. package/packages/solver/build/fillPattern.js +0 -52
  212. package/packages/solver/build/generateEndIndices.d.ts +0 -2
  213. package/packages/solver/build/generateEndIndices.js +0 -17
  214. package/packages/solver/build/generateHorizontalPatterns.d.ts +0 -2
  215. package/packages/solver/build/generateHorizontalPatterns.js +0 -16
  216. package/packages/solver/build/generatePattern.d.ts +0 -7
  217. package/packages/solver/build/generatePattern.js +0 -20
  218. package/packages/solver/build/generatePatterns.d.ts +0 -2
  219. package/packages/solver/build/generatePatterns.js +0 -11
  220. package/packages/solver/build/generateStartIndices.d.ts +0 -2
  221. package/packages/solver/build/generateStartIndices.js +0 -16
  222. package/packages/solver/build/generateVectors.d.ts +0 -7
  223. package/packages/solver/build/generateVectors.js +0 -7
  224. package/packages/solver/build/generateVerticalPatterns.d.ts +0 -2
  225. package/packages/solver/build/generateVerticalPatterns.js +0 -16
  226. package/packages/solver/build/getCellsScore.d.ts +0 -2
  227. package/packages/solver/build/getCellsScore.js +0 -18
  228. package/packages/solver/build/getPatternHash.d.ts +0 -2
  229. package/packages/solver/build/getPatternHash.js +0 -14
  230. package/packages/solver/build/getPatternScore.d.ts +0 -2
  231. package/packages/solver/build/getPatternScore.js +0 -22
  232. package/packages/solver/build/getUniquePatterns.d.ts +0 -2
  233. package/packages/solver/build/getUniquePatterns.js +0 -17
  234. package/packages/solver/src/areDigraphsValid.ts +0 -18
  235. package/packages/solver/src/fillPattern.test.ts +0 -107
  236. package/packages/solver/src/fillPattern.ts +0 -68
  237. package/packages/solver/src/generateEndIndices.test.ts +0 -23
  238. package/packages/solver/src/generateEndIndices.ts +0 -19
  239. package/packages/solver/src/generateHorizontalPatterns.test.ts +0 -31
  240. package/packages/solver/src/generateHorizontalPatterns.ts +0 -15
  241. package/packages/solver/src/generatePattern.ts +0 -33
  242. package/packages/solver/src/generatePatterns.test.ts +0 -13
  243. package/packages/solver/src/generatePatterns.ts +0 -11
  244. package/packages/solver/src/generateStartIndices.test.ts +0 -19
  245. package/packages/solver/src/generateStartIndices.ts +0 -17
  246. package/packages/solver/src/generateVectors.test.ts +0 -12
  247. package/packages/solver/src/generateVectors.ts +0 -10
  248. package/packages/solver/src/generateVerticalPatterns.test.ts +0 -32
  249. package/packages/solver/src/generateVerticalPatterns.ts +0 -15
  250. package/packages/solver/src/getCellsScore.ts +0 -21
  251. package/packages/solver/src/getPatternHash.test.ts +0 -17
  252. package/packages/solver/src/getPatternHash.ts +0 -12
  253. package/packages/solver/src/getPatternScore.test.ts +0 -204
  254. package/packages/solver/src/getPatternScore.ts +0 -23
  255. package/packages/solver/src/getUniquePatterns.ts +0 -19
  256. package/packages/types/build/CollisionJson.d.ts +0 -2
  257. package/packages/types/build/CollisionJson.js +0 -2
  258. package/packages/types/build/FinalPattern.d.ts +0 -6
  259. package/packages/types/build/FinalPattern.js +0 -14
  260. package/packages/types/build/HorizontalPattern.d.ts +0 -5
  261. package/packages/types/build/HorizontalPattern.js +0 -34
  262. package/packages/types/build/Pattern.d.ts +0 -20
  263. package/packages/types/build/Pattern.js +0 -50
  264. package/packages/types/build/PatternJson.d.ts +0 -6
  265. package/packages/types/build/PatternJson.js +0 -2
  266. package/packages/types/build/VerticalPattern.d.ts +0 -5
  267. package/packages/types/build/VerticalPattern.js +0 -34
  268. package/packages/types/src/CollisionJson.ts +0 -3
  269. package/packages/types/src/FinalPattern.ts +0 -14
  270. package/packages/types/src/HorizontalPattern.ts +0 -37
  271. package/packages/types/src/Pattern.ts +0 -71
  272. package/packages/types/src/PatternJson.ts +0 -7
  273. package/packages/types/src/VerticalPattern.ts +0 -37
  274. /package/packages/scrabble-solver/.next/static/{vYpMmuC_yEurZGcyGVnLf → OLE8_ZInlGH7ENU0NIOpf}/_ssgManifest.js +0 -0
  275. /package/packages/scrabble-solver/src/{service-worker → solver-worker}/dictionaries/expirationManager.ts +0 -0
  276. /package/packages/scrabble-solver/src/{service-worker → solver-worker}/dictionaries/getDictionaryUrl.ts +0 -0
@@ -1 +1 @@
1
- [{"name":"run-typescript","duration":158871,"timestamp":7220131342,"id":13,"parentId":1,"tags":{},"startTime":1785617459374,"traceId":"5804b27c59cf8ea7"},{"name":"run-webpack","duration":5673692,"timestamp":7220292828,"id":15,"parentId":1,"tags":{},"startTime":1785617459536,"traceId":"5804b27c59cf8ea7"},{"name":"static-check","duration":212429,"timestamp":7226033524,"id":2053,"parentId":1,"tags":{},"startTime":1785617465276,"traceId":"5804b27c59cf8ea7"},{"name":"static-generation","duration":242167,"timestamp":7226254581,"id":2071,"parentId":1,"tags":{},"startTime":1785617465497,"traceId":"5804b27c59cf8ea7"},{"name":"collect-build-traces","duration":4209754,"timestamp":7226246405,"id":2068,"parentId":1,"tags":{},"startTime":1785617465489,"traceId":"5804b27c59cf8ea7"},{"name":"telemetry-flush","duration":25,"timestamp":7230457410,"id":2078,"parentId":1,"tags":{},"startTime":1785617469700,"traceId":"5804b27c59cf8ea7"},{"name":"next-build","duration":10563371,"timestamp":7219894069,"id":1,"tags":{"buildMode":"default","version":"16.3.0-preview.10","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1785617459137,"traceId":"5804b27c59cf8ea7"}]
1
+ [{"name":"run-typescript","duration":169366,"timestamp":26528773671,"id":13,"parentId":1,"tags":{},"startTime":1786055166126,"traceId":"c15733d8168a03e3"},{"name":"run-webpack","duration":6699896,"timestamp":26528944927,"id":15,"parentId":1,"tags":{},"startTime":1786055166298,"traceId":"c15733d8168a03e3"},{"name":"static-check","duration":225589,"timestamp":26535727438,"id":2014,"parentId":1,"tags":{},"startTime":1786055173080,"traceId":"c15733d8168a03e3"},{"name":"static-generation","duration":240386,"timestamp":26535961329,"id":2032,"parentId":1,"tags":{},"startTime":1786055173314,"traceId":"c15733d8168a03e3"},{"name":"collect-build-traces","duration":4253048,"timestamp":26535953473,"id":2029,"parentId":1,"tags":{},"startTime":1786055173306,"traceId":"c15733d8168a03e3"},{"name":"telemetry-flush","duration":19,"timestamp":26540207730,"id":2039,"parentId":1,"tags":{},"startTime":1786055177561,"traceId":"c15733d8168a03e3"},{"name":"next-build","duration":11677867,"timestamp":26528529886,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1786055165883,"traceId":"c15733d8168a03e3"}]
@@ -4,12 +4,6 @@ const path = require('path');
4
4
  const WorkboxPlugin = require('workbox-webpack-plugin');
5
5
 
6
6
  module.exports = {
7
- compress: false,
8
- experimental: {
9
- // TypeScript 7 dropped the JS compiler API that Next.js's built-in type checker uses,
10
- // Remove the flag once Next.js integrates with TS7 out of the box.
11
- useTypeScriptCli: true,
12
- },
13
7
  reactStrictMode: true,
14
8
  sassOptions: {
15
9
  loadPaths: ['./src', path.join(__dirname, '../../node_modules/include-media/dist')],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/scrabble-solver",
3
- "version": "2.16.7",
3
+ "version": "2.17.0",
4
4
  "description": "Scrabble Solver 2 - App",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,20 +27,20 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@floating-ui/react": "^0.27.20",
30
- "@kamilmielnik/trie": "^5.1.0",
30
+ "@kamilmielnik/gaddag": "^2.0.0",
31
31
  "@reduxjs/toolkit": "^2.12.0",
32
- "@scrabble-solver/configs": "^2.16.7",
33
- "@scrabble-solver/constants": "^2.16.7",
34
- "@scrabble-solver/dictionaries": "^2.16.7",
35
- "@scrabble-solver/logger": "^2.16.7",
36
- "@scrabble-solver/solver": "^2.16.7",
37
- "@scrabble-solver/types": "^2.16.7",
38
- "@scrabble-solver/word-definitions": "^2.16.7",
32
+ "@scrabble-solver/configs": "^2.17.0",
33
+ "@scrabble-solver/constants": "^2.17.0",
34
+ "@scrabble-solver/dictionaries": "^2.17.0",
35
+ "@scrabble-solver/logger": "^2.17.0",
36
+ "@scrabble-solver/solver": "^2.17.0",
37
+ "@scrabble-solver/types": "^2.17.0",
38
+ "@scrabble-solver/word-definitions": "^2.17.0",
39
39
  "classnames": "^2.5.1",
40
40
  "env-cmd": "^11.0.0",
41
41
  "include-media": "^2.0.0",
42
42
  "include-media-query-builder": "^1.1.0",
43
- "next": "^16.3.0-preview.10",
43
+ "next": "^16.3.0",
44
44
  "normalize.css": "^8.0.1",
45
45
  "react": "^19.2.8",
46
46
  "react-cool-onclickoutside": "^1.7.0",
@@ -1,2 +1,2 @@
1
- (()=>{"use strict";let e,t,r,c,i,a;var l,o={376:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FinalPattern=void 0;let c=r(4758);class i extends c.Pattern{constructor(e){super(e.board,e.cells),this.collisions=e.getCollisions()}getCollisions(){return this.collisions}}t.FinalPattern=i},506:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getPatternScore=void 0;let c=r(2708),i=r(2095);t.getPatternScore=(e,t)=>{let r=t.getEmptyCellsCount()===e.rackSize,a=(0,i.getCellsScore)(e,t.cells),l=t.getCollisions().reduce((t,r)=>t+(0,i.getCellsScore)(e,r.cells),0);if(r){if((0,c.isScoreBingo)(e.bingo))return a+l+e.bingo.score;if((0,c.isMultiplierBingo)(e.bingo))return a*e.bingo.multiplier+l}return a+l}},524:function(e,t,r){var c,i=this&&this.__createBinding||(Object.create?function(e,t,r,c){void 0===c&&(c=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,c,i)}:function(e,t,r,c){void 0===c&&(c=r),e[c]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),l=this&&this.__importStar||(c=function(e){return(c=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t})(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=c(e),l=0;l<r.length;l++)"default"!==r[l]&&i(t,e,r[l]);return a(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.getConfig=void 0;let o=l(r(9494));t.getConfig=(e,t)=>{let r=Object.values(o).find(r=>r.game===e&&r.locale===t);if(void 0===r)throw Error(`No game "${e}" in "${t}"`);return r}},719:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Bonus=void 0;class r{constructor({multiplier:e,score:t,x:r,y:c}){this.multiplier=e,this.score=t,this.x=r,this.y=c}canApply(e,t){return t.isEmpty&&this.matchesCellCoordinates(t)}matchesCellCoordinates(e){return this.x===e.x&&this.y===e.y}toJson(){return{multiplier:this.multiplier,score:this.score,type:this.type,x:this.x,y:this.y}}get value(){return{characterMultiplier:1,wordMultiplier:1}}}t.Bonus=r},1150:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.englishUsSuperScrabble=t.englishUsScrabbleDuel=t.englishUsScrabble=t.englishUsLiteraki=t.englishUsLetterLeague=t.englishUsCrossplay=t.englishGbSuperScrabble=t.englishGbScrabbleDuel=t.englishGbScrabble=t.englishGbLiteraki=t.englishGbLetterLeague=t.englishGbCrossplay=void 0;let c=r(2708),i=r(6330);t.englishGbCrossplay=new c.Config({...i.crossplay,locale:c.Locale.EN_GB,tiles:[{character:"a",score:1},{character:"b",score:4},{character:"c",score:3},{character:"d",score:2},{character:"e",score:1},{character:"f",score:4},{character:"g",score:4},{character:"h",score:3},{character:"i",score:1},{character:"j",score:10},{character:"k",score:6},{character:"l",score:2},{character:"m",score:3},{character:"n",score:1},{character:"o",score:1},{character:"p",score:3},{character:"q",score:10},{character:"r",score:1},{character:"s",score:1},{character:"t",score:1},{character:"u",score:2},{character:"v",score:6},{character:"w",score:5},{character:"x",score:8},{character:"y",score:4},{character:"z",score:10}]}),t.englishGbLetterLeague=new c.Config({...i.letterLeague,locale:c.Locale.EN_GB,tiles:[{character:"a",score:1},{character:"b",score:3},{character:"c",score:3},{character:"d",score:2},{character:"e",score:1},{character:"f",score:4},{character:"g",score:2},{character:"h",score:4},{character:"i",score:1},{character:"j",score:8},{character:"k",score:5},{character:"l",score:2},{character:"m",score:3},{character:"n",score:1},{character:"o",score:1},{character:"p",score:3},{character:"q",score:10},{character:"r",score:1},{character:"s",score:1},{character:"t",score:1},{character:"u",score:1},{character:"v",score:4},{character:"w",score:4},{character:"x",score:8},{character:"y",score:4},{character:"z",score:10}]}),t.englishGbLiteraki=new c.Config({...i.literaki,locale:c.Locale.EN_GB,name:"Literaxx",tiles:[{character:"a",count:9,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:3},{character:"d",count:4,score:2},{character:"e",count:12,score:1},{character:"f",count:2,score:4},{character:"g",count:3,score:2},{character:"h",count:2,score:4},{character:"i",count:9,score:1},{character:"j",count:1,score:8},{character:"k",count:1,score:5},{character:"l",count:4,score:1},{character:"m",count:2,score:3},{character:"n",count:6,score:1},{character:"o",count:8,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:10},{character:"r",count:6,score:1},{character:"s",count:4,score:1},{character:"t",count:6,score:1},{character:"u",count:4,score:1},{character:"v",count:2,score:4},{character:"w",count:2,score:4},{character:"x",count:1,score:8},{character:"y",count:2,score:4},{character:"z",count:1,score:10}]}),t.englishGbScrabble=new c.Config({...i.scrabble,locale:c.Locale.EN_GB,tiles:[{character:"a",count:9,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:3},{character:"d",count:4,score:2},{character:"e",count:12,score:1},{character:"f",count:2,score:4},{character:"g",count:3,score:2},{character:"h",count:2,score:4},{character:"i",count:9,score:1},{character:"j",count:1,score:8},{character:"k",count:1,score:5},{character:"l",count:4,score:1},{character:"m",count:2,score:3},{character:"n",count:6,score:1},{character:"o",count:8,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:10},{character:"r",count:6,score:1},{character:"s",count:4,score:1},{character:"t",count:6,score:1},{character:"u",count:4,score:1},{character:"v",count:2,score:4},{character:"w",count:2,score:4},{character:"x",count:1,score:8},{character:"y",count:2,score:4},{character:"z",count:1,score:10}]}),t.englishGbScrabbleDuel=new c.Config({...i.scrabbleDuel,locale:c.Locale.EN_GB,tiles:[{character:"a",count:9,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:3},{character:"d",count:4,score:2},{character:"e",count:12,score:1},{character:"f",count:2,score:4},{character:"g",count:3,score:2},{character:"h",count:2,score:4},{character:"i",count:9,score:1},{character:"j",count:1,score:8},{character:"k",count:1,score:5},{character:"l",count:4,score:1},{character:"m",count:2,score:3},{character:"n",count:6,score:1},{character:"o",count:8,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:10},{character:"r",count:6,score:1},{character:"s",count:4,score:1},{character:"t",count:6,score:1},{character:"u",count:4,score:1},{character:"v",count:2,score:4},{character:"w",count:2,score:4},{character:"x",count:1,score:8},{character:"y",count:2,score:4},{character:"z",count:1,score:10}]}),t.englishGbSuperScrabble=new c.Config({...i.superScrabble,locale:c.Locale.EN_GB,tiles:[{character:"a",count:16,score:1},{character:"b",count:4,score:3},{character:"c",count:6,score:3},{character:"d",count:8,score:2},{character:"e",count:24,score:1},{character:"f",count:4,score:4},{character:"g",count:5,score:2},{character:"h",count:5,score:4},{character:"i",count:13,score:1},{character:"j",count:2,score:8},{character:"k",count:2,score:5},{character:"l",count:7,score:1},{character:"m",count:6,score:3},{character:"n",count:13,score:1},{character:"o",count:15,score:1},{character:"p",count:4,score:3},{character:"q",count:2,score:10},{character:"r",count:13,score:1},{character:"s",count:10,score:1},{character:"t",count:15,score:1},{character:"u",count:7,score:1},{character:"v",count:3,score:4},{character:"w",count:4,score:4},{character:"x",count:2,score:8},{character:"y",count:4,score:4},{character:"z",count:2,score:10}]}),t.englishUsCrossplay=new c.Config({...i.crossplay,locale:c.Locale.EN_US,tiles:[{character:"a",score:1},{character:"b",score:4},{character:"c",score:3},{character:"d",score:2},{character:"e",score:1},{character:"f",score:4},{character:"g",score:4},{character:"h",score:3},{character:"i",score:1},{character:"j",score:10},{character:"k",score:6},{character:"l",score:2},{character:"m",score:3},{character:"n",score:1},{character:"o",score:1},{character:"p",score:3},{character:"q",score:10},{character:"r",score:1},{character:"s",score:1},{character:"t",score:1},{character:"u",score:2},{character:"v",score:6},{character:"w",score:5},{character:"x",score:8},{character:"y",score:4},{character:"z",score:10}]}),t.englishUsLetterLeague=new c.Config({...i.letterLeague,locale:c.Locale.EN_US,tiles:[{character:"a",score:1},{character:"b",score:3},{character:"c",score:3},{character:"d",score:2},{character:"e",score:1},{character:"f",score:4},{character:"g",score:2},{character:"h",score:4},{character:"i",score:1},{character:"j",score:8},{character:"k",score:5},{character:"l",score:2},{character:"m",score:3},{character:"n",score:1},{character:"o",score:1},{character:"p",score:3},{character:"q",score:10},{character:"r",score:1},{character:"s",score:1},{character:"t",score:1},{character:"u",score:1},{character:"v",score:4},{character:"w",score:4},{character:"x",score:8},{character:"y",score:4},{character:"z",score:10}]}),t.englishUsLiteraki=new c.Config({...i.literaki,locale:c.Locale.EN_US,name:"Literaxx",tiles:[{character:"a",count:9,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:3},{character:"d",count:4,score:2},{character:"e",count:12,score:1},{character:"f",count:2,score:4},{character:"g",count:3,score:2},{character:"h",count:2,score:4},{character:"i",count:9,score:1},{character:"j",count:1,score:8},{character:"k",count:1,score:5},{character:"l",count:4,score:1},{character:"m",count:2,score:3},{character:"n",count:6,score:1},{character:"o",count:8,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:10},{character:"r",count:6,score:1},{character:"s",count:4,score:1},{character:"t",count:6,score:1},{character:"u",count:4,score:1},{character:"v",count:2,score:4},{character:"w",count:2,score:4},{character:"x",count:1,score:8},{character:"y",count:2,score:4},{character:"z",count:1,score:10}]}),t.englishUsScrabble=new c.Config({...i.scrabble,locale:c.Locale.EN_US,tiles:[{character:"a",count:9,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:3},{character:"d",count:4,score:2},{character:"e",count:12,score:1},{character:"f",count:2,score:4},{character:"g",count:3,score:2},{character:"h",count:2,score:4},{character:"i",count:9,score:1},{character:"j",count:1,score:8},{character:"k",count:1,score:5},{character:"l",count:4,score:1},{character:"m",count:2,score:3},{character:"n",count:6,score:1},{character:"o",count:8,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:10},{character:"r",count:6,score:1},{character:"s",count:4,score:1},{character:"t",count:6,score:1},{character:"u",count:4,score:1},{character:"v",count:2,score:4},{character:"w",count:2,score:4},{character:"x",count:1,score:8},{character:"y",count:2,score:4},{character:"z",count:1,score:10}]}),t.englishUsScrabbleDuel=new c.Config({...i.scrabbleDuel,locale:c.Locale.EN_US,tiles:[{character:"a",count:9,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:3},{character:"d",count:4,score:2},{character:"e",count:12,score:1},{character:"f",count:2,score:4},{character:"g",count:3,score:2},{character:"h",count:2,score:4},{character:"i",count:9,score:1},{character:"j",count:1,score:8},{character:"k",count:1,score:5},{character:"l",count:4,score:1},{character:"m",count:2,score:3},{character:"n",count:6,score:1},{character:"o",count:8,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:10},{character:"r",count:6,score:1},{character:"s",count:4,score:1},{character:"t",count:6,score:1},{character:"u",count:4,score:1},{character:"v",count:2,score:4},{character:"w",count:2,score:4},{character:"x",count:1,score:8},{character:"y",count:2,score:4},{character:"z",count:1,score:10}]}),t.englishUsSuperScrabble=new c.Config({...i.superScrabble,locale:c.Locale.EN_US,tiles:[{character:"a",count:16,score:1},{character:"b",count:4,score:3},{character:"c",count:6,score:3},{character:"d",count:8,score:2},{character:"e",count:24,score:1},{character:"f",count:4,score:4},{character:"g",count:5,score:2},{character:"h",count:5,score:4},{character:"i",count:13,score:1},{character:"j",count:2,score:8},{character:"k",count:2,score:5},{character:"l",count:7,score:1},{character:"m",count:6,score:3},{character:"n",count:13,score:1},{character:"o",count:15,score:1},{character:"p",count:4,score:3},{character:"q",count:2,score:10},{character:"r",count:13,score:1},{character:"s",count:10,score:1},{character:"t",count:15,score:1},{character:"u",count:7,score:1},{character:"v",count:3,score:4},{character:"w",count:4,score:4},{character:"x",count:2,score:8},{character:"y",count:4,score:4},{character:"z",count:2,score:10}]})},1249:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.letterLeague=void 0;let c=r(9276);t.letterLeague={bingo:{multiplier:2},blankScore:0,blanksCount:2,boardHeight:19,boardWidth:27,game:r(2708).Game.LetterLeague,name:"Letter League",rackSize:7,bonuses:[{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:15,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:18,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:20,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:23,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:1,y:1},{multiplier:2,type:c.BONUS_WORD,x:5,y:1},{multiplier:2,type:c.BONUS_WORD,x:9,y:1},{multiplier:2,type:c.BONUS_CHARACTER,x:13,y:1},{multiplier:2,type:c.BONUS_WORD,x:17,y:1},{multiplier:2,type:c.BONUS_WORD,x:21,y:1},{multiplier:2,type:c.BONUS_CHARACTER,x:25,y:1},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:2},{multiplier:3,type:c.BONUS_CHARACTER,x:6,y:2},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:16,y:2},{multiplier:3,type:c.BONUS_CHARACTER,x:18,y:2},{multiplier:3,type:c.BONUS_CHARACTER,x:20,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:22,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:3},{multiplier:2,type:c.BONUS_WORD,x:1,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:2,y:3},{multiplier:3,type:c.BONUS_WORD,x:7,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:12,y:3},{multiplier:2,type:c.BONUS_WORD,x:13,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:3},{multiplier:3,type:c.BONUS_WORD,x:19,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:24,y:3},{multiplier:2,type:c.BONUS_WORD,x:25,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:26,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:6,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:16,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:18,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:20,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:22,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:1,y:5},{multiplier:2,type:c.BONUS_WORD,x:5,y:5},{multiplier:2,type:c.BONUS_WORD,x:9,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:13,y:5},{multiplier:2,type:c.BONUS_WORD,x:17,y:5},{multiplier:2,type:c.BONUS_WORD,x:21,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:25,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:15,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:18,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:20,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:23,y:6},{multiplier:2,type:c.BONUS_WORD,x:4,y:7},{multiplier:2,type:c.BONUS_WORD,x:10,y:7},{multiplier:2,type:c.BONUS_WORD,x:16,y:7},{multiplier:2,type:c.BONUS_WORD,x:22,y:7},{multiplier:3,type:c.BONUS_CHARACTER,x:0,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:2,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:12,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:14,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:19,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:24,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:26,y:8},{multiplier:2,type:c.BONUS_WORD,x:3,y:9},{multiplier:2,type:c.BONUS_WORD,x:7,y:9},{multiplier:2,type:c.BONUS_WORD,x:11,y:9},{multiplier:2,type:c.BONUS_WORD,x:15,y:9},{multiplier:2,type:c.BONUS_WORD,x:19,y:9},{multiplier:2,type:c.BONUS_WORD,x:23,y:9},{multiplier:3,type:c.BONUS_CHARACTER,x:0,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:2,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:12,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:14,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:19,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:24,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:26,y:10},{multiplier:2,type:c.BONUS_WORD,x:4,y:11},{multiplier:2,type:c.BONUS_WORD,x:10,y:11},{multiplier:2,type:c.BONUS_WORD,x:16,y:11},{multiplier:2,type:c.BONUS_WORD,x:22,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:15,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:18,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:20,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:23,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:1,y:13},{multiplier:2,type:c.BONUS_WORD,x:5,y:13},{multiplier:2,type:c.BONUS_WORD,x:9,y:13},{multiplier:2,type:c.BONUS_CHARACTER,x:13,y:13},{multiplier:2,type:c.BONUS_WORD,x:17,y:13},{multiplier:2,type:c.BONUS_WORD,x:21,y:13},{multiplier:2,type:c.BONUS_CHARACTER,x:25,y:13},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:14},{multiplier:3,type:c.BONUS_CHARACTER,x:6,y:14},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:16,y:14},{multiplier:3,type:c.BONUS_CHARACTER,x:18,y:14},{multiplier:3,type:c.BONUS_CHARACTER,x:20,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:22,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:15},{multiplier:2,type:c.BONUS_WORD,x:1,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:2,y:15},{multiplier:3,type:c.BONUS_WORD,x:7,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:12,y:15},{multiplier:2,type:c.BONUS_WORD,x:13,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:15},{multiplier:3,type:c.BONUS_WORD,x:19,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:24,y:15},{multiplier:2,type:c.BONUS_WORD,x:25,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:26,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:16},{multiplier:3,type:c.BONUS_CHARACTER,x:6,y:16},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:16},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:16},{multiplier:2,type:c.BONUS_CHARACTER,x:16,y:16},{multiplier:3,type:c.BONUS_CHARACTER,x:18,y:16},{multiplier:3,type:c.BONUS_CHARACTER,x:20,y:16},{multiplier:2,type:c.BONUS_CHARACTER,x:22,y:16},{multiplier:2,type:c.BONUS_CHARACTER,x:1,y:17},{multiplier:2,type:c.BONUS_WORD,x:5,y:17},{multiplier:2,type:c.BONUS_WORD,x:9,y:17},{multiplier:2,type:c.BONUS_CHARACTER,x:13,y:17},{multiplier:2,type:c.BONUS_WORD,x:17,y:17},{multiplier:2,type:c.BONUS_WORD,x:21,y:17},{multiplier:2,type:c.BONUS_CHARACTER,x:25,y:17},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:18},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:18},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:18},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:18},{multiplier:2,type:c.BONUS_CHARACTER,x:15,y:18},{multiplier:2,type:c.BONUS_CHARACTER,x:18,y:18},{multiplier:2,type:c.BONUS_CHARACTER,x:20,y:18},{multiplier:2,type:c.BONUS_CHARACTER,x:23,y:18}]}},1370:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Cell=void 0;let c=r(9654);class i{constructor({isEmpty:e=!0,tile:t=c.Tile.Null,x:r,y:i}){this.isEmpty=e,this.tile=t,this.x=r,this.y=i}clone(){return new i({isEmpty:this.isEmpty,tile:this.tile.clone(),x:this.x,y:this.y})}equals(e){return this.x===e.x&&this.y===e.y&&this.isEmpty===e.isEmpty&&this.tile.equals(e.tile)}hasTile(){return this.tile!==c.Tile.Null}isCandidate(){return this.isEmpty&&this.hasTile()}toJson(){return{isEmpty:this.isEmpty,tile:this.tile.toJson(),x:this.x,y:this.y}}toString(){return this.tile.toString()}}t.Cell=i,i.fromJson=e=>new i({isEmpty:e.isEmpty,tile:c.Tile.fromJson(e.tile),x:e.x,y:e.y})},1513:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.solve=void 0;let c=r(1566),i=r(8735),a=r(9052),l=r(506),o=r(5350);t.solve=(e,t,r,s)=>{let n=(0,a.generatePatterns)(t,r).flatMap(r=>(0,i.fillPattern)(e,t,r,s)),u=t.twoCharacterTiles.length>0?n.filter(e=>(0,c.areDigraphsValid)(t,e)):n;return(0,o.getUniquePatterns)(u).map((e,r)=>({cells:e.cells.map(e=>e.toJson()),collisions:e.getCollisions().map(e=>e.cells.map(e=>e.toJson())),id:r,points:(0,l.getPatternScore)(t,e)}))}},1553:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.superScrabble=void 0;let c=r(9276);t.superScrabble={bingo:{score:50},blankScore:0,blanksCount:4,boardHeight:21,boardWidth:21,game:r(2708).Game.SuperScrabble,name:"Super Scrabble",rackSize:7,bonuses:[{multiplier:4,type:c.BONUS_WORD,x:0,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:0},{multiplier:3,type:c.BONUS_WORD,x:7,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:0},{multiplier:3,type:c.BONUS_WORD,x:13,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:17,y:0},{multiplier:4,type:c.BONUS_WORD,x:20,y:0},{multiplier:2,type:c.BONUS_WORD,x:1,y:1},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:1},{multiplier:2,type:c.BONUS_WORD,x:8,y:1},{multiplier:2,type:c.BONUS_WORD,x:12,y:1},{multiplier:3,type:c.BONUS_CHARACTER,x:16,y:1},{multiplier:2,type:c.BONUS_WORD,x:19,y:1},{multiplier:2,type:c.BONUS_WORD,x:2,y:2},{multiplier:4,type:c.BONUS_CHARACTER,x:5,y:2},{multiplier:2,type:c.BONUS_WORD,x:9,y:2},{multiplier:2,type:c.BONUS_WORD,x:11,y:2},{multiplier:4,type:c.BONUS_CHARACTER,x:15,y:2},{multiplier:2,type:c.BONUS_WORD,x:18,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:3},{multiplier:3,type:c.BONUS_WORD,x:3,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:3},{multiplier:3,type:c.BONUS_WORD,x:10,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:3},{multiplier:3,type:c.BONUS_WORD,x:17,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:20,y:3},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:4},{multiplier:2,type:c.BONUS_WORD,x:4,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:12,y:4},{multiplier:2,type:c.BONUS_WORD,x:16,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:19,y:4},{multiplier:4,type:c.BONUS_CHARACTER,x:2,y:5},{multiplier:2,type:c.BONUS_WORD,x:5,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:5},{multiplier:2,type:c.BONUS_WORD,x:15,y:5},{multiplier:4,type:c.BONUS_CHARACTER,x:18,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:6},{multiplier:2,type:c.BONUS_WORD,x:6,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:6},{multiplier:2,type:c.BONUS_WORD,x:14,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:17,y:6},{multiplier:3,type:c.BONUS_WORD,x:0,y:7},{multiplier:2,type:c.BONUS_WORD,x:7,y:7},{multiplier:2,type:c.BONUS_WORD,x:13,y:7},{multiplier:3,type:c.BONUS_WORD,x:20,y:7},{multiplier:2,type:c.BONUS_WORD,x:1,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:12,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:16,y:8},{multiplier:2,type:c.BONUS_WORD,x:19,y:8},{multiplier:2,type:c.BONUS_WORD,x:2,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:15,y:9},{multiplier:2,type:c.BONUS_WORD,x:18,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:10},{multiplier:3,type:c.BONUS_WORD,x:3,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:10},{multiplier:3,type:c.BONUS_WORD,x:17,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:20,y:10},{multiplier:2,type:c.BONUS_WORD,x:2,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:15,y:11},{multiplier:2,type:c.BONUS_WORD,x:18,y:11},{multiplier:2,type:c.BONUS_WORD,x:1,y:12},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:12},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:12},{multiplier:3,type:c.BONUS_CHARACTER,x:12,y:12},{multiplier:3,type:c.BONUS_CHARACTER,x:16,y:12},{multiplier:2,type:c.BONUS_WORD,x:19,y:12},{multiplier:3,type:c.BONUS_WORD,x:0,y:13},{multiplier:2,type:c.BONUS_WORD,x:7,y:13},{multiplier:2,type:c.BONUS_WORD,x:13,y:13},{multiplier:3,type:c.BONUS_WORD,x:20,y:13},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:14},{multiplier:2,type:c.BONUS_WORD,x:6,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:14},{multiplier:2,type:c.BONUS_WORD,x:14,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:17,y:14},{multiplier:4,type:c.BONUS_CHARACTER,x:2,y:15},{multiplier:2,type:c.BONUS_WORD,x:5,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:15},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:15},{multiplier:2,type:c.BONUS_WORD,x:15,y:15},{multiplier:4,type:c.BONUS_CHARACTER,x:18,y:15},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:16},{multiplier:2,type:c.BONUS_WORD,x:4,y:16},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:16},{multiplier:3,type:c.BONUS_CHARACTER,x:12,y:16},{multiplier:2,type:c.BONUS_WORD,x:16,y:16},{multiplier:3,type:c.BONUS_CHARACTER,x:19,y:16},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:17},{multiplier:3,type:c.BONUS_WORD,x:3,y:17},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:17},{multiplier:3,type:c.BONUS_WORD,x:10,y:17},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:17},{multiplier:3,type:c.BONUS_WORD,x:17,y:17},{multiplier:2,type:c.BONUS_CHARACTER,x:20,y:17},{multiplier:2,type:c.BONUS_WORD,x:2,y:18},{multiplier:4,type:c.BONUS_CHARACTER,x:5,y:18},{multiplier:2,type:c.BONUS_WORD,x:9,y:18},{multiplier:2,type:c.BONUS_WORD,x:11,y:18},{multiplier:4,type:c.BONUS_CHARACTER,x:15,y:18},{multiplier:2,type:c.BONUS_WORD,x:18,y:18},{multiplier:2,type:c.BONUS_WORD,x:1,y:19},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:19},{multiplier:2,type:c.BONUS_WORD,x:8,y:19},{multiplier:2,type:c.BONUS_WORD,x:12,y:19},{multiplier:3,type:c.BONUS_CHARACTER,x:16,y:19},{multiplier:2,type:c.BONUS_WORD,x:19,y:19},{multiplier:4,type:c.BONUS_WORD,x:0,y:20},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:20},{multiplier:3,type:c.BONUS_WORD,x:7,y:20},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:20},{multiplier:3,type:c.BONUS_WORD,x:13,y:20},{multiplier:2,type:c.BONUS_CHARACTER,x:17,y:20},{multiplier:4,type:c.BONUS_WORD,x:20,y:20}]}},1566:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.areDigraphsValid=void 0,t.areDigraphsValid=(e,t)=>{let{twoCharacterTiles:r}=e,{cells:c}=t;for(let e=0;e<c.length-1;++e){let t=c[e],i=c[e+1],a=t.tile.character+i.tile.character;if(r.includes(a))return!1}return!0}},1693:()=>{try{self["workbox:core:7.4.0"]&&_()}catch(e){}},1802:()=>{try{self["workbox:precaching:7.4.0"]&&_()}catch(e){}},1958:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.spanishScrabble=void 0;let c=r(2708),i=r(6330);t.spanishScrabble=new c.Config({...i.scrabble,locale:c.Locale.ES_ES,tiles:[{character:"a",count:12,score:1},{character:"b",count:2,score:3},{character:"c",count:4,score:3},{character:"ch",count:1,score:5},{character:"d",count:5,score:2},{character:"e",count:12,score:1},{character:"f",count:1,score:4},{character:"g",count:2,score:2},{character:"h",count:2,score:4},{character:"i",count:6,score:1},{character:"j",count:1,score:8},{character:"ll",count:1,score:8},{character:"l",count:4,score:1},{character:"m",count:2,score:3},{character:"n",count:5,score:1},{character:"\xf1",count:1,score:8},{character:"o",count:9,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:5},{character:"r",count:5,score:1},{character:"rr",count:1,score:8},{character:"s",count:6,score:1},{character:"t",count:4,score:1},{character:"u",count:5,score:1},{character:"v",count:1,score:4},{character:"x",count:1,score:8},{character:"y",count:1,score:4},{character:"z",count:1,score:10}]})},2095:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getCellsScore=void 0;let c=r(9276);t.getCellsScore=(e,t)=>{let r=t.reduce(({multiplier:t,score:r},i)=>{let a=e.getCellBonus(i),{characterMultiplier:l,wordMultiplier:o}=a&&a.canApply(e,i)?a.value:c.NO_BONUS,s=e.pointsMap[i.tile.character]||0;return{multiplier:t*o,score:r+(i.tile.isBlank?e.blankScore:s)*l}},{multiplier:1,score:0});return r.score*r.multiplier}},2394:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HorizontalPattern=void 0;let c=r(4758);class i extends c.Pattern{clone(){return new i(this.board,this.cells.map(e=>e.clone()))}getCollisions(){let e=[];return this.cells.filter(e=>e.isEmpty&&(this.board.collidesUp(e)||this.board.collidesDown(e))).forEach(t=>{let r=this.board.getColumn(t.x),i=t.y-1;for(;i>=0&&r[i].hasTile();)--i;let a=r.slice(i+1,t.y);for(i=t.y+1;i<r.length&&r[i].hasTile();)++i;let l=r.slice(t.y+1,i),o=[...a,t,...l];if(o.length>1){let t=new c.Pattern(this.board,o);e.push(t)}}),e}}t.HorizontalPattern=i},2448:()=>{try{self["workbox:routing:7.4.0"]&&_()}catch(e){}},2555:()=>{try{self["workbox:expiration:7.4.0"]&&_()}catch(e){}},2708:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WordDefinition=t.WordBonus=t.VerticalPattern=t.isTileJson=t.Tile=t.Result=t.Pattern=t.Locale=t.isLocale=t.isObject=t.isError=t.HorizontalPattern=t.isGame=t.Game=t.FinalPattern=t.Config=t.CharacterBonus=t.isCellJson=t.Cell=t.Bonus=t.isBoardJson=t.Board=t.isScoreBingo=t.isMultiplierBingo=t.isBingo=void 0;var c=r(8135);Object.defineProperty(t,"isBingo",{enumerable:!0,get:function(){return c.isBingo}}),Object.defineProperty(t,"isMultiplierBingo",{enumerable:!0,get:function(){return c.isMultiplierBingo}}),Object.defineProperty(t,"isScoreBingo",{enumerable:!0,get:function(){return c.isScoreBingo}});var i=r(9140);Object.defineProperty(t,"Board",{enumerable:!0,get:function(){return i.Board}});var a=r(6902);Object.defineProperty(t,"isBoardJson",{enumerable:!0,get:function(){return a.isBoardJson}});var l=r(719);Object.defineProperty(t,"Bonus",{enumerable:!0,get:function(){return l.Bonus}});var o=r(1370);Object.defineProperty(t,"Cell",{enumerable:!0,get:function(){return o.Cell}});var s=r(3852);Object.defineProperty(t,"isCellJson",{enumerable:!0,get:function(){return s.isCellJson}});var n=r(9112);Object.defineProperty(t,"CharacterBonus",{enumerable:!0,get:function(){return n.CharacterBonus}});var u=r(4232);Object.defineProperty(t,"Config",{enumerable:!0,get:function(){return u.Config}});var p=r(376);Object.defineProperty(t,"FinalPattern",{enumerable:!0,get:function(){return p.FinalPattern}});var h=r(2712);Object.defineProperty(t,"Game",{enumerable:!0,get:function(){return h.Game}}),Object.defineProperty(t,"isGame",{enumerable:!0,get:function(){return h.isGame}});var y=r(2394);Object.defineProperty(t,"HorizontalPattern",{enumerable:!0,get:function(){return y.HorizontalPattern}});var R=r(5006);Object.defineProperty(t,"isError",{enumerable:!0,get:function(){return R.isError}});var C=r(8049);Object.defineProperty(t,"isObject",{enumerable:!0,get:function(){return C.isObject}});var m=r(4040);Object.defineProperty(t,"isLocale",{enumerable:!0,get:function(){return m.isLocale}}),Object.defineProperty(t,"Locale",{enumerable:!0,get:function(){return m.Locale}});var O=r(4758);Object.defineProperty(t,"Pattern",{enumerable:!0,get:function(){return O.Pattern}});var d=r(8159);Object.defineProperty(t,"Result",{enumerable:!0,get:function(){return d.Result}});var A=r(9654);Object.defineProperty(t,"Tile",{enumerable:!0,get:function(){return A.Tile}});var S=r(7432);Object.defineProperty(t,"isTileJson",{enumerable:!0,get:function(){return S.isTileJson}});var f=r(5452);Object.defineProperty(t,"VerticalPattern",{enumerable:!0,get:function(){return f.VerticalPattern}});var x=r(6759);Object.defineProperty(t,"WordBonus",{enumerable:!0,get:function(){return x.WordBonus}});var B=r(9979);Object.defineProperty(t,"WordDefinition",{enumerable:!0,get:function(){return B.WordDefinition}})},2712:(e,t)=>{var r,c;Object.defineProperty(t,"__esModule",{value:!0}),t.isGame=t.Game=void 0,(c=r||(t.Game=r={})).Crossplay="crossplay",c.Kelimelik="kelimelik",c.LetterLeague="letter-league",c.Literaki="literaki",c.Scrabble="scrabble",c.ScrabbleDuel="scrabble-duel",c.SuperScrabble="super-scrabble";let i=Object.values(r);t.isGame=e=>i.includes(e)},2740:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.scrabble=void 0;let c=r(9276);t.scrabble={bingo:{score:50},blankScore:0,blanksCount:2,boardHeight:15,boardWidth:15,game:r(2708).Game.Scrabble,name:"Scrabble",rackSize:7,bonuses:[{multiplier:3,type:c.BONUS_WORD,x:0,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:0},{multiplier:3,type:c.BONUS_WORD,x:7,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:0},{multiplier:3,type:c.BONUS_WORD,x:14,y:0},{multiplier:2,type:c.BONUS_WORD,x:1,y:1},{multiplier:3,type:c.BONUS_CHARACTER,x:5,y:1},{multiplier:3,type:c.BONUS_CHARACTER,x:9,y:1},{multiplier:2,type:c.BONUS_WORD,x:13,y:1},{multiplier:2,type:c.BONUS_WORD,x:2,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:2},{multiplier:2,type:c.BONUS_WORD,x:12,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:3},{multiplier:2,type:c.BONUS_WORD,x:3,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:3},{multiplier:2,type:c.BONUS_WORD,x:11,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:3},{multiplier:2,type:c.BONUS_WORD,x:4,y:4},{multiplier:2,type:c.BONUS_WORD,x:10,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:5},{multiplier:3,type:c.BONUS_CHARACTER,x:5,y:5},{multiplier:3,type:c.BONUS_CHARACTER,x:9,y:5},{multiplier:3,type:c.BONUS_CHARACTER,x:13,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:2,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:12,y:6},{multiplier:3,type:c.BONUS_WORD,x:0,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:7},{multiplier:2,type:c.BONUS_WORD,x:7,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:7},{multiplier:3,type:c.BONUS_WORD,x:14,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:2,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:12,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:9},{multiplier:3,type:c.BONUS_CHARACTER,x:5,y:9},{multiplier:3,type:c.BONUS_CHARACTER,x:9,y:9},{multiplier:3,type:c.BONUS_CHARACTER,x:13,y:9},{multiplier:2,type:c.BONUS_WORD,x:4,y:10},{multiplier:2,type:c.BONUS_WORD,x:10,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:11},{multiplier:2,type:c.BONUS_WORD,x:3,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:11},{multiplier:2,type:c.BONUS_WORD,x:11,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:11},{multiplier:2,type:c.BONUS_WORD,x:2,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:12},{multiplier:2,type:c.BONUS_WORD,x:12,y:12},{multiplier:2,type:c.BONUS_WORD,x:1,y:13},{multiplier:3,type:c.BONUS_CHARACTER,x:5,y:13},{multiplier:3,type:c.BONUS_CHARACTER,x:9,y:13},{multiplier:2,type:c.BONUS_WORD,x:13,y:13},{multiplier:3,type:c.BONUS_WORD,x:0,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:14},{multiplier:3,type:c.BONUS_WORD,x:7,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:14},{multiplier:3,type:c.BONUS_WORD,x:14,y:14}]}},2856:function(e,t,r){var c,i=this&&this.__createBinding||(Object.create?function(e,t,r,c){void 0===c&&(c=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,c,i)}:function(e,t,r,c){void 0===c&&(c=r),e[c]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),l=this&&this.__importStar||(c=function(e){return(c=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t})(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=c(e),l=0;l<r.length;l++)"default"!==r[l]&&i(t,e,r[l]);return a(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.hasConfig=void 0;let o=l(r(9494));t.hasConfig=(e,t)=>Object.values(o).some(r=>r.game===e&&r.locale===t)},3305:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.polishLiteraki=t.polishScrabble=void 0;let c=r(2708),i=r(6330);t.polishScrabble=new c.Config({...i.scrabble,locale:c.Locale.PL_PL,tiles:[{character:"a",count:9,score:1},{character:"ą",count:1,score:5},{character:"b",count:2,score:3},{character:"c",count:3,score:2},{character:"ć",count:1,score:6},{character:"d",count:3,score:2},{character:"e",count:7,score:1},{character:"ę",count:1,score:5},{character:"f",count:1,score:5},{character:"g",count:2,score:3},{character:"h",count:2,score:3},{character:"i",count:8,score:1},{character:"j",count:2,score:3},{character:"k",count:3,score:2},{character:"l",count:3,score:2},{character:"ł",count:2,score:3},{character:"m",count:3,score:2},{character:"n",count:5,score:1},{character:"ń",count:1,score:7},{character:"o",count:6,score:1},{character:"\xf3",count:1,score:5},{character:"p",count:3,score:2},{character:"r",count:4,score:1},{character:"s",count:4,score:1},{character:"ś",count:1,score:5},{character:"t",count:3,score:2},{character:"u",count:2,score:3},{character:"w",count:4,score:1},{character:"y",count:4,score:2},{character:"z",count:5,score:1},{character:"ź",count:1,score:9},{character:"ż",count:1,score:5}]}),t.polishLiteraki=new c.Config({...i.literaki,locale:c.Locale.PL_PL,tiles:[{character:"a",count:9,score:1},{character:"ą",count:1,score:5},{character:"b",count:2,score:3},{character:"c",count:3,score:2},{character:"ć",count:1,score:5},{character:"d",count:3,score:2},{character:"e",count:7,score:1},{character:"ę",count:1,score:5},{character:"f",count:1,score:5},{character:"g",count:2,score:3},{character:"h",count:2,score:3},{character:"i",count:8,score:1},{character:"j",count:2,score:3},{character:"k",count:3,score:2},{character:"l",count:3,score:2},{character:"ł",count:2,score:3},{character:"m",count:3,score:2},{character:"n",count:5,score:1},{character:"ń",count:1,score:5},{character:"o",count:6,score:1},{character:"\xf3",count:1,score:5},{character:"p",count:3,score:2},{character:"r",count:4,score:1},{character:"s",count:4,score:1},{character:"ś",count:1,score:5},{character:"t",count:3,score:2},{character:"u",count:2,score:3},{character:"w",count:4,score:1},{character:"y",count:4,score:2},{character:"z",count:5,score:1},{character:"ź",count:1,score:5},{character:"ż",count:1,score:5}]})},3814:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.turkishScrabble=t.turkishKelimelik=void 0;let c=r(2708),i=r(6330);t.turkishKelimelik=new c.Config({...i.kelimelik,locale:c.Locale.TR_TR,tiles:[{character:"a",count:12,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:4},{character:"\xe7",count:2,score:4},{character:"d",count:2,score:3},{character:"e",count:8,score:1},{character:"f",count:1,score:7},{character:"g",count:1,score:5},{character:"ğ",count:1,score:8},{character:"h",count:1,score:5},{character:"ı",count:4,score:2},{character:"i",count:7,score:1},{character:"j",count:1,score:10},{character:"k",count:7,score:1},{character:"l",count:7,score:1},{character:"m",count:4,score:2},{character:"n",count:5,score:1},{character:"o",count:3,score:2},{character:"\xf6",count:1,score:7},{character:"p",count:1,score:5},{character:"r",count:6,score:1},{character:"s",count:3,score:2},{character:"ş",count:2,score:4},{character:"t",count:5,score:1},{character:"u",count:3,score:2},{character:"\xfc",count:2,score:3},{character:"v",count:1,score:7},{character:"y",count:2,score:3},{character:"z",count:2,score:4}]}),t.turkishScrabble=new c.Config({...i.scrabble,locale:c.Locale.TR_TR,tiles:[{character:"a",count:12,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:4},{character:"\xe7",count:2,score:4},{character:"d",count:2,score:3},{character:"e",count:8,score:1},{character:"f",count:1,score:7},{character:"g",count:1,score:5},{character:"ğ",count:1,score:8},{character:"h",count:1,score:5},{character:"ı",count:4,score:2},{character:"i",count:7,score:1},{character:"j",count:1,score:10},{character:"k",count:7,score:1},{character:"l",count:7,score:1},{character:"m",count:4,score:2},{character:"n",count:5,score:1},{character:"o",count:3,score:2},{character:"\xf6",count:1,score:7},{character:"p",count:1,score:5},{character:"r",count:6,score:1},{character:"s",count:3,score:2},{character:"ş",count:2,score:4},{character:"t",count:5,score:1},{character:"u",count:3,score:2},{character:"\xfc",count:2,score:3},{character:"v",count:1,score:7},{character:"y",count:2,score:3},{character:"z",count:2,score:4}]})},3830:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.persianScrabble=void 0;let c=r(2708),i=r(6330);t.persianScrabble=new c.Config({...i.scrabble,locale:c.Locale.FA_IR,tiles:[{character:"ا",count:12,score:1},{character:"ب",count:4,score:1},{character:"پ",count:1,score:6},{character:"ت",count:4,score:1},{character:"ث",count:1,score:10},{character:"ج",count:2,score:5},{character:"چ",count:1,score:6},{character:"ح",count:1,score:6},{character:"خ",count:2,score:5},{character:"د",count:6,score:1},{character:"ذ",count:1,score:10},{character:"ر",count:7,score:1},{character:"ز",count:3,score:4},{character:"ژ",count:1,score:10},{character:"س",count:3,score:2},{character:"ش",count:3,score:3},{character:"ص",count:1,score:6},{character:"ض",count:1,score:8},{character:"ط",count:1,score:8},{character:"ظ",count:1,score:10},{character:"ع",count:2,score:5},{character:"غ",count:1,score:8},{character:"ف",count:2,score:4},{character:"ق",count:2,score:5},{character:"ک",count:3,score:3},{character:"گ",count:2,score:4},{character:"ل",count:3,score:2},{character:"م",count:5,score:1},{character:"ن",count:6,score:1},{character:"و",count:5,score:1},{character:"ه",count:5,score:1},{character:"ی",count:8,score:1}]})},3852:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isCellJson=void 0;let c=r(8049),i=r(7432);t.isCellJson=e=>(0,c.isObject)(e)&&"boolean"==typeof e.isEmpty&&((0,i.isTileJson)(e.tile)||null===e.tile)&&"number"==typeof e.x&&"number"==typeof e.y},3986:function(e,t,r){var c,i=this&&this.__createBinding||(Object.create?function(e,t,r,c){void 0===c&&(c=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,c,i)}:function(e,t,r,c){void 0===c&&(c=r),e[c]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),l=this&&this.__importStar||(c=function(e){return(c=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t})(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=c(e),l=0;l<r.length;l++)"default"!==r[l]&&i(t,e,r[l]);return a(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.languages=t.games=t.hasConfig=t.getConfig=void 0,t.games=l(r(6330)),t.languages=l(r(9494));var o=r(524);Object.defineProperty(t,"getConfig",{enumerable:!0,get:function(){return o.getConfig}});var s=r(2856);Object.defineProperty(t,"hasConfig",{enumerable:!0,get:function(){return s.hasConfig}})},4025:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePattern=void 0;let c=r(8689),i=r(7806);t.generatePattern=({board:e,cells:t,config:r,PatternModel:a})=>(0,i.generateStartIndices)(t).flatMap(i=>{let l=(0,c.generateEndIndices)(t,i),o=[];for(let c of l){let l=new a(e,t.slice(i,c+1));l.canBePlaced(r)&&o.push(l)}return o})},4040:(e,t)=>{var r,c;Object.defineProperty(t,"__esModule",{value:!0}),t.isLocale=t.Locale=void 0,(c=r||(t.Locale=r={})).DE_DE="de-DE",c.EN_GB="en-GB",c.EN_US="en-US",c.ES_ES="es-ES",c.FA_IR="fa-IR",c.FR_FR="fr-FR",c.PL_PL="pl-PL",c.RO_RO="ro-RO",c.TR_TR="tr-TR";let i=Object.values(r);t.isLocale=e=>i.includes(e)},4232:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Config=void 0;let c=r(9276),i=r(9112),a=r(6759);class l{constructor(e){this.bonuses=o(e),this.config=e,this.pointsMap=n(this.config)}get alphabet(){return s(this.config)}get bingo(){return this.config.bingo}get blankScore(){return this.config.blankScore}get blanksCount(){return this.config.blanksCount}get boardHeight(){return this.config.boardHeight}get boardWidth(){return this.config.boardWidth}get game(){return this.config.game}get locale(){return this.config.locale}get twoCharacterTiles(){return this.config.tiles.filter(e=>2===e.character.length).map(e=>e.character)}getCellBonus(e){return this.bonuses.find(t=>t.matchesCellCoordinates(e))}getCellBonusValue(e){return this.getCellBonus(e)?.value||c.NO_BONUS}getCharacterPoints(e){if(null!==e)return e===c.BLANK?this.blankScore:this.pointsMap[e]}getTwoCharacterTileByPrefix(e){if(1===e.length)return this.twoCharacterTiles.find(t=>t.startsWith(e.toLocaleLowerCase()))}getTilePoints(e){if(null!==e)return e.isBlank?this.blankScore:this.getCharacterPoints(e.character)}hasCharacter(e){return e in this.pointsMap}isTwoCharacterTilePrefix(e){return void 0!==this.getTwoCharacterTileByPrefix(e)}get rackSize(){return this.config.rackSize}get supportsRemainingTiles(){return this.tiles.every(e=>"number"==typeof e.count)}get tiles(){return this.config.tiles}toJson(){return this.config}}t.Config=l,l.fromJson=e=>new l(e);let o=e=>e.bonuses.map(e=>{if(e.type===c.BONUS_CHARACTER)return new i.CharacterBonus(e);if(e.type===c.BONUS_WORD)return new a.WordBonus(e);throw Error(`Unsupported Bonus type: "${e.type}"`)}),s=e=>e.tiles.map(({character:e})=>e),n=e=>e.tiles.reduce((e,{character:t,score:r})=>({...e,[t]:r}),{})},4758:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Pattern=void 0;class r{constructor(e,t){this.board=e,this.cells=t}canBePlaced(e){let t=this.getEmptyCellsCount();return t>=1&&t<=e.rackSize&&(this.hasAtLeast1NonEmptyCell()||this.collides()||this.goesThroughBoardCenter()&&this.board.isEmpty())}clone(){return new r(this.board,this.cells.map(e=>e.clone()))}collides(){return this.cells.some(e=>e.isEmpty&&this.board.collides(e))}getIndexOfFirstCellWithoutTile(){return this.cells.findIndex(e=>!e.hasTile())}getEmptyCellsCount(){return this.cells.filter(e=>e.isEmpty).length}goesThroughBoardCenter(){return this.cells.some(e=>e.x===this.board.center.x&&e.y===this.board.center.y&&e.isEmpty)}hasAtLeast1EmptyCell(){return this.cells.some(e=>e.isEmpty)}hasAtLeast1NonEmptyCell(){return this.cells.some(e=>!e.isEmpty)}getCollisions(){return[]}toJson(){return{cells:this.cells.map(e=>e.toJson()),collisions:this.getCollisions().map(e=>e.toJson()),word:this.toString()}}toString(){return this.cells.reduce((e,t)=>e+t.toString(),"")}}t.Pattern=r},4979:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.romanianSuperScrabble=t.romanianScrabble=void 0;let c=r(2708),i=r(6330);t.romanianScrabble=new c.Config({...i.scrabble,locale:c.Locale.RO_RO,tiles:[{character:"a",count:11,score:1},{character:"b",count:2,score:9},{character:"c",count:5,score:1},{character:"d",count:4,score:2},{character:"e",count:9,score:1},{character:"f",count:2,score:8},{character:"g",count:2,score:9},{character:"h",count:1,score:10},{character:"i",count:10,score:1},{character:"j",count:1,score:10},{character:"l",count:4,score:1},{character:"m",count:3,score:4},{character:"n",count:6,score:1},{character:"o",count:5,score:1},{character:"p",count:4,score:2},{character:"r",count:7,score:1},{character:"s",count:5,score:1},{character:"t",count:7,score:1},{character:"u",count:6,score:1},{character:"v",count:2,score:8},{character:"x",count:1,score:10},{character:"z",count:1,score:10}]}),t.romanianSuperScrabble=new c.Config({...i.superScrabble,locale:c.Locale.RO_RO,tiles:[{character:"a",count:22,score:1},{character:"b",count:4,score:9},{character:"c",count:10,score:1},{character:"d",count:8,score:2},{character:"e",count:18,score:1},{character:"f",count:4,score:8},{character:"g",count:4,score:9},{character:"h",count:2,score:10},{character:"i",count:20,score:1},{character:"j",count:2,score:10},{character:"l",count:8,score:1},{character:"m",count:6,score:4},{character:"n",count:12,score:1},{character:"o",count:10,score:1},{character:"p",count:8,score:2},{character:"r",count:14,score:1},{character:"s",count:10,score:1},{character:"t",count:14,score:1},{character:"u",count:12,score:1},{character:"v",count:4,score:8},{character:"x",count:2,score:10},{character:"z",count:2,score:10}]})},5006:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isError=void 0;let c=r(8049);t.isError=e=>!!(0,c.isObject)(e)&&"string"==typeof e.message},5149:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.kelimelik=void 0;let c=r(9276);t.kelimelik={bingo:{score:30},blankScore:0,blanksCount:2,boardHeight:15,boardWidth:15,game:r(2708).Game.Kelimelik,name:"Kelimelik",rackSize:7,bonuses:[{multiplier:3,type:c.BONUS_WORD,x:2,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:0},{multiplier:3,type:c.BONUS_WORD,x:12,y:0},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:1},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:1},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:1},{multiplier:3,type:c.BONUS_CHARACTER,x:13,y:1},{multiplier:3,type:c.BONUS_WORD,x:0,y:2},{multiplier:2,type:c.BONUS_WORD,x:7,y:2},{multiplier:3,type:c.BONUS_WORD,x:14,y:2},{multiplier:2,type:c.BONUS_WORD,x:3,y:3},{multiplier:2,type:c.BONUS_WORD,x:11,y:3},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:10,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:1,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:13,y:6},{multiplier:2,type:c.BONUS_WORD,x:2,y:7},{multiplier:2,type:c.BONUS_WORD,x:12,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:1,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:13,y:8},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:9},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:10,y:10},{multiplier:2,type:c.BONUS_WORD,x:3,y:11},{multiplier:2,type:c.BONUS_WORD,x:11,y:11},{multiplier:3,type:c.BONUS_WORD,x:0,y:12},{multiplier:2,type:c.BONUS_WORD,x:7,y:12},{multiplier:3,type:c.BONUS_WORD,x:14,y:12},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:13},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:13},{multiplier:2,type:c.BONUS_CHARACTER,x:8,y:13},{multiplier:3,type:c.BONUS_CHARACTER,x:13,y:13},{multiplier:3,type:c.BONUS_WORD,x:2,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:14},{multiplier:3,type:c.BONUS_WORD,x:12,y:14}]}},5350:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getUniquePatterns=void 0;let c=r(8878);t.getUniquePatterns=e=>{let t=new Set,r=[];for(let i of e){let e=(0,c.getPatternHash)(i);t.has(e)||(t.add(e),r.push(i))}return r}},5358:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateVerticalPatterns=void 0;let c=r(2708),i=r(4025),a=r(7783);t.generateVerticalPatterns=(e,t)=>{let r=e.boardWidth;return(0,a.generateVectors)({getNthVector:e=>t.getColumn(e),vectorsCount:r}).flatMap(r=>(0,i.generatePattern)({board:t,config:e,PatternModel:c.VerticalPattern,cells:r}))}},5452:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.VerticalPattern=void 0;let c=r(4758);class i extends c.Pattern{clone(){return new i(this.board,this.cells.map(e=>e.clone()))}getCollisions(){let e=[];return this.cells.filter(e=>e.isEmpty&&(this.board.collidesLeft(e)||this.board.collidesRight(e))).forEach(t=>{let r=this.board.getRow(t.y),i=t.x-1;for(;i>=0&&r[i].hasTile();)--i;let a=r.slice(i+1,t.x);for(i=t.x+1;i<r.length&&r[i].hasTile();)++i;let l=r.slice(t.x+1,i),o=[...a,t,...l];if(o.length>1){let t=new c.Pattern(this.board,o);e.push(t)}}),e}}t.VerticalPattern=i},5764:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.crossplay=void 0;let c=r(9276);t.crossplay={bingo:{score:40},blankScore:0,blanksCount:3,boardHeight:15,boardWidth:15,game:r(2708).Game.Crossplay,name:"Crossplay",rackSize:7,bonuses:[{multiplier:3,type:c.BONUS_CHARACTER,x:0,y:0},{multiplier:3,type:c.BONUS_CHARACTER,x:14,y:0},{multiplier:3,type:c.BONUS_CHARACTER,x:0,y:14},{multiplier:3,type:c.BONUS_CHARACTER,x:14,y:14},{multiplier:3,type:c.BONUS_CHARACTER,x:6,y:1},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:1},{multiplier:3,type:c.BONUS_CHARACTER,x:6,y:13},{multiplier:3,type:c.BONUS_CHARACTER,x:8,y:13},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:6},{multiplier:3,type:c.BONUS_CHARACTER,x:13,y:6},{multiplier:3,type:c.BONUS_CHARACTER,x:1,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:13,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:5,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:9,y:4},{multiplier:3,type:c.BONUS_CHARACTER,x:5,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:9,y:10},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:5},{multiplier:3,type:c.BONUS_CHARACTER,x:10,y:5},{multiplier:3,type:c.BONUS_CHARACTER,x:4,y:9},{multiplier:3,type:c.BONUS_CHARACTER,x:10,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:2},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:12},{multiplier:2,type:c.BONUS_CHARACTER,x:2,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:12,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:2,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:12,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:3},{multiplier:2,type:c.BONUS_CHARACTER,x:3,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:11,y:11},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:14,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:14},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:7,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:7},{multiplier:2,type:c.BONUS_WORD,x:1,y:1},{multiplier:2,type:c.BONUS_WORD,x:13,y:1},{multiplier:2,type:c.BONUS_WORD,x:1,y:13},{multiplier:2,type:c.BONUS_WORD,x:13,y:13},{multiplier:2,type:c.BONUS_WORD,x:3,y:7},{multiplier:2,type:c.BONUS_WORD,x:11,y:7},{multiplier:2,type:c.BONUS_WORD,x:7,y:3},{multiplier:2,type:c.BONUS_WORD,x:7,y:11},{multiplier:3,type:c.BONUS_WORD,x:3,y:0},{multiplier:3,type:c.BONUS_WORD,x:11,y:0},{multiplier:3,type:c.BONUS_WORD,x:3,y:14},{multiplier:3,type:c.BONUS_WORD,x:11,y:14},{multiplier:3,type:c.BONUS_WORD,x:0,y:3},{multiplier:3,type:c.BONUS_WORD,x:14,y:3},{multiplier:3,type:c.BONUS_WORD,x:0,y:11},{multiplier:3,type:c.BONUS_WORD,x:14,y:11}]}},6186:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.germanScrabble=void 0;let c=r(2708),i=r(6330);t.germanScrabble=new c.Config({...i.scrabble,locale:c.Locale.DE_DE,tiles:[{character:"a",count:5,score:1},{character:"\xe4",count:1,score:6},{character:"b",count:2,score:3},{character:"c",count:2,score:4},{character:"d",count:4,score:1},{character:"e",count:15,score:1},{character:"f",count:2,score:4},{character:"g",count:3,score:2},{character:"h",count:4,score:2},{character:"i",count:6,score:1},{character:"j",count:1,score:6},{character:"k",count:2,score:4},{character:"l",count:3,score:2},{character:"m",count:4,score:3},{character:"n",count:9,score:1},{character:"o",count:3,score:2},{character:"\xf6",count:1,score:8},{character:"p",count:1,score:4},{character:"q",count:1,score:10},{character:"r",count:6,score:1},{character:"s",count:7,score:1},{character:"t",count:6,score:1},{character:"u",count:6,score:1},{character:"\xfc",count:1,score:6},{character:"v",count:1,score:6},{character:"w",count:1,score:3},{character:"x",count:1,score:8},{character:"y",count:1,score:10},{character:"z",count:1,score:3}]})},6249:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.literaki=void 0;let c=r(9276);t.literaki={bingo:{score:50},blankScore:0,blanksCount:2,boardHeight:15,boardWidth:15,game:r(2708).Game.Literaki,name:"Literaki",rackSize:7,bonuses:[{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:0,y:0},{multiplier:3,type:c.BONUS_WORD,x:2,y:0},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:5,y:0},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:7,y:0},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:9,y:0},{multiplier:3,type:c.BONUS_WORD,x:12,y:0},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:14,y:0},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:4,y:1},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:6,y:1},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:8,y:1},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:10,y:1},{multiplier:3,type:c.BONUS_WORD,x:0,y:2},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:3,y:2},{multiplier:2,type:c.BONUS_WORD,x:5,y:2},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:7,y:2},{multiplier:2,type:c.BONUS_WORD,x:9,y:2},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:11,y:2},{multiplier:3,type:c.BONUS_WORD,x:14,y:2},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:2,y:3},{multiplier:2,type:c.BONUS_WORD,x:4,y:3},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:6,y:3},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:8,y:3},{multiplier:2,type:c.BONUS_WORD,x:10,y:3},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:12,y:3},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:1,y:4},{multiplier:2,type:c.BONUS_WORD,x:3,y:4},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:5,y:4},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:9,y:4},{multiplier:2,type:c.BONUS_WORD,x:11,y:4},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:13,y:4},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:0,y:5},{multiplier:2,type:c.BONUS_WORD,x:2,y:5},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:4,y:5},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:7,y:5},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:10,y:5},{multiplier:2,type:c.BONUS_WORD,x:12,y:5},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:14,y:5},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:1,y:6},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:3,y:6},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:6,y:6},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:8,y:6},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:11,y:6},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:13,y:6},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:0,y:7},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:2,y:7},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:5,y:7},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:7,y:7},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:9,y:7},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:12,y:7},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:14,y:7},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:1,y:8},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:3,y:8},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:6,y:8},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:8,y:8},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:11,y:8},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:13,y:8},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:0,y:9},{multiplier:2,type:c.BONUS_WORD,x:2,y:9},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:4,y:9},{multiplier:3,score:3,type:c.BONUS_CHARACTER,x:7,y:9},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:10,y:9},{multiplier:2,type:c.BONUS_WORD,x:12,y:9},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:14,y:9},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:1,y:10},{multiplier:2,type:c.BONUS_WORD,x:3,y:10},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:5,y:10},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:9,y:10},{multiplier:2,type:c.BONUS_WORD,x:11,y:10},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:13,y:10},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:2,y:11},{multiplier:2,type:c.BONUS_WORD,x:4,y:11},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:6,y:11},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:8,y:11},{multiplier:2,type:c.BONUS_WORD,x:10,y:11},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:12,y:11},{multiplier:3,type:c.BONUS_WORD,x:0,y:12},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:3,y:12},{multiplier:2,type:c.BONUS_WORD,x:5,y:12},{multiplier:3,score:1,type:c.BONUS_CHARACTER,x:7,y:12},{multiplier:2,type:c.BONUS_WORD,x:9,y:12},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:11,y:12},{multiplier:3,type:c.BONUS_WORD,x:14,y:12},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:4,y:13},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:6,y:13},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:8,y:13},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:10,y:13},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:0,y:14},{multiplier:3,type:c.BONUS_WORD,x:2,y:14},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:5,y:14},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:7,y:14},{multiplier:3,score:2,type:c.BONUS_CHARACTER,x:9,y:14},{multiplier:3,type:c.BONUS_WORD,x:12,y:14},{multiplier:3,score:5,type:c.BONUS_CHARACTER,x:14,y:14}]}},6330:function(e,t,r){var c=this&&this.__createBinding||(Object.create?function(e,t,r,c){void 0===c&&(c=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,c,i)}:function(e,t,r,c){void 0===c&&(c=r),e[c]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||c(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(5764),t),i(r(5149),t),i(r(1249),t),i(r(6249),t),i(r(2740),t),i(r(7854),t),i(r(1553),t)},6500:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.frenchScrabble=void 0;let c=r(2708),i=r(6330);t.frenchScrabble=new c.Config({...i.scrabble,locale:c.Locale.FR_FR,tiles:[{character:"a",count:9,score:1},{character:"b",count:2,score:3},{character:"c",count:2,score:3},{character:"d",count:3,score:2},{character:"e",count:15,score:1},{character:"f",count:2,score:4},{character:"g",count:2,score:2},{character:"h",count:2,score:4},{character:"i",count:8,score:1},{character:"j",count:1,score:8},{character:"k",count:1,score:10},{character:"l",count:5,score:1},{character:"m",count:3,score:2},{character:"n",count:6,score:1},{character:"o",count:6,score:1},{character:"p",count:2,score:3},{character:"q",count:1,score:8},{character:"r",count:6,score:1},{character:"s",count:6,score:1},{character:"t",count:6,score:1},{character:"u",count:6,score:1},{character:"v",count:2,score:4},{character:"w",count:1,score:10},{character:"x",count:1,score:10},{character:"y",count:1,score:10},{character:"z",count:1,score:10}]})},6759:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WordBonus=void 0;let c=r(9276),i=r(719);class a extends i.Bonus{constructor(){super(...arguments),this.type=c.BONUS_WORD}get value(){return{characterMultiplier:1,wordMultiplier:this.multiplier}}}t.WordBonus=a},6902:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBoardJson=void 0;let c=r(3852);t.isBoardJson=e=>{if(!Array.isArray(e))return!1;for(let t of e){if(!Array.isArray(e))return!1;for(let e of t)if(!(0,c.isCellJson)(e))return!1}return!0}},6906:(e,t,r)=>{t.kH=void 0,r(1566),r(8735),r(8689),r(8620),r(4025),r(9052),r(7806),r(7783),r(5358),r(2095),r(8878),r(506),r(5350);var c=r(1513);Object.defineProperty(t,"kH",{enumerable:!0,get:function(){return c.solve}})},7303:()=>{try{self["workbox:strategies:7.4.0"]&&_()}catch(e){}},7432:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isTileJson=void 0;let c=r(8049);t.isTileJson=e=>(0,c.isObject)(e)&&"string"==typeof e.character&&"boolean"==typeof e.isBlank},7783:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateVectors=void 0,t.generateVectors=({getNthVector:e,vectorsCount:t})=>Array.from({length:t},(t,r)=>e(r))},7806:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateStartIndices=void 0,t.generateStartIndices=e=>{if(0===e.length)return[];let t=[0];for(let r=1;r<e.length-1;++r)e[r-1].hasTile()||t.push(r);return t}},7854:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.scrabbleDuel=void 0;let c=r(9276);t.scrabbleDuel={bingo:{score:50},blankScore:0,blanksCount:2,boardHeight:11,boardWidth:11,game:r(2708).Game.ScrabbleDuel,name:"Scrabble Duel",rackSize:7,bonuses:[{multiplier:2,type:c.BONUS_WORD,x:5,y:5},{multiplier:3,type:c.BONUS_WORD,x:0,y:0},{multiplier:3,type:c.BONUS_WORD,x:10,y:0},{multiplier:3,type:c.BONUS_WORD,x:0,y:10},{multiplier:3,type:c.BONUS_WORD,x:10,y:10},{multiplier:2,type:c.BONUS_WORD,x:1,y:1},{multiplier:2,type:c.BONUS_WORD,x:2,y:2},{multiplier:2,type:c.BONUS_WORD,x:9,y:1},{multiplier:2,type:c.BONUS_WORD,x:8,y:2},{multiplier:2,type:c.BONUS_WORD,x:1,y:9},{multiplier:2,type:c.BONUS_WORD,x:2,y:8},{multiplier:2,type:c.BONUS_WORD,x:9,y:9},{multiplier:2,type:c.BONUS_WORD,x:8,y:8},{multiplier:3,type:c.BONUS_CHARACTER,x:3,y:3},{multiplier:3,type:c.BONUS_CHARACTER,x:3,y:7},{multiplier:3,type:c.BONUS_CHARACTER,x:7,y:3},{multiplier:3,type:c.BONUS_CHARACTER,x:7,y:7},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:9},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:10},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:9,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:10,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:5,y:1},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:0},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:1,y:5},{multiplier:2,type:c.BONUS_CHARACTER,x:0,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:4},{multiplier:2,type:c.BONUS_CHARACTER,x:4,y:6},{multiplier:2,type:c.BONUS_CHARACTER,x:6,y:6}]}},8049:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=void 0,t.isObject=e=>"object"==typeof e&&null!==e},8135:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isMultiplierBingo=t.isScoreBingo=t.isBingo=void 0;let c=r(8049);t.isBingo=e=>(0,t.isScoreBingo)(e)||(0,t.isMultiplierBingo)(e),t.isScoreBingo=e=>(0,c.isObject)(e)&&"score"in e&&"number"==typeof e.score,t.isMultiplierBingo=e=>(0,c.isObject)(e)&&"multiplier"in e&&"number"==typeof e.multiplier},8159:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Result=void 0;let c=r(9276),i=r(1370);class a{constructor({cells:e,id:t,collisions:r,points:c}){const i=u(e);this.blanksCount=l(i).length,this.cells=e,this.collisions=r,this.consonantsCount=o(i).length,this.id=t,this.length=e.length,this.points=c,this.pointsRatio=n(i,c),this.tiles=i,this.tilesCount=i.length,this.vowelsCount=s(i).length,this.word=p(e),this.words=h(e,r),this.wordsCount=1+this.collisions.length}toJson(){return{cells:this.cells.map(e=>e.toJson()),id:this.id,collisions:this.collisions.map(e=>e.map(e=>e.toJson())),points:this.points}}isHorizontal(){return this.cells[0].y===this.cells[1].y}isVertical(){return this.cells[0].x===this.cells[1].x}}t.Result=a,a.fromJson=e=>new a({id:e.id,cells:e.cells.map(i.Cell.fromJson),collisions:e.collisions.map(e=>e.map(i.Cell.fromJson)),points:e.points});let l=e=>e.filter(({isBlank:e})=>e),o=e=>e.filter(y),s=e=>e.filter(R),n=(e,t)=>t/e.length,u=e=>e.filter(({isEmpty:e})=>e).map(({tile:e})=>e),p=e=>e.reduce((e,t)=>e+t.toString(),""),h=(e,t)=>[e,...t].map(p),y=({character:e,isBlank:t})=>c.CONSONANTS.includes(e)&&!t,R=({character:e,isBlank:t})=>c.VOWELS.includes(e)&&!t},8620:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHorizontalPatterns=void 0;let c=r(2708),i=r(4025),a=r(7783);t.generateHorizontalPatterns=(e,t)=>{let r=e.boardHeight;return(0,a.generateVectors)({getNthVector:e=>t.getRow(e),vectorsCount:r}).flatMap(r=>(0,i.generatePattern)({board:t,config:e,PatternModel:c.HorizontalPattern,cells:r}))}},8689:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateEndIndices=void 0,t.generateEndIndices=(e,t)=>{if(0===e.length)return[];let r=[];for(let c=t+1;c<e.length-1;++c)e[c+1].hasTile()||r.push(c);return r.push(e.length-1),r}},8735:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fillPatternRecursive=t.fillPattern=void 0;let c=r(9276),i=r(2708);t.fillPattern=(e,r,c,i)=>{if(c.getEmptyCellsCount()>i.length)return[];let a=[];return(0,t.fillPatternRecursive)(a,e,r,c,c.toString(),i),a},t.fillPatternRecursive=(e,r,a,l,o,s)=>{let n=l.getIndexOfFirstCellWithoutTile();if(-1===n){r.has(o)&&l.getCollisions().every(e=>r.has(e.toString()))&&e.push(new i.FinalPattern(l.clone()));return}for(let u=0;u<s.length;++u){let p=s[u],h=l.cells[n].tile;l.cells[n].tile=p;let y=l.getIndexOfFirstCellWithoutTile(),R=o.indexOf(c.EMPTY_CELL),C=o.substring(0,R),m=o.substring(R+1);for(let c of p.isBlank?a.alphabet:[p.character]){let o=C+c,n=o+m;p.character=c,-1===y?r.has(n)&&l.getCollisions().every(e=>r.has(e.toString()))&&e.push(new i.FinalPattern(l.clone())):r.hasPrefix(o)&&(s.splice(u,1),(0,t.fillPatternRecursive)(e,r,a,l,n,s),s.splice(u,0,p))}l.cells[n].tile=h}}},8878:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getPatternHash=void 0,t.getPatternHash=e=>e.cells.filter(e=>e.isEmpty).map(e=>{let t=e.tile.isBlank?"!":"",r=e.tile.character+t;return[e.x,e.y,r].join(",")}).join("-")},9052:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePatterns=void 0;let c=r(8620),i=r(5358);t.generatePatterns=(e,t)=>{let r=(0,c.generateHorizontalPatterns)(e,t),a=(0,i.generateVerticalPatterns)(e,t);return r.concat(a)}},9112:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterBonus=void 0;let c=r(9276),i=r(719);class a extends i.Bonus{constructor(){super(...arguments),this.type=c.BONUS_CHARACTER}canApply(e,t){return super.canApply(e,t)&&this.matchesCellTileScore(e,t)}matchesCellTileScore(e,t){return void 0===this.score||this.score===e.pointsMap[t.tile.character]}get value(){return{characterMultiplier:this.multiplier,wordMultiplier:1}}}t.CharacterBonus=a},9140:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Board=void 0;let c=r(9276),i=r(1370),a=r(9654);class l{static fromStringArray(e){return new l({rows:e.map((e,t)=>e.split("").map((e,r)=>new i.Cell({isEmpty:!e||e===c.EMPTY_CELL,tile:e===c.EMPTY_CELL?a.Tile.Null:new a.Tile({character:e}),x:r,y:t})))})}constructor({rows:e}){this.rows=e,this.columnsCount=e[0].length,this.rowsCount=e.length}get center(){let e=Math.floor(this.columnsCount/2),t=Math.floor(this.rowsCount/2);return this.rows[t][e]}clone(){return new l({rows:this.rows.map(e=>e.map(e=>e.clone()))})}collides(e){return this.collidesUp(e)||this.collidesDown(e)||this.collidesLeft(e)||this.collidesRight(e)}collidesDown({x:e,y:t}){return t<this.rowsCount-1&&!this.rows[t+1][e].isEmpty}collidesLeft({x:e,y:t}){return e>0&&!this.rows[t][e-1].isEmpty}collidesRight({x:e,y:t}){return e<this.columnsCount-1&&!this.rows[t][e+1].isEmpty}collidesUp({x:e,y:t}){return t>0&&!this.rows[t-1][e].isEmpty}equals(e){return this.columnsCount===e.columnsCount&&this.rowsCount===e.rowsCount&&this.rows.every((t,r)=>t.every((t,c)=>t.equals(e.rows[r][c])))}getBlanksCount(){return this.rows.reduce((e,t)=>e+t.reduce((e,t)=>e+ +!!t.tile.isBlank,0),0)}getColumn(e){return this.rows.map(t=>t[e])}getRow(e){return this.rows[e]}getTilesCount(){return this.rows.reduce((e,t)=>e+t.reduce((e,t)=>e+ +!!t.hasTile(),0),0)}getWords(){return[...s(this.rows),...s(o(this.rows))]}isEmpty(){return this.rows.every(e=>e.every(({isEmpty:e})=>e))}toJson(){return this.rows.map(e=>e.map(e=>e.toJson()))}toString(){return this.rows.map(e=>e.map(String).join("")).join("\n")}updateCell(e,t,r){this.rows[t][e]=r(this.rows[t][e])}updateRow(e,t){this.rows[e]=t(this.rows[e])}}t.Board=l,l.create=(e,t)=>{let r=Array(t),c=Array(e).fill(" ").join(""),i=r.fill(c);return l.fromStringArray(i)},l.fromJson=e=>new l({rows:e.map(e=>e.map(i.Cell.fromJson))});let o=e=>{let t=e.length,r=e[0].length,c=Array(r).fill(null).map(()=>Array(t));for(let i=0;i<t;++i)for(let t=0;t<r;++t)c[t][i]=e[i][t];return c},s=e=>{let t=[];for(let r of e){let e=[];for(let c of r)c.isEmpty?e.length>0&&(e.length>1&&t.push(n(e)),e=[]):e.push(c);e.length>1&&t.push(n(e))}return t},n=e=>e.map(e=>e.tile.character).join("")},9276:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.VOWELS=t.CONSONANTS=t.NO_BONUS=t.EMPTY_CELL=t.BONUS_WORD=t.BONUS_CHARACTER=t.BLANK=t.COMMA_LATIN=t.COMMA_ARABIC=void 0,t.COMMA_ARABIC="،",t.COMMA_LATIN=",",t.BLANK=" ",t.BONUS_CHARACTER="BONUS_CHARACTER",t.BONUS_WORD="BONUS_WORD",t.EMPTY_CELL=" ",t.NO_BONUS={characterMultiplier:1,wordMultiplier:1},t.CONSONANTS="bc\xe7ćdfgğhjklłmnń\xf1pqrsşśtvwxzźż".split(""),t.VOWELS="aą\xe4eęio\xf3\xf6u\xfcyı".split("")},9494:function(e,t,r){var c=this&&this.__createBinding||(Object.create?function(e,t,r,c){void 0===c&&(c=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,c,i)}:function(e,t,r,c){void 0===c&&(c=r),e[c]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||c(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(1150),t),i(r(6186),t),i(r(6500),t),i(r(3830),t),i(r(3305),t),i(r(4979),t),i(r(1958),t),i(r(3814),t)},9654:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Tile=void 0;let c=r(9276);class i{constructor({character:e,isBlank:t=!1}){this.character=e,this.isBlank=t}clone(){return new i({character:this.character,isBlank:this.isBlank})}equals(e){return this.character===e.character&&this.isBlank===e.isBlank}toJson(){return{character:this.character,isBlank:this.isBlank}}toString(){return this.character}}t.Tile=i,i.fromJson=e=>e?new i({character:e.character,isBlank:e.isBlank}):i.Null,i.Null=Object.freeze({character:c.EMPTY_CELL,isBlank:!1,clone:()=>i.Null,equals:e=>e===i.Null,toJson:()=>null,toString:()=>c.EMPTY_CELL})},9979:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WordDefinition=void 0;class r{constructor({definitions:e,exists:t,isAllowed:r,word:c}){this.definitions=e,this.exists=t,this.isAllowed=r,this.word=c}toJson(){return{definitions:this.definitions,exists:this.exists,isAllowed:this.isAllowed,word:this.word}}}t.WordDefinition=r,r.fromJson=e=>e?new r({definitions:e.definitions,exists:e.exists,isAllowed:e.isAllowed,word:e.word}):r.Null,r.Null=Object.freeze({definitions:[],exists:!1,isAllowed:!1,word:"",toJson:()=>null})}},s={};function n(e){var t=s[e];if(void 0!==t)return t.exports;var r=s[e]={exports:{}},c=!0;try{o[e].call(r.exports,r,r.exports,n),c=!1}finally{c&&delete s[e]}return r.exports}n(1693);class u extends Error{constructor(e,t){super(((e,...t)=>{let r=e;return t.length>0&&(r+=` :: ${JSON.stringify(t)}`),r})(e,t)),this.name=e,this.details=t}}let p={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"u">typeof registration?registration.scope:""},h=e=>[p.prefix,e,p.suffix].filter(e=>e&&e.length>0).join("-"),y=e=>e||h(p.precache);function R(e,t){let r=t();return e.waitUntil(r),r}n(1802);class C{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:r})=>{if("install"===e.type&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;r?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return r}}}class m{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let r=(null==t?void 0:t.cacheKey)||this._precacheController.getCacheKeyForURL(e.url);return r?new Request(r,{headers:e.headers}):e},this._precacheController=e}}async function O(t,r){let c=null;if(t.url&&(c=new URL(t.url).origin),c!==self.location.origin)throw new u("cross-origin-copy-response",{origin:c});let i=t.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},l=r?r(a):a,o=!function(){if(void 0===e){let t=new Response("");if("body"in t)try{new Response(t.body),e=!0}catch(t){e=!1}e=!1}return e}()?await i.blob():i.body;return new Response(o,l)}function d(e,t){let r=new URL(e);for(let e of t)r.searchParams.delete(e);return r.href}async function A(e,t,r,c){let i=d(t.url,r);if(t.url===i)return e.match(t,c);let a=Object.assign(Object.assign({},c),{ignoreSearch:!0});for(let l of(await e.keys(t,a)))if(i===d(l.url,r))return e.match(l,c)}class S{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}let f=new Set;async function x(){for(let e of f)await e()}function B(e){return"string"==typeof e?new Request(e):e}n(7303);class N{constructor(e,t){for(const r of(this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new S,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map,this._plugins))this._pluginStateMap.set(r,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:t}=this,r=B(e);if("navigate"===r.mode&&t instanceof FetchEvent&&t.preloadResponse){let e=await t.preloadResponse;if(e)return e}let c=this.hasCallback("fetchDidFail")?r.clone():null;try{for(let e of this.iterateCallbacks("requestWillFetch"))r=await e({request:r.clone(),event:t})}catch(e){if(e instanceof Error)throw new u("plugin-error-request-will-fetch",{thrownErrorMessage:e.message})}let i=r.clone();try{let e;for(let c of(e=await fetch(r,"navigate"===r.mode?void 0:this._strategy.fetchOptions),this.iterateCallbacks("fetchDidSucceed")))e=await c({event:t,request:i,response:e});return e}catch(e){throw c&&await this.runCallbacks("fetchDidFail",{error:e,event:t,originalRequest:c.clone(),request:i.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),r=t.clone();return this.waitUntil(this.cachePut(e,r)),t}async cacheMatch(e){let t,r=B(e),{cacheName:c,matchOptions:i}=this._strategy,a=await this.getCacheKey(r,"read"),l=Object.assign(Object.assign({},i),{cacheName:c});for(let e of(t=await caches.match(a,l),this.iterateCallbacks("cachedResponseWillBeUsed")))t=await e({cacheName:c,matchOptions:i,cachedResponse:t,request:a,event:this.event})||void 0;return t}async cachePut(e,t){let r=B(e);await new Promise(e=>setTimeout(e,0));let c=await this.getCacheKey(r,"write");if(!t)throw new u("cache-put-with-no-response",{url:new URL(String(c.url),location.href).href.replace(RegExp(`^${location.origin}`),"")});let i=await this._ensureResponseSafeToCache(t);if(!i)return!1;let{cacheName:a,matchOptions:l}=this._strategy,o=await self.caches.open(a),s=this.hasCallback("cacheDidUpdate"),n=s?await A(o,c.clone(),["__WB_REVISION__"],l):null;try{await o.put(c,s?i.clone():i)}catch(e){if(e instanceof Error)throw"QuotaExceededError"===e.name&&await x(),e}for(let e of this.iterateCallbacks("cacheDidUpdate"))await e({cacheName:a,oldResponse:n,newResponse:i.clone(),request:c,event:this.event});return!0}async getCacheKey(e,t){let r=`${e.url} | ${t}`;if(!this._cacheKeys[r]){let c=e;for(let e of this.iterateCallbacks("cacheKeyWillBeUsed"))c=B(await e({mode:t,request:c,event:this.event,params:this.params}));this._cacheKeys[r]=c}return this._cacheKeys[r]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let r of this.iterateCallbacks(e))await r(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if("function"==typeof t[e]){let r=this._pluginStateMap.get(t),c=c=>{let i=Object.assign(Object.assign({},c),{state:r});return t[e](i)};yield c}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>"rejected"===e.status);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,r=!1;for(let e of this.iterateCallbacks("cacheWillUpdate"))if(t=await e({request:this.request,response:t,event:this.event})||void 0,r=!0,!t)break;return!r&&t&&200!==t.status&&(t=void 0),t}}class U{constructor(e={}){this.cacheName=(e=>e||h(p.runtime))(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,r="string"==typeof e.request?new Request(e.request):e.request,c=new N(this,{event:t,request:r,params:"params"in e?e.params:void 0}),i=this._getResponse(c,r,t),a=this._awaitComplete(i,c,r,t);return[i,a]}async _getResponse(e,t,r){let c;await e.runCallbacks("handlerWillStart",{event:r,request:t});try{if(!(c=await this._handle(t,e))||"error"===c.type)throw new u("no-response",{url:t.url})}catch(i){if(i instanceof Error){for(let a of e.iterateCallbacks("handlerDidError"))if(c=await a({error:i,event:r,request:t}))break}if(c);else throw i}for(let i of e.iterateCallbacks("handlerWillRespond"))c=await i({event:r,request:t,response:c});return c}async _awaitComplete(e,t,r,c){let i,a;try{i=await e}catch(e){}try{await t.runCallbacks("handlerDidRespond",{event:c,request:r,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks("handlerDidComplete",{event:c,request:r,response:i,error:a}),t.destroy(),a)throw a}}class g extends U{constructor(e={}){e.cacheName=y(e.cacheName),super(e),this._fallbackToNetwork=!1!==e.fallbackToNetwork,this.plugins.push(g.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){let r=await t.cacheMatch(e);return r||(t.event&&"install"===t.event.type?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let r,c=t.params||{};if(this._fallbackToNetwork){let i=c.integrity,a=e.integrity,l=!a||a===i;r=await t.fetch(new Request(e,{integrity:"no-cors"!==e.mode?a||i:void 0})),i&&l&&"no-cors"!==e.mode&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,r.clone()))}else throw new u("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();let r=await t.fetch(e);if(!await t.cachePut(e,r.clone()))throw new u("bad-precaching-response",{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(let[r,c]of this.plugins.entries())c!==g.copyRedirectedCacheableResponsesPlugin&&(c===g.defaultPrecacheCacheabilityPlugin&&(e=r),c.cacheWillUpdate&&t++);0===t?this.plugins.push(g.defaultPrecacheCacheabilityPlugin):t>1&&null!==e&&this.plugins.splice(e,1)}}g.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:e})=>!e||e.status>=400?null:e},g.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:e})=>e.redirected?await O(e):e};class E{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:r=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new g({cacheName:y(e),plugins:[...t,new m({precacheController:this})],fallbackToNetwork:r}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){let t=[];for(let r of e){"string"==typeof r?t.push(r):r&&void 0===r.revision&&t.push(r.url);let{cacheKey:e,url:c}=function(e){if(!e)throw new u("add-to-cache-list-unexpected-type",{entry:e});if("string"==typeof e){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:t,url:r}=e;if(!r)throw new u("add-to-cache-list-unexpected-type",{entry:e});if(!t){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let c=new URL(r,location.href),i=new URL(r,location.href);return c.searchParams.set("__WB_REVISION__",t),{cacheKey:c.href,url:i.href}}(r),i="string"!=typeof r&&r.revision?"reload":"default";if(this._urlsToCacheKeys.has(c)&&this._urlsToCacheKeys.get(c)!==e)throw new u("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(c),secondEntry:e});if("string"!=typeof r&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new u("add-to-cache-list-conflicting-integrities",{url:c});this._cacheKeysToIntegrities.set(e,r.integrity)}this._urlsToCacheKeys.set(c,e),this._urlsToCacheModes.set(c,i),t.length>0&&console.warn(`Workbox is precaching URLs without revision info: ${t.join(", ")}
2
- This is generally NOT safe. Learn more at https://bit.ly/wb-precache`)}}install(e){return R(e,async()=>{let t=new C;for(let[r,c]of(this.strategy.plugins.push(t),this._urlsToCacheKeys)){let t=this._cacheKeysToIntegrities.get(c),i=this._urlsToCacheModes.get(r),a=new Request(r,{integrity:t,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:c},request:a,event:e}))}let{updatedURLs:r,notUpdatedURLs:c}=t;return{updatedURLs:r,notUpdatedURLs:c}})}activate(e){return R(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),r=new Set(this._urlsToCacheKeys.values()),c=[];for(let i of t)r.has(i.url)||(await e.delete(i),c.push(i.url));return{deletedURLs:c}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,r=this.getCacheKeyForURL(t);if(r)return(await self.caches.open(this.strategy.cacheName)).match(r)}createHandlerBoundToURL(e){let t=this.getCacheKeyForURL(e);if(!t)throw new u("non-precached-url",{url:e});return r=>(r.request=new Request(e),r.params=Object.assign({cacheKey:t},r.params),this.strategy.handle(r))}}let b=()=>(t||(t=new E),t);n(2448);let T=e=>e&&"object"==typeof e?e:{handle:e};class H{constructor(e,t,r="GET"){this.handler=T(t),this.match=e,this.method=r}setCatchHandler(e){this.catchHandler=T(e)}}class w extends H{constructor(e,t,r){super(({url:t})=>{let r=e.exec(t.href);if(r)return t.origin!==location.origin&&0!==r.index?void 0:r.slice(1)},t,r)}}class v{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{let{request:t}=e,r=this.handleRequest({request:t,event:e});r&&e.respondWith(r)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&"CACHE_URLS"===e.data.type){let{payload:t}=e.data,r=Promise.all(t.urlsToCache.map(t=>{"string"==typeof t&&(t=[t]);let r=new Request(...t);return this.handleRequest({request:r,event:e})}));e.waitUntil(r),e.ports&&e.ports[0]&&r.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){let r,c=new URL(e.url,location.href);if(!c.protocol.startsWith("http"))return;let i=c.origin===location.origin,{params:a,route:l}=this.findMatchingRoute({event:t,request:e,sameOrigin:i,url:c}),o=l&&l.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;try{r=o.handle({url:c,request:e,event:t,params:a})}catch(e){r=Promise.reject(e)}let n=l&&l.catchHandler;return r instanceof Promise&&(this._catchHandler||n)&&(r=r.catch(async r=>{if(n)try{return await n.handle({url:c,request:e,event:t,params:a})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:c,request:e,event:t});throw r})),r}findMatchingRoute({url:e,sameOrigin:t,request:r,event:c}){for(let i of this._routes.get(r.method)||[]){let a,l=i.match({url:e,sameOrigin:t,request:r,event:c});if(l)return Array.isArray(a=l)&&0===a.length||l.constructor===Object&&0===Object.keys(l).length?a=void 0:"boolean"==typeof l&&(a=void 0),{route:i,params:a}}return{}}setDefaultHandler(e,t="GET"){this._defaultHandlerMap.set(t,T(e))}setCatchHandler(e){this._catchHandler=T(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new u("unregister-route-but-not-found-with-method",{method:e.method});let t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new u("unregister-route-route-not-registered")}}function D(e,t,c){let i;if("string"==typeof e){let r=new URL(e,location.href);i=new H(({url:e})=>e.href===r.href,t,c)}else if(e instanceof RegExp)i=new w(e,t,c);else if("function"==typeof e)i=new H(e,t,c);else if(e instanceof H)i=e;else throw new u("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return(!r&&((r=new v).addFetchListener(),r.addCacheListener()),r).registerRoute(i),i}class W extends H{constructor(e,t){super(({request:r})=>{let c=e.getURLsToCacheKeys();for(let i of function*(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:r="index.html",cleanURLs:c=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash="",yield a.href;let l=function(e,t=[]){for(let r of[...e.searchParams.keys()])t.some(e=>e.test(r))&&e.searchParams.delete(r);return e}(a,t);if(yield l.href,r&&l.pathname.endsWith("/")){let e=new URL(l.href);e.pathname+=r,yield e.href}if(c){let e=new URL(l.href);e.pathname+=".html",yield e.href}if(i)for(let e of i({url:a}))yield e.href}(r.url,t)){let t=c.get(i);if(t){let r=e.getIntegrityForCacheKey(t);return{cacheKey:t,integrity:r}}}},e.strategy)}}let P="-precache-",j=async(e,t=P)=>{let r=(await self.caches.keys()).filter(r=>r.includes(t)&&r.includes(self.registration.scope)&&r!==e);return await Promise.all(r.map(e=>self.caches.delete(e))),r};var L=n(3986),k=n(9276),M=n(6906),q=n(2708);let I=e=>0===e.length?0:e.reduce((e,t)=>e+t,0)/e.length,J="dictionary-api-cache",K=new WeakMap,z=new WeakMap,G=new WeakMap,F=new WeakMap,V=new WeakMap,$={get(e,t,r){if(e instanceof IDBTransaction){if("done"===t)return z.get(e);if("objectStoreNames"===t)return e.objectStoreNames||G.get(e);if("store"===t)return r.objectStoreNames[1]?void 0:r.objectStore(r.objectStoreNames[0])}return Y(e[t])},set:(e,t,r)=>(e[t]=r,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function Y(e){if(e instanceof IDBRequest){let t;return(t=new Promise((t,r)=>{let c=()=>{e.removeEventListener("success",i),e.removeEventListener("error",a)},i=()=>{t(Y(e.result)),c()},a=()=>{r(e.error),c()};e.addEventListener("success",i),e.addEventListener("error",a)})).then(t=>{t instanceof IDBCursor&&K.set(t,e)}).catch(()=>{}),V.set(t,e),t}if(F.has(e))return F.get(e);let t=function(e){if("function"==typeof e)return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(i||(i=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(Q(this),t),Y(K.get(this))}:function(...t){return Y(e.apply(Q(this),t))}:function(t,...r){let c=e.call(Q(this),t,...r);return G.set(c,t.sort?t.sort():[t]),Y(c)};return e instanceof IDBTransaction&&function(e){if(z.has(e))return;let t=new Promise((t,r)=>{let c=()=>{e.removeEventListener("complete",i),e.removeEventListener("error",a),e.removeEventListener("abort",a)},i=()=>{t(),c()},a=()=>{r(e.error||new DOMException("AbortError","AbortError")),c()};e.addEventListener("complete",i),e.addEventListener("error",a),e.addEventListener("abort",a)});z.set(e,t)}(e),(c||(c=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(t=>e instanceof t)?new Proxy(e,$):e}(e);return t!==e&&(F.set(e,t),V.set(t,e)),t}let Q=e=>V.get(e),X=["get","getKey","getAll","getAllKeys","count"],Z=["put","add","delete","clear"],ee=new Map;function et(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t))return;if(ee.get(t))return ee.get(t);let r=t.replace(/FromIndex$/,""),c=t!==r,i=Z.includes(r);if(!(r in(c?IDBIndex:IDBObjectStore).prototype)||!(i||X.includes(r)))return;let a=async function(e,...t){let a=this.transaction(e,i?"readwrite":"readonly"),l=a.store;return c&&(l=l.index(t.shift())),(await Promise.all([l[r](...t),i&&a.done]))[0]};return ee.set(t,a),a}$={...a=$,get:(e,t,r)=>et(e,t)||a.get(e,t,r),has:(e,t)=>!!et(e,t)||a.has(e,t)},n(2555);let er="cache-entries",ec=e=>{let t=new URL(e,location.href);return t.hash="",t.href};class ei{constructor(e){this._db=null,this._cacheName=e}_upgradeDb(e){let t=e.createObjectStore(er,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&function(e,{blocked:t}={}){let r=indexedDB.deleteDatabase(e);t&&r.addEventListener("blocked",e=>t(e.oldVersion,e)),Y(r).then(()=>void 0)}(this._cacheName)}async setTimestamp(e,t){let r={url:e=ec(e),timestamp:t,cacheName:this._cacheName,id:this._getId(e)},c=(await this.getDb()).transaction(er,"readwrite",{durability:"relaxed"});await c.store.put(r),await c.done}async getTimestamp(e){let t=await this.getDb(),r=await t.get(er,this._getId(e));return null==r?void 0:r.timestamp}async expireEntries(e,t){let r=await this.getDb(),c=await r.transaction(er).store.index("timestamp").openCursor(null,"prev"),i=[],a=0;for(;c;){let r=c.value;r.cacheName===this._cacheName&&(e&&r.timestamp<e||t&&a>=t?i.push(c.value):a++),c=await c.continue()}let l=[];for(let e of i)await r.delete(er,e.id),l.push(e.url);return l}_getId(e){return this._cacheName+"|"+ec(e)}async getDb(){return this._db||(this._db=await function(e,{blocked:t,upgrade:r,blocking:c,terminated:i}={}){let a=indexedDB.open(e,1),l=Y(a);return r&&a.addEventListener("upgradeneeded",e=>{r(Y(a.result),e.oldVersion,e.newVersion,Y(a.transaction),e)}),t&&a.addEventListener("blocked",e=>t(e.oldVersion,e.newVersion,e)),l.then(e=>{i&&e.addEventListener("close",()=>i()),c&&e.addEventListener("versionchange",e=>c(e.oldVersion,e.newVersion,e))}).catch(()=>{}),l}("workbox-expiration",{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class ea{constructor(e,t={}){this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new ei(e)}async expireEntries(){if(this._isRunning){this._rerunRequested=!0;return}this._isRunning=!0;let e=this._maxAgeSeconds?Date.now()-1e3*this._maxAgeSeconds:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),r=await self.caches.open(this._cacheName);for(let e of t)await r.delete(e,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,this.expireEntries().then(()=>{}))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(!this._maxAgeSeconds)return!1;{let t=await this._timestampModel.getTimestamp(e),r=Date.now()-1e3*this._maxAgeSeconds;return void 0===t||t<r}}async delete(){this._rerunRequested=!1,await this._timestampModel.expireEntries(1/0)}}let el=new ea(J,{maxAgeSeconds:86400}),eo=e=>`/api/dictionary/${e}`,es=async e=>{await el.expireEntries();let t=eo(e),r=await caches.open(J),c=await r.match(t);if(void 0!==c)return await c.clone().text()},en={},eu=async e=>{let t;if(en[e]instanceof Promise)return;let r=eo(e),c=fetch(r);en[e]=c;try{if(!(t=await c).ok)throw en[e]=void 0,Error(`HTTP ${t.status}: ${t.statusText}`);let i=await caches.open(J);await i.put(r,t.clone()),await el.updateTimestamp(r)}finally{en[e]=void 0}},ep=(e,t)=>{let r=e;for(let e=0;e<t.length;++e){let c=t[e];r=r[c]??={}}return r.wordEnd=!0,r},eh=(e,t)=>{let r=e;for(let e=0;e<t.length;++e){let c=r[t[e]];if(!c)return;r=c}return r},ey=e=>{for(let t in e)return!1;return!0},eR=(e,t,r)=>{let c=Object.keys(e);if(e.wordEnd&&r.push(t),eC(c)){r.push(t,"(");for(let t=0;t<c.length;++t){let i=c[t];1===i.length&&eR(e[i],i,r)}r.push(")")}},eC=e=>{for(let t=0;t<e.length;++t)if(1===e[t].length)return!0;return!1},em=(e,t)=>"wordEnd"===e?-1:"wordEnd"===t?1:e.localeCompare(t),eO=(e,t,r={})=>{let c=[],i=e_(e,r.sort),a=0,l=e,o=r.prefix||"";for(;;){if(a>=i.length){let e=c.pop();if(!e)return;a=e.keyIndex+1,i=e.keys,l=e.node,o=e.prefix;continue}let e=i[a];if("wordEnd"===e){++a;continue}let s=l[e],n=o+e;if((!r.wordsOnly||s.wordEnd)&&t({node:s,prefix:n}))return;c.push({keyIndex:a,keys:i,node:l,prefix:o}),i=e_(s,r.sort),a=0,l=s,o=n}},e_=(e,t)=>{let r=Object.keys(e);return t?r.sort(em):r};class ed{static deserialize(e){return new ed((e=>{let t=[],r={},c=1;for(;c<e.length-1;){let i=e[c],a=e[c+1];if(++c,")"===i){let e=t.pop();if(!e)throw Error('Syntax error: misplaced ")"');r=e}else if(")"===a){r[i]={wordEnd:!0};let e=t.pop();if(!e)throw Error('Syntax error: misplaced ")"');r=e,++c}else if("("===a){t.push(r);let e=r[i]||{};r[i]=e,r=e,++c}else r[i]={wordEnd:!0}}return r})(e))}static fromArray(e){let t;return new ed((t={},e.forEach(e=>ep(t,e)),t))}root;constructor(e={}){this.root=e}add(e){return ep(this.root,e)}find(e){return eh(this.root,e)}has(e){let t;return t=eh(this.root,e),!!t?.wordEnd}hasPrefix(e){let t;return!!(t=eh(this.root,e))&&!ey(t)}remove(e){return((e,t)=>{let r=[e],c=e;for(let e=0;e<t.length;++e){let i=c[t[e]];if(!i)return!1;c=i,r.push(c)}if(!c.wordEnd)return!1;delete c.wordEnd;for(let e=t.length;e>0&&ey(r[e]);--e)delete r[e-1][t[e-1]];return!0})(this.root,e)}serialize(){var e;let t;return e=this.root,eR(e,"",t=[]),t.join("")}toArray(e){var t;let r;return t=this.root,r=[],eO(t,e=>{r.push(e)},e),r}traverse(e,t){return eO(this.root,e,t)}}let eA={},eS=async e=>{let t=await es(e);if(void 0===t)return;let r=eA[e];if(void 0===r||r.dictionary!==t){let r=ed.deserialize(t);return eA[e]={dictionary:t,trie:r},r}return r.trie},ef={"Content-Type":"application/json; charset=utf-8"},ex=[],eB=[],eN=()=>{if(ex.length<5||eB.length<5)return;let e=Math.min(ex.length,eB.length),t=ex.slice(0,e).sort((e,t)=>e-t).slice(1,-1),r=ex.slice(0,e).sort((e,t)=>e-t).slice(1,-1);return I(t)>I(r)},eU={"Content-Type":"application/json; charset=utf-8"};self.addEventListener("install",()=>{self.skipWaiting()}),self.addEventListener("activate",()=>{self.clients.claim()}),self.addEventListener("activate",e=>{let t=y();e.waitUntil(j(t).then(e=>{}))}),l=[{'revision':null,'url':'/_next/static/chunks/framework-3cf15b8041c59dd3.js'},{'revision':null,'url':'/_next/static/chunks/main-852475ca502b4e49.js'},{'revision':null,'url':'/_next/static/chunks/pages/_app-a5bbe02710f13d05.js'},{'revision':null,'url':'/_next/static/chunks/pages/_error-afeda7c5231b6c3c.js'},{'revision':null,'url':'/_next/static/chunks/pages/index-ec0f6aeeaf7be227.js'},{'revision':null,'url':'/_next/static/chunks/pages/not-found-9e076427bad69d90.js'},{'revision':'846118c33b2c0e922d7b3a7676f81f6f','url':'/_next/static/chunks/polyfills-42372ed130431b0a.js'},{'revision':null,'url':'/_next/static/chunks/webpack-1a7a166b34ed8d24.js'},{'revision':null,'url':'/_next/static/css/0af35adb4bab56f0.css'},{'revision':null,'url':'/_next/static/css/a78e04fe95452380.css'},{'revision':'028aa65289672d4f0d2380a53f739b30','url':'/_next/static/vYpMmuC_yEurZGcyGVnLf/_buildManifest.js'},{'revision':'b6652df95db52feb4daf4eca35380933','url':'/_next/static/vYpMmuC_yEurZGcyGVnLf/_ssgManifest.js'}],b().precache(l),D(new W(b(),void 0)),D(({url:e})=>e.origin===location.origin&&"/api/solve"===e.pathname,async({request:e})=>{let{board:t,characters:r,game:c,locale:i}=await e.clone().json(),a=async e=>{let a=(0,L.getConfig)(c,i),l=r.map(e=>new q.Tile({character:e,isBlank:e===k.BLANK}));return new Promise(r=>{r(new Response(JSON.stringify((0,M.kH)(e,a,q.Board.fromJson(t),l)),{headers:ef}))})},l=await eS(i);if(l&&void 0===eN()){let t=await Promise.race([(async()=>{let e=Date.now(),t=a(l);return ex.push(Date.now()-e),t})(),(async()=>{let t=Date.now(),r=await fetch(e);return eB.push(Date.now()-t),r})()]);return eu(i),t}let o=l&&!eN()?()=>a(l):()=>fetch(e),s=await o();return eu(i),s},"POST"),D(({url:e})=>e.origin===location.origin&&"/api/verify"===e.pathname,async({request:e})=>{let{board:t,locale:r}=await e.clone().json(),c=await eS(r);if(!c){let t=await fetch(e);return eu(r),t}let i=q.Board.fromJson(t).getWords().sort((e,t)=>e.localeCompare(t,r));return new Response(JSON.stringify({invalidWords:i.filter(e=>!c.has(e)),validWords:i.filter(e=>c.has(e))}),{headers:eU})},"POST")})();
1
+ (()=>{"use strict";let e,t,s;var a,r={303:()=>{try{self["workbox:strategies:7.4.0"]&&_()}catch(e){}},448:()=>{try{self["workbox:routing:7.4.0"]&&_()}catch(e){}},693:()=>{try{self["workbox:core:7.4.0"]&&_()}catch(e){}},802:()=>{try{self["workbox:precaching:7.4.0"]&&_()}catch(e){}}},i={};function n(e){var t=i[e];if(void 0!==t)return t.exports;var s=i[e]={exports:{}},a=!0;try{r[e](s,s.exports,n),a=!1}finally{a&&delete i[e]}return s.exports}n(693);class l extends Error{constructor(e,t){super(((e,...t)=>{let s=e;return t.length>0&&(s+=` :: ${JSON.stringify(t)}`),s})(e,t)),this.name=e,this.details=t}}let c={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"u">typeof registration?registration.scope:""},h=e=>[c.prefix,e,c.suffix].filter(e=>e&&e.length>0).join("-"),o=e=>e||h(c.precache);function u(e,t){let s=t();return e.waitUntil(s),s}n(802);class f{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:s})=>{if("install"===e.type&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;s?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return s}}}class d{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let s=(null==t?void 0:t.cacheKey)||this._precacheController.getCacheKeyForURL(e.url);return s?new Request(s,{headers:e.headers}):e},this._precacheController=e}}async function p(t,s){let a=null;if(t.url&&(a=new URL(t.url).origin),a!==self.location.origin)throw new l("cross-origin-copy-response",{origin:a});let r=t.clone(),i={headers:new Headers(r.headers),status:r.status,statusText:r.statusText},n=s?s(i):i,c=!function(){if(void 0===e){let t=new Response("");if("body"in t)try{new Response(t.body),e=!0}catch(t){e=!1}e=!1}return e}()?await r.blob():r.body;return new Response(c,n)}function w(e,t){let s=new URL(e);for(let e of t)s.searchParams.delete(e);return s.href}async function y(e,t,s,a){let r=w(t.url,s);if(t.url===r)return e.match(t,a);let i=Object.assign(Object.assign({},a),{ignoreSearch:!0});for(let n of(await e.keys(t,i)))if(r===w(n.url,s))return e.match(n,a)}class g{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}let m=new Set;async function R(){for(let e of m)await e()}function C(e){return"string"==typeof e?new Request(e):e}n(303);class b{constructor(e,t){for(const s of(this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new g,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map,this._plugins))this._pluginStateMap.set(s,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:t}=this,s=C(e);if("navigate"===s.mode&&t instanceof FetchEvent&&t.preloadResponse){let e=await t.preloadResponse;if(e)return e}let a=this.hasCallback("fetchDidFail")?s.clone():null;try{for(let e of this.iterateCallbacks("requestWillFetch"))s=await e({request:s.clone(),event:t})}catch(e){if(e instanceof Error)throw new l("plugin-error-request-will-fetch",{thrownErrorMessage:e.message})}let r=s.clone();try{let e;for(let a of(e=await fetch(s,"navigate"===s.mode?void 0:this._strategy.fetchOptions),this.iterateCallbacks("fetchDidSucceed")))e=await a({event:t,request:r,response:e});return e}catch(e){throw a&&await this.runCallbacks("fetchDidFail",{error:e,event:t,originalRequest:a.clone(),request:r.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),s=t.clone();return this.waitUntil(this.cachePut(e,s)),t}async cacheMatch(e){let t,s=C(e),{cacheName:a,matchOptions:r}=this._strategy,i=await this.getCacheKey(s,"read"),n=Object.assign(Object.assign({},r),{cacheName:a});for(let e of(t=await caches.match(i,n),this.iterateCallbacks("cachedResponseWillBeUsed")))t=await e({cacheName:a,matchOptions:r,cachedResponse:t,request:i,event:this.event})||void 0;return t}async cachePut(e,t){let s=C(e);await new Promise(e=>setTimeout(e,0));let a=await this.getCacheKey(s,"write");if(!t)throw new l("cache-put-with-no-response",{url:new URL(String(a.url),location.href).href.replace(RegExp(`^${location.origin}`),"")});let r=await this._ensureResponseSafeToCache(t);if(!r)return!1;let{cacheName:i,matchOptions:n}=this._strategy,c=await self.caches.open(i),h=this.hasCallback("cacheDidUpdate"),o=h?await y(c,a.clone(),["__WB_REVISION__"],n):null;try{await c.put(a,h?r.clone():r)}catch(e){if(e instanceof Error)throw"QuotaExceededError"===e.name&&await R(),e}for(let e of this.iterateCallbacks("cacheDidUpdate"))await e({cacheName:i,oldResponse:o,newResponse:r.clone(),request:a,event:this.event});return!0}async getCacheKey(e,t){let s=`${e.url} | ${t}`;if(!this._cacheKeys[s]){let a=e;for(let e of this.iterateCallbacks("cacheKeyWillBeUsed"))a=C(await e({mode:t,request:a,event:this.event,params:this.params}));this._cacheKeys[s]=a}return this._cacheKeys[s]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let s of this.iterateCallbacks(e))await s(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if("function"==typeof t[e]){let s=this._pluginStateMap.get(t),a=a=>{let r=Object.assign(Object.assign({},a),{state:s});return t[e](r)};yield a}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>"rejected"===e.status);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,s=!1;for(let e of this.iterateCallbacks("cacheWillUpdate"))if(t=await e({request:this.request,response:t,event:this.event})||void 0,s=!0,!t)break;return!s&&t&&200!==t.status&&(t=void 0),t}}class v{constructor(e={}){this.cacheName=(e=>e||h(c.runtime))(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,s="string"==typeof e.request?new Request(e.request):e.request,a=new b(this,{event:t,request:s,params:"params"in e?e.params:void 0}),r=this._getResponse(a,s,t),i=this._awaitComplete(r,a,s,t);return[r,i]}async _getResponse(e,t,s){let a;await e.runCallbacks("handlerWillStart",{event:s,request:t});try{if(!(a=await this._handle(t,e))||"error"===a.type)throw new l("no-response",{url:t.url})}catch(r){if(r instanceof Error){for(let i of e.iterateCallbacks("handlerDidError"))if(a=await i({error:r,event:s,request:t}))break}if(a);else throw r}for(let r of e.iterateCallbacks("handlerWillRespond"))a=await r({event:s,request:t,response:a});return a}async _awaitComplete(e,t,s,a){let r,i;try{r=await e}catch(e){}try{await t.runCallbacks("handlerDidRespond",{event:a,request:s,response:r}),await t.doneWaiting()}catch(e){e instanceof Error&&(i=e)}if(await t.runCallbacks("handlerDidComplete",{event:a,request:s,response:r,error:i}),t.destroy(),i)throw i}}class L extends v{constructor(e={}){e.cacheName=o(e.cacheName),super(e),this._fallbackToNetwork=!1!==e.fallbackToNetwork,this.plugins.push(L.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){let s=await t.cacheMatch(e);return s||(t.event&&"install"===t.event.type?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let s,a=t.params||{};if(this._fallbackToNetwork){let r=a.integrity,i=e.integrity,n=!i||i===r;s=await t.fetch(new Request(e,{integrity:"no-cors"!==e.mode?i||r:void 0})),r&&n&&"no-cors"!==e.mode&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,s.clone()))}else throw new l("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return s}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();let s=await t.fetch(e);if(!await t.cachePut(e,s.clone()))throw new l("bad-precaching-response",{url:e.url,status:s.status});return s}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(let[s,a]of this.plugins.entries())a!==L.copyRedirectedCacheableResponsesPlugin&&(a===L.defaultPrecacheCacheabilityPlugin&&(e=s),a.cacheWillUpdate&&t++);0===t?this.plugins.push(L.defaultPrecacheCacheabilityPlugin):t>1&&null!==e&&this.plugins.splice(e,1)}}L.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:e})=>!e||e.status>=400?null:e},L.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:e})=>e.redirected?await p(e):e};class U{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:s=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new L({cacheName:o(e),plugins:[...t,new d({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){let t=[];for(let s of e){"string"==typeof s?t.push(s):s&&void 0===s.revision&&t.push(s.url);let{cacheKey:e,url:a}=function(e){if(!e)throw new l("add-to-cache-list-unexpected-type",{entry:e});if("string"==typeof e){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:t,url:s}=e;if(!s)throw new l("add-to-cache-list-unexpected-type",{entry:e});if(!t){let e=new URL(s,location.href);return{cacheKey:e.href,url:e.href}}let a=new URL(s,location.href),r=new URL(s,location.href);return a.searchParams.set("__WB_REVISION__",t),{cacheKey:a.href,url:r.href}}(s),r="string"!=typeof s&&s.revision?"reload":"default";if(this._urlsToCacheKeys.has(a)&&this._urlsToCacheKeys.get(a)!==e)throw new l("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(a),secondEntry:e});if("string"!=typeof s&&s.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==s.integrity)throw new l("add-to-cache-list-conflicting-integrities",{url:a});this._cacheKeysToIntegrities.set(e,s.integrity)}this._urlsToCacheKeys.set(a,e),this._urlsToCacheModes.set(a,r),t.length>0&&console.warn(`Workbox is precaching URLs without revision info: ${t.join(", ")}
2
+ This is generally NOT safe. Learn more at https://bit.ly/wb-precache`)}}install(e){return u(e,async()=>{let t=new f;for(let[s,a]of(this.strategy.plugins.push(t),this._urlsToCacheKeys)){let t=this._cacheKeysToIntegrities.get(a),r=this._urlsToCacheModes.get(s),i=new Request(s,{integrity:t,cache:r,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:a},request:i,event:e}))}let{updatedURLs:s,notUpdatedURLs:a}=t;return{updatedURLs:s,notUpdatedURLs:a}})}activate(e){return u(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),s=new Set(this._urlsToCacheKeys.values()),a=[];for(let r of t)s.has(r.url)||(await e.delete(r),a.push(r.url));return{deletedURLs:a}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,s=this.getCacheKeyForURL(t);if(s)return(await self.caches.open(this.strategy.cacheName)).match(s)}createHandlerBoundToURL(e){let t=this.getCacheKeyForURL(e);if(!t)throw new l("non-precached-url",{url:e});return s=>(s.request=new Request(e),s.params=Object.assign({cacheKey:t},s.params),this.strategy.handle(s))}}let k=()=>(t||(t=new U),t);n(448);let T=e=>e&&"object"==typeof e?e:{handle:e};class K{constructor(e,t,s="GET"){this.handler=T(t),this.match=e,this.method=s}setCatchHandler(e){this.catchHandler=T(e)}}class x extends K{constructor(e,t,s){super(({url:t})=>{let s=e.exec(t.href);if(s)return t.origin!==location.origin&&0!==s.index?void 0:s.slice(1)},t,s)}}class P{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{let{request:t}=e,s=this.handleRequest({request:t,event:e});s&&e.respondWith(s)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&"CACHE_URLS"===e.data.type){let{payload:t}=e.data,s=Promise.all(t.urlsToCache.map(t=>{"string"==typeof t&&(t=[t]);let s=new Request(...t);return this.handleRequest({request:s,event:e})}));e.waitUntil(s),e.ports&&e.ports[0]&&s.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){let s,a=new URL(e.url,location.href);if(!a.protocol.startsWith("http"))return;let r=a.origin===location.origin,{params:i,route:n}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:a}),l=n&&n.handler,c=e.method;if(!l&&this._defaultHandlerMap.has(c)&&(l=this._defaultHandlerMap.get(c)),!l)return;try{s=l.handle({url:a,request:e,event:t,params:i})}catch(e){s=Promise.reject(e)}let h=n&&n.catchHandler;return s instanceof Promise&&(this._catchHandler||h)&&(s=s.catch(async s=>{if(h)try{return await h.handle({url:a,request:e,event:t,params:i})}catch(e){e instanceof Error&&(s=e)}if(this._catchHandler)return this._catchHandler.handle({url:a,request:e,event:t});throw s})),s}findMatchingRoute({url:e,sameOrigin:t,request:s,event:a}){for(let r of this._routes.get(s.method)||[]){let i,n=r.match({url:e,sameOrigin:t,request:s,event:a});if(n)return Array.isArray(i=n)&&0===i.length||n.constructor===Object&&0===Object.keys(n).length?i=void 0:"boolean"==typeof n&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(e,t="GET"){this._defaultHandlerMap.set(t,T(e))}setCatchHandler(e){this._catchHandler=T(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new l("unregister-route-but-not-found-with-method",{method:e.method});let t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new l("unregister-route-route-not-registered")}}function q(e,t,a){let r;if("string"==typeof e){let s=new URL(e,location.href);r=new K(({url:e})=>e.href===s.href,t,a)}else if(e instanceof RegExp)r=new x(e,t,a);else if("function"==typeof e)r=new K(e,t,a);else if(e instanceof K)r=e;else throw new l("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return(!s&&((s=new P).addFetchListener(),s.addCacheListener()),s).registerRoute(r),r}class E extends K{constructor(e,t){super(({request:s})=>{let a=e.getURLsToCacheKeys();for(let r of function*(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:a=!0,urlManipulation:r}={}){let i=new URL(e,location.href);i.hash="",yield i.href;let n=function(e,t=[]){for(let s of[...e.searchParams.keys()])t.some(e=>e.test(s))&&e.searchParams.delete(s);return e}(i,t);if(yield n.href,s&&n.pathname.endsWith("/")){let e=new URL(n.href);e.pathname+=s,yield e.href}if(a){let e=new URL(n.href);e.pathname+=".html",yield e.href}if(r)for(let e of r({url:i}))yield e.href}(s.url,t)){let t=a.get(r);if(t){let s=e.getIntegrityForCacheKey(t);return{cacheKey:t,integrity:s}}}},e.strategy)}}let M="-precache-",N=async(e,t=M)=>{let s=(await self.caches.keys()).filter(s=>s.includes(t)&&s.includes(self.registration.scope)&&s!==e);return await Promise.all(s.map(e=>self.caches.delete(e))),s};class W extends K{constructor(e,{allowlist:t=[/./],denylist:s=[]}={}){super(e=>this._match(e),e),this._allowlist=t,this._denylist=s}_match({url:e,request:t}){if(t&&"navigate"!==t.mode)return!1;let s=e.pathname+e.search;for(let e of this._denylist)if(e.test(s))return!1;return!!this._allowlist.some(e=>e.test(s))}}let O="app-shell";async function I(){let e=await caches.open(O);await e.add("/")}async function S({request:e}){try{return await fetch(e)}catch(s){let e=await caches.open(O),t=await e.match("/");if(!t)throw s;return t}}self.addEventListener("install",e=>{e.waitUntil(I()),self.skipWaiting()}),self.addEventListener("activate",()=>{self.clients.claim()}),self.addEventListener("activate",e=>{let t=o();e.waitUntil(N(t).then(e=>{}))}),a=[{'revision':'52dad768a541ef05b366c5d7de790b71','url':'/_next/static/OLE8_ZInlGH7ENU0NIOpf/_buildManifest.js'},{'revision':'b6652df95db52feb4daf4eca35380933','url':'/_next/static/OLE8_ZInlGH7ENU0NIOpf/_ssgManifest.js'},{'revision':null,'url':'/_next/static/chunks/583.7a46807be14c377e.js'},{'revision':null,'url':'/_next/static/chunks/830.661816bf0de8c2f1.js'},{'revision':null,'url':'/_next/static/chunks/framework-3cf15b8041c59dd3.js'},{'revision':null,'url':'/_next/static/chunks/main-5b999f3f24ebfa84.js'},{'revision':null,'url':'/_next/static/chunks/pages/_app-7024e7a27ffbb2fa.js'},{'revision':null,'url':'/_next/static/chunks/pages/_error-afeda7c5231b6c3c.js'},{'revision':null,'url':'/_next/static/chunks/pages/index-8b398b0a5d870773.js'},{'revision':null,'url':'/_next/static/chunks/pages/not-found-9e076427bad69d90.js'},{'revision':'846118c33b2c0e922d7b3a7676f81f6f','url':'/_next/static/chunks/polyfills-42372ed130431b0a.js'},{'revision':null,'url':'/_next/static/chunks/webpack-3943d624bbb47a64.js'},{'revision':null,'url':'/_next/static/css/a78e04fe95452380.css'},{'revision':null,'url':'/_next/static/css/aedeaada218d7280.css'}],k().precache(a),q(new E(k(),void 0)),q(new W(S,{denylist:[/^\/api\//]}))})();
@@ -5,6 +5,7 @@ import {
5
5
  type ChangeEventHandler,
6
6
  type FocusEventHandler,
7
7
  type FunctionComponent,
8
+ memo,
8
9
  type MouseEventHandler,
9
10
  type RefObject,
10
11
  type TouchEventHandler,
@@ -41,7 +42,7 @@ interface Props {
41
42
  onFocus: (x: number, y: number) => void;
42
43
  }
43
44
 
44
- export const Cell: FunctionComponent<Props> = ({
45
+ const CellBase: FunctionComponent<Props> = ({
45
46
  cell,
46
47
  cellBottom,
47
48
  cellLeft,
@@ -135,3 +136,5 @@ export const Cell: FunctionComponent<Props> = ({
135
136
  />
136
137
  );
137
138
  };
139
+
140
+ export const Cell = memo(CellBase);
@@ -53,6 +53,7 @@ export const useGrid = (rows: Cell[][]): [State, Actions] => {
53
53
  const [activeIndex, setActiveIndex] = useState<Point>({ x: 0, y: 0 });
54
54
  const [direction, setLastDirection] = useState<Direction>('horizontal');
55
55
  const directionRef = useLatest(direction);
56
+ const rowsRef = useLatest(rows);
56
57
 
57
58
  const safeActiveIndex = useMemo(
58
59
  () => ({
@@ -94,7 +95,7 @@ export const useGrid = (rows: Cell[][]): [State, Actions] => {
94
95
  (position: Point, value: string) => {
95
96
  const characters = value ? extractCharacters(config, value).filter((character) => character !== BLANK) : [BLANK];
96
97
  const actions: PayloadAction<unknown>[] = [];
97
- let board = new Board({ rows: rows.map((row) => row.map((cell) => cell.clone())) });
98
+ let board = new Board({ rows: rowsRef.current.map((row) => row.map((cell) => cell.clone())) });
98
99
  let { x, y } = position;
99
100
 
100
101
  const scheduleMoveFocus = () => {
@@ -188,7 +189,7 @@ export const useGrid = (rows: Cell[][]): [State, Actions] => {
188
189
  moveFocus(Math.abs(position.x - x) + Math.abs(position.y - y));
189
190
  actions.forEach(dispatch);
190
191
  },
191
- [config, directionRef, dispatch, height, moveFocus, rows, width],
192
+ [config, directionRef, dispatch, height, moveFocus, rowsRef, width],
192
193
  );
193
194
 
194
195
  const onChange = useCallback(
@@ -209,7 +210,7 @@ export const useGrid = (rows: Cell[][]): [State, Actions] => {
209
210
 
210
211
  if (value === EMPTY_CELL) {
211
212
  const { x, y } = position;
212
- const cell = rows[y][x];
213
+ const cell = rowsRef.current[y][x];
213
214
 
214
215
  if (cell.hasTile()) {
215
216
  dispatch(boardSlice.actions.toggleCellIsBlank(position));
@@ -219,7 +220,7 @@ export const useGrid = (rows: Cell[][]): [State, Actions] => {
219
220
 
220
221
  insertValue(position, value);
221
222
  },
222
- [dispatch, insertValue, moveFocus, rows, getInputRefPosition],
223
+ [dispatch, insertValue, moveFocus, rowsRef, getInputRefPosition],
223
224
  );
224
225
 
225
226
  const onDirectionToggle = useCallback(() => setLastDirection(toggleDirection), []);
@@ -308,7 +309,7 @@ export const useGrid = (rows: Cell[][]): [State, Actions] => {
308
309
  return;
309
310
  }
310
311
 
311
- const cell = rows[y][x];
312
+ const cell = rowsRef.current[y][x];
312
313
 
313
314
  if (isCtrl(event) && character === 'g') {
314
315
  event.preventDefault();
@@ -347,7 +348,17 @@ export const useGrid = (rows: Cell[][]): [State, Actions] => {
347
348
  dispatch(boardSlice.actions.toggleCellIsBlank(position));
348
349
  },
349
350
  });
350
- }, [changeActiveIndex, config, direction, dispatch, getInputRefPosition, locale, moveFocus, onDirectionToggle, rows]);
351
+ }, [
352
+ changeActiveIndex,
353
+ config,
354
+ direction,
355
+ dispatch,
356
+ getInputRefPosition,
357
+ locale,
358
+ moveFocus,
359
+ onDirectionToggle,
360
+ rowsRef,
361
+ ]);
351
362
 
352
363
  const onPaste = useCallback<ClipboardEventHandler>(
353
364
  (event) => {
@@ -2,17 +2,8 @@
2
2
 
3
3
  .dictionary {
4
4
  position: relative;
5
- transition: var(--transition);
6
5
  word-break: break-word;
7
6
 
8
- &.isAllowed {
9
- background-color: var(--color--green--light);
10
- }
11
-
12
- &.isNotAllowed {
13
- background-color: var(--color--red--light);
14
- }
15
-
16
7
  &:focus-within {
17
8
  @include focus-effect;
18
9
  }
@@ -21,6 +12,8 @@
21
12
  .content {
22
13
  @include scrollbars;
23
14
 
15
+ display: flex;
16
+ flex-direction: column;
24
17
  height: 100%;
25
18
  overflow-y: auto;
26
19
  border-radius: inherit;
@@ -31,26 +24,18 @@
31
24
  }
32
25
 
33
26
  .result {
34
- transition: var(--transition);
27
+ flex-shrink: 0;
28
+
29
+ &:last-child {
30
+ flex-grow: 1;
31
+ }
35
32
 
36
33
  &.isAllowed {
37
34
  background-color: var(--color--green--light);
38
-
39
- & + & {
40
- .content {
41
- padding-top: 0;
42
- }
43
- }
44
35
  }
45
36
 
46
37
  &.isNotAllowed {
47
38
  background-color: var(--color--red--light);
48
-
49
- & + & {
50
- .content {
51
- padding-top: 0;
52
- }
53
- }
54
39
  }
55
40
  }
56
41
 
@@ -25,16 +25,9 @@ export const Dictionary: FunctionComponent<Props> = ({ className }) => {
25
25
  const results = useTypedSelector(selectDictionaryResults);
26
26
  const isLoading = useTypedSelector(selectDictionaryIsLoading);
27
27
  const error = useTypedSelector(selectDictionaryError);
28
- const isLastAllowed = results.at(-1)?.isAllowed;
29
28
 
30
29
  return (
31
- <div
32
- className={classNames(styles.dictionary, className, {
33
- [styles.isAllowed]: isLastAllowed === true,
34
- [styles.isNotAllowed]: isLastAllowed === false,
35
- })}
36
- style={{ height: dictionaryResultsHeight }}
37
- >
30
+ <div className={classNames(styles.dictionary, className)} style={{ height: dictionaryResultsHeight }}>
38
31
  <div className={styles.content}>
39
32
  {typeof error !== 'undefined' && !isLoading && <EmptyState variant="error">{error.message}</EmptyState>}
40
33
 
@@ -28,7 +28,6 @@ export const Result = ({
28
28
  onClick = noop,
29
29
  onFocus = noop,
30
30
  onMouseEnter = noop,
31
- onMouseLeave = noop,
32
31
  style,
33
32
  }: RowComponentProps<ResultData>): ReactElement => {
34
33
  const { resultWordWidth } = useAppLayout();
@@ -44,7 +43,6 @@ export const Result = ({
44
43
 
45
44
  const handleClick: MouseEventHandler = (event) => onClick(result, event);
46
45
  const handleMouseEnter: MouseEventHandler = (event) => onMouseEnter(result, event);
47
- const handleMouseLeave: MouseEventHandler = (event) => onMouseLeave(result, event);
48
46
  const handleBlur: FocusEventHandler = (event) => onBlur(result, event);
49
47
  const handleFocus: FocusEventHandler = (event) => onFocus(result, event);
50
48
 
@@ -65,7 +63,6 @@ export const Result = ({
65
63
  onClick={handleClick}
66
64
  onFocus={handleFocus}
67
65
  onMouseEnter={handleMouseEnter}
68
- onMouseLeave={handleMouseLeave}
69
66
  >
70
67
  <span className={styles.resultContent}>
71
68
  {columns[ResultColumnId.Coordinates] && (
@@ -93,7 +93,6 @@ $row-padding-horizontal: calc(var(--spacing--m) + var(--spacing--s));
93
93
  @include button-reset;
94
94
 
95
95
  user-select: none;
96
- transition: var(--transition);
97
96
  cursor: pointer;
98
97
  font-weight: 400;
99
98
 
@@ -44,7 +44,14 @@ export const Results: FunctionComponent<Props> = ({ callbacks, className, highli
44
44
  const isOutdated = useTypedSelector(selectAreResultsOutdated);
45
45
  const error = useTypedSelector(selectSolveError);
46
46
  const itemData = useMemo<ResultData>(
47
- () => ({ ...callbacks, highlightedIndex, results }),
47
+ () => ({
48
+ highlightedIndex,
49
+ results,
50
+ onBlur: callbacks.onBlur,
51
+ onClick: callbacks.onClick,
52
+ onFocus: callbacks.onFocus,
53
+ onMouseEnter: callbacks.onMouseEnter,
54
+ }),
48
55
  [callbacks, highlightedIndex, results],
49
56
  );
50
57
  const listRef = useListRef(null);
@@ -74,6 +81,7 @@ export const Results: FunctionComponent<Props> = ({ callbacks, className, highli
74
81
  aria-busy={isLoadingDebounced}
75
82
  aria-label={translate('results')}
76
83
  className={classNames(styles.results, className)}
84
+ data-outdated={isOutdated}
77
85
  data-testid="results"
78
86
  role="region"
79
87
  >
@@ -111,7 +119,7 @@ export const Results: FunctionComponent<Props> = ({ callbacks, className, highli
111
119
  )}
112
120
 
113
121
  {!isOutdated && results.length > 0 && (
114
- <div className={styles.listContainer}>
122
+ <div className={styles.listContainer} onMouseLeave={callbacks.onMouseLeave}>
115
123
  <List
116
124
  className={classNames(styles.list, {
117
125
  [styles.outdated]: isOutdated,