import { $el } from "../ui.js"; /** * @typedef { { text: string, value?: string, tooltip?: string } } ToggleSwitchItem */ /** * Creates a toggle switch element * @param { string } name * @param { Array void } [opts.onChange] */ export function toggleSwitch(name, items, { onChange } = {}) { let selectedIndex; let elements; function updateSelected(index) { if (selectedIndex != null) { elements[selectedIndex].classList.remove("comfy-toggle-selected"); } onChange?.({ item: items[index], prev: selectedIndex == null ? undefined : items[selectedIndex] }); selectedIndex = index; elements[selectedIndex].classList.add("comfy-toggle-selected"); } elements = items.map((item, i) => { if (typeof item === "string") item = { text: item }; if (!item.value) item.value = item.text; const toggle = $el( "label", { textContent: item.text, title: item.tooltip ?? "", }, $el("input", { name, type: "radio", value: item.value ?? item.text, checked: item.selected, onchange: () => { updateSelected(i); }, }) ); if (item.selected) { updateSelected(i); } return toggle; }); const container = $el("div.comfy-toggle-switch", elements); if (selectedIndex == null) { elements[0].children[0].checked = true; updateSelected(0); } return container; }