g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"00933c7b\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"wordle-react-clone:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/wordle-react-clone/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkwordle_react_clone\"] = self[\"webpackChunkwordle_react_clone\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","import wordMainBank from \"./wordle-nytimes-main-bank.txt\"\nimport wordAcceptableBank from \"./wordle-nytimes-acceptable-bank.txt\"\n\nexport enum LetterStatus {\n Unknown = 0,\n Letter = 2,\n LetterAndPosition = 4,\n Disabled = 1,\n}\n\nexport function computeGuessStatus(\n guess: string,\n correctWord: string\n): Array {\n // normalize inputs\n guess = guess.toLocaleUpperCase()\n correctWord = correctWord.toLocaleUpperCase()\n\n let remainder = correctWord\n let status = new Array(5).fill(LetterStatus.Unknown)\n\n // NOTE: to ensure proper coloring of the letters, it is impossible\n // to first identify correctly located letters, otherwise an incorrectly\n // located letter could be orange, and the subsequent correctly located\n // letter could be grey.\n\n // FIRST PASS: find all letters properly located\n for (let i = 0; i < guess.length; i++) {\n const c = guess.charAt(i)\n\n if (c === correctWord.charAt(i)) {\n // remove the first occurrence (important to color repetitions accurately)\n remainder = remainder.replace(c, \"\")\n\n // record that this matches both letter and position\n status[i] = LetterStatus.LetterAndPosition\n }\n }\n\n // SECOND PASS: find letters incorrectly located\n for (let i = 0; i < guess.length; i++) {\n const c = guess.charAt(i)\n\n // skip properly positioned letters\n if (c === correctWord.charAt(i)) continue\n\n // EITHER: the letter is in the word\n if (remainder.includes(c)) {\n remainder = remainder.replace(c, \"\")\n\n // since we have located correctly positioned letters, we know this is incorrectly positioned\n status[i] = LetterStatus.Letter\n }\n // OR: there are no more occurrences of the letter to be found\n else {\n status[i] = LetterStatus.Disabled\n }\n }\n\n return status\n}\n\nexport const boardDefault = [\n [\"\", \"\", \"\", \"\", \"\"],\n [\"\", \"\", \"\", \"\", \"\"],\n [\"\", \"\", \"\", \"\", \"\"],\n [\"\", \"\", \"\", \"\", \"\"],\n [\"\", \"\", \"\", \"\", \"\"],\n [\"\", \"\", \"\", \"\", \"\"],\n]\n\nexport const boardStatusDefault = [\n [\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n ],\n [\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n ],\n [\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n ],\n [\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n ],\n [\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n ],\n [\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n LetterStatus.Unknown,\n ],\n]\n\nasync function generateWordSetFromWordBank(\n wordBank: string\n): Promise<{ wordSet: Set }> {\n let wordSet: Set = new Set()\n await fetch(wordBank)\n .then((response) => response.text())\n .then((result) => {\n const wordArr = result.toUpperCase().split(\"\\n\")\n wordSet = new Set(wordArr)\n })\n return { wordSet }\n}\n\nexport async function generateAcceptableWordSet(): Promise<{\n wordSet: Set\n}> {\n let wordSet: Set = new Set()\n let response = await generateWordSetFromWordBank(wordAcceptableBank)\n wordSet = response.wordSet\n return { wordSet }\n}\n\nexport async function generateMainWordSet(): Promise<{ wordSet: Set }> {\n let wordSet: Set = new Set()\n let response = await generateWordSetFromWordBank(wordMainBank)\n wordSet = response.wordSet\n return { wordSet }\n}\n\nexport function getRandomItemFromSet(set: Set) {\n const arr = Array.from(set.keys())\n const randomIndex = Math.floor(Math.random() * arr.length)\n const item = arr[randomIndex]\n return item\n}\n","import React, { useContext, useEffect } from \"react\"\n\nimport { AppContext } from \"../App\"\nimport { LetterStatus } from \"../helpers\"\n\ntype Props = {\n letterPos: number\n attemptVal: number\n}\n\nfunction Letter({ letterPos, attemptVal }: Props) {\n const {\n board,\n boardStatus,\n currAttempt,\n correctWord,\n letterStatus,\n setLetterStatus,\n } = useContext(AppContext)\n const letter = board[attemptVal][letterPos]\n\n // compute color\n let letterState = \"\"\n let status = LetterStatus.Unknown\n\n if (currAttempt.attempt > attemptVal) {\n status = boardStatus[attemptVal][letterPos]\n\n switch (status) {\n case LetterStatus.Letter:\n letterState = \"almost\"\n break\n case LetterStatus.LetterAndPosition:\n letterState = \"correct\"\n break\n case LetterStatus.Disabled:\n letterState = \"error\"\n break\n default:\n break\n }\n }\n\n useEffect(() => {\n if (currAttempt.attempt > attemptVal) {\n let newLetterStatus = new Map(letterStatus)\n const oldStatus = newLetterStatus.get(letter) || LetterStatus.Unknown\n const newStatus = boardStatus[attemptVal][letterPos]\n if (oldStatus < newStatus) {\n newLetterStatus.set(letter, newStatus)\n setLetterStatus(newLetterStatus)\n }\n }\n }, [\n currAttempt,\n letterStatus,\n attemptVal,\n boardStatus,\n letter,\n letterPos,\n setLetterStatus,\n ])\n\n return (\n \n {letter}\n
\n )\n}\n\nexport default Letter\n","import Letter from \"./Letter\"\n\n// NOTE: will require reimporting some global objects\n// to extend this to have customizable word length or\n// number of tries.\n\nfunction Board() {\n return (\n \n {\" \"}\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n )\n}\n\nexport default Board\n","import React, { useContext } from \"react\"\nimport { AppContext } from \"../App\"\nimport { LetterStatus } from \"../helpers\"\n\ntype Props = {\n keyVal: string\n bigKey?: boolean\n status?: LetterStatus\n}\n\nfunction Key({ keyVal, bigKey, status }: Props) {\n const { onDelete, onEnter, onSelectLetter } = useContext(AppContext)\n\n const selectLetter = () => {\n if (keyVal === \"DELETE\") {\n onDelete()\n } else if (keyVal === \"ENTER\") {\n onEnter()\n } else {\n onSelectLetter(keyVal)\n }\n }\n\n let letterState = \"\"\n switch (status) {\n case LetterStatus.Letter:\n letterState = \"almost\"\n break\n case LetterStatus.LetterAndPosition:\n letterState = \"correct\"\n break\n case LetterStatus.Disabled:\n letterState = \"error\"\n break\n default:\n break\n }\n\n return (\n \n {keyVal}\n
\n )\n}\n\nexport default Key\n","import React, { useCallback, useContext, useEffect } from \"react\"\n\nimport { AppContext } from \"../App\"\nimport { LetterStatus } from \"../helpers\"\nimport Key from \"./Key\"\n\nconst keys1 = [\"Q\", \"W\", \"E\", \"R\", \"T\", \"Y\", \"U\", \"I\", \"O\", \"P\"]\nconst keys2 = [\"A\", \"S\", \"D\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\"]\nconst keys3 = [\"Z\", \"X\", \"C\", \"V\", \"B\", \"N\", \"M\"]\nconst keys = [...keys1, ...keys2, ...keys3]\n\nfunction Keyboard() {\n const {\n onDelete,\n onEnter,\n onSelectLetter,\n board,\n boardStatus,\n letterStatus,\n } = useContext(AppContext)\n\n const handleKeyboard = useCallback(\n (event: KeyboardEvent) => {\n // ignore composed events involving meta or ctrl\n if (event.metaKey || event.ctrlKey) {\n return\n }\n\n switch (event.key) {\n case \"Enter\":\n return onEnter()\n case \"Backspace\":\n return onDelete()\n default:\n keys.forEach((key) => {\n if (key === event.key.toUpperCase()) {\n return onSelectLetter(key)\n }\n })\n }\n },\n [onDelete, onEnter, onSelectLetter]\n )\n\n useEffect(() => {\n document.addEventListener(\"keydown\", handleKeyboard)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyboard)\n }\n })\n\n return (\n \n
\n {keys1.map((key) => {\n return (\n \n )\n })}\n
\n
\n {keys2.map((key) => {\n return (\n \n )\n })}\n
\n
\n \n {keys3.map((key) => {\n return (\n \n )\n })}\n \n
\n
\n )\n}\n\nexport default Keyboard\n","import React from \"react\"\nimport { AppContext } from \"../App\"\n\nfunction GameOver() {\n const { gameOver, currAttempt, correctWord } = React.useContext(AppContext)\n return (\n \n
{gameOver.guessedWord ? \"You correctly guessed\" : \"You failed\"}
\n Correct: {correctWord}
\n {gameOver.guessedWord ? (\n You guessed in {currAttempt.attempt} attempts
\n ) : (\n \"\"\n )}\n
\n )\n}\n\nexport default GameOver\n","import {\n createContext,\n Dispatch,\n SetStateAction,\n useEffect,\n useState,\n} from \"react\"\n\nimport \"./App.css\"\n\nimport {\n boardDefault,\n boardStatusDefault,\n computeGuessStatus,\n generateAcceptableWordSet,\n generateMainWordSet,\n getRandomItemFromSet,\n LetterStatus,\n} from \"./helpers\"\nimport Board from \"./components/Board\"\nimport Keyboard from \"./components/Keyboard\"\nimport GameOver from \"./components/GameOver\"\n\nexport interface IWordleGameContext {\n board: string[][]\n setBoard: Dispatch>\n boardStatus: LetterStatus[][]\n setBoardStatus: Dispatch>\n currAttempt: { attempt: number; letterPos: number }\n setCurrAttempt: Dispatch<\n SetStateAction<{ attempt: number; letterPos: number }>\n >\n onDelete: () => void\n onEnter: () => void\n onSelectLetter: (key: string) => void\n correctWord: string\n letterStatus: Map\n setLetterStatus: Dispatch>>\n gameOver: { gameOver: boolean; guessedWord: boolean }\n setGameOver: Dispatch<\n SetStateAction<{ gameOver: boolean; guessedWord: boolean }>\n >\n}\n\nexport const AppContext = createContext(\n {} as IWordleGameContext\n)\n\nfunction App() {\n const [board, setBoard] = useState(boardDefault)\n const [boardStatus, setBoardStatus] = useState(boardStatusDefault)\n const [currAttempt, setCurrAttempt] = useState({\n attempt: 0,\n letterPos: 0,\n })\n const [wordSet, setWordSet] = useState(new Set())\n const [letterStatus, setLetterStatus] = useState(new Map())\n const [gameOver, setGameOver] = useState({\n gameOver: false,\n guessedWord: false,\n })\n\n //const correctWord = \"RIGHT\";\n const [correctWord, setCorrectWord] = useState(\"RIGHT\")\n\n // generate set once (by empty deps)\n useEffect(() => {\n // this is the word bank of acceptable words\n generateAcceptableWordSet().then((words) => {\n setWordSet(words.wordSet)\n })\n // to make guesses easier, this is the word bank of \"common\" words\n generateMainWordSet().then((wordsy) => {\n setCorrectWord(getRandomItemFromSet(wordsy.wordSet))\n })\n }, [])\n\n const onSelectLetter = (key: string) => {\n if (currAttempt.letterPos >= 5) return\n const newBoard = [...board]\n newBoard[currAttempt.attempt][currAttempt.letterPos] = key\n setBoard(newBoard)\n setCurrAttempt({ ...currAttempt, letterPos: currAttempt.letterPos + 1 })\n }\n\n const onDelete = () => {\n if (currAttempt.letterPos === 0) return\n const newBoard = [...board]\n newBoard[currAttempt.attempt][currAttempt.letterPos - 1] = \"\"\n setBoard(newBoard)\n setCurrAttempt({ ...currAttempt, letterPos: currAttempt.letterPos - 1 })\n }\n\n const onEnter = () => {\n if (currAttempt.letterPos !== 5) return\n\n let currWord = board[currAttempt.attempt].join(\"\").toUpperCase()\n if (!wordSet.has(currWord)) return alert(\"Word not found\")\n\n // compute the status of the letters\n const newBoardStatus = [...boardStatus]\n newBoardStatus[currAttempt.attempt] = computeGuessStatus(\n currWord,\n correctWord\n )\n setBoardStatus(newBoardStatus)\n\n // defining here because it won't be refreshed after the setCurrAttempt\n const nextAttemptCount = currAttempt.attempt + 1\n\n setCurrAttempt({\n attempt: nextAttemptCount,\n letterPos: 0,\n })\n\n if (currWord === correctWord) {\n setGameOver({\n gameOver: true,\n guessedWord: true,\n })\n } else if (nextAttemptCount === 6) {\n setGameOver({\n gameOver: true,\n guessedWord: false,\n })\n }\n }\n\n return (\n \n
\n
\n \n \n {gameOver.gameOver ? : }\n
\n \n
\n )\n}\n\nexport default App\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport App from \"./App\"\nimport reportWebVitals from \"./reportWebVitals\"\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n)\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"],"names":["module","exports","aa","require","ba","p","a","b","c","arguments","length","encodeURIComponent","ca","Set","da","ea","fa","add","ha","window","document","createElement","ia","Object","prototype","hasOwnProperty","ja","ka","la","q","d","e","f","g","this","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","type","sanitizeURL","removeEmptyString","z","split","forEach","toLowerCase","pa","qa","toUpperCase","ra","slice","na","isNaN","oa","call","test","ma","removeAttribute","setAttribute","setAttributeNS","replace","xlinkHref","sa","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ta","Symbol","for","ua","va","wa","xa","ya","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","iterator","Ia","Ja","A","assign","Ka","Error","stack","trim","match","La","Ma","prepareStackTrace","defineProperty","set","Reflect","construct","l","h","k","displayName","includes","name","Na","tag","render","Oa","$$typeof","_context","_payload","_init","Pa","Qa","Ra","nodeName","Ta","_valueTracker","getOwnPropertyDescriptor","constructor","get","configurable","enumerable","getValue","setValue","stopTracking","Sa","Ua","checked","value","Va","activeElement","body","Wa","defaultChecked","defaultValue","_wrapperState","initialChecked","Xa","initialValue","controlled","Ya","Za","$a","ab","ownerDocument","bb","Array","isArray","cb","options","selected","defaultSelected","disabled","db","dangerouslySetInnerHTML","children","eb","fb","gb","textContent","hb","ib","jb","kb","namespaceURI","innerHTML","valueOf","toString","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","lb","lastChild","nodeType","nodeValue","mb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","nb","ob","pb","style","indexOf","setProperty","keys","charAt","substring","qb","menuitem","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","rb","sb","is","tb","ub","target","srcElement","correspondingUseElement","parentNode","vb","wb","xb","yb","zb","stateNode","Ab","Bb","push","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","addEventListener","removeEventListener","Kb","apply","m","onError","Lb","Mb","Nb","Ob","Pb","Qb","Sb","alternate","return","flags","Tb","memoizedState","dehydrated","Ub","Wb","child","sibling","current","Vb","Xb","Yb","unstable_scheduleCallback","Zb","unstable_cancelCallback","$b","unstable_shouldYield","ac","unstable_requestPaint","D","unstable_now","bc","unstable_getCurrentPriorityLevel","cc","unstable_ImmediatePriority","dc","unstable_UserBlockingPriority","ec","unstable_NormalPriority","fc","unstable_LowPriority","gc","unstable_IdlePriority","hc","ic","lc","Math","clz32","mc","nc","log","LN2","oc","pc","qc","rc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","sc","uc","vc","wc","eventTimes","yc","E","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Map","Lc","Mc","Nc","Oc","delete","pointerId","Pc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Rc","Sc","priority","isDehydrated","containerInfo","Tc","Uc","dispatchEvent","shift","Vc","Wc","Xc","Yc","Zc","ReactCurrentBatchConfig","$c","transition","ad","bd","cd","dd","Qc","stopPropagation","ed","fd","gd","hd","id","jd","keyCode","charCode","kd","ld","md","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","cancelBubble","persist","isPersistent","rd","sd","td","nd","eventPhase","bubbles","cancelable","timeStamp","Date","now","isTrusted","od","pd","view","detail","qd","vd","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","ud","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","wd","yd","dataTransfer","Ad","Cd","animationName","elapsedTime","pseudoElement","Dd","clipboardData","Ed","Gd","data","Hd","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Id","Jd","Alt","Control","Meta","Shift","Kd","Ld","key","String","fromCharCode","code","location","repeat","locale","which","Md","Od","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Qd","touches","targetTouches","changedTouches","Sd","Td","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Ud","Vd","Wd","Xd","documentMode","Yd","Zd","$d","ae","be","ce","de","ge","color","date","datetime","email","month","number","password","range","search","tel","text","time","url","week","he","ie","je","event","listeners","ke","le","me","ne","oe","pe","qe","re","se","te","ue","oninput","ve","detachEvent","we","xe","attachEvent","ye","ze","Ae","Ce","De","Ee","Fe","node","offset","nextSibling","Ge","contains","compareDocumentPosition","He","HTMLIFrameElement","contentWindow","href","Ie","contentEditable","Je","focusedElem","selectionRange","documentElement","start","end","selectionStart","selectionEnd","min","defaultView","getSelection","extend","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","element","left","scrollLeft","top","scrollTop","focus","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","animationend","animationiteration","animationstart","transitionend","Se","Te","Ue","animation","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","ff","gf","concat","hf","Rb","instance","listener","F","jf","has","kf","lf","mf","random","nf","bind","capture","passive","n","v","C","t","x","r","B","of","pf","parentWindow","qf","rf","O","T","za","L","ee","char","fe","unshift","sf","tf","uf","vf","wf","xf","yf","__html","zf","setTimeout","Af","clearTimeout","Bf","Promise","Df","queueMicrotask","resolve","then","catch","Cf","Ef","Ff","Gf","previousSibling","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","G","H","Pf","I","Qf","Rf","Sf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Tf","childContextTypes","Uf","Vf","Wf","getChildContext","Xf","__reactInternalMemoizedMergedChildContext","Yf","Zf","$f","ag","bg","dg","eg","fg","defaultProps","gg","hg","ig","jg","kg","lg","_currentValue","mg","childLanes","ng","dependencies","firstContext","lanes","og","pg","context","memoizedValue","next","qg","rg","sg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","interleaved","effects","tg","ug","eventTime","lane","payload","callback","vg","J","mode","K","wg","xg","yg","w","u","y","zg","Ag","Bg","Component","refs","Cg","Fg","isMounted","_reactInternals","enqueueSetState","M","Dg","Eg","enqueueReplaceState","enqueueForceUpdate","Gg","shouldComponentUpdate","isPureReactComponent","Hg","contextType","state","updater","Ig","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Jg","props","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","N","Zg","$g","ah","elementType","deletions","bh","pendingProps","overflow","treeContext","retryLane","ch","dh","eh","fh","memoizedProps","gh","hh","ih","ref","_owner","_stringRef","jh","join","kh","lh","index","mh","nh","oh","implementation","ph","qh","done","rh","sh","th","uh","vh","wh","xh","yh","tagName","zh","Ah","Bh","P","Ch","revealOrder","Dh","Eh","_workInProgressVersionPrimary","Fh","ReactCurrentDispatcher","Gh","Hh","Q","R","S","Ih","Jh","Kh","Lh","U","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","baseQueue","queue","Uh","Vh","Wh","lastRenderedReducer","action","hasEagerState","eagerState","lastRenderedState","dispatch","Xh","Yh","Zh","$h","ai","getSnapshot","bi","ci","di","lastEffect","stores","ei","fi","gi","create","destroy","deps","hi","ii","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","zi","message","Ai","console","error","Li","Ni","Oi","Bi","WeakMap","Ci","Di","Ei","Fi","getDerivedStateFromError","componentDidCatch","Gi","componentStack","Hi","pingCache","Ii","Ji","Ki","Pi","tailMode","tail","V","subtreeFlags","Qi","pendingContext","Ri","wasMultiple","multiple","onClick","onclick","size","createElementNS","autoFocus","createTextNode","W","Si","rendering","Ti","renderingStartTime","isBackwards","last","Ui","Vi","Wi","ReactCurrentOwner","Xi","Yi","Zi","$i","aj","compare","bj","cj","dj","baseLanes","cachePool","ej","fj","gj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","hj","ij","jj","kj","lj","mj","fallback","nj","oj","pj","qj","_reactRetry","rj","sj","tj","uj","vj","xj","yj","zj","Aj","WeakSet","X","Bj","Cj","Dj","Ej","Gj","Hj","Ij","Jj","onCommitFiberUnmount","componentWillUnmount","Kj","Lj","Mj","Nj","Oj","Pj","Qj","insertBefore","_reactRootContainer","Rj","Sj","Tj","Xj","Yj","Zj","ak","__reactInternalSnapshotBeforeUpdate","src","Wj","Lk","bk","ceil","ck","dk","ek","Y","Z","fk","gk","hk","ik","jk","Vj","Infinity","kk","lk","mk","nk","ok","pk","qk","rk","sk","tk","callbackNode","expirationTimes","expiredLanes","tc","callbackPriority","cg","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","finishedWork","finishedLanes","Fk","timeoutHandle","Gk","Hk","Ik","Jk","Kk","mutableReadLanes","xc","Fj","display","Uj","onCommitFiberRoot","jc","onRecoverableError","Mk","onPostCommitFiberRoot","Nk","Ok","Qk","isReactComponent","pendingChildren","Rk","mutableSourceEagerHydrationData","Sk","cache","transitions","Tk","Uk","Vk","Wk","Xk","Yk","Zk","wj","Pk","al","reportError","bl","_internalRoot","cl","dl","el","fl","hl","gl","unmount","unstable_scheduleHydration","splice","querySelectorAll","JSON","stringify","form","il","usingClientEntryPoint","Events","jl","findFiberByHostInstance","bundleType","version","rendererPackageName","kl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","ll","isDisabled","supportsFiber","inject","createPortal","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","err","__self","__source","jsx","jsxs","setState","forceUpdate","escape","_status","_result","default","Children","map","count","toArray","only","Fragment","Profiler","PureComponent","StrictMode","Suspense","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","runtime","undefined","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","writable","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","GenStateSuspendedStart","method","arg","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","reject","result","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","i","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","object","reverse","pop","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","sortIndex","performance","setImmediate","startTime","expirationTime","priorityLevel","navigator","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","floor","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","delay","unstable_wrapCallback","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","chunkId","all","reduce","promises","miniCssF","prop","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","timeout","onScriptComplete","onerror","onload","doneFns","head","installedChunks","j","installedChunkData","promise","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","some","chunkLoadingGlobal","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","_objectSpread2","getOwnPropertyDescriptors","defineProperties","_arrayLikeToArray","arr","len","arr2","_unsupportedIterableToArray","minLen","from","_toConsumableArray","_slicedToArray","_i","_s","_e","_arr","_n","_d","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","LetterStatus","boardDefault","boardStatusDefault","Unknown","generateWordSetFromWordBank","wordBank","wordSet","fetch","response","wordArr","wordAcceptableBank","wordMainBank","letterPos","attemptVal","AppContext","board","boardStatus","currAttempt","letterStatus","correctWord","setLetterStatus","letter","letterState","attempt","Letter","LetterAndPosition","Disabled","newLetterStatus","oldStatus","newStatus","className","keyVal","bigKey","status","onDelete","onEnter","onSelectLetter","keys1","keys2","keys3","handleKeyboard","React","gameOver","guessedWord","setBoard","setBoardStatus","setCurrAttempt","setWordSet","setGameOver","setCorrectWord","generateAcceptableWordSet","words","generateMainWordSet","wordsy","getRandomItemFromSet","newBoard","currWord","alert","newBoardStatus","guess","toLocaleUpperCase","remainder","fill","computeGuessStatus","nextAttemptCount","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","getElementById","reportWebVitals"],"sourceRoot":""}
\ No newline at end of file