framework7-vue
Version:
Build full featured iOS & Android apps using Framework7 & Vue
55 lines • 1.7 kB
JavaScript
import { createElementVNode as _createElementVNode, renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
const _hoisted_1 = ["name", "value", "disabled", "readonly", "checked"];
function render(_ctx, _cache) {
return _openBlock(), _createElementBlock("label", {
class: _normalizeClass(_ctx.classes)
}, [_createElementVNode("input", {
ref: "inputElRef",
type: "radio",
name: _ctx.name,
value: _ctx.value,
disabled: _ctx.disabled,
readonly: _ctx.readonly,
checked: _ctx.checked,
onChange: _cache[0] || (_cache[0] = (...args) => _ctx.onChange && _ctx.onChange(...args))
}, null, 40, _hoisted_1), _cache[1] || (_cache[1] = _createElementVNode("i", {
class: "icon-radio"
}, null, -1)), _renderSlot(_ctx.$slots, "default")], 2);
}
import { ref, computed } from 'vue';
import { classNames } from '../shared/utils.js';
import { colorClasses, colorProps } from '../shared/mixins.js';
export default {
name: 'f7-radio',
render,
props: {
checked: Boolean,
name: [Number, String],
value: {
type: [Number, String, Boolean],
default: undefined
},
disabled: Boolean,
readonly: Boolean,
...colorProps
},
emits: ['update:checked', 'change'],
setup(props, {
emit
}) {
const inputElRef = ref(null);
const onChange = event => {
emit('update:checked', event.target.checked);
emit('change', event);
};
const classes = computed(() => classNames({
radio: true,
disabled: props.disabled
}, colorClasses(props)));
return {
inputElRef,
classes,
onChange
};
}
};