19 lines
917 B
TypeScript
19 lines
917 B
TypeScript
import { effect, h } from '@ui-arch/frame';
|
|
import type { CheckboxProps } from './types.js';
|
|
|
|
/*** 复选框:checked 信号双向绑定,disabled 支持布尔或信号禁用,onChange 为变更回调 ***/
|
|
export function checkbox(props: CheckboxProps): HTMLElement {
|
|
const el = h('input', { type: 'checkbox', class: 'ua-checkbox', disabled: props.disabled }) as HTMLInputElement; // false/undefined 移除属性,Signal 走响应式
|
|
if (props.checked) {
|
|
const checked = props.checked;
|
|
el.addEventListener('change', () => checked(el.checked)); // 用户勾选写回信号
|
|
effect(() => {
|
|
if (el.checked !== checked()) el.checked = checked(); // 外部变化写回勾选框
|
|
});
|
|
}
|
|
if (props.onChange) el.addEventListener('change', () => props.onChange!(el.checked));
|
|
if (!props.label) return el;
|
|
const wrap = h('label', { class: 'ua-check-row' }, el, props.label);
|
|
return wrap;
|
|
}
|