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