/**
* モーダル共通の純粋関数(指示書AY 段階9-2。M2)。
* React / DOM を import しない。画面部品はここから読む。
*/
/**
* 背景のクリックで閉じてよいか。
* ★押した(mousedown)のも離した(click)のも背景そのもののときだけ★閉じる。
* 入力の中で文字を選び、背景の上で離したときに閉じないため。
*/
export function shouldCloseOnBackdrop(downOnOverlay: boolean, clickOnOverlay: boolean): boolean {
return downOnOverlay && clickOnOverlay;
}
/**
* Tab でフォーカスを窓の中に閉じ込める。
* `count` は押した時点のフォーカスできる要素の数、`activeIndex` は今のフォーカスの位置(窓の外なら -1)。
* 戻り値はフォーカスを移す位置。null はブラウザの既定の移動に任せる。
*/
export function trapFocusIndex(count: number, activeIndex: number, backward: boolean): number | null {
if (count <= 0) return null;
const last = count - 1;
if (backward) return activeIndex <= 0 || activeIndex > last ? last : null;
return activeIndex < 0 || activeIndex >= last ? 0 : null;
}