import { useState } from "react"; import MemoryLink from "@/components/common/MemoryLink"; import { useBreakpoints, useDebuggerActions } from "@/stores/debuggerStore"; import { formatHex, parseHex } from "@/utils/format"; import { Stack, Group, ActionIcon, Button, Input } from "@mantine/core"; import { IconPlus, IconTrash } from "@tabler/icons-react"; type Edit = { index: number; value: string; }; function BreakpointControl(props: { disabled: boolean }) { const [edit, setEdit] = useState(null); const breakpoints = useBreakpoints(); const { removeBreak, addBreak } = useDebuggerActions(); const updateBreakpoint = (bp: number) => { if (!edit) return; const parsed = parseHex(edit.value); if (!Number.isNaN(parsed)) { removeBreak(bp); addBreak(parsed); setEdit(null); } }; return ( {breakpoints.size > 0 && ( {Array.from(breakpoints.values()).map((bp, i) => ( setEdit({ index: i, value: e.currentTarget.value }) } onFocus={() => setEdit({ index: i, value: formatHex(bp) })} onBlur={() => updateBreakpoint(bp)} onKeyDown={(e) => e.code === "Enter" && e.currentTarget.blur()} error={edit?.index === i && Number.isNaN(parseHex(edit.value))} flex={1} disabled={props.disabled} /> removeBreak(bp)} disabled={props.disabled} > ))} )} ); } export default BreakpointControl;