@xterm/addon-image 0.10.0-beta.164 → 0.10.0-beta.166

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"addon-image.js","mappings":"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","sources":["webpack://ImageAddon/webpack/universalModuleDefinition","webpack://ImageAddon/./src/kitty/KittyGraphicsHandler.ts","webpack://ImageAddon/../../node_modules/sixel/lib/wasm.js","webpack://ImageAddon/./src/kitty/KittyImageStorage.ts","webpack://ImageAddon/./src/IIPHeaderParser.ts","webpack://ImageAddon/../../src/common/Lifecycle.ts","webpack://ImageAddon/./src/IIPMetrics.ts","webpack://ImageAddon/./src/ImageRenderer.ts","webpack://ImageAddon/./src/kitty/KittyGraphicsTypes.ts","webpack://ImageAddon/../../node_modules/inwasm-runtime/lib/index.cjs","webpack://ImageAddon/./src/SixelHandler.ts","webpack://ImageAddon/../../node_modules/sixel/lib/Decoder.js","webpack://ImageAddon/./src/IIPImageStorage.ts","webpack://ImageAddon/../../node_modules/xterm-wasm-parts/lib/base64/Base64Decoder.wasm.js","webpack://ImageAddon/./src/ImageStorage.ts","webpack://ImageAddon/./src/IIPHandler.ts","webpack://ImageAddon/../../node_modules/sixel/lib/Colors.js","webpack://ImageAddon/./src/SixelImageStorage.ts","webpack://ImageAddon/webpack/bootstrap","webpack://ImageAddon/./src/ImageAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageAddon\"] = factory();\n\telse\n\t\troot[\"ImageAddon\"] = factory();\n})(globalThis, () => {\nreturn ","/**\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 → 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 — 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 — 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 default:\n // TODO: Implement remaining actions when needed:\n // - a=p (placement): place a previously transmitted image\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 default:\n // TODO: Implement remaining actions when needed:\n // - a=p (placement): place a previously transmitted image\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 _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 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) — ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet === 1) return;\n if (!isOk && quiet === 2) return;\n\n const response = `\\x1b_Gi=${id};${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 const bitmap = await this._createBitmap(image);\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 const imgCols = cmd.columns ?? Math.ceil(bitmap.width / cw);\n const imgRows = cmd.rows ?? Math.ceil(bitmap.height / ch);\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 —\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 const zIndex = cmd.zIndex ?? 0;\n if (w !== bitmap.width || h !== bitmap.height) {\n const resized = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n this._kittyStorage.addImage(image.id, resized, true, layer, zIndex);\n } else {\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n }\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 }\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 — 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→RGBA: 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 — ~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] → uint32 ABGR layout\n dst32[dstOffset++] = (b0 & 0x00FFFFFF) | 0xFF000000;\n dst32[dstOffset++] = ((b0 >>> 24) | (b1 << 8)) & 0x00FFFFFF | 0xFF000000;\n dst32[dstOffset++] = ((b1 >>> 16) | (b2 << 16)) & 0x00FFFFFF | 0xFF000000;\n dst32[dstOffset++] = (b2 >>> 8) | 0xFF000000;\n }\n\n // Handle remaining 1–3 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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: '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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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'\n};\n//# sourceMappingURL=wasm.js.map","/**\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 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 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) 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) 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) 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) 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 — 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 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 to contain the\n // negative z-index, otherwise it would go behind the entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.style.zIndex = '0';\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.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) 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 // 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.) — 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 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.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","\"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","/**\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","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","/**\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 — cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, true);\n }\n}\n","\"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","/**\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 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 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","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","/**\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\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 { 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\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 }\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\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"],"names":["root","factory","exports","module","define","amd","globalThis","_opts","_renderer","_kittyStorage","_coreTerminal","_aborted","_decodeError","_activeDecoder","_maxEncodedBytes","_initialEncodedBytes","_inControlData","_controlData","Uint32Array","_controlLength","_encodedSizeLimit","_totalEncodedSize","_parsedCommand","_pendingTransmissions","Map","_lastPendingKey","constructor","this","Math","ceil","kittySizeLimit","min","reset","_cleanupAllPending","release","dispose","_removePendingEntry","key","delete","undefined","pending","values","decoder","clear","start","put","data","end","controlEnd","i","copyLength","set","subarray","parseKittyCommand","_parseControlDataString","id","imageNumber","_sendResponse","quiet","action","payloadStart","_streamPayload","pendingKey","get","previousEncodedSize","totalEncodedSize","decoderToRelease","init","success","_handleNoPayloadCommand","cmd","_handleDelete","isMoreComing","more","decodeError","finalCmd","imageBytes","Uint8Array","data8","result","_handleCommandWithBytesAndCmd","str","String","fromCodePoint","bytes","_handleTransmit","transmission","length","_handleTransmitDisplay","_handleQuery","storeImage","Blob","width","height","format","compression","lastImageId","image","getImage","_displayImage","then","expectedBytes","BYTES_PER_PIXEL_RGBA","BYTES_PER_PIXEL_RGB","deleteSelector","deleteAll","deleteById","message","isOk","response","_core","coreService","triggerDataEvent","_decodeAndDisplay","catch","bitmap","_createBitmap","cw","dimensions","css","cell","CELL_SIZE_DEFAULT","ch","imgCols","columns","imgRows","rows","w","h","round","pixelLimit","Error","buffer","savedX","x","savedY","y","savedYbase","ybase","layer","zIndex","resized","createImageBitmap","resizeWidth","resizeHeight","close","addImage","cursorMovement","scrolled","max","cols","arrayBuffer","_decompressZlib","blob","type","window","url","URL","createObjectURL","img","Image","Promise","resolve","reject","addEventListener","revokeObjectURL","canvas","ImageRenderer","createCanvas","document","getContext","drawImage","src","pixelCount","ImageData","Uint8ClampedArray","byteOffset","src32","floor","byteLength","dst32","alignedPixels","srcOffset","dstOffset","b0","b1","b2","srcByte","dstByte","ALPHA_OPAQUE","compressed","_decompress","ds","DecompressionStream","writer","writable","getWriter","write","chunks","reader","readable","getReader","done","value","read","push","totalLength","reduce","sum","chunk","offset","images","_kittyIdToStorageId","kittyIdToStorageId","pendingTransmissions","Object","defineProperty","LIMITS","CHUNK_SIZE","PALETTE_SIZE","MAX_WIDTH","BYTES","_storage","static","_nextImageId","_images","_storageIdToKittyId","_previousOnImageDeleted","_wrappedOnImageDeleted","_handleStorageImageDeleted","storageId","kittyId","onImageDeleted","imageData","imageId","oldStorageId","deleteImage","has","size","KittyImageStorage","_maxStoredImages","_evictUndisplayedImages","scrolling","toStr","s","fromCharCode","toInt","v","toSize","match","DECODERS","inline","name","Buffer","from","toString","bs","atob","b","charCodeAt","TextDecoder","decode","preserveAspectRatio","FILE_MARKER","MAX_FIELDCHARS","state","_buffer","_position","_key","fields","fill","parse","pos","c","_storeValue","_a","k","_storeKey","slice","fn","arg","Array","isArray","d","disposables","toDisposable","_disposables","Set","_isDisposed","isDisposed","add","o","freeze","_store","DisposableStore","_register","_value","UNSUPPORTED_TYPE","d32","mime","len","blockLength","jpgSize","Disposable","_terminal","_layers","_placeholder","_placeholderBitmap","_optionsRefresh","MutableDisposable","_oldOpen","_renderService","_oldSetRenderer","localDocument","createElement","createImageData","ctx","imgData","super","open","parent","call","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","refreshRows","removeLayerFromDom","setRenderer","showPlaceholder","cellSize","_createPlaceHolder","clearLines","clearRect","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sx","sy","dx","dy","finalWidth","finalHeight","extractTile","drawPlaceholder","spec","currentWidth","currentHeight","actualCellSize","originalWidth","originalHeight","origCellSize","orig","bind","renderer","keys","insertLayerToDom","console","warn","classList","style","insertBefore","firstChild","appendChild","alpha","desynchronized","remove","hasLayer","bWidth","blueprint","black","toRGBA8888","white","shift","putImageData","screen","ctx2","_coreBrowserService","parts","split","part","eqIdx","indexOf","substring","numValue","parseInt","placementId","InWasm","def","m","W","WebAssembly","t","e","Instance","Module","z","instantiate","r","instance","compile","_wasmCtx","fromBase64","DEFAULT_PALETTE","PALETTE_ANSI_256","convertLe","color","BIG_ENDIAN","PALETTE_VT340_COLOR","_size","_dec","DecoderAsync","memoryLimit","palette","paletteLimit","sixelPaletteLimit","_palette","hook","params","fillColor","attr","colors","bg","isInverse","isFgDefault","foreground","rgba","isFgRGB","toColorRGB","getFgColor","ansi","isBgDefault","background","isBgRGB","getBgColor","extractActiveBg","_inputHandler","_curAttrData","_themeService","sixelSizeLimit","unhook","advanceCursor","memoryUsage","decodeAsync","Decoder","Colors_1","wasm_1","WASM_BYTES","bytestring","decodeBase64","WASM_MODULE","NULL_CANVAS","CallbackProxy","bandHandler","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","sixelColor","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","truncate","opts","cbProxy","importObj","env","inst","_instance","_cbProxy","_PIXEL_OFFSET","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","assign","_handle_band","_initCanvas","_wasm","_chunk","memory","get_chunk_address","_states","get_state_address","get_palette_address","_pSrc","get_p0_address","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","_realloc","additionalPixels","newCanvas","adv","remaining","current_width","current_height","properties","level","memUsage","rasterAttributes","numerator","denominator","p","decodeString","j","data32","escape","final","finalOffset","bw","dec","async","wasmDecode","MAP","map","el","D","EMPTY","keepSize","maxBytes","initialBytes","_inst","_ended","_bytes","_d","_m32","_mem","grow","Memory","initial","requested","needed","newSize","addPages","loadedBytes","freeBytes","ExtendedAttrsImage","_ext","ext","_urlId","underlineStyle","underlineColor","underlineVariantOffset","val","urlId","clone","isEmpty","EMPTY_ATTRS","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","_viewportMetrics","setLimit","storageLimit","error","getLimit","marker","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","ImageBitmap","wipeAlternate","zero","entries","bufferType","termCols","termRows","originX","originY","tileCount","_dirtyRowTracker","markDirty","line","lines","_writeToCell","lineFeed","endMarker","registerMarker","onDispose","active","_evictOnAlternate","render","range","hasTopImages","hasBottomImages","drawCalls","placeholderCalls","ydisp","getBg","_extendedAttrs","maybeImg","startTile","startCol","nextE","sort","a","viewportResize","metrics","oldCol","tilesPerRow","hasData","rightCol","_data","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","old","oldSpec","imgId","DEFAULT_HEADER","_hp","HeaderParser","_header","_metrics","maxEncodedBytes","iipSizeLimit","dataPos","cond","imageType","_resize","setTimeout","bm","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","red","n","green","blue","g","clamp","low","high","h2c","t1","t2","normalizeRGB","PALETTE_VT340_GREY","normalizeHLS","nearestColorIndex","fromRGBA8888","Number","MAX_SAFE_INTEGER","idx","dr","dg","db","l","HLStoRGB","sixelScrolling","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","enableSizeReports","sixelSupport","iipSupport","kittySupport","_defaultOpts","_handlers","obj","_disposeLater","args","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelStorage","SixelImageStorage","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipStorage","IIPImageStorage","iipHandler","IIPHandler","registerOscHandler","kittyStorage","kittyHandler","KittyGraphicsHandler","registerApcHandler","handler","limit","storageUsage","_report","toFixed","sqrt"],"ignoreList":[],"sourceRoot":""}
1
+ {"version":3,"file":"addon-image.js","mappings":"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","sources":["webpack://ImageAddon/webpack/universalModuleDefinition","webpack://ImageAddon/./src/kitty/KittyGraphicsHandler.ts","webpack://ImageAddon/../../node_modules/sixel/lib/wasm.js","webpack://ImageAddon/./src/kitty/KittyImageStorage.ts","webpack://ImageAddon/./src/IIPHeaderParser.ts","webpack://ImageAddon/../../src/common/Lifecycle.ts","webpack://ImageAddon/./src/IIPMetrics.ts","webpack://ImageAddon/./src/ImageRenderer.ts","webpack://ImageAddon/./src/kitty/KittyGraphicsTypes.ts","webpack://ImageAddon/../../node_modules/inwasm-runtime/lib/index.cjs","webpack://ImageAddon/./src/SixelHandler.ts","webpack://ImageAddon/../../node_modules/sixel/lib/Decoder.js","webpack://ImageAddon/./src/IIPImageStorage.ts","webpack://ImageAddon/../../node_modules/xterm-wasm-parts/lib/base64/Base64Decoder.wasm.js","webpack://ImageAddon/./src/ImageStorage.ts","webpack://ImageAddon/./src/IIPHandler.ts","webpack://ImageAddon/../../node_modules/sixel/lib/Colors.js","webpack://ImageAddon/./src/SixelImageStorage.ts","webpack://ImageAddon/webpack/bootstrap","webpack://ImageAddon/./src/ImageAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageAddon\"] = factory();\n\telse\n\t\troot[\"ImageAddon\"] = factory();\n})(globalThis, () => {\nreturn ","/**\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 → 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 — 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 — 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 default:\n // TODO: Implement remaining actions when needed:\n // - a=p (placement): place a previously transmitted image\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 default:\n // TODO: Implement remaining actions when needed:\n // - a=p (placement): place a previously transmitted image\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 _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 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) — ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet === 1) return;\n if (!isOk && quiet === 2) return;\n\n const response = `\\x1b_Gi=${id};${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 = await this._createBitmap(image);\n\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 bitmap.close();\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 let imgCols = cmd.columns ?? Math.ceil(bitmap.width / cw);\n let imgRows = cmd.rows ?? Math.ceil(bitmap.height / ch);\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 bitmap.close();\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 —\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 let finalBitmap = bitmap;\n if (w !== bitmap.width || h !== bitmap.height) {\n finalBitmap = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\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 const offsetCanvas = ImageRenderer.createCanvas(window.document, finalBitmap.width + xOffset, finalBitmap.height + yOffset);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n finalBitmap.close();\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(finalBitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n finalBitmap.close();\n finalBitmap = offsetBitmap;\n w = finalBitmap.width;\n h = finalBitmap.height;\n if (w * h > this._opts.pixelLimit) {\n finalBitmap.close();\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(finalBitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(finalBitmap.height / ch);\n }\n }\n\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, finalBitmap, true, layer, zIndex);\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 }\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 — 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→RGBA: 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 — ~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] → uint32 ABGR layout\n dst32[dstOffset++] = (b0 & 0x00FFFFFF) | 0xFF000000;\n dst32[dstOffset++] = ((b0 >>> 24) | (b1 << 8)) & 0x00FFFFFF | 0xFF000000;\n dst32[dstOffset++] = ((b1 >>> 16) | (b2 << 16)) & 0x00FFFFFF | 0xFF000000;\n dst32[dstOffset++] = (b2 >>> 8) | 0xFF000000;\n }\n\n // Handle remaining 1–3 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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: '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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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'\n};\n//# sourceMappingURL=wasm.js.map","/**\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 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 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) 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) 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) 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) 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 — 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) 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.) — 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","\"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","/**\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","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","/**\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 — cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, true);\n }\n}\n","\"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","/**\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 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 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","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","/**\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\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 { 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\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 }\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\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"],"names":["root","factory","exports","module","define","amd","globalThis","_opts","_renderer","_kittyStorage","_coreTerminal","_aborted","_decodeError","_activeDecoder","_maxEncodedBytes","_initialEncodedBytes","_inControlData","_controlData","Uint32Array","_controlLength","_encodedSizeLimit","_totalEncodedSize","_parsedCommand","_pendingTransmissions","Map","_lastPendingKey","constructor","this","Math","ceil","kittySizeLimit","min","reset","_cleanupAllPending","release","dispose","_removePendingEntry","key","delete","undefined","pending","values","decoder","clear","start","put","data","end","controlEnd","i","copyLength","set","subarray","parseKittyCommand","_parseControlDataString","id","imageNumber","_sendResponse","quiet","action","payloadStart","_streamPayload","pendingKey","get","previousEncodedSize","totalEncodedSize","decoderToRelease","init","success","_handleNoPayloadCommand","cmd","_handleDelete","isMoreComing","more","decodeError","finalCmd","imageBytes","Uint8Array","data8","result","_handleCommandWithBytesAndCmd","str","String","fromCodePoint","bytes","_handleTransmit","transmission","length","_handleTransmitDisplay","_handleQuery","storeImage","Blob","width","height","format","compression","lastImageId","image","getImage","_displayImage","then","expectedBytes","BYTES_PER_PIXEL_RGBA","BYTES_PER_PIXEL_RGB","deleteSelector","deleteAll","deleteById","message","isOk","response","_core","coreService","triggerDataEvent","_decodeAndDisplay","catch","bitmap","_createBitmap","cropX","max","x","cropY","y","cropW","sourceWidth","cropH","sourceHeight","maxCropW","maxCropH","finalCropW","finalCropH","close","Error","cropped","createImageBitmap","cw","dimensions","css","cell","CELL_SIZE_DEFAULT","ch","imgCols","columns","imgRows","rows","w","h","round","pixelLimit","buffer","savedX","savedY","savedYbase","ybase","layer","zIndex","finalBitmap","resizeWidth","resizeHeight","xOffset","yOffset","offsetCanvas","ImageRenderer","createCanvas","window","document","offsetCtx","getContext","drawImage","offsetBitmap","addImage","cursorMovement","scrolled","cols","arrayBuffer","_decompressZlib","blob","type","url","URL","createObjectURL","img","Image","Promise","resolve","reject","addEventListener","revokeObjectURL","canvas","src","pixelCount","ImageData","Uint8ClampedArray","byteOffset","src32","floor","byteLength","dst32","alignedPixels","srcOffset","dstOffset","b0","b1","b2","srcByte","dstByte","ALPHA_OPAQUE","compressed","_decompress","ds","DecompressionStream","writer","writable","getWriter","write","chunks","reader","readable","getReader","done","value","read","push","totalLength","reduce","sum","chunk","offset","images","_kittyIdToStorageId","kittyIdToStorageId","pendingTransmissions","Object","defineProperty","LIMITS","CHUNK_SIZE","PALETTE_SIZE","MAX_WIDTH","BYTES","_storage","static","_nextImageId","_images","_storageIdToKittyId","_previousOnImageDeleted","_wrappedOnImageDeleted","_handleStorageImageDeleted","storageId","kittyId","onImageDeleted","imageData","imageId","oldStorageId","deleteImage","has","size","KittyImageStorage","_maxStoredImages","_evictUndisplayedImages","scrolling","toStr","s","fromCharCode","toInt","v","toSize","match","DECODERS","inline","name","Buffer","from","toString","bs","atob","b","charCodeAt","TextDecoder","decode","preserveAspectRatio","FILE_MARKER","MAX_FIELDCHARS","state","_buffer","_position","_key","fields","fill","parse","pos","c","_storeValue","_a","k","_storeKey","slice","fn","arg","Array","isArray","d","disposables","toDisposable","_disposables","Set","_isDisposed","isDisposed","add","o","freeze","_store","DisposableStore","_register","_value","UNSUPPORTED_TYPE","d32","mime","len","blockLength","jpgSize","Disposable","_terminal","_layers","_placeholder","_placeholderBitmap","_optionsRefresh","MutableDisposable","_oldOpen","_renderService","_oldSetRenderer","localDocument","createElement","createImageData","ctx","imgData","super","open","parent","call","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","refreshRows","removeLayerFromDom","setRenderer","showPlaceholder","cellSize","_createPlaceHolder","clearLines","clearRect","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sx","sy","dx","dy","finalWidth","finalHeight","extractTile","drawPlaceholder","spec","currentWidth","currentHeight","actualCellSize","originalWidth","originalHeight","origCellSize","orig","bind","renderer","keys","insertLayerToDom","console","warn","classList","style","isolation","insertBefore","firstChild","appendChild","alpha","desynchronized","remove","hasLayer","bWidth","blueprint","black","toRGBA8888","white","shift","putImageData","screen","ctx2","_coreBrowserService","parts","split","part","eqIdx","indexOf","substring","numValue","parseInt","placementId","InWasm","def","m","W","WebAssembly","t","e","Instance","Module","z","instantiate","r","instance","compile","_wasmCtx","fromBase64","DEFAULT_PALETTE","PALETTE_ANSI_256","convertLe","color","BIG_ENDIAN","PALETTE_VT340_COLOR","_size","_dec","DecoderAsync","memoryLimit","palette","paletteLimit","sixelPaletteLimit","_palette","hook","params","fillColor","attr","colors","bg","isInverse","isFgDefault","foreground","rgba","isFgRGB","toColorRGB","getFgColor","ansi","isBgDefault","background","isBgRGB","getBgColor","extractActiveBg","_inputHandler","_curAttrData","_themeService","sixelSizeLimit","unhook","advanceCursor","memoryUsage","decodeAsync","Decoder","Colors_1","wasm_1","WASM_BYTES","bytestring","decodeBase64","WASM_MODULE","NULL_CANVAS","CallbackProxy","bandHandler","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","sixelColor","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","truncate","opts","cbProxy","importObj","env","inst","_instance","_cbProxy","_PIXEL_OFFSET","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","assign","_handle_band","_initCanvas","_wasm","_chunk","memory","get_chunk_address","_states","get_state_address","get_palette_address","_pSrc","get_p0_address","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","_realloc","additionalPixels","newCanvas","adv","remaining","current_width","current_height","properties","level","memUsage","rasterAttributes","numerator","denominator","p","decodeString","j","data32","escape","final","finalOffset","bw","dec","async","wasmDecode","MAP","map","el","D","EMPTY","keepSize","maxBytes","initialBytes","_inst","_ended","_bytes","_d","_m32","_mem","grow","Memory","initial","requested","needed","newSize","addPages","loadedBytes","freeBytes","ExtendedAttrsImage","_ext","ext","_urlId","underlineStyle","underlineColor","underlineVariantOffset","val","urlId","clone","isEmpty","EMPTY_ATTRS","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","_viewportMetrics","setLimit","storageLimit","error","getLimit","marker","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","ImageBitmap","wipeAlternate","zero","entries","bufferType","termCols","termRows","originX","originY","tileCount","_dirtyRowTracker","markDirty","line","lines","_writeToCell","lineFeed","endMarker","registerMarker","onDispose","active","_evictOnAlternate","render","range","hasTopImages","hasBottomImages","drawCalls","placeholderCalls","ydisp","getBg","_extendedAttrs","maybeImg","startTile","startCol","nextE","sort","a","viewportResize","metrics","oldCol","tilesPerRow","hasData","rightCol","_data","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","old","oldSpec","imgId","DEFAULT_HEADER","_hp","HeaderParser","_header","_metrics","maxEncodedBytes","iipSizeLimit","dataPos","cond","imageType","_resize","setTimeout","bm","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","red","n","green","blue","g","clamp","low","high","h2c","t1","t2","normalizeRGB","PALETTE_VT340_GREY","normalizeHLS","nearestColorIndex","fromRGBA8888","Number","MAX_SAFE_INTEGER","idx","dr","dg","db","l","HLStoRGB","sixelScrolling","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","enableSizeReports","sixelSupport","iipSupport","kittySupport","_defaultOpts","_handlers","obj","_disposeLater","args","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelStorage","SixelImageStorage","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipStorage","IIPImageStorage","iipHandler","IIPHandler","registerOscHandler","kittyStorage","kittyHandler","KittyGraphicsHandler","registerApcHandler","handler","limit","storageUsage","_report","toFixed","sqrt"],"ignoreList":[],"sourceRoot":""}