123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- 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
|