Vulture/VApp/node_modules/vuetify/lib/components/VToolbar/VToolbar.mjs

164 lines
5.7 KiB
JavaScript

import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
// Styles
import "./VToolbar.css";
// Components
import { VToolbarTitle } from "./VToolbarTitle.mjs";
import { VExpandTransition } from "../transitions/index.mjs";
import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
import { VImg } from "../VImg/index.mjs"; // Composables
import { makeBorderProps, useBorder } from "../../composables/border.mjs";
import { useBackgroundColor } from "../../composables/color.mjs";
import { makeComponentProps } from "../../composables/component.mjs";
import { provideDefaults } from "../../composables/defaults.mjs";
import { makeElevationProps, useElevation } from "../../composables/elevation.mjs";
import { useRtl } from "../../composables/locale.mjs";
import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
import { makeTagProps } from "../../composables/tag.mjs";
import { makeThemeProps, provideTheme } from "../../composables/theme.mjs"; // Utilities
import { computed, shallowRef, toRef } from 'vue';
import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
const allowedDensities = [null, 'prominent', 'default', 'comfortable', 'compact'];
export const makeVToolbarProps = propsFactory({
absolute: Boolean,
collapse: Boolean,
color: String,
density: {
type: String,
default: 'default',
validator: v => allowedDensities.includes(v)
},
extended: Boolean,
extensionHeight: {
type: [Number, String],
default: 48
},
flat: Boolean,
floating: Boolean,
height: {
type: [Number, String],
default: 64
},
image: String,
title: String,
...makeBorderProps(),
...makeComponentProps(),
...makeElevationProps(),
...makeRoundedProps(),
...makeTagProps({
tag: 'header'
}),
...makeThemeProps()
}, 'VToolbar');
export const VToolbar = genericComponent()({
name: 'VToolbar',
props: makeVToolbarProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
backgroundColorClasses,
backgroundColorStyles
} = useBackgroundColor(toRef(props, 'color'));
const {
borderClasses
} = useBorder(props);
const {
elevationClasses
} = useElevation(props);
const {
roundedClasses
} = useRounded(props);
const {
themeClasses
} = provideTheme(props);
const {
rtlClasses
} = useRtl();
const isExtended = shallowRef(!!(props.extended || slots.extension?.()));
const contentHeight = computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));
const extensionHeight = computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === 'prominent' ? Number(props.extensionHeight) : 0) - (props.density === 'comfortable' ? 4 : 0) - (props.density === 'compact' ? 8 : 0), 10) : 0);
provideDefaults({
VBtn: {
variant: 'text'
}
});
useRender(() => {
const hasTitle = !!(props.title || slots.title);
const hasImage = !!(slots.image || props.image);
const extension = slots.extension?.();
isExtended.value = !!(props.extended || extension);
return _createVNode(props.tag, {
"class": ['v-toolbar', {
'v-toolbar--absolute': props.absolute,
'v-toolbar--collapse': props.collapse,
'v-toolbar--flat': props.flat,
'v-toolbar--floating': props.floating,
[`v-toolbar--density-${props.density}`]: true
}, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, rtlClasses.value, props.class],
"style": [backgroundColorStyles.value, props.style]
}, {
default: () => [hasImage && _createVNode("div", {
"key": "image",
"class": "v-toolbar__image"
}, [!slots.image ? _createVNode(VImg, {
"key": "image-img",
"cover": true,
"src": props.image
}, null) : _createVNode(VDefaultsProvider, {
"key": "image-defaults",
"disabled": !props.image,
"defaults": {
VImg: {
cover: true,
src: props.image
}
}
}, slots.image)]), _createVNode(VDefaultsProvider, {
"defaults": {
VTabs: {
height: convertToUnit(contentHeight.value)
}
}
}, {
default: () => [_createVNode("div", {
"class": "v-toolbar__content",
"style": {
height: convertToUnit(contentHeight.value)
}
}, [slots.prepend && _createVNode("div", {
"class": "v-toolbar__prepend"
}, [slots.prepend?.()]), hasTitle && _createVNode(VToolbarTitle, {
"key": "title",
"text": props.title
}, {
text: slots.title
}), slots.default?.(), slots.append && _createVNode("div", {
"class": "v-toolbar__append"
}, [slots.append?.()])])]
}), _createVNode(VDefaultsProvider, {
"defaults": {
VTabs: {
height: convertToUnit(extensionHeight.value)
}
}
}, {
default: () => [_createVNode(VExpandTransition, null, {
default: () => [isExtended.value && _createVNode("div", {
"class": "v-toolbar__extension",
"style": {
height: convertToUnit(extensionHeight.value)
}
}, [extension])]
})]
})]
});
});
return {
contentHeight,
extensionHeight
};
}
});
//# sourceMappingURL=VToolbar.mjs.map