57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
// Mixins
|
|
import { factory as GroupableFactory } from '../../mixins/groupable'
|
|
|
|
// Utilities
|
|
import mixins from '../../util/mixins'
|
|
import { consoleWarn } from '../../util/console'
|
|
|
|
// Types
|
|
import { VNode, ScopedSlotChildren } from 'vue/types/vnode'
|
|
|
|
export default mixins(
|
|
GroupableFactory('itemGroup', 'v-item', 'v-item-group')
|
|
/* @vue/component */
|
|
).extend({
|
|
name: 'v-item',
|
|
|
|
props: {
|
|
value: {
|
|
required: false
|
|
}
|
|
},
|
|
|
|
render (): VNode {
|
|
if (!this.$scopedSlots.default) {
|
|
consoleWarn('v-item is missing a default scopedSlot', this)
|
|
|
|
return null as any
|
|
}
|
|
|
|
let element: VNode | ScopedSlotChildren
|
|
|
|
/* istanbul ignore else */
|
|
if (this.$scopedSlots.default) {
|
|
element = this.$scopedSlots.default({
|
|
active: this.isActive,
|
|
toggle: this.toggle
|
|
})
|
|
}
|
|
|
|
if (Array.isArray(element) && element.length === 1) {
|
|
element = element[0]
|
|
}
|
|
|
|
if (!element || Array.isArray(element) || !element.tag) {
|
|
consoleWarn('v-item should only contain a single element', this)
|
|
|
|
return element as any
|
|
}
|
|
|
|
element.data = this._b(element.data || {}, element.tag!, {
|
|
class: { [this.activeClass]: this.isActive }
|
|
})
|
|
|
|
return element
|
|
}
|
|
})
|