{
  "version": 3,
  "sources": ["../decode.ts", "../binary.ts", "../filter.ts", "../dither.ts", "../encode.ts", "../rgba.ts", "../framize.ts", "../quantize.ts", "../index.ts"],
  "sourcesContent": ["import { inflateSync, unzlibSync } from 'fflate';\n\nimport {\n  nextZero,\n  readASCII,\n  readBytes,\n  readUint,\n  readUshort,\n  readUTF8,\n} from './binary';\nimport { filterZero, readInterlace } from './filter';\nimport type { DecodeState, Image, ImageFrame } from './types';\n\nconst PNG_SIG = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n\nfunction readIHDR(data: Uint8Array, offset: number, out: DecodeState): void {\n  out.width = readUint(data, offset);\n  offset += 4;\n  out.height = readUint(data, offset);\n  offset += 4;\n  out.depth = data[offset++];\n  out.ctype = data[offset++];\n  out.compress = data[offset++];\n  out.filter = data[offset++];\n  out.interlace = data[offset++];\n}\n\nfunction inflateZlib(data: Uint8Array): Uint8Array {\n  return unzlibSync(data);\n}\n\nfunction decompress(\n  out: DecodeState,\n  dd: Uint8Array,\n  w: number,\n  h: number,\n): Uint8Array {\n  const inflated = out.tabs.CgBI ? inflateSync(dd) : inflateZlib(dd);\n\n  if (out.interlace === 0) return filterZero(inflated, out, 0, w, h);\n  if (out.interlace === 1) return readInterlace(inflated, out);\n  return inflated;\n}\n\n/** Decode a PNG / APNG `ArrayBuffer` into raw samples + ancillary tabs. */\nexport function decode(buff: ArrayBuffer): Image {\n  const data = new Uint8Array(buff);\n  let offset = 8;\n\n  for (let i = 0; i < 8; i++) {\n    if (data[i] !== PNG_SIG[i]) {\n      throw new Error('The input is not a PNG file!');\n    }\n  }\n\n  const out = {\n    tabs: {},\n    frames: [] as ImageFrame[],\n  } as DecodeState;\n\n  const dd = new Uint8Array(data.length);\n  let doff = 0;\n  let fd: Uint8Array | undefined;\n  let foff = 0;\n\n  while (offset < data.length) {\n    const len = readUint(data, offset);\n    offset += 4;\n    const type = readASCII(data, offset, 4);\n    offset += 4;\n\n    if (type === 'IHDR') {\n      readIHDR(data, offset, out);\n    } else if (type === 'CgBI') {\n      out.tabs.CgBI = data.slice(offset, offset + 4);\n    } else if (type === 'IDAT') {\n      for (let i = 0; i < len; i++) dd[doff + i] = data[offset + i];\n      doff += len;\n    } else if (type === 'acTL') {\n      out.tabs.acTL = {\n        num_frames: readUint(data, offset),\n        num_plays: readUint(data, offset + 4),\n      };\n      fd = new Uint8Array(data.length);\n    } else if (type === 'fcTL') {\n      if (foff !== 0 && fd) {\n        const fr = out.frames[out.frames.length - 1];\n        fr.data = decompress(\n          out,\n          fd.slice(0, foff),\n          fr.rect.width,\n          fr.rect.height,\n        );\n        foff = 0;\n      }\n      const rct = {\n        x: readUint(data, offset + 12),\n        y: readUint(data, offset + 16),\n        width: readUint(data, offset + 4),\n        height: readUint(data, offset + 8),\n      };\n      let del = readUshort(data, offset + 22);\n      del = readUshort(data, offset + 20) / (del === 0 ? 100 : del);\n      out.frames.push({\n        rect: rct,\n        delay: Math.round(del * 1000),\n        dispose: data[offset + 24],\n        blend: data[offset + 25],\n      });\n    } else if (type === 'fdAT') {\n      if (!fd) fd = new Uint8Array(data.length);\n      for (let i = 0; i < len - 4; i++) fd[foff + i] = data[offset + i + 4];\n      foff += len - 4;\n    } else if (type === 'pHYs') {\n      out.tabs.pHYs = [\n        readUint(data, offset),\n        readUint(data, offset + 4),\n        data[offset + 8],\n      ];\n    } else if (type === 'cHRM') {\n      out.tabs.cHRM = [];\n      for (let i = 0; i < 8; i++) {\n        out.tabs.cHRM.push(readUint(data, offset + i * 4));\n      }\n    } else if (type === 'tEXt' || type === 'zTXt') {\n      const textTab = type === 'tEXt' ? 'tEXt' : 'zTXt';\n      if (out.tabs[textTab] === undefined) out.tabs[textTab] = {};\n      const nz = nextZero(data, offset);\n      const keyw = readASCII(data, offset, nz - offset);\n      const tl = offset + len - nz - 1;\n      let text: string;\n      if (type === 'tEXt') {\n        text = readASCII(data, nz + 1, tl);\n      } else {\n        const bfr = inflateZlib(data.subarray(nz + 2, offset + len));\n        text = readUTF8(bfr, 0, bfr.length);\n      }\n      out.tabs[textTab]![keyw] = text;\n    } else if (type === 'iTXt') {\n      if (out.tabs.iTXt === undefined) out.tabs.iTXt = {};\n      let off = offset;\n      let nz = nextZero(data, off);\n      const keyw = readASCII(data, off, nz - off);\n      off = nz + 1;\n      const cflag = data[off];\n      off += 2;\n      nz = nextZero(data, off);\n      off = nz + 1;\n      nz = nextZero(data, off);\n      off = nz + 1;\n      const tl = len - (off - offset);\n      let text: string;\n      if (cflag === 0) text = readUTF8(data, off, tl);\n      else {\n        const bfr = inflateZlib(data.subarray(off, off + tl));\n        text = readUTF8(bfr, 0, bfr.length);\n      }\n      out.tabs.iTXt[keyw] = text;\n    } else if (type === 'PLTE') {\n      out.tabs.PLTE = readBytes(data, offset, len);\n    } else if (type === 'hIST') {\n      const pl = out.tabs.PLTE!.length / 3;\n      out.tabs.hIST = [];\n      for (let i = 0; i < pl; i++) {\n        out.tabs.hIST.push(readUshort(data, offset + i * 2));\n      }\n    } else if (type === 'tRNS') {\n      if (out.ctype === 3) out.tabs.tRNS = readBytes(data, offset, len);\n      else if (out.ctype === 0) out.tabs.tRNS = readUshort(data, offset);\n      else if (out.ctype === 2) {\n        out.tabs.tRNS = [\n          readUshort(data, offset),\n          readUshort(data, offset + 2),\n          readUshort(data, offset + 4),\n        ];\n      }\n    } else if (type === 'gAMA') {\n      out.tabs.gAMA = readUint(data, offset) / 100000;\n    } else if (type === 'sRGB') {\n      out.tabs.sRGB = data[offset];\n    } else if (type === 'bKGD') {\n      if (out.ctype === 0 || out.ctype === 4) {\n        out.tabs.bKGD = [readUshort(data, offset)];\n      } else if (out.ctype === 2 || out.ctype === 6) {\n        out.tabs.bKGD = [\n          readUshort(data, offset),\n          readUshort(data, offset + 2),\n          readUshort(data, offset + 4),\n        ];\n      } else if (out.ctype === 3) {\n        out.tabs.bKGD = data[offset];\n      }\n    } else if (type === 'IEND') {\n      break;\n    }\n\n    offset += len;\n    offset += 4; // CRC\n  }\n\n  if (foff !== 0 && fd) {\n    const fr = out.frames[out.frames.length - 1];\n    fr.data = decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);\n  }\n\n  out.data = decompress(out, dd.subarray(0, doff), out.width, out.height);\n\n  const { compress: _c, filter: _f, interlace: _i, ...image } = out;\n  return image;\n}\n", "/** PNG binary read/write helpers and CRC32. */\n\nexport function nextZero(data: Uint8Array, p: number): number {\n  while (data[p] !== 0) p++;\n  return p;\n}\n\nexport function readUshort(buff: Uint8Array, p: number): number {\n  return (buff[p] << 8) | buff[p + 1];\n}\n\nexport function writeUshort(buff: Uint8Array, p: number, n: number): void {\n  buff[p] = (n >> 8) & 255;\n  buff[p + 1] = n & 255;\n}\n\nexport function readUint(buff: Uint8Array, p: number): number {\n  return (\n    buff[p] * (256 * 256 * 256) +\n    ((buff[p + 1] << 16) | (buff[p + 2] << 8) | buff[p + 3])\n  );\n}\n\nexport function writeUint(buff: Uint8Array, p: number, n: number): void {\n  buff[p] = (n >> 24) & 255;\n  buff[p + 1] = (n >> 16) & 255;\n  buff[p + 2] = (n >> 8) & 255;\n  buff[p + 3] = n & 255;\n}\n\nexport function readASCII(buff: Uint8Array, p: number, l: number): string {\n  let s = '';\n  for (let i = 0; i < l; i++) s += String.fromCharCode(buff[p + i]);\n  return s;\n}\n\nexport function writeASCII(data: Uint8Array, p: number, s: string): void {\n  for (let i = 0; i < s.length; i++) data[p + i] = s.charCodeAt(i);\n}\n\nexport function readBytes(buff: Uint8Array, p: number, l: number): number[] {\n  const arr: number[] = [];\n  for (let i = 0; i < l; i++) arr.push(buff[p + i]);\n  return arr;\n}\n\nfunction padHex(n: string): string {\n  return n.length < 2 ? '0' + n : n;\n}\n\nexport function readUTF8(buff: Uint8Array, p: number, l: number): string {\n  let s = '';\n  for (let i = 0; i < l; i++) {\n    s += '%' + padHex(buff[p + i].toString(16));\n  }\n  try {\n    return decodeURIComponent(s);\n  } catch {\n    return readASCII(buff, p, l);\n  }\n}\n\nconst CRC_TABLE = (() => {\n  const tab = new Uint32Array(256);\n  for (let n = 0; n < 256; n++) {\n    let c = n;\n    for (let k = 0; k < 8; k++) {\n      c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n    }\n    tab[n] = c;\n  }\n  return tab;\n})();\n\nfunction crcUpdate(\n  c: number,\n  buf: Uint8Array,\n  off: number,\n  len: number,\n): number {\n  for (let i = 0; i < len; i++) {\n    c = CRC_TABLE[(c ^ buf[off + i]) & 0xff] ^ (c >>> 8);\n  }\n  return c;\n}\n\n/** PNG-style CRC32 over `buf[off .. off+len)`. */\nexport function crc(buf: Uint8Array, off: number, len: number): number {\n  return crcUpdate(0xffffffff, buf, off, len) ^ 0xffffffff;\n}\n", "import type { DecodeState } from './types';\n\n/** Paeth predictor (PNG filter type 4). */\nexport function paeth(a: number, b: number, c: number): number {\n  const p = a + b - c;\n  const pa = p - a;\n  const pb = p - b;\n  const pc = p - c;\n  if (pa * pa <= pb * pb && pa * pa <= pc * pc) return a;\n  if (pb * pb <= pc * pc) return b;\n  return c;\n}\n\n/** Bits per pixel for a PNG color type + bit depth. */\nexport function getBPP(out: { ctype: number; depth: number }): number {\n  const channels = [1, 0, 3, 1, 2, 0, 4][out.ctype];\n  return channels * out.depth;\n}\n\n/**\n * Unfilter scanlines in place (PNG filter method 0).\n *\n * Ported from UPNG.js including the first-row type remapping quirks:\n * type 2/3 \u2192 None, type 4 \u2192 Sub, plus the special Average first-row pass\n * that indexes from absolute offset 0 (only correct when `off === 0`).\n */\nexport function filterZero(\n  data: Uint8Array,\n  out: { ctype: number; depth: number },\n  off: number,\n  w: number,\n  h: number,\n): Uint8Array {\n  let bpp = getBPP(out);\n  const bpl = Math.ceil((w * bpp) / 8);\n  bpp = Math.ceil(bpp / 8);\n\n  let type = data[off];\n  let x = 0;\n\n  if (type > 1) data[off] = [0, 0, 1][type - 2];\n  if (type === 3) {\n    for (x = bpp; x < bpl; x++) {\n      data[x + 1] = (data[x + 1] + (data[x + 1 - bpp] >>> 1)) & 255;\n    }\n  }\n\n  for (let y = 0; y < h; y++) {\n    const i = off + y * bpl;\n    const di = i + y + 1;\n    type = data[di - 1];\n    x = 0;\n\n    if (type === 0) {\n      for (; x < bpl; x++) data[i + x] = data[di + x];\n    } else if (type === 1) {\n      for (; x < bpp; x++) data[i + x] = data[di + x];\n      for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpp];\n    } else if (type === 2) {\n      for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpl];\n    } else if (type === 3) {\n      for (; x < bpp; x++) {\n        data[i + x] = data[di + x] + (data[i + x - bpl] >>> 1);\n      }\n      for (; x < bpl; x++) {\n        data[i + x] =\n          data[di + x] + ((data[i + x - bpl] + data[i + x - bpp]) >>> 1);\n      }\n    } else {\n      for (; x < bpp; x++) {\n        data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0);\n      }\n      for (; x < bpl; x++) {\n        data[i + x] =\n          data[di + x] +\n          paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);\n      }\n    }\n  }\n  return data;\n}\n\n/** Adam7 deinterlace \u2192 tightly packed unfiltered image bytes. */\nexport function readInterlace(data: Uint8Array, out: DecodeState): Uint8Array {\n  const w = out.width;\n  const h = out.height;\n  const bpp = getBPP(out);\n  const cbpp = bpp >> 3;\n  const bpl = Math.ceil((w * bpp) / 8);\n  const img = new Uint8Array(h * bpl);\n  let di = 0;\n\n  const starting_row = [0, 0, 4, 0, 2, 0, 1];\n  const starting_col = [0, 4, 0, 2, 0, 1, 0];\n  const row_increment = [8, 8, 8, 4, 4, 2, 2];\n  const col_increment = [8, 8, 4, 4, 2, 2, 1];\n\n  for (let pass = 0; pass < 7; pass++) {\n    const ri = row_increment[pass];\n    const ci = col_increment[pass];\n    let sw = 0;\n    let sh = 0;\n    let cr = starting_row[pass];\n    while (cr < h) {\n      cr += ri;\n      sh++;\n    }\n    let cc = starting_col[pass];\n    while (cc < w) {\n      cc += ci;\n      sw++;\n    }\n    const bpll = Math.ceil((sw * bpp) / 8);\n    filterZero(data, out, di, sw, sh);\n\n    let y = 0;\n    let row = starting_row[pass];\n    while (row < h) {\n      let col = starting_col[pass];\n      let cdi = (di + y * bpll) << 3;\n\n      while (col < w) {\n        if (bpp === 1) {\n          let val = data[cdi >> 3];\n          val = (val >> (7 - (cdi & 7))) & 1;\n          img[row * bpl + (col >> 3)] |= val << (7 - (col & 7));\n        }\n        if (bpp === 2) {\n          let val = data[cdi >> 3];\n          val = (val >> (6 - (cdi & 7))) & 3;\n          img[row * bpl + (col >> 2)] |= val << (6 - ((col & 3) << 1));\n        }\n        if (bpp === 4) {\n          let val = data[cdi >> 3];\n          val = (val >> (4 - (cdi & 7))) & 15;\n          img[row * bpl + (col >> 1)] |= val << (4 - ((col & 1) << 2));\n        }\n        if (bpp >= 8) {\n          const ii = row * bpl + col * cbpp;\n          for (let j = 0; j < cbpp; j++) img[ii + j] = data[(cdi >> 3) + j];\n        }\n        cdi += bpp;\n        col += ci;\n      }\n      y++;\n      row += ri;\n    }\n    if (sw * sh !== 0) di += sh * (1 + bpll);\n  }\n  return img;\n}\n\n/** Apply PNG filter type to one scanline into `data` (encode path). */\nexport function filterLine(\n  data: Uint8Array,\n  img: Uint8Array,\n  y: number,\n  bpl: number,\n  bpp: number,\n  type: number,\n): void {\n  const i = y * bpl;\n  let di = i + y;\n  data[di] = type;\n  di++;\n\n  if (type === 0) {\n    if (bpl < 500) {\n      for (let x = 0; x < bpl; x++) data[di + x] = img[i + x];\n    } else {\n      data.set(img.subarray(i, i + bpl), di);\n    }\n  } else if (type === 1) {\n    for (let x = 0; x < bpp; x++) data[di + x] = img[i + x];\n    for (let x = bpp; x < bpl; x++) {\n      data[di + x] = (img[i + x] - img[i + x - bpp] + 256) & 255;\n    }\n  } else if (y === 0) {\n    for (let x = 0; x < bpp; x++) data[di + x] = img[i + x];\n    if (type === 2) {\n      for (let x = bpp; x < bpl; x++) data[di + x] = img[i + x];\n    }\n    if (type === 3) {\n      for (let x = bpp; x < bpl; x++) {\n        data[di + x] = (img[i + x] - (img[i + x - bpp] >> 1) + 256) & 255;\n      }\n    }\n    if (type === 4) {\n      for (let x = bpp; x < bpl; x++) {\n        data[di + x] = (img[i + x] - paeth(img[i + x - bpp], 0, 0) + 256) & 255;\n      }\n    }\n  } else {\n    if (type === 2) {\n      for (let x = 0; x < bpl; x++) {\n        data[di + x] = (img[i + x] + 256 - img[i + x - bpl]) & 255;\n      }\n    }\n    if (type === 3) {\n      for (let x = 0; x < bpp; x++) {\n        data[di + x] = (img[i + x] + 256 - (img[i + x - bpl] >> 1)) & 255;\n      }\n      for (let x = bpp; x < bpl; x++) {\n        data[di + x] =\n          (img[i + x] + 256 - ((img[i + x - bpl] + img[i + x - bpp]) >> 1)) &\n          255;\n      }\n    }\n    if (type === 4) {\n      for (let x = 0; x < bpp; x++) {\n        data[di + x] = (img[i + x] + 256 - paeth(0, img[i + x - bpl], 0)) & 255;\n      }\n      for (let x = bpp; x < bpl; x++) {\n        data[di + x] =\n          (img[i + x] +\n            256 -\n            paeth(img[i + x - bpp], img[i + x - bpl], img[i + x - bpp - bpl])) &\n          255;\n      }\n    }\n  }\n}\n", "function clamp255(x: number): number {\n  return Math.max(0, Math.min(255, x));\n}\n\nfunction sqDist(a: number[], b: number[]): number {\n  const dr = a[0] - b[0];\n  const dg = a[1] - b[1];\n  const db = a[2] - b[2];\n  const da = a[3] - b[3];\n  return dr * dr + dg * dg + db * db + da * da;\n}\n\nfunction addErr(er: number[], tg: Int16Array, ti: number, f: number): void {\n  tg[ti] += (er[0] * f) >> 4;\n  tg[ti + 1] += (er[1] * f) >> 4;\n  tg[ti + 2] += (er[2] * f) >> 4;\n  tg[ti + 3] += (er[3] * f) >> 4;\n}\n\nconst BAYER_S = 4;\nconst BAYER = [0, 8, 2, 10, 12, 4, 14, 6, 3, 11, 1, 9, 15, 7, 13, 5].map(\n  (v) => 255 * (-0.5 + (v + 0.5) / (BAYER_S * BAYER_S)),\n);\n\n/**\n * Re-map `sb` onto `plte`, spreading the quantization error.\n * `MTD`: 0 = none, 1 = Floyd-Steinberg (default), 2 = Bayer.\n * Writes colors into `tb` and indices into `oind`.\n */\nexport function dither(\n  sb: Uint8Array,\n  w: number,\n  h: number,\n  plte: number[],\n  tb: Uint8Array,\n  oind: Uint8Array,\n  MTD = 1,\n): void {\n  const pc = plte.length;\n  const nplt: number[][] = [];\n  for (let i = 0; i < pc; i++) {\n    const c = plte[i];\n    nplt.push([c & 255, (c >>> 8) & 255, (c >>> 16) & 255, (c >>> 24) & 255]);\n  }\n\n  const tb32 = new Uint32Array(tb.buffer, tb.byteOffset, tb.length >> 2);\n  const err = new Int16Array(w * h * 4);\n\n  for (let y = 0; y < h; y++) {\n    for (let x = 0; x < w; x++) {\n      const i = (y * w + x) * 4;\n\n      let cc: number[];\n      if (MTD !== 2) {\n        cc = [\n          clamp255(sb[i] + err[i]),\n          clamp255(sb[i + 1] + err[i + 1]),\n          clamp255(sb[i + 2] + err[i + 2]),\n          clamp255(sb[i + 3] + err[i + 3]),\n        ];\n      } else {\n        const ce = BAYER[(y & (BAYER_S - 1)) * BAYER_S + (x & (BAYER_S - 1))];\n        cc = [\n          clamp255(sb[i] + ce),\n          clamp255(sb[i + 1] + ce),\n          clamp255(sb[i + 2] + ce),\n          clamp255(sb[i + 3] + ce),\n        ];\n      }\n\n      let ni = 0;\n      let nd = 0xffffff;\n      for (let j = 0; j < pc; j++) {\n        const cd = sqDist(cc, nplt[j]);\n        if (cd < nd) {\n          nd = cd;\n          ni = j;\n        }\n      }\n\n      const nc = nplt[ni];\n      if (MTD === 1) {\n        const er = [cc[0] - nc[0], cc[1] - nc[1], cc[2] - nc[2], cc[3] - nc[3]];\n        if (x !== w - 1) addErr(er, err, i + 4, 7);\n        if (y !== h - 1) {\n          if (x !== 0) addErr(er, err, i + 4 * w - 4, 3);\n          addErr(er, err, i + 4 * w, 5);\n          if (x !== w - 1) addErr(er, err, i + 4 * w + 4, 1);\n        }\n      }\n\n      oind[i >> 2] = ni;\n      tb32[i >> 2] = plte[ni];\n    }\n  }\n}\n", "import { zlibSync } from 'fflate';\n\nimport { crc, writeASCII, writeUint, writeUshort } from './binary';\nimport { dither } from './dither';\nimport { filterLine } from './filter';\nimport { concatRGBA, framize } from './framize';\nimport { quantize } from './quantize';\nimport type { EncodeFrame, EncodeImage, ImageTabs } from './types';\n\nfunction filterAndCompress(\n  img: Uint8Array,\n  h: number,\n  bpp: number,\n  bpl: number,\n  filter: number,\n  levelZero: boolean,\n): Uint8Array {\n  const data = new Uint8Array(h * bpl + h);\n  let ftry = [0, 1, 2, 3, 4];\n  if (filter !== -1) ftry = [filter];\n  else if (h * bpl > 500000 || bpp === 1) ftry = [0];\n\n  const opts = levelZero ? { level: 0 as const } : {};\n  const fls: Uint8Array[] = [];\n\n  for (let i = 0; i < ftry.length; i++) {\n    for (let y = 0; y < h; y++) {\n      filterLine(data, img, y, bpl, bpp, ftry[i]);\n    }\n    fls.push(zlibSync(data, opts));\n  }\n\n  let ti = 0;\n  let tsize = 1e9;\n  for (let i = 0; i < fls.length; i++) {\n    if (fls[i].length < tsize) {\n      ti = i;\n      tsize = fls[i].length;\n    }\n  }\n  return fls[ti];\n}\n\nfunction compressPNG(\n  nimg: EncodeImage,\n  filter: number,\n  levelZero = false,\n): void {\n  for (const frm of nimg.frames) {\n    const nh = frm.rect.height;\n    frm.cimg = filterAndCompress(\n      frm.img,\n      nh,\n      frm.bpp,\n      frm.bpl,\n      filter,\n      levelZero,\n    );\n  }\n}\n\nfunction writePNG(\n  nimg: EncodeImage,\n  w: number,\n  h: number,\n  dels?: number[],\n  tabs?: ImageTabs,\n): ArrayBuffer {\n  if (tabs === undefined) tabs = {};\n  const anim = nimg.frames.length > 1;\n  let pltAlpha = false;\n\n  let leng = 8 + (16 + 5 + 4) + (anim ? 20 : 0);\n  if (tabs.sRGB !== undefined) leng += 8 + 1 + 4;\n  if (tabs.pHYs !== undefined) leng += 8 + 9 + 4;\n  if (nimg.ctype === 3 && nimg.plte) {\n    const dl = nimg.plte.length;\n    for (let i = 0; i < dl; i++) {\n      if (nimg.plte[i] >>> 24 !== 255) pltAlpha = true;\n    }\n    leng += 8 + dl * 3 + 4 + (pltAlpha ? 8 + dl * 1 + 4 : 0);\n  }\n  for (let j = 0; j < nimg.frames.length; j++) {\n    const fr = nimg.frames[j];\n    if (anim) leng += 38;\n    leng += fr.cimg!.length + 12;\n    if (j !== 0) leng += 4;\n  }\n  leng += 12;\n\n  const data = new Uint8Array(leng);\n  const sig = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n  for (let i = 0; i < 8; i++) data[i] = sig[i];\n  let offset = 8;\n\n  writeUint(data, offset, 13);\n  offset += 4;\n  writeASCII(data, offset, 'IHDR');\n  offset += 4;\n  writeUint(data, offset, w);\n  offset += 4;\n  writeUint(data, offset, h);\n  offset += 4;\n  data[offset++] = nimg.depth;\n  data[offset++] = nimg.ctype;\n  data[offset++] = 0;\n  data[offset++] = 0;\n  data[offset++] = 0;\n  writeUint(data, offset, crc(data, offset - 17, 17));\n  offset += 4;\n\n  if (tabs.sRGB !== undefined) {\n    writeUint(data, offset, 1);\n    offset += 4;\n    writeASCII(data, offset, 'sRGB');\n    offset += 4;\n    data[offset++] = tabs.sRGB;\n    writeUint(data, offset, crc(data, offset - 5, 5));\n    offset += 4;\n  }\n  if (tabs.pHYs !== undefined) {\n    writeUint(data, offset, 9);\n    offset += 4;\n    writeASCII(data, offset, 'pHYs');\n    offset += 4;\n    writeUint(data, offset, tabs.pHYs[0]);\n    offset += 4;\n    writeUint(data, offset, tabs.pHYs[1]);\n    offset += 4;\n    data[offset++] = tabs.pHYs[2];\n    writeUint(data, offset, crc(data, offset - 13, 13));\n    offset += 4;\n  }\n\n  if (anim) {\n    writeUint(data, offset, 8);\n    offset += 4;\n    writeASCII(data, offset, 'acTL');\n    offset += 4;\n    writeUint(data, offset, nimg.frames.length);\n    offset += 4;\n    writeUint(data, offset, tabs.loop ?? 0);\n    offset += 4;\n    writeUint(data, offset, crc(data, offset - 12, 12));\n    offset += 4;\n  }\n\n  if (nimg.ctype === 3 && nimg.plte) {\n    const dl = nimg.plte.length;\n    writeUint(data, offset, dl * 3);\n    offset += 4;\n    writeASCII(data, offset, 'PLTE');\n    offset += 4;\n    for (let i = 0; i < dl; i++) {\n      const ti = i * 3;\n      const c = nimg.plte[i];\n      data[offset + ti] = c & 255;\n      data[offset + ti + 1] = (c >>> 8) & 255;\n      data[offset + ti + 2] = (c >>> 16) & 255;\n    }\n    offset += dl * 3;\n    writeUint(data, offset, crc(data, offset - dl * 3 - 4, dl * 3 + 4));\n    offset += 4;\n\n    if (pltAlpha) {\n      writeUint(data, offset, dl);\n      offset += 4;\n      writeASCII(data, offset, 'tRNS');\n      offset += 4;\n      for (let i = 0; i < dl; i++) {\n        data[offset + i] = (nimg.plte[i] >>> 24) & 255;\n      }\n      offset += dl;\n      writeUint(data, offset, crc(data, offset - dl - 4, dl + 4));\n      offset += 4;\n    }\n  }\n\n  let fi = 0;\n  for (let j = 0; j < nimg.frames.length; j++) {\n    const fr = nimg.frames[j];\n    if (anim) {\n      writeUint(data, offset, 26);\n      offset += 4;\n      writeASCII(data, offset, 'fcTL');\n      offset += 4;\n      writeUint(data, offset, fi++);\n      offset += 4;\n      writeUint(data, offset, fr.rect.width);\n      offset += 4;\n      writeUint(data, offset, fr.rect.height);\n      offset += 4;\n      writeUint(data, offset, fr.rect.x);\n      offset += 4;\n      writeUint(data, offset, fr.rect.y);\n      offset += 4;\n      writeUshort(data, offset, dels?.[j] ?? 0);\n      offset += 2;\n      writeUshort(data, offset, 1000);\n      offset += 2;\n      data[offset++] = fr.dispose;\n      data[offset++] = fr.blend;\n      writeUint(data, offset, crc(data, offset - 30, 30));\n      offset += 4;\n    }\n\n    const imgd = fr.cimg!;\n    const dl = imgd.length;\n    writeUint(data, offset, dl + (j === 0 ? 0 : 4));\n    offset += 4;\n    const ioff = offset;\n    writeASCII(data, offset, j === 0 ? 'IDAT' : 'fdAT');\n    offset += 4;\n    if (j !== 0) {\n      writeUint(data, offset, fi++);\n      offset += 4;\n    }\n    data.set(imgd, offset);\n    offset += dl;\n    writeUint(data, offset, crc(data, ioff, offset - ioff));\n    offset += 4;\n  }\n\n  writeUint(data, offset, 0);\n  offset += 4;\n  writeASCII(data, offset, 'IEND');\n  offset += 4;\n  writeUint(data, offset, crc(data, offset - 4, 4));\n  offset += 4;\n\n  return data.buffer;\n}\n\nfunction packIndexed(\n  inds: Uint8Array,\n  nw: number,\n  nh: number,\n  depth: number,\n): Uint8Array {\n  const bpl = Math.ceil((depth * nw) / 8);\n  const nimg = new Uint8Array(bpl * nh);\n  for (let y = 0; y < nh; y++) {\n    const i = y * bpl;\n    const ii = y * nw;\n    if (depth === 8) {\n      for (let x = 0; x < nw; x++) nimg[i + x] = inds[ii + x];\n    } else if (depth === 4) {\n      for (let x = 0; x < nw; x++) {\n        nimg[i + (x >> 1)] |= inds[ii + x] << (4 - (x & 1) * 4);\n      }\n    } else if (depth === 2) {\n      for (let x = 0; x < nw; x++) {\n        nimg[i + (x >> 2)] |= inds[ii + x] << (6 - (x & 3) * 2);\n      }\n    } else if (depth === 1) {\n      for (let x = 0; x < nw; x++) {\n        nimg[i + (x >> 3)] |= inds[ii + x] << (7 - (x & 7));\n      }\n    }\n  }\n  return nimg;\n}\n\n/**\n * Compression parameters: `[onlyBlend, evenCrd, forbidPrev, minBits,\n * forbidPlte, dither]`.\n */\nexport type CompressParams = [\n  boolean,\n  boolean,\n  boolean,\n  number,\n  boolean,\n  boolean,\n];\n\n/**\n * Build an `EncodeImage` from RGBA8 frame buffers.\n *\n * `ps` is the maximum palette size: 0 keeps the image lossless (an indexed\n * PNG is still produced when the frames hold \u2264 256 colors), anything else\n * quantizes the frames down to `ps` colors.\n */\nexport function compress(\n  bufs: ArrayBuffer[],\n  w: number,\n  h: number,\n  ps: number,\n  prms: CompressParams,\n): EncodeImage {\n  const [onlyBlend, evenCrd, forbidPrev, minBits, forbidPlte, dith] = prms;\n\n  let ctype = 6;\n  let depth = 8;\n  let alphaAnd = 255;\n\n  for (let j = 0; j < bufs.length; j++) {\n    const img = new Uint8Array(bufs[j]);\n    for (let i = 0; i < img.length; i += 4) alphaAnd &= img[i + 3];\n  }\n  const gotAlpha = alphaAnd !== 255;\n\n  const frms = framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev);\n\n  const plte: number[] = [];\n  const inds: Uint8Array[] = [];\n\n  if (ps !== 0) {\n    const nbufs: ArrayBuffer[] = [];\n    for (let i = 0; i < frms.length; i++) {\n      nbufs.push(frms[i].img.buffer as ArrayBuffer);\n    }\n    const qres = quantize(concatRGBA(nbufs), ps);\n    for (let i = 0; i < qres.plte.length; i++) plte.push(qres.plte[i].est.rgba);\n\n    let cof = 0;\n    for (let i = 0; i < frms.length; i++) {\n      const frm = frms[i];\n      const bln = frm.img.length;\n      const ind = new Uint8Array(qres.inds.buffer, cof >> 2, bln >> 2);\n      inds.push(ind);\n      const bb = new Uint8Array(qres.abuf, cof, bln);\n\n      if (dith) {\n        dither(frm.img, frm.rect.width, frm.rect.height, plte, bb, ind);\n      }\n      frm.img.set(bb);\n      cof += bln;\n    }\n  } else {\n    // Even without quantization the palette may still be usable; later frames\n    // can hold colors that are missing from the first one.\n    const cmap = new Map<number, number>();\n    for (let j = 0; j < frms.length; j++) {\n      const frm = frms[j];\n      const img32 = new Uint32Array(frm.img.buffer);\n      const nw = frm.rect.width;\n      const ilen = img32.length;\n      const ind = new Uint8Array(ilen);\n      inds.push(ind);\n      for (let i = 0; i < ilen; i++) {\n        const c = img32[i];\n        if (i !== 0 && c === img32[i - 1]) ind[i] = ind[i - 1];\n        else if (i > nw && c === img32[i - nw]) ind[i] = ind[i - nw];\n        else {\n          let cmc = cmap.get(c);\n          if (cmc === undefined) {\n            cmc = plte.length;\n            cmap.set(c, cmc);\n            plte.push(c);\n            if (plte.length >= 300) break;\n          }\n          ind[i] = cmc;\n        }\n      }\n    }\n  }\n\n  const cc = plte.length;\n  const usePlte = cc <= 256 && !forbidPlte;\n  if (usePlte) {\n    if (cc <= 2) depth = 1;\n    else if (cc <= 4) depth = 2;\n    else if (cc <= 16) depth = 4;\n    else depth = 8;\n    depth = Math.max(depth, minBits);\n  }\n\n  const frames: EncodeFrame[] = [];\n  for (let j = 0; j < frms.length; j++) {\n    const frm = frms[j];\n    const nw = frm.rect.width;\n    const nh = frm.rect.height;\n    let cimg = frm.img;\n    let bpl = 4 * nw;\n    let bpp = 4;\n\n    if (usePlte) {\n      bpl = Math.ceil((depth * nw) / 8);\n      cimg = packIndexed(inds[j], nw, nh, depth);\n      ctype = 3;\n      bpp = 1;\n    } else if (!gotAlpha && frms.length === 1) {\n      // Later \"reduced\" frames may still carry alpha for blending.\n      const nimg = new Uint8Array(nw * nh * 3);\n      const area = nw * nh;\n      for (let i = 0; i < area; i++) {\n        const ti = i * 3;\n        const qi = i * 4;\n        nimg[ti] = cimg[qi];\n        nimg[ti + 1] = cimg[qi + 1];\n        nimg[ti + 2] = cimg[qi + 2];\n      }\n      cimg = nimg;\n      ctype = 2;\n      bpp = 3;\n      bpl = 3 * nw;\n    }\n\n    frames.push({\n      rect: frm.rect,\n      img: cimg,\n      blend: frm.blend,\n      dispose: frm.dispose,\n      bpp,\n      bpl,\n    });\n  }\n\n  return { ctype, depth, plte, frames };\n}\n\n/**\n * Encode RGBA8 frame buffers as a PNG / APNG.\n *\n * `cnum` is the palette size: 0 (default) encodes losslessly, any other\n * value quantizes the image to at most `cnum` colors.\n */\nexport function encode(\n  imgs: ArrayBuffer[],\n  w: number,\n  h: number,\n  cnum = 0,\n  dels?: number[],\n  tabs?: ImageTabs,\n  forbidPlte = false,\n): ArrayBuffer {\n  const nimg = compress(imgs, w, h, cnum, [\n    false,\n    false,\n    false,\n    0,\n    forbidPlte,\n    false,\n  ]);\n  compressPNG(nimg, -1);\n  return writePNG(nimg, w, h, dels, tabs);\n}\n\n/**\n * Lossless encode of raw sample buffers (`cc` color + `ac` alpha channels).\n */\nexport function encodeLL(\n  imgs: ArrayBuffer[],\n  w: number,\n  h: number,\n  cc: number,\n  ac: number,\n  depth: number,\n  dels?: number[],\n  tabs?: ImageTabs,\n): ArrayBuffer {\n  const nimg: EncodeImage = {\n    ctype: 0 + (cc === 1 ? 0 : 2) + (ac === 0 ? 0 : 4),\n    depth,\n    frames: [],\n  };\n\n  const bipp = (cc + ac) * depth;\n  const bipl = bipp * w;\n  for (let i = 0; i < imgs.length; i++) {\n    nimg.frames.push({\n      rect: { x: 0, y: 0, width: w, height: h },\n      img: new Uint8Array(imgs[i]),\n      blend: 0,\n      dispose: 1,\n      bpp: Math.ceil(bipp / 8),\n      bpl: Math.ceil(bipl / 8),\n    });\n  }\n\n  compressPNG(nimg, 0, true);\n  return writePNG(nimg, w, h, dels, tabs);\n}\n", "import { readUshort } from './binary';\nimport { getBPP } from './filter';\nimport type { Image } from './types';\n\n/**\n * Copy / blend a tile of RGBA pixels.\n * mode 0: overwrite, 1: over blend, 2: keep diffs else zero, 3: blendability check.\n */\nexport function copyTile(\n  sb: Uint8Array,\n  sw: number,\n  sh: number,\n  tb: Uint8Array,\n  tw: number,\n  th: number,\n  xoff: number,\n  yoff: number,\n  mode: number,\n): boolean {\n  const w = Math.min(sw, tw);\n  const h = Math.min(sh, th);\n\n  for (let y = 0; y < h; y++) {\n    for (let x = 0; x < w; x++) {\n      let si: number;\n      let ti: number;\n      if (xoff >= 0 && yoff >= 0) {\n        si = (y * sw + x) << 2;\n        ti = ((yoff + y) * tw + xoff + x) << 2;\n      } else {\n        si = ((-yoff + y) * sw - xoff + x) << 2;\n        ti = (y * tw + x) << 2;\n      }\n\n      if (mode === 0) {\n        tb[ti] = sb[si];\n        tb[ti + 1] = sb[si + 1];\n        tb[ti + 2] = sb[si + 2];\n        tb[ti + 3] = sb[si + 3];\n      } else if (mode === 1) {\n        const fa = sb[si + 3] * (1 / 255);\n        const fr = sb[si] * fa;\n        const fg = sb[si + 1] * fa;\n        const fb = sb[si + 2] * fa;\n        const ba = tb[ti + 3] * (1 / 255);\n        const br = tb[ti] * ba;\n        const bg = tb[ti + 1] * ba;\n        const bb = tb[ti + 2] * ba;\n\n        const ifa = 1 - fa;\n        const oa = fa + ba * ifa;\n        const ioa = oa === 0 ? 0 : 1 / oa;\n        tb[ti + 3] = 255 * oa;\n        tb[ti] = (fr + br * ifa) * ioa;\n        tb[ti + 1] = (fg + bg * ifa) * ioa;\n        tb[ti + 2] = (fb + bb * ifa) * ioa;\n      } else if (mode === 2) {\n        const fa = sb[si + 3];\n        const fr = sb[si];\n        const fg = sb[si + 1];\n        const fb = sb[si + 2];\n        const ba = tb[ti + 3];\n        const br = tb[ti];\n        const bg = tb[ti + 1];\n        const bb = tb[ti + 2];\n        if (fa === ba && fr === br && fg === bg && fb === bb) {\n          tb[ti] = 0;\n          tb[ti + 1] = 0;\n          tb[ti + 2] = 0;\n          tb[ti + 3] = 0;\n        } else {\n          tb[ti] = fr;\n          tb[ti + 1] = fg;\n          tb[ti + 2] = fb;\n          tb[ti + 3] = fa;\n        }\n      } else if (mode === 3) {\n        const fa = sb[si + 3];\n        const fr = sb[si];\n        const fg = sb[si + 1];\n        const fb = sb[si + 2];\n        const ba = tb[ti + 3];\n        const br = tb[ti];\n        const bg = tb[ti + 1];\n        const bb = tb[ti + 2];\n        if (fa === ba && fr === br && fg === bg && fb === bb) continue;\n        if (fa < 220 && ba > 20) return false;\n      }\n    }\n  }\n  return true;\n}\n\n/** Expand raw decoded samples to RGBA8 (one frame / region). */\nexport function decodeImage(\n  data: Uint8Array,\n  w: number,\n  h: number,\n  out: Image,\n): Uint8Array {\n  const area = w * h;\n  const bpp = getBPP(out);\n  const bpl = Math.ceil((w * bpp) / 8);\n\n  const bf = new Uint8Array(area * 4);\n  const bf32 = new Uint32Array(bf.buffer);\n  const ctype = out.ctype;\n  const depth = out.depth;\n\n  if (ctype === 6) {\n    const qarea = area << 2;\n    if (depth === 8) {\n      for (let i = 0; i < qarea; i += 4) {\n        bf[i] = data[i];\n        bf[i + 1] = data[i + 1];\n        bf[i + 2] = data[i + 2];\n        bf[i + 3] = data[i + 3];\n      }\n    }\n    if (depth === 16) {\n      for (let i = 0; i < qarea; i++) bf[i] = data[i << 1];\n    }\n  } else if (ctype === 2) {\n    const ts = out.tabs.tRNS as number[] | undefined;\n    if (ts === undefined) {\n      if (depth === 8) {\n        for (let i = 0; i < area; i++) {\n          const ti = i * 3;\n          bf32[i] =\n            (255 << 24) | (data[ti + 2] << 16) | (data[ti + 1] << 8) | data[ti];\n        }\n      }\n      if (depth === 16) {\n        for (let i = 0; i < area; i++) {\n          const ti = i * 6;\n          bf32[i] =\n            (255 << 24) | (data[ti + 4] << 16) | (data[ti + 2] << 8) | data[ti];\n        }\n      }\n    } else {\n      const tr = ts[0];\n      const tg = ts[1];\n      const tb = ts[2];\n      if (depth === 8) {\n        for (let i = 0; i < area; i++) {\n          const qi = i << 2;\n          const ti = i * 3;\n          bf32[i] =\n            (255 << 24) | (data[ti + 2] << 16) | (data[ti + 1] << 8) | data[ti];\n          if (data[ti] === tr && data[ti + 1] === tg && data[ti + 2] === tb) {\n            bf[qi + 3] = 0;\n          }\n        }\n      }\n      if (depth === 16) {\n        for (let i = 0; i < area; i++) {\n          const qi = i << 2;\n          const ti = i * 6;\n          bf32[i] =\n            (255 << 24) | (data[ti + 4] << 16) | (data[ti + 2] << 8) | data[ti];\n          if (\n            readUshort(data, ti) === tr &&\n            readUshort(data, ti + 2) === tg &&\n            readUshort(data, ti + 4) === tb\n          ) {\n            bf[qi + 3] = 0;\n          }\n        }\n      }\n    }\n  } else if (ctype === 3) {\n    const p = out.tabs.PLTE!;\n    const ap = out.tabs.tRNS as number[] | undefined;\n    const tl = ap ? ap.length : 0;\n    if (depth === 1) {\n      for (let y = 0; y < h; y++) {\n        const s0 = y * bpl;\n        const t0 = y * w;\n        for (let i = 0; i < w; i++) {\n          const qi = (t0 + i) << 2;\n          const j = (data[s0 + (i >> 3)] >> (7 - (i & 7))) & 1;\n          const cj = 3 * j;\n          bf[qi] = p[cj];\n          bf[qi + 1] = p[cj + 1];\n          bf[qi + 2] = p[cj + 2];\n          bf[qi + 3] = j < tl ? ap![j] : 255;\n        }\n      }\n    }\n    if (depth === 2) {\n      for (let y = 0; y < h; y++) {\n        const s0 = y * bpl;\n        const t0 = y * w;\n        for (let i = 0; i < w; i++) {\n          const qi = (t0 + i) << 2;\n          const j = (data[s0 + (i >> 2)] >> (6 - ((i & 3) << 1))) & 3;\n          const cj = 3 * j;\n          bf[qi] = p[cj];\n          bf[qi + 1] = p[cj + 1];\n          bf[qi + 2] = p[cj + 2];\n          bf[qi + 3] = j < tl ? ap![j] : 255;\n        }\n      }\n    }\n    if (depth === 4) {\n      for (let y = 0; y < h; y++) {\n        const s0 = y * bpl;\n        const t0 = y * w;\n        for (let i = 0; i < w; i++) {\n          const qi = (t0 + i) << 2;\n          const j = (data[s0 + (i >> 1)] >> (4 - ((i & 1) << 2))) & 15;\n          const cj = 3 * j;\n          bf[qi] = p[cj];\n          bf[qi + 1] = p[cj + 1];\n          bf[qi + 2] = p[cj + 2];\n          bf[qi + 3] = j < tl ? ap![j] : 255;\n        }\n      }\n    }\n    if (depth === 8) {\n      for (let i = 0; i < area; i++) {\n        const qi = i << 2;\n        const j = data[i];\n        const cj = 3 * j;\n        bf[qi] = p[cj];\n        bf[qi + 1] = p[cj + 1];\n        bf[qi + 2] = p[cj + 2];\n        bf[qi + 3] = j < tl ? ap![j] : 255;\n      }\n    }\n  } else if (ctype === 4) {\n    if (depth === 8) {\n      for (let i = 0; i < area; i++) {\n        const qi = i << 2;\n        const di = i << 1;\n        const gr = data[di];\n        bf[qi] = gr;\n        bf[qi + 1] = gr;\n        bf[qi + 2] = gr;\n        bf[qi + 3] = data[di + 1];\n      }\n    }\n    if (depth === 16) {\n      for (let i = 0; i < area; i++) {\n        const qi = i << 2;\n        const di = i << 2;\n        const gr = data[di];\n        bf[qi] = gr;\n        bf[qi + 1] = gr;\n        bf[qi + 2] = gr;\n        bf[qi + 3] = data[di + 2];\n      }\n    }\n  } else if (ctype === 0) {\n    const tr = out.tabs.tRNS !== undefined ? (out.tabs.tRNS as number) : -1;\n    for (let y = 0; y < h; y++) {\n      const off = y * bpl;\n      const to = y * w;\n      if (depth === 1) {\n        for (let x = 0; x < w; x++) {\n          const gr = 255 * ((data[off + (x >>> 3)] >>> (7 - (x & 7))) & 1);\n          const al = gr === tr * 255 ? 0 : 255;\n          bf32[to + x] = (al << 24) | (gr << 16) | (gr << 8) | gr;\n        }\n      } else if (depth === 2) {\n        for (let x = 0; x < w; x++) {\n          const gr =\n            85 * ((data[off + (x >>> 2)] >>> (6 - ((x & 3) << 1))) & 3);\n          const al = gr === tr * 85 ? 0 : 255;\n          bf32[to + x] = (al << 24) | (gr << 16) | (gr << 8) | gr;\n        }\n      } else if (depth === 4) {\n        for (let x = 0; x < w; x++) {\n          const gr =\n            17 * ((data[off + (x >>> 1)] >>> (4 - ((x & 1) << 2))) & 15);\n          const al = gr === tr * 17 ? 0 : 255;\n          bf32[to + x] = (al << 24) | (gr << 16) | (gr << 8) | gr;\n        }\n      } else if (depth === 8) {\n        for (let x = 0; x < w; x++) {\n          const gr = data[off + x];\n          const al = gr === tr ? 0 : 255;\n          bf32[to + x] = (al << 24) | (gr << 16) | (gr << 8) | gr;\n        }\n      } else if (depth === 16) {\n        for (let x = 0; x < w; x++) {\n          const gr = data[off + (x << 1)];\n          const al = readUshort(data, off + (x << 1)) === tr ? 0 : 255;\n          bf32[to + x] = (al << 24) | (gr << 16) | (gr << 8) | gr;\n        }\n      }\n    }\n  }\n\n  return bf;\n}\n\n/**\n * Convert a decoded image to one RGBA8 `ArrayBuffer` per frame.\n * Static PNGs return a single-element array.\n */\nexport function toRGBA8(out: Image): ArrayBuffer[] {\n  const w = out.width;\n  const h = out.height;\n  if (out.tabs.acTL === undefined) {\n    return [decodeImage(out.data, w, h, out).buffer as ArrayBuffer];\n  }\n\n  const frms: ArrayBuffer[] = [];\n  if (out.frames[0].data === undefined) out.frames[0].data = out.data;\n\n  const len = w * h * 4;\n  const img = new Uint8Array(len);\n  const empty = new Uint8Array(len);\n  const prev = new Uint8Array(len);\n\n  for (let i = 0; i < out.frames.length; i++) {\n    const frm = out.frames[i];\n    const fx = frm.rect.x;\n    const fy = frm.rect.y;\n    const fw = frm.rect.width;\n    const fh = frm.rect.height;\n    const fdata = decodeImage(frm.data!, fw, fh, out);\n\n    if (i !== 0) for (let j = 0; j < len; j++) prev[j] = img[j];\n\n    if (frm.blend === 0) copyTile(fdata, fw, fh, img, w, h, fx, fy, 0);\n    else if (frm.blend === 1) copyTile(fdata, fw, fh, img, w, h, fx, fy, 1);\n\n    frms.push(img.buffer.slice(0));\n\n    if (frm.dispose === 1) {\n      copyTile(empty, fw, fh, img, w, h, fx, fy, 0);\n    } else if (frm.dispose === 2) {\n      for (let j = 0; j < len; j++) img[j] = prev[j];\n    }\n  }\n  return frms;\n}\n", "import { copyTile } from './rgba';\nimport type { ImageFrameRect } from './types';\n\n/**\n * An APNG frame reduced to its changed region.\n *\n * `dispose`: 0 = no change, 1 = clear to transparent, 2 = restore previous.\n * `blend`: 0 = replace, 1 = blend over.\n */\nexport interface FramizeFrame {\n  rect: ImageFrameRect;\n  img: Uint8Array;\n  blend: number;\n  dispose: number;\n}\n\nfunction prepareDiff(\n  cimg: Uint8Array,\n  w: number,\n  h: number,\n  nimg: Uint8Array,\n  rec: ImageFrameRect,\n): void {\n  copyTile(cimg, w, h, nimg, rec.width, rec.height, -rec.x, -rec.y, 2);\n}\n\nfunction updateFrame(\n  bufs: ArrayBuffer[],\n  w: number,\n  h: number,\n  frms: FramizeFrame[],\n  i: number,\n  r: ImageFrameRect,\n  evenCrd: boolean,\n): void {\n  const pimg = new Uint8Array(bufs[i - 1]);\n  const pimg32 = new Uint32Array(bufs[i - 1]);\n  const nimg = i + 1 < bufs.length ? new Uint8Array(bufs[i + 1]) : null;\n  const cimg = new Uint8Array(bufs[i]);\n  const cimg32 = new Uint32Array(cimg.buffer);\n\n  let mix = w;\n  let miy = h;\n  let max = -1;\n  let may = -1;\n  for (let y = 0; y < r.height; y++) {\n    for (let x = 0; x < r.width; x++) {\n      const cx = r.x + x;\n      const cy = r.y + y;\n      const j = cy * w + cx;\n      const cc = cimg32[j];\n      // Transparency needs neither drawing nor disposing; nor does an\n      // unchanged color when the next frame does not need transparency there.\n      const skip =\n        cc === 0 ||\n        (frms[i - 1].dispose === 0 &&\n          pimg32[j] === cc &&\n          (nimg === null || nimg[j * 4 + 3] !== 0));\n      if (skip) continue;\n      if (cx < mix) mix = cx;\n      if (cx > max) max = cx;\n      if (cy < miy) miy = cy;\n      if (cy > may) may = cy;\n    }\n  }\n  if (max === -1) mix = miy = max = may = 0;\n  if (evenCrd) {\n    if ((mix & 1) === 1) mix--;\n    if ((miy & 1) === 1) miy--;\n  }\n  const nr = { x: mix, y: miy, width: max - mix + 1, height: may - miy + 1 };\n\n  const fr = frms[i];\n  fr.rect = nr;\n  fr.blend = 1;\n  fr.img = new Uint8Array(nr.width * nr.height * 4);\n  if (frms[i - 1].dispose === 0) {\n    copyTile(pimg, w, h, fr.img, nr.width, nr.height, -nr.x, -nr.y, 0);\n    prepareDiff(cimg, w, h, fr.img, nr);\n  } else {\n    copyTile(cimg, w, h, fr.img, nr.width, nr.height, -nr.x, -nr.y, 0);\n  }\n}\n\n/**\n * Split a sequence of full RGBA8 frames into minimal APNG frames, picking\n * the smallest changed rectangle and a blend / dispose strategy per frame.\n */\nexport function framize(\n  bufs: ArrayBuffer[],\n  w: number,\n  h: number,\n  alwaysBlend: boolean,\n  evenCrd: boolean,\n  forbidPrev: boolean,\n): FramizeFrame[] {\n  const frms: FramizeFrame[] = [];\n\n  for (let j = 0; j < bufs.length; j++) {\n    const cimg = new Uint8Array(bufs[j]);\n    const cimg32 = new Uint32Array(cimg.buffer);\n    let nimg: Uint8Array;\n\n    let nx = 0;\n    let ny = 0;\n    let nw = w;\n    let nh = h;\n    let blend = alwaysBlend ? 1 : 0;\n\n    if (j !== 0) {\n      const tlim =\n        forbidPrev || alwaysBlend || j === 1 || frms[j - 2].dispose !== 0\n          ? 1\n          : 2;\n      let tstp = 0;\n      let tarea = 1e9;\n\n      for (let it = 0; it < tlim; it++) {\n        const p32 = new Uint32Array(bufs[j - 1 - it]);\n        let mix = w;\n        let miy = h;\n        let max = -1;\n        let may = -1;\n        for (let y = 0; y < h; y++) {\n          for (let x = 0; x < w; x++) {\n            const i = y * w + x;\n            if (cimg32[i] !== p32[i]) {\n              if (x < mix) mix = x;\n              if (x > max) max = x;\n              if (y < miy) miy = y;\n              if (y > may) may = y;\n            }\n          }\n        }\n        if (max === -1) mix = miy = max = may = 0;\n        if (evenCrd) {\n          if ((mix & 1) === 1) mix--;\n          if ((miy & 1) === 1) miy--;\n        }\n        const sarea = (max - mix + 1) * (may - miy + 1);\n        if (sarea < tarea) {\n          tarea = sarea;\n          tstp = it;\n          nx = mix;\n          ny = miy;\n          nw = max - mix + 1;\n          nh = may - miy + 1;\n        }\n      }\n\n      const pimg = new Uint8Array(bufs[j - 1 - tstp]);\n      if (tstp === 1) frms[j - 1].dispose = 2;\n\n      nimg = new Uint8Array(nw * nh * 4);\n      copyTile(pimg, w, h, nimg, nw, nh, -nx, -ny, 0);\n\n      blend = copyTile(cimg, w, h, nimg, nw, nh, -nx, -ny, 3) ? 1 : 0;\n      if (blend === 1) {\n        prepareDiff(cimg, w, h, nimg, { x: nx, y: ny, width: nw, height: nh });\n      } else {\n        copyTile(cimg, w, h, nimg, nw, nh, -nx, -ny, 0);\n      }\n    } else {\n      // The image may be rewritten further \u2014 don't touch the input.\n      nimg = cimg.slice(0);\n    }\n\n    frms.push({\n      rect: { x: nx, y: ny, width: nw, height: nh },\n      img: nimg,\n      blend,\n      dispose: 0,\n    });\n  }\n\n  if (alwaysBlend) {\n    for (let j = 0; j < frms.length; j++) {\n      const frm = frms[j];\n      if (frm.blend === 1) continue;\n      const r0 = frm.rect;\n      const r1 = frms[j - 1].rect;\n      const miX = Math.min(r0.x, r1.x);\n      const miY = Math.min(r0.y, r1.y);\n      const maX = Math.max(r0.x + r0.width, r1.x + r1.width);\n      const maY = Math.max(r0.y + r0.height, r1.y + r1.height);\n      const r = { x: miX, y: miY, width: maX - miX, height: maY - miY };\n\n      frms[j - 1].dispose = 1;\n      if (j - 1 !== 0) updateFrame(bufs, w, h, frms, j - 1, r, evenCrd);\n      updateFrame(bufs, w, h, frms, j, r, evenCrd);\n    }\n  }\n\n  return frms;\n}\n\n/** Concatenate RGBA8 buffers, zeroing the color of fully transparent pixels. */\nexport function concatRGBA(bufs: ArrayBuffer[]): ArrayBuffer {\n  let tlen = 0;\n  for (let i = 0; i < bufs.length; i++) tlen += bufs[i].byteLength;\n\n  const nimg = new Uint8Array(tlen);\n  let noff = 0;\n  for (let i = 0; i < bufs.length; i++) {\n    const img = new Uint8Array(bufs[i]);\n    const il = img.length;\n    for (let j = 0; j < il; j += 4) {\n      let r = img[j];\n      let g = img[j + 1];\n      let b = img[j + 2];\n      const a = img[j + 3];\n      if (a === 0) r = g = b = 0;\n      nimg[noff + j] = r;\n      nimg[noff + j + 1] = g;\n      nimg[noff + j + 2] = b;\n      nimg[noff + j + 3] = a;\n    }\n    noff += il;\n  }\n  return nimg.buffer;\n}\n", "import type { QuantizeResult } from './types';\n\n/** Raw second-moment accumulators for a set of RGBA samples. */\ninterface Stats {\n  R: number[];\n  m: number[];\n  N: number;\n}\n\n/** Derived statistics: covariance, mean, principal axis and palette color. */\ninterface EStats {\n  Cov: number[];\n  q: number[];\n  e: number[];\n  L: number;\n  eMq255: number;\n  eMq: number;\n  rgba: number;\n}\n\n/** Node of the color-space KD-tree; leaves become palette entries. */\nexport interface KDNode {\n  i0: number;\n  i1: number;\n  bst: Stats;\n  est: EStats;\n  tdst: number;\n  ind: number;\n  left: KDNode | null;\n  right: KDNode | null;\n}\n\nconst M4 = {\n  multVec(m: number[], v: number[]): number[] {\n    return [\n      m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * v[3],\n      m[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7] * v[3],\n      m[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11] * v[3],\n      m[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15] * v[3],\n    ];\n  },\n  dot(x: number[], y: number[]): number {\n    return x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3];\n  },\n  sml(a: number, y: number[]): number[] {\n    return [a * y[0], a * y[1], a * y[2], a * y[3]];\n  },\n};\n\nfunction stats(nimg: Uint8Array, i0: number, i1: number): Stats {\n  const R = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n  const m = [0, 0, 0, 0];\n  const N = (i1 - i0) >> 2;\n\n  for (let i = i0; i < i1; i += 4) {\n    const r = nimg[i] * (1 / 255);\n    const g = nimg[i + 1] * (1 / 255);\n    const b = nimg[i + 2] * (1 / 255);\n    const a = nimg[i + 3] * (1 / 255);\n    m[0] += r;\n    m[1] += g;\n    m[2] += b;\n    m[3] += a;\n\n    R[0] += r * r;\n    R[1] += r * g;\n    R[2] += r * b;\n    R[3] += r * a;\n    R[5] += g * g;\n    R[6] += g * b;\n    R[7] += g * a;\n    R[10] += b * b;\n    R[11] += b * a;\n    R[15] += a * a;\n  }\n  R[4] = R[1];\n  R[8] = R[2];\n  R[9] = R[6];\n  R[12] = R[3];\n  R[13] = R[7];\n  R[14] = R[11];\n\n  return { R, m, N };\n}\n\nfunction estats(st: Stats): EStats {\n  const R = st.R;\n  const m = st.m;\n  const N = st.N;\n\n  // When all samples are equal but N is large, Rj can be non-zero (precision).\n  const m0 = m[0];\n  const m1 = m[1];\n  const m2 = m[2];\n  const m3 = m[3];\n  const iN = N === 0 ? 0 : 1 / N;\n  const Rj = [\n    R[0] - m0 * m0 * iN,\n    R[1] - m0 * m1 * iN,\n    R[2] - m0 * m2 * iN,\n    R[3] - m0 * m3 * iN,\n    R[4] - m1 * m0 * iN,\n    R[5] - m1 * m1 * iN,\n    R[6] - m1 * m2 * iN,\n    R[7] - m1 * m3 * iN,\n    R[8] - m2 * m0 * iN,\n    R[9] - m2 * m1 * iN,\n    R[10] - m2 * m2 * iN,\n    R[11] - m2 * m3 * iN,\n    R[12] - m3 * m0 * iN,\n    R[13] - m3 * m1 * iN,\n    R[14] - m3 * m2 * iN,\n    R[15] - m3 * m3 * iN,\n  ];\n\n  // Power iteration for the dominant eigenvector of the covariance matrix.\n  let b = [Math.random(), Math.random(), Math.random(), Math.random()];\n  let mi = 0;\n  let tmi = 0;\n  if (N !== 0) {\n    for (let i = 0; i < 16; i++) {\n      b = M4.multVec(Rj, b);\n      tmi = Math.sqrt(M4.dot(b, b));\n      b = M4.sml(1 / tmi, b);\n      if (i !== 0 && Math.abs(tmi - mi) < 1e-9) break;\n      mi = tmi;\n    }\n  }\n\n  const q = [m0 * iN, m1 * iN, m2 * iN, m3 * iN];\n  const eMq255 = M4.dot(M4.sml(255, q), b);\n\n  return {\n    Cov: Rj,\n    q,\n    e: b,\n    L: mi,\n    eMq255,\n    eMq: M4.dot(b, q),\n    rgba:\n      ((Math.round(255 * q[3]) << 24) |\n        (Math.round(255 * q[2]) << 16) |\n        (Math.round(255 * q[1]) << 8) |\n        Math.round(255 * q[0])) >>>\n      0,\n  };\n}\n\nfunction vecDot(nimg: Uint8Array, i: number, e: number[]): number {\n  return (\n    nimg[i] * e[0] +\n    nimg[i + 1] * e[1] +\n    nimg[i + 2] * e[2] +\n    nimg[i + 3] * e[3]\n  );\n}\n\n/** Partition samples in place around the plane `e\u00B7x = eMq`; returns the split. */\nfunction splitPixels(\n  nimg: Uint8Array,\n  nimg32: Uint32Array,\n  i0: number,\n  i1: number,\n  e: number[],\n  eMq: number,\n): number {\n  i1 -= 4;\n  while (i0 < i1) {\n    while (vecDot(nimg, i0, e) <= eMq) i0 += 4;\n    while (vecDot(nimg, i1, e) > eMq) i1 -= 4;\n    if (i0 >= i1) break;\n\n    const t = nimg32[i0 >> 2];\n    nimg32[i0 >> 2] = nimg32[i1 >> 2];\n    nimg32[i1 >> 2] = t;\n\n    i0 += 4;\n    i1 -= 4;\n  }\n  while (vecDot(nimg, i0, e) > eMq) i0 -= 4;\n  return i0 + 4;\n}\n\nfunction planeDst(\n  est: EStats,\n  r: number,\n  g: number,\n  b: number,\n  a: number,\n): number {\n  const e = est.e;\n  return e[0] * r + e[1] * g + e[2] * b + e[3] * a - est.eMq;\n}\n\nfunction dist(q: number[], r: number, g: number, b: number, a: number): number {\n  const d0 = r - q[0];\n  const d1 = g - q[1];\n  const d2 = b - q[2];\n  const d3 = a - q[3];\n  return d0 * d0 + d1 * d1 + d2 * d2 + d3 * d3;\n}\n\nfunction makeNode(i0: number, i1: number, bst: Stats): KDNode {\n  return {\n    i0,\n    i1,\n    bst,\n    est: estats(bst),\n    tdst: 0,\n    ind: 0,\n    left: null,\n    right: null,\n  };\n}\n\n/**\n * Build a KD-tree over `nimg` (reordered in place) with up to `ps` leaves.\n * Returns the root and the leaves sorted by descending pixel count.\n */\nexport function getKDtree(\n  nimg: Uint8Array,\n  ps: number,\n  err = 0.0001,\n): [KDNode, KDNode[]] {\n  const nimg32 = new Uint32Array(nimg.buffer);\n\n  const root = makeNode(0, nimg.length, stats(nimg, 0, nimg.length));\n  const leafs: KDNode[] = [root];\n\n  while (leafs.length < ps) {\n    let maxL = 0;\n    let mi = 0;\n    for (let i = 0; i < leafs.length; i++) {\n      if (leafs[i].est.L > maxL) {\n        maxL = leafs[i].est.L;\n        mi = i;\n      }\n    }\n    if (maxL < err) break;\n    const node = leafs[mi];\n\n    const s0 = splitPixels(\n      nimg,\n      nimg32,\n      node.i0,\n      node.i1,\n      node.est.e,\n      node.est.eMq255,\n    );\n    if (node.i0 >= s0 || node.i1 <= s0) {\n      node.est.L = 0;\n      continue;\n    }\n\n    const ln = makeNode(node.i0, s0, stats(nimg, node.i0, s0));\n\n    const rbst: Stats = { R: [], m: [], N: node.bst.N - ln.bst.N };\n    for (let i = 0; i < 16; i++) rbst.R[i] = node.bst.R[i] - ln.bst.R[i];\n    for (let i = 0; i < 4; i++) rbst.m[i] = node.bst.m[i] - ln.bst.m[i];\n    const rn = makeNode(s0, node.i1, rbst);\n\n    node.left = ln;\n    node.right = rn;\n    leafs[mi] = ln;\n    leafs.push(rn);\n  }\n\n  leafs.sort((a, b) => b.bst.N - a.bst.N);\n  for (let i = 0; i < leafs.length; i++) leafs[i].ind = i;\n  return [root, leafs];\n}\n\n/** Exact nearest leaf lookup with plane-distance pruning. */\nexport function getNearest(\n  nd: KDNode,\n  r: number,\n  g: number,\n  b: number,\n  a: number,\n): KDNode {\n  if (nd.left === null) {\n    nd.tdst = dist(nd.est.q, r, g, b, a);\n    return nd;\n  }\n  const pd = planeDst(nd.est, r, g, b, a);\n\n  let node0 = nd.left;\n  let node1 = nd.right!;\n  if (pd > 0) {\n    node0 = nd.right!;\n    node1 = nd.left;\n  }\n\n  const ln = getNearest(node0, r, g, b, a);\n  if (ln.tdst <= pd * pd) return ln;\n  const rn = getNearest(node1, r, g, b, a);\n  return rn.tdst < ln.tdst ? rn : ln;\n}\n\nfunction remap(inds: Uint8Array, tb32: Uint32Array, pl32: Uint32Array): void {\n  for (let i = 0; i < inds.length; i++) tb32[i] = pl32[inds[i]];\n}\n\nfunction updatePalette(\n  sb: Uint8Array,\n  inds: Uint8Array,\n  plte: Uint8Array,\n): void {\n  const K = plte.length >>> 2;\n  const sums = new Uint32Array(K * 4);\n  const cnts = new Uint32Array(K);\n\n  for (let i = 0; i < sb.length; i += 4) {\n    const ind = inds[i >>> 2];\n    const qi = ind * 4;\n    cnts[ind]++;\n    sums[qi] += sb[i];\n    sums[qi + 1] += sb[i + 1];\n    sums[qi + 2] += sb[i + 2];\n    sums[qi + 3] += sb[i + 3];\n  }\n  for (let i = 0; i < plte.length; i++) {\n    plte[i] = Math.round(sums[i] / cnts[i >>> 2]);\n  }\n}\n\n/** Assign every sample to its nearest palette color; returns the mean error. */\nexport function findNearest(\n  sb: Uint8Array,\n  inds: Uint8Array,\n  plte: Uint8Array,\n): number {\n  let terr = 0;\n  const K = plte.length >>> 2;\n\n  // Squared half-distance to the nearest other palette color.\n  const nd: number[] = [];\n  for (let i = 0; i < K; i++) {\n    const qi = i * 4;\n    const r = plte[qi];\n    const g = plte[qi + 1];\n    const b = plte[qi + 2];\n    const a = plte[qi + 3];\n    let te = 1e9;\n    for (let j = 0; j < K; j++) {\n      if (i === j) continue;\n      const qj = j * 4;\n      const dr = r - plte[qj];\n      const dg = g - plte[qj + 1];\n      const db = b - plte[qj + 2];\n      const da = a - plte[qj + 3];\n      const err = dr * dr + dg * dg + db * db + da * da;\n      if (err < te) te = err;\n    }\n    const hd = Math.sqrt(te) * 0.5;\n    nd[i] = hd * hd;\n  }\n\n  for (let i = 0; i < sb.length; i += 4) {\n    const r = sb[i];\n    const g = sb[i + 1];\n    const b = sb[i + 2];\n    const a = sb[i + 3];\n    let ti = inds[i >>> 2];\n    let qi = ti * 4;\n    let dr = r - plte[qi];\n    let dg = g - plte[qi + 1];\n    let db = b - plte[qi + 2];\n    let da = a - plte[qi + 3];\n    let te = dr * dr + dg * dg + db * db + da * da;\n    if (te > nd[ti]) {\n      for (let j = 0; j < K; j++) {\n        qi = j * 4;\n        dr = r - plte[qi];\n        dg = g - plte[qi + 1];\n        db = b - plte[qi + 2];\n        da = a - plte[qi + 3];\n        const err = dr * dr + dg * dg + db * db + da * da;\n        if (err < te) {\n          te = err;\n          ti = j;\n          if (te < nd[j]) break;\n        }\n      }\n    }\n    inds[i >>> 2] = ti;\n    terr += te;\n  }\n  return terr / (sb.length >>> 2);\n}\n\nfunction kmeans(sb: Uint8Array, inds: Uint8Array, plte: Uint8Array): number {\n  updatePalette(sb, inds, plte);\n  return findNearest(sb, inds, plte);\n}\n\n/**\n * Reduce an RGBA8 buffer to at most `ps` colors using a KD-tree over the\n * color space, optionally refined with k-means.\n *\n * Returns the quantized RGBA buffer, the per-pixel palette indices and the\n * palette itself (leaf nodes, color in `est.rgba`).\n */\nexport function quantize(\n  abuf: ArrayBuffer,\n  ps: number,\n  doKmeans?: boolean,\n): QuantizeResult {\n  const sb = new Uint8Array(abuf);\n  const tb = sb.slice(0);\n  const tb32 = new Uint32Array(tb.buffer);\n\n  const [root, leafs] = getKDtree(tb, ps);\n  const K = leafs.length;\n\n  const cl32 = new Uint32Array(K);\n  const clr8 = new Uint8Array(cl32.buffer);\n  for (let i = 0; i < K; i++) cl32[i] = leafs[i].est.rgba;\n\n  const len = sb.length;\n  const inds = new Uint8Array(len >> 2);\n\n  if (K <= 60) {\n    findNearest(sb, inds, clr8);\n    remap(inds, tb32, cl32);\n  } else if (len < 32e6) {\n    // Precise, but slow.\n    for (let i = 0; i < len; i += 4) {\n      const nd = getNearest(\n        root,\n        sb[i] * (1 / 255),\n        sb[i + 1] * (1 / 255),\n        sb[i + 2] * (1 / 255),\n        sb[i + 3] * (1 / 255),\n      );\n      inds[i >> 2] = nd.ind;\n      tb32[i >> 2] = nd.est.rgba;\n    }\n  } else {\n    for (let i = 0; i < len; i += 4) {\n      const r = sb[i] * (1 / 255);\n      const g = sb[i + 1] * (1 / 255);\n      const b = sb[i + 2] * (1 / 255);\n      const a = sb[i + 3] * (1 / 255);\n      let nd = root;\n      while (nd.left) {\n        nd = planeDst(nd.est, r, g, b, a) <= 0 ? nd.left : nd.right!;\n      }\n      inds[i >> 2] = nd.ind;\n      tb32[i >> 2] = nd.est.rgba;\n    }\n  }\n\n  if (doKmeans || len * K < 10 * 4e6) {\n    let le = 1e9;\n    for (let i = 0; i < 10; i++) {\n      const ce = kmeans(sb, inds, clr8);\n      if (ce / le > 0.997) break;\n      le = ce;\n    }\n    for (let i = 0; i < K; i++) leafs[i].est.rgba = cl32[i];\n    remap(inds, tb32, cl32);\n  }\n\n  return { abuf: tb.buffer as ArrayBuffer, inds, plte: leafs };\n}\n", "import { decode } from './decode';\nimport { dither } from './dither';\nimport { compress, encode, encodeLL } from './encode';\nimport { quantize } from './quantize';\nimport { toRGBA8 } from './rgba';\n\nexport type {\n  Image,\n  ImageFrame,\n  ImageFrameRect,\n  ImageTabACTL,\n  ImageTabs,\n  ImageTabText,\n  QuantizeLeaf,\n  QuantizeResult,\n} from './types';\nexport type { CompressParams } from './encode';\nexport type { FramizeFrame } from './framize';\n\nexport { compress, decode, dither, encode, encodeLL, quantize, toRGBA8 };\n\n/**\n * Default export matching photopea / `@pdf-lib/upng`:\n * `import UPNG from '...'; UPNG.decode(...); UPNG.quantize(...);`\n *\n * The CommonJS build only exposes this object, so `compress` and `dither`\n * are members here as well as named exports.\n */\nconst UPNG = {\n  decode,\n  toRGBA8,\n  encode,\n  encodeLL,\n  quantize,\n  compress,\n  dither,\n};\n\nexport default UPNG;\n"],
  "mappings": "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",
  "names": []
}
