Sentence Trainer
{#each masteryThresholds as [, , title], i}
{/each}
{#each masteryThresholds as _, i}
{/each}
{#each sentenceWords as _, i}
{#if i !== sentenceWords.length - 1}
{@const word = sentenceWords.slice(i, i + 2).join(" ")}
{@const mastery = wordMastery.get(word) ?? 0}
{/if}
{/each}
{#each sentenceWords as word, i}
{@const mastery = wordMastery.get(word)}
{word}
{/each}
{#each sentenceWords as _, i}
{#if i < sentenceWords.length - 2}
{@const word = sentenceWords.slice(i, i + 3).join(" ")}
{@const mastery = wordMastery.get(word) ?? 0}
{/if}
{/each}
{#if level === masteryThresholds.length}
{@const maxDigits = 4}
{@const indices = Array.from({ length: maxDigits }, (_, i) => i)}
{@const wpmString = Math.floor(bestWPM).toString().padStart(maxDigits, " ")}
{#each indices as i}
{@const char = wpmString[i]}
{#key char}
{char}
{/key}
{/each}
WPM
{#key wpm}
{Math.floor(wpm)}
{/key}
WPM
{/if}
{#if devTools}
Dev Tools
| Total |
{Math.round(totalMs)}ms
|
| Char |
{Math.round(msPerChar)}ms
|
| Word |
{Math.round(msPerWord)}ms
|
{#each wordStats.entries() as [word, stats]}
{@const mastery = wordMastery.get(word) ?? 0}
| {word} |
{Math.round(mastery * 100)}%
|
{#each stats as stat}
{stat} |
{/each}
{/each}
{/if}