{"version":3,"sources":["../../src/encode/avif.ts"],"names":["normalizeQuality","canvasToBlob","EncodeError"],"mappings":";;;;;;;AAMO,IAAM,IAAA,GAAmB;AAAA,EAC9B,GAAA,EAAK,MAAA;AAAA,EACL,SAAS,EAAC;AAAA,EACV,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM,YAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,mBAAA,EAAqB,IAAA;AAAA,EACrB,eAAA,EAAiB,OAAA;AAAA,EACjB,cAAA,EAAgB,EAAA;AAAA,EAChB,YAAA,EAAc,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,EACrB,WAAA,EAAa,qDAAA;AAAA,EACb,wBAAA,EAA0B,KAAA;AAAA,EAC1B,oBAAA,EAAsB;AACxB;AAOA,eAAsB,MAAA,CACpB,QACA,OAAA,EACe;AACf,EAAA,MAAM,IAAIA,kCAAA,CAAiB,MAAA,EAAQ,OAAA,EAAS,OAAA,IAAW,KAAK,cAAe,CAAA;AAG3E,EAAA,IAAI;AACF,IAAA,MAAM,OAAO,MAAMC,8BAAA,CAAa,MAAA,EAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAEpD,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAW,GAAI,MAAM,OAAO,eAAe,CAAA;AAE3D,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAIlC,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAEtE,IAAA,MAAM,SAAA,GAAY,IAAI,YAAA,CAAa,CAAA,EAAG,GAAG,MAAA,CAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AACpE,IAAA,MAAM,OAAA,GAAU,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK,cAAA;AAEzC,IAAA,MAAM,cAAc,MAAM,UAAA,CAAW,SAAA,EAAW,EAAE,SAAS,CAAA;AAC3D,IAAA,OAAO,IAAI,KAAK,CAAC,WAAW,GAAG,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EACpD,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAIC,6BAAA;AAAA,MACR,eAAA;AAAA,MACA,8EAA8E,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,KAChI;AAAA,EACF;AACF","file":"avif.cjs","sourcesContent":["import type { FormatMeta, EncodeOptions } from '../types.js';\n\nimport { canvasToBlob } from '../transform/canvas.js';\nimport { normalizeQuality } from '../compression/normalize.js';\nimport { EncodeError } from '../errors.js';\n\nexport const meta: FormatMeta = {\n  key: 'avif',\n  aliases: [],\n  label: 'AVIF',\n  mime: 'image/avif',\n  ext: 'avif',\n  supportsCompression: true,\n  compressionType: 'lossy',\n  defaultQuality: 50,\n  qualityRange: [1, 100],\n  qualityHint: '50 ≈ JPEG 85 — very efficient compression',\n  requiresAlphaCompositing: false,\n  supportsTransparency: true,\n};\n\n/**\n * Encode a Canvas to AVIF.\n * Strategy: try Canvas.toBlob('image/avif') first.\n * Falls back to @jsquash/avif WASM if browser doesn't support native AVIF encoding.\n */\nexport async function encode(\n  canvas: HTMLCanvasElement | OffscreenCanvas,\n  options?: EncodeOptions,\n): Promise<Blob> {\n  const q = normalizeQuality('avif', options?.quality ?? meta.defaultQuality!);\n\n  // Try Canvas native AVIF encoding first\n  try {\n    const blob = await canvasToBlob(canvas, meta.mime, q);\n    // Canvas may return a PNG fallback if AVIF isn't supported — check MIME\n    if (blob.type === meta.mime) return blob;\n  } catch {\n    // Canvas AVIF not supported — fall through to WASM\n  }\n\n  // WASM fallback: @jsquash/avif\n  try {\n    const { encode: avifEncode } = await import('@jsquash/avif');\n\n    const ctx = canvas.getContext('2d') as\n      | CanvasRenderingContext2D\n      | OffscreenCanvasRenderingContext2D;\n\n    if (!ctx) throw new Error('Failed to get 2D context for AVIF encoding');\n\n    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    const quality = options?.quality ?? meta.defaultQuality!;\n\n    const arrayBuffer = await avifEncode(imageData, { quality });\n    return new Blob([arrayBuffer], { type: meta.mime });\n  } catch (err) {\n    throw new EncodeError(\n      'ENCODE_FAILED',\n      `AVIF encoding failed. Ensure @jsquash/avif is installed and WASM can load. ${err instanceof Error ? err.message : String(err)}`,\n    );\n  }\n}\n"]}