( hex: string, modifiers: ColorModifier[] )
| 160 | * Returns the final hex color and alpha value. |
| 161 | */ |
| 162 | export function applyColorModifiers( |
| 163 | hex: string, |
| 164 | modifiers: ColorModifier[] |
| 165 | ): { color: string; alpha: number } { |
| 166 | let color = hex |
| 167 | let alpha = 1 |
| 168 | |
| 169 | for (const mod of modifiers) { |
| 170 | switch (mod.name) { |
| 171 | case 'tint': |
| 172 | case 'a:tint': |
| 173 | color = applyTint(color, mod.val) |
| 174 | break |
| 175 | case 'shade': |
| 176 | case 'a:shade': |
| 177 | color = applyShade(color, mod.val) |
| 178 | break |
| 179 | case 'lumMod': |
| 180 | case 'a:lumMod': |
| 181 | color = applyLumMod(color, mod.val) |
| 182 | break |
| 183 | case 'lumOff': |
| 184 | case 'a:lumOff': |
| 185 | color = applyLumOff(color, mod.val) |
| 186 | break |
| 187 | case 'satMod': |
| 188 | case 'a:satMod': |
| 189 | color = applySatMod(color, mod.val) |
| 190 | break |
| 191 | case 'hueMod': |
| 192 | case 'a:hueMod': |
| 193 | color = applyHueMod(color, mod.val) |
| 194 | break |
| 195 | case 'hueOff': |
| 196 | case 'a:hueOff': |
| 197 | color = applyHueOff(color, mod.val) |
| 198 | break |
| 199 | case 'satOff': |
| 200 | case 'a:satOff': |
| 201 | color = applySatOff(color, mod.val) |
| 202 | break |
| 203 | case 'alpha': |
| 204 | case 'a:alpha': |
| 205 | alpha = applyAlpha(mod.val) |
| 206 | break |
| 207 | case 'alphaOff': |
| 208 | case 'a:alphaOff': |
| 209 | alpha = Math.max(0, Math.min(1, alpha + mod.val / 100000)) |
| 210 | break |
| 211 | default: |
| 212 | // Unknown modifier - skip silently |
| 213 | break |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | return { color, alpha } |
| 218 | } |
| 219 |
no test coverage detected