← Files Pray Production StudioARCHIVED FILE

skills/pps-ads/packages/remotion-kit/src/motion/color.ts

1.17 KB · Oct 8, 2026 · 06:29 UTC

↓ Download file

/** Hex color helpers for the theme's contrast guard. No dependencies. */
function channels(hex: string): [number, number, number] {
  const h = hex.replace('#', '')
  const full = h.length === 3 ? h.split('').map((c) => c + c).join('') : h
  const n = parseInt(full, 16)
  return [(n >> 16) & 255, (n >> 8) & 255, n & 255]
}

function toHex(r: number, g: number, b: number): string {
  return '#' + [r, g, b].map((v) => Math.round(Math.min(255, Math.max(0, v))).toString(16).padStart(2, '0')).join('')
}

/** WCAG relative luminance, 0 (black) to 1 (white). */
export function luminance(hex: string): number {
  const [r, g, b] = channels(hex).map((v) => {
    const c = v / 255
    return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)
  })
  return 0.2126 * r + 0.7152 * g + 0.0722 * b
}

/** Multiply every channel by (1 - amount). */
export function darken(hex: string, amount: number): string {
  const [r, g, b] = channels(hex)
  return toHex(r * (1 - amount), g * (1 - amount), b * (1 - amount))
}

/** Translucent version of a hex color. */
export function alpha(hex: string, a: number): string {
  const [r, g, b] = channels(hex)
  return `rgba(${r},${g},${b},${a})`
}

SHA-256: a0d6a874214f291fa90d18d1f8a94c54ffbe3ab2962634b535a65089bc521a67