From cf9d4df2daee7187150f31d48acd339ba7ed1d20 Mon Sep 17 00:00:00 2001
From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com>
Date: Sun, 22 Mar 2026 20:37:10 +0200
Subject: [PATCH 1/4] fix(short-tests): afk percentage is NaN (@Leonabcd123)
(#7694)
### Description
Steps to reproduce:
1. Create a custom text with just the letter `a`.
2. Complete it.
3. Hover over the time.
4. Notice how it says `0s (0s afk NaN%)`.
This PR makes it `0%`, and doesn't show `afk detected` as one of the
fail reasons.
---
frontend/src/ts/test/result.ts | 2 +-
frontend/src/ts/test/test-logic.ts | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/frontend/src/ts/test/result.ts b/frontend/src/ts/test/result.ts
index 8669d7dc51f1..e258a4337e65 100644
--- a/frontend/src/ts/test/result.ts
+++ b/frontend/src/ts/test/result.ts
@@ -433,7 +433,7 @@ function updateConsistency(): void {
function updateTime(): void {
const afkSecondsPercent = Numbers.roundTo2(
- (result.afkDuration / result.testDuration) * 100,
+ (result.afkDuration / result.testDuration) * 100 || 0,
);
qs("#result .stats .time .bottom .afk")?.setText("");
if (afkSecondsPercent > 0) {
diff --git a/frontend/src/ts/test/test-logic.ts b/frontend/src/ts/test/test-logic.ts
index 8db390113010..b6cf0c77ca66 100644
--- a/frontend/src/ts/test/test-logic.ts
+++ b/frontend/src/ts/test/test-logic.ts
@@ -1010,7 +1010,8 @@ export async function finish(difficultyFailed = false): Promise {
//afk check
const kps = TestInput.afkHistory.slice(-5);
- let afkDetected = kps.every((afk) => afk);
+ let afkDetected = kps.length > 0 && kps.every((afk) => afk);
+
if (TestState.bailedOut) afkDetected = false;
const mode2Number = parseInt(completedEvent.mode2);
From 96acd402d0c9383bf99e74d100d9cc4f0ce82489 Mon Sep 17 00:00:00 2001
From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com>
Date: Sun, 22 Mar 2026 22:19:19 +0200
Subject: [PATCH 2/4] fix(zen): negative wpm in short tests (@Leonabcd123,
@miodec) (#7679)
### Description
Force keyup for every held key other than the last held key, and
calculate its duration by doing: `now - keypress.timestamp`. For the
last key, use the mean as we do now.
Fixes #7099
---
frontend/src/ts/test/test-input.ts | 51 ++++++++++++++++--------------
frontend/src/ts/test/test-logic.ts | 2 +-
frontend/src/ts/test/test-stats.ts | 5 ---
3 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/frontend/src/ts/test/test-input.ts b/frontend/src/ts/test/test-input.ts
index 8b18f17efd61..1dfa8cf72d82 100644
--- a/frontend/src/ts/test/test-input.ts
+++ b/frontend/src/ts/test/test-input.ts
@@ -452,10 +452,10 @@ function updateOverlap(now: number): void {
}
}
-export function resetKeypressTimings(): void {
- //because keydown triggers before input, we need to grab the first keypress data here and carry it over
+function carryoverFirstKeypress(): void {
+ // Because keydown triggers before input, we need to grab the first keypress data here and carry it over
- //take the key with the largest index
+ // Take the key with the largest index
const lastKey = Object.keys(keyDownData).reduce((a, b) => {
const aIndex = keyDownData[a]?.index;
const bIndex = keyDownData[b]?.index;
@@ -464,10 +464,30 @@ export function resetKeypressTimings(): void {
return aIndex > bIndex ? a : b;
}, "");
- //get the data
+ // Get the data
const lastKeyData = keyDownData[lastKey];
- //reset
+ // Carry over
+ if (lastKeyData !== undefined) {
+ keypressTimings = {
+ spacing: {
+ first: lastKeyData.timestamp,
+ last: lastKeyData.timestamp,
+ array: [],
+ },
+ duration: {
+ array: [0],
+ },
+ };
+ keyDownData[lastKey] = {
+ timestamp: lastKeyData.timestamp,
+ // Make sure to set it to the first index
+ index: 0,
+ };
+ }
+}
+
+export function resetKeypressTimings(carryover: boolean): void {
keypressTimings = {
spacing: {
first: -1,
@@ -485,24 +505,7 @@ export function resetKeypressTimings(): void {
keyDownData = {};
noCodeIndex = 0;
- //carry over
- if (lastKeyData !== undefined) {
- keypressTimings = {
- spacing: {
- first: lastKeyData.timestamp,
- last: lastKeyData.timestamp,
- array: [],
- },
- duration: {
- array: [0],
- },
- };
- keyDownData[lastKey] = {
- timestamp: lastKeyData.timestamp,
- // make sure to set it to the first index
- index: 0,
- };
- }
+ if (carryover) carryoverFirstKeypress();
console.debug("Keypress timings reset");
}
@@ -551,4 +554,6 @@ export function restart(): void {
correct: 0,
incorrect: 0,
};
+
+ resetKeypressTimings(false);
}
diff --git a/frontend/src/ts/test/test-logic.ts b/frontend/src/ts/test/test-logic.ts
index b6cf0c77ca66..22eaf83e5f20 100644
--- a/frontend/src/ts/test/test-logic.ts
+++ b/frontend/src/ts/test/test-logic.ts
@@ -139,7 +139,7 @@ export function startTest(now: number): boolean {
TestState.setActive(true);
Replay.startReplayRecording();
Replay.replayGetWordsList(TestWords.words.list);
- TestInput.resetKeypressTimings();
+ TestInput.resetKeypressTimings(true);
Time.set(0);
TestTimer.clear();
diff --git a/frontend/src/ts/test/test-stats.ts b/frontend/src/ts/test/test-stats.ts
index 16078cf172c1..09b1822c59b5 100644
--- a/frontend/src/ts/test/test-stats.ts
+++ b/frontend/src/ts/test/test-stats.ts
@@ -144,11 +144,6 @@ export function calculateTestSeconds(now?: number): number {
duration = (now - start) / 1000;
}
- if (Config.mode === "zen" && duration < 0) {
- duration = 0;
- console.log("Zen mode with negative duration detected, setting to 0");
- }
-
return duration;
}
From b098c9d606a0caaa036f5df01d1fd5f3c06aec17 Mon Sep 17 00:00:00 2001
From: Luis Woo <73271064+LuWo0@users.noreply.github.com>
Date: Sun, 22 Mar 2026 13:21:20 -0700
Subject: [PATCH 3/4] feat(lang): add pokemon language (@LuWo0) (#7688)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
### Description
Adds Pokemon as a new language, containing all current Pokemon names
(Generations 1–9, from Bulbasaur to Pecharunt).
### Checks
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [x] Adding a language?
- Make sure to follow the [languages
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md)
- [x] Add language to `packages/schemas/src/languages.ts`
- [x] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
- [x] Add language json file to `frontend/static/languages`
- [ ] Adding a theme?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md)
- [ ] Add theme to `packages/schemas/src/themes.ts`
- [ ] Add theme to `frontend/src/ts/constants/themes.ts`
- [ ] (optional) Add theme css file to `frontend/static/themes`
- [ ] Add some screenshots of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
- [ ] Add layout to `packages/schemas/src/layouts.ts`
- [ ] Add layout json file to `frontend/static/layouts`
- [ ] Adding a font?
- Make sure to follow the [fonts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
- [ ] Add font file to `frontend/static/webfonts`
- [ ] Add font to `packages/schemas/src/fonts.ts`
- [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
feat(lang): add pokemon language (@LuWo0)
---------
Co-authored-by: Jack
---
frontend/src/ts/constants/languages.ts | 1 +
frontend/static/languages/pokemon_1k.json | 1034 +++++++++++++++++++++
packages/schemas/src/languages.ts | 1 +
3 files changed, 1036 insertions(+)
create mode 100644 frontend/static/languages/pokemon_1k.json
diff --git a/frontend/src/ts/constants/languages.ts b/frontend/src/ts/constants/languages.ts
index 678919b856e6..9f9920f20b72 100644
--- a/frontend/src/ts/constants/languages.ts
+++ b/frontend/src/ts/constants/languages.ts
@@ -287,6 +287,7 @@ export const LanguageGroups: Record = {
"typing_of_the_dead",
"league_of_legends",
"docker_file",
+ "pokemon_1k",
],
amharic: ["amharic", "amharic_1k", "amharic_5k"],
oromo: ["oromo", "oromo_1k", "oromo_5k"],
diff --git a/frontend/static/languages/pokemon_1k.json b/frontend/static/languages/pokemon_1k.json
new file mode 100644
index 000000000000..9e34bd9bf388
--- /dev/null
+++ b/frontend/static/languages/pokemon_1k.json
@@ -0,0 +1,1034 @@
+{
+ "name": "pokemon_1k",
+ "rightToLeft": false,
+ "ligatures": false,
+ "orderedByFrequency": false,
+ "bcp47": "en",
+ "words": [
+ "bulbasaur",
+ "ivysaur",
+ "venusaur",
+ "charmander",
+ "charmeleon",
+ "charizard",
+ "squirtle",
+ "wartortle",
+ "blastoise",
+ "caterpie",
+ "metapod",
+ "butterfree",
+ "weedle",
+ "kakuna",
+ "beedrill",
+ "pidgey",
+ "pidgeotto",
+ "pidgeot",
+ "rattata",
+ "raticate",
+ "spearow",
+ "fearow",
+ "ekans",
+ "arbok",
+ "pikachu",
+ "raichu",
+ "sandshrew",
+ "sandslash",
+ "nidoran♀",
+ "nidorina",
+ "nidoqueen",
+ "nidoran♂",
+ "nidorino",
+ "nidoking",
+ "clefairy",
+ "clefable",
+ "vulpix",
+ "ninetales",
+ "jigglypuff",
+ "wigglytuff",
+ "zubat",
+ "golbat",
+ "oddish",
+ "gloom",
+ "vileplume",
+ "paras",
+ "parasect",
+ "venonat",
+ "venomoth",
+ "diglett",
+ "dugtrio",
+ "meowth",
+ "persian",
+ "psyduck",
+ "golduck",
+ "mankey",
+ "primeape",
+ "growlithe",
+ "arcanine",
+ "poliwag",
+ "poliwhirl",
+ "poliwrath",
+ "abra",
+ "kadabra",
+ "alakazam",
+ "machop",
+ "machoke",
+ "machamp",
+ "bellsprout",
+ "weepinbell",
+ "victreebel",
+ "tentacool",
+ "tentacruel",
+ "geodude",
+ "graveler",
+ "golem",
+ "ponyta",
+ "rapidash",
+ "slowpoke",
+ "slowbro",
+ "magnemite",
+ "magneton",
+ "farfetch'd",
+ "doduo",
+ "dodrio",
+ "seel",
+ "dewgong",
+ "grimer",
+ "muk",
+ "shellder",
+ "cloyster",
+ "gastly",
+ "haunter",
+ "gengar",
+ "onix",
+ "drowzee",
+ "hypno",
+ "krabby",
+ "kingler",
+ "voltorb",
+ "electrode",
+ "exeggcute",
+ "exeggutor",
+ "cubone",
+ "marowak",
+ "hitmonlee",
+ "hitmonchan",
+ "lickitung",
+ "koffing",
+ "weezing",
+ "rhyhorn",
+ "rhydon",
+ "chansey",
+ "tangela",
+ "kangaskhan",
+ "horsea",
+ "seadra",
+ "goldeen",
+ "seaking",
+ "staryu",
+ "starmie",
+ "mr. mime",
+ "scyther",
+ "jynx",
+ "electabuzz",
+ "magmar",
+ "pinsir",
+ "tauros",
+ "magikarp",
+ "gyarados",
+ "lapras",
+ "ditto",
+ "eevee",
+ "vaporeon",
+ "jolteon",
+ "flareon",
+ "porygon",
+ "omanyte",
+ "omastar",
+ "kabuto",
+ "kabutops",
+ "aerodactyl",
+ "snorlax",
+ "articuno",
+ "zapdos",
+ "moltres",
+ "dratini",
+ "dragonair",
+ "dragonite",
+ "mewtwo",
+ "mew",
+ "chikorita",
+ "bayleef",
+ "meganium",
+ "cyndaquil",
+ "quilava",
+ "typhlosion",
+ "totodile",
+ "croconaw",
+ "feraligatr",
+ "sentret",
+ "furret",
+ "hoothoot",
+ "noctowl",
+ "ledyba",
+ "ledian",
+ "spinarak",
+ "ariados",
+ "crobat",
+ "chinchou",
+ "lanturn",
+ "pichu",
+ "cleffa",
+ "igglybuff",
+ "togepi",
+ "togetic",
+ "natu",
+ "xatu",
+ "mareep",
+ "flaaffy",
+ "ampharos",
+ "bellossom",
+ "marill",
+ "azumarill",
+ "sudowoodo",
+ "politoed",
+ "hoppip",
+ "skiploom",
+ "jumpluff",
+ "aipom",
+ "sunkern",
+ "sunflora",
+ "yanma",
+ "wooper",
+ "quagsire",
+ "espeon",
+ "umbreon",
+ "murkrow",
+ "slowking",
+ "misdreavus",
+ "unown",
+ "wobbuffet",
+ "girafarig",
+ "pineco",
+ "forretress",
+ "dunsparce",
+ "gligar",
+ "steelix",
+ "snubbull",
+ "granbull",
+ "qwilfish",
+ "scizor",
+ "shuckle",
+ "heracross",
+ "sneasel",
+ "teddiursa",
+ "ursaring",
+ "slugma",
+ "magcargo",
+ "swinub",
+ "piloswine",
+ "corsola",
+ "remoraid",
+ "octillery",
+ "delibird",
+ "mantine",
+ "skarmory",
+ "houndour",
+ "houndoom",
+ "kingdra",
+ "phanpy",
+ "donphan",
+ "porygon2",
+ "stantler",
+ "smeargle",
+ "tyrogue",
+ "hitmontop",
+ "smoochum",
+ "elekid",
+ "magby",
+ "miltank",
+ "blissey",
+ "raikou",
+ "entei",
+ "suicune",
+ "larvitar",
+ "pupitar",
+ "tyranitar",
+ "lugia",
+ "ho-oh",
+ "celebi",
+ "treecko",
+ "grovyle",
+ "sceptile",
+ "torchic",
+ "combusken",
+ "blaziken",
+ "mudkip",
+ "marshtomp",
+ "swampert",
+ "poochyena",
+ "mightyena",
+ "zigzagoon",
+ "linoone",
+ "wurmple",
+ "silcoon",
+ "beautifly",
+ "cascoon",
+ "dustox",
+ "lotad",
+ "lombre",
+ "ludicolo",
+ "seedot",
+ "nuzleaf",
+ "shiftry",
+ "taillow",
+ "swellow",
+ "wingull",
+ "pelipper",
+ "ralts",
+ "kirlia",
+ "gardevoir",
+ "surskit",
+ "masquerain",
+ "shroomish",
+ "breloom",
+ "slakoth",
+ "vigoroth",
+ "slaking",
+ "nincada",
+ "ninjask",
+ "shedinja",
+ "whismur",
+ "loudred",
+ "exploud",
+ "makuhita",
+ "hariyama",
+ "azurill",
+ "nosepass",
+ "skitty",
+ "delcatty",
+ "sableye",
+ "mawile",
+ "aron",
+ "lairon",
+ "aggron",
+ "meditite",
+ "medicham",
+ "electrike",
+ "manectric",
+ "plusle",
+ "minun",
+ "volbeat",
+ "illumise",
+ "roselia",
+ "gulpin",
+ "swalot",
+ "carvanha",
+ "sharpedo",
+ "wailmer",
+ "wailord",
+ "numel",
+ "camerupt",
+ "torkoal",
+ "spoink",
+ "grumpig",
+ "spinda",
+ "trapinch",
+ "vibrava",
+ "flygon",
+ "cacnea",
+ "cacturne",
+ "swablu",
+ "altaria",
+ "zangoose",
+ "seviper",
+ "lunatone",
+ "solrock",
+ "barboach",
+ "whiscash",
+ "corphish",
+ "crawdaunt",
+ "baltoy",
+ "claydol",
+ "lileep",
+ "cradily",
+ "anorith",
+ "armaldo",
+ "feebas",
+ "milotic",
+ "castform",
+ "kecleon",
+ "shuppet",
+ "banette",
+ "duskull",
+ "dusclops",
+ "tropius",
+ "chimecho",
+ "absol",
+ "wynaut",
+ "snorunt",
+ "glalie",
+ "spheal",
+ "sealeo",
+ "walrein",
+ "clamperl",
+ "huntail",
+ "gorebyss",
+ "relicanth",
+ "luvdisc",
+ "bagon",
+ "shelgon",
+ "salamence",
+ "beldum",
+ "metang",
+ "metagross",
+ "regirock",
+ "regice",
+ "registeel",
+ "latias",
+ "latios",
+ "kyogre",
+ "groudon",
+ "rayquaza",
+ "jirachi",
+ "deoxys",
+ "turtwig",
+ "grotle",
+ "torterra",
+ "chimchar",
+ "monferno",
+ "infernape",
+ "piplup",
+ "prinplup",
+ "empoleon",
+ "starly",
+ "staravia",
+ "staraptor",
+ "bidoof",
+ "bibarel",
+ "kricketot",
+ "kricketune",
+ "shinx",
+ "luxio",
+ "luxray",
+ "budew",
+ "roserade",
+ "cranidos",
+ "rampardos",
+ "shieldon",
+ "bastiodon",
+ "burmy",
+ "wormadam",
+ "mothim",
+ "combee",
+ "vespiquen",
+ "pachirisu",
+ "buizel",
+ "floatzel",
+ "cherubi",
+ "cherrim",
+ "shellos",
+ "gastrodon",
+ "ambipom",
+ "drifloon",
+ "drifblim",
+ "buneary",
+ "lopunny",
+ "mismagius",
+ "honchkrow",
+ "glameow",
+ "purugly",
+ "chingling",
+ "stunky",
+ "skuntank",
+ "bronzor",
+ "bronzong",
+ "bonsly",
+ "mime jr.",
+ "happiny",
+ "chatot",
+ "spiritomb",
+ "gible",
+ "gabite",
+ "garchomp",
+ "munchlax",
+ "riolu",
+ "lucario",
+ "hippopotas",
+ "hippowdon",
+ "skorupi",
+ "drapion",
+ "croagunk",
+ "toxicroak",
+ "carnivine",
+ "finneon",
+ "lumineon",
+ "mantyke",
+ "snover",
+ "abomasnow",
+ "weavile",
+ "magnezone",
+ "lickilicky",
+ "rhyperior",
+ "tangrowth",
+ "electivire",
+ "magmortar",
+ "togekiss",
+ "yanmega",
+ "leafeon",
+ "glaceon",
+ "gliscor",
+ "mamoswine",
+ "porygon-z",
+ "gallade",
+ "probopass",
+ "dusknoir",
+ "froslass",
+ "rotom",
+ "uxie",
+ "mesprit",
+ "azelf",
+ "dialga",
+ "palkia",
+ "heatran",
+ "regigigas",
+ "giratina",
+ "cresselia",
+ "phione",
+ "manaphy",
+ "darkrai",
+ "shaymin",
+ "arceus",
+ "victini",
+ "snivy",
+ "servine",
+ "serperior",
+ "tepig",
+ "pignite",
+ "emboar",
+ "oshawott",
+ "dewott",
+ "samurott",
+ "patrat",
+ "watchog",
+ "lillipup",
+ "herdier",
+ "stoutland",
+ "purrloin",
+ "liepard",
+ "pansage",
+ "simisage",
+ "pansear",
+ "simisear",
+ "panpour",
+ "simipour",
+ "munna",
+ "musharna",
+ "pidove",
+ "tranquill",
+ "unfezant",
+ "blitzle",
+ "zebstrika",
+ "roggenrola",
+ "boldore",
+ "gigalith",
+ "woobat",
+ "swoobat",
+ "drilbur",
+ "excadrill",
+ "audino",
+ "timburr",
+ "gurdurr",
+ "conkeldurr",
+ "tympole",
+ "palpitoad",
+ "seismitoad",
+ "throh",
+ "sawk",
+ "sewaddle",
+ "swadloon",
+ "leavanny",
+ "venipede",
+ "whirlipede",
+ "scolipede",
+ "cottonee",
+ "whimsicott",
+ "petilil",
+ "lilligant",
+ "basculin",
+ "sandile",
+ "krokorok",
+ "krookodile",
+ "darumaka",
+ "darmanitan",
+ "maractus",
+ "dwebble",
+ "crustle",
+ "scraggy",
+ "scrafty",
+ "sigilyph",
+ "yamask",
+ "cofagrigus",
+ "tirtouga",
+ "carracosta",
+ "archen",
+ "archeops",
+ "trubbish",
+ "garbodor",
+ "zorua",
+ "zoroark",
+ "minccino",
+ "cinccino",
+ "gothita",
+ "gothorita",
+ "gothitelle",
+ "solosis",
+ "duosion",
+ "reuniclus",
+ "ducklett",
+ "swanna",
+ "vanillite",
+ "vanillish",
+ "vanilluxe",
+ "deerling",
+ "sawsbuck",
+ "emolga",
+ "karrablast",
+ "escavalier",
+ "foongus",
+ "amoonguss",
+ "frillish",
+ "jellicent",
+ "alomomola",
+ "joltik",
+ "galvantula",
+ "ferroseed",
+ "ferrothorn",
+ "klink",
+ "klang",
+ "klinklang",
+ "tynamo",
+ "eelektrik",
+ "eelektross",
+ "elgyem",
+ "beheeyem",
+ "litwick",
+ "lampent",
+ "chandelure",
+ "axew",
+ "fraxure",
+ "haxorus",
+ "cubchoo",
+ "beartic",
+ "cryogonal",
+ "shelmet",
+ "accelgor",
+ "stunfisk",
+ "mienfoo",
+ "mienshao",
+ "druddigon",
+ "golett",
+ "golurk",
+ "pawniard",
+ "bisharp",
+ "bouffalant",
+ "rufflet",
+ "braviary",
+ "vullaby",
+ "mandibuzz",
+ "heatmor",
+ "durant",
+ "deino",
+ "zweilous",
+ "hydreigon",
+ "larvesta",
+ "volcarona",
+ "cobalion",
+ "terrakion",
+ "virizion",
+ "tornadus",
+ "thundurus",
+ "reshiram",
+ "zekrom",
+ "landorus",
+ "kyurem",
+ "keldeo",
+ "meloetta",
+ "genesect",
+ "chespin",
+ "quilladin",
+ "chesnaught",
+ "fennekin",
+ "braixen",
+ "delphox",
+ "froakie",
+ "frogadier",
+ "greninja",
+ "bunnelby",
+ "diggersby",
+ "fletchling",
+ "fletchinder",
+ "talonflame",
+ "scatterbug",
+ "spewpa",
+ "vivillon",
+ "litleo",
+ "pyroar",
+ "flabébé",
+ "floette",
+ "florges",
+ "skiddo",
+ "gogoat",
+ "pancham",
+ "pangoro",
+ "furfrou",
+ "espurr",
+ "meowstic",
+ "honedge",
+ "doublade",
+ "aegislash",
+ "spritzee",
+ "aromatisse",
+ "swirlix",
+ "slurpuff",
+ "inkay",
+ "malamar",
+ "binacle",
+ "barbaracle",
+ "skrelp",
+ "dragalge",
+ "clauncher",
+ "clawitzer",
+ "helioptile",
+ "heliolisk",
+ "tyrunt",
+ "tyrantrum",
+ "amaura",
+ "aurorus",
+ "sylveon",
+ "hawlucha",
+ "dedenne",
+ "carbink",
+ "goomy",
+ "sliggoo",
+ "goodra",
+ "klefki",
+ "phantump",
+ "trevenant",
+ "pumpkaboo",
+ "gourgeist",
+ "bergmite",
+ "avalugg",
+ "noibat",
+ "noivern",
+ "xerneas",
+ "yveltal",
+ "zygarde",
+ "diancie",
+ "hoopa",
+ "volcanion",
+ "rowlet",
+ "dartrix",
+ "decidueye",
+ "litten",
+ "torracat",
+ "incineroar",
+ "popplio",
+ "brionne",
+ "primarina",
+ "pikipek",
+ "trumbeak",
+ "toucannon",
+ "yungoos",
+ "gumshoos",
+ "grubbin",
+ "charjabug",
+ "vikavolt",
+ "crabrawler",
+ "crabominable",
+ "oricorio",
+ "cutiefly",
+ "ribombee",
+ "rockruff",
+ "lycanroc",
+ "wishiwashi",
+ "mareanie",
+ "toxapex",
+ "mudbray",
+ "mudsdale",
+ "dewpider",
+ "araquanid",
+ "fomantis",
+ "lurantis",
+ "morelull",
+ "shiinotic",
+ "salandit",
+ "salazzle",
+ "stufful",
+ "bewear",
+ "bounsweet",
+ "steenee",
+ "tsareena",
+ "comfey",
+ "oranguru",
+ "passimian",
+ "wimpod",
+ "golisopod",
+ "sandygast",
+ "palossand",
+ "pyukumuku",
+ "type: null",
+ "silvally",
+ "minior",
+ "komala",
+ "turtonator",
+ "togedemaru",
+ "mimikyu",
+ "bruxish",
+ "drampa",
+ "dhelmise",
+ "jangmo-o",
+ "hakamo-o",
+ "kommo-o",
+ "tapu koko",
+ "tapu lele",
+ "tapu bulu",
+ "tapu fini",
+ "cosmog",
+ "cosmoem",
+ "solgaleo",
+ "lunala",
+ "nihilego",
+ "buzzwole",
+ "pheromosa",
+ "xurkitree",
+ "celesteela",
+ "kartana",
+ "guzzlord",
+ "necrozma",
+ "magearna",
+ "marshadow",
+ "poipole",
+ "naganadel",
+ "stakataka",
+ "blacephalon",
+ "zeraora",
+ "meltan",
+ "melmetal",
+ "grookey",
+ "thwackey",
+ "rillaboom",
+ "scorbunny",
+ "raboot",
+ "cinderace",
+ "sobble",
+ "drizzile",
+ "inteleon",
+ "skwovet",
+ "greedent",
+ "rookidee",
+ "corvisquire",
+ "corviknight",
+ "blipbug",
+ "dottler",
+ "orbeetle",
+ "nickit",
+ "thievul",
+ "gossifleur",
+ "eldegoss",
+ "wooloo",
+ "dubwool",
+ "chewtle",
+ "drednaw",
+ "yamper",
+ "boltund",
+ "rolycoly",
+ "carkol",
+ "coalossal",
+ "applin",
+ "flapple",
+ "appletun",
+ "silicobra",
+ "sandaconda",
+ "cramorant",
+ "arrokuda",
+ "barraskewda",
+ "toxel",
+ "toxtricity",
+ "sizzlipede",
+ "centiskorch",
+ "clobbopus",
+ "grapploct",
+ "sinistea",
+ "polteageist",
+ "hatenna",
+ "hattrem",
+ "hatterene",
+ "impidimp",
+ "morgrem",
+ "grimmsnarl",
+ "obstagoon",
+ "perrserker",
+ "cursola",
+ "sirfetch'd",
+ "mr. rime",
+ "runerigus",
+ "milcery",
+ "alcremie",
+ "falinks",
+ "pincurchin",
+ "snom",
+ "frosmoth",
+ "stonjourner",
+ "eiscue",
+ "indeedee",
+ "morpeko",
+ "cufant",
+ "copperajah",
+ "dracozolt",
+ "arctozolt",
+ "dracovish",
+ "arctovish",
+ "duraludon",
+ "dreepy",
+ "drakloak",
+ "dragapult",
+ "zacian",
+ "zamazenta",
+ "eternatus",
+ "kubfu",
+ "urshifu",
+ "zarude",
+ "regieleki",
+ "regidrago",
+ "glastrier",
+ "spectrier",
+ "calyrex",
+ "wyrdeer",
+ "kleavor",
+ "ursaluna",
+ "basculegion",
+ "sneasler",
+ "overqwil",
+ "enamorus",
+ "sprigatito",
+ "floragato",
+ "meowscarada",
+ "fuecoco",
+ "crocalor",
+ "skeledirge",
+ "quaxly",
+ "quaxwell",
+ "quaquaval",
+ "lechonk",
+ "oinkologne",
+ "tarountula",
+ "spidops",
+ "nymble",
+ "lokix",
+ "pawmi",
+ "pawmo",
+ "pawmot",
+ "tandemaus",
+ "maushold",
+ "fidough",
+ "dachsbun",
+ "smoliv",
+ "dolliv",
+ "arboliva",
+ "squawkabilly",
+ "nacli",
+ "naclstack",
+ "garganacl",
+ "charcadet",
+ "armarouge",
+ "ceruledge",
+ "tadbulb",
+ "bellibolt",
+ "wattrel",
+ "kilowattrel",
+ "maschiff",
+ "mabosstiff",
+ "shroodle",
+ "grafaiai",
+ "bramblin",
+ "brambleghast",
+ "toedscool",
+ "toedscruel",
+ "klawf",
+ "capsakid",
+ "scovillain",
+ "rellor",
+ "rabsca",
+ "flittle",
+ "espathra",
+ "tinkatink",
+ "tinkatuff",
+ "tinkaton",
+ "wiglett",
+ "wugtrio",
+ "bombirdier",
+ "finizen",
+ "palafin",
+ "varoom",
+ "revavroom",
+ "cyclizar",
+ "orthworm",
+ "glimmet",
+ "glimmora",
+ "greavard",
+ "houndstone",
+ "flamigo",
+ "cetoddle",
+ "cetitan",
+ "veluza",
+ "dondozo",
+ "tatsugiri",
+ "annihilape",
+ "clodsire",
+ "farigiraf",
+ "dudunsparce",
+ "kingambit",
+ "great tusk",
+ "scream tail",
+ "brute bonnet",
+ "flutter mane",
+ "slither wing",
+ "sandy shocks",
+ "iron treads",
+ "iron bundle",
+ "iron hands",
+ "iron jugulis",
+ "iron moth",
+ "iron thorns",
+ "frigibax",
+ "arctibax",
+ "baxcalibur",
+ "gimmighoul",
+ "gholdengo",
+ "wo-chien",
+ "chien-pao",
+ "ting-lu",
+ "chi-yu",
+ "roaring moon",
+ "iron valiant",
+ "koraidon",
+ "miraidon",
+ "walking wake",
+ "iron leaves",
+ "dipplin",
+ "poltchageist",
+ "sinistcha",
+ "okidogi",
+ "munkidori",
+ "fezandipiti",
+ "ogerpon",
+ "archaludon",
+ "hydrapple",
+ "gouging fire",
+ "raging bolt",
+ "iron boulder",
+ "iron crown",
+ "terapagos",
+ "pecharunt"
+ ]
+}
diff --git a/packages/schemas/src/languages.ts b/packages/schemas/src/languages.ts
index b22698584a5a..1e2ae334667a 100644
--- a/packages/schemas/src/languages.ts
+++ b/packages/schemas/src/languages.ts
@@ -436,6 +436,7 @@ export const LanguageSchema = z.enum(
"code_yoptascript",
"code_cuda",
"kinyarwanda",
+ "pokemon_1k",
],
{
errorMap: customEnumErrorHandler("Must be a supported language"),
From 12fbad378c1af90954ce25d11eddb9d7479cdd38 Mon Sep 17 00:00:00 2001
From: Seif Soliman
Date: Sun, 22 Mar 2026 22:26:50 +0200
Subject: [PATCH 4/4] impr(input-validation): clean preset name input when
adding (@byseif21) (#7703)
`ValidatedHtmlInputElement` would reset its validation status but keep
the old text in the input field
1- go to presets
2- click edit from one of the existing ones
3- go back and click add preset
4- notice the edit one's name is there
---
frontend/src/ts/elements/input-validation.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/frontend/src/ts/elements/input-validation.ts b/frontend/src/ts/elements/input-validation.ts
index a870c322810d..940303b50263 100644
--- a/frontend/src/ts/elements/input-validation.ts
+++ b/frontend/src/ts/elements/input-validation.ts
@@ -190,6 +190,7 @@ export class ValidatedHtmlInputElement<
override setValue(val: string | null): this {
if (val === null) {
+ super.setValue("");
this.indicator.hide();
this.currentStatus = { status: "checking", success: false };
} else {