export interface Row { key: unknown; /** この行の DOM 要素(差し替わることがあるので変更可能)。 */ node: Element; /** 行の購読・リスナを解放する。 */ dispose(): void; } export interface ReconcileInput { parent: Element; /** 表示したい順に並んだキー。 */ keys: unknown[]; /** 前回の状態(キー → 行)。 */ existing: Map; /** 新しい行を作る。 */ create(key: unknown, index: number): R; /** 既存の行を今回の値で更新する。 */ update(row: R, index: number): void; } /** * 差分を当てて、新しい (キー → 行) を返す。 * * ・キーが残っていれば → その DOM をそのまま使い、中身だけ更新する * ・キーが増えていれば → 新しく作る * ・キーが消えていれば → 片付けて DOM から外す * ・順番が違えば → 必要な分だけ insertBefore で動かす */ export declare function reconcile(input: ReconcileInput): Map; /** * キーの重複を調べる。 * 重複していると「同じ行が2つある」状態になり、更新のたびに片方が消えるなど * 説明のつかない挙動になる。踏んだ瞬間に気づけるよう呼び出し側で警告する。 */ export declare function findDuplicateKey(keys: unknown[]): unknown | null;