/** * Renderer for `type: "boolean"` rows. Enter / Space toggles between * `on` and `off`; the value is committed immediately. */ import { matchesKey } from "@earendil-works/pi-tui"; import type { BooleanField, FieldRenderer } from "../types.ts"; export const booleanRenderer: FieldRenderer = { type: "boolean", renderValue(row, { selected, ctx }) { const text = row.value ? "on" : "off"; return ctx.theme.fg(selected ? "accent" : row.value ? "success" : "muted", text); }, hints(row) { if (row.field.disabled) return []; return [{ key: "enter/space", label: row.value ? "turn off" : "turn on" }]; }, handleKey(row, data) { if (row.field.disabled) return {}; if (matchesKey(data, "enter") || matchesKey(data, "return") || data === " ") { return { consumed: true, commit: !row.value }; } return {}; }, };