UNPKG

quasar

Version:

Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time

114 lines (92 loc) 2.74 kB
import { h, computed, inject } from 'vue' import QIcon from '../icon/QIcon.js' import { createComponent } from '../../utils/private/create.js' import { hSlot, hUniqueSlot } from '../../utils/private/render.js' import { timelineKey, emptyRenderFn } from '../../utils/private/symbols.js' export default createComponent({ name: 'QTimelineEntry', props: { heading: Boolean, tag: { type: String, default: 'h3' }, side: { type: String, default: 'right', validator: v => [ 'left', 'right' ].includes(v) }, icon: String, avatar: String, color: String, title: String, subtitle: String, body: String }, setup (props, { slots }) { const $timeline = inject(timelineKey, emptyRenderFn) if ($timeline === emptyRenderFn) { console.error('QTimelineEntry needs to be child of QTimeline') return emptyRenderFn } const classes = computed(() => `q-timeline__entry q-timeline__entry--${ props.side }` + (props.icon !== void 0 || props.avatar !== void 0 ? ' q-timeline__entry--icon' : '') ) const dotClass = computed(() => `q-timeline__dot text-${ props.color || $timeline.color }` ) const reverse = computed(() => $timeline.layout === 'comfortable' && $timeline.side === 'left' ) return () => { const child = hUniqueSlot(slots.default, []) if (props.body !== void 0) { child.unshift(props.body) } if (props.heading === true) { const content = [ h('div'), h('div'), h( props.tag, { class: 'q-timeline__heading-title' }, child ) ] return h('div', { class: 'q-timeline__heading' }, reverse.value === true ? content.reverse() : content) } let dot if (props.icon !== void 0) { dot = [ h(QIcon, { class: 'row items-center justify-center', name: props.icon }) ] } else if (props.avatar !== void 0) { dot = [ h('img', { class: 'q-timeline__dot-img', src: props.avatar }) ] } const content = [ h('div', { class: 'q-timeline__subtitle' }, [ h('span', {}, hSlot(slots.subtitle, [ props.subtitle ])) ]), h('div', { class: dotClass.value }, dot), h('div', { class: 'q-timeline__content' }, [ h('h6', { class: 'q-timeline__title' }, hSlot(slots.title, [ props.title ])) ].concat(child)) ] return h('li', { class: classes.value }, reverse.value === true ? content.reverse() : content) } } })