{"version":3,"sources":["../src/colorModels/rgb.ts"],"names":["clampRgb","rgb","clamp","round","parseRgbObject","input","isObject","cs","hasKeys","r","g","b","alpha","isAnyNumber","sanitize","RGB_RE","NUM_OR_NONE","parseRgbString","isComma","gRaw","bRaw","rPct","gPct","bPct","parseNum","gc","rawA","aPct"],"mappings":"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","file":"chunk-2KB6V6KD.cjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n  r: clamp(rgb.r, 0, 255),\n  g: clamp(rgb.g, 0, 255),\n  b: clamp(rgb.b, 0, 255),\n  alpha: clamp(round(rgb.alpha, 3), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n  if (!isObject(input)) return null;\n  const cs = (input as { colorSpace?: unknown }).colorSpace;\n  if (cs === 'display-p3' || cs === 'rec2020' || cs === 'a98-rgb' || cs === 'prophoto-rgb') return null;\n  if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n  const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n  if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n  return clampRgb({ r: sanitize(r), g: sanitize(g), b: sanitize(b), alpha: sanitize(alpha) });\n};\n\n// Matches both legacy comma syntax: rgb(255, 0, 0) / rgba(255, 0, 0, 0.5)\n// and modern space syntax: rgb(255 0 0) / rgb(255 0 0 / 0.5).\n// Supports percentage-based channels and the CSS Color 4 `none` keyword.\n// Named groups are suffixed `_c` (comma/legacy branch) or `_s` (space/modern branch)\n// because ES2022 regex requires distinct names across alternation branches.\nconst RGB_RE = new RegExp(\n  `^rgba?\\\\(\\\\s*(?<r>${NUM_OR_NONE})(?<rp>%?)\\\\s*(?:` +\n    `,\\\\s*(?<g_c>${NUM_OR_NONE})(?<gp_c>%?)\\\\s*,\\\\s*(?<b_c>${NUM_OR_NONE})(?<bp_c>%?)` +\n    `(?:\\\\s*,\\\\s*(?<al_c>${NUM_OR_NONE})(?<alp_c>%?))?\\\\s*` +\n    `|` +\n    `\\\\s+(?<g_s>${NUM_OR_NONE})(?<gp_s>%?)\\\\s+(?<b_s>${NUM_OR_NONE})(?<bp_s>%?)` +\n    `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?))?\\\\s*` +\n    `)\\\\)$`,\n  'i'\n);\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n  if (typeof input !== 'string') return null;\n  const g = RGB_RE.exec(input.trim())?.groups;\n  if (!g) return null;\n\n  const isComma = g.g_c !== undefined;\n  const gRaw = g.g_c ?? g.g_s!;\n  const bRaw = g.b_c ?? g.b_s!;\n  const rPct = !!g.rp;\n  const gPct = !!(g.gp_c ?? g.gp_s);\n  const bPct = !!(g.bp_c ?? g.bp_s);\n\n  const r = rPct ? (parseNum(g.r!) / 100) * 255 : parseNum(g.r!);\n  const gc = gPct ? (parseNum(gRaw) / 100) * 255 : parseNum(gRaw);\n  const b = bPct ? (parseNum(bRaw) / 100) * 255 : parseNum(bRaw);\n\n  // Legacy: channels must match type, no `none`. Modern: mixing + `none` allowed.\n  if (isComma) {\n    if (rPct !== gPct || gPct !== bPct) return null;\n    if (/^none$/i.test(g.r!) || /^none$/i.test(gRaw) || /^none$/i.test(bRaw)) return null;\n  }\n\n  const rawA = g.al_c ?? g.al_s;\n  const aPct = !!(g.alp_c ?? g.alp_s);\n  if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n  const alpha = rawA === undefined ? 1 : parseNum(rawA) / (aPct ? 100 : 1);\n\n  return clampRgb({ r, g: gc, b, alpha });\n};\n"]}