UNPKG

bootstrap-vue

Version:

BootstrapVue provides one of the most comprehensive implementations of Bootstrap 4 components and grid system for Vue.js and with extensive and automated WAI-ARIA accessibility markup.

106 lines (103 loc) 3.09 kB
import idMixin from '../../mixins/id'; import formOptionsMixin from '../../mixins/form-options'; import formMixin from '../../mixins/form'; import formSizeMixin from '../../mixins/form-size'; import formStateMixin from '../../mixins/form-state'; import formCustomMixin from '../../mixins/form-custom'; import bFormRadio from './form-radio'; export default { mixins: [idMixin, formMixin, formSizeMixin, formStateMixin, formCustomMixin, formOptionsMixin], components: { bFormRadio: bFormRadio }, render: function render(h) { var t = this; var $slots = t.$slots; var radios = t.formOptions.map(function (option, idx) { return h('b-form-radio', { key: 'radio_' + idx + '_opt', props: { id: t.safeId('_BV_radio_' + idx + '_opt_'), name: t.name, value: option.value, required: Boolean(t.name && t.required), disabled: option.disabled } }, [h('span', { domProps: { innerHTML: option.text } })]); }); return h('div', { class: t.groupClasses, attrs: { id: t.safeId(), role: 'radiogroup', tabindex: '-1', 'aria-required': t.required ? 'true' : null, 'aria-invalid': t.computedAriaInvalid } }, [$slots.first, radios, $slots.default]); }, data: function data() { return { localChecked: this.checked, // Flag for children is_RadioCheckGroup: true }; }, model: { prop: 'checked', event: 'input' }, props: { checked: { type: [String, Object, Number, Boolean], default: null }, validated: { // Used for applying hte `was-validated` class to the group type: Boolean, default: false }, ariaInvalid: { type: [Boolean, String], default: false }, stacked: { type: Boolean, default: false }, buttons: { // Render as button style type: Boolean, default: false }, buttonVariant: { // Only applicable when rendered with button style type: String, default: 'secondary' } }, watch: { checked: function checked(newVal, oldVal) { this.localChecked = this.checked; }, localChecked: function localChecked(newVal, oldVal) { this.$emit('input', newVal); } }, computed: { groupClasses: function groupClasses() { if (this.buttons) { return ['btn-group-toggle', this.stacked ? 'btn-group-vertical' : 'btn-group', this.size ? 'btn-group-' + this.size : '', this.validated ? 'was-validated' : '']; } return [this.sizeFormClass, this.stacked && this.custom ? 'custom-controls-stacked' : '', this.validated ? 'was-validated' : '']; }, computedAriaInvalid: function computedAriaInvalid() { if (this.ariaInvalid === true || this.ariaInvalid === 'true' || this.ariaInvalid === '') { return 'true'; } return this.get_State === false ? 'true' : null; }, get_State: function get_State() { // Required by child radios return this.computedState; } } };