custom-bootstrap-vue
Version:
Custom version of bootstrap-vue created for providing specific theme to a particular project
66 lines (58 loc) • 1.57 kB
JavaScript
import Vue from '../../utils/vue'
import { mergeData } from 'vue-functional-data-merge'
import { normalizeSlot } from '../../utils/normalize-slot'
import { BMediaBody } from './media-body'
import { BMediaAside } from './media-aside'
export const props = {
tag: {
type: String,
default: 'div'
},
rightAlign: {
type: Boolean,
default: false
},
verticalAlign: {
type: String,
default: 'top'
},
noBody: {
type: Boolean,
default: false
}
}
// @vue/component
export const BMedia = /*#__PURE__*/ Vue.extend({
name: 'BMedia',
functional: true,
props,
render(h, { props, data, slots, scopedSlots, children }) {
const childNodes = props.noBody ? children : []
if (!props.noBody) {
const $slots = slots()
const $scopedSlots = scopedSlots || {}
const $aside = normalizeSlot('aside', {}, $scopedSlots, $slots)
const $default = normalizeSlot('default', {}, $scopedSlots, $slots)
if ($aside && !props.rightAlign) {
childNodes.push(
h(
BMediaAside,
{ staticClass: 'mr-3', props: { verticalAlign: props.verticalAlign } },
$aside
)
)
}
childNodes.push(h(BMediaBody, $default))
if ($aside && props.rightAlign) {
childNodes.push(
h(
BMediaAside,
{ staticClass: 'ml-3', props: { verticalAlign: props.verticalAlign } },
$aside
)
)
}
}
return h(props.tag, mergeData(data, { staticClass: 'media' }), childNodes)
}
})