import { useField } from 'vee-validate' import { computed, ref, toRef } from 'vue' import type { ComponentInternalInstance } from 'vue' interface Props { id: string label?: string disabled?: boolean modelValue?: boolean | string | number trueValue?: boolean | string | number falseValue?: boolean | string | number required?: boolean } export default (props: Props, slots: ComponentInternalInstance['slots']) => { const { checked, errorMessage, handleChange } = useField( toRef(props, 'id'), computed(() => ({ required: props.required, })), { type: 'checkbox', initialValue: props.modelValue, checkedValue: props.trueValue ?? true, uncheckedValue: props.falseValue ?? false, syncVModel: true, }, ) const focused = ref(false) const active = computed(() => !props.disabled) const invalid = computed(() => active.value && !!errorMessage.value) const hasLabel = computed(() => !!props.label || slots.default) return { focused, checked, active, invalid, hasLabel, handleChange, } }