import { colors } from 'quasar' function getColorWithOpacity( color: string, background: string = '#ffffff', alpha: number = 0.8 ): string { const clampedAlpha = Math.max(0.01, Math.min(1, alpha)) const hexColor = color.startsWith('#') ? color : colors.getPaletteColor(color) const hexBackground = background.startsWith('#') ? background : colors.getPaletteColor(background) if (!hexColor || !hexColor.startsWith('#') || !hexBackground || !hexBackground.startsWith('#')) { return color } const { r: rColor, g: gColor, b: bColor } = colors.hexToRgb(hexColor) const { r: rBg, g: gBg, b: bBg } = colors.hexToRgb(hexBackground) const calculateTargetChannel = (colorChannel: number, bgChannel: number): number => { const target = (colorChannel - bgChannel * (1 - clampedAlpha)) / clampedAlpha return Math.max(0, Math.min(255, Math.round(target))) } const targetChannels = [ calculateTargetChannel(rColor, rBg), calculateTargetChannel(gColor, gBg), calculateTargetChannel(bColor, bBg) ] if (targetChannels.every(channel => channel === 0)) { return `rgba(${rColor}, ${gColor}, ${bColor}, ${clampedAlpha})` } return `rgba(${targetChannels.join(', ')}, ${clampedAlpha})` } export { getColorWithOpacity }