var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } // Styles import '../../../src/stylus/components/_radios.styl'; // Components import VIcon from '../VIcon'; import VLabel from '../VLabel'; // Mixins import Colorable from '../../mixins/colorable'; import Rippleable from '../../mixins/rippleable'; import Themeable from '../../mixins/themeable'; import Selectable from '../../mixins/selectable'; import { inject as RegistrableInject } from '../../mixins/registrable'; /* @vue/component */ export default { name: 'v-radio', mixins: [Colorable, Rippleable, RegistrableInject('radio', 'v-radio', 'v-radio-group'), Themeable], inheritAttrs: false, props: { color: { type: String, default: 'accent' }, disabled: Boolean, label: String, onIcon: { type: String, default: '$vuetify.icons.radioOn' }, offIcon: { type: String, default: '$vuetify.icons.radioOff' }, readonly: Boolean, value: null }, data: function data() { return { isActive: false, isFocused: false, parentError: false }; }, computed: { computedData: function computedData() { return this.setTextColor(!this.parentError && this.isActive && this.color, { staticClass: 'v-radio', 'class': _extends({ 'v-radio--is-disabled': this.isDisabled, 'v-radio--is-focused': this.isFocused }, this.themeClasses) }); }, computedColor: function computedColor() { return this.isActive ? this.color : this.radio.validationState || false; }, computedIcon: function computedIcon() { return this.isActive ? this.onIcon : this.offIcon; }, hasState: function hasState() { return this.isActive || !!this.radio.validationState; }, isDisabled: function isDisabled() { return this.disabled || !!this.radio.disabled; }, isReadonly: function isReadonly() { return this.readonly || !!this.radio.readonly; } }, mounted: function mounted() { this.radio.register(this); }, beforeDestroy: function beforeDestroy() { this.radio.unregister(this); }, methods: { genInput: function genInput() { var _Selectable$options$m; for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } // We can't actually use the mixin directly because // it's made for standalone components, but its // genInput method is exactly what we need return (_Selectable$options$m = Selectable.options.methods.genInput).call.apply(_Selectable$options$m, [this].concat(_toConsumableArray(args))); }, genLabel: function genLabel() { return this.$createElement(VLabel, { on: { click: this.onChange }, attrs: { for: this.id }, props: { color: this.radio.validationState || '', dark: this.dark, focused: this.hasState, light: this.light } }, this.$slots.label || this.label); }, genRadio: function genRadio() { return this.$createElement('div', { staticClass: 'v-input--selection-controls__input' }, [this.genInput('radio', _extends({ name: this.radio.name || (this.radio._uid ? 'v-radio-' + this.radio._uid : false), value: this.value }, this.$attrs)), this.genRipple(this.setTextColor(this.computedColor)), this.$createElement(VIcon, this.setTextColor(this.computedColor, { props: { dark: this.dark, light: this.light } }), this.computedIcon)]); }, onFocus: function onFocus(e) { this.isFocused = true; this.$emit('focus', e); }, onBlur: function onBlur(e) { this.isFocused = false; this.$emit('blur', e); }, onChange: function onChange() { if (this.isDisabled || this.isReadonly) return; if (!this.isDisabled && (!this.isActive || !this.radio.mandatory)) { this.$emit('change', this.value); } }, onKeydown: function onKeydown() {} }, render: function render(h) { return h('div', this.computedData, [this.genRadio(), this.genLabel()]); } }; //# sourceMappingURL=VRadio.js.map