40 lines
1017 B
TypeScript
40 lines
1017 B
TypeScript
|
|
export const isHexCompatible = (hexColor?: string): boolean => {
|
||
|
|
if (hexColor === undefined) {
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
|
||
|
|
const hexColorRegex = /^#([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/
|
||
|
|
return hexColorRegex.test(hexColor)
|
||
|
|
}
|
||
|
|
|
||
|
|
export const rgbToHex = (rgb: string): string => {
|
||
|
|
// Extract the integers by matching against a regex
|
||
|
|
const result = rgb.match(/\d+/g)
|
||
|
|
|
||
|
|
if (!result) {
|
||
|
|
return '#000000' // Set default color to #000000 if the RGB string is invalid
|
||
|
|
}
|
||
|
|
|
||
|
|
const [red, green, blue] = result.map(Number)
|
||
|
|
|
||
|
|
// Ensure the values are valid
|
||
|
|
if (
|
||
|
|
red < 0 ||
|
||
|
|
red > 255 ||
|
||
|
|
green < 0 ||
|
||
|
|
green > 255 ||
|
||
|
|
blue < 0 ||
|
||
|
|
blue > 255
|
||
|
|
) {
|
||
|
|
return '#000000' // Set default color to #000000 if the RGB values are invalid
|
||
|
|
}
|
||
|
|
|
||
|
|
// Convert each component to hex
|
||
|
|
const redHex = red.toString(16).padStart(2, '0')
|
||
|
|
const greenHex = green.toString(16).padStart(2, '0')
|
||
|
|
const blueHex = blue.toString(16).padStart(2, '0')
|
||
|
|
|
||
|
|
// Return the combined string
|
||
|
|
return `#${redHex}${greenHex}${blueHex}`
|
||
|
|
}
|