One-tap grids everywhere, hideable translation/hints, cleaner top and bottom bars
- Possessives, pronouns, and Kontraktionen switch from typed input to the same 4-choice tap grid as articles. Possessive choices all share the question's stem; pronoun choices lead with the pronoun's own case forms. - The translation line is hideable everywhere (shows by default, hidden state persists like the other hints, revealed again on a wrong answer). The possessive and pronoun hint lines get hide toggles too. - Header: Charts moves out; One-tap becomes a pill — plain grey when off, green outlined when on. More margin below the header across the board. - Bottom bar: progress dots centered with 'n/10 · level name' underneath, outlined Charts button (capital C) pinned bottom-right. - Touch devices hide the 1-4/enter/esc keyboard chips; answer buttons keep their full size via min-heights so tap targets stay big.
This commit is contained in:
@@ -269,6 +269,23 @@ describe('pronoun questions', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('one-tap choices on every question type', () => {
|
||||
it.each([11, 12, 13, 14, 15, 16, 17, 19])('level %s: 4 unique choices containing the answer', (id) => {
|
||||
for (const q of runSession(id, 200)) {
|
||||
expect(q.choices.length).toBe(4);
|
||||
expect(new Set(q.choices).size).toBe(4);
|
||||
expect(q.choices).toContain(q.ans);
|
||||
}
|
||||
});
|
||||
|
||||
it('possessive choices all share the question stem', () => {
|
||||
for (const q of runSession(13, 200)) {
|
||||
const root = q.stem === 'euer' ? 'eu' : q.stem;
|
||||
for (const c of q.choices) expect(c.startsWith(root), `${c} should be a form of ${q.stem}`).toBe(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ── Nominative is never tested ──────────────────────────────
|
||||
|
||||
describe('no nominative anywhere', () => {
|
||||
|
||||
Reference in New Issue
Block a user