class CheckButton { readonly input: HTMLInputElement; readonly label: HTMLLabelElement; constructor(input: HTMLInputElement, label?: HTMLLabelElement) { this.input = input; this.label = label ?? input.labels![0]; this.input.addEventListener('input', () => { this.checked = this.input.checked; }); } static fromId(id: string) { return new CheckButton(document.getElementById(id) as HTMLInputElement); } get enabled() { return !this.input.disabled; } set enabled(value: boolean) { this.input.disabled = !value; if (value) this.label.classList.remove('disabled'); else this.label.classList.add('disabled'); } get checked() { return this.input.checked; } set checked(value: boolean) { this.input.checked = value; if (this.input.checked) this.label.classList.add('checked'); else this.label.classList.remove('checked'); } }