"use client" import { cn } from "@/lib/utils" import type { Mode } from "@/components/logic" interface SettingsPanelProps { mode: Mode totalTasks: number pickCount: number rounds: number allowRepeat: boolean singleAllowRepeat: boolean selectedRecords: { number: number; colorIndex: number }[] onModeChange: (v: Mode) => void onTotalTasksChange: (v: number) => void onPickCountChange: (v: number) => void onRoundsChange: (v: number) => void onAllowRepeatChange: (v: boolean) => void onSingleAllowRepeatChange: (v: boolean) => void onRoll: () => void onReset: () => void isRolling: boolean errorMsg: string } function FieldRow({ label, hint, value, onChange, min = 1, }: { label: string hint: string value: number onChange: (v: number) => void min?: number }) { return (
{label}
{hint}
{ const v = parseInt(e.target.value, 10) if (!isNaN(v) && v >= min) onChange(v) }} className={cn( "w-12 h-7 text-center text-sm font-mono text-[#16191f] bg-[#f7f8fa]", "border-x border-[#e2e6ea]", "focus:outline-none focus:bg-[#ffffff]", "[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none" )} />
) } export function SettingsPanel({ mode, totalTasks, pickCount, rounds, allowRepeat, singleAllowRepeat, selectedRecords, onModeChange, onTotalTasksChange, onPickCountChange, onRoundsChange, onAllowRepeatChange, onSingleAllowRepeatChange, onRoll, onReset, isRolling, errorMsg, }: SettingsPanelProps) { const repeatDisabled = rounds < 2 const isSingleMode = mode === "single" return (
{/* Mode selector */}
{/* Section label */}
CONFIG
{/* Fields */}
{!isSingleMode && ( <>
)}
{/* Single mode: Allow repeat toggle */} {isSingleMode && ( )} {/* Group mode only: Toggle */} {!isSingleMode && ( <> {/* Toggle */} )} {/* Error */} {errorMsg && (
ERR: {errorMsg}
)} {/* Action buttons */}
{/* Single mode: Roll button */} {isSingleMode && ( )} {/* Single mode: Reset button */} {isSingleMode && selectedRecords.length > 0 && ( )} {/* Multi mode: Execute button */} {!isSingleMode && ( )}
) }