{"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-3V4MONNR.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') 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"]}