Documentation Index
Fetch the complete documentation index at: https://mintlify.com/vuetifyjs/vuetify/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Vuetify provides comprehensive color utilities for parsing, converting, manipulating, and analyzing colors across different formats (RGB, HSV, HSL, Hex).
import {
parseColor,
RGBtoHex,
HexToRGB,
HSVtoRGB,
RGBtoHSV,
lighten,
darken,
getLuma,
getContrast
} from 'vuetify/util'
// Color palette
import colors from 'vuetify/util/colors'
Color Types
type RGB = { r: number, g: number, b: number, a?: number }
type HSV = { h: number, s: number, v: number, a?: number }
type HSL = { h: number, s: number, l: number, a?: number }
type Hex = string
type Color = string | number | HSV | RGB | HSL
Color Parsing
parseColor()
Parse any color format into RGB.
function parseColor(color: Color): RGB
Examples:
import { parseColor } from 'vuetify/util'
// Hex strings
parseColor('#FF0000') // { r: 255, g: 0, b: 0 }
parseColor('#F00') // { r: 255, g: 0, b: 0 }
parseColor('#FF0000FF') // { r: 255, g: 0, b: 0, a: 1 }
// RGB strings
parseColor('rgb(255, 0, 0)') // { r: 255, g: 0, b: 0 }
parseColor('rgba(255, 0, 0, 0.5)') // { r: 255, g: 0, b: 0, a: 0.5 }
// HSL strings
parseColor('hsl(0, 100%, 50%)') // RGB equivalent
parseColor('hsla(0, 100%, 50%, 0.5)') // RGB equivalent with alpha
// Number
parseColor(0xFF0000) // { r: 255, g: 0, b: 0 }
// Objects
parseColor({ r: 255, g: 0, b: 0 }) // { r: 255, g: 0, b: 0 }
parseColor({ h: 0, s: 1, v: 1 }) // RGB equivalent
parseColor({ h: 0, s: 1, l: 0.5 }) // RGB equivalent
Color Conversion
RGBtoHex()
Convert RGB to hexadecimal string.
function RGBtoHex(rgb: RGB): Hex
Example:
import { RGBtoHex } from 'vuetify/util'
RGBtoHex({ r: 255, g: 0, b: 0 }) // '#FF0000'
RGBtoHex({ r: 255, g: 0, b: 0, a: 0.5 }) // '#FF000080'
HexToRGB()
Convert hexadecimal string to RGB.
function HexToRGB(hex: Hex): RGB
Example:
import { HexToRGB } from 'vuetify/util'
HexToRGB('#FF0000') // { r: 255, g: 0, b: 0 }
HexToRGB('#F00') // { r: 255, g: 0, b: 0 }
HexToRGB('#FF0000FF') // { r: 255, g: 0, b: 0, a: 1 }
HSVtoRGB()
Convert HSV to RGB.
function HSVtoRGB(hsv: HSV): RGB
Example:
import { HSVtoRGB } from 'vuetify/util'
HSVtoRGB({ h: 0, s: 1, v: 1 }) // { r: 255, g: 0, b: 0 }
HSVtoRGB({ h: 120, s: 1, v: 1 }) // { r: 0, g: 255, b: 0 }
RGBtoHSV()
Convert RGB to HSV.
function RGBtoHSV(rgb: RGB): HSV
Example:
import { RGBtoHSV } from 'vuetify/util'
RGBtoHSV({ r: 255, g: 0, b: 0 }) // { h: 0, s: 1, v: 1 }
RGBtoHSV({ r: 0, g: 255, b: 0 }) // { h: 120, s: 1, v: 1 }
HSLtoRGB()
Convert HSL to RGB.
function HSLtoRGB(hsl: HSL): RGB
HSVtoHSL()
Convert HSV to HSL.
function HSVtoHSL(hsv: HSV): HSL
HSLtoHSV()
Convert HSL to HSV.
function HSLtoHSV(hsl: HSL): HSV
Color Manipulation
lighten()
Lighten a color by specified amount.
function lighten(color: RGB, amount: number): RGB
Parameters:
color - RGB color to lighten
amount - Amount to lighten (0-10, affects CIELAB L* by amount * 10)
Example:
import { lighten, parseColor, RGBtoHex } from 'vuetify/util'
const color = parseColor('#1976D2')
const lighter = lighten(color, 1)
RGBtoHex(lighter) // Lighter shade
darken()
Darken a color by specified amount.
function darken(color: RGB, amount: number): RGB
Parameters:
color - RGB color to darken
amount - Amount to darken (0-10, affects CIELAB L* by amount * 10)
Example:
import { darken, parseColor, RGBtoHex } from 'vuetify/util'
const color = parseColor('#1976D2')
const darker = darken(color, 1)
RGBtoHex(darker) // Darker shade
Color Analysis
getLuma()
Calculate relative luminance of a color (0-1).
function getLuma(color: Color): number
Example:
import { getLuma } from 'vuetify/util'
getLuma('#FFFFFF') // ~1 (white)
getLuma('#000000') // ~0 (black)
getLuma('#808080') // ~0.21 (gray)
getContrast()
Calculate contrast ratio between two colors (1-21).
function getContrast(first: Color, second: Color): number
Example:
import { getContrast } from 'vuetify/util'
getContrast('#FFFFFF', '#000000') // 21 (maximum)
getContrast('#FFFFFF', '#FFFFFF') // 1 (minimum)
getContrast('#1976D2', '#FFFFFF') // ~4.56
hasLightForeground()
Determine if a color should use light or dark text.
function hasLightForeground(color: Color): boolean
Example:
import { hasLightForeground } from 'vuetify/util'
hasLightForeground('#1976D2') // true (use white text)
hasLightForeground('#FFEB3B') // false (use black text)
Color Palette
Material Design Colors
import colors from 'vuetify/util/colors'
// Access color shades
colors.red.base // '#f44336'
colors.red.lighten5 // '#ffebee'
colors.red.lighten1 // '#ef5350'
colors.red.darken1 // '#e53935'
colors.red.darken4 // '#b71c1c'
colors.red.accent1 // '#ff8a80'
colors.red.accent4 // '#d50000'
Available Colors
red
pink
purple
deepPurple
indigo
blue
lightBlue
cyan
teal
green
lightGreen
lime
yellow
amber
orange
deepOrange
brown
blueGrey
grey
shades (black, white, transparent)
Each color (except brown, grey, shades) has:
base - Base color
lighten5 to lighten1 - Lighter shades
darken1 to darken4 - Darker shades
accent1 to accent4 - Accent shades
Usage Examples
Theme Color Generation
import { parseColor, lighten, darken, RGBtoHex } from 'vuetify/util'
const primary = parseColor('#1976D2')
const theme = {
primary: RGBtoHex(primary),
'primary-lighten-1': RGBtoHex(lighten(primary, 1)),
'primary-lighten-2': RGBtoHex(lighten(primary, 2)),
'primary-darken-1': RGBtoHex(darken(primary, 1)),
'primary-darken-2': RGBtoHex(darken(primary, 2)),
}
Contrast Checker
import { getContrast } from 'vuetify/util'
function hasGoodContrast(fg: string, bg: string): boolean {
const contrast = getContrast(fg, bg)
return contrast >= 4.5 // WCAG AA standard
}
hasGoodContrast('#FFFFFF', '#1976D2') // true
hasGoodContrast('#E0E0E0', '#F5F5F5') // false
Auto Text Color
import { hasLightForeground } from 'vuetify/util'
function getTextColor(backgroundColor: string): string {
return hasLightForeground(backgroundColor) ? '#FFFFFF' : '#000000'
}
getTextColor('#1976D2') // '#FFFFFF'
getTextColor('#FFEB3B') // '#000000'
Color Palette Component
<script setup>
import colors from 'vuetify/util/colors'
const colorNames = Object.keys(colors).filter(k => k !== 'shades')
</script>
<template>
<v-container>
<v-row v-for="colorName in colorNames" :key="colorName">
<v-col
v-for="(value, shade) in colors[colorName]"
:key="shade"
:style="{ backgroundColor: value }"
class="pa-2 text-center"
>
{{ shade }}
</v-col>
</v-row>
</v-container>
</template>
Dynamic Theme
<script setup>
import { ref, computed } from 'vue'
import { parseColor, RGBtoHex, lighten, darken } from 'vuetify/util'
const baseColor = ref('#1976D2')
const palette = computed(() => {
const color = parseColor(baseColor.value)
return {
lighten3: RGBtoHex(lighten(color, 3)),
lighten2: RGBtoHex(lighten(color, 2)),
lighten1: RGBtoHex(lighten(color, 1)),
base: baseColor.value,
darken1: RGBtoHex(darken(color, 1)),
darken2: RGBtoHex(darken(color, 2)),
darken3: RGBtoHex(darken(color, 3)),
}
})
</script>
<template>
<div>
<v-color-picker v-model="baseColor" />
<div v-for="(color, shade) in palette" :key="shade">
<div :style="{ backgroundColor: color, padding: '20px' }">
{{ shade }}: {{ color }}
</div>
</div>
</div>
</template>
- All RGB values are 0-255
- HSV/HSL hue is 0-360 degrees
- HSV/HSL saturation and value/lightness are 0-1
- Alpha channel is 0-1
- Lighten/darken use CIELAB color space for perceptually uniform results
- Contrast ratio follows WCAG 2.0 guidelines
- Material Design colors are pre-defined constants
See Also