{"version":3,"sources":["../src/enums.ts","../src/palettes.generated.ts","../src/palettes.ts","../src/wasm-core/epaper_dithering_wasm_bg.js","../src/core.ts","../src/index.ts"],"names":["DitherMode","ColorScheme"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Dithering algorithm modes\n * Values match firmware conventions (0-9)\n */\nexport enum DitherMode {\n  /**\n   * Direct nearest-color mapping with no error diffusion. Intended for\n   * already-quantized graphics only. On limited palettes (especially BWR),\n   * continuous-tone photos or large flat mid-tone areas can map to an\n   * unexpected ink (e.g. a mid-gray region rendered as solid red); use an\n   * error-diffusion mode (e.g. FLOYD_STEINBERG, BURKES) for photographic input.\n   */\n  NONE = 0,\n  BURKES = 1,\n  ORDERED = 2,\n  FLOYD_STEINBERG = 3,\n  ATKINSON = 4,\n  STUCKI = 5,\n  SIERRA = 6,\n  SIERRA_LITE = 7,\n  JARVIS_JUDICE_NINKE = 8,\n  /**\n   * Error diffusion with pseudo-random traversal instead of a raster scan,\n   * diffusing error only to not-yet-quantized neighbours. Produces no\n   * directional structure. `serpentine` is ignored: there is no scan direction.\n   */\n  DIZZY = 9,\n}","// @generated by packages/rust/core/examples/gen_ts_palettes.rs -- DO NOT EDIT BY HAND.\n// Sources of truth: packages/rust/core/src/palettes.rs (ColorScheme::palette /\n// ColorScheme::color_names) and packages/rust/core/src/measured_palettes.rs (CATALOG)\n// Regenerate: cargo run --manifest-path packages/rust/core/Cargo.toml --example gen_ts_palettes -- --write\n// Drift check (CI): cargo run --manifest-path packages/rust/core/Cargo.toml --example gen_ts_palettes -- --check\n//\n// Measured RGB values for real e-paper displays, mirrored from the Rust CATALOG so\n// TypeScript and Python (which derives its constants from the same CATALOG via FFI at\n// import time) can never silently diverge on a recalibration. Key order within each\n// palette's `colors` object matches CATALOG's `color_names` order exactly -- it is a\n// firmware wire contract (palette index = object key position), not cosmetic.\n//\n// `scheme` is emitted as a plain numeric literal (not `ColorScheme.XXX`) so this file\n// has no import-time dependency on palettes.ts, which re-exports these constants --\n// importing back from palettes.ts here would create a circular ES module and risk a\n// temporal-dead-zone error. The `ColorPalette.scheme` field's declared type is a plain\n// `number` for the same reason; each literal is commented with its enum name.\n//\n// SCHEME_PALETTES holds the idealized (pure sRGB) palette for every ColorScheme,\n// mirrored from the PALETTE_* statics in palettes.rs. The WASM core computes palette\n// *indices* from those statics while ditherImage() returns these *colors*, so the two\n// must agree entry-for-entry; generating them from one source is what makes that\n// guaranteed rather than hoped for. Its keys are plain numeric literals for the same\n// no-circular-import reason as `scheme` above.\n\nimport type { ColorPalette } from './types';\n\nexport const SCHEME_PALETTES: Record<number, ColorPalette> = {\n  0: { // ColorScheme.MONO\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      white: { r: 255, g: 255, b: 255 },\n    },\n    accent: 'black',\n  },\n  1: { // ColorScheme.BWR\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      white: { r: 255, g: 255, b: 255 },\n      red: { r: 255, g: 0, b: 0 },\n    },\n    accent: 'red',\n  },\n  2: { // ColorScheme.BWY\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      white: { r: 255, g: 255, b: 255 },\n      yellow: { r: 255, g: 255, b: 0 },\n    },\n    accent: 'yellow',\n  },\n  3: { // ColorScheme.BWRY\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      white: { r: 255, g: 255, b: 255 },\n      yellow: { r: 255, g: 255, b: 0 },\n      red: { r: 255, g: 0, b: 0 },\n    },\n    accent: 'red',\n  },\n  4: { // ColorScheme.BWGBRY\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      white: { r: 255, g: 255, b: 255 },\n      yellow: { r: 255, g: 255, b: 0 },\n      red: { r: 255, g: 0, b: 0 },\n      blue: { r: 0, g: 0, b: 255 },\n      green: { r: 0, g: 255, b: 0 },\n    },\n    accent: 'red',\n  },\n  5: { // ColorScheme.GRAYSCALE_4\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      gray1: { r: 85, g: 85, b: 85 },\n      gray2: { r: 170, g: 170, b: 170 },\n      white: { r: 255, g: 255, b: 255 },\n    },\n    accent: 'black',\n  },\n  6: { // ColorScheme.GRAYSCALE_16\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      gray1: { r: 17, g: 17, b: 17 },\n      gray2: { r: 34, g: 34, b: 34 },\n      gray3: { r: 51, g: 51, b: 51 },\n      gray4: { r: 68, g: 68, b: 68 },\n      gray5: { r: 85, g: 85, b: 85 },\n      gray6: { r: 102, g: 102, b: 102 },\n      gray7: { r: 119, g: 119, b: 119 },\n      gray8: { r: 136, g: 136, b: 136 },\n      gray9: { r: 153, g: 153, b: 153 },\n      gray10: { r: 170, g: 170, b: 170 },\n      gray11: { r: 187, g: 187, b: 187 },\n      gray12: { r: 204, g: 204, b: 204 },\n      gray13: { r: 221, g: 221, b: 221 },\n      gray14: { r: 238, g: 238, b: 238 },\n      white: { r: 255, g: 255, b: 255 },\n    },\n    accent: 'black',\n  },\n  7: { // ColorScheme.SEVEN_COLOR\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      white: { r: 255, g: 255, b: 255 },\n      yellow: { r: 255, g: 255, b: 0 },\n      red: { r: 255, g: 0, b: 0 },\n      blue: { r: 0, g: 0, b: 255 },\n      green: { r: 0, g: 255, b: 0 },\n      orange: { r: 255, g: 128, b: 0 },\n    },\n    accent: 'red',\n  },\n  8: { // ColorScheme.BWGBRY_SPLIT\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      white: { r: 255, g: 255, b: 255 },\n      yellow: { r: 255, g: 255, b: 0 },\n      red: { r: 255, g: 0, b: 0 },\n      blue: { r: 0, g: 0, b: 255 },\n      green: { r: 0, g: 255, b: 0 },\n    },\n    accent: 'red',\n  },\n  9: { // ColorScheme.GRAYSCALE_8\n    colors: {\n      black: { r: 0, g: 0, b: 0 },\n      gray1: { r: 36, g: 36, b: 36 },\n      gray2: { r: 73, g: 73, b: 73 },\n      gray3: { r: 109, g: 109, b: 109 },\n      gray4: { r: 146, g: 146, b: 146 },\n      gray5: { r: 182, g: 182, b: 182 },\n      gray6: { r: 219, g: 219, b: 219 },\n      white: { r: 255, g: 255, b: 255 },\n    },\n    accent: 'black',\n  },\n};\n\nexport const SPECTRA_7_3_6COLOR: ColorPalette = {\n  scheme: 4, // ColorScheme.BWGBRY\n  colors: {\n    black: { r: 26, g: 13, b: 35 },\n    white: { r: 185, g: 202, b: 205 },\n    yellow: { r: 202, g: 184, b: 0 },\n    red: { r: 121, g: 9, b: 0 },\n    blue: { r: 0, g: 69, b: 139 },\n    green: { r: 40, g: 82, b: 57 },\n  },\n  accent: 'red',\n};\n\nexport const SPECTRA_7_3_6COLOR_V2: ColorPalette = {\n  scheme: 4, // ColorScheme.BWGBRY\n  colors: {\n    black: { r: 31, g: 24, b: 41 },\n    white: { r: 168, g: 180, b: 182 },\n    yellow: { r: 180, g: 173, b: 0 },\n    red: { r: 113, g: 24, b: 19 },\n    blue: { r: 36, g: 70, b: 139 },\n    green: { r: 50, g: 84, b: 60 },\n  },\n  accent: 'red',\n};\n\nexport const MONO_4_26: ColorPalette = {\n  scheme: 0, // ColorScheme.MONO\n  colors: {\n    black: { r: 5, g: 5, b: 5 },\n    white: { r: 220, g: 220, b: 220 },\n  },\n  accent: 'black',\n};\n\nexport const BWRY_4_2: ColorPalette = {\n  scheme: 3, // ColorScheme.BWRY\n  colors: {\n    black: { r: 5, g: 5, b: 5 },\n    white: { r: 200, g: 200, b: 200 },\n    yellow: { r: 200, g: 180, b: 0 },\n    red: { r: 120, g: 15, b: 5 },\n  },\n  accent: 'red',\n};\n\nexport const BWRY_3_97: ColorPalette = {\n  scheme: 3, // ColorScheme.BWRY\n  colors: {\n    black: { r: 10, g: 7, b: 14 },\n    white: { r: 173, g: 178, b: 174 },\n    yellow: { r: 172, g: 128, b: 0 },\n    red: { r: 85, g: 24, b: 14 },\n  },\n  accent: 'red',\n};\n\nexport const SOLUM_BWR: ColorPalette = {\n  scheme: 1, // ColorScheme.BWR\n  colors: {\n    black: { r: 5, g: 5, b: 5 },\n    white: { r: 200, g: 200, b: 200 },\n    red: { r: 120, g: 15, b: 5 },\n  },\n  accent: 'red',\n};\n\nexport const HANSHOW_BWR: ColorPalette = {\n  scheme: 1, // ColorScheme.BWR\n  colors: {\n    black: { r: 5, g: 5, b: 5 },\n    white: { r: 200, g: 200, b: 200 },\n    red: { r: 120, g: 15, b: 5 },\n  },\n  accent: 'red',\n};\n\nexport const HANSHOW_BWY: ColorPalette = {\n  scheme: 2, // ColorScheme.BWY\n  colors: {\n    black: { r: 5, g: 5, b: 5 },\n    white: { r: 200, g: 200, b: 200 },\n    yellow: { r: 200, g: 180, b: 0 },\n  },\n  accent: 'yellow',\n};\n","import type { ColorPalette } from './types';\nimport { SCHEME_PALETTES } from './palettes.generated';\n\n/**\n * E-paper display color schemes.\n *\n * Integer values are a firmware wire contract. Canonical source of truth:\n * `enum ColorScheme` in `opendisplay-protocol/src/opendisplay_structs.h`, which\n * names `packages/rust/core/src/palettes.rs` as its designated mirror.\n */\nexport enum ColorScheme {\n  MONO        = 0,\n  BWR         = 1,\n  BWY         = 2,\n  BWRY        = 3,\n  BWGBRY      = 4,\n  GRAYSCALE_4 = 5,\n  GRAYSCALE_16 = 6,\n  /**\n   * 7-color Spectra/ACeP. Protocol v2 reassigned value 7 from the former\n   * GRAYSCALE_8 to SEVEN_COLOR; GRAYSCALE_8 now lives at library-local value 9\n   * (below). Ink order is BWGBRY plus orange, matching the bb_epaper logical\n   * ink indices.\n   */\n  SEVEN_COLOR = 7,\n  /** Spectra 6 nibbles, left-half plane then right-half plane (dual-CS panels). */\n  BWGBRY_SPLIT = 8,\n  /**\n   * 8-level grayscale dithering target, e.g. the Inkplate 10 (issue #19).\n   *\n   * Value 9 is NOT a firmware wire value. `opendisplay_structs.h` defines\n   * `enum ColorScheme` values 0-8 and 100-102 only; it has no value 9 and none\n   * is expected to be assigned here. This variant exists purely so the\n   * dithering library can target 8-level-gray panels outside the OpenDisplay\n   * ecosystem. Never send this value to a device as a `color_scheme` field.\n   */\n  GRAYSCALE_8 = 9,\n}\n\n/**\n * Idealized (pure sRGB) palette for every ColorScheme, keyed by firmware wire value.\n *\n * NOT hand-written. Generated from Rust's `PALETTE_*` statics + `ColorScheme::color_names()`\n * by `packages/rust/core/examples/gen_ts_palettes.rs`, whose `--check` mode gates CI.\n * This matters because `ditherImage()` gets palette *indices* from the WASM core (computed\n * against those Rust statics) but returns the *colors* from this table: if the two ever\n * disagreed, a consumer would render or encode the wrong ink at the right index, and every\n * count-, length- and accent-based assertion would still pass.\n *\n * The generated record is typed `Record<number, ColorPalette>` (it cannot import the\n * `ColorScheme` enum without creating a circular ES module), so it is narrowed here.\n */\nconst PALETTES = SCHEME_PALETTES as Record<ColorScheme, ColorPalette>;\n\n/** Get color palette for a color scheme */\nexport function getPalette(scheme: ColorScheme): ColorPalette {\n  return PALETTES[scheme];\n}\n\n/** Get number of colors in a color scheme */\nexport function getColorCount(scheme: ColorScheme): number {\n  return Object.keys(PALETTES[scheme].colors).length;\n}\n\n/**\n * Create ColorScheme from firmware integer value.\n *\n * Membership test, not a range check: the enum is not guaranteed to stay a\n * contiguous 0..N run (protocol v2 already removed a value), so a range check\n * would accept reserved gaps and reject newly added values.\n */\nconst VALID_SCHEME_VALUES: ReadonlySet<number> = new Set(\n  Object.values(ColorScheme).filter((v): v is ColorScheme => typeof v === 'number'),\n);\n\nexport function fromValue(value: number): ColorScheme {\n  if (!VALID_SCHEME_VALUES.has(value)) {\n    throw new Error(`Invalid color scheme value: ${value}`);\n  }\n  return value as ColorScheme;\n}\n\n// =============================================================================\n// Measured Palettes for Specific E-Paper Displays\n// =============================================================================\n//\n// These constants provide measured RGB values from real e-paper displays.\n// Pass them directly to ditherImage() instead of a ColorScheme enum.\n//\n// Usage:\n//   import { ditherImage, SPECTRA_7_3_6COLOR } from '@opendisplay/epaper-dithering';\n//   const result = ditherImage(imageBuffer, SPECTRA_7_3_6COLOR);\n//\n// RGB values are defined once in packages/rust/core/src/measured_palettes.rs (single\n// source of truth) and generated into ./palettes.generated.ts by\n// packages/rust/core/examples/gen_ts_palettes.rs; CI runs that generator in `--check`\n// mode to catch drift. This mirrors how the Python package derives its constants from\n// the same Rust CATALOG via FFI at import time -- TypeScript can't do that at import\n// time (WASM init order), so it does the equivalent at build time instead.\n//\n// TO ADD A NEW DISPLAY: add the palette + CATALOG entry in measured_palettes.rs, then\n// regenerate (`cargo run --manifest-path packages/rust/core/Cargo.toml --example\n// gen_ts_palettes -- --write`) and commit the updated palettes.generated.ts.\n// =============================================================================\n\nexport {\n  SPECTRA_7_3_6COLOR,\n  SPECTRA_7_3_6COLOR_V2,\n  MONO_4_26,\n  BWRY_4_2,\n  BWRY_3_97,\n  SOLUM_BWR,\n  HANSHOW_BWR,\n  HANSHOW_BWY,\n} from './palettes.generated';\n","/**\n * Composite an RGBA buffer onto white, returning flat RGB bytes (sRGB).\n *\n * Thin wrapper over `epaper_dithering_core::composite::composite_rgba_on_white` so that\n * JavaScript, Python and Rust all flatten alpha identically. Throws if the buffer length\n * is not a multiple of 4.\n * @param {Uint8Array} rgba\n * @returns {Uint8Array}\n */\nexport function composite_rgba(rgba) {\n    const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    const ret = wasm.composite_rgba(ptr0, len0);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n    return v2;\n}\n\n/**\n * Dither a flat RGB image. Accepts either an idealized `scheme_id` or a measured\n * `palette_bytes`/`accent_idx` pair; `palette_bytes` empty ⇒ use `scheme_id`.\n *\n * Returns a `Uint8Array` of palette indices (one per pixel, length = width × height).\n * @param {Uint8Array} pixels\n * @param {number} width\n * @param {number | null | undefined} scheme_id\n * @param {Uint8Array} palette_bytes\n * @param {number} accent_idx\n * @param {number} mode_id\n * @param {boolean} serpentine\n * @param {number} exposure\n * @param {number} saturation\n * @param {number} shadows\n * @param {number} highlights\n * @param {number | null} [tone]\n * @param {number | null} [gamut]\n * @returns {Uint8Array}\n */\nexport function dither_image(pixels, width, scheme_id, palette_bytes, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, tone, gamut) {\n    const ptr0 = passArray8ToWasm0(pixels, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    const ptr1 = passArray8ToWasm0(palette_bytes, wasm.__wbindgen_malloc);\n    const len1 = WASM_VECTOR_LEN;\n    const ret = wasm.dither_image(ptr0, len0, width, isLikeNone(scheme_id) ? 0xFFFFFF : scheme_id, ptr1, len1, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, !isLikeNone(tone), isLikeNone(tone) ? 0 : tone, !isLikeNone(gamut), isLikeNone(gamut) ? 0 : gamut);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n    return v3;\n}\n\n/**\n * Returns all measured palettes as a JSON string.\n *\n * Format: `[{\"id\": \"SPECTRA_7_3_6COLOR\", \"colors\": [[r,g,b], ...], \"color_names\": [...], \"accent_idx\": 3, \"scheme_id\": 4}, ...]`\n * @returns {string}\n */\nexport function measured_palettes() {\n    let deferred1_0;\n    let deferred1_1;\n    try {\n        const ret = wasm.measured_palettes();\n        deferred1_0 = ret[0];\n        deferred1_1 = ret[1];\n        return getStringFromWasm0(ret[0], ret[1]);\n    } finally {\n        wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n    }\n}\nexport function __wbindgen_cast_0000000000000001(arg0, arg1) {\n    // Cast intrinsic for `Ref(String) -> Externref`.\n    const ret = getStringFromWasm0(arg0, arg1);\n    return ret;\n}\nexport function __wbindgen_init_externref_table() {\n    const table = wasm.__wbindgen_externrefs;\n    const offset = table.grow(4);\n    table.set(0, undefined);\n    table.set(offset + 0, undefined);\n    table.set(offset + 1, null);\n    table.set(offset + 2, true);\n    table.set(offset + 3, false);\n}\nfunction getArrayU8FromWasm0(ptr, len) {\n    ptr = ptr >>> 0;\n    return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n    return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n    if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n        cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachedUint8ArrayMemory0;\n}\n\nfunction isLikeNone(x) {\n    return x === undefined || x === null;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n    const ptr = malloc(arg.length * 1, 1) >>> 0;\n    getUint8ArrayMemory0().set(arg, ptr / 1);\n    WASM_VECTOR_LEN = arg.length;\n    return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n    const value = wasm.__wbindgen_externrefs.get(idx);\n    wasm.__externref_table_dealloc(idx);\n    return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n    numBytesDecoded += len;\n    if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n        cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n        cachedTextDecoder.decode();\n        numBytesDecoded = len;\n    }\n    return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\n\nlet wasm;\nexport function __wbg_set_wasm(val) {\n    wasm = val;\n}\n","import type { ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\nimport { DitherMode } from './enums';\nimport { ColorScheme, getPalette } from './palettes';\nimport {\n  dither_image as wasmDitherImage,\n  composite_rgba as wasmCompositeRgba,\n  __wbg_set_wasm,\n  __wbindgen_init_externref_table,\n  __wbindgen_cast_0000000000000001,\n} from './wasm-core/epaper_dithering_wasm_bg.js';\nimport wasmBytes from './wasm-core/epaper_dithering_wasm_bg.wasm';\n\n// Synchronous WASM initialization — runs once at module load time.\nconst wasmModule = new WebAssembly.Module(wasmBytes as unknown as ArrayBuffer);\nconst wasmInstance = new WebAssembly.Instance(wasmModule, {\n  './epaper_dithering_wasm_bg.js': {\n    __wbindgen_init_externref_table,\n    __wbindgen_cast_0000000000000001,\n  },\n});\n__wbg_set_wasm(wasmInstance.exports);\n(wasmInstance.exports as Record<string, () => void>).__wbindgen_start?.();\n\n/**\n * Options for `ditherImage`. All fields are optional — defaults are sensible.\n *\n * Pre-processing pipeline (each step is a no-op at its identity value):\n * `exposure → saturation → shadows/highlights → tone → gamut → dither`.\n */\nexport interface DitherOptions {\n  /** Dithering algorithm. Default: `DitherMode.BURKES`. */\n  mode?: DitherMode;\n  /** Alternate row scan direction for error diffusion. Default: `true`. */\n  serpentine?: boolean;\n  /** Linear-RGB exposure multiplier. 1.0 = no change, 2.0 = +1 stop. Default: `1.0`. */\n  exposure?: number;\n  /** OKLab saturation multiplier. 1.0 = no change, 0.0 = grayscale. Default: `1.0`. */\n  saturation?: number;\n  /** Shadow lift strength (S-curve lower half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n  shadows?: number;\n  /** Highlight compression strength (S-curve upper half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n  highlights?: number;\n  /** Dynamic-range compression: `0.0`/`'off'` disables, `'auto'` opts in. Default: `0.0`. */\n  tone?: number | 'auto' | 'off';\n  /** Gamut compression: `0.0`/`'off'` disables, `'auto'` opts in. Default: `0.0`. */\n  gamut?: number | 'auto' | 'off';\n}\n\n/**\n * Apply dithering to an RGBA image for an e-paper display.\n *\n * @param image     Input RGBA image. Alpha is composited on white.\n * @param palette   Target palette: `ColorScheme` enum (idealized) or `ColorPalette` (measured).\n * @param options   Per-call overrides — see {@link DitherOptions}.\n * @returns Palette-indexed image buffer.\n */\nexport function ditherImage(\n  image: ImageBuffer,\n  palette: ColorScheme | ColorPalette,\n  options: DitherOptions = {},\n): PaletteImageBuffer {\n  const {\n    mode = DitherMode.BURKES,\n    serpentine = true,\n    exposure = 1.0,\n    saturation = 1.0,\n    shadows = 0.0,\n    highlights = 0.0,\n    tone = 0.0,\n    gamut = 0.0,\n  } = options;\n\n  const expectedLength = image.width * image.height * 4;\n  if (image.data.length !== expectedLength) {\n    throw new Error(\n      `image data length (${image.data.length}) does not match width × height × 4 ` +\n      `(${image.width} × ${image.height} × 4 = ${expectedLength})`,\n    );\n  }\n\n  const rgba = new Uint8Array(image.data.buffer, image.data.byteOffset, image.data.byteLength);\n  const pixels = wasmCompositeRgba(rgba);\n\n  // Idealized schemes don't have a measured display range, so tone/gamut don't apply.\n  const isScheme = typeof palette === 'number';\n  const toneArg  = isScheme ? 0.0 : parseCompression(tone);\n  const gamutArg = isScheme ? 0.0 : parseCompression(gamut);\n\n  let schemeId: number | undefined = undefined;\n  let paletteBytes: Uint8Array;\n  let accentIdx = 0;\n  let outputColors: { r: number; g: number; b: number }[];\n\n  if (isScheme) {\n    schemeId = palette as number;\n    paletteBytes = new Uint8Array(0);\n    outputColors = Object.values(getPalette(palette).colors);\n  } else {\n    schemeId = palette.scheme ?? undefined;\n    const colors = Object.values(palette.colors);\n    paletteBytes = new Uint8Array(colors.flatMap(c => [c.r, c.g, c.b]));\n    accentIdx = Object.keys(palette.colors).indexOf(palette.accent);\n    if (accentIdx < 0) {\n      throw new Error(\n        `accent color '${palette.accent}' not found in palette colors [${Object.keys(palette.colors).join(', ')}]`,\n      );\n    }\n    outputColors = colors;\n  }\n\n  const indices = wasmDitherImage(\n    pixels, image.width,\n    schemeId, paletteBytes, accentIdx,\n    mode as number, serpentine,\n    exposure, saturation, shadows, highlights,\n    toneArg, gamutArg,\n  );\n\n  return { width: image.width, height: image.height, indices, palette: outputColors };\n}\n\n/** Map `'auto'` → `undefined` (Rust None = auto), `'off'` → 0.0, number → pass through. */\nfunction parseCompression(v: number | 'auto' | 'off'): number | undefined {\n  if (v === 'auto') return undefined;\n  if (v === 'off')  return 0.0;\n  return v;\n}\n","export { ditherImage } from './core';\nexport type { DitherOptions } from './core';\nexport { DitherMode } from './enums';\nexport {\n  ColorScheme,\n  getPalette,\n  getColorCount,\n  fromValue,\n  // Measured palettes\n  SPECTRA_7_3_6COLOR,\n  SPECTRA_7_3_6COLOR_V2,\n  MONO_4_26,\n  BWRY_4_2,\n  SOLUM_BWR,\n  HANSHOW_BWR,\n  HANSHOW_BWY,\n  BWRY_3_97,\n} from './palettes';\nexport type { RGB, ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\n\nexport const VERSION = '0.1.0';\n"]}