vuetify
Version:
Vue Material Component Framework
108 lines (105 loc) • 3.48 kB
JavaScript
import { mergeProps as _mergeProps, resolveDirective as _resolveDirective, Fragment as _Fragment, createVNode as _createVNode } from "vue";
// Styles
import "./VBreadcrumbs.css";
// Components
import { VBreadcrumbsDivider } from "./VBreadcrumbsDivider.mjs";
import { VBreadcrumbsItem } from "./VBreadcrumbsItem.mjs";
import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
import { VIcon } from "../VIcon/index.mjs"; // Composables
import { IconValue } from "../../composables/icons.mjs";
import { makeDensityProps, useDensity } from "../../composables/density.mjs";
import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
import { makeTagProps } from "../../composables/tag.mjs";
import { provideDefaults } from "../../composables/defaults.mjs";
import { useBackgroundColor } from "../../composables/color.mjs"; // Utilities
import { genericComponent, useRender } from "../../util/index.mjs";
import { toRef } from 'vue';
// Types
export const VBreadcrumbs = genericComponent()({
name: 'VBreadcrumbs',
props: {
activeClass: String,
activeColor: String,
bgColor: String,
color: String,
disabled: Boolean,
divider: {
type: String,
default: '/'
},
icon: IconValue,
items: {
type: Array,
default: () => []
},
...makeDensityProps(),
...makeRoundedProps(),
...makeTagProps({
tag: 'ul'
})
},
setup(props, _ref) {
let {
slots
} = _ref;
const {
backgroundColorClasses,
backgroundColorStyles
} = useBackgroundColor(toRef(props, 'bgColor'));
const {
densityClasses
} = useDensity(props);
const {
roundedClasses
} = useRounded(props);
provideDefaults({
VBreadcrumbsDivider: {
divider: toRef(props, 'divider')
},
VBreadcrumbsItem: {
activeClass: toRef(props, 'activeClass'),
activeColor: toRef(props, 'activeColor'),
color: toRef(props, 'color'),
disabled: toRef(props, 'disabled')
}
});
useRender(() => {
const hasPrepend = !!(slots.prepend || props.icon);
return _createVNode(props.tag, {
"class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
"style": backgroundColorStyles.value
}, {
default: () => [hasPrepend && _createVNode(VDefaultsProvider, {
"key": "prepend",
"defaults": {
VIcon: {
icon: props.icon,
start: true
}
}
}, {
default: () => [_createVNode("div", {
"class": "v-breadcrumbs__prepend"
}, [slots.prepend ? slots.prepend() : props.icon && _createVNode(VIcon, null, null)])]
}), props.items.map((item, index, array) => _createVNode(_Fragment, null, [_createVNode(VBreadcrumbsItem, _mergeProps({
"key": index,
"disabled": index >= array.length - 1
}, typeof item === 'string' ? {
title: item
} : item), {
default: slots.title ? () => slots.title?.({
item,
index
}) : undefined
}), index < array.length - 1 && _createVNode(VBreadcrumbsDivider, null, {
default: slots.divider ? () => slots.divider?.({
item,
index
}) : undefined
})])), slots.default?.()]
});
});
return {};
}
});
//# sourceMappingURL=VBreadcrumbs.mjs.map