{
  "version": 3,
  "sources": ["../../../node_modules/sixel/src/Colors.ts", "../../../node_modules/inwasm-runtime/lib/index.cjs", "../../../node_modules/xterm-wasm-parts/lib/base64/Base64Decoder.wasm.js", "../../../node_modules/sixel/src/wasm.ts", "../../../node_modules/sixel/src/Decoder.ts", "../../../src/common/Lifecycle.ts", "../../../src/common/Event.ts", "../src/ImageRenderer.ts", "../src/ImageStorage.ts", "../src/IIPHandler.ts", "../src/IIPHeaderParser.ts", "../src/IIPMetrics.ts", "../src/kitty/KittyGraphicsHandler.ts", "../src/kitty/KittyGraphicsTypes.ts", "../src/kitty/KittyImageStorage.ts", "../src/SixelHandler.ts", "../src/SixelImageStorage.ts", "../src/IIPImageStorage.ts", "../src/ImageAddon.ts"],
  "sourcesContent": [null, "\"use strict\";\n/**\n * Copyright (c) 2022, 2026 Joerg Breitbart\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = InWasm;\nlet z = (s) => {\n    if (Uint8Array.fromBase64)\n        return Uint8Array.fromBase64(s);\n    if (typeof Buffer !== 'undefined')\n        return Buffer.from(s, 'base64');\n    const b = atob(s);\n    const r = new Uint8Array(b.length);\n    for (let i = 0; i < r.length; ++i)\n        r[i] = b.charCodeAt(i);\n    return r;\n};\nfunction InWasm(def) {\n    if (def.d) {\n        const { t, s, d } = def;\n        let b;\n        let m;\n        const W = WebAssembly;\n        if (t === 0 /* OutputType.INSTANCE */) {\n            if (s)\n                return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n            return (e) => m\n                ? W.instantiate(m, e)\n                : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n        }\n        if (t === 1 /* OutputType.MODULE */) {\n            if (s)\n                return () => m || (m = new W.Module(b || (b = z(d))));\n            return () => m\n                ? Promise.resolve(m)\n                : W.compile(b || (b = z(d))).then(r => m = r);\n        }\n        if (s)\n            return () => b || (b = z(d));\n        return () => Promise.resolve(b || (b = z(d)));\n    }\n    if (typeof _wasmCtx === 'undefined')\n        throw new Error('must run \"inwasm\"');\n    _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#8daaa0944cb288f5:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#8daaa0944cb288f5:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n  name: 'decode',\n  type: OutputType.INSTANCE,\n  mode: OutputMode.SYNC,\n  srctype: 'Clang-C',\n  imports: {\n    env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n  },\n  exports: {\n    dec: () => 0,\n    end: () => 0\n  },\n  compile: {\n    switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n  },\n  code: `\n    #include <wasm_simd128.h>\n    typedef struct {\n      unsigned int wp;\n      unsigned int sp;\n      unsigned int dp;\n      unsigned int e_size;\n      unsigned int dummy[4];\n      unsigned char data[0];\n    } State;\n\n    unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n    unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n    unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n    unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n    State *state = (State *) ${P32.STATE * 4};\n\n    #define packed_byte(x) wasm_i8x16_splat((char) x)\n    #define packed_dword(x) wasm_i32x4_splat(x)\n    #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n    __attribute__((noinline)) int dec() {\n      unsigned int nsp = (state->wp - 1) & ~3;\n      unsigned char *src = state->data + state->sp;\n      unsigned char *end = state->data + nsp;\n      unsigned char *dst = state->data + state->dp;\n      unsigned int error = 0;\n\n      v128_t err = wasm_i8x16_splat(0);\n      unsigned char *end16 = state->data + (nsp & ~15);\n      while (src < end16) {\n        v128_t data = wasm_v128_load((v128_t *) src);\n\n        // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n        const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n        const char linv = 1;\n        const char hinv = 0;\n\n        const v128_t lower_bound_LUT = wasm_i8x16_const(\n          // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n          linv, linv, 0x2b, 0x30,\n          0x41, 0x50, 0x61, 0x70,\n          linv, linv, linv, linv,\n          linv, linv, linv, linv\n        );\n        const v128_t upper_bound_LUT = wasm_i8x16_const(\n          // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n          hinv, hinv, 0x2b, 0x39,\n          0x4f, 0x5a, 0x6f, 0x7a,\n          hinv, hinv, hinv, hinv,\n          hinv, hinv, hinv, hinv\n        );\n        // the difference between the shift and lower bound\n        const v128_t shift_LUT = wasm_i8x16_const(\n          // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n          0x00,        0x00,        0x3e - 0x2b, 0x34 - 0x30,\n          0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n          0x00,        0x00,        0x00,        0x00,\n          0x00,        0x00,        0x00,        0x00\n        );\n\n        const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n        const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n        const v128_t below = wasm_i8x16_lt(data, lower_bound);\n        const v128_t above = wasm_i8x16_gt(data, upper_bound);\n        const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n        // in_range = not (below or above) or eq_2f\n        // outside  = not in_range = below or above and not eq_2f (from deMorgan law)\n        const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n        err = wasm_v128_or(err, outside);\n\n        const v128_t shift  = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n        const v128_t t0     = wasm_i8x16_add(data, shift);\n        v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n        // pack bytes\n        const v128_t ca = masked(v, 0x003f003f);\n        const v128_t db = masked(v, 0x3f003f00);\n        const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n        v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n        res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n        wasm_v128_store((v128_t *) dst, res);\n        dst += 12;\n        src += 16;\n      }\n      //if (wasm_i8x16_bitmask(err) != 0) return -1;\n      if (wasm_v128_any_true(err)) return -1;\n\n      // operate on 4-byte blocks\n      while (src < end) {\n        error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n        dst += 3;\n        src += 4;\n      }\n      if (error >> 24) return -1;\n      state->sp = nsp;\n      state->dp = dst - state->data;\n      return 0;\n    }\n\n    int end() {\n      int rem = state->wp - state->sp;\n      if (rem > 4 && dec()) return -1;\n      rem = state->wp - state->sp;\n      if (rem < 2) return -1;\n\n      unsigned char *src = state->data + state->sp;\n      if (rem == 4) {\n        if (src[3] == 61) rem--;\n        if (src[2] == 61) rem--;\n      }\n      unsigned int accu = D0[src[0]] | D1[src[1]];\n      int dp = 1;\n      if (rem > 2) {\n        accu |= D2[src[2]];\n        dp++;\n        if (rem == 4) {\n          accu |= D3[src[3]];\n          dp++;\n        }\n      }\n      if (accu >> 24) return -1;\n      *((unsigned int *) (state->data + state->dp)) = accu;\n      state->dp += dp;\n      return 0;\n    }\n    `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n    .split('')\n    .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n    D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n    D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n    D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n    D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n    /**\n     * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n     * @param maxBytes Max allowed bytes to allocate.\n     * @param initialBytes Initial bytes to allocate.\n     */\n    constructor(keepSize, maxBytes, initialBytes) {\n        this._inst = null;\n        this._ended = true;\n        this._bytes = 0;\n        this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n        this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n        this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n        if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n            throw new Error('invalid byte settings');\n        }\n    }\n    /**\n     * Currently decoded bytes (borrowed).\n     * Must be accessed before calling `release` or `init`.\n     */\n    get data8() {\n        return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n    }\n    /**\n     * Release memory conditionally based on `keepSize`.\n     * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n     * otherwise the instance will be reused.\n     */\n    release() {\n        if (!this._inst)\n            return;\n        if (this._bytes > this.keepSize) {\n            this._inst = this._m32 = this._d = this._mem = null;\n        }\n        else {\n            this._m32[1280 /* P32.STATE_WP */] = 0;\n            this._m32[1281 /* P32.STATE_SP */] = 0;\n            this._m32[1282 /* P32.STATE_DP */] = 0;\n        }\n    }\n    /**\n     * Initializes the decoder for new base64 data.\n     * Must be called before doing any decoding attempts.\n     * The method will either spawn a new wasm instance or grow\n     * the needed memory of an existing instance.\n     * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n     * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n     */\n    init(maxBytes, initialBytes) {\n        this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n        this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n        if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n            throw Error('invalid byte settings');\n        }\n        let m = this._m32;\n        const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n        if (!this._inst) {\n            this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n            this._inst = wasmDecode({ env: { memory: this._mem } });\n            m = new Uint32Array(this._mem.buffer, 0);\n            m.set(D, 256 /* P32.D0 */);\n            this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n        }\n        else if (this._mem.buffer.byteLength < bytes) {\n            this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n            m = new Uint32Array(this._mem.buffer, 0);\n            this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n        }\n        m[1280 /* P32.STATE_WP */] = 0;\n        m[1281 /* P32.STATE_SP */] = 0;\n        m[1282 /* P32.STATE_DP */] = 0;\n        this._m32 = m;\n        this._ended = false;\n    }\n    /**\n     * Realloc memory. Realloc only happens, if the requested\n     * size doesn't fit in the current memory.\n     * The new size will be capped by `maxBytes`.\n     * @param requested Bytes to be stored.\n     */\n    _realloc(requested) {\n        const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n        if (this._bytes < needed) {\n            if (needed > this.maxBytes) {\n                return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n            }\n            let newSize = this._bytes;\n            while ((newSize *= 2) < needed) { }\n            newSize = Math.min(newSize, this.maxBytes);\n            if (newSize < needed) {\n                return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n            }\n            if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n                const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n                this._mem.grow(addPages);\n                this._m32 = new Uint32Array(this._mem.buffer, 0);\n                this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n            }\n            this._bytes = newSize;\n        }\n        return 0 /* DecodeStatus.OK */;\n    }\n    /**\n     * Put bytes in `data` into the decoder.\n     * Additionally decodes the payload, if it reached 2^17 bytes.\n     * The return value indicates the type of issue.\n     * @param data Bytes to be loaded.\n     */\n    put(data) {\n        if (!this._inst || this._ended) {\n            return -2 /* DecodeStatus.NOT_INITIALIZED */;\n        }\n        if (this._realloc(data.length)) {\n            return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n        }\n        const m = this._m32;\n        this._d.set(data, m[1280 /* P32.STATE_WP */]);\n        m[1280 /* P32.STATE_WP */] += data.length;\n        // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n        return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n            ? this._inst.exports.dec()\n            : 0 /* DecodeStatus.OK */;\n    }\n    /**\n     * End the current decoding.\n     * Also decodes leftover payload from previous put calls.\n     */\n    end() {\n        this._ended = true;\n        return this._inst\n            ? this._inst.exports.end()\n            : -2 /* DecodeStatus.NOT_INITIALIZED */;\n    }\n    /**\n     * Bytes loaded into the decoder.\n     */\n    get loadedBytes() {\n        return this._inst\n            ? this._m32[1280 /* P32.STATE_WP */]\n            : 0;\n    }\n    /**\n     * Free bytes to feed to the decoder.\n     */\n    get freeBytes() {\n        return this._inst\n            ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n            : 0;\n    }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map", null, null, "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n  dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n  return { dispose: fn };\n}\n\nexport function dispose<T extends IDisposable>(disposable: T): T;\nexport function dispose<T extends IDisposable>(disposable: T | undefined): T | undefined;\nexport function dispose<T extends IDisposable>(disposables: T[]): T[];\nexport function dispose<T extends IDisposable>(arg: T | T[] | undefined): T | T[] | undefined {\n  if (!arg) {\n    return arg;\n  }\n  if (Array.isArray(arg)) {\n    for (const d of arg) {\n      d.dispose();\n    }\n    return [];\n  }\n  arg.dispose();\n  return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n  return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n  private readonly _disposables = new Set<IDisposable>();\n  private _isDisposed = false;\n\n  public get isDisposed(): boolean {\n    return this._isDisposed;\n  }\n\n  public add<T extends IDisposable>(o: T): T {\n    if (this._isDisposed) {\n      o.dispose();\n    } else {\n      this._disposables.add(o);\n    }\n    return o;\n  }\n\n  public dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n    this._isDisposed = true;\n    for (const d of this._disposables) {\n      d.dispose();\n    }\n    this._disposables.clear();\n  }\n\n  public clear(): void {\n    for (const d of this._disposables) {\n      d.dispose();\n    }\n    this._disposables.clear();\n  }\n}\n\nexport abstract class Disposable implements IDisposable {\n  public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n  protected readonly _store = new DisposableStore();\n\n  public dispose(): void {\n    this._store.dispose();\n  }\n\n  protected _register<T extends IDisposable>(o: T): T {\n    return this._store.add(o);\n  }\n}\n\nexport class MutableDisposable<T extends IDisposable> implements IDisposable {\n  private _value: T | undefined;\n  private _isDisposed = false;\n\n  public get value(): T | undefined {\n    return this._isDisposed ? undefined : this._value;\n  }\n\n  public set value(value: T | undefined) {\n    if (this._isDisposed || value === this._value) {\n      return;\n    }\n    this._value?.dispose();\n    this._value = value;\n  }\n\n  public clear(): void {\n    this.value = undefined;\n  }\n\n  public dispose(): void {\n    this._isDisposed = true;\n    this._value?.dispose();\n    this._value = undefined;\n  }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from 'common/Lifecycle';\n\nexport interface IEvent<T> {\n  (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter<T> {\n  private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n  private _disposed = false;\n  private _event: IEvent<T> | undefined;\n\n  public get event(): IEvent<T> {\n    if (this._event) {\n      return this._event;\n    }\n    this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n      if (this._disposed) {\n        return toDisposable(() => {});\n      }\n\n      const entry = { fn: listener, thisArgs };\n      this._listeners.push(entry);\n\n      const result = toDisposable(() => {\n        const idx = this._listeners.indexOf(entry);\n        if (idx !== -1) {\n          this._listeners.splice(idx, 1);\n        }\n      });\n\n      if (disposables) {\n        if (Array.isArray(disposables)) {\n          disposables.push(result);\n        } else {\n          disposables.add(result);\n        }\n      }\n\n      return result;\n    };\n    return this._event;\n  }\n\n  public fire(event: T): void {\n    if (this._disposed) {\n      return;\n    }\n    switch (this._listeners.length) {\n      case 0: return;\n      case 1: {\n        const { fn, thisArgs } = this._listeners[0];\n        fn.call(thisArgs, event);\n        return;\n      }\n      default: {\n        // Snapshot listeners to allow modifications during iteration (2+ listeners)\n        const listeners = this._listeners.slice();\n        for (const { fn, thisArgs } of listeners) {\n          fn.call(thisArgs, event);\n        }\n      }\n    }\n  }\n\n  public dispose(): void {\n    if (this._disposed) {\n      return;\n    }\n    this._disposed = true;\n    this._listeners.length = 0;\n  }\n}\n\nexport namespace EventUtils {\n  export function forward<T>(from: IEvent<T>, to: Emitter<T>): IDisposable {\n    return from(e => to.fire(e));\n  }\n\n  export function map<I, O>(event: IEvent<I>, map: (i: I) => O): IEvent<O> {\n    return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n      return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n    };\n  }\n\n  export function any<T>(...events: IEvent<T>[]): IEvent<T>;\n  export function any(...events: IEvent<any>[]): IEvent<void>;\n  export function any<T>(...events: IEvent<T>[]): IEvent<T> {\n    return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n      const store = new DisposableStore();\n      for (const event of events) {\n        store.add(event(e => listener.call(thisArgs, e)));\n      }\n      if (disposables) {\n        if (Array.isArray(disposables)) {\n          disposables.push(store);\n        } else {\n          disposables.add(store);\n        }\n      }\n      return store;\n    };\n  }\n\n  export function runAndSubscribe<T>(event: IEvent<T>, handler: (e: T) => void, initial: T): IDisposable;\n  export function runAndSubscribe<T>(event: IEvent<T>, handler: (e: T | undefined) => void): IDisposable;\n  export function runAndSubscribe<T>(event: IEvent<T>, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n    handler(initial);\n    return event(e => handler(e));\n  }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst PLACEHOLDER_LENGTH = 4096;\nconst PLACEHOLDER_HEIGHT = 24;\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n  /** @deprecated Kept for backward compat \u2014 points to top layer canvas. */\n  public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n  private _layers = new Map<ImageLayer, CanvasRenderingContext2D>();\n  private _placeholder: HTMLCanvasElement | undefined;\n  private _placeholderBitmap: ImageBitmap | undefined;\n  private _optionsRefresh = this._register(new MutableDisposable());\n  private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n  private _renderService: IRenderService | undefined;\n  private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n  // drawing primitive - canvas\n  public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n    /**\n     * NOTE: We normally dont care, from which document the canvas\n     * gets created, so we can fall back to global document,\n     * if the terminal has no document associated yet.\n     * This way early image loads before calling .open keep working\n     * (still discouraged though, as the metrics will be screwed up).\n     * Only the DOM output canvas should be on the terminal's document,\n     * which gets explicitly checked in `insertLayerToDom`.\n     */\n    const canvas = (localDocument ?? document).createElement('canvas');\n    canvas.width = width | 0;\n    canvas.height = height | 0;\n    return canvas;\n  }\n\n  // drawing primitive - ImageData with optional buffer\n  public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n    if (typeof ImageData !== 'function') {\n      const imgData = ctx.createImageData(width, height);\n      if (buffer) {\n        imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n      }\n      return imgData;\n    }\n    return buffer\n      ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n      : new ImageData(width, height);\n  }\n\n  // drawing primitive - ImageBitmap\n  public static createImageBitmap(img: ImageBitmapSource): Promise<ImageBitmap | undefined> {\n    if (typeof createImageBitmap !== 'function') {\n      return Promise.resolve(undefined);\n    }\n    return createImageBitmap(img);\n  }\n\n\n  constructor(private _terminal: ITerminalExt) {\n    super();\n    this._oldOpen = this._terminal._core.open;\n    this._terminal._core.open = (parent: HTMLElement): void => {\n      this._oldOpen?.call(this._terminal._core, parent);\n      this._open();\n    };\n    if (this._terminal._core.screenElement) {\n      this._open();\n    }\n    // hack to spot fontSize changes\n    this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n      if (option === 'fontSize') {\n        this.rescaleCanvas();\n        this._renderService?.refreshRows(0, this._terminal.rows);\n      }\n    });\n    this._register(toDisposable(() => {\n      this.removeLayerFromDom();\n      this.removeLayerFromDom('bottom');\n      if (this._terminal._core && this._oldOpen) {\n        this._terminal._core.open = this._oldOpen;\n        this._oldOpen = undefined;\n      }\n      if (this._renderService && this._oldSetRenderer) {\n        this._renderService.setRenderer = this._oldSetRenderer;\n        this._oldSetRenderer = undefined;\n      }\n      this._renderService = undefined;\n      this._layers.clear();\n      this._placeholderBitmap?.close();\n      this._placeholderBitmap = undefined;\n      this._placeholder = undefined;\n    }));\n  }\n\n  /**\n   * Enable the placeholder.\n   */\n  public showPlaceholder(value: boolean): void {\n    if (value) {\n      if (!this._placeholder && this.cellSize.height !== -1) {\n        this._createPlaceHolder(Math.max(this.cellSize.height + 1, PLACEHOLDER_HEIGHT));\n      }\n    } else {\n      this._placeholderBitmap?.close();\n      this._placeholderBitmap = undefined;\n      this._placeholder = undefined;\n    }\n    this._renderService?.refreshRows(0, this._terminal.rows);\n  }\n\n  /**\n   * Dimensions of the terminal.\n   * Forwarded from internal render service.\n   */\n  public get dimensions(): IRenderDimensions | undefined {\n    return this._terminal.dimensions;\n  }\n\n  /**\n   * Current cell size (float).\n   */\n  public get cellSize(): ICellSize {\n    return {\n      width: this.dimensions?.css.cell.width || -1,\n      height: this.dimensions?.css.cell.height || -1\n    };\n  }\n\n  /**\n   * Clear a region of the image layer canvas.\n   */\n  public clearLines(start: number, end: number, layer?: ImageLayer): void {\n    const y = start * (this.dimensions?.css.cell.height || 0);\n    const w = this.dimensions?.css.canvas.width || 0;\n    const h = (++end - start) * (this.dimensions?.css.cell.height || 0);\n    if (!layer || layer === 'top') {\n      this._layers.get('top')?.clearRect(0, y, w, h);\n    }\n    if (!layer || layer === 'bottom') {\n      this._layers.get('bottom')?.clearRect(0, y, w, h);\n    }\n  }\n\n  /**\n   * Clear whole image canvas.\n   */\n  public clearAll(layer?: ImageLayer): void {\n    if (!layer || layer === 'top') {\n      const ctx = this._layers.get('top');\n      ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n    }\n    if (!layer || layer === 'bottom') {\n      const ctx = this._layers.get('bottom');\n      ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n    }\n  }\n\n  /**\n   * Draw neighboring tiles on the image layer canvas.\n   */\n  public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n    const ctx = this._layers.get(imgSpec.layer);\n    if (!ctx) {\n      return;\n    }\n    const { width, height } = this.cellSize;\n\n    // Don't try to draw anything, if we cannot get valid renderer metrics.\n    if (width === -1 || height === -1) {\n      return;\n    }\n\n    this._rescaleImage(imgSpec, width, height);\n    const img = imgSpec.actual!;\n    const cols = Math.ceil(img.width / width);\n\n    const sx = (tileId % cols) * width;\n    const sy = Math.floor(tileId / cols) * height;\n    const dx = col * width;\n    const dy = row * height;\n\n    // safari bug: never access image source out of bounds\n    const finalWidth = count * width + sx > img.width ? img.width - sx : count * width;\n    const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n    // Floor all pixel offsets to get stable tile mapping without any overflows.\n    // Note: For not pixel perfect aligned cells like in the DOM renderer\n    // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n    // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n    ctx.drawImage(\n      img,\n      Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n      Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight)\n    );\n  }\n\n  /**\n   * Extract a single tile from an image.\n   */\n  public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n    const { width, height } = this.cellSize;\n    // Don't try to draw anything, if we cannot get valid renderer metrics.\n    if (width === -1 || height === -1) {\n      return;\n    }\n    this._rescaleImage(imgSpec, width, height);\n    const img = imgSpec.actual!;\n    const cols = Math.ceil(img.width / width);\n    const sx = (tileId % cols) * width;\n    const sy = Math.floor(tileId / cols) * height;\n    const finalWidth = width + sx > img.width ? img.width - sx : width;\n    const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n    const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight);\n    const ctx = canvas.getContext('2d');\n    if (ctx) {\n      ctx.drawImage(\n        img,\n        Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n        0, 0, Math.floor(finalWidth), Math.floor(finalHeight)\n      );\n      return canvas;\n    }\n  }\n\n  /**\n   * Draw a line with placeholder on the image layer canvas.\n   */\n  public drawPlaceholder(col: number, row: number, count: number = 1): void {\n    const ctx = this._layers.get('top');\n    if (ctx) {\n      const { width, height } = this.cellSize;\n\n      // Don't try to draw anything, if we cannot get valid renderer metrics.\n      if (width === -1 || height === -1) {\n        return;\n      }\n\n      if (!this._placeholder) {\n        this._createPlaceHolder(Math.max(height + 1, PLACEHOLDER_HEIGHT));\n      } else if (height >= this._placeholder!.height) {\n        this._createPlaceHolder(height + 1);\n      }\n      if (!this._placeholder) return;\n      ctx.drawImage(\n        this._placeholderBitmap ?? this._placeholder!,\n        col * width,\n        (row * height) % 2 ? 0 : 1,  // needs %2 offset correction\n        width * count,\n        height,\n        col * width,\n        row * height,\n        width * count,\n        height\n      );\n    }\n  }\n\n  /**\n   * Rescale image layer canvas if needed.\n   * Checked once from `ImageStorage.render`.\n   */\n  public rescaleCanvas(): void {\n    const w = this.dimensions?.css.canvas.width || 0;\n    const h = this.dimensions?.css.canvas.height || 0;\n    for (const ctx of this._layers.values()) {\n      if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n        ctx.canvas.width = w;\n        ctx.canvas.height = h;\n      }\n    }\n  }\n\n  /**\n   * Rescale image in storage if needed.\n   */\n  private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n    if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n      return;\n    }\n    const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n    if (currentWidth === originalWidth && currentHeight === originalHeight) {\n      spec.actual = spec.orig;\n      spec.actualCellSize.width = originalWidth;\n      spec.actualCellSize.height = originalHeight;\n      return;\n    }\n    const canvas = ImageRenderer.createCanvas(\n      this.document,\n      Math.ceil(spec.orig!.width * currentWidth / originalWidth),\n      Math.ceil(spec.orig!.height * currentHeight / originalHeight)\n    );\n    const ctx = canvas.getContext('2d');\n    if (ctx) {\n      ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n      spec.actual = canvas;\n      spec.actualCellSize.width = currentWidth;\n      spec.actualCellSize.height = currentHeight;\n    }\n  }\n\n  /**\n   * Lazy init for the renderer.\n   */\n  private _open(): void {\n    this._renderService = this._terminal._core._renderService;\n    this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n    this._renderService.setRenderer = (renderer: any) => {\n      for (const key of [...this._layers.keys()]) {\n        this.removeLayerFromDom(key);\n      }\n      this._oldSetRenderer?.call(this._renderService, renderer);\n    };\n  }\n\n  public insertLayerToDom(layer: ImageLayer = 'top'): void {\n    // make sure that the terminal is attached to a document and to DOM\n    if (!this.document || !this._terminal._core.screenElement) {\n      console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n      return;\n    }\n    if (this._layers.has(layer)) {\n      return;\n    }\n    const canvas = ImageRenderer.createCanvas(\n      this.document, this.dimensions?.css.canvas.width || 0,\n      this.dimensions?.css.canvas.height || 0\n    );\n    canvas.classList.add(`xterm-image-layer-${layer}`);\n    const screenElement = this._terminal._core.screenElement;\n    // Use isolation to create a stacking context without overriding z-index,\n    // which would conflict with integrators (e.g. VS Code) that set their\n    // own z-index on the screen element.\n    screenElement.style.isolation = 'isolate';\n    if (layer === 'bottom') {\n      // Use z-index:-1 so it paints behind non-positioned text elements.\n      // The screen element needs to be a stacking context (via isolation)\n      // to contain the negative z-index, otherwise it would go behind the\n      // entire terminal.\n      canvas.style.zIndex = '-1';\n      screenElement.insertBefore(canvas, screenElement.firstChild);\n    } else {\n      // Explicit z-index ensures the image canvas reliably stacks above\n      // the text layer (DOM renderer rows). z-index: 0 is below the\n      // selection overlay (z-index: 1).\n      canvas.style.zIndex = '0';\n      screenElement.appendChild(canvas);\n    }\n    const ctx = canvas.getContext('2d', { alpha: true, desynchronized: true });\n    if (!ctx) {\n      canvas.remove();\n      return;\n    }\n    this._layers.set(layer, ctx);\n    this.clearAll(layer);\n  }\n\n  public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n    const ctx = this._layers.get(layer);\n    if (ctx) {\n      ctx.canvas.remove();\n      this._layers.delete(layer);\n    }\n  }\n\n  public hasLayer(layer: ImageLayer): boolean {\n    return this._layers.has(layer);\n  }\n\n  private _createPlaceHolder(height: number = PLACEHOLDER_HEIGHT): void {\n    this._placeholderBitmap?.close();\n    this._placeholderBitmap = undefined;\n\n    // create blueprint to fill placeholder with\n    const bWidth = 32;  // must be 2^n\n    const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n    const ctx = blueprint.getContext('2d', { alpha: false });\n    if (!ctx) return;\n    const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n    const d32 = new Uint32Array(imgData.data.buffer);\n    const black = toRGBA8888(0, 0, 0);\n    const white = toRGBA8888(255, 255, 255);\n    d32.fill(black);\n    for (let y = 0; y < height; ++y) {\n      const shift = y % 2;\n      const offset = y * bWidth;\n      for (let x = 0; x < bWidth; x += 2) {\n        d32[offset + x + shift] = white;\n      }\n    }\n    ctx.putImageData(imgData, 0, 0);\n\n    // create placeholder line, width aligned to blueprint width\n    const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || PLACEHOLDER_LENGTH;\n    this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n    const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n    if (!ctx2) {\n      this._placeholder = undefined;\n      return;\n    }\n    for (let i = 0; i < width; i += bWidth) {\n      ctx2.drawImage(blueprint, i, 0);\n    }\n    ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap);\n  }\n\n  public get document(): Document | undefined {\n    return this._terminal._core._coreBrowserService?.window.document;\n  }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ITerminalExt, IExtendedAttrsImage, IImageAddonOptions, IImageSpec, IBufferLineExt, BgFlags, Cell, Content, ICellSize, ExtFlags, Attributes, UnderlineStyle, ImageLayer } from './Types';\n\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n  width: 7,\n  height: 14\n};\n\n/**\n * Extend extended attribute to also hold image tile information.\n *\n * Object definition is copied from base repo to fully mimick its behavior.\n * Image data is added as additional public properties `imageId` and `tileId`.\n */\nclass ExtendedAttrsImage implements IExtendedAttrsImage {\n  private _ext: number = 0;\n  public get ext(): number {\n    if (this._urlId) {\n      return (\n        (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n        (this.underlineStyle << 26)\n      );\n    }\n    return this._ext;\n  }\n  public set ext(value: number) { this._ext = value; }\n\n  public get underlineStyle(): UnderlineStyle {\n    // Always return the URL style if it has one\n    if (this._urlId) {\n      return UnderlineStyle.DASHED;\n    }\n    return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n  }\n  public set underlineStyle(value: UnderlineStyle) {\n    this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n    this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n  }\n\n  public get underlineColor(): number {\n    return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n  }\n  public set underlineColor(value: number) {\n    this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n    this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n  }\n\n  public get underlineVariantOffset(): number {\n    const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n    if (val < 0) {\n      return val ^ 0xFFFFFFF8;\n    }\n    return val;\n  }\n  public set underlineVariantOffset(value: number) {\n    this._ext &= ~ExtFlags.VARIANT_OFFSET;\n    this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n  }\n\n  private _urlId: number = 0;\n  public get urlId(): number {\n    return this._urlId;\n  }\n  public set urlId(value: number) {\n    this._urlId = value;\n  }\n\n  constructor(\n    ext: number = 0,\n    urlId: number = 0,\n    public imageId = -1,\n    public tileId = -1\n  ) {\n    this._ext = ext;\n    this._urlId = urlId;\n  }\n\n  public clone(): IExtendedAttrsImage {\n    /**\n     * Technically we dont need a clone variant of ExtendedAttrsImage,\n     * as we never clone a cell holding image data.\n     * Note: Clone is only meant to be used by the InputHandler for\n     * sticky attributes, which is never the case for image data.\n     * We still provide a proper clone method to reflect the full ext attr\n     * state in case there are future use cases for clone.\n     */\n    return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);\n  }\n\n  public isEmpty(): boolean {\n    return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.imageId === -1;\n  }\n}\nconst EMPTY_ATTRS = new ExtendedAttrsImage();\n\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n  // storage\n  private _images: Map<number, IImageSpec> = new Map();\n  // last used id\n  private _lastId = 0;\n  // last evicted id\n  private _lowestId = 0;\n  // whether a full clear happened before\n  private _fullyCleared = false;\n  // whether render should do a full clear\n  private _needsFullClear = false;\n  // hard limit of stored pixels (fallback limit of 10 MB)\n  private _pixelLimit: number = 2500000;\n\n  private _viewportMetrics: { cols: number, rows: number };\n  public onImageAdded: (() => void) | undefined;\n  public onImageDeleted: ((storageId: number) => void) | undefined;\n\n  constructor(\n    private _terminal: ITerminalExt,\n    private _renderer: ImageRenderer,\n    private _opts: IImageAddonOptions\n  ) {\n    try {\n      this.setLimit(this._opts.storageLimit);\n    } catch (e: unknown) {\n      if (e instanceof Error) {\n        console.error(e.message);\n      }\n      console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n    }\n    this._viewportMetrics = {\n      cols: this._terminal.cols,\n      rows: this._terminal.rows\n    };\n  }\n\n  public dispose(): void {\n    this.reset();\n  }\n\n  public reset(): void {\n    for (const spec of this._images.values()) {\n      spec.marker?.dispose();\n    }\n    // NOTE: marker.dispose above already calls ImageBitmap.close\n    // therefore we can just wipe the map here\n    this._images.clear();\n    this._renderer.clearAll();\n  }\n\n  public getLimit(): number {\n    return this._pixelLimit * 4 / 1000000;\n  }\n\n  public setLimit(value: number): void {\n    if (value < 0.5 || value > 1000) {\n      throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n    }\n    this._pixelLimit = (value / 4 * 1000000) >>> 0;\n    this._evictOldest(0);\n  }\n\n  public getUsage(): number {\n    return this._getStoredPixels() * 4 / 1000000;\n  }\n\n  private _getStoredPixels(): number {\n    let storedPixels = 0;\n    for (const spec of this._images.values()) {\n      if (spec.orig) {\n        storedPixels += spec.orig.width * spec.orig.height;\n        if (spec.actual && spec.actual !== spec.orig) {\n          storedPixels += spec.actual.width * spec.actual.height;\n        }\n      }\n    }\n    return storedPixels;\n  }\n\n  private _delImg(id: number): void {\n    const spec = this._images.get(id);\n    if (!spec) return;\n    this._images.delete(id);\n    // FIXME: really ugly workaround to get bitmaps deallocated :(\n    if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n      spec.orig.close();\n    }\n    this.onImageDeleted?.(id);\n  }\n\n  /**\n   * Wipe canvas and images on alternate buffer.\n   */\n  public wipeAlternate(): void {\n    // remove all alternate tagged images\n    const zero = [];\n    for (const [id, spec] of this._images.entries()) {\n      if (spec.bufferType === 'alternate') {\n        spec.marker?.dispose();\n        zero.push(id);\n      }\n    }\n    for (const id of zero) {\n      this._delImg(id);\n    }\n    // mark canvas to be wiped on next render\n    this._needsFullClear = true;\n    this._fullyCleared = false;\n  }\n\n  /**\n   * Delete an image by its internal storage ID.\n   * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n   */\n  public deleteImage(id: number): void {\n    const spec = this._images.get(id);\n    if (spec) {\n      spec.marker?.dispose();\n      this._delImg(id);\n    }\n  }\n\n  /**\n   * Method to add an image to the storage.\n   * @param img - The image to add (canvas or bitmap).\n   * @param scrolling - When true, cursor advances with the image (lineFeed per row).\n   *   When false, image is placed at (0,0) and cursor is restored (DECSET 80 / sixel origin mode).\n   * @param layer - Which canvas layer to render on ('top' or 'bottom').\n   * @param zIndex - Z-index for image layering within the same layer.\n   * @returns The internal image ID assigned to the stored image.\n   */\n  public addImage(img: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer = 'top', zIndex: number = 0): number {\n    // never allow storage to exceed memory limit\n    this._evictOldest(img.width * img.height);\n\n    // calc rows x cols needed to display the image\n    let cellSize = this._renderer.cellSize;\n    if (cellSize.width === -1 || cellSize.height === -1) {\n      cellSize = CELL_SIZE_DEFAULT;\n    }\n    const cols = Math.ceil(img.width / cellSize.width);\n    const rows = Math.ceil(img.height / cellSize.height);\n\n    const imageId = ++this._lastId;\n\n    const buffer = this._terminal._core.buffer;\n    const termCols = this._terminal.cols;\n    const termRows = this._terminal.rows;\n    const originX = buffer.x;\n    const originY = buffer.y;\n    let offset = originX;\n    let tileCount = 0;\n\n    if (!scrolling) {\n      buffer.x = 0;\n      buffer.y = 0;\n      offset = 0;\n    }\n\n    this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n    for (let row = 0; row < rows; ++row) {\n      const line = buffer.lines.get(buffer.y + buffer.ybase);\n      for (let col = 0; col < cols; ++col) {\n        if (offset + col >= termCols) break;\n        this._writeToCell(line as IBufferLineExt, offset + col, imageId, row * cols + col);\n        tileCount++;\n      }\n      if (scrolling) {\n        if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n      } else {\n        if (++buffer.y >= termRows) break;\n      }\n      buffer.x = offset;\n    }\n    this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n    // cursor positioning modes\n    if (scrolling) {\n      buffer.x = offset;\n    } else {\n      buffer.x = originX;\n      buffer.y = originY;\n    }\n\n    // deleted images with zero tile count\n    const zero = [];\n    for (const [id, spec] of this._images.entries()) {\n      if (spec.tileCount < 1) {\n        spec.marker?.dispose();\n        zero.push(id);\n      }\n    }\n    for (const id of zero) {\n      this._delImg(id);\n    }\n\n    // eviction marker:\n    // delete the image when the marker gets disposed\n    const endMarker = this._terminal.registerMarker(0);\n    endMarker?.onDispose(() => {\n      const spec = this._images.get(imageId);\n      if (spec) {\n        this._delImg(imageId);\n      }\n    });\n\n    // since markers do not work on alternate for some reason,\n    // we evict images here manually\n    if (this._terminal.buffer.active.type === 'alternate') {\n      this._evictOnAlternate();\n    }\n\n    // create storage entry\n    const imgSpec: IImageSpec = {\n      orig: img,\n      origCellSize: cellSize,\n      actual: img,\n      actualCellSize: { ...cellSize },  // clone needed, since later modified\n      marker: endMarker || undefined,\n      tileCount,\n      bufferType: this._terminal.buffer.active.type,\n      layer,\n      zIndex\n    };\n\n    // finally add the image\n    this._images.set(imageId, imgSpec);\n    this.onImageAdded?.();\n    return imageId;\n  }\n\n\n  /**\n   * Render method. Collects buffer information and triggers\n   * canvas updates.\n   */\n  // TODO: Should we move this to the ImageRenderer?\n  public render(range: { start: number, end: number }): void {\n    // Determine which layers have images\n    let hasTopImages = false;\n    let hasBottomImages = false;\n    for (const spec of this._images.values()) {\n      if (spec.layer === 'bottom') {\n        hasBottomImages = true;\n      } else {\n        hasTopImages = true;\n      }\n      if (hasTopImages && hasBottomImages) break;\n    }\n\n    // Lazily insert layers that are needed\n    if (hasTopImages && !this._renderer.hasLayer('top')) {\n      this._renderer.insertLayerToDom('top');\n      if (!this._renderer.hasLayer('top')) return;\n    }\n    if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n      this._renderer.insertLayerToDom('bottom');\n    }\n\n    // rescale if needed\n    this._renderer.rescaleCanvas();\n\n    // exit early if we dont have any images to test for\n    if (!this._images.size) {\n      if (!this._fullyCleared) {\n        this._renderer.clearAll();\n        this._fullyCleared = true;\n        this._needsFullClear = false;\n      }\n      if (this._renderer.hasLayer('top')) {\n        this._renderer.removeLayerFromDom('top');\n      }\n      if (this._renderer.hasLayer('bottom')) {\n        this._renderer.removeLayerFromDom('bottom');\n      }\n      return;\n    }\n\n    // Remove layers no longer needed\n    if (!hasTopImages && this._renderer.hasLayer('top')) {\n      this._renderer.clearAll('top');\n      this._renderer.removeLayerFromDom('top');\n    }\n    if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n      this._renderer.clearAll('bottom');\n      this._renderer.removeLayerFromDom('bottom');\n    }\n\n    // buffer switches force a full clear\n    if (this._needsFullClear) {\n      this._renderer.clearAll();\n      this._fullyCleared = true;\n      this._needsFullClear = false;\n    }\n\n    const { start, end } = range;\n    const buffer = this._terminal._core.buffer;\n    const cols = this._terminal._core.cols;\n\n    // clear drawing area\n    this._renderer.clearLines(start, end);\n\n    // Collect draw calls so we can sort by z-index (lower z drawn first).\n    const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n    const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n    // walk all cells in viewport and collect tiles found\n    // Note: We check _extendedAttrs directly (not just HAS_EXTENDED flag)\n    // because text writes clear the BG flag but leave image tile data intact.\n    // This lets top-layer images survive text overwrites (kitty C=1 behavior).\n    for (let row = start; row <= end; ++row) {\n      const line = buffer.lines.get(row + buffer.ydisp) as IBufferLineExt;\n      if (!line) return;\n      for (let col = 0; col < cols; ++col) {\n        let e: IExtendedAttrsImage;\n        if (line.getBg(col) & BgFlags.HAS_EXTENDED) {\n          e = line._extendedAttrs[col] ?? EMPTY_ATTRS;\n        } else {\n          const maybeImg = line._extendedAttrs[col] as IExtendedAttrsImage | undefined;\n          if (!maybeImg || maybeImg.imageId === undefined || maybeImg.imageId === -1) {\n            continue;\n          }\n          e = maybeImg;\n        }\n        const imageId = e.imageId;\n        if (imageId === undefined || imageId === -1) {\n          continue;\n        }\n        const imgSpec = this._images.get(imageId);\n        if (e.tileId !== -1) {\n          const startTile = e.tileId;\n          const startCol = col;\n          let count = 1;\n          /**\n           * merge tiles to the right into a single draw call, if:\n           * - not at end of line\n           * - cell has same image id\n           * - cell has consecutive tile id\n           * Also check _extendedAttrs directly for cells where text cleared HAS_EXTENDED.\n           */\n          while (++col < cols) {\n            const nextE = line._extendedAttrs[col] as IExtendedAttrsImage | undefined;\n            if (!nextE || nextE.imageId !== imageId || nextE.tileId !== startTile + count) {\n              break;\n            }\n            e = nextE;\n            count++;\n          }\n          col--;\n          if (imgSpec) {\n            if (imgSpec.actual) {\n              drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n            }\n          } else if (this._opts.showPlaceholder) {\n            placeholderCalls.push({ col: startCol, row, count });\n          }\n          this._fullyCleared = false;\n        }\n      }\n    }\n\n    // Sort by z-index so lower z draws first (higher z renders on top)\n    drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n    // Draw placeholders first (lowest priority)\n    for (const call of placeholderCalls) {\n      this._renderer.drawPlaceholder(call.col, call.row, call.count);\n    }\n\n    // Draw images in z-index order\n    for (const call of drawCalls) {\n      this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n    }\n  }\n\n  public viewportResize(metrics: { cols: number, rows: number }): void {\n    // exit early if we have nothing in storage\n    if (!this._images.size) {\n      this._viewportMetrics = metrics;\n      return;\n    }\n\n    // handle only viewport width enlargements, exit all other cases\n    // TODO: needs patch for tile counter\n    if (this._viewportMetrics.cols >= metrics.cols) {\n      this._viewportMetrics = metrics;\n      return;\n    }\n\n    // walk scrollbuffer at old col width to find all possible expansion matches\n    const buffer = this._terminal._core.buffer;\n    const rows = buffer.lines.length;\n    const oldCol = this._viewportMetrics.cols - 1;\n    for (let row = 0; row < rows; ++row) {\n      const line = buffer.lines.get(row) as IBufferLineExt;\n      if (line.getBg(oldCol) & BgFlags.HAS_EXTENDED) {\n        const e: IExtendedAttrsImage = line._extendedAttrs[oldCol] ?? EMPTY_ATTRS;\n        const imageId = e.imageId;\n        if (imageId === undefined || imageId === -1) {\n          continue;\n        }\n        const imgSpec = this._images.get(imageId);\n        if (!imgSpec) {\n          continue;\n        }\n        // found an image tile at oldCol, check if it qualifies for right exapansion\n        const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n        if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n          continue;\n        }\n        // expand only if right side is empty (nothing got wrapped from below)\n        let hasData = false;\n        for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n          if (line._data[rightCol * Cell.SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) {\n            hasData = true;\n            break;\n          }\n        }\n        if (hasData) {\n          continue;\n        }\n        // do right expansion on terminal buffer\n        const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n        let lastTile = e.tileId;\n        for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n          this._writeToCell(line as IBufferLineExt, expandCol, imageId, ++lastTile);\n          imgSpec.tileCount++;\n        }\n      }\n    }\n    // store new viewport metrics\n    this._viewportMetrics = metrics;\n  }\n\n  /**\n   * Retrieve original canvas at buffer position.\n   */\n  public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n    const buffer = this._terminal._core.buffer;\n    const line = buffer.lines.get(y) as IBufferLineExt;\n    if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n      const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n      if (e.imageId && e.imageId !== -1) {\n        const orig = this._images.get(e.imageId)?.orig;\n        if (window.ImageBitmap && orig instanceof ImageBitmap) {\n          const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n          canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n          return canvas;\n        }\n        return orig as HTMLCanvasElement;\n      }\n    }\n  }\n\n  /**\n   * Extract active single tile at buffer position.\n   */\n  public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n    const buffer = this._terminal._core.buffer;\n    const line = buffer.lines.get(y) as IBufferLineExt;\n    if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n      const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n      if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n        const spec = this._images.get(e.imageId);\n        if (spec) {\n          return this._renderer.extractTile(spec, e.tileId);\n        }\n      }\n    }\n  }\n\n  // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n  // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n  private _evictOldest(room: number): number {\n    const used = this._getStoredPixels();\n    let current = used;\n    while (this._pixelLimit < current + room && this._images.size) {\n      const spec = this._images.get(++this._lowestId);\n      if (spec && spec.orig) {\n        current -= spec.orig.width * spec.orig.height;\n        if (spec.actual && spec.orig !== spec.actual) {\n          current -= spec.actual.width * spec.actual.height;\n        }\n        spec.marker?.dispose();\n        this._delImg(this._lowestId);\n      }\n    }\n    return used - current;\n  }\n\n  private _writeToCell(line: IBufferLineExt, x: number, imageId: number, tileId: number): void {\n    if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n      const old = line._extendedAttrs[x];\n      if (old) {\n        if (old.imageId !== undefined) {\n          // found an old ExtendedAttrsImage, since we know that\n          // they are always isolated instances (single cell usage),\n          // we can re-use it and just update their id entries\n          const oldSpec = this._images.get(old.imageId);\n          if (oldSpec) {\n            // early eviction for in-viewport overwrites\n            oldSpec.tileCount--;\n          }\n          old.imageId = imageId;\n          old.tileId = tileId;\n          return;\n        }\n        // found a plain ExtendedAttrs instance, clone it to new entry\n        line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);\n        return;\n      }\n    }\n    // fall-through: always create new ExtendedAttrsImage entry\n    line._data[x * Cell.SIZE + Cell.BG] |= BgFlags.HAS_EXTENDED;\n    line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);\n  }\n\n  private _evictOnAlternate(): void {\n    // nullify tile count of all images on alternate buffer\n    for (const spec of this._images.values()) {\n      if (spec.bufferType === 'alternate') {\n        spec.tileCount = 0;\n      }\n    }\n    // re-count tiles on whole buffer\n    const buffer = this._terminal._core.buffer;\n    for (let y = 0; y < this._terminal.rows; ++y) {\n      const line = buffer.lines.get(y) as IBufferLineExt;\n      if (!line) {\n        continue;\n      }\n      for (let x = 0; x < this._terminal.cols; ++x) {\n        if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n          const imgId = line._extendedAttrs[x]?.imageId;\n          if (imgId) {\n            const spec = this._images.get(imgId);\n            if (spec) {\n              spec.tileCount++;\n            }\n          }\n        }\n      }\n    }\n    // deleted images with zero tile count\n    const zero = [];\n    for (const [id, spec] of this._images.entries()) {\n      if (spec.bufferType === 'alternate' && !spec.tileCount) {\n        spec.marker?.dispose();\n        zero.push(id);\n      }\n    }\n    for (const id of zero) {\n      this._delImg(id);\n    }\n  }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n  // Limit held memory in base64 decoder (encoded bytes).\n  KEEP_DATA = 4194304,\n  // Initial buffer allocation for the decoder.\n  INITIAL_DATA = 1048576,\n  // Local mirror of const enum (esbuild can't inline const enums from external packages)\n  OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n  name: 'Unnamed file',\n  size: 0,\n  width: 'auto',\n  height: 'auto',\n  preserveAspectRatio: 1,\n  inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n  private _aborted = false;\n  private _hp = new HeaderParser();\n  private _header: IHeaderFields = DEFAULT_HEADER;\n  private _dec: Base64Decoder;\n  private _metrics = UNSUPPORTED_TYPE;\n\n  constructor(\n    private readonly _opts: IImageAddonOptions,\n    private readonly _renderer: ImageRenderer,\n    private readonly _storage: IIPImageStorage,\n    private readonly _coreTerminal: ITerminalExt\n  ) {\n    const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n    const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n    this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n  }\n\n  public reset(): void {}\n\n  public start(): void {\n    this._aborted = false;\n    this._header = DEFAULT_HEADER;\n    this._metrics  = UNSUPPORTED_TYPE;\n    this._hp.reset();\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._aborted) return;\n\n    if (this._hp.state === HeaderState.END) {\n      if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n        this._dec.release();\n        this._aborted = true;\n      }\n    } else {\n      const dataPos = this._hp.parse(data, start, end);\n      if (dataPos === -1) {\n        this._aborted = true;\n        return;\n      }\n      if (dataPos > 0) {\n        this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n        if (!this._header.inline || !this._header.size || this._header.size > this._opts.iipSizeLimit) {\n          this._aborted = true;\n          return;\n        }\n        this._dec.init();\n        if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n          this._dec.release();\n          this._aborted = true;\n        }\n      }\n    }\n  }\n\n  public end(success: boolean): boolean | Promise<boolean> {\n    if (this._aborted) return true;\n\n    let w = 0;\n    let h = 0;\n\n    // early exit condition chain\n    let cond: number | boolean = true;\n    if (cond = success) {\n      if (cond = !this._dec.end()) {\n        if (cond = this._dec.data8.length === this._header.size) {\n          this._metrics = imageType(this._dec.data8);\n          if (cond = this._metrics.mime !== 'unsupported') {\n            w = this._metrics.width;\n            h = this._metrics.height;\n            if (cond = w && h && w * h < this._opts.pixelLimit) {\n              [w, h] = this._resize(w, h).map(Math.floor);\n              cond = w && h && w * h < this._opts.pixelLimit;\n            }\n          }\n        }\n      }\n    }\n    if (!cond) {\n      this._dec.release();\n      return true;\n    }\n\n    // HACK: The types on Blob are too restrictive, this is a Uint8Array so the browser accepts it\n    const blob = new Blob([this._dec.data8 as Uint8Array<ArrayBuffer>], { type: this._metrics.mime });\n    this._dec.release();\n\n    if (!window.createImageBitmap) {\n      const url = URL.createObjectURL(blob);\n      const img = new Image();\n      return new Promise<boolean>(r => {\n        img.addEventListener('load', () => {\n          URL.revokeObjectURL(url);\n          const canvas = ImageRenderer.createCanvas(window.document, w, h);\n          canvas.getContext('2d')?.drawImage(img, 0, 0, w, h);\n          this._storage.addImage(canvas);\n          r(true);\n        });\n        img.src = url;\n        // sanity measure to avoid terminal blocking from dangling promise\n        // happens from corrupt data (onload never gets fired)\n        setTimeout(() => r(true), 1000);\n      });\n    }\n    return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n      .then(bm => {\n        this._storage.addImage(bm);\n        return true;\n      });\n  }\n\n  private _resize(w: number, h: number): [number, number] {\n    const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n    const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n    const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n    const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n    const rw = this._dim(this._header.width!, width, cw);\n    const rh = this._dim(this._header.height!, height, ch);\n    if (!rw && !rh) {\n      const wf = width / w;         // TODO: should this respect initial cursor offset?\n      const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n      const f = Math.min(wf, hf);\n      return f < 1 ? [w * f, h * f] : [w, h];\n    }\n    return !rw\n      ? [w * rh / h, rh]\n      : this._header.preserveAspectRatio || !rw || !rh\n        ? [rw, h * rw / w] : [rw, rh];\n  }\n\n  private _dim(s: string, total: number, cdim: number): number {\n    if (s === 'auto') return 0;\n    if (s.endsWith('%')) return parseInt(s.slice(0, -1)) * total / 100;\n    if (s.endsWith('px')) return parseInt(s.slice(0, -2));\n    return parseInt(s) * cdim;\n  }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\n\nexport interface IHeaderFields {\n  [key: string]: number | string | Uint32Array | null | undefined;\n  // base-64 encoded filename. Defaults to \"Unnamed file\".\n  name: string;\n  // File size in bytes. The file transfer will be canceled if this size is exceeded.\n  size: number;\n  /**\n   * Optional width and height to render:\n   * - N: N character cells.\n   * - Npx: N pixels.\n   * - N%: N percent of the session's width or height.\n   * - auto: The image's inherent size will be used to determine an appropriate dimension.\n   */\n  width?: string;\n  height?: string;\n  // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n  preserveAspectRatio?: number;\n  // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n  // (download not supported).\n  inline?: number;\n}\n\nexport const enum HeaderState {\n  START = 0,\n  ABORT = 1,\n  KEY = 2,\n  VALUE = 3,\n  END = 4\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n  let s = '';\n  for (let i = 0; i < data.length; ++i) {\n    s += String.fromCharCode(data[i]);\n  }\n  return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n  let v = 0;\n  for (let i = 0; i < data.length; ++i) {\n    if (data[i] < 48 || data[i] > 57) {\n      throw new Error('illegal char');\n    }\n    v = v * 10 + data[i] - 48;\n  }\n  return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n  const v = toStr(data);\n  if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n    throw new Error('illegal size');\n  }\n  return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n  if (typeof Buffer !== 'undefined') {\n    return Buffer.from(toStr(data), 'base64').toString();\n  }\n  const bs = atob(toStr(data));\n  const b = new Uint8Array(bs.length);\n  for (let i = 0; i < b.length; ++i) {\n    b[i] = bs.charCodeAt(i);\n  }\n  return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n  inline: toInt,\n  size: toInt,\n  name: toName,\n  width: toSize,\n  height: toSize,\n  preserveAspectRatio: toInt\n};\n\n\nconst FILE_MARKER = [70, 105, 108, 101];\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n  public state: HeaderState = HeaderState.START;\n  private _buffer = new Uint32Array(MAX_FIELDCHARS);\n  private _position = 0;\n  private _key = '';\n  public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n  public reset(): void {\n    this._buffer.fill(0);\n    this.state = HeaderState.START;\n    this._position = 0;\n    this.fields = {};\n    this._key = '';\n  }\n\n  public parse(data: Uint32Array, start: number, end: number): number {\n    let state = this.state;\n    let pos = this._position;\n    const buffer = this._buffer;\n    if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n    if (state === HeaderState.START && pos > 6) return -1;\n    for (let i = start; i < end; ++i) {\n      const c = data[i];\n      switch (c) {\n        case 59: // ;\n          if (!this._storeValue(pos)) return this._a();\n          state = HeaderState.KEY;\n          pos = 0;\n          break;\n        case 61: // =\n          if (state === HeaderState.START) {\n            for (let k = 0; k < FILE_MARKER.length; ++k) {\n              if (buffer[k] !== FILE_MARKER[k]) return this._a();\n            }\n            state = HeaderState.KEY;\n            pos = 0;\n          } else if (state === HeaderState.KEY) {\n            if (!this._storeKey(pos)) return this._a();\n            state = HeaderState.VALUE;\n            pos = 0;\n          } else if (state === HeaderState.VALUE) {\n            if (pos >= MAX_FIELDCHARS) return this._a();\n            buffer[pos++] = c;\n          }\n          break;\n        case 58: // :\n          if (state === HeaderState.VALUE) {\n            if (!this._storeValue(pos)) return this._a();\n          }\n          this.state = HeaderState.END;\n          return i + 1;\n        default:\n          if (pos >= MAX_FIELDCHARS) return this._a();\n          buffer[pos++] = c;\n      }\n    }\n    this.state = state;\n    this._position = pos;\n    return -2;\n  }\n\n  private _a(): number {\n    this.state = HeaderState.ABORT;\n    return -1;\n  }\n\n  private _storeKey(pos: number): boolean {\n    const k = toStr(this._buffer.subarray(0, pos));\n    if (k) {\n      this._key = k;\n      this.fields[k] = null;\n      return true;\n    }\n    return false;\n  }\n\n  private _storeValue(pos: number): boolean {\n    if (this._key) {\n      try {\n        const v = this._buffer.slice(0, pos);\n        this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n      } catch {\n        return false;\n      }\n      return true;\n    }\n    return false;\n  }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'unsupported' | '';\n\nexport interface IMetrics {\n  mime: ImageType;\n  width: number;\n  height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n  mime: 'unsupported',\n  width: 0,\n  height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n  if (d.length < 24) {\n    return UNSUPPORTED_TYPE;\n  }\n  const d32 = new Uint32Array(d.buffer, d.byteOffset, 6);\n  // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n  // + first chunk must be IHDR\n  if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n    return {\n      mime: 'image/png',\n      width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n      height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n    };\n  }\n  // JPEG: FF D8 FF\n  if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n    const [width, height] = jpgSize(d);\n    return { mime: 'image/jpeg', width, height };\n  }\n  // GIF: GIF87a or GIF89a\n  if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n    return {\n      mime: 'image/gif',\n      width: d[7] << 8 | d[6],\n      height: d[9] << 8 | d[8]\n    };\n  }\n  return UNSUPPORTED_TYPE;\n}\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n  const len = d.length;\n  let i = 4;\n  let blockLength = d[i] << 8 | d[i + 1];\n  while (true) {\n    i += blockLength;\n    if (i >= len) {\n      // exhausted without size info\n      return [0, 0];\n    }\n    if (d[i] !== 0xFF) {\n      return [0, 0];\n    }\n    if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n      if (i + 8 < len) {\n        return [\n          d[i + 7] << 8 | d[i + 8],\n          d[i + 5] << 8 | d[i + 6]\n        ];\n      }\n      return [0, 0];\n    }\n    i += 2;\n    blockLength = d[i] << 8 | d[i + 1];\n  }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n  KittyAction,\n  KittyFormat,\n  KittyCompression,\n  IKittyCommand,\n  IPendingTransmission,\n  IKittyImageData,\n  BYTES_PER_PIXEL_RGB,\n  BYTES_PER_PIXEL_RGBA,\n  ALPHA_OPAQUE,\n  parseKittyCommand\n} from './KittyGraphicsTypes';\n\n// Memory limit for base64 decoder (4MB, same as IIPHandler)\nconst DECODER_KEEP_DATA = 4194304;\nconst DECODER_INITIAL_DATA = 4194304; // 4MB\n\n// Local mirror of const enum (esbuild can't inline const enums from external packages)\nconst DECODER_OK: DecodeStatus.OK = 0;\n\n// Maximum control data size\nconst MAX_CONTROL_DATA_SIZE = 512;\n\n// Semicolon codepoint\nconst SEMICOLON = 0x3B;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n  private _aborted = false;\n  private _decodeError = false;\n\n  private _activeDecoder: Base64Decoder | null = null;\n  private readonly _maxEncodedBytes: number;\n  private readonly _initialEncodedBytes: number;\n\n  // Streaming related states\n\n  // True while receiving control data (before semicolon).\n  private _inControlData = true;\n\n  // Buffer for control data.\n  private _controlData = new Uint32Array(MAX_CONTROL_DATA_SIZE);\n  private _controlLength = 0;\n\n  // Pre-calculated encoded size limit\n  private _encodedSizeLimit = 0;\n  private _totalEncodedSize = 0;\n\n  // Parsed command. These are the control data before semicolon.\n  private _parsedCommand: IKittyCommand | null = null;\n\n  // Storage related states\n\n  private _pendingTransmissions: Map<number, IPendingTransmission> = new Map();\n  // Tracks the pending key of the most recently started chunked upload.\n  // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n  // When a chunk arrives with no i=, this key is used to find the pending upload.\n  private _lastPendingKey: number | undefined;\n\n  constructor(\n    private readonly _opts: IImageAddonOptions,\n    private readonly _renderer: ImageRenderer,\n    private readonly _kittyStorage: KittyImageStorage,\n    private readonly _coreTerminal: ITerminalExt\n  ) {\n    // Convert decoded size limit -> max encoded bytes.\n    this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n    // ensure we preallocate more than configured limit while using 4mb initial size.\n    this._initialEncodedBytes = Math.min(DECODER_INITIAL_DATA, this._maxEncodedBytes);\n  }\n\n  public reset(): void {\n    this._cleanupAllPending();\n    if (this._activeDecoder) {\n      this._activeDecoder.release();\n      this._activeDecoder = null;\n    }\n    this._kittyStorage.reset();\n  }\n\n  public dispose(): void {\n    this.reset();\n  }\n\n  private _removePendingEntry(key: number): void {\n    this._pendingTransmissions.delete(key);\n    if (this._lastPendingKey === key) {\n      this._lastPendingKey = undefined;\n    }\n  }\n\n  private _cleanupAllPending(): void {\n    for (const pending of this._pendingTransmissions.values()) {\n      pending.decoder.release();\n    }\n    this._pendingTransmissions.clear();\n    this._lastPendingKey = undefined;\n  }\n\n  public start(): void {\n    this._aborted = false;\n    this._decodeError = false;\n    this._inControlData = true;\n    this._controlLength = 0;\n    this._parsedCommand = null;\n    // Pre-calculate encoded limit once: base64 is 4 bytes encoded \u2192 3 bytes decoded\n    this._encodedSizeLimit = this._maxEncodedBytes;\n    this._totalEncodedSize = 0;\n    this._activeDecoder = null;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._aborted) return;\n\n    if (!this._inControlData) {\n      this._streamPayload(data, start, end);\n    } else {\n      // Scan for semicolon\n      let controlEnd = end;\n      for (let i = start; i < end; i++) {\n        if (data[i] === SEMICOLON) {\n          this._inControlData = false;\n          controlEnd = i;\n          break;\n        }\n      }\n\n      // Copy control data\n      const copyLength = controlEnd - start;\n      if (this._controlLength + copyLength > MAX_CONTROL_DATA_SIZE) {\n        this._aborted = true;\n        return;\n      }\n      this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n      this._controlLength += copyLength;\n\n      if (!this._inControlData) {\n        // Found semicolon - parse control data early for validation\n        this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n        // Early validation: i+I conflict\n        if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n          this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n          this._aborted = true;\n          return;\n        }\n\n        // Delete action doesn't need payload - skip streaming\n        if (this._parsedCommand.action === KittyAction.DELETE) {\n          return;\n        }\n\n        // Stream remaining as payload\n        const payloadStart = controlEnd + 1;\n        if (payloadStart < end) {\n          this._streamPayload(data, payloadStart, end);\n        }\n      }\n    }\n  }\n\n  // Stream payload bytes into the base64 decoder.\n  private _streamPayload(data: Uint32Array, start: number, end: number): void {\n    if (this._aborted) return;\n\n    // Check size limit (compare encoded bytes against pre-calculated limit)\n    // Include cumulative size from pending transmission for multi-chunk images.\n    // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n    const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n    const pending = this._pendingTransmissions.get(pendingKey);\n    const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n    this._totalEncodedSize += end - start;\n    const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n    if (cumulativeEncodedSize > this._encodedSizeLimit) {\n      const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n      if (decoderToRelease) {\n        decoderToRelease.release();\n      }\n      this._activeDecoder = null;\n      if (pending) {\n        this._removePendingEntry(pendingKey);\n      }\n      this._aborted = true;\n      return;\n    }\n\n    if (this._decodeError) return;\n\n    if (pending?.decoder && !this._activeDecoder) {\n      this._activeDecoder = pending.decoder;\n    }\n    if (!this._activeDecoder) {\n      this._activeDecoder = new Base64Decoder(DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n      this._activeDecoder.init();\n    }\n\n    if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n      this._activeDecoder.release();\n      this._activeDecoder = null;\n      this._decodeError = true;\n      if (pending) {\n        this._removePendingEntry(pendingKey);\n      }\n    }\n  }\n\n  public end(success: boolean): boolean | Promise<boolean> {\n    if (this._aborted || !success) {\n      if (this._activeDecoder) {\n        this._activeDecoder.release();\n        this._activeDecoder = null;\n      }\n      return true;\n    }\n\n    // No semicolon = no payload (delete, capability query)\n    if (this._inControlData) {\n      return this._handleNoPayloadCommand();\n    }\n\n    // Use command parsed early in put() - i+I already validated there\n    const cmd = this._parsedCommand!;\n\n    // Delete action was handled by skipping payload - just execute\n    if (cmd.action === KittyAction.DELETE) {\n      return this._handleDelete(cmd);\n    }\n\n    // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n    const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n    const isMoreComing = cmd.more === 1;\n    const pending = this._pendingTransmissions.get(pendingKey);\n\n    if (isMoreComing) {\n      if (this._activeDecoder) {\n        if (pending) {\n          pending.totalEncodedSize += this._totalEncodedSize;\n          pending.decodeError = pending.decodeError || this._decodeError;\n        } else {\n          this._pendingTransmissions.set(pendingKey, {\n            cmd: { ...cmd },\n            decoder: this._activeDecoder,\n            totalEncodedSize: this._totalEncodedSize,\n            decodeError: this._decodeError\n          });\n        }\n        this._lastPendingKey = pendingKey;\n        this._activeDecoder = null;\n      }\n      return true;\n    }\n\n    // Final chunk received \u2014 clear the last pending key\n    if (pending) {\n      this._lastPendingKey = undefined;\n    }\n\n    let decodeError = this._decodeError;\n    let finalCmd = cmd;\n    let decoder = this._activeDecoder;\n\n    if (pending) {\n      finalCmd = pending.cmd;\n      decoder = pending.decoder;\n      decodeError = decodeError || pending.decodeError;\n      this._pendingTransmissions.delete(pendingKey);\n    }\n\n    let imageBytes = new Uint8Array(0);\n    if (decoder) {\n      if (decoder.end() !== DECODER_OK) {\n        decodeError = true;\n      }\n      imageBytes = decoder.data8;\n    }\n    this._activeDecoder = null;\n\n    // Handle command first \u2014 handlers create Blob/ImageData from imageBytes,\n    // which copies the data. Only then is it safe to release the decoder's\n    // wasm memory that imageBytes points into.\n    const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n    if (decoder) {\n      decoder.release();\n    }\n    return result;\n  }\n\n  // Command handling\n\n  private _parseControlDataString(): string {\n    let str = '';\n    for (let i = 0; i < this._controlLength; i++) {\n      str += String.fromCodePoint(this._controlData[i]);\n    }\n    return str;\n  }\n\n  private _handleNoPayloadCommand(): boolean | Promise<boolean> {\n    const cmd = parseKittyCommand(this._parseControlDataString());\n\n    // Per spec: specifying both i and I is an error\n    if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n      this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n      return true;\n    }\n\n    const action = cmd.action ?? 't';\n\n    switch (action) {\n      case KittyAction.DELETE:\n        return this._handleDelete(cmd);\n      case KittyAction.QUERY:\n        this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n        return true;\n      case KittyAction.PLACEMENT:\n        return this._handlePlacement(cmd);\n      default:\n        // TODO: Implement remaining actions when needed:\n        // - a=f (frame): animation frame operations\n        // - a=a (animation): animation control\n        // - a=c (compose): compose images\n        if (cmd.id !== undefined) {\n          this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n        }\n        return true;\n    }\n  }\n\n  private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise<boolean> {\n    const action = cmd.action ?? 't';\n\n    switch (action) {\n      case KittyAction.TRANSMIT: {\n        const result = this._handleTransmit(cmd, bytes, decodeError);\n        // Only send response when _handleTransmit didn't already respond\n        // (it handles unsupported transmission medium responses internally)\n        if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n          if (decodeError) {\n            this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n          } else if (bytes.length > 0) {\n            this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n          }\n        }\n        return result;\n      }\n      case KittyAction.TRANSMIT_DISPLAY:\n        return this._handleTransmitDisplay(cmd, bytes, decodeError);\n      case KittyAction.QUERY:\n        return this._handleQuery(cmd, bytes, decodeError);\n      case KittyAction.PLACEMENT:\n        // a=p ignores any payload \u2014 image data was already transmitted\n        return this._handlePlacement(cmd);\n      default:\n        // TODO: Implement remaining actions when needed:\n        // - a=f (frame): animation frame operations\n        // - a=a (animation): animation control\n        // - a=c (compose): compose images\n        if (cmd.id !== undefined) {\n          this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n        }\n        return true;\n    }\n  }\n\n  private _handlePlacement(cmd: IKittyCommand): boolean | Promise<boolean> {\n    if (cmd.id === undefined) {\n      return true;\n    }\n    const id = cmd.id;\n    const image = this._kittyStorage.getImage(id);\n    if (!image) {\n      this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n      return true;\n    }\n    const result = this._displayImage(image, cmd);\n    return result.then(success => {\n      this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n      return true;\n    });\n  }\n\n  private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n    // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n    // Currently only supports direct transmission (t=d, the default).\n    // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n    // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n    // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n    // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n    // 1. Check cmd.transmission (t key) before treating bytes as image data\n    // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n    // 3. For t=d: treat bytes as image data (current behavior)\n    // When implementing, also update _handleQuery to accept these transmission mediums.\n    const transmission = cmd.transmission ?? 'd';\n    if (transmission !== 'd') {\n      if (cmd.id !== undefined) {\n        this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n      }\n      return true;\n    }\n\n    if (decodeError || bytes.length === 0) return true;\n\n    this._kittyStorage.storeImage(cmd.id, {\n      data: new Blob([bytes as BlobPart]),\n      width: cmd.width ?? 0,\n      height: cmd.height ?? 0,\n      format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n      compression: cmd.compression ?? ''\n    });\n    return true;\n  }\n\n  private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise<boolean> {\n    if (decodeError) {\n      if (cmd.id !== undefined) {\n        this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n      }\n      return true;\n    }\n\n    this._handleTransmit(cmd, bytes, decodeError);\n\n    const id = cmd.id ?? this._kittyStorage.lastImageId;\n    const image = this._kittyStorage.getImage(id);\n    if (image) {\n      const result = this._displayImage(image, cmd);\n      if (cmd.id !== undefined) {\n        return result.then(success => {\n          this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n          return true;\n        });\n      }\n      return result.then(() => true);\n    }\n    return true;\n  }\n\n  private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n    const id = cmd.id ?? 0;\n    const quiet = cmd.quiet ?? 0;\n\n    // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n    // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n    // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n    const transmission = cmd.transmission ?? 'd';\n    if (transmission !== 'd') {\n      this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n      return true;\n    }\n\n    // Check decode error first (invalid base64)\n    if (decodeError) {\n      this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n      return true;\n    }\n\n    // Capability query (no payload) - just respond OK\n    if (bytes.length === 0) {\n      this._sendResponse(id, 'OK', quiet);\n      return true;\n    }\n\n    const format = cmd.format ?? KittyFormat.RGBA;\n\n    if (format === KittyFormat.PNG) {\n      this._sendResponse(id, 'OK', quiet);\n    } else {\n      const width = cmd.width ?? 0;\n      const height = cmd.height ?? 0;\n\n      if (!width || !height) {\n        this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n        return true;\n      }\n\n      const bytesPerPixel = format === KittyFormat.RGBA ? BYTES_PER_PIXEL_RGBA : BYTES_PER_PIXEL_RGB;\n      const expectedBytes = width * height * bytesPerPixel;\n\n      if (bytes.length < expectedBytes) {\n        this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n        return true;\n      }\n\n      this._sendResponse(id, 'OK', quiet);\n    }\n    return true;\n  }\n\n  private _handleDelete(cmd: IKittyCommand): boolean {\n    // Per spec: default delete selector is 'a' (delete all visible placements)\n    const selector = cmd.deleteSelector ?? 'a';\n\n    // TODO: Distinguish lowercase (delete placements only) from uppercase\n    // (delete placements + free stored image data). Currently both variants\n    // free everything since we don't separate stored data from placements.\n    switch (selector) {\n      case 'a':\n      case 'A':\n        this._cleanupAllPending();\n        this._kittyStorage.deleteAll();\n        break;\n      case 'i':\n      case 'I':\n        // TODO: When placement id tracking is implemented (see TODO in\n        // KittyImageStorage), d=i with p=<pid> should delete only that\n        // specific placement, while d=i without p should delete all\n        // placements for the image.\n        if (cmd.id !== undefined) {\n          const pending = this._pendingTransmissions.get(cmd.id);\n          if (pending) {\n            pending.decoder.release();\n          }\n          this._removePendingEntry(cmd.id);\n          this._kittyStorage.deleteById(cmd.id);\n        }\n        break;\n      default:\n        // Unsupported selectors (c, n, p, q, r, x, y, z, f) \u2014 ignore for now\n        break;\n    }\n    return true;\n  }\n\n  private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n    const isOk = message === 'OK';\n    if (isOk && quiet === 1) return;\n    if (!isOk && quiet === 2) return;\n\n    const pPart = placementId ? `,p=${placementId}` : '';\n    const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n    this._coreTerminal._core.coreService.triggerDataEvent(response);\n  }\n\n  // Image display\n\n  private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise<boolean> {\n    return this._decodeAndDisplay(image, cmd)\n      .then(() => true)\n      .catch(() => false);\n  }\n\n  private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise<void> {\n    let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n    try {\n      const cropX = Math.max(0, cmd.x ?? 0);\n      const cropY = Math.max(0, cmd.y ?? 0);\n      const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n      const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n      const maxCropW = Math.max(0, bitmap.width - cropX);\n      const maxCropH = Math.max(0, bitmap.height - cropY);\n      const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n      const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n      if (finalCropW === 0 || finalCropH === 0) {\n        throw new Error('invalid source rectangle');\n      }\n\n      if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n        const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n        bitmap.close();\n        bitmap = cropped;\n      }\n\n      const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n      const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n      // Per spec: c/r default to image's natural cell dimensions.\n      // If only one of c/r is specified, compute the other from image aspect ratio.\n      let imgCols: number;\n      let imgRows: number;\n      if (cmd.columns !== undefined && cmd.rows !== undefined) {\n        imgCols = cmd.columns;\n        imgRows = cmd.rows;\n      } else if (cmd.columns !== undefined) {\n        imgCols = cmd.columns;\n        imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n      } else if (cmd.rows !== undefined) {\n        imgRows = cmd.rows;\n        imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n      } else {\n        imgCols = Math.ceil(bitmap.width / cw);\n        imgRows = Math.ceil(bitmap.height / ch);\n      }\n\n      let w = bitmap.width;\n      let h = bitmap.height;\n\n      // Scale bitmap to fit placement rectangle when c/r are specified\n      if (cmd.columns !== undefined || cmd.rows !== undefined) {\n        w = Math.round(imgCols * cw);\n        h = Math.round(imgRows * ch);\n      }\n\n      if (w * h > this._opts.pixelLimit) {\n        throw new Error('image exceeds pixel limit');\n      }\n\n      // Save cursor position before addImage modifies it\n      const buffer = this._coreTerminal._core.buffer;\n      const savedX = buffer.x;\n      const savedY = buffer.y;\n      const savedYbase = buffer.ybase;\n\n      // Determine layer based on z-index: negative = behind text, 0+ = on top.\n      // When z<0 we always use the bottom layer even without allowTransparency \u2014\n      // the image will simply be hidden behind the opaque text background, which\n      // is the correct behavior (client asked for \"behind text\").\n      const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n      const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n      if (w !== bitmap.width || h !== bitmap.height) {\n        const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n        bitmap.close();\n        bitmap = scaled;\n      }\n\n      // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n      const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n      const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n      if (xOffset !== 0 || yOffset !== 0) {\n        // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n        // total placement area remains c*cw \u00D7 r*ch pixels and the offset image\n        // is clipped to fit. When c/r are unset, the padded canvas determines\n        // the natural cell dimensions.\n        const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n        const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n        const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n        const offsetCtx = offsetCanvas.getContext('2d');\n        if (!offsetCtx) {\n          throw new Error('Failed to create offset canvas context');\n        }\n        offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n        const offsetBitmap = await createImageBitmap(offsetCanvas);\n        offsetCanvas.width = offsetCanvas.height = 0;\n        bitmap.close();\n        bitmap = offsetBitmap;\n        w = bitmap.width;\n        h = bitmap.height;\n        if (w * h > this._opts.pixelLimit) {\n          throw new Error('image exceeds pixel limit');\n        }\n        if (cmd.columns === undefined) {\n          imgCols = Math.ceil(bitmap.width / cw);\n        }\n        if (cmd.rows === undefined) {\n          imgRows = Math.ceil(bitmap.height / ch);\n        }\n      }\n\n      const zIndex = cmd.zIndex ?? 0;\n      this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n      bitmap = undefined;  // ownership transferred to storage\n\n      // Kitty cursor movement\n      // Per spec: cursor placed at first column after last image column,\n      // on the last row of the image. C=1 means don't move cursor.\n      if (cmd.cursorMovement === 1) {\n        // C=1: restore cursor to position before image was placed\n        const scrolled = buffer.ybase - savedYbase;\n        buffer.x = savedX;\n        // Can't restore cursor to scrollback?\n        buffer.y = Math.max(savedY - scrolled, 0);\n      } else {\n        // Default (C=0): advance cursor horizontally past the image\n        // addImage already positioned cursor on the last row via lineFeeds\n        buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n      }\n    } catch (e) {\n      bitmap?.close();\n      throw e;\n    }\n  }\n\n  // Create ImageBitmap from already-decoded image data.\n  private async _createBitmap(image: IKittyImageData): Promise<ImageBitmap> {\n    let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n    if (image.compression === KittyCompression.ZLIB) {\n      bytes = await this._decompressZlib(bytes);\n    }\n\n    if (image.format === KittyFormat.PNG) {\n      const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n      if (!window.createImageBitmap) {\n        const url = URL.createObjectURL(blob);\n        const img = new Image();\n        return new Promise<ImageBitmap>((resolve, reject) => {\n          img.addEventListener('load', () => {\n            URL.revokeObjectURL(url);\n            const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n            canvas.getContext('2d')?.drawImage(img, 0, 0);\n            createImageBitmap(canvas).then(resolve).catch(reject);\n          });\n          img.addEventListener('error', () => {\n            URL.revokeObjectURL(url);\n            reject(new Error('Failed to load image'));\n          });\n          img.src = url;\n        });\n      }\n      return createImageBitmap(blob);\n    }\n\n    // Raw pixel data\n    const width = image.width;\n    const height = image.height;\n\n    if (!width || !height) {\n      throw new Error('Width and height required for raw pixel data');\n    }\n\n    const bytesPerPixel = image.format === KittyFormat.RGBA ? BYTES_PER_PIXEL_RGBA : BYTES_PER_PIXEL_RGB;\n    const expectedBytes = width * height * bytesPerPixel;\n\n    if (bytes.length < expectedBytes) {\n      throw new Error('Insufficient pixel data');\n    }\n\n    const pixelCount = width * height;\n\n    if (image.format === KittyFormat.RGBA) {\n      // RGBA: use bytes directly \u2014 no copy needed\n      return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * BYTES_PER_PIXEL_RGBA), width, height));\n    }\n\n    // RGB\u2192RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n    // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes \u2014 ~6x faster.\n    // Assumes little-endian (all modern browsers/Node.js).\n    const data = new Uint8ClampedArray(pixelCount * BYTES_PER_PIXEL_RGBA);\n    const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n    const dst32 = new Uint32Array(data.buffer);\n    const alignedPixels = pixelCount & ~3;  // round down to multiple of 4\n\n    let srcOffset = 0;\n    let dstOffset = 0;\n    for (let i = 0; i < alignedPixels; i += 4) {\n      const b0 = src32[srcOffset++];\n      const b1 = src32[srcOffset++];\n      const b2 = src32[srcOffset++];\n      // Little-endian: pixel bytes are [R,G,B] \u2192 uint32 ABGR layout\n      dst32[dstOffset++] = 0xFF000000 | b0;\n      dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n      dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n      dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n    }\n\n    // Handle remaining 1\u20133 pixels\n    let srcByte = alignedPixels * BYTES_PER_PIXEL_RGB;\n    let dstByte = alignedPixels * BYTES_PER_PIXEL_RGBA;\n    for (let i = alignedPixels; i < pixelCount; i++) {\n      data[dstByte]     = bytes[srcByte];\n      data[dstByte + 1] = bytes[srcByte + 1];\n      data[dstByte + 2] = bytes[srcByte + 2];\n      data[dstByte + 3] = ALPHA_OPAQUE;\n      srcByte += BYTES_PER_PIXEL_RGB;\n      dstByte += BYTES_PER_PIXEL_RGBA;\n    }\n\n    return createImageBitmap(new ImageData(data, width, height));\n  }\n\n  private async _decompressZlib(compressed: Uint8Array): Promise<Uint8Array> {\n    try {\n      return await this._decompress(compressed, 'deflate');\n    } catch {\n      return await this._decompress(compressed, 'deflate-raw');\n    }\n  }\n\n  private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise<Uint8Array> {\n    const ds = new DecompressionStream(format);\n    const writer = ds.writable.getWriter();\n    writer.write(compressed as BufferSource);\n    writer.close();\n\n    const chunks: Uint8Array[] = [];\n    const reader = ds.readable.getReader();\n\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n      chunks.push(value);\n    }\n\n    const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n    const result = new Uint8Array(totalLength);\n    let offset = 0;\n    for (const chunk of chunks) {\n      result.set(chunk, offset);\n      offset += chunk.length;\n    }\n    return result;\n  }\n\n  public get images(): ReadonlyMap<number, IKittyImageData> {\n    return this._kittyStorage.images;\n  }\n\n  public get _kittyIdToStorageId(): ReadonlyMap<number, number> {\n    return this._kittyStorage.kittyIdToStorageId;\n  }\n\n  public get pendingTransmissions(): ReadonlyMap<number, IPendingTransmission> {\n    return this._pendingTransmissions;\n  }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n  TRANSMIT = 't',\n  TRANSMIT_DISPLAY = 'T',\n  QUERY = 'q',\n  PLACEMENT = 'p',\n  DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n  RGB = 24,\n  RGBA = 32,\n  PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n  NONE = '',\n  ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n  // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n  ACTION = 'a',\n  // Image format (24=RGB, 32=RGBA, 100=PNG)\n  FORMAT = 'f',\n  // Image ID for referencing stored images\n  ID = 'i',\n  // Image number (alternative to ID, terminal assigns ID)\n  IMAGE_NUMBER = 'I',\n  // Source image width in pixels\n  WIDTH = 's',\n  // Source image height in pixels\n  HEIGHT = 'v',\n  // The left edge (in pixels) of the image area to display\n  X_OFFSET = 'x',\n  // The top edge (in pixels) of the image area to display\n  Y_OFFSET = 'y',\n  // Width (in pixels) of the source rectangle to display\n  SOURCE_WIDTH = 'w',\n  // Height (in pixels) of the source rectangle to display\n  SOURCE_HEIGHT = 'h',\n  // Horizontal offset (in pixels) within the first cell\n  X_PLACEMENT_OFFSET = 'X',\n  // Vertical offset (in pixels) within the first cell\n  Y_PLACEMENT_OFFSET = 'Y',\n  // Number of terminal columns to display the image over\n  COLUMNS = 'c',\n  // Number of terminal rows to display the image over\n  ROWS = 'r',\n  // More data flag (1=more chunks coming, 0=final chunk)\n  MORE = 'm',\n  // Compression type (z=zlib). This is essential for chunking larger images.\n  COMPRESSION = 'o',\n  // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n  QUIET = 'q',\n  // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n  CURSOR_MOVEMENT = 'C',\n  // Z-index for image layering (negative = behind text, 0+ = on top)\n  Z_INDEX = 'z',\n  // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n  TRANSMISSION = 't',\n  // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) \u2014 only used when a=d\n  DELETE_SELECTOR = 'd',\n  // Placement ID for targeting specific placements\n  PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const BYTES_PER_PIXEL_RGB = 3;\nexport const BYTES_PER_PIXEL_RGBA = 4;\nexport const ALPHA_OPAQUE = 255;\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n  action?: string;\n  format?: number;\n  id?: number;\n  imageNumber?: number;\n  width?: number;\n  height?: number;\n  x?: number;\n  y?: number;\n  sourceWidth?: number;\n  sourceHeight?: number;\n  xOffset?: number;\n  yOffset?: number;\n  columns?: number;\n  rows?: number;\n  more?: number;\n  quiet?: number;\n  cursorMovement?: number;\n  zIndex?: number;\n  transmission?: string;\n  deleteSelector?: string;\n  placementId?: number;\n  compression?: string;\n  payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n  // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n  cmd: IKittyCommand;\n  // Decoder used across chunked payloads\n  decoder: Base64Decoder;\n  // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n  totalEncodedSize: number;\n  // Whether any chunk has failed to decode\n  decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n  id: number;\n  // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n  data: Blob;\n  width: number;\n  height: number;\n  format: 24 | 32 | 100;\n  compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n  const cmd: IKittyCommand = {};\n  const parts = data.split(',');\n\n  for (const part of parts) {\n    const eqIdx = part.indexOf('=');\n    if (eqIdx === -1) continue;\n\n    const key = part.substring(0, eqIdx);\n    const value = part.substring(eqIdx + 1);\n\n    // Handle string keys first\n    if (key === KittyKey.ACTION) {\n      cmd.action = value;\n      continue;\n    }\n    if (key === KittyKey.COMPRESSION) {\n      cmd.compression = value;\n      continue;\n    }\n    if (key === KittyKey.TRANSMISSION) {\n      cmd.transmission = value;\n      continue;\n    }\n    if (key === KittyKey.DELETE_SELECTOR) {\n      cmd.deleteSelector = value;\n      continue;\n    }\n    const numValue = parseInt(value);\n    switch (key) {\n      case KittyKey.FORMAT: cmd.format = numValue; break;\n      case KittyKey.ID: cmd.id = numValue; break;\n      case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n      case KittyKey.WIDTH: cmd.width = numValue; break;\n      case KittyKey.HEIGHT: cmd.height = numValue; break;\n      case KittyKey.X_OFFSET: cmd.x = numValue; break;\n      case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n      case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n      case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n      case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n      case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n      case KittyKey.COLUMNS: cmd.columns = numValue; break;\n      case KittyKey.ROWS: cmd.rows = numValue; break;\n      case KittyKey.MORE: cmd.more = numValue; break;\n      case KittyKey.QUIET: cmd.quiet = numValue; break;\n      case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n      case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n      case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n    }\n  }\n\n  return cmd;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n  private static readonly _maxStoredImages = 256;\n\n  private _nextImageId = 1;\n  private readonly _images: Map<number, IKittyImageData> = new Map();\n  // TODO: Support multiple placements per image. The kitty spec identifies\n  // placements by an (image id, placement id) pair \u2014 same i + different p\n  // values should coexist, and same i + same p should replace the prior\n  // placement. Currently we track only one storage entry per kitty image id,\n  // so multiple placements of the same image overwrite each other. Fixing\n  // this requires changing these maps to Map<number, Map<number, number>>\n  // (kittyId \u2192 placementId \u2192 storageId) and updating addImage/deleteById\n  // accordingly. The underlying shared ImageStorage would also need to\n  // support multiple entries per logical image.\n  private readonly _kittyIdToStorageId: Map<number, number> = new Map();\n  private readonly _storageIdToKittyId: Map<number, number> = new Map();\n\n  private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n  private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n  private readonly _handleStorageImageDeleted = (storageId: number): void => {\n    const kittyId = this._storageIdToKittyId.get(storageId);\n    if (kittyId !== undefined) {\n      this._kittyIdToStorageId.delete(kittyId);\n      this._storageIdToKittyId.delete(storageId);\n      this._images.delete(kittyId);\n    }\n  };\n\n  constructor(\n    private readonly _storage: ImageStorage\n  ) {\n    this._previousOnImageDeleted = this._storage.onImageDeleted;\n    this._wrappedOnImageDeleted = (storageId: number) => {\n      this._previousOnImageDeleted?.(storageId);\n      this._handleStorageImageDeleted(storageId);\n    };\n    this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n  }\n\n  public reset(): void {\n    this._nextImageId = 1;\n    this._images.clear();\n    this._kittyIdToStorageId.clear();\n    this._storageIdToKittyId.clear();\n  }\n\n  public dispose(): void {\n    this.reset();\n    if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n      this._storage.onImageDeleted = this._previousOnImageDeleted;\n    }\n  }\n\n  public storeImage(id: number | undefined, imageData: Omit<IKittyImageData, 'id'>): number {\n    const imageId = id ?? this._nextImageId++;\n\n    const oldStorageId = this._kittyIdToStorageId.get(imageId);\n    if (oldStorageId !== undefined) {\n      this._storage.deleteImage(oldStorageId);\n      this._kittyIdToStorageId.delete(imageId);\n      this._storageIdToKittyId.delete(oldStorageId);\n    }\n\n    if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n      this._evictUndisplayedImages();\n    }\n\n    this._images.set(imageId, {\n      ...imageData,\n      id: imageId\n    });\n    return imageId;\n  }\n\n  public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n    // Clean up stale reverse-mapping from a previous placement of the same\n    // kitty image.  The old shared-storage entry is kept (it may still be\n    // visible on screen) but its reverse mapping is removed so that eviction\n    // of the old entry won't incorrectly delete the kitty image data.\n    const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n    if (oldStorageId !== undefined) {\n      this._storageIdToKittyId.delete(oldStorageId);\n    }\n    const storageId = this._storage.addImage(image, scrolling, layer, zIndex);\n    this._kittyIdToStorageId.set(kittyId, storageId);\n    this._storageIdToKittyId.set(storageId, kittyId);\n  }\n\n  public getImage(kittyId: number): IKittyImageData | undefined {\n    return this._images.get(kittyId);\n  }\n\n  public deleteById(kittyId: number): void {\n    this._images.delete(kittyId);\n    const storageId = this._kittyIdToStorageId.get(kittyId);\n    if (storageId !== undefined) {\n      this._storage.deleteImage(storageId);\n      this._kittyIdToStorageId.delete(kittyId);\n      this._storageIdToKittyId.delete(storageId);\n    }\n  }\n\n  public deleteAll(): void {\n    this._images.clear();\n    for (const storageId of this._kittyIdToStorageId.values()) {\n      this._storage.deleteImage(storageId);\n    }\n    this._kittyIdToStorageId.clear();\n    this._storageIdToKittyId.clear();\n  }\n\n  public get images(): ReadonlyMap<number, IKittyImageData> {\n    return this._images;\n  }\n\n  public get kittyIdToStorageId(): ReadonlyMap<number, number> {\n    return this._kittyIdToStorageId;\n  }\n\n  public get lastImageId(): number {\n    return this._nextImageId - 1;\n  }\n\n  private _evictUndisplayedImages(): void {\n    for (const [kittyId] of this._images) {\n      if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n        break;\n      }\n      if (!this._kittyIdToStorageId.has(kittyId)) {\n        this._images.delete(kittyId);\n      }\n    }\n  }\n}\n", "/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n  private _size = 0;\n  private _aborted = false;\n  private _dec: Decoder | undefined;\n\n  constructor(\n    private readonly _opts: IImageAddonOptions,\n    private readonly _storage: SixelImageStorage,\n    private readonly _coreTerminal: ITerminalExt\n  ) {\n    DecoderAsync({\n      memoryLimit: this._opts.pixelLimit * 4,\n      palette: DEFAULT_PALETTE,\n      paletteLimit: this._opts.sixelPaletteLimit\n    }).then(d => this._dec = d);\n  }\n\n  public reset(): void {\n    /**\n     * reset sixel decoder to defaults:\n     * - release all memory\n     * - nullify palette (4096)\n     * - apply default palette (256)\n     */\n    if (this._dec) {\n      this._dec.release();\n      // FIXME: missing interface on decoder to nullify full palette\n      (this._dec as any)._palette.fill(0);\n      this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit);\n    }\n  }\n\n  public hook(params: IParams): void {\n    this._size = 0;\n    this._aborted = false;\n    if (this._dec) {\n      const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n        this._coreTerminal._core._inputHandler._curAttrData,\n        this._coreTerminal._core._themeService?.colors);\n      this._dec.init(fillColor, null, this._opts.sixelPaletteLimit);\n    }\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._aborted || !this._dec) {\n      return;\n    }\n    this._size += end - start;\n    if (this._size > this._opts.sixelSizeLimit) {\n      console.warn(`SIXEL: too much data, aborting`);\n      this._aborted = true;\n      this._dec.release();\n      return;\n    }\n    try {\n      this._dec.decode(data, start, end);\n    } catch (e) {\n      console.warn(`SIXEL: error while decoding image - ${e}`);\n      this._aborted = true;\n      this._dec.release();\n    }\n  }\n\n  public unhook(success: boolean): boolean | Promise<boolean> {\n    if (this._aborted || !success || !this._dec) {\n      return true;\n    }\n\n    const width = this._dec.width;\n    const height = this._dec.height;\n\n    // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n    if (!width || ! height) {\n      if (height) {\n        this._storage.advanceCursor(height);\n      }\n      return true;\n    }\n\n    const canvas = ImageRenderer.createCanvas(undefined, width, height);\n    canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray<ArrayBuffer>, width, height), 0, 0);\n    if (this._dec.memoryUsage > MEM_PERMA_LIMIT) {\n      this._dec.release();\n    }\n    this._storage.addImage(canvas);\n    return true;\n  }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n  let bg = 0;\n  if (!colors) {\n    // FIXME: theme service is prolly not available yet,\n    // happens if .open() was not called yet (bug in core?)\n    return bg;\n  }\n  if (attr.isInverse()) {\n    if (attr.isFgDefault()) {\n      bg = convertLe(colors.foreground.rgba);\n    } else if (attr.isFgRGB()) {\n      const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n      bg = toRGBA8888(...t);\n    } else {\n      bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n    }\n  } else {\n    if (attr.isBgDefault()) {\n      bg = convertLe(colors.background.rgba);\n    } else if (attr.isBgRGB()) {\n      const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n      bg = toRGBA8888(...t);\n    } else {\n      bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n    }\n  }\n  return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n  if (BIG_ENDIAN) return color;\n  return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n  constructor(\n    private readonly _storage: ImageStorage,\n    private readonly _opts: IImageAddonOptions,\n    private readonly _renderer: ImageRenderer,\n    private readonly _terminal: ITerminalExt\n  ) {}\n\n  /**\n   * Add a sixel image to storage.\n   * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n   */\n  public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n    this._storage.addImage(img, this._opts.sixelScrolling);\n  }\n\n  /**\n   * Only advance text cursor.\n   * This is an edge case from empty sixels carrying only a height but no pixels.\n   * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n   */\n  public advanceCursor(height: number): void {\n    if (this._opts.sixelScrolling) {\n      let cellSize = this._renderer.cellSize;\n      if (cellSize.width === -1 || cellSize.height === -1) {\n        cellSize = CELL_SIZE_DEFAULT;\n      }\n      const rows = Math.ceil(height / cellSize.height);\n      for (let i = 1; i < rows; ++i) {\n        this._terminal._core._inputHandler.lineFeed();\n      }\n    }\n  }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n  constructor(\n    private readonly _storage: ImageStorage\n  ) {}\n\n  /**\n   * Add an IIP image to storage.\n   * Always uses scrolling mode \u2014 cursor advances past the image.\n   */\n  public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n    this._storage.addImage(img, true);\n  }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n  enableSizeReports: true,\n  pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n  sixelSupport: true,\n  sixelScrolling: true,\n  sixelPaletteLimit: 256,\n  sixelSizeLimit: 25000000,\n  storageLimit: 128,\n  showPlaceholder: true,\n  iipSupport: true,\n  iipSizeLimit: 20000000,\n  kittySupport: true,\n  kittySizeLimit: 20000000\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n  COLORS = 1,\n  SIXEL_GEO = 2,\n  REGIS_GEO = 3\n}\nconst enum GaAction {\n  READ = 1,\n  SET_DEFAULT = 2,\n  SET = 3,\n  READ_MAX = 4\n}\nconst enum GaStatus {\n  SUCCESS = 0,\n  ITEM_ERROR = 1,\n  ACTION_ERROR = 2,\n  FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n  private _opts: IImageAddonOptions;\n  private _defaultOpts: IImageAddonOptions;\n  private _storage: ImageStorage | undefined;\n  private _renderer: ImageRenderer | undefined;\n  private _disposables: IDisposable[] = [];\n  private _terminal: ITerminalExt | undefined;\n  private _handlers: Map<String, IResetHandler> = new Map();\n  private readonly _onImageAdded = new Emitter<void>();\n  public readonly onImageAdded: IEvent<void> = this._onImageAdded.event;\n\n  constructor(opts?: Partial<IImageAddonOptions>) {\n    this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n    this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n  }\n\n  public dispose(): void {\n    for (const obj of this._disposables) {\n      obj.dispose();\n    }\n    this._disposables.length = 0;\n    this._handlers.clear();\n    this._onImageAdded.dispose();\n  }\n\n  private _disposeLater(...args: IDisposable[]): void {\n    for (const obj of args) {\n      this._disposables.push(obj);\n    }\n  }\n\n  public activate(terminal: ITerminalExt): void {\n    this._terminal = terminal;\n\n    // internal data structures\n    this._renderer = new ImageRenderer(terminal);\n    this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n    this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n    // enable size reports\n    if (this._opts.enableSizeReports) {\n      // const windowOptions = terminal.getOption('windowOptions');\n      // windowOptions.getWinSizePixels = true;\n      // windowOptions.getCellSizePixels = true;\n      // windowOptions.getWinSizeChars = true;\n      // terminal.setOption('windowOptions', windowOptions);\n      const windowOps = terminal.options.windowOptions ?? {};\n      windowOps.getWinSizePixels = true;\n      windowOps.getCellSizePixels = true;\n      windowOps.getWinSizeChars = true;\n      terminal.options.windowOptions = windowOps;\n    }\n\n    this._disposeLater(\n      this._renderer,\n      this._storage,\n\n      // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n      terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n      terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n      terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n      terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n      // render hook\n      terminal.onRender(range => this._storage?.render(range)),\n\n      /**\n       * reset handlers covered:\n       * - DECSTR\n       * - RIS\n       * - Terminal.reset()\n       */\n      terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n      terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n      terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n      // wipe canvas and delete alternate images on buffer switch\n      terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n      // extend images to the right on resize\n      terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n    );\n\n    // SIXEL handler\n    if (this._opts.sixelSupport) {\n      const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n      const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n      this._handlers.set('sixel', sixelHandler);\n      this._disposeLater(\n        terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n      );\n    }\n\n    // iTerm IIP handler\n    if (this._opts.iipSupport) {\n      const iipStorage = new IIPImageStorage(this._storage!);\n      const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n      this._handlers.set('iip', iipHandler);\n      this._disposeLater(\n        terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n      );\n    }\n\n    // Kitty graphics handler\n    if (this._opts.kittySupport) {\n      const kittyStorage = new KittyImageStorage(this._storage!);\n      const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n      this._handlers.set('kitty', kittyHandler);\n      this._disposeLater(\n        kittyStorage,\n        kittyHandler,\n        terminal._core._inputHandler._parser.registerApcHandler(0x47, kittyHandler)\n      );\n    }\n  }\n\n  // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n  public reset(): boolean {\n    // reset options customizable by sequences to defaults\n    this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n    this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n    // also clear image storage\n    this._storage?.reset();\n    // reset protocol handlers\n    for (const handler of this._handlers.values()) {\n      handler.reset();\n    }\n    return false;\n  }\n\n  public get storageLimit(): number {\n    return this._storage?.getLimit() || -1;\n  }\n\n  public set storageLimit(limit: number) {\n    this._storage?.setLimit(limit);\n    this._opts.storageLimit = limit;\n  }\n\n  public get storageUsage(): number {\n    if (this._storage) {\n      return this._storage.getUsage();\n    }\n    return -1;\n  }\n\n  public get showPlaceholder(): boolean {\n    return this._opts.showPlaceholder;\n  }\n\n  public set showPlaceholder(value: boolean) {\n    this._opts.showPlaceholder = value;\n    this._renderer?.showPlaceholder(value);\n  }\n\n  public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n    return this._storage?.getImageAtBufferCell(x, y);\n  }\n\n  public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n    return this._storage?.extractTileAtBufferCell(x, y);\n  }\n\n  private _report(s: string): void {\n    this._terminal?._core.coreService.triggerDataEvent(s);\n  }\n\n  private _decset(params: (number | number[])[]): boolean {\n    for (let i = 0; i < params.length; ++i) {\n      switch (params[i]) {\n        case 80:\n          this._opts.sixelScrolling = false;\n          break;\n      }\n    }\n    return false;\n  }\n\n  private _decrst(params: (number | number[])[]): boolean {\n    for (let i = 0; i < params.length; ++i) {\n      switch (params[i]) {\n        case 80:\n          this._opts.sixelScrolling = true;\n          break;\n      }\n    }\n    return false;\n  }\n\n  // overload DA to return something more appropriate\n  private _da1(params: (number | number[])[]): boolean {\n    if (params[0]) {\n      return true;\n    }\n    // reported features:\n    // 62 - VT220\n    // 4 - SIXEL support\n    // 9 - charsets\n    // 22 - ANSI colors\n    if (this._opts.sixelSupport) {\n      this._report(`\\x1b[?62;4;9;22c`);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Implementation of xterm's graphics attribute sequence.\n   *\n   * Supported features:\n   * - read/change palette limits (max 4096 by sixel lib)\n   * - read SIXEL canvas geometry (reports current window canvas or\n   *   squared pixelLimit if canvas > pixel limit)\n   *\n   * Everything else is deactivated.\n   */\n  private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n    if (params.length < 2) {\n      return true;\n    }\n    if (params[0] === GaItem.COLORS) {\n      switch (params[1]) {\n        case GaAction.READ:\n          this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n          return true;\n        case GaAction.SET_DEFAULT:\n          this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n          this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n          // also reset protocol handlers for now\n          for (const handler of this._handlers.values()) {\n            handler.reset();\n          }\n          return true;\n        case GaAction.SET:\n          if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n            this._opts.sixelPaletteLimit = params[2];\n            this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n          } else {\n            this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n          }\n          return true;\n        case GaAction.READ_MAX:\n          this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n          return true;\n        default:\n          this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n          return true;\n      }\n    }\n    if (params[0] === GaItem.SIXEL_GEO) {\n      switch (params[1]) {\n        // we only implement read and read_max here\n        case GaAction.READ:\n          let width = this._renderer?.dimensions?.css.canvas.width;\n          let height = this._renderer?.dimensions?.css.canvas.height;\n          if (!width || !height) {\n            // for some reason we have no working image renderer\n            // --> fallback to default cell size\n            const cellSize = CELL_SIZE_DEFAULT;\n            width = (this._terminal?.cols || 80) * cellSize.width;\n            height = (this._terminal?.rows || 24) * cellSize.height;\n          }\n          if (width * height < this._opts.pixelLimit) {\n            this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n          } else {\n            // if we overflow pixelLimit report that squared instead\n            const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n            this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n          }\n          return true;\n        case GaAction.READ_MAX:\n          // read_max returns pixelLimit as square area\n          const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n          this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n          return true;\n        default:\n          this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n          return true;\n      }\n    }\n    // exit with error on ReGIS or any other requests\n    this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n    return true;\n  }\n}\n"],
  "mappings": "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",
  "names": ["exports", "red", "n", "green", "blue", "alpha", "toRGBA8888", "r", "g", "b", "a", "fromRGBA8888", "color", "nearestColorIndex", "palette", "min", "idx", "i", "dr", "dg", "db", "d", "clamp", "low", "high", "value", "h2c", "t1", "t2", "c", "HLStoRGB", "h", "l", "s", "v", "normalizeRGB", "normalizeHLS", "p", "require_lib", "__commonJSMin", "exports", "InWasm", "z", "b", "r", "def", "t", "s", "d", "m", "W", "e", "require_Base64Decoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmDecode", "MAP", "el", "D", "i", "EMPTY", "Base64Decoder", "keepSize", "maxBytes", "initialBytes", "m", "bytes", "requested", "needed", "newSize", "addPages", "data", "exports", "Colors_1", "wasm_1", "decodeBase64", "bytestring", "result", "WASM_BYTES", "WASM_MODULE", "NULL_CANVAS", "CallbackProxy", "width", "mode", "DEFAULT_OPTIONS", "DecoderAsync", "opts", "cbProxy", "importObj", "inst", "Decoder", "exports", "_instance", "_cbProxy", "module", "pixels", "offset", "additionalPixels", "newCanvas", "adv", "remaining", "c", "i", "fillColor", "palette", "paletteLimit", "truncate", "data", "start", "end", "p", "length", "j", "currentWidth", "escape", "final", "finalOffset", "bw", "currentHeight", "decode", "dec", "decodeAsync", "toDisposable", "fn", "DisposableStore", "o", "d", "Disposable", "MutableDisposable", "value", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "fn", "listeners", "EventUtils", "forward", "from", "to", "e", "map", "i", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "import_Colors", "PLACEHOLDER_LENGTH", "PLACEHOLDER_HEIGHT", "ImageRenderer", "_ImageRenderer", "Disposable", "_terminal", "MutableDisposable", "parent", "option", "toDisposable", "localDocument", "width", "height", "canvas", "ctx", "buffer", "imgData", "img", "value", "start", "end", "layer", "y", "w", "h", "imgSpec", "tileId", "col", "row", "count", "cols", "sx", "sy", "dx", "dy", "finalWidth", "finalHeight", "spec", "currentWidth", "currentHeight", "originalWidth", "originalHeight", "renderer", "key", "screenElement", "bWidth", "blueprint", "d32", "black", "white", "shift", "offset", "x", "ctx2", "i", "bitmap", "CELL_SIZE_DEFAULT", "ExtendedAttrsImage", "_ExtendedAttrsImage", "ext", "urlId", "imageId", "tileId", "value", "val", "EMPTY_ATTRS", "ImageStorage", "_terminal", "_renderer", "_opts", "e", "spec", "storedPixels", "id", "zero", "img", "scrolling", "layer", "zIndex", "cellSize", "cols", "rows", "buffer", "termCols", "termRows", "originX", "originY", "offset", "tileCount", "row", "line", "col", "endMarker", "imgSpec", "range", "hasTopImages", "hasBottomImages", "start", "end", "drawCalls", "placeholderCalls", "maybeImg", "startTile", "startCol", "count", "nextE", "a", "b", "call", "metrics", "oldCol", "tilesPerRow", "hasData", "rightCol", "lastTile", "expandCol", "x", "y", "orig", "canvas", "ImageRenderer", "room", "used", "current", "old", "oldSpec", "imgId", "import_Base64Decoder", "toStr", "data", "s", "i", "toInt", "v", "toSize", "toName", "bs", "b", "DECODERS", "FILE_MARKER", "MAX_FIELDCHARS", "HeaderParser", "start", "end", "state", "pos", "buffer", "c", "k", "UNSUPPORTED_TYPE", "imageType", "d", "d32", "width", "height", "jpgSize", "len", "i", "blockLength", "DEFAULT_HEADER", "IIPHandler", "_opts", "_renderer", "_storage", "_coreTerminal", "HeaderParser", "UNSUPPORTED_TYPE", "maxEncodedBytes", "initialBytes", "Base64Decoder", "data", "start", "end", "dataPos", "success", "w", "h", "cond", "imageType", "blob", "url", "img", "r", "canvas", "ImageRenderer", "bm", "cw", "CELL_SIZE_DEFAULT", "ch", "width", "height", "rw", "rh", "wf", "hf", "f", "s", "total", "cdim", "import_Base64Decoder", "parseKittyCommand", "data", "cmd", "parts", "part", "eqIdx", "key", "value", "numValue", "DECODER_KEEP_DATA", "DECODER_INITIAL_DATA", "DECODER_OK", "MAX_CONTROL_DATA_SIZE", "SEMICOLON", "KittyGraphicsHandler", "_opts", "_renderer", "_kittyStorage", "_coreTerminal", "key", "pending", "data", "start", "end", "controlEnd", "i", "copyLength", "parseKittyCommand", "payloadStart", "pendingKey", "previousEncodedSize", "decoderToRelease", "Base64Decoder", "success", "cmd", "isMoreComing", "decodeError", "finalCmd", "decoder", "imageBytes", "result", "str", "bytes", "id", "image", "quiet", "format", "width", "height", "bytesPerPixel", "expectedBytes", "message", "placementId", "isOk", "pPart", "response", "bitmap", "cropX", "cropY", "cropW", "cropH", "maxCropW", "maxCropH", "finalCropW", "finalCropH", "cropped", "cw", "CELL_SIZE_DEFAULT", "ch", "imgCols", "imgRows", "w", "h", "buffer", "savedX", "savedY", "savedYbase", "layer", "scaled", "xOffset", "yOffset", "canvasW", "canvasH", "offsetCanvas", "ImageRenderer", "offsetCtx", "offsetBitmap", "zIndex", "scrolled", "e", "blob", "url", "img", "resolve", "reject", "canvas", "pixelCount", "src32", "dst32", "alignedPixels", "srcOffset", "dstOffset", "b0", "b1", "b2", "srcByte", "dstByte", "compressed", "ds", "writer", "chunks", "reader", "done", "value", "totalLength", "sum", "chunk", "offset", "_KittyImageStorage", "_storage", "storageId", "kittyId", "id", "imageData", "imageId", "oldStorageId", "image", "scrolling", "layer", "zIndex", "KittyImageStorage", "import_Colors", "import_Decoder", "MEM_PERMA_LIMIT", "DEFAULT_PALETTE", "SixelHandler", "_opts", "_storage", "_coreTerminal", "d", "params", "fillColor", "extractActiveBg", "data", "start", "end", "e", "success", "width", "height", "canvas", "ImageRenderer", "attr", "colors", "bg", "convertLe", "t", "color", "SixelImageStorage", "_storage", "_opts", "_renderer", "_terminal", "img", "height", "cellSize", "CELL_SIZE_DEFAULT", "rows", "i", "IIPImageStorage", "_storage", "img", "DEFAULT_OPTIONS", "MAX_SIXEL_PALETTE_SIZE", "ImageAddon", "opts", "Emitter", "DEFAULT_OPTIONS", "obj", "args", "terminal", "ImageRenderer", "ImageStorage", "windowOps", "params", "range", "metrics", "sixelStorage", "SixelImageStorage", "sixelHandler", "SixelHandler", "iipStorage", "IIPImageStorage", "iipHandler", "IIPHandler", "kittyStorage", "KittyImageStorage", "kittyHandler", "KittyGraphicsHandler", "handler", "limit", "value", "x", "y", "s", "i", "MAX_SIXEL_PALETTE_SIZE", "width", "height", "cellSize", "CELL_SIZE_DEFAULT"]
}
