vuetify
Version:
Vue Material Component Framework
72 lines (71 loc) • 2.57 kB
JavaScript
import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from "vue";
// Styles
import "./VDivider.css";
// Composables
import { useTextColor } from "../../composables/color.js";
import { makeComponentProps } from "../../composables/component.js";
import { makeThemeProps, provideTheme } from "../../composables/theme.js"; // Utilities
import { computed } from 'vue';
import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.js";
export const makeVDividerProps = propsFactory({
color: String,
inset: Boolean,
length: [Number, String],
opacity: [Number, String],
thickness: [Number, String],
vertical: Boolean,
...makeComponentProps(),
...makeThemeProps()
}, 'VDivider');
export const VDivider = genericComponent()({
name: 'VDivider',
props: makeVDividerProps(),
setup(props, _ref) {
let {
attrs,
slots
} = _ref;
const {
themeClasses
} = provideTheme(props);
const {
textColorClasses,
textColorStyles
} = useTextColor(() => props.color);
const dividerStyles = computed(() => {
const styles = {};
if (props.length) {
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
}
if (props.thickness) {
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
}
return styles;
});
useRender(() => {
const divider = _createElementVNode("hr", {
"class": _normalizeClass([{
'v-divider': true,
'v-divider--inset': props.inset,
'v-divider--vertical': props.vertical
}, themeClasses.value, textColorClasses.value, props.class]),
"style": _normalizeStyle([dividerStyles.value, textColorStyles.value, {
'--v-border-opacity': props.opacity
}, props.style]),
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
"role": `${attrs.role || 'separator'}`
}, null);
if (!slots.default) return divider;
return _createElementVNode("div", {
"class": _normalizeClass(['v-divider__wrapper', {
'v-divider__wrapper--vertical': props.vertical,
'v-divider__wrapper--inset': props.inset
}])
}, [divider, _createElementVNode("div", {
"class": "v-divider__content"
}, [slots.default()]), divider]);
});
return {};
}
});
//# sourceMappingURL=VDivider.js.map