./knowledge-base/frontend/src/components/EraSelector.tsx
/**
* EraSelector - 時代選択コンポーネント(シンプル版)
*
* 9つの固定時代ラベルからチェックボックスで複数選択する。
*
* Props:
* - value: 選択済みラベル配列(controlled)
* - onChange: 変更時コールバック
* - disabled: true のときグレーダウンして操作不可(自動設定モード等)
*/
import { Box, FormControlLabel, Checkbox, Typography } from "@mui/material";
import { ERA_LABELS } from "../utils/eraUtils";
interface EraSelectorProps {
value: string[];
onChange: (labels: string[]) => void;
disabled?: boolean;
}
export function EraSelector({
value,
onChange,
disabled = false,
}: EraSelectorProps) {
const handleChange = (label: string, checked: boolean) => {
if (checked) {
onChange([...value, label]);
} else {
onChange(value.filter((l) => l !== label));
}
};
return (
<Box
sx={{
opacity: disabled ? 0.45 : 1,
pointerEvents: disabled ? "none" : "auto",
transition: "opacity 0.2s",
display: "flex",
flexWrap: "wrap",
gap: 0,
}}
>
{ERA_LABELS.map((label) => (
<FormControlLabel
key={label}
control={
<Checkbox
size="small"
checked={value.includes(label)}
onChange={(e) => handleChange(label, e.target.checked)}
/>
}
label={<Typography variant="body2">{label}</Typography>}
sx={{ width: "50%", m: 0 }}
/>
))}
</Box>
);
}