UNPKG

vuetify

Version:

Vue Material Component Framework

77 lines 2.11 kB
// Utilities import { toValue } from 'vue'; import { destructComputed, hasLightForeground, isCssColor, isParsableColor, parseColor } from "../util/index.js"; // Types // Composables export function useColor(colors) { return destructComputed(() => { const { class: colorClasses, style: colorStyles } = computeColor(colors); return { colorClasses, colorStyles }; }); } export function useTextColor(color) { const { colorClasses: textColorClasses, colorStyles: textColorStyles } = useColor(() => ({ text: toValue(color) })); return { textColorClasses, textColorStyles }; } export function useBackgroundColor(color) { const { colorClasses: backgroundColorClasses, colorStyles: backgroundColorStyles } = useColor(() => ({ background: toValue(color) })); return { backgroundColorClasses, backgroundColorStyles }; } function normalizeColors(colors) { return { text: typeof colors.text === 'string' ? colors.text.replace(/^text-/, '') : colors.text, background: typeof colors.background === 'string' ? colors.background.replace(/^bg-/, '') : colors.background }; } export function computeColor(colors) { const _colors = normalizeColors(toValue(colors)); const classes = []; const styles = {}; if (_colors.background) { if (isCssColor(_colors.background)) { styles.backgroundColor = _colors.background; if (!_colors.text && isParsableColor(_colors.background)) { const backgroundColor = parseColor(_colors.background); if (backgroundColor.a == null || backgroundColor.a === 1) { classes.push(hasLightForeground(backgroundColor) ? 'v-theme-on-dark' : 'v-theme-on-light'); } } } else { classes.push(`bg-${_colors.background}`); } } if (_colors.text) { if (isCssColor(_colors.text)) { styles.color = _colors.text; styles.caretColor = _colors.text; } else { classes.push(`text-${_colors.text}`); } } return { class: classes, style: styles }; } //# sourceMappingURL=color.js.map