// Страница «Колоды»: плоский список — только название + количество states.
// Раскрытия по нажатию нет: тап переходит на страницу колоды, где все данные.
import { getDecks, getDeckStateCounts } from './db-types.ts';
import type { Deck } from './db-types.ts';
import { hasDatabaseFile } from './opfs.ts';
export type DecksNav = {
goDeck: (deckId: number) => void;
goReview: (deckId: number) => void;
};
function escapeHtml(s: string): string {
return s
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
function plural(n: number): string {
const m10 = n % 10;
const m100 = n % 100;
if (m10 === 1 && m100 !== 11) return 'запись';
if (m10 >= 2 && m10 <= 4 && (m100 < 12 || m100 > 14)) return 'записи';
return 'записей';
}
// Одна колода — плоская строка: имя + количество слева, «▶» справа.
// Тап по имени — на страницу колоды, тап по «▶» — сразу в повторение.
function deckRowHtml(d: Deck, count: number): string {
const name = escapeHtml(d.name) || `Колода #${d.id}`;
return `