{"version":3,"file":"transformSRGB.mjs","names":["clamp","srgbForwardMatrix","srgbForwardTransform","C","Math","pow","srgbReverseMatrix","srgbReverseTransform","fromXYZ","xyz","rgb","Array","transform","matrix","i","round","r","g","b","toXYZ","_ref"],"sources":["../../../src/utils/color/transformSRGB.ts"],"sourcesContent":["// Utilities\nimport { clamp } from '@/utils/helpers'\n\n// Types\nimport type { RGB, XYZ } from '@/utils'\n\n// For converting XYZ to sRGB\nconst srgbForwardMatrix = [\n  [3.2406, -1.5372, -0.4986],\n  [-0.9689, 1.8758, 0.0415],\n  [0.0557, -0.204, 1.057],\n]\n\n// Forward gamma adjust\nconst srgbForwardTransform = (C: number): number =>\n  C <= 0.0031308 ? C * 12.92 : 1.055 * C ** (1 / 2.4) - 0.055\n\n// For converting sRGB to XYZ\nconst srgbReverseMatrix = [\n  [0.4124, 0.3576, 0.1805],\n  [0.2126, 0.7152, 0.0722],\n  [0.0193, 0.1192, 0.9505],\n]\n\n// Reverse gamma adjust\nconst srgbReverseTransform = (C: number): number =>\n  C <= 0.04045 ? C / 12.92 : ((C + 0.055) / 1.055) ** 2.4\n\nexport function fromXYZ(xyz: XYZ): RGB {\n  const rgb = Array(3)\n  const transform = srgbForwardTransform\n  const matrix = srgbForwardMatrix\n\n  // Matrix transform, then gamma adjustment\n  for (let i = 0; i < 3; ++i) {\n    // Rescale back to [0, 255]\n    rgb[i] = Math.round(\n      clamp(\n        transform(\n          matrix[i][0] * xyz[0] + matrix[i][1] * xyz[1] + matrix[i][2] * xyz[2]\n        )\n      ) * 255\n    )\n  }\n\n  return {\n    r: rgb[0],\n    g: rgb[1],\n    b: rgb[2],\n  }\n}\n\nexport function toXYZ({ r, g, b }: RGB): XYZ {\n  const xyz: XYZ = [0, 0, 0]\n  const transform = srgbReverseTransform\n  const matrix = srgbReverseMatrix\n\n  // Rescale from [0, 255] to [0, 1] then adjust sRGB gamma to linear RGB\n  r = transform(r / 255)\n  g = transform(g / 255)\n  b = transform(b / 255)\n\n  // Matrix color space transform\n  for (let i = 0; i < 3; ++i) {\n    xyz[i] = matrix[i][0] * r + matrix[i][1] * g + matrix[i][2] * b\n  }\n\n  return xyz\n}\n"],"mappings":"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"}