/** * Common part of Checkbox & Radio */ import Icon from '../icon'; import { FieldMixin } from './field'; import { ChildrenMixin } from './relation'; import { addUnit } from '../utils'; export const CheckboxMixin = ({ parent, bem, role }) => ({ mixins: [ChildrenMixin(parent), FieldMixin], props: { name: null, value: null, disabled: Boolean, iconSize: [Number, String], checkedColor: String, labelPosition: String, labelDisabled: Boolean, shape: { type: String, default: 'round', }, bindGroup: { type: Boolean, default: true, }, }, computed: { disableBindRelation() { return !this.bindGroup; }, isDisabled() { return (this.parent && this.parent.disabled) || this.disabled; }, iconStyle() { const checkedColor = this.checkedColor || (this.parent && this.parent.checkedColor); if (checkedColor && this.checked && !this.isDisabled) { return { borderColor: checkedColor, backgroundColor: checkedColor, }; } }, tabindex() { if (this.isDisabled || (role === 'radio' && !this.checked)) { return -1; } return 0; }, }, methods: { onClick(event) { const { target } = event; const { icon } = this.$refs; const iconClicked = icon === target || icon.contains(target); if (!this.isDisabled && (iconClicked || !this.labelDisabled)) { this.toggle(); } this.$emit('click', event); }, genIcon() { const { checked } = this; const iconSize = this.iconSize || (this.parent && this.parent.iconSize); return (