{"version":3,"sources":["../src/compression/normalize.ts"],"names":[],"mappings":";;;AAWO,SAAS,gBAAA,CACd,QACA,OAAA,EACoB;AACpB,EAAA,IAAI,OAAA,IAAW,MAAM,OAAO,MAAA;AAE5B,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAE/B,EAAA,QAAQ,GAAA;AAAK;AAAA,IAEX,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,CAAM,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,GAAI,GAAA;AAAA;AAAA,IAGlC,KAAK,KAAA;AACH,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,IAAK,EAAE,IAAI,CAAC,CAAA;AAAA;AAAA,IAGvE,KAAK,KAAA;AACH,MAAA,OAAO,IAAA,CAAK,MAAO,KAAA,CAAM,OAAA,EAAS,GAAG,GAAG,CAAA,GAAI,GAAA,GAAO,GAAG,CAAA,GAAI,CAAA;AAAA;AAAA,IAG5D;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAKO,SAAS,mBAAmB,MAAA,EAGjC;AACA,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAE/B,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,qBAAA,EAAsB;AAAA,IACjE,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,qBAAA,EAAsB;AAAA,IACjE,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,cAAA,EAAe;AAAA,IAC1D;AACE,MAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,EAAA,EAAG;AAAA;AAEnD;AAEA,SAAS,KAAA,CAAM,KAAA,EAAe,GAAA,EAAa,GAAA,EAAqB;AAC9D,EAAA,OAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAC3C","file":"chunk-62VEG44K.cjs","sourcesContent":["/**\n * Normalize a 0-100 quality value to the library-specific parameter.\n *\n * | Format   | Input 0-100 → Output                    |\n * |----------|------------------------------------------|\n * | jpg/webp | 0.0-1.0 (Canvas quality)                |\n * | avif     | 0.0-1.0 (Canvas quality)                |\n * | png      | OxiPNG level 1-6 (future)               |\n * | gif      | maxColors 2-256                          |\n * | others   | N/A (returns undefined)                  |\n */\nexport function normalizeQuality(\n  format: string,\n  quality: number | null | undefined,\n): number | undefined {\n  if (quality == null) return undefined;\n\n  const key = format.toLowerCase();\n\n  switch (key) {\n    // Canvas quality: 0.0 - 1.0\n    case 'jpg':\n    case 'jpeg':\n    case 'jfif':\n    case 'webp':\n    case 'avif':\n      return clamp(quality, 0, 100) / 100;\n\n    // OxiPNG optimization level: 1-6 (inverted scale)\n    case 'png':\n      return Math.min(6, Math.ceil((100 - clamp(quality, 0, 100)) / 20) + 1);\n\n    // GIF palette size: 2-256\n    case 'gif':\n      return Math.round((clamp(quality, 0, 100) / 100) * 254) + 2;\n\n    // No quality parameter for these formats\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Get compression metadata for a format.\n */\nexport function getCompressionMeta(format: string): {\n  hasQuality: boolean;\n  qualityLabel: string;\n} {\n  const key = format.toLowerCase();\n\n  switch (key) {\n    case 'jpg':\n    case 'jpeg':\n    case 'jfif':\n    case 'webp':\n    case 'avif':\n      return { hasQuality: true, qualityLabel: 'Compression quality' };\n    case 'png':\n      return { hasQuality: true, qualityLabel: 'Optimization effort' };\n    case 'gif':\n      return { hasQuality: true, qualityLabel: 'Palette size' };\n    default:\n      return { hasQuality: false, qualityLabel: '' };\n  }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.max(min, Math.min(max, value));\n}\n"]}