vuetify
Version:
Vue Material Component Framework
66 lines (65 loc) • 2.02 kB
JavaScript
import { createVNode as _createVNode, mergeProps as _mergeProps, resolveDirective as _resolveDirective } from "vue";
// Styles
import "./VCheckbox.css";
// Components
import { filterInputProps, makeVInputProps, VInput } from "../VInput/VInput.mjs";
import { filterCheckboxBtnProps, makeVCheckboxBtnProps, VCheckboxBtn } from "./VCheckboxBtn.mjs"; // Composables
import { useFocus } from "../../composables/focus.mjs"; // Utilities
import { computed } from 'vue';
import { filterInputAttrs, genericComponent, getUid, useRender } from "../../util/index.mjs"; // Types
export const VCheckbox = genericComponent()({
name: 'VCheckbox',
inheritAttrs: false,
props: {
...makeVInputProps(),
...makeVCheckboxBtnProps()
},
emits: {
'update:focused': focused => true
},
setup(props, _ref) {
let {
attrs,
slots
} = _ref;
const {
isFocused,
focus,
blur
} = useFocus(props);
const uid = getUid();
const id = computed(() => props.id || `checkbox-${uid}`);
useRender(() => {
const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
const [inputProps, _1] = filterInputProps(props);
const [checkboxProps, _2] = filterCheckboxBtnProps(props);
return _createVNode(VInput, _mergeProps({
"class": "v-checkbox"
}, inputAttrs, inputProps, {
"id": id.value,
"focused": isFocused.value
}), {
...slots,
default: _ref2 => {
let {
id,
messagesId,
isDisabled,
isReadonly
} = _ref2;
return _createVNode(VCheckboxBtn, _mergeProps(checkboxProps, {
"id": id.value,
"aria-describedby": messagesId.value,
"disabled": isDisabled.value,
"readonly": isReadonly.value
}, controlAttrs, {
"onFocus": focus,
"onBlur": blur
}), slots);
}
});
});
return {};
}
});
//# sourceMappingURL=VCheckbox.mjs.map