UNPKG

quasar

Version:

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

64 lines (51 loc) 1.86 kB
import { h, computed, inject, getCurrentInstance } from 'vue' import { createComponent } from '../../utils/private/create.js' import { hSlot } from '../../utils/private/render.js' import { pageContainerKey, layoutKey, emptyRenderFn } from '../../utils/private/symbols.js' export default createComponent({ name: 'QPage', props: { padding: Boolean, styleFn: Function }, setup (props, { slots }) { const { proxy: { $q } } = getCurrentInstance() const $layout = inject(layoutKey, emptyRenderFn) if ($layout === emptyRenderFn) { console.error('QPage needs to be a deep child of QLayout') return emptyRenderFn } const $pageContainer = inject(pageContainerKey, emptyRenderFn) if ($pageContainer === emptyRenderFn) { console.error('QPage needs to be child of QPageContainer') return emptyRenderFn } const style = computed(() => { const offset = ($layout.header.space === true ? $layout.header.size : 0) + ($layout.footer.space === true ? $layout.footer.size : 0) if (typeof props.styleFn === 'function') { const height = $layout.isContainer.value === true ? $layout.containerHeight.value : $q.screen.height return props.styleFn(offset, height) } return { minHeight: $layout.isContainer.value === true ? ($layout.containerHeight.value - offset) + 'px' : ( $q.screen.height === 0 ? (offset !== 0 ? `calc(100vh - ${ offset }px)` : '100vh') : ($q.screen.height - offset) + 'px' ) } }) const classes = computed(() => `q-page${ props.padding === true ? ' q-layout-padding' : '' }` ) return () => h('main', { class: classes.value, style: style.value }, hSlot(slots.default)) } })