@xterm/addon-webgl 0.19.0-beta.6 → 0.19.0-beta.61

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-webgl.js","mappings":"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","sources":["webpack://WebglAddon/webpack/universalModuleDefinition","webpack://WebglAddon/./src/GlyphRenderer.ts","webpack://WebglAddon/./src/RectangleRenderer.ts","webpack://WebglAddon/./src/RenderModel.ts","webpack://WebglAddon/./src/WebglRenderer.ts","webpack://WebglAddon/./src/WebglUtils.ts","webpack://WebglAddon/./src/renderLayer/BaseRenderLayer.ts","webpack://WebglAddon/./src/renderLayer/LinkRenderLayer.ts","webpack://WebglAddon/../../src/browser/Lifecycle.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CellColorResolver.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CharAtlasCache.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CharAtlasUtils.ts","webpack://WebglAddon/../../src/browser/renderer/shared/Constants.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CursorBlinkStateManager.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CustomGlyphs.ts","webpack://WebglAddon/../../src/browser/renderer/shared/DevicePixelObserver.ts","webpack://WebglAddon/../../src/browser/renderer/shared/RendererUtils.ts","webpack://WebglAddon/../../src/browser/renderer/shared/SelectionRenderModel.ts","webpack://WebglAddon/../../src/browser/renderer/shared/TextureAtlas.ts","webpack://WebglAddon/../../src/common/Color.ts","webpack://WebglAddon/../../src/common/EventEmitter.ts","webpack://WebglAddon/../../src/common/Lifecycle.ts","webpack://WebglAddon/../../src/common/MultiKeyMap.ts","webpack://WebglAddon/../../src/common/Platform.ts","webpack://WebglAddon/../../src/common/TaskQueue.ts","webpack://WebglAddon/../../src/common/buffer/AttributeData.ts","webpack://WebglAddon/../../src/common/buffer/CellData.ts","webpack://WebglAddon/../../src/common/buffer/Constants.ts","webpack://WebglAddon/../../src/common/input/TextDecoder.ts","webpack://WebglAddon/../../src/common/services/LogService.ts","webpack://WebglAddon/../../src/common/services/ServiceRegistry.ts","webpack://WebglAddon/../../src/common/services/Services.ts","webpack://WebglAddon/webpack/bootstrap","webpack://WebglAddon/./src/WebglAddon.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[\"WebglAddon\"] = factory();\n\telse\n\t\troot[\"WebglAddon\"] = factory();\n})(self, () => {\nreturn ","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TextureAtlas } from 'browser/renderer/shared/TextureAtlas';\nimport { IRasterizedGlyph, IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { IOptionsService } from 'common/services/Services';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals}\n}`);\n}\n\nconst INDICES_PER_CELL = 11;\nconst BYTES_PER_CELL = INDICES_PER_CELL * Float32Array.BYTES_PER_ELEMENT;\nconst CELL_POSITION_INDICES = 2;\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages)));\n this.register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n this._vertexArrayObject = gl.createVertexArray();\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this.register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this.register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this.register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this.register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n public beginFrame(): boolean {\n return this._atlas ? this._atlas.beginFrame() : true;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a once of for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + INDICES_PER_CELL - 1 - CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n gl.uniform2f(this._resolutionLocation, gl.canvas.width, gl.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed\n for (let i = 0; i < this._atlas.pages.length; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n gl.generateMipmap(gl.TEXTURE_2D);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RENDER_MODEL_BG_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource));\n this.register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n this._vertexArrayObject = gl.createVertexArray();\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this.register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this.register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this.register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this.register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RENDER_MODEL_INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RENDER_MODEL_BG_OFFSET];\n fg = model.cells[modelIndex + RENDER_MODEL_FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + 4) {\n vertices.attributes = expandFloat32Array(vertices.attributes, this._terminal.rows * this._terminal.cols * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const RENDER_MODEL_INDICIES_PER_CELL = 4;\nexport const RENDER_MODEL_BG_OFFSET = 1;\nexport const RENDER_MODEL_FG_OFFSET = 2;\nexport const RENDER_MODEL_EXT_OFFSET = 3;\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RENDER_MODEL_INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from 'browser/renderer/shared/CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from 'browser/renderer/shared/CharAtlasCache';\nimport { CursorBlinkStateManager } from 'browser/renderer/shared/CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from 'browser/renderer/shared/DevicePixelObserver';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { EventEmitter, forwardEvent } from 'common/EventEmitter';\nimport { Disposable, MutableDisposable, getDisposeArrayDisposable, toDisposable } from 'common/Lifecycle';\nimport { CharData, IBufferLine, ICellData } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { ICoreService, IDecorationService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RENDER_MODEL_BG_OFFSET, RENDER_MODEL_EXT_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL, RenderModel } from './RenderModel';\nimport { IWebGL2RenderingContext } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable<CursorBlinkStateManager> = new MutableDisposable();\n private _charAtlasDisposable = this.register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _observerDisposable = this.register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _workCell: ICellData = new CellData();\n private _workCell2: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable<RectangleRenderer> = this.register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable<GlyphRenderer> = this.register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this.register(new EventEmitter<HTMLCanvasElement>());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this.register(new EventEmitter<HTMLCanvasElement>());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this.register(new EventEmitter<HTMLCanvasElement>());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this.register(new EventEmitter<IRequestRedrawEvent>());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this.register(new EventEmitter<void>());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n this.register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this.register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this.register(addDisposableDomListener(this._canvas, 'webglcontextlost', (e) => {\n console.log('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n console.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this.register(addDisposableDomListener(this._canvas, 'webglcontextrestored', (e) => {\n console.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this.register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._coreBrowserService.window.document.body.contains(this._core.screenElement!);\n\n this.register(toDisposable(() => {\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = getDisposeArrayDisposable([\n forwardEvent(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n forwardEvent(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n ]);\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return -1;\n }\n\n public deregisterCharacterJoiner(joinerId: number): boolean {\n return false;\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._coreBrowserService.window.document.body.contains(this._core.screenElement!) && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let lastCharX: number;\n let range: [number, number];\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n line = terminal.buffer.lines.get(row)!;\n this._model.lineLengths[y] = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0]) {\n isJoined = true;\n range = joinedRanges.shift()!;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RENDER_MODEL_INDICIES_PER_CELL;\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ?\n (terminal.options.cursorStyle || 'block') : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n (terminal.options.cursorStyle || 'block') === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RENDER_MODEL_BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RENDER_MODEL_FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RENDER_MODEL_EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RENDER_MODEL_BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RENDER_MODEL_FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RENDER_MODEL_EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x < lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RENDER_MODEL_INDICIES_PER_CELL;\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, 0, 0, 0, NULL_CELL_CHAR, 0, 0);\n this._model.cells[j] = NULL_CELL_CODE;\n this._model.cells[j + RENDER_MODEL_BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[j + RENDER_MODEL_FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[j + RENDER_MODEL_EXT_OFFSET] = this._cellColorResolver.result.ext;\n }\n }\n }\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The the size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may causes blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n this._requestRedrawViewport();\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n console.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n console.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from 'browser/renderer/shared/CharAtlasCache';\nimport { TEXT_BASELINE } from 'browser/renderer/shared/Constants';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this.register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this.register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from 'browser/renderer/shared/CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this.register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this.register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\n/**\n * Adds a disposable listener to a node in the DOM, returning the disposable.\n * @param node The node to add a listener to.\n * @param type The event type.\n * @param handler The handler for the listener.\n * @param options The boolean or options object to pass on to the event\n * listener.\n */\nexport function addDisposableDomListener(\n node: Element | Window | Document,\n type: string,\n handler: (e: any) => void,\n options?: boolean | AddEventListenerOptions\n): IDisposable {\n node.addEventListener(type, handler, options);\n let disposed = false;\n return {\n dispose: () => {\n if (disposed) {\n return;\n }\n disposed = true;\n node.removeEventListener(type, handler, options);\n }\n };\n}\n","import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from 'browser/renderer/shared/TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { generateConfig, configEquals } from 'browser/renderer/shared/CharAtlasUtils';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required<ITerminalOptions>,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required<ITerminalOptions>, colors: ReadonlyColorSet, devicePixelRatio: number): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs: options.customGlyphs,\n devicePixelRatio,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from 'browser/services/Services';\n\n/**\n * The time between cursor blinks.\n */\nconst BLINK_INTERVAL = 600;\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this.restartBlinkAnimation();\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IBlockVector {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport const blockElementDefinitions: { [index: string]: IBlockVector[] | undefined } = {\n // Block elements (0x2580-0x2590)\n '▀': [{ x: 0, y: 0, w: 8, h: 4 }], // UPPER HALF BLOCK\n '▁': [{ x: 0, y: 7, w: 8, h: 1 }], // LOWER ONE EIGHTH BLOCK\n '▂': [{ x: 0, y: 6, w: 8, h: 2 }], // LOWER ONE QUARTER BLOCK\n '▃': [{ x: 0, y: 5, w: 8, h: 3 }], // LOWER THREE EIGHTHS BLOCK\n '▄': [{ x: 0, y: 4, w: 8, h: 4 }], // LOWER HALF BLOCK\n '▅': [{ x: 0, y: 3, w: 8, h: 5 }], // LOWER FIVE EIGHTHS BLOCK\n '▆': [{ x: 0, y: 2, w: 8, h: 6 }], // LOWER THREE QUARTERS BLOCK\n '▇': [{ x: 0, y: 1, w: 8, h: 7 }], // LOWER SEVEN EIGHTHS BLOCK\n '█': [{ x: 0, y: 0, w: 8, h: 8 }], // FULL BLOCK\n '▉': [{ x: 0, y: 0, w: 7, h: 8 }], // LEFT SEVEN EIGHTHS BLOCK\n '▊': [{ x: 0, y: 0, w: 6, h: 8 }], // LEFT THREE QUARTERS BLOCK\n '▋': [{ x: 0, y: 0, w: 5, h: 8 }], // LEFT FIVE EIGHTHS BLOCK\n '▌': [{ x: 0, y: 0, w: 4, h: 8 }], // LEFT HALF BLOCK\n '▍': [{ x: 0, y: 0, w: 3, h: 8 }], // LEFT THREE EIGHTHS BLOCK\n '▎': [{ x: 0, y: 0, w: 2, h: 8 }], // LEFT ONE QUARTER BLOCK\n '▏': [{ x: 0, y: 0, w: 1, h: 8 }], // LEFT ONE EIGHTH BLOCK\n '▐': [{ x: 4, y: 0, w: 4, h: 8 }], // RIGHT HALF BLOCK\n\n // Block elements (0x2594-0x2595)\n '▔': [{ x: 0, y: 0, w: 8, h: 1 }], // UPPER ONE EIGHTH BLOCK\n '▕': [{ x: 7, y: 0, w: 1, h: 8 }], // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (0x2596-0x259F)\n '▖': [{ x: 0, y: 4, w: 4, h: 4 }], // QUADRANT LOWER LEFT\n '▗': [{ x: 4, y: 4, w: 4, h: 4 }], // QUADRANT LOWER RIGHT\n '▘': [{ x: 0, y: 0, w: 4, h: 4 }], // QUADRANT UPPER LEFT\n '▙': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT\n '▚': [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }], // QUADRANT UPPER LEFT AND LOWER RIGHT\n '▛': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '▜': [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '▝': [{ x: 4, y: 0, w: 4, h: 4 }], // QUADRANT UPPER RIGHT\n '▞': [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT\n '▟': [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // VERTICAL ONE EIGHTH BLOCK-2 through VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB70}': [{ x: 1, y: 0, w: 1, h: 8 }],\n '\\u{1FB71}': [{ x: 2, y: 0, w: 1, h: 8 }],\n '\\u{1FB72}': [{ x: 3, y: 0, w: 1, h: 8 }],\n '\\u{1FB73}': [{ x: 4, y: 0, w: 1, h: 8 }],\n '\\u{1FB74}': [{ x: 5, y: 0, w: 1, h: 8 }],\n '\\u{1FB75}': [{ x: 6, y: 0, w: 1, h: 8 }],\n\n // HORIZONTAL ONE EIGHTH BLOCK-2 through HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': [{ x: 0, y: 1, w: 8, h: 1 }],\n '\\u{1FB77}': [{ x: 0, y: 2, w: 8, h: 1 }],\n '\\u{1FB78}': [{ x: 0, y: 3, w: 8, h: 1 }],\n '\\u{1FB79}': [{ x: 0, y: 4, w: 8, h: 1 }],\n '\\u{1FB7A}': [{ x: 0, y: 5, w: 8, h: 1 }],\n '\\u{1FB7B}': [{ x: 0, y: 6, w: 8, h: 1 }],\n\n // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7C}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7D}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7F}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n // UPPER AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n // HORIZONTAL ONE EIGHTH BLOCK-1358\n '\\u{1FB81}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n\n // UPPER ONE QUARTER BLOCK\n '\\u{1FB82}': [{ x: 0, y: 0, w: 8, h: 2 }],\n // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB83}': [{ x: 0, y: 0, w: 8, h: 3 }],\n // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB84}': [{ x: 0, y: 0, w: 8, h: 5 }],\n // UPPER THREE QUARTERS BLOCK\n '\\u{1FB85}': [{ x: 0, y: 0, w: 8, h: 6 }],\n // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB86}': [{ x: 0, y: 0, w: 8, h: 7 }],\n\n // RIGHT ONE QUARTER BLOCK\n '\\u{1FB87}': [{ x: 6, y: 0, w: 2, h: 8 }],\n // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB88}': [{ x: 5, y: 0, w: 3, h: 8 }],\n // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB89}': [{ x: 3, y: 0, w: 5, h: 8 }],\n // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8A}': [{ x: 2, y: 0, w: 6, h: 8 }],\n // RIGHT SEVEN EIGHTHS B0OCK\n '\\u{1FB8B}': [{ x: 1, y: 0, w: 7, h: 8 }],\n\n // CHECKER BOARD FILL\n '\\u{1FB95}': [\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ],\n // INVERSE CHECKER BOARD FILL\n '\\u{1FB96}': [\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ],\n // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n '\\u{1FB97}': [{ x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }]\n};\n\ntype PatternDefinition = number[][];\n\n/**\n * Defines the repeating pattern used by special characters, the pattern is made up of a 2d array of\n * pixel values to be filled (1) or not filled (0).\n */\nconst patternCharacterDefinitions: { [key: string]: PatternDefinition | undefined } = {\n // Shade characters (0x2591-0x2593)\n '░': [ // LIGHT SHADE (25%)\n [1, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 0]\n ],\n '▒': [ // MEDIUM SHADE (50%)\n [1, 0],\n [0, 0],\n [0, 1],\n [0, 0]\n ],\n '▓': [ // DARK SHADE (75%)\n [0, 1],\n [1, 1],\n [1, 0],\n [1, 1]\n ]\n};\n\nconst enum Shapes {\n /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nconst enum Style {\n NORMAL = 1,\n BOLD = 3\n}\n\n/**\n * @param xp The percentage of 15% of the x axis.\n * @param yp The percentage of 15% of the x axis on the y axis.\n */\ntype DrawFunctionDefinition = (xp: number, yp: number) => string;\n\n/**\n * This contains the definitions of all box drawing characters in the format of SVG paths (ie. the\n * svg d attribute).\n */\nexport const boxDrawingDefinitions: { [character: string]: { [fontWeight: number]: string | DrawFunctionDefinition } | undefined } = {\n // Uniform normal and bold\n '─': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT },\n '━': { [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '│': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM },\n '┃': { [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '┌': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM },\n '┏': { [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '┐': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM },\n '┓': { [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '└': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT },\n '┗': { [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '┘': { [Style.NORMAL]: Shapes.TOP_TO_LEFT },\n '┛': { [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '├': { [Style.NORMAL]: Shapes.T_RIGHT },\n '┣': { [Style.BOLD]: Shapes.T_RIGHT },\n '┤': { [Style.NORMAL]: Shapes.T_LEFT },\n '┫': { [Style.BOLD]: Shapes.T_LEFT },\n '┬': { [Style.NORMAL]: Shapes.T_BOTTOM },\n '┳': { [Style.BOLD]: Shapes.T_BOTTOM },\n '┴': { [Style.NORMAL]: Shapes.T_TOP },\n '┻': { [Style.BOLD]: Shapes.T_TOP },\n '┼': { [Style.NORMAL]: Shapes.CROSS },\n '╋': { [Style.BOLD]: Shapes.CROSS },\n '╴': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT },\n '╸': { [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '╵': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP },\n '╹': { [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '╶': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT },\n '╺': { [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '╷': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM },\n '╻': { [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n\n // Double border\n '═': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n '║': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n '╒': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n '╓': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1` },\n '╔': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n '╕': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}` },\n '╖': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1` },\n '╗': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1` },\n '╘': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}` },\n '╙': { [Style.NORMAL]: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n '╚': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0` },\n '╛': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}` },\n '╜': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0` },\n '╝': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0` },\n '╞': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n '╟': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5` },\n '╠': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n '╡': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}` },\n '╢': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n '╣': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0` },\n '╤': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1` },\n '╥': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1` },\n '╦': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n '╧': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n '╨': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n '╩': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n '╪': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n '╫': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n '╬': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n\n // Diagonal\n '╱': { [Style.NORMAL]: 'M1,0 L0,1' },\n '╲': { [Style.NORMAL]: 'M0,0 L1,1' },\n '╳': { [Style.NORMAL]: 'M1,0 L0,1 M0,0 L1,1' },\n\n // Mixed weight\n '╼': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '╽': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '╾': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '╿': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┍': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┎': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┑': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┒': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┕': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┖': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┙': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┚': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┝': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┞': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┟': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┠': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '┡': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '┢': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '┥': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┦': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┧': { [Style.NORMAL]: Shapes.TOP_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┨': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '┩': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '┪': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '┭': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┮': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┯': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '┰': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┱': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '┲': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '┵': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┶': { [Style.NORMAL]: Shapes.TOP_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┷': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '┸': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┹': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '┺': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '┽': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┾': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┿': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM, [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '╀': { [Style.NORMAL]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '╁': { [Style.NORMAL]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '╂': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT, [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '╃': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '╄': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '╅': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT, [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '╆': { [Style.NORMAL]: Shapes.TOP_TO_LEFT, [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '╇': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}` },\n '╈': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}` },\n '╉': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}` },\n '╊': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}` },\n\n // Dashed\n '╌': { [Style.NORMAL]: Shapes.TWO_DASHES_HORIZONTAL },\n '╍': { [Style.BOLD]: Shapes.TWO_DASHES_HORIZONTAL },\n '┄': { [Style.NORMAL]: Shapes.THREE_DASHES_HORIZONTAL },\n '┅': { [Style.BOLD]: Shapes.THREE_DASHES_HORIZONTAL },\n '┈': { [Style.NORMAL]: Shapes.FOUR_DASHES_HORIZONTAL },\n '┉': { [Style.BOLD]: Shapes.FOUR_DASHES_HORIZONTAL },\n '╎': { [Style.NORMAL]: Shapes.TWO_DASHES_VERTICAL },\n '╏': { [Style.BOLD]: Shapes.TWO_DASHES_VERTICAL },\n '┆': { [Style.NORMAL]: Shapes.THREE_DASHES_VERTICAL },\n '┇': { [Style.BOLD]: Shapes.THREE_DASHES_VERTICAL },\n '┊': { [Style.NORMAL]: Shapes.FOUR_DASHES_VERTICAL },\n '┋': { [Style.BOLD]: Shapes.FOUR_DASHES_VERTICAL },\n\n // Curved\n '╭': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5` },\n '╮': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5` },\n '╯': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5` },\n '╰': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5` }\n};\n\ninterface IVectorShape {\n d: string;\n type: VectorType;\n leftPadding?: number;\n rightPadding?: number;\n}\n\nconst enum VectorType {\n FILL,\n STROKE\n}\n\n/**\n * This contains the definitions of the primarily used box drawing characters as vector shapes. The\n * reason these characters are defined specially is to avoid common problems if a user's font has\n * not been patched with powerline characters and also to get pixel perfect rendering as rendering\n * issues can occur around AA/SPAA.\n *\n * The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n * visible.\n *\n * Original symbols defined in https://github.com/powerline/fontpatcher\n */\nexport const powerlineDefinitions: { [index: string]: IVectorShape } = {\n // Right triangle solid\n '\\u{E0B0}': { d: 'M0,0 L1,.5 L0,1', type: VectorType.FILL, rightPadding: 2 },\n // Right triangle line\n '\\u{E0B1}': { d: 'M-1,-.5 L1,.5 L-1,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Left triangle solid\n '\\u{E0B2}': { d: 'M1,0 L0,.5 L1,1', type: VectorType.FILL, leftPadding: 2 },\n // Left triangle line\n '\\u{E0B3}': { d: 'M2,-.5 L0,.5 L2,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Right semi-circle solid\n '\\u{E0B4}': { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: VectorType.FILL, rightPadding: 1 },\n // Right semi-circle line\n '\\u{E0B5}': { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: VectorType.STROKE, rightPadding: 1 },\n // Left semi-circle solid\n '\\u{E0B6}': { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: VectorType.FILL, leftPadding: 1 },\n // Left semi-circle line\n '\\u{E0B7}': { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: VectorType.STROKE, leftPadding: 1 },\n // Lower left triangle\n '\\u{E0B8}': { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: VectorType.FILL },\n // Backslash separator\n '\\u{E0B9}': { d: 'M-.5,-.5 L1.5,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Lower right triangle\n '\\u{E0BA}': { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: VectorType.FILL },\n // Upper left triangle\n '\\u{E0BC}': { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: VectorType.FILL },\n // Forward slash separator\n '\\u{E0BD}': { d: 'M1.5,-.5 L-.5,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Upper right triangle\n '\\u{E0BE}': { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: VectorType.FILL }\n};\n// Forward slash separator redundant\npowerlineDefinitions['\\u{E0BB}'] = powerlineDefinitions['\\u{E0BD}'];\n// Backslash separator redundant\npowerlineDefinitions['\\u{E0BF}'] = powerlineDefinitions['\\u{E0B9}'];\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomChar(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number\n): boolean {\n const blockElementDefinition = blockElementDefinitions[c];\n if (blockElementDefinition) {\n drawBlockElementChar(ctx, blockElementDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n return true;\n }\n\n const patternDefinition = patternCharacterDefinitions[c];\n if (patternDefinition) {\n drawPatternChar(ctx, patternDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n return true;\n }\n\n const boxDrawingDefinition = boxDrawingDefinitions[c];\n if (boxDrawingDefinition) {\n drawBoxDrawingChar(ctx, boxDrawingDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight, devicePixelRatio);\n return true;\n }\n\n const powerlineDefinition = powerlineDefinitions[c];\n if (powerlineDefinition) {\n drawPowerlineChar(ctx, powerlineDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight, fontSize, devicePixelRatio);\n return true;\n }\n\n return false;\n}\n\nfunction drawBlockElementChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: IBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\nconst cachedPatterns: Map<PatternDefinition, Map</* fillStyle */string, CanvasPattern>> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n const tmpCanvas = ctx.canvas.ownerDocument.createElement('canvas');\n tmpCanvas.width = width;\n tmpCanvas.height = height;\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\n/**\n * Draws the following box drawing characters by mapping a subset of SVG d attribute instructions to\n * canvas draw calls.\n *\n * Box styles: ┎┰┒┍┯┑╓╥╖╒╤╕ ┏┳┓┌┲┓┌┬┐┏┱┐\n * ┌─┬─┐ ┏━┳━┓ ╔═╦═╗ ┠╂┨┝┿┥╟╫╢╞╪╡ ┡╇┩├╊┫┢╈┪┣╉┤\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┖┸┚┕┷┙╙╨╜╘╧╛ └┴┘└┺┛┗┻┛┗┹┘\n * ├─┼─┤ ┣━╋━┫ ╠═╬═╣ ┏┱┐┌┲┓┌┬┐┌┬┐ ┏┳┓┌┮┓┌┬┐┏┭┐\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┡╃┤├╄┩├╆┪┢╅┤ ┞╀┦├┾┫┟╁┧┣┽┤\n * └─┴─┘ ┗━┻━┛ ╚═╩═╝ └┴┘└┴┘└┺┛┗┹┘ └┴┘└┶┛┗┻┛┗┵┘\n *\n * Other:\n * ╭─╮ ╲ ╱ ╷╻╎╏┆┇┊┋ ╺╾╴ ╌╌╌ ┄┄┄ ┈┈┈\n * │ │ ╳ ╽╿╎╏┆┇┊┋ ╶╼╸ ╍╍╍ ┅┅┅ ┉┉┉\n * ╰─╯ ╱ ╲ ╹╵╎╏┆┇┊┋\n *\n * All box drawing characters:\n * ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏\n * ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟\n * ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯\n * ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿\n * ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏\n * ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟\n * ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯\n * ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿\n *\n * ---\n *\n * Box drawing alignment tests: █\n * ▉\n * ╔══╦══╗ ┌──┬──┐ ╭──┬──╮ ╭──┬──╮ ┏━━┳━━┓ ┎┒┏┑ ╷ ╻ ┏┯┓ ┌┰┐ ▊ ╱╲╱╲╳╳╳\n * ║┌─╨─┐║ │╔═╧═╗│ │╒═╪═╕│ │╓─╁─╖│ ┃┌─╂─┐┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ ┝╋┥ ▋ ╲╱╲╱╳╳╳\n * ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╿ │┃ ┍╅╆┓ ╵ ╹ ┗┷┛ └┸┘ ▌ ╱╲╱╲╳╳╳\n * ╠╡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳\n * ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▎\n * ║└─╥─┘║ │╚═╤═╝│ │╘═╪═╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▏\n * ╚══╩══╝ └──┴──┘ ╰──┴──╯ ╰──┴──╯ ┗━━┻━━┛ └╌╌┘ ╎ ┗╍╍┛ ┋ ▁▂▃▄▅▆▇█\n *\n * Source: https://www.w3.org/2001/06/utf-8-test/UTF-8-demo.html\n */\nfunction drawBoxDrawingChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: { [fontWeight: number]: string | ((xp: number, yp: number) => string) },\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number\n): void {\n ctx.strokeStyle = ctx.fillStyle;\n for (const [fontWeight, instructions] of Object.entries(charDefinition)) {\n ctx.beginPath();\n ctx.lineWidth = devicePixelRatio * Number.parseInt(fontWeight);\n let actualInstructions: string;\n if (typeof instructions === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = instructions(xp, yp);\n } else {\n actualInstructions = instructions;\n }\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n console.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio));\n }\n ctx.stroke();\n ctx.closePath();\n }\n}\n\nfunction drawPowerlineChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: IVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n console.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ));\n }\n if (charDefinition.type === VectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: any } = {\n 'C': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]),\n 'L': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.lineTo(args[0], args[1]),\n 'M': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.moveTo(args[0], args[1])\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n // line at 100% devicePixelRatio\n if (doClamp && result[x] !== 0) {\n result[x] = clamp(Math.round(result[x] + 0.5) - 0.5, cellWidth, 0);\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n // line at 100% devicePixelRatio\n if (doClamp && result[y] !== 0) {\n result[y] = clamp(Math.round(result[y] + 0.5) - 0.5, cellHeight, 0);\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable } from 'common/Lifecycle';\nimport { IDisposable } from 'common/Types';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from 'browser/renderer/shared/Types';\n\nexport function throwIfFalsy<T>(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from 'browser/renderer/shared/Constants';\nimport { tryDrawCustomChar } from 'browser/renderer/shared/CustomGlyphs';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { EventEmitter } from 'common/EventEmitter';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { IUnicodeService } from 'common/services/Services';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap<number, number, number, number, IRasterizedGlyph> = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap<string, number, number, number, IRasterizedGlyph> = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transfered to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new EventEmitter<HTMLCanvasElement>();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new EventEmitter<HTMLCanvasElement>();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue();\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _requestClearModel = false;\n public beginFrame(): boolean {\n return this._requestClearModel;\n }\n\n public clearTexture(): void {\n if (this._pages[0].currentRow.x === 0 && this._pages[0].currentRow.y === 0) {\n return;\n }\n for (const page of this._pages) {\n page.clear();\n }\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a > b ? 1 : -1);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version++;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Request the model to be cleared to refresh all texture pages.\n this._requestClearModel = true;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version++;\n }\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap<string | number, number, number, number, IRasterizedGlyph>,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean = false\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor || undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean = false): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._textureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n customGlyph = tryDrawCustomChar(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.fontSize, this._config.devicePixelRatio);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTop = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yMid = yTop + lineWidth;\n const yBot = yTop + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n\n for (let i = 0; i < chWidth; i++) {\n this._tmpCtx.save();\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n const xChMid = xChLeft + this._config.deviceCellWidth / 2;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n this._tmpCtx.moveTo(xChLeft, yBot);\n this._tmpCtx.lineTo(xChRight, yBot);\n break;\n case UnderlineStyle.CURLY:\n // Choose the bezier top and bottom based on the device pixel ratio, the curly line is\n // made taller when the line width is as otherwise it's not very clear otherwise.\n const yCurlyBot = lineWidth <= 1 ? yBot : Math.ceil(padding + this._config.deviceCharHeight - lineWidth / 2) - yOffset;\n const yCurlyTop = lineWidth <= 1 ? yTop : Math.ceil(padding + this._config.deviceCharHeight + lineWidth / 2) - yOffset;\n // Clip the left and right edges of the underline such that it can be drawn just outside\n // the edge of the cell to ensure a continuous stroke when there are multiple underlined\n // glyphs adjacent to one another.\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n // Start 1/2 cell before and end 1/2 cells after to ensure a smooth curve with other\n // cells\n this._tmpCtx.moveTo(xChLeft - this._config.deviceCellWidth / 2, yMid);\n this._tmpCtx.bezierCurveTo(\n xChLeft - this._config.deviceCellWidth / 2, yCurlyTop,\n xChLeft, yCurlyTop,\n xChLeft, yMid\n );\n this._tmpCtx.bezierCurveTo(\n xChLeft, yCurlyBot,\n xChMid, yCurlyBot,\n xChMid, yMid\n );\n this._tmpCtx.bezierCurveTo(\n xChMid, yCurlyTop,\n xChRight, yCurlyTop,\n xChRight, yMid\n );\n this._tmpCtx.bezierCurveTo(\n xChRight, yCurlyBot,\n xChRight + this._config.deviceCellWidth / 2, yCurlyBot,\n xChRight + this._config.deviceCellWidth / 2, yMid\n );\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTop);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n break;\n }\n this._tmpCtx.stroke();\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version++;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray<IRasterizedGlyph> { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Used to check whether the canvas of the atlas page has changed.\n */\n public version = 0;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n if (sourcePages) {\n for (const p of sourcePages) {\n this._glyphs.push(...p.glyphs);\n this._usedPixels += p._usedPixels;\n }\n }\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version++;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevent pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from 'common/Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1]);\n $g = parseInt(rgbaMatch[2]);\n $b = parseInt(rgbaMatch[3]);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The first relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\ninterface IListener<T, U = void> {\n (arg1: T, arg2: U): void;\n}\n\nexport interface IEvent<T, U = void> {\n (listener: (arg1: T, arg2: U) => any): IDisposable;\n}\n\nexport interface IEventEmitter<T, U = void> {\n event: IEvent<T, U>;\n fire(arg1: T, arg2: U): void;\n dispose(): void;\n}\n\nexport class EventEmitter<T, U = void> implements IEventEmitter<T, U> {\n private _listeners: IListener<T, U>[] = [];\n private _event?: IEvent<T, U>;\n private _disposed: boolean = false;\n\n public get event(): IEvent<T, U> {\n if (!this._event) {\n this._event = (listener: (arg1: T, arg2: U) => any) => {\n this._listeners.push(listener);\n const disposable = {\n dispose: () => {\n if (!this._disposed) {\n for (let i = 0; i < this._listeners.length; i++) {\n if (this._listeners[i] === listener) {\n this._listeners.splice(i, 1);\n return;\n }\n }\n }\n }\n };\n return disposable;\n };\n }\n return this._event;\n }\n\n public fire(arg1: T, arg2: U): void {\n const queue: IListener<T, U>[] = [];\n for (let i = 0; i < this._listeners.length; i++) {\n queue.push(this._listeners[i]);\n }\n for (let i = 0; i < queue.length; i++) {\n queue[i].call(undefined, arg1, arg2);\n }\n }\n\n public dispose(): void {\n this.clearListeners();\n this._disposed = true;\n }\n\n public clearListeners(): void {\n if (this._listeners) {\n this._listeners.length = 0;\n }\n }\n}\n\nexport function forwardEvent<T>(from: IEvent<T>, to: IEventEmitter<T>): IDisposable {\n return from(e => to.fire(e));\n}\n\nexport function runAndSubscribe<T>(event: IEvent<T>, handler: (e: T | undefined) => any): IDisposable {\n handler(undefined);\n return event(e => handler(e));\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\n/**\n * A base class that can be extended to provide convenience methods for managing the lifecycle of an\n * object and its components.\n */\nexport abstract class Disposable implements IDisposable {\n protected _disposables: IDisposable[] = [];\n protected _isDisposed: boolean = false;\n\n /**\n * Disposes the object, triggering the `dispose` method on all registered IDisposables.\n */\n public dispose(): void {\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.length = 0;\n }\n\n /**\n * Registers a disposable object.\n * @param d The disposable to register.\n * @returns The disposable.\n */\n public register<T extends IDisposable>(d: T): T {\n this._disposables.push(d);\n return d;\n }\n\n /**\n * Unregisters a disposable object if it has been registered, if not do\n * nothing.\n * @param d The disposable to unregister.\n */\n public unregister<T extends IDisposable>(d: T): void {\n const index = this._disposables.indexOf(d);\n if (index !== -1) {\n this._disposables.splice(index, 1);\n }\n }\n}\n\nexport class MutableDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n private _isDisposed = false;\n\n /**\n * Gets the value if it exists.\n */\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n /**\n * Sets the value, disposing of the old value if it exists.\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 /**\n * Resets the stored value and disposes of the previously stored value.\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/**\n * Wrap a function in a disposable.\n */\nexport function toDisposable(f: () => void): IDisposable {\n return { dispose: f };\n}\n\n/**\n * Dispose of all disposables in an array and set its length to 0.\n */\nexport function disposeArray(disposables: IDisposable[]): void {\n for (const d of disposables) {\n d.dispose();\n }\n disposables.length = 0;\n}\n\n/**\n * Creates a disposable that will dispose of an array of disposables when disposed.\n */\nexport function getDisposeArrayDisposable(array: IDisposable[]): IDisposable {\n return { dispose: () => disposeArray(array) };\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap<TFirst extends string | number, TSecond extends string | number, TValue> {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap<TFirst extends string | number, TSecond extends string | number, TThird extends string | number, TFourth extends string | number, TValue> {\n private _data: TwoKeyMap<TFirst, TSecond, TwoKeyMap<TThird, TFourth, TValue>> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any)) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1]);\n}\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isNode } from 'common/Platform';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the mainthread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration = 0;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining = 0;\n while (this._i < this._tasks.length) {\n taskDuration = Date.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, Date.now might not be stable (changes on wall clock changes),\n // this is not an issue here as a clock change during a short running task is very unlikely\n // in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, Date.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = Date.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - Date.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = (!isNode && 'requestIdleCallback' in window) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor() {\n this._queue = new IdleTaskQueue();\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAttributeData, IColorRGB, IExtendedAttrs } from 'common/Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from 'common/buffer/Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\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 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 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 constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from 'common/buffer/Constants';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct aligment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.codepointMask;`\n * write: `content |= codepoint & Content.codepointMask;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indication whether a cell contains combined content\n * read: `isCombined = content & Content.isCombined;`\n * set: `content |= Content.isCombined;`\n * clear: `content &= ~Content.isCombined;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.hasContent)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.widthMask) >> Content.widthShift;`\n * `hasWidth = content & Content.widthMask;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.widthShift;`\n * write: `content |= (width << Content.widthShift) & Content.widthMask;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.widthShift;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint = 0;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos] & 0x3F) && pos < 4) {\n cp <<= 6;\n cp |= tmp;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'common/Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from 'common/services/Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this.register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n\n // For trace logging, assume the latest created log service is valid\n traceLogger = this;\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n\nlet traceLogger: ILogService;\nexport function setTraceLogger(logger: ILogService): void {\n traceLogger = logger;\n}\n\n/**\n * A decorator that can be used to automatically log trace calls to the decorated function.\n */\nexport function traceCall(_target: any, key: string, descriptor: any): any {\n if (typeof descriptor.value !== 'function') {\n throw new Error('not supported');\n }\n const fnKey = 'value';\n const fn = descriptor.value;\n descriptor[fnKey] = function (...args: any[]) {\n // Early exit\n if (traceLogger.logLevel !== LogLevelEnum.TRACE) {\n return fn.apply(this, args);\n }\n\n traceLogger.trace(`GlyphRenderer#${fn.name}(${args.map(e => JSON.stringify(e)).join(', ')})`);\n const result = fn.apply(this, args);\n traceLogger.trace(`GlyphRenderer#${fn.name} return`, result);\n return result;\n };\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IServiceIdentifier } from 'common/services/Services';\n\nconst DI_TARGET = 'di$target';\nconst DI_DEPENDENCIES = 'di$dependencies';\n\nexport const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {\n return ctor[DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator<T>(id: string): IServiceIdentifier<T> {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator.toString = () => id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[DI_TARGET] === target) {\n (target as any)[DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[DI_TARGET] = target;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IEvent, IEventEmitter } from 'common/EventEmitter';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IDecPrivateModes, ICoreMouseEvent, CoreMouseEncoding, ICoreMouseProtocol, CoreMouseEventType, ICharset, IWindowOptions, IModes, IAttributeData, ScrollSource, IDisposable, IColor, CursorStyle, CursorInactiveStyle, IOscLinkData } from 'common/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\nimport { IDecorationOptions, IDecoration, ILinkHandler, IWindowsPty, ILogger } from '@xterm/xterm';\n\nexport const IBufferService = createDecorator<IBufferService>('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent<{ cols: number, rows: number }>;\n onScroll: IEvent<number>;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');\nexport interface ICoreMouseService {\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the bowser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fullfill protocol and encoding restrictions.\n */\n triggerMouseEvent(event: ICoreMouseEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent<CoreMouseEventType>;\n\n /**\n * Human readable version of mouse events.\n */\n explainEvents(events: CoreMouseEventType): { [event: string]: boolean };\n}\n\nexport const ICoreService = createDecorator<ICoreService>('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n\n readonly onData: IEvent<string>;\n readonly onUserInput: IEvent<void>;\n readonly onBinary: IEvent<string>;\n readonly onRequestScrollToBottom: IEvent<void>;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator<ICharsetService>('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IServiceIdentifier<T> {\n (...args: any[]): void;\n type: T;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs<TFirst> : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService<T>(id: IServiceIdentifier<T>, instance: T): void;\n getService<T>(id: IServiceIdentifier<T>): T | undefined;\n createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator<ILogService>('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator<IOptionsService>('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required<ITerminalOptions>;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required<ITerminalOptions>;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent<keyof ITerminalOptions>;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange<T extends keyof ITerminalOptions>(key: T, listener: (arg1: Required<ITerminalOptions>[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n customGlyphs?: boolean;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollModifier?: 'none' | 'alt' | 'ctrl' | 'shift';\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsMode?: boolean;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n overviewRulerWidth?: number;\n\n [key: string]: any;\n cancelEvents: boolean;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport const IOscLinkService = createDecorator<IOscLinkService>('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator<IUnicodeService>('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register an Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered, when activate version changed. */\n readonly onChange: IEvent<string>;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator<IDecorationService>('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator<IInternalDecoration>;\n readonly onDecorationRegistered: IEvent<IInternalDecoration>;\n readonly onDecorationRemoved: IEvent<IInternalDecoration>;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: IEventEmitter<HTMLElement>;\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) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { EventEmitter, forwardEvent } from 'common/EventEmitter';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { setTraceLogger } from 'common/services/LogService';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon , IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this.register(new EventEmitter<HTMLCanvasElement>());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this.register(new EventEmitter<HTMLCanvasElement>());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this.register(new EventEmitter<HTMLCanvasElement>());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this.register(new EventEmitter<void>());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _preserveDrawingBuffer?: boolean\n ) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('Webgl2 is only supported on Safari 16 and above');\n }\n }\n super();\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this.register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n // Set trace logger just in case it hasn't been yet which could happen when the addon is\n // bundled separately to the core module\n setTraceLogger(logService);\n\n this._renderer = this.register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n optionsService,\n themeService,\n this._preserveDrawingBuffer\n ));\n this.register(forwardEvent(this._renderer.onContextLoss, this._onContextLoss));\n this.register(forwardEvent(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this.register(forwardEvent(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this.register(forwardEvent(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this.register(toDisposable(() => {\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","INDICES_PER_CELL","BYTES_PER_CELL","Float32Array","BYTES_PER_ELEMENT","$glyph","$i","$leftCellPadding","$clippedPixels","GlyphRenderer","Disposable","constructor","_terminal","_gl","_dimensions","_optionsService","super","_activeBuffer","_vertices","count","attributes","attributesBuffers","gl","this","undefined","TextureAtlas","maxAtlasPages","Math","min","throwIfFalsy","getParameter","MAX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","_program","createProgram","maxFragmentShaderTextureUnits","textureConditionals","i","createFragmentShaderSource","register","toDisposable","deleteProgram","_projectionLocation","getUniformLocation","_resolutionLocation","_textureLocation","_vertexArrayObject","createVertexArray","bindVertexArray","unitQuadVertices","unitQuadVerticesBuffer","createBuffer","deleteBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","unitQuadElementIndices","Uint8Array","elementIndicesBuffer","ELEMENT_ARRAY_BUFFER","_attributesBuffer","vertexAttribDivisor","useProgram","textureUnits","Int32Array","uniform1iv","uniformMatrix4fv","PROJECTION_MATRIX","_atlasTextures","glTexture","GLTexture","createTexture","deleteTexture","texture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","enable","BLEND","blendFunc","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","handleResize","beginFrame","_atlas","updateCell","x","y","code","bg","fg","ext","chars","width","lastBg","_updateCell","array","cols","NULL_CELL_CODE","length","getRasterizedGlyphCombinedChar","getRasterizedGlyph","floor","device","cell","char","offset","left","top","size","canvas","height","texturePage","texturePositionClipSpace","pages","sizeClipSpace","rawOptions","rescaleOverlappingGlyphs","allowRescaling","fill","clear","terminal","newCount","rows","viewport","uniform2f","render","renderModel","activeBuffer","bufferLength","lineLengths","si","sub","subarray","set","STREAM_DRAW","version","_bindAtlasPageTexture","drawElementsInstanced","TRIANGLE_STRIP","setAtlas","atlas","generateMipmap","setDimensions","dimensions","BYTES_PER_RECTANGLE","Vertices","$rgba","$x1","$y1","$r","$g","$b","$a","RectangleRenderer","_themeService","_verticesCursor","_updateCachedColors","colors","onChangeColors","e","_updateViewportRectangle","renderBackgrounds","_renderVertices","renderCursor","vertices","DYNAMIC_DRAW","_bgFloat","_colorToFloat32Array","background","_cursorFloat","cursor","_addRectangleFloat","updateBackgrounds","model","currentStartX","currentBg","currentFg","currentInverse","modelIndex","inverse","rectangleCount","RENDER_MODEL_INDICIES_PER_CELL","cells","RENDER_MODEL_BG_OFFSET","RENDER_MODEL_FG_OFFSET","_updateRectangle","updateCursor","style","dpr","cursorWidth","startX","endX","ansi","rgba","foreground","expandFloat32Array","_addRectangle","x1","y1","r","g","b","a","color","RENDER_MODEL_EXT_OFFSET","COMBINED_CHAR_BIT_MASK","Uint32Array","selection","createSelectionRenderModel","resize","indexCount","WebglRenderer","_characterJoinerService","_charSizeService","_coreBrowserService","_coreService","_decorationService","preserveDrawingBuffer","_cursorBlinkStateManager","MutableDisposable","_charAtlasDisposable","_observerDisposable","_model","RenderModel","_workCell","CellData","_workCell2","_rectangleRenderer","_glyphRenderer","_onChangeTextureAtlas","EventEmitter","onChangeTextureAtlas","event","_onAddTextureAtlasCanvas","onAddTextureAtlasCanvas","_onRemoveTextureAtlasCanvas","onRemoveTextureAtlasCanvas","_onRequestRedraw","onRequestRedraw","_onContextLoss","onContextLoss","_handleColorChange","_cellColorResolver","CellColorResolver","_core","_renderLayers","LinkRenderLayer","screenElement","linkifier","createRenderDimensions","_devicePixelRatio","_updateDimensions","_updateCursorBlink","onOptionChange","_handleOptionsChanged","_canvas","mainDocument","createElement","contextAttributes","antialias","depth","getContext","Error","addDisposableDomListener","console","log","preventDefault","_contextRestorationTimeout","setTimeout","warn","fire","clearTimeout","removeTerminalFromCache","_initializeWebGLState","_requestRedrawViewport","value","observeDevicePixelDimensions","window","w","h","_setCanvasDevicePixelDimensions","onWindowChange","appendChild","_isAttached","document","body","contains","l","dispose","parentElement","removeChild","textureAtlas","_charAtlas","_refreshCharAtlas","_clearModel","handleDevicePixelRatioChange","css","handleCharSizeChanged","handleBlur","pause","handleFocus","resume","handleSelectionChanged","start","end","columnSelectMode","update","handleCursorMove","restartBlinkAnimation","acquireTextureAtlas","getDisposeArrayDisposable","forwardEvent","warmUp","clearGlyphRenderer","clearTextureAtlas","clearTexture","reset","registerCharacterJoiner","handler","deregisterCharacterJoiner","joinerId","renderRows","handleGridChanged","_updateModel","isCursorVisible","options","cursorBlink","CursorBlinkStateManager","_requestRedrawCursor","row","line","joinedRanges","isJoined","lastCharX","range","j","clamp","cursorY","buffer","active","baseY","viewportRelativeCursorY","ydisp","cursorX","lastCursorX","isCursorInitialized","isCursorHidden","modelUpdated","lines","get","getJoinedCharacters","result","loadCell","shift","JoinedCellData","translateToString","getChars","getCode","resolve","getWidth","isFocused","cursorStyle","cursorInactiveStyle","cursorAccent","NULL_CELL_CHAR","ceil","lineHeight","round","letterSpacing","AttributeData","firstCell","content","combinedData","_width","isCombined","setFromCharData","getAsCharData","max","createShader","type","source","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","error","getShaderInfoLog","deleteShader","vertexSource","fragmentSource","program","attachShader","VERTEX_SHADER","FRAGMENT_SHADER","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","newLength","newArray","BaseRenderLayer","_container","id","zIndex","_alpha","_deviceCharWidth","_deviceCharHeight","_deviceCellWidth","_deviceCellHeight","_deviceCharLeft","_deviceCharTop","classList","add","toString","_initCanvas","remove","_ctx","alpha","_clearAll","startRow","endRow","_setTransparency","oldCanvas","cloneNode","replaceChild","colorSet","dim","_fillBottomLineAtCells","fillRect","clearRect","fillStyle","_clearCells","_fillCharTrueColor","font","_getFont","textBaseline","TEXT_BASELINE","_clipCell","fillText","beginPath","rect","clip","isBold","isItalic","fontWeightBold","fontWeight","fontSize","fontFamily","container","linkifier2","coreBrowserService","optionsService","themeService","onShowLinkUnderline","_handleShowLinkUnderline","onHideLinkUnderline","_handleHideLinkUnderline","_state","_clearCurrentLink","middleRowCount","y2","x2","INVERTED_DEFAULT_COLOR","is256Color","node","addEventListener","disposed","removeEventListener","$colors","$fg","$bg","$hasFg","$hasBg","$isSelected","$variantOffset","_optionService","_selectionRenderModel","deviceCellWidth","extended","underlineStyle","lineWidth","forEachDecorationAtCell","d","backgroundColorRGB","foregroundColorRGB","isCellSelected","blend","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","selectionForeground","treatGlyphAsBackgroundColor","charAtlasCache","deviceCellHeight","deviceCharWidth","deviceCharHeight","devicePixelRatio","newConfig","generateConfig","entry","ownedByIndex","ownedBy","indexOf","configEquals","config","splice","push","core","newEntry","unicodeService","index","clonedColors","NULL_COLOR","selectionBackgroundTransparent","selectionInactiveBackgroundTransparent","slice","contrastCache","halfContrastCache","customGlyphs","allowTransparency","drawBoldTextInBrightColors","minimumContrastRatio","colorCode","DIM_OPACITY","isFirefox","isLegacyEdge","_renderCallback","_restartInterval","isPaused","_blinkStartTimeout","_blinkInterval","clearInterval","_animationFrame","cancelAnimationFrame","_animationTimeRestarted","Date","now","requestAnimationFrame","timeToStart","BLINK_INTERVAL","time","setInterval","blockElementDefinitions","patternCharacterDefinitions","boxDrawingDefinitions","xp","yp","powerlineDefinitions","rightPadding","leftPadding","ctx","c","xOffset","yOffset","blockElementDefinition","charDefinition","box","xEighth","yEighth","drawBlockElementChar","patternDefinition","patternSet","cachedPatterns","Map","pattern","tmpCanvas","ownerDocument","tmpCtx","imageData","ImageData","startsWith","parseInt","substring","split","map","parseFloat","data","putImageData","createPattern","drawPatternChar","boxDrawingDefinition","strokeStyle","instructions","Object","entries","actualInstructions","Number","instruction","f","svgToCanvasInstructionMap","args","translateArgs","stroke","closePath","drawBoxDrawingChar","powerlineDefinition","clipRegion","Path2D","cssLineWidth","drawPowerlineChar","bezierCurveTo","lineTo","moveTo","cellWidth","cellHeight","doClamp","element","parentWindow","callback","observer","ResizeObserver","find","target","disconnect","devicePixelContentBoxSize","inlineSize","blockSize","observe","isPowerlineGlyph","codepoint","isEmoji","glyphSizeX","isNerdFontGlyph","isBoxOrBlockGlyph","currentOffset","SelectionRenderModel","hasSelection","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startCol","endCol","selectionStart","selectionEnd","viewportY","buffers","NULL_RASTERIZED_GLYPH","texturePosition","_pages","_document","_config","_unicodeService","_didWarmUp","_cacheMap","FourKeyMap","_cacheMapCombined","_activePages","_workBoundingBox","bottom","right","_workAttributeData","_textureSize","_requestClearModel","_createNewPage","_tmpCanvas","createCanvas","TMP_CANVAS_GLYPH_PADDING","_tmpCtx","willReadFrequently","page","_doWarmUp","queue","IdleTaskQueue","enqueue","DEFAULT_COLOR","DEFAULT_EXT","rasterizedGlyph","_drawToCache","currentRow","pagesBySize","filter","sort","percentageUsed","sameSizeI","mergingPages","sortedMergingPagesIndexes","glyphs","mergedPageIndex","mergedPage","_mergePages","_deletePage","newPage","AtlasPage","mergedSize","p","drawImage","pageIndex","adjustingPage","restrictToCellHeight","_getFromCacheMap","cacheMap","key","_getColorFromAnsiIndex","idx","_getBackgroundColor","bgColorMode","bgColor","arr","toColorRGB","channels","toColor","opaque","_getForegroundColor","fgColorMode","fgColor","bold","excludeFromContrastRatioDemands","minimumContrastColor","_getMinimumContrastColor","multiplyOpacity","_resolveBackgroundRgba","_resolveForegroundRgba","cache","_getContrastCache","adjustedColor","getColor","bgRgba","fgRgba","ensureContrastRatio","setColor","codeOrChars","String","fromCharCode","allowedWidth","allowedHeight","save","isInvisible","isInverse","isDim","italic","underline","isUnderline","strikethrough","isStrikethrough","overline","isOverline","getFgColor","getFgColorMode","getBgColor","getBgColorMode","temp","temp2","backgroundColor","globalCompositeOperation","fontStyle","powerlineGlyph","charCodeAt","restrictedPowerlineGlyph","isRestrictedPowerlineGlyph","foregroundColor","padding","customGlyph","tryDrawCustomChar","chWidth","enableClearThresholdCheck","wcwidth","getStringCellWidth","isUnderlineColorDefault","isUnderlineColorRGB","getUnderlineColor","join","xLeft","yTop","yMid","yBot","nextOffset","getUnderlineVariantOffset","xChLeft","xChRight","xChMid","yCurlyBot","yCurlyTop","offsetWidth","setLineDash","computeNextVariantOffset","lineRatio","gapRatio","xChWidth","gap","restore","metrics","measureText","actualBoundingBoxDescent","strokeText","isBeyondCellBounds","clearColor","getImageData","isEmpty","checkCompletelyTransparent","_findGlyphBoundingBox","activePage","activeRow","fixedRows","wasPageAndRowFound","candidatePage","addGlyph","boundingBox","restrictedGlyph","found","alphaOffset","_usedPixels","_glyphs","glyph","sourcePages","enableThresholdCheck","fgR","fgG","fgB","threshold","abs","rgb","toPaddedHex","s","contrastRatio","l1","l2","toCss","toRgba","opacity","toChannels","bgR","bgG","bgB","isOpaque","ratio","rgbaColor","factor","$ctx","$litmusColor","createLinearGradient","match","repeat","rgbaMatch","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","_listeners","_disposed","_event","listener","arg1","arg2","call","clearListeners","from","to","disposeArray","disposables","_disposables","_isDisposed","unregister","_value","TwoKeyMap","_data","first","second","third","fourth","isNode","process","userAgent","navigator","platform","includes","isSafari","test","majorVersion","isMac","isIpad","isIphone","isWindows","isLinux","isChromeOS","TaskQueue","_tasks","_i","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","bind","deadline","taskDuration","longestTask","lastDeadlineRemaining","timeRemaining","deadlineRemaining","PriorityTaskQueue","_createDeadline","identifier","duration","requestIdleCallback","cancelIdleCallback","_queue","ExtendedAttrs","fromColorRGB","clone","newObj","hasExtendedAttrs","isBlink","isProtected","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","updateExtended","underlineColor","getUnderlineColorMode","isUnderlineColorPalette","getUnderlineStyle","underlineVariantOffset","_urlId","_ext","urlId","val","fromCharData","obj","stringFromCodePoint","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","DEFAULT_ATTR","CHAR_DATA_CODE_INDEX","NULL_CELL_WIDTH","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","_interim","decode","input","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","missing","fourStop","optionsKeyToLogLevel","trace","LogLevelEnum","TRACE","debug","DEBUG","info","INFO","WARN","ERROR","off","OFF","traceLogger","LogService","logLevel","_logLevel","_updateLogLevel","onSpecificOptionChange","_evalLazyOptionalParams","optionalParams","_log","message","logger","IOptionsService","_target","descriptor","fn","apply","name","JSON","stringify","DI_TARGET","DI_DEPENDENCIES","serviceRegistry","ctor","has","decorator","arguments","storeServiceDependency","IBufferService","createDecorator","ICoreMouseService","ICoreService","ICharsetService","IInstantiationService","ILogService","IOscLinkService","IUnicodeService","IDecorationService","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","WebglAddon","_preserveDrawingBuffer","getSafariVersion","activate","onWillOpen","coreService","unsafeCore","renderService","_renderService","characterJoinerService","charSizeService","decorationService","logService","_logService","setTraceLogger","_renderer","setRenderer","_createRenderer"],"sourceRoot":""}
1
+ {"version":3,"file":"addon-webgl.js","mappings":"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","sources":["webpack://WebglAddon/webpack/universalModuleDefinition","webpack://WebglAddon/./src/GlyphRenderer.ts","webpack://WebglAddon/./src/RectangleRenderer.ts","webpack://WebglAddon/./src/RenderModel.ts","webpack://WebglAddon/./src/WebglRenderer.ts","webpack://WebglAddon/./src/WebglUtils.ts","webpack://WebglAddon/./src/renderLayer/BaseRenderLayer.ts","webpack://WebglAddon/./src/renderLayer/LinkRenderLayer.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CellColorResolver.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CharAtlasCache.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CharAtlasUtils.ts","webpack://WebglAddon/../../src/browser/renderer/shared/Constants.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CursorBlinkStateManager.ts","webpack://WebglAddon/../../src/browser/renderer/shared/CustomGlyphs.ts","webpack://WebglAddon/../../src/browser/renderer/shared/DevicePixelObserver.ts","webpack://WebglAddon/../../src/browser/renderer/shared/RendererUtils.ts","webpack://WebglAddon/../../src/browser/renderer/shared/SelectionRenderModel.ts","webpack://WebglAddon/../../src/browser/renderer/shared/TextureAtlas.ts","webpack://WebglAddon/../../src/common/Color.ts","webpack://WebglAddon/../../src/common/MultiKeyMap.ts","webpack://WebglAddon/../../src/common/Platform.ts","webpack://WebglAddon/../../src/common/TaskQueue.ts","webpack://WebglAddon/../../src/common/buffer/AttributeData.ts","webpack://WebglAddon/../../src/common/buffer/CellData.ts","webpack://WebglAddon/../../src/common/buffer/Constants.ts","webpack://WebglAddon/../../src/common/input/TextDecoder.ts","webpack://WebglAddon/../../src/common/services/LogService.ts","webpack://WebglAddon/../../src/common/services/ServiceRegistry.ts","webpack://WebglAddon/../../src/common/services/Services.ts","webpack://WebglAddon/../../out/vs/base/browser/browser.js","webpack://WebglAddon/../../out/vs/base/browser/canIUse.js","webpack://WebglAddon/../../out/vs/base/browser/dom.js","webpack://WebglAddon/../../out/vs/base/browser/iframe.js","webpack://WebglAddon/../../out/vs/base/browser/keyboardEvent.js","webpack://WebglAddon/../../out/vs/base/browser/mouseEvent.js","webpack://WebglAddon/../../out/vs/base/browser/window.js","webpack://WebglAddon/../../out/vs/base/common/arrays.js","webpack://WebglAddon/../../out/vs/base/common/arraysFind.js","webpack://WebglAddon/../../out/vs/base/common/async.js","webpack://WebglAddon/../../out/vs/base/common/cancellation.js","webpack://WebglAddon/../../out/vs/base/common/charCode.js","webpack://WebglAddon/../../out/vs/base/common/collections.js","webpack://WebglAddon/../../out/vs/base/common/errors.js","webpack://WebglAddon/../../out/vs/base/common/event.js","webpack://WebglAddon/../../out/vs/base/common/functional.js","webpack://WebglAddon/../../out/vs/base/common/hash.js","webpack://WebglAddon/../../out/vs/base/common/iterator.js","webpack://WebglAddon/../../out/vs/base/common/keyCodes.js","webpack://WebglAddon/../../out/vs/base/common/keybindings.js","webpack://WebglAddon/../../out/vs/base/common/lazy.js","webpack://WebglAddon/../../out/vs/base/common/lifecycle.js","webpack://WebglAddon/../../out/vs/base/common/linkedList.js","webpack://WebglAddon/../../out/vs/base/common/map.js","webpack://WebglAddon/../../out/vs/base/common/numbers.js","webpack://WebglAddon/../../out/vs/base/common/platform.js","webpack://WebglAddon/../../out/vs/base/common/stopwatch.js","webpack://WebglAddon/../../out/vs/base/common/strings.js","webpack://WebglAddon/../../out/vs/base/common/symbols.js","webpack://WebglAddon/../../out/vs/base/common/uint.js","webpack://WebglAddon/webpack/bootstrap","webpack://WebglAddon/./src/WebglAddon.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[\"WebglAddon\"] = factory();\n\telse\n\t\troot[\"WebglAddon\"] = factory();\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TextureAtlas } from 'browser/renderer/shared/TextureAtlas';\nimport { IRasterizedGlyph, IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { IOptionsService } from 'common/services/Services';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals}\n}`);\n}\n\nconst INDICES_PER_CELL = 11;\nconst BYTES_PER_CELL = INDICES_PER_CELL * Float32Array.BYTES_PER_ELEMENT;\nconst CELL_POSITION_INDICES = 2;\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages)));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n this._vertexArrayObject = gl.createVertexArray();\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n public beginFrame(): boolean {\n return this._atlas ? this._atlas.beginFrame() : true;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a once of for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + INDICES_PER_CELL - 1 - CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n gl.uniform2f(this._resolutionLocation, gl.canvas.width, gl.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed\n for (let i = 0; i < this._atlas.pages.length; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n gl.generateMipmap(gl.TEXTURE_2D);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RENDER_MODEL_BG_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n this._vertexArrayObject = gl.createVertexArray();\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RENDER_MODEL_INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RENDER_MODEL_BG_OFFSET];\n fg = model.cells[modelIndex + RENDER_MODEL_FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + 4) {\n vertices.attributes = expandFloat32Array(vertices.attributes, this._terminal.rows * this._terminal.cols * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const RENDER_MODEL_INDICIES_PER_CELL = 4;\nexport const RENDER_MODEL_BG_OFFSET = 1;\nexport const RENDER_MODEL_FG_OFFSET = 2;\nexport const RENDER_MODEL_EXT_OFFSET = 3;\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RENDER_MODEL_INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from 'browser/renderer/shared/CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from 'browser/renderer/shared/CharAtlasCache';\nimport { CursorBlinkStateManager } from 'browser/renderer/shared/CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from 'browser/renderer/shared/DevicePixelObserver';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { ICoreService, IDecorationService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RENDER_MODEL_BG_OFFSET, RENDER_MODEL_EXT_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL, RenderModel } from './RenderModel';\nimport { IWebGL2RenderingContext } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, Event } from 'vs/base/common/event';\nimport { addDisposableListener } from 'vs/base/browser/dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable<CursorBlinkStateManager> = new MutableDisposable();\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _workCell: ICellData = new CellData();\n private _workCell2: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable<RectangleRenderer> = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable<GlyphRenderer> = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter<HTMLCanvasElement>());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter<HTMLCanvasElement>());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter<HTMLCanvasElement>());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter<IRequestRedrawEvent>());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter<void>());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n console.log('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n console.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n console.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._coreBrowserService.window.document.body.contains(this._core.screenElement!);\n\n this._register(toDisposable(() => {\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n Event.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n Event.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return -1;\n }\n\n public deregisterCharacterJoiner(joinerId: number): boolean {\n return false;\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._coreBrowserService.window.document.body.contains(this._core.screenElement!) && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let lastCharX: number;\n let range: [number, number];\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n line = terminal.buffer.lines.get(row)!;\n this._model.lineLengths[y] = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0]) {\n isJoined = true;\n range = joinedRanges.shift()!;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RENDER_MODEL_INDICIES_PER_CELL;\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ?\n (terminal.options.cursorStyle || 'block') : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n (terminal.options.cursorStyle || 'block') === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RENDER_MODEL_BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RENDER_MODEL_FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RENDER_MODEL_EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RENDER_MODEL_BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RENDER_MODEL_FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RENDER_MODEL_EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x < lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RENDER_MODEL_INDICIES_PER_CELL;\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, 0, 0, 0, NULL_CELL_CHAR, 0, 0);\n this._model.cells[j] = NULL_CELL_CODE;\n this._model.cells[j + RENDER_MODEL_BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[j + RENDER_MODEL_FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[j + RENDER_MODEL_EXT_OFFSET] = this._cellColorResolver.result.ext;\n }\n }\n }\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The the size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may causes blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n this._requestRedrawViewport();\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n console.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n console.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from 'browser/renderer/shared/CharAtlasCache';\nimport { TEXT_BASELINE } from 'browser/renderer/shared/Constants';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from 'browser/renderer/shared/CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n","import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from 'browser/renderer/shared/TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { generateConfig, configEquals } from 'browser/renderer/shared/CharAtlasUtils';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required<ITerminalOptions>,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required<ITerminalOptions>, colors: ReadonlyColorSet, devicePixelRatio: number): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs: options.customGlyphs,\n devicePixelRatio,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from 'browser/services/Services';\n\n/**\n * The time between cursor blinks.\n */\nconst BLINK_INTERVAL = 600;\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this.restartBlinkAnimation();\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IBlockVector {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport const blockElementDefinitions: { [index: string]: IBlockVector[] | undefined } = {\n // Block elements (0x2580-0x2590)\n '▀': [{ x: 0, y: 0, w: 8, h: 4 }], // UPPER HALF BLOCK\n '▁': [{ x: 0, y: 7, w: 8, h: 1 }], // LOWER ONE EIGHTH BLOCK\n '▂': [{ x: 0, y: 6, w: 8, h: 2 }], // LOWER ONE QUARTER BLOCK\n '▃': [{ x: 0, y: 5, w: 8, h: 3 }], // LOWER THREE EIGHTHS BLOCK\n '▄': [{ x: 0, y: 4, w: 8, h: 4 }], // LOWER HALF BLOCK\n '▅': [{ x: 0, y: 3, w: 8, h: 5 }], // LOWER FIVE EIGHTHS BLOCK\n '▆': [{ x: 0, y: 2, w: 8, h: 6 }], // LOWER THREE QUARTERS BLOCK\n '▇': [{ x: 0, y: 1, w: 8, h: 7 }], // LOWER SEVEN EIGHTHS BLOCK\n '█': [{ x: 0, y: 0, w: 8, h: 8 }], // FULL BLOCK\n '▉': [{ x: 0, y: 0, w: 7, h: 8 }], // LEFT SEVEN EIGHTHS BLOCK\n '▊': [{ x: 0, y: 0, w: 6, h: 8 }], // LEFT THREE QUARTERS BLOCK\n '▋': [{ x: 0, y: 0, w: 5, h: 8 }], // LEFT FIVE EIGHTHS BLOCK\n '▌': [{ x: 0, y: 0, w: 4, h: 8 }], // LEFT HALF BLOCK\n '▍': [{ x: 0, y: 0, w: 3, h: 8 }], // LEFT THREE EIGHTHS BLOCK\n '▎': [{ x: 0, y: 0, w: 2, h: 8 }], // LEFT ONE QUARTER BLOCK\n '▏': [{ x: 0, y: 0, w: 1, h: 8 }], // LEFT ONE EIGHTH BLOCK\n '▐': [{ x: 4, y: 0, w: 4, h: 8 }], // RIGHT HALF BLOCK\n\n // Block elements (0x2594-0x2595)\n '▔': [{ x: 0, y: 0, w: 8, h: 1 }], // UPPER ONE EIGHTH BLOCK\n '▕': [{ x: 7, y: 0, w: 1, h: 8 }], // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (0x2596-0x259F)\n '▖': [{ x: 0, y: 4, w: 4, h: 4 }], // QUADRANT LOWER LEFT\n '▗': [{ x: 4, y: 4, w: 4, h: 4 }], // QUADRANT LOWER RIGHT\n '▘': [{ x: 0, y: 0, w: 4, h: 4 }], // QUADRANT UPPER LEFT\n '▙': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT\n '▚': [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }], // QUADRANT UPPER LEFT AND LOWER RIGHT\n '▛': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '▜': [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '▝': [{ x: 4, y: 0, w: 4, h: 4 }], // QUADRANT UPPER RIGHT\n '▞': [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT\n '▟': [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // VERTICAL ONE EIGHTH BLOCK-2 through VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB70}': [{ x: 1, y: 0, w: 1, h: 8 }],\n '\\u{1FB71}': [{ x: 2, y: 0, w: 1, h: 8 }],\n '\\u{1FB72}': [{ x: 3, y: 0, w: 1, h: 8 }],\n '\\u{1FB73}': [{ x: 4, y: 0, w: 1, h: 8 }],\n '\\u{1FB74}': [{ x: 5, y: 0, w: 1, h: 8 }],\n '\\u{1FB75}': [{ x: 6, y: 0, w: 1, h: 8 }],\n\n // HORIZONTAL ONE EIGHTH BLOCK-2 through HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': [{ x: 0, y: 1, w: 8, h: 1 }],\n '\\u{1FB77}': [{ x: 0, y: 2, w: 8, h: 1 }],\n '\\u{1FB78}': [{ x: 0, y: 3, w: 8, h: 1 }],\n '\\u{1FB79}': [{ x: 0, y: 4, w: 8, h: 1 }],\n '\\u{1FB7A}': [{ x: 0, y: 5, w: 8, h: 1 }],\n '\\u{1FB7B}': [{ x: 0, y: 6, w: 8, h: 1 }],\n\n // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7C}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7D}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7F}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n // UPPER AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n // HORIZONTAL ONE EIGHTH BLOCK-1358\n '\\u{1FB81}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n\n // UPPER ONE QUARTER BLOCK\n '\\u{1FB82}': [{ x: 0, y: 0, w: 8, h: 2 }],\n // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB83}': [{ x: 0, y: 0, w: 8, h: 3 }],\n // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB84}': [{ x: 0, y: 0, w: 8, h: 5 }],\n // UPPER THREE QUARTERS BLOCK\n '\\u{1FB85}': [{ x: 0, y: 0, w: 8, h: 6 }],\n // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB86}': [{ x: 0, y: 0, w: 8, h: 7 }],\n\n // RIGHT ONE QUARTER BLOCK\n '\\u{1FB87}': [{ x: 6, y: 0, w: 2, h: 8 }],\n // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB88}': [{ x: 5, y: 0, w: 3, h: 8 }],\n // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB89}': [{ x: 3, y: 0, w: 5, h: 8 }],\n // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8A}': [{ x: 2, y: 0, w: 6, h: 8 }],\n // RIGHT SEVEN EIGHTHS B0OCK\n '\\u{1FB8B}': [{ x: 1, y: 0, w: 7, h: 8 }],\n\n // CHECKER BOARD FILL\n '\\u{1FB95}': [\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ],\n // INVERSE CHECKER BOARD FILL\n '\\u{1FB96}': [\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ],\n // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n '\\u{1FB97}': [{ x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }]\n};\n\ntype PatternDefinition = number[][];\n\n/**\n * Defines the repeating pattern used by special characters, the pattern is made up of a 2d array of\n * pixel values to be filled (1) or not filled (0).\n */\nconst patternCharacterDefinitions: { [key: string]: PatternDefinition | undefined } = {\n // Shade characters (0x2591-0x2593)\n '░': [ // LIGHT SHADE (25%)\n [1, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 0]\n ],\n '▒': [ // MEDIUM SHADE (50%)\n [1, 0],\n [0, 0],\n [0, 1],\n [0, 0]\n ],\n '▓': [ // DARK SHADE (75%)\n [0, 1],\n [1, 1],\n [1, 0],\n [1, 1]\n ]\n};\n\nconst enum Shapes {\n /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nconst enum Style {\n NORMAL = 1,\n BOLD = 3\n}\n\n/**\n * @param xp The percentage of 15% of the x axis.\n * @param yp The percentage of 15% of the x axis on the y axis.\n */\ntype DrawFunctionDefinition = (xp: number, yp: number) => string;\n\n/**\n * This contains the definitions of all box drawing characters in the format of SVG paths (ie. the\n * svg d attribute).\n */\nexport const boxDrawingDefinitions: { [character: string]: { [fontWeight: number]: string | DrawFunctionDefinition } | undefined } = {\n // Uniform normal and bold\n '─': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT },\n '━': { [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '│': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM },\n '┃': { [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '┌': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM },\n '┏': { [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '┐': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM },\n '┓': { [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '└': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT },\n '┗': { [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '┘': { [Style.NORMAL]: Shapes.TOP_TO_LEFT },\n '┛': { [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '├': { [Style.NORMAL]: Shapes.T_RIGHT },\n '┣': { [Style.BOLD]: Shapes.T_RIGHT },\n '┤': { [Style.NORMAL]: Shapes.T_LEFT },\n '┫': { [Style.BOLD]: Shapes.T_LEFT },\n '┬': { [Style.NORMAL]: Shapes.T_BOTTOM },\n '┳': { [Style.BOLD]: Shapes.T_BOTTOM },\n '┴': { [Style.NORMAL]: Shapes.T_TOP },\n '┻': { [Style.BOLD]: Shapes.T_TOP },\n '┼': { [Style.NORMAL]: Shapes.CROSS },\n '╋': { [Style.BOLD]: Shapes.CROSS },\n '╴': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT },\n '╸': { [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '╵': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP },\n '╹': { [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '╶': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT },\n '╺': { [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '╷': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM },\n '╻': { [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n\n // Double border\n '═': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n '║': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n '╒': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n '╓': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1` },\n '╔': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n '╕': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}` },\n '╖': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1` },\n '╗': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1` },\n '╘': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}` },\n '╙': { [Style.NORMAL]: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n '╚': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0` },\n '╛': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}` },\n '╜': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0` },\n '╝': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0` },\n '╞': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n '╟': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5` },\n '╠': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n '╡': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}` },\n '╢': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n '╣': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0` },\n '╤': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1` },\n '╥': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1` },\n '╦': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n '╧': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n '╨': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n '╩': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n '╪': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n '╫': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n '╬': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n\n // Diagonal\n '╱': { [Style.NORMAL]: 'M1,0 L0,1' },\n '╲': { [Style.NORMAL]: 'M0,0 L1,1' },\n '╳': { [Style.NORMAL]: 'M1,0 L0,1 M0,0 L1,1' },\n\n // Mixed weight\n '╼': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '╽': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '╾': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '╿': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┍': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┎': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┑': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┒': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┕': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┖': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┙': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┚': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┝': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┞': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┟': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┠': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '┡': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '┢': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '┥': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┦': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┧': { [Style.NORMAL]: Shapes.TOP_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┨': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '┩': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '┪': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '┭': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┮': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┯': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '┰': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '┱': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '┲': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '┵': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┶': { [Style.NORMAL]: Shapes.TOP_TO_LEFT, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┷': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '┸': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '┹': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '┺': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '┽': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n '┾': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n '┿': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM, [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n '╀': { [Style.NORMAL]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n '╁': { [Style.NORMAL]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n '╂': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT, [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n '╃': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_LEFT },\n '╄': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM, [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n '╅': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT, [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n '╆': { [Style.NORMAL]: Shapes.TOP_TO_LEFT, [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n '╇': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM, [Style.BOLD]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}` },\n '╈': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP, [Style.BOLD]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}` },\n '╉': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT, [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}` },\n '╊': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT, [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}` },\n\n // Dashed\n '╌': { [Style.NORMAL]: Shapes.TWO_DASHES_HORIZONTAL },\n '╍': { [Style.BOLD]: Shapes.TWO_DASHES_HORIZONTAL },\n '┄': { [Style.NORMAL]: Shapes.THREE_DASHES_HORIZONTAL },\n '┅': { [Style.BOLD]: Shapes.THREE_DASHES_HORIZONTAL },\n '┈': { [Style.NORMAL]: Shapes.FOUR_DASHES_HORIZONTAL },\n '┉': { [Style.BOLD]: Shapes.FOUR_DASHES_HORIZONTAL },\n '╎': { [Style.NORMAL]: Shapes.TWO_DASHES_VERTICAL },\n '╏': { [Style.BOLD]: Shapes.TWO_DASHES_VERTICAL },\n '┆': { [Style.NORMAL]: Shapes.THREE_DASHES_VERTICAL },\n '┇': { [Style.BOLD]: Shapes.THREE_DASHES_VERTICAL },\n '┊': { [Style.NORMAL]: Shapes.FOUR_DASHES_VERTICAL },\n '┋': { [Style.BOLD]: Shapes.FOUR_DASHES_VERTICAL },\n\n // Curved\n '╭': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5` },\n '╮': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5` },\n '╯': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5` },\n '╰': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5` }\n};\n\ninterface IVectorShape {\n d: string;\n type: VectorType;\n leftPadding?: number;\n rightPadding?: number;\n}\n\nconst enum VectorType {\n FILL,\n STROKE\n}\n\n/**\n * This contains the definitions of the primarily used box drawing characters as vector shapes. The\n * reason these characters are defined specially is to avoid common problems if a user's font has\n * not been patched with powerline characters and also to get pixel perfect rendering as rendering\n * issues can occur around AA/SPAA.\n *\n * The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n * visible.\n *\n * Original symbols defined in https://github.com/powerline/fontpatcher\n */\nexport const powerlineDefinitions: { [index: string]: IVectorShape } = {\n // Git branch\n '\\u{E0A0}': { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: VectorType.FILL },\n // L N\n '\\u{E0A1}': { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: VectorType.FILL },\n // Lock\n '\\u{E0A2}': { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: VectorType.FILL },\n // Right triangle solid\n '\\u{E0B0}': { d: 'M0,0 L1,.5 L0,1', type: VectorType.FILL, rightPadding: 2 },\n // Right triangle line\n '\\u{E0B1}': { d: 'M-1,-.5 L1,.5 L-1,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Left triangle solid\n '\\u{E0B2}': { d: 'M1,0 L0,.5 L1,1', type: VectorType.FILL, leftPadding: 2 },\n // Left triangle line\n '\\u{E0B3}': { d: 'M2,-.5 L0,.5 L2,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Right semi-circle solid\n '\\u{E0B4}': { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: VectorType.FILL, rightPadding: 1 },\n // Right semi-circle line\n '\\u{E0B5}': { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: VectorType.STROKE, rightPadding: 1 },\n // Left semi-circle solid\n '\\u{E0B6}': { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: VectorType.FILL, leftPadding: 1 },\n // Left semi-circle line\n '\\u{E0B7}': { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: VectorType.STROKE, leftPadding: 1 },\n // Lower left triangle\n '\\u{E0B8}': { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: VectorType.FILL },\n // Backslash separator\n '\\u{E0B9}': { d: 'M-.5,-.5 L1.5,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Lower right triangle\n '\\u{E0BA}': { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: VectorType.FILL },\n // Upper left triangle\n '\\u{E0BC}': { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: VectorType.FILL },\n // Forward slash separator\n '\\u{E0BD}': { d: 'M1.5,-.5 L-.5,1.5', type: VectorType.STROKE, leftPadding: 1, rightPadding: 1 },\n // Upper right triangle\n '\\u{E0BE}': { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: VectorType.FILL }\n};\n// Forward slash separator redundant\npowerlineDefinitions['\\u{E0BB}'] = powerlineDefinitions['\\u{E0BD}'];\n// Backslash separator redundant\npowerlineDefinitions['\\u{E0BF}'] = powerlineDefinitions['\\u{E0B9}'];\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomChar(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number\n): boolean {\n const blockElementDefinition = blockElementDefinitions[c];\n if (blockElementDefinition) {\n drawBlockElementChar(ctx, blockElementDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n return true;\n }\n\n const patternDefinition = patternCharacterDefinitions[c];\n if (patternDefinition) {\n drawPatternChar(ctx, patternDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n return true;\n }\n\n const boxDrawingDefinition = boxDrawingDefinitions[c];\n if (boxDrawingDefinition) {\n drawBoxDrawingChar(ctx, boxDrawingDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight, devicePixelRatio);\n return true;\n }\n\n const powerlineDefinition = powerlineDefinitions[c];\n if (powerlineDefinition) {\n drawPowerlineChar(ctx, powerlineDefinition, xOffset, yOffset, deviceCellWidth, deviceCellHeight, fontSize, devicePixelRatio);\n return true;\n }\n\n return false;\n}\n\nfunction drawBlockElementChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: IBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\nconst cachedPatterns: Map<PatternDefinition, Map</* fillStyle */string, CanvasPattern>> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n const tmpCanvas = ctx.canvas.ownerDocument.createElement('canvas');\n tmpCanvas.width = width;\n tmpCanvas.height = height;\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\n/**\n * Draws the following box drawing characters by mapping a subset of SVG d attribute instructions to\n * canvas draw calls.\n *\n * Box styles: ┎┰┒┍┯┑╓╥╖╒╤╕ ┏┳┓┌┲┓┌┬┐┏┱┐\n * ┌─┬─┐ ┏━┳━┓ ╔═╦═╗ ┠╂┨┝┿┥╟╫╢╞╪╡ ┡╇┩├╊┫┢╈┪┣╉┤\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┖┸┚┕┷┙╙╨╜╘╧╛ └┴┘└┺┛┗┻┛┗┹┘\n * ├─┼─┤ ┣━╋━┫ ╠═╬═╣ ┏┱┐┌┲┓┌┬┐┌┬┐ ┏┳┓┌┮┓┌┬┐┏┭┐\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┡╃┤├╄┩├╆┪┢╅┤ ┞╀┦├┾┫┟╁┧┣┽┤\n * └─┴─┘ ┗━┻━┛ ╚═╩═╝ └┴┘└┴┘└┺┛┗┹┘ └┴┘└┶┛┗┻┛┗┵┘\n *\n * Other:\n * ╭─╮ ╲ ╱ ╷╻╎╏┆┇┊┋ ╺╾╴ ╌╌╌ ┄┄┄ ┈┈┈\n * │ │ ╳ ╽╿╎╏┆┇┊┋ ╶╼╸ ╍╍╍ ┅┅┅ ┉┉┉\n * ╰─╯ ╱ ╲ ╹╵╎╏┆┇┊┋\n *\n * All box drawing characters:\n * ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏\n * ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟\n * ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯\n * ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿\n * ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏\n * ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟\n * ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯\n * ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿\n *\n * ---\n *\n * Box drawing alignment tests: █\n * ▉\n * ╔══╦══╗ ┌──┬──┐ ╭──┬──╮ ╭──┬──╮ ┏━━┳━━┓ ┎┒┏┑ ╷ ╻ ┏┯┓ ┌┰┐ ▊ ╱╲╱╲╳╳╳\n * ║┌─╨─┐║ │╔═╧═╗│ │╒═╪═╕│ │╓─╁─╖│ ┃┌─╂─┐┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ ┝╋┥ ▋ ╲╱╲╱╳╳╳\n * ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╿ │┃ ┍╅╆┓ ╵ ╹ ┗┷┛ └┸┘ ▌ ╱╲╱╲╳╳╳\n * ╠╡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳\n * ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▎\n * ║└─╥─┘║ │╚═╤═╝│ │╘═╪═╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▏\n * ╚══╩══╝ └──┴──┘ ╰──┴──╯ ╰──┴──╯ ┗━━┻━━┛ └╌╌┘ ╎ ┗╍╍┛ ┋ ▁▂▃▄▅▆▇█\n *\n * Source: https://www.w3.org/2001/06/utf-8-test/UTF-8-demo.html\n */\nfunction drawBoxDrawingChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: { [fontWeight: number]: string | ((xp: number, yp: number) => string) },\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number\n): void {\n ctx.strokeStyle = ctx.fillStyle;\n for (const [fontWeight, instructions] of Object.entries(charDefinition)) {\n ctx.beginPath();\n ctx.lineWidth = devicePixelRatio * Number.parseInt(fontWeight);\n let actualInstructions: string;\n if (typeof instructions === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = instructions(xp, yp);\n } else {\n actualInstructions = instructions;\n }\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n console.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio));\n }\n ctx.stroke();\n ctx.closePath();\n }\n}\n\nfunction drawPowerlineChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: IVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n console.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ));\n }\n if (charDefinition.type === VectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: any } = {\n 'C': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]),\n 'L': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.lineTo(args[0], args[1]),\n 'M': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.moveTo(args[0], args[1])\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n // line at 100% devicePixelRatio\n if (doClamp && result[x] !== 0) {\n result[x] = clamp(Math.round(result[x] + 0.5) - 0.5, cellWidth, 0);\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n // line at 100% devicePixelRatio\n if (doClamp && result[y] !== 0) {\n result[y] = clamp(Math.round(result[y] + 0.5) - 0.5, cellHeight, 0);\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'vs/base/common/lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from 'browser/renderer/shared/Types';\n\nexport function throwIfFalsy<T>(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from 'browser/renderer/shared/Constants';\nimport { tryDrawCustomChar } from 'browser/renderer/shared/CustomGlyphs';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from 'browser/renderer/shared/Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap<number, number, number, number, IRasterizedGlyph> = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap<string, number, number, number, IRasterizedGlyph> = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transfered to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter<HTMLCanvasElement>();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter<HTMLCanvasElement>();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue();\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _requestClearModel = false;\n public beginFrame(): boolean {\n return this._requestClearModel;\n }\n\n public clearTexture(): void {\n if (this._pages[0].currentRow.x === 0 && this._pages[0].currentRow.y === 0) {\n return;\n }\n for (const page of this._pages) {\n page.clear();\n }\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a > b ? 1 : -1);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version++;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Request the model to be cleared to refresh all texture pages.\n this._requestClearModel = true;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version++;\n }\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap<string | number, number, number, number, IRasterizedGlyph>,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean = false\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor || undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean = false): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._textureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n customGlyph = tryDrawCustomChar(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.fontSize, this._config.devicePixelRatio);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTop = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yMid = yTop + lineWidth;\n const yBot = yTop + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n\n for (let i = 0; i < chWidth; i++) {\n this._tmpCtx.save();\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n const xChMid = xChLeft + this._config.deviceCellWidth / 2;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n this._tmpCtx.moveTo(xChLeft, yBot);\n this._tmpCtx.lineTo(xChRight, yBot);\n break;\n case UnderlineStyle.CURLY:\n // Choose the bezier top and bottom based on the device pixel ratio, the curly line is\n // made taller when the line width is as otherwise it's not very clear otherwise.\n const yCurlyBot = lineWidth <= 1 ? yBot : Math.ceil(padding + this._config.deviceCharHeight - lineWidth / 2) - yOffset;\n const yCurlyTop = lineWidth <= 1 ? yTop : Math.ceil(padding + this._config.deviceCharHeight + lineWidth / 2) - yOffset;\n // Clip the left and right edges of the underline such that it can be drawn just outside\n // the edge of the cell to ensure a continuous stroke when there are multiple underlined\n // glyphs adjacent to one another.\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n // Start 1/2 cell before and end 1/2 cells after to ensure a smooth curve with other\n // cells\n this._tmpCtx.moveTo(xChLeft - this._config.deviceCellWidth / 2, yMid);\n this._tmpCtx.bezierCurveTo(\n xChLeft - this._config.deviceCellWidth / 2, yCurlyTop,\n xChLeft, yCurlyTop,\n xChLeft, yMid\n );\n this._tmpCtx.bezierCurveTo(\n xChLeft, yCurlyBot,\n xChMid, yCurlyBot,\n xChMid, yMid\n );\n this._tmpCtx.bezierCurveTo(\n xChMid, yCurlyTop,\n xChRight, yCurlyTop,\n xChRight, yMid\n );\n this._tmpCtx.bezierCurveTo(\n xChRight, yCurlyBot,\n xChRight + this._config.deviceCellWidth / 2, yCurlyBot,\n xChRight + this._config.deviceCellWidth / 2, yMid\n );\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTop);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTop);\n this._tmpCtx.lineTo(xChRight, yTop);\n break;\n }\n this._tmpCtx.stroke();\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version++;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray<IRasterizedGlyph> { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Used to check whether the canvas of the atlas page has changed.\n */\n public version = 0;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n if (sourcePages) {\n for (const p of sourcePages) {\n this._glyphs.push(...p.glyphs);\n this._usedPixels += p._usedPixels;\n }\n }\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version++;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevent pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from 'common/Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1]);\n $g = parseInt(rgbaMatch[2]);\n $b = parseInt(rgbaMatch[3]);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The first relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap<TFirst extends string | number, TSecond extends string | number, TValue> {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap<TFirst extends string | number, TSecond extends string | number, TThird extends string | number, TFourth extends string | number, TValue> {\n private _data: TwoKeyMap<TFirst, TSecond, TwoKeyMap<TThird, TFourth, TValue>> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any)) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1]);\n}\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isNode } from 'common/Platform';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the mainthread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration = 0;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining = 0;\n while (this._i < this._tasks.length) {\n taskDuration = Date.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, Date.now might not be stable (changes on wall clock changes),\n // this is not an issue here as a clock change during a short running task is very unlikely\n // in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, Date.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = Date.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - Date.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = (!isNode && 'requestIdleCallback' in window) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor() {\n this._queue = new IdleTaskQueue();\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAttributeData, IColorRGB, IExtendedAttrs } from 'common/Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from 'common/buffer/Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\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 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 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 constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from 'common/buffer/Constants';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct aligment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.codepointMask;`\n * write: `content |= codepoint & Content.codepointMask;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indication whether a cell contains combined content\n * read: `isCombined = content & Content.isCombined;`\n * set: `content |= Content.isCombined;`\n * clear: `content &= ~Content.isCombined;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.hasContent)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.widthMask) >> Content.widthShift;`\n * `hasWidth = content & Content.widthMask;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.widthShift;`\n * write: `content |= (width << Content.widthShift) & Content.widthMask;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.widthShift;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint = 0;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos] & 0x3F) && pos < 4) {\n cp <<= 6;\n cp |= tmp;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from 'common/services/Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n\n // For trace logging, assume the latest created log service is valid\n traceLogger = this;\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n\nlet traceLogger: ILogService;\nexport function setTraceLogger(logger: ILogService): void {\n traceLogger = logger;\n}\n\n/**\n * A decorator that can be used to automatically log trace calls to the decorated function.\n */\nexport function traceCall(_target: any, key: string, descriptor: any): any {\n if (typeof descriptor.value !== 'function') {\n throw new Error('not supported');\n }\n const fnKey = 'value';\n const fn = descriptor.value;\n descriptor[fnKey] = function (...args: any[]) {\n // Early exit\n if (traceLogger.logLevel !== LogLevelEnum.TRACE) {\n return fn.apply(this, args);\n }\n\n traceLogger.trace(`GlyphRenderer#${fn.name}(${args.map(e => JSON.stringify(e)).join(', ')})`);\n const result = fn.apply(this, args);\n traceLogger.trace(`GlyphRenderer#${fn.name} return`, result);\n return result;\n };\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IServiceIdentifier } from 'common/services/Services';\n\nconst DI_TARGET = 'di$target';\nconst DI_DEPENDENCIES = 'di$dependencies';\n\nexport const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {\n return ctor[DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator<T>(id: string): IServiceIdentifier<T> {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator.toString = () => id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[DI_TARGET] === target) {\n (target as any)[DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[DI_TARGET] = target;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, type IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, IAttributeData, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IModes, IOscLinkData, IWindowOptions } from 'common/Types';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\nimport type { Emitter, Event } from 'vs/base/common/event';\n\nexport const IBufferService = createDecorator<IBufferService>('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: Event<{ cols: number, rows: number }>;\n onScroll: Event<number>;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');\nexport interface ICoreMouseService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the bowser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fullfill protocol and encoding restrictions.\n */\n triggerMouseEvent(event: ICoreMouseEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: Event<CoreMouseEventType>;\n\n /**\n * Human readable version of mouse events.\n */\n explainEvents(events: CoreMouseEventType): { [event: string]: boolean };\n}\n\nexport const ICoreService = createDecorator<ICoreService>('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n\n readonly onData: Event<string>;\n readonly onUserInput: Event<void>;\n readonly onBinary: Event<string>;\n readonly onRequestScrollToBottom: Event<void>;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator<ICharsetService>('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IServiceIdentifier<T> {\n (...args: any[]): void;\n type: T;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs<TFirst> : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService<T>(id: IServiceIdentifier<T>, instance: T): void;\n getService<T>(id: IServiceIdentifier<T>): T | undefined;\n createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator<ILogService>('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator<IOptionsService>('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required<ITerminalOptions>;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required<ITerminalOptions>;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: Event<keyof ITerminalOptions>;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange<T extends keyof ITerminalOptions>(key: T, listener: (arg1: Required<ITerminalOptions>[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n customGlyphs?: boolean;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n /** @deprecated No longer supported */\n fastScrollModifier?: 'none' | 'alt' | 'ctrl' | 'shift';\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsMode?: boolean;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n overviewRuler?: IOverviewRulerOptions;\n\n [key: string]: any;\n cancelEvents: boolean;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport const IOscLinkService = createDecorator<IOscLinkService>('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator<IUnicodeService>('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register an Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered, when activate version changed. */\n readonly onChange: Event<string>;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator<IDecorationService>('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator<IInternalDecoration>;\n readonly onDecorationRegistered: Event<IInternalDecoration>;\n readonly onDecorationRemoved: Event<IInternalDecoration>;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter<HTMLElement>;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAndroid = exports.isElectron = exports.isWebkitWebView = exports.isSafari = exports.isChrome = exports.isWebKit = exports.isFirefox = exports.onDidChangeFullscreen = exports.onDidChangeZoomLevel = void 0;\nexports.addMatchMediaChangeListener = addMatchMediaChangeListener;\nexports.setZoomLevel = setZoomLevel;\nexports.getZoomLevel = getZoomLevel;\nexports.getZoomFactor = getZoomFactor;\nexports.setZoomFactor = setZoomFactor;\nexports.setFullscreen = setFullscreen;\nexports.isFullscreen = isFullscreen;\nexports.isStandalone = isStandalone;\nexports.isWCOEnabled = isWCOEnabled;\nexports.getWCOBoundingRect = getWCOBoundingRect;\nconst window_1 = require(\"vs/base/browser/window\");\nconst event_1 = require(\"vs/base/common/event\");\nclass WindowManager {\n constructor() {\n // --- Zoom Level\n this.mapWindowIdToZoomLevel = new Map();\n this._onDidChangeZoomLevel = new event_1.Emitter();\n this.onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;\n // --- Zoom Factor\n this.mapWindowIdToZoomFactor = new Map();\n // --- Fullscreen\n this._onDidChangeFullscreen = new event_1.Emitter();\n this.onDidChangeFullscreen = this._onDidChangeFullscreen.event;\n this.mapWindowIdToFullScreen = new Map();\n }\n static { this.INSTANCE = new WindowManager(); }\n getZoomLevel(targetWindow) {\n return this.mapWindowIdToZoomLevel.get(this.getWindowId(targetWindow)) ?? 0;\n }\n setZoomLevel(zoomLevel, targetWindow) {\n if (this.getZoomLevel(targetWindow) === zoomLevel) {\n return;\n }\n const targetWindowId = this.getWindowId(targetWindow);\n this.mapWindowIdToZoomLevel.set(targetWindowId, zoomLevel);\n this._onDidChangeZoomLevel.fire(targetWindowId);\n }\n getZoomFactor(targetWindow) {\n return this.mapWindowIdToZoomFactor.get(this.getWindowId(targetWindow)) ?? 1;\n }\n setZoomFactor(zoomFactor, targetWindow) {\n this.mapWindowIdToZoomFactor.set(this.getWindowId(targetWindow), zoomFactor);\n }\n setFullscreen(fullscreen, targetWindow) {\n if (this.isFullscreen(targetWindow) === fullscreen) {\n return;\n }\n const windowId = this.getWindowId(targetWindow);\n this.mapWindowIdToFullScreen.set(windowId, fullscreen);\n this._onDidChangeFullscreen.fire(windowId);\n }\n isFullscreen(targetWindow) {\n return !!this.mapWindowIdToFullScreen.get(this.getWindowId(targetWindow));\n }\n getWindowId(targetWindow) {\n return targetWindow.vscodeWindowId;\n }\n}\nfunction addMatchMediaChangeListener(targetWindow, query, callback) {\n if (typeof query === 'string') {\n query = targetWindow.matchMedia(query);\n }\n query.addEventListener('change', callback);\n}\n/** A zoom index, e.g. 1, 2, 3 */\nfunction setZoomLevel(zoomLevel, targetWindow) {\n WindowManager.INSTANCE.setZoomLevel(zoomLevel, targetWindow);\n}\nfunction getZoomLevel(targetWindow) {\n return WindowManager.INSTANCE.getZoomLevel(targetWindow);\n}\nexports.onDidChangeZoomLevel = WindowManager.INSTANCE.onDidChangeZoomLevel;\n/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */\nfunction getZoomFactor(targetWindow) {\n return WindowManager.INSTANCE.getZoomFactor(targetWindow);\n}\nfunction setZoomFactor(zoomFactor, targetWindow) {\n WindowManager.INSTANCE.setZoomFactor(zoomFactor, targetWindow);\n}\nfunction setFullscreen(fullscreen, targetWindow) {\n WindowManager.INSTANCE.setFullscreen(fullscreen, targetWindow);\n}\nfunction isFullscreen(targetWindow) {\n return WindowManager.INSTANCE.isFullscreen(targetWindow);\n}\nexports.onDidChangeFullscreen = WindowManager.INSTANCE.onDidChangeFullscreen;\nconst userAgent = typeof navigator === 'object' ? navigator.userAgent : '';\nexports.isFirefox = (userAgent.indexOf('Firefox') >= 0);\nexports.isWebKit = (userAgent.indexOf('AppleWebKit') >= 0);\nexports.isChrome = (userAgent.indexOf('Chrome') >= 0);\nexports.isSafari = (!exports.isChrome && (userAgent.indexOf('Safari') >= 0));\nexports.isWebkitWebView = (!exports.isChrome && !exports.isSafari && exports.isWebKit);\nexports.isElectron = (userAgent.indexOf('Electron/') >= 0);\nexports.isAndroid = (userAgent.indexOf('Android') >= 0);\nlet standalone = false;\nif (typeof window_1.mainWindow.matchMedia === 'function') {\n const standaloneMatchMedia = window_1.mainWindow.matchMedia('(display-mode: standalone) or (display-mode: window-controls-overlay)');\n const fullScreenMatchMedia = window_1.mainWindow.matchMedia('(display-mode: fullscreen)');\n standalone = standaloneMatchMedia.matches;\n addMatchMediaChangeListener(window_1.mainWindow, standaloneMatchMedia, ({ matches }) => {\n // entering fullscreen would change standaloneMatchMedia.matches to false\n // if standalone is true (running as PWA) and entering fullscreen, skip this change\n if (standalone && fullScreenMatchMedia.matches) {\n return;\n }\n // otherwise update standalone (browser to PWA or PWA to browser)\n standalone = matches;\n });\n}\nfunction isStandalone() {\n return standalone;\n}\n// Visible means that the feature is enabled, not necessarily being rendered\n// e.g. visible is true even in fullscreen mode where the controls are hidden\n// See docs at https://developer.mozilla.org/en-US/docs/Web/API/WindowControlsOverlay/visible\nfunction isWCOEnabled() {\n return navigator?.windowControlsOverlay?.visible;\n}\n// Returns the bounding rect of the titlebar area if it is supported and defined\n// See docs at https://developer.mozilla.org/en-US/docs/Web/API/WindowControlsOverlay/getTitlebarAreaRect\nfunction getWCOBoundingRect() {\n return navigator?.windowControlsOverlay?.getTitlebarAreaRect();\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrowserFeatures = exports.KeyboardSupport = void 0;\nconst browser = __importStar(require(\"vs/base/browser/browser\"));\nconst window_1 = require(\"vs/base/browser/window\");\nconst platform = __importStar(require(\"vs/base/common/platform\"));\nvar KeyboardSupport;\n(function (KeyboardSupport) {\n KeyboardSupport[KeyboardSupport[\"Always\"] = 0] = \"Always\";\n KeyboardSupport[KeyboardSupport[\"FullScreen\"] = 1] = \"FullScreen\";\n KeyboardSupport[KeyboardSupport[\"None\"] = 2] = \"None\";\n})(KeyboardSupport || (exports.KeyboardSupport = KeyboardSupport = {}));\nconst safeNavigator = typeof navigator === 'object' ? navigator : {};\n/**\n * Browser feature we can support in current platform, browser and environment.\n */\nexports.BrowserFeatures = {\n clipboard: {\n writeText: (platform.isNative\n || (document.queryCommandSupported && document.queryCommandSupported('copy'))\n || !!(safeNavigator && safeNavigator.clipboard && safeNavigator.clipboard.writeText)),\n readText: (platform.isNative\n || !!(safeNavigator && safeNavigator.clipboard && safeNavigator.clipboard.readText))\n },\n keyboard: (() => {\n if (platform.isNative || browser.isStandalone()) {\n return KeyboardSupport.Always;\n }\n if (safeNavigator.keyboard || browser.isSafari) {\n return KeyboardSupport.FullScreen;\n }\n return KeyboardSupport.None;\n })(),\n // 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be\n // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast\n touch: 'ontouchstart' in window_1.mainWindow || safeNavigator.maxTouchPoints > 0,\n pointerEvents: window_1.mainWindow.PointerEvent && ('ontouchstart' in window_1.mainWindow || navigator.maxTouchPoints > 0)\n};\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SafeTriangle = exports.DragAndDropObserver = exports.ModifierKeyEmitter = exports.DetectedFullscreenMode = exports.Namespace = exports.EventHelper = exports.EventType = exports.sharedMutationObserver = exports.Dimension = exports.WindowIntervalTimer = exports.scheduleAtNextAnimationFrame = exports.runAtThisOrScheduleAtNextAnimationFrame = exports.WindowIdleValue = exports.addStandardDisposableGenericMouseUpListener = exports.addStandardDisposableGenericMouseDownListener = exports.addStandardDisposableListener = exports.onDidUnregisterWindow = exports.onWillUnregisterWindow = exports.onDidRegisterWindow = exports.hasWindow = exports.getWindowById = exports.getWindowId = exports.getWindowsCount = exports.getWindows = exports.getDocument = exports.getWindow = exports.registerWindow = void 0;\nexports.clearNode = clearNode;\nexports.clearNodeRecursively = clearNodeRecursively;\nexports.addDisposableListener = addDisposableListener;\nexports.addDisposableGenericMouseDownListener = addDisposableGenericMouseDownListener;\nexports.addDisposableGenericMouseMoveListener = addDisposableGenericMouseMoveListener;\nexports.addDisposableGenericMouseUpListener = addDisposableGenericMouseUpListener;\nexports.runWhenWindowIdle = runWhenWindowIdle;\nexports.disposableWindowInterval = disposableWindowInterval;\nexports.measure = measure;\nexports.modify = modify;\nexports.addDisposableThrottledListener = addDisposableThrottledListener;\nexports.getComputedStyle = getComputedStyle;\nexports.getClientArea = getClientArea;\nexports.getTopLeftOffset = getTopLeftOffset;\nexports.size = size;\nexports.position = position;\nexports.getDomNodePagePosition = getDomNodePagePosition;\nexports.getDomNodeZoomLevel = getDomNodeZoomLevel;\nexports.getTotalWidth = getTotalWidth;\nexports.getContentWidth = getContentWidth;\nexports.getTotalScrollWidth = getTotalScrollWidth;\nexports.getContentHeight = getContentHeight;\nexports.getTotalHeight = getTotalHeight;\nexports.getLargestChildWidth = getLargestChildWidth;\nexports.isAncestor = isAncestor;\nexports.setParentFlowTo = setParentFlowTo;\nexports.isAncestorUsingFlowTo = isAncestorUsingFlowTo;\nexports.findParentWithClass = findParentWithClass;\nexports.hasParentWithClass = hasParentWithClass;\nexports.isShadowRoot = isShadowRoot;\nexports.isInShadowDOM = isInShadowDOM;\nexports.getShadowRoot = getShadowRoot;\nexports.getActiveElement = getActiveElement;\nexports.isActiveElement = isActiveElement;\nexports.isAncestorOfActiveElement = isAncestorOfActiveElement;\nexports.isActiveDocument = isActiveDocument;\nexports.getActiveDocument = getActiveDocument;\nexports.getActiveWindow = getActiveWindow;\nexports.isGlobalStylesheet = isGlobalStylesheet;\nexports.createStyleSheet2 = createStyleSheet2;\nexports.createStyleSheet = createStyleSheet;\nexports.cloneGlobalStylesheets = cloneGlobalStylesheets;\nexports.createMetaElement = createMetaElement;\nexports.createLinkElement = createLinkElement;\nexports.createCSSRule = createCSSRule;\nexports.removeCSSRulesContainingSelector = removeCSSRulesContainingSelector;\nexports.isHTMLElement = isHTMLElement;\nexports.isHTMLAnchorElement = isHTMLAnchorElement;\nexports.isHTMLSpanElement = isHTMLSpanElement;\nexports.isHTMLTextAreaElement = isHTMLTextAreaElement;\nexports.isHTMLInputElement = isHTMLInputElement;\nexports.isHTMLButtonElement = isHTMLButtonElement;\nexports.isHTMLDivElement = isHTMLDivElement;\nexports.isSVGElement = isSVGElement;\nexports.isMouseEvent = isMouseEvent;\nexports.isKeyboardEvent = isKeyboardEvent;\nexports.isPointerEvent = isPointerEvent;\nexports.isDragEvent = isDragEvent;\nexports.isEventLike = isEventLike;\nexports.saveParentsScrollTop = saveParentsScrollTop;\nexports.restoreParentsScrollTop = restoreParentsScrollTop;\nexports.trackFocus = trackFocus;\nexports.after = after;\nexports.append = append;\nexports.prepend = prepend;\nexports.reset = reset;\nexports.$ = $;\nexports.join = join;\nexports.setVisibility = setVisibility;\nexports.show = show;\nexports.hide = hide;\nexports.removeTabIndexAndUpdateFocus = removeTabIndexAndUpdateFocus;\nexports.finalHandler = finalHandler;\nexports.domContentLoaded = domContentLoaded;\nexports.computeScreenAwareSize = computeScreenAwareSize;\nexports.windowOpenNoOpener = windowOpenNoOpener;\nexports.windowOpenPopup = windowOpenPopup;\nexports.windowOpenWithSuccess = windowOpenWithSuccess;\nexports.animate = animate;\nexports.asCSSPropertyValue = asCSSPropertyValue;\nexports.asCssValueWithDefault = asCssValueWithDefault;\nexports.detectFullscreen = detectFullscreen;\nexports.multibyteAwareBtoa = multibyteAwareBtoa;\nexports.getCookieValue = getCookieValue;\nexports.h = h;\nexports.svgElem = svgElem;\nexports.copyAttributes = copyAttributes;\nexports.trackAttributes = trackAttributes;\nconst browser = __importStar(require(\"vs/base/browser/browser\"));\nconst canIUse_1 = require(\"vs/base/browser/canIUse\");\nconst keyboardEvent_1 = require(\"vs/base/browser/keyboardEvent\");\nconst mouseEvent_1 = require(\"vs/base/browser/mouseEvent\");\nconst async_1 = require(\"vs/base/common/async\");\nconst errors_1 = require(\"vs/base/common/errors\");\nconst event = __importStar(require(\"vs/base/common/event\"));\nconst keyCodes_1 = require(\"vs/base/common/keyCodes\");\nconst lifecycle_1 = require(\"vs/base/common/lifecycle\");\nconst platform = __importStar(require(\"vs/base/common/platform\"));\nconst hash_1 = require(\"vs/base/common/hash\");\nconst window_1 = require(\"vs/base/browser/window\");\nconst numbers_1 = require(\"vs/base/common/numbers\");\n//# region Multi-Window Support Utilities\n_a = (function () {\n const windows = new Map();\n (0, window_1.ensureCodeWindow)(window_1.mainWindow, 1);\n const mainWindowRegistration = { window: window_1.mainWindow, disposables: new lifecycle_1.DisposableStore() };\n windows.set(window_1.mainWindow.vscodeWindowId, mainWindowRegistration);\n const onDidRegisterWindow = new event.Emitter();\n const onDidUnregisterWindow = new event.Emitter();\n const onWillUnregisterWindow = new event.Emitter();\n function getWindowById(windowId, fallbackToMain) {\n const window = typeof windowId === 'number' ? windows.get(windowId) : undefined;\n return window ?? (fallbackToMain ? mainWindowRegistration : undefined);\n }\n return {\n onDidRegisterWindow: onDidRegisterWindow.event,\n onWillUnregisterWindow: onWillUnregisterWindow.event,\n onDidUnregisterWindow: onDidUnregisterWindow.event,\n registerWindow(window) {\n if (windows.has(window.vscodeWindowId)) {\n return lifecycle_1.Disposable.None;\n }\n const disposables = new lifecycle_1.DisposableStore();\n const registeredWindow = {\n window,\n disposables: disposables.add(new lifecycle_1.DisposableStore())\n };\n windows.set(window.vscodeWindowId, registeredWindow);\n disposables.add((0, lifecycle_1.toDisposable)(() => {\n windows.delete(window.vscodeWindowId);\n onDidUnregisterWindow.fire(window);\n }));\n disposables.add(addDisposableListener(window, exports.EventType.BEFORE_UNLOAD, () => {\n onWillUnregisterWindow.fire(window);\n }));\n onDidRegisterWindow.fire(registeredWindow);\n return disposables;\n },\n getWindows() {\n return windows.values();\n },\n getWindowsCount() {\n return windows.size;\n },\n getWindowId(targetWindow) {\n return targetWindow.vscodeWindowId;\n },\n hasWindow(windowId) {\n return windows.has(windowId);\n },\n getWindowById,\n getWindow(e) {\n const candidateNode = e;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView.window;\n }\n const candidateEvent = e;\n if (candidateEvent?.view) {\n return candidateEvent.view.window;\n }\n return window_1.mainWindow;\n },\n getDocument(e) {\n const candidateNode = e;\n return (0, exports.getWindow)(candidateNode).document;\n }\n };\n})(), exports.registerWindow = _a.registerWindow, exports.getWindow = _a.getWindow, exports.getDocument = _a.getDocument, exports.getWindows = _a.getWindows, exports.getWindowsCount = _a.getWindowsCount, exports.getWindowId = _a.getWindowId, exports.getWindowById = _a.getWindowById, exports.hasWindow = _a.hasWindow, exports.onDidRegisterWindow = _a.onDidRegisterWindow, exports.onWillUnregisterWindow = _a.onWillUnregisterWindow, exports.onDidUnregisterWindow = _a.onDidUnregisterWindow;\n//#endregion\nfunction clearNode(node) {\n while (node.firstChild) {\n node.firstChild.remove();\n }\n}\nfunction clearNodeRecursively(domNode) {\n while (domNode.firstChild) {\n const element = domNode.firstChild;\n element.remove();\n clearNodeRecursively(element);\n }\n}\nclass DomListener {\n constructor(node, type, handler, options) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = (options || false);\n this._node.addEventListener(this._type, this._handler, this._options);\n }\n dispose() {\n if (!this._handler) {\n // Already disposed\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n // Prevent leakers from holding on to the dom or handler func\n this._node = null;\n this._handler = null;\n }\n}\nfunction addDisposableListener(node, type, handler, useCaptureOrOptions) {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\nfunction _wrapAsStandardMouseEvent(targetWindow, handler) {\n return function (e) {\n return handler(new mouseEvent_1.StandardMouseEvent(targetWindow, e));\n };\n}\nfunction _wrapAsStandardKeyboardEvent(handler) {\n return function (e) {\n return handler(new keyboardEvent_1.StandardKeyboardEvent(e));\n };\n}\nconst addStandardDisposableListener = function addStandardDisposableListener(node, type, handler, useCapture) {\n let wrapHandler = handler;\n if (type === 'click' || type === 'mousedown' || type === 'contextmenu') {\n wrapHandler = _wrapAsStandardMouseEvent((0, exports.getWindow)(node), handler);\n }\n else if (type === 'keydown' || type === 'keypress' || type === 'keyup') {\n wrapHandler = _wrapAsStandardKeyboardEvent(handler);\n }\n return addDisposableListener(node, type, wrapHandler, useCapture);\n};\nexports.addStandardDisposableListener = addStandardDisposableListener;\nconst addStandardDisposableGenericMouseDownListener = function addStandardDisposableListener(node, handler, useCapture) {\n const wrapHandler = _wrapAsStandardMouseEvent((0, exports.getWindow)(node), handler);\n return addDisposableGenericMouseDownListener(node, wrapHandler, useCapture);\n};\nexports.addStandardDisposableGenericMouseDownListener = addStandardDisposableGenericMouseDownListener;\nconst addStandardDisposableGenericMouseUpListener = function addStandardDisposableListener(node, handler, useCapture) {\n const wrapHandler = _wrapAsStandardMouseEvent((0, exports.getWindow)(node), handler);\n return addDisposableGenericMouseUpListener(node, wrapHandler, useCapture);\n};\nexports.addStandardDisposableGenericMouseUpListener = addStandardDisposableGenericMouseUpListener;\nfunction addDisposableGenericMouseDownListener(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && canIUse_1.BrowserFeatures.pointerEvents ? exports.EventType.POINTER_DOWN : exports.EventType.MOUSE_DOWN, handler, useCapture);\n}\nfunction addDisposableGenericMouseMoveListener(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && canIUse_1.BrowserFeatures.pointerEvents ? exports.EventType.POINTER_MOVE : exports.EventType.MOUSE_MOVE, handler, useCapture);\n}\nfunction addDisposableGenericMouseUpListener(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && canIUse_1.BrowserFeatures.pointerEvents ? exports.EventType.POINTER_UP : exports.EventType.MOUSE_UP, handler, useCapture);\n}\n/**\n * Execute the callback the next time the browser is idle, returning an\n * {@link IDisposable} that will cancel the callback when disposed. This wraps\n * [requestIdleCallback] so it will fallback to [setTimeout] if the environment\n * doesn't support it.\n *\n * @param targetWindow The window for which to run the idle callback\n * @param callback The callback to run when idle, this includes an\n * [IdleDeadline] that provides the time alloted for the idle callback by the\n * browser. Not respecting this deadline will result in a degraded user\n * experience.\n * @param timeout A timeout at which point to queue no longer wait for an idle\n * callback but queue it on the regular event loop (like setTimeout). Typically\n * this should not be used.\n *\n * [IdleDeadline]: https://developer.mozilla.org/en-US/docs/Web/API/IdleDeadline\n * [requestIdleCallback]: https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback\n * [setTimeout]: https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout\n */\nfunction runWhenWindowIdle(targetWindow, callback, timeout) {\n return (0, async_1._runWhenIdle)(targetWindow, callback, timeout);\n}\n/**\n * An implementation of the \"idle-until-urgent\"-strategy as introduced\n * here: https://philipwalton.com/articles/idle-until-urgent/\n */\nclass WindowIdleValue extends async_1.AbstractIdleValue {\n constructor(targetWindow, executor) {\n super(targetWindow, executor);\n }\n}\nexports.WindowIdleValue = WindowIdleValue;\nfunction disposableWindowInterval(targetWindow, handler, interval, iterations) {\n let iteration = 0;\n const timer = targetWindow.setInterval(() => {\n iteration++;\n if ((typeof iterations === 'number' && iteration >= iterations) || handler() === true) {\n disposable.dispose();\n }\n }, interval);\n const disposable = (0, lifecycle_1.toDisposable)(() => {\n targetWindow.clearInterval(timer);\n });\n return disposable;\n}\nclass WindowIntervalTimer extends async_1.IntervalTimer {\n /**\n *\n * @param node The optional node from which the target window is determined\n */\n constructor(node) {\n super();\n this.defaultTarget = node && (0, exports.getWindow)(node);\n }\n cancelAndSet(runner, interval, targetWindow) {\n return super.cancelAndSet(runner, interval, targetWindow ?? this.defaultTarget);\n }\n}\nexports.WindowIntervalTimer = WindowIntervalTimer;\nclass AnimationFrameQueueItem {\n constructor(runner, priority = 0) {\n this._runner = runner;\n this.priority = priority;\n this._canceled = false;\n }\n dispose() {\n this._canceled = true;\n }\n execute() {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n }\n catch (e) {\n (0, errors_1.onUnexpectedError)(e);\n }\n }\n // Sort by priority (largest to lowest)\n static sort(a, b) {\n return b.priority - a.priority;\n }\n}\n(function () {\n /**\n * The runners scheduled at the next animation frame\n */\n const NEXT_QUEUE = new Map();\n /**\n * The runners scheduled at the current animation frame\n */\n const CURRENT_QUEUE = new Map();\n /**\n * A flag to keep track if the native requestAnimationFrame was already called\n */\n const animFrameRequested = new Map();\n /**\n * A flag to indicate if currently handling a native requestAnimationFrame callback\n */\n const inAnimationFrameRunner = new Map();\n const animationFrameRunner = (targetWindowId) => {\n animFrameRequested.set(targetWindowId, false);\n const currentQueue = NEXT_QUEUE.get(targetWindowId) ?? [];\n CURRENT_QUEUE.set(targetWindowId, currentQueue);\n NEXT_QUEUE.set(targetWindowId, []);\n inAnimationFrameRunner.set(targetWindowId, true);\n while (currentQueue.length > 0) {\n currentQueue.sort(AnimationFrameQueueItem.sort);\n const top = currentQueue.shift();\n top.execute();\n }\n inAnimationFrameRunner.set(targetWindowId, false);\n };\n exports.scheduleAtNextAnimationFrame = (targetWindow, runner, priority = 0) => {\n const targetWindowId = (0, exports.getWindowId)(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n let nextQueue = NEXT_QUEUE.get(targetWindowId);\n if (!nextQueue) {\n nextQueue = [];\n NEXT_QUEUE.set(targetWindowId, nextQueue);\n }\n nextQueue.push(item);\n if (!animFrameRequested.get(targetWindowId)) {\n animFrameRequested.set(targetWindowId, true);\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindowId));\n }\n return item;\n };\n exports.runAtThisOrScheduleAtNextAnimationFrame = (targetWindow, runner, priority) => {\n const targetWindowId = (0, exports.getWindowId)(targetWindow);\n if (inAnimationFrameRunner.get(targetWindowId)) {\n const item = new AnimationFrameQueueItem(runner, priority);\n let currentQueue = CURRENT_QUEUE.get(targetWindowId);\n if (!currentQueue) {\n currentQueue = [];\n CURRENT_QUEUE.set(targetWindowId, currentQueue);\n }\n currentQueue.push(item);\n return item;\n }\n else {\n return (0, exports.scheduleAtNextAnimationFrame)(targetWindow, runner, priority);\n }\n };\n})();\nfunction measure(targetWindow, callback) {\n return (0, exports.scheduleAtNextAnimationFrame)(targetWindow, callback, 10000 /* must be early */);\n}\nfunction modify(targetWindow, callback) {\n return (0, exports.scheduleAtNextAnimationFrame)(targetWindow, callback, -10000 /* must be late */);\n}\nconst MINIMUM_TIME_MS = 8;\nconst DEFAULT_EVENT_MERGER = function (lastEvent, currentEvent) {\n return currentEvent;\n};\nclass TimeoutThrottledDomListener extends lifecycle_1.Disposable {\n constructor(node, type, handler, eventMerger = DEFAULT_EVENT_MERGER, minimumTimeMs = MINIMUM_TIME_MS) {\n super();\n let lastEvent = null;\n let lastHandlerTime = 0;\n const timeout = this._register(new async_1.TimeoutTimer());\n const invokeHandler = () => {\n lastHandlerTime = (new Date()).getTime();\n handler(lastEvent);\n lastEvent = null;\n };\n this._register(addDisposableListener(node, type, (e) => {\n lastEvent = eventMerger(lastEvent, e);\n const elapsedTime = (new Date()).getTime() - lastHandlerTime;\n if (elapsedTime >= minimumTimeMs) {\n timeout.cancel();\n invokeHandler();\n }\n else {\n timeout.setIfNotSet(invokeHandler, minimumTimeMs - elapsedTime);\n }\n }));\n }\n}\nfunction addDisposableThrottledListener(node, type, handler, eventMerger, minimumTimeMs) {\n return new TimeoutThrottledDomListener(node, type, handler, eventMerger, minimumTimeMs);\n}\nfunction getComputedStyle(el) {\n return (0, exports.getWindow)(el).getComputedStyle(el, null);\n}\nfunction getClientArea(element, fallback) {\n const elWindow = (0, exports.getWindow)(element);\n const elDocument = elWindow.document;\n // Try with DOM clientWidth / clientHeight\n if (element !== elDocument.body) {\n return new Dimension(element.clientWidth, element.clientHeight);\n }\n // If visual view port exits and it's on mobile, it should be used instead of window innerWidth / innerHeight, or document.body.clientWidth / document.body.clientHeight\n if (platform.isIOS && elWindow?.visualViewport) {\n return new Dimension(elWindow.visualViewport.width, elWindow.visualViewport.height);\n }\n // Try innerWidth / innerHeight\n if (elWindow?.innerWidth && elWindow.innerHeight) {\n return new Dimension(elWindow.innerWidth, elWindow.innerHeight);\n }\n // Try with document.body.clientWidth / document.body.clientHeight\n if (elDocument.body && elDocument.body.clientWidth && elDocument.body.clientHeight) {\n return new Dimension(elDocument.body.clientWidth, elDocument.body.clientHeight);\n }\n // Try with document.documentElement.clientWidth / document.documentElement.clientHeight\n if (elDocument.documentElement && elDocument.documentElement.clientWidth && elDocument.documentElement.clientHeight) {\n return new Dimension(elDocument.documentElement.clientWidth, elDocument.documentElement.clientHeight);\n }\n if (fallback) {\n return getClientArea(fallback);\n }\n throw new Error('Unable to figure out browser width and height');\n}\nclass SizeUtils {\n // Adapted from WinJS\n // Converts a CSS positioning string for the specified element to pixels.\n static convertToPixels(element, value) {\n return parseFloat(value) || 0;\n }\n static getDimension(element, cssPropertyName, jsPropertyName) {\n const computedStyle = getComputedStyle(element);\n const value = computedStyle ? computedStyle.getPropertyValue(cssPropertyName) : '0';\n return SizeUtils.convertToPixels(element, value);\n }\n static getBorderLeftWidth(element) {\n return SizeUtils.getDimension(element, 'border-left-width', 'borderLeftWidth');\n }\n static getBorderRightWidth(element) {\n return SizeUtils.getDimension(element, 'border-right-width', 'borderRightWidth');\n }\n static getBorderTopWidth(element) {\n return SizeUtils.getDimension(element, 'border-top-width', 'borderTopWidth');\n }\n static getBorderBottomWidth(element) {\n return SizeUtils.getDimension(element, 'border-bottom-width', 'borderBottomWidth');\n }\n static getPaddingLeft(element) {\n return SizeUtils.getDimension(element, 'padding-left', 'paddingLeft');\n }\n static getPaddingRight(element) {\n return SizeUtils.getDimension(element, 'padding-right', 'paddingRight');\n }\n static getPaddingTop(element) {\n return SizeUtils.getDimension(element, 'padding-top', 'paddingTop');\n }\n static getPaddingBottom(element) {\n return SizeUtils.getDimension(element, 'padding-bottom', 'paddingBottom');\n }\n static getMarginLeft(element) {\n return SizeUtils.getDimension(element, 'margin-left', 'marginLeft');\n }\n static getMarginTop(element) {\n return SizeUtils.getDimension(element, 'margin-top', 'marginTop');\n }\n static getMarginRight(element) {\n return SizeUtils.getDimension(element, 'margin-right', 'marginRight');\n }\n static getMarginBottom(element) {\n return SizeUtils.getDimension(element, 'margin-bottom', 'marginBottom');\n }\n}\nclass Dimension {\n static { this.None = new Dimension(0, 0); }\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n with(width = this.width, height = this.height) {\n if (width !== this.width || height !== this.height) {\n return new Dimension(width, height);\n }\n else {\n return this;\n }\n }\n static is(obj) {\n return typeof obj === 'object' && typeof obj.height === 'number' && typeof obj.width === 'number';\n }\n static lift(obj) {\n if (obj instanceof Dimension) {\n return obj;\n }\n else {\n return new Dimension(obj.width, obj.height);\n }\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return a.width === b.width && a.height === b.height;\n }\n}\nexports.Dimension = Dimension;\nfunction getTopLeftOffset(element) {\n // Adapted from WinJS.Utilities.getPosition\n // and added borders to the mix\n let offsetParent = element.offsetParent;\n let top = element.offsetTop;\n let left = element.offsetLeft;\n while ((element = element.parentNode) !== null\n && element !== element.ownerDocument.body\n && element !== element.ownerDocument.documentElement) {\n top -= element.scrollTop;\n const c = isShadowRoot(element) ? null : getComputedStyle(element);\n if (c) {\n left -= c.direction !== 'rtl' ? element.scrollLeft : -element.scrollLeft;\n }\n if (element === offsetParent) {\n left += SizeUtils.getBorderLeftWidth(element);\n top += SizeUtils.getBorderTopWidth(element);\n top += element.offsetTop;\n left += element.offsetLeft;\n offsetParent = element.offsetParent;\n }\n }\n return {\n left: left,\n top: top\n };\n}\nfunction size(element, width, height) {\n if (typeof width === 'number') {\n element.style.width = `${width}px`;\n }\n if (typeof height === 'number') {\n element.style.height = `${height}px`;\n }\n}\nfunction position(element, top, right, bottom, left, position = 'absolute') {\n if (typeof top === 'number') {\n element.style.top = `${top}px`;\n }\n if (typeof right === 'number') {\n element.style.right = `${right}px`;\n }\n if (typeof bottom === 'number') {\n element.style.bottom = `${bottom}px`;\n }\n if (typeof left === 'number') {\n element.style.left = `${left}px`;\n }\n element.style.position = position;\n}\n/**\n * Returns the position of a dom node relative to the entire page.\n */\nfunction getDomNodePagePosition(domNode) {\n const bb = domNode.getBoundingClientRect();\n const window = (0, exports.getWindow)(domNode);\n return {\n left: bb.left + window.scrollX,\n top: bb.top + window.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n/**\n * Returns the effective zoom on a given element before window zoom level is applied\n */\nfunction getDomNodeZoomLevel(domNode) {\n let testElement = domNode;\n let zoom = 1.0;\n do {\n const elementZoomLevel = getComputedStyle(testElement).zoom;\n if (elementZoomLevel !== null && elementZoomLevel !== undefined && elementZoomLevel !== '1') {\n zoom *= elementZoomLevel;\n }\n testElement = testElement.parentElement;\n } while (testElement !== null && testElement !== testElement.ownerDocument.documentElement);\n return zoom;\n}\n// Adapted from WinJS\n// Gets the width of the element, including margins.\nfunction getTotalWidth(element) {\n const margin = SizeUtils.getMarginLeft(element) + SizeUtils.getMarginRight(element);\n return element.offsetWidth + margin;\n}\nfunction getContentWidth(element) {\n const border = SizeUtils.getBorderLeftWidth(element) + SizeUtils.getBorderRightWidth(element);\n const padding = SizeUtils.getPaddingLeft(element) + SizeUtils.getPaddingRight(element);\n return element.offsetWidth - border - padding;\n}\nfunction getTotalScrollWidth(element) {\n const margin = SizeUtils.getMarginLeft(element) + SizeUtils.getMarginRight(element);\n return element.scrollWidth + margin;\n}\n// Adapted from WinJS\n// Gets the height of the content of the specified element. The content height does not include borders or padding.\nfunction getContentHeight(element) {\n const border = SizeUtils.getBorderTopWidth(element) + SizeUtils.getBorderBottomWidth(element);\n const padding = SizeUtils.getPaddingTop(element) + SizeUtils.getPaddingBottom(element);\n return element.offsetHeight - border - padding;\n}\n// Adapted from WinJS\n// Gets the height of the element, including its margins.\nfunction getTotalHeight(element) {\n const margin = SizeUtils.getMarginTop(element) + SizeUtils.getMarginBottom(element);\n return element.offsetHeight + margin;\n}\n// Gets the left coordinate of the specified element relative to the specified parent.\nfunction getRelativeLeft(element, parent) {\n if (element === null) {\n return 0;\n }\n const elementPosition = getTopLeftOffset(element);\n const parentPosition = getTopLeftOffset(parent);\n return elementPosition.left - parentPosition.left;\n}\nfunction getLargestChildWidth(parent, children) {\n const childWidths = children.map((child) => {\n return Math.max(getTotalScrollWidth(child), getTotalWidth(child)) + getRelativeLeft(child, parent) || 0;\n });\n const maxWidth = Math.max(...childWidths);\n return maxWidth;\n}\n// ----------------------------------------------------------------------------------------\nfunction isAncestor(testChild, testAncestor) {\n return Boolean(testAncestor?.contains(testChild));\n}\nconst parentFlowToDataKey = 'parentFlowToElementId';\n/**\n * Set an explicit parent to use for nodes that are not part of the\n * regular dom structure.\n */\nfunction setParentFlowTo(fromChildElement, toParentElement) {\n fromChildElement.dataset[parentFlowToDataKey] = toParentElement.id;\n}\nfunction getParentFlowToElement(node) {\n const flowToParentId = node.dataset[parentFlowToDataKey];\n if (typeof flowToParentId === 'string') {\n return node.ownerDocument.getElementById(flowToParentId);\n }\n return null;\n}\n/**\n * Check if `testAncestor` is an ancestor of `testChild`, observing the explicit\n * parents set by `setParentFlowTo`.\n */\nfunction isAncestorUsingFlowTo(testChild, testAncestor) {\n let node = testChild;\n while (node) {\n if (node === testAncestor) {\n return true;\n }\n if (isHTMLElement(node)) {\n const flowToParentElement = getParentFlowToElement(node);\n if (flowToParentElement) {\n node = flowToParentElement;\n continue;\n }\n }\n node = node.parentNode;\n }\n return false;\n}\nfunction findParentWithClass(node, clazz, stopAtClazzOrNode) {\n while (node && node.nodeType === node.ELEMENT_NODE) {\n if (node.classList.contains(clazz)) {\n return node;\n }\n if (stopAtClazzOrNode) {\n if (typeof stopAtClazzOrNode === 'string') {\n if (node.classList.contains(stopAtClazzOrNode)) {\n return null;\n }\n }\n else {\n if (node === stopAtClazzOrNode) {\n return null;\n }\n }\n }\n node = node.parentNode;\n }\n return null;\n}\nfunction hasParentWithClass(node, clazz, stopAtClazzOrNode) {\n return !!findParentWithClass(node, clazz, stopAtClazzOrNode);\n}\nfunction isShadowRoot(node) {\n return (node && !!node.host && !!node.mode);\n}\nfunction isInShadowDOM(domNode) {\n return !!getShadowRoot(domNode);\n}\nfunction getShadowRoot(domNode) {\n while (domNode.parentNode) {\n if (domNode === domNode.ownerDocument?.body) {\n // reached the body\n return null;\n }\n domNode = domNode.parentNode;\n }\n return isShadowRoot(domNode) ? domNode : null;\n}\n/**\n * Returns the active element across all child windows\n * based on document focus. Falls back to the main\n * window if no window has focus.\n */\nfunction getActiveElement() {\n let result = getActiveDocument().activeElement;\n while (result?.shadowRoot) {\n result = result.shadowRoot.activeElement;\n }\n return result;\n}\n/**\n * Returns true if the focused window active element matches\n * the provided element. Falls back to the main window if no\n * window has focus.\n */\nfunction isActiveElement(element) {\n return getActiveElement() === element;\n}\n/**\n * Returns true if the focused window active element is contained in\n * `ancestor`. Falls back to the main window if no window has focus.\n */\nfunction isAncestorOfActiveElement(ancestor) {\n return isAncestor(getActiveElement(), ancestor);\n}\n/**\n * Returns whether the element is in the active `document`. The active\n * document has focus or will be the main windows document.\n */\nfunction isActiveDocument(element) {\n return element.ownerDocument === getActiveDocument();\n}\n/**\n * Returns the active document across main and child windows.\n * Prefers the window with focus, otherwise falls back to\n * the main windows document.\n */\nfunction getActiveDocument() {\n if ((0, exports.getWindowsCount)() <= 1) {\n return window_1.mainWindow.document;\n }\n const documents = Array.from((0, exports.getWindows)()).map(({ window }) => window.document);\n return documents.find(doc => doc.hasFocus()) ?? window_1.mainWindow.document;\n}\n/**\n * Returns the active window across main and child windows.\n * Prefers the window with focus, otherwise falls back to\n * the main window.\n */\nfunction getActiveWindow() {\n const document = getActiveDocument();\n return (document.defaultView?.window ?? window_1.mainWindow);\n}\nconst globalStylesheets = new Map();\nfunction isGlobalStylesheet(node) {\n return globalStylesheets.has(node);\n}\n/**\n * A version of createStyleSheet which has a unified API to initialize/set the style content.\n */\nfunction createStyleSheet2() {\n return new WrappedStyleElement();\n}\nclass WrappedStyleElement {\n constructor() {\n this._currentCssStyle = '';\n this._styleSheet = undefined;\n }\n setStyle(cssStyle) {\n if (cssStyle === this._currentCssStyle) {\n return;\n }\n this._currentCssStyle = cssStyle;\n if (!this._styleSheet) {\n this._styleSheet = createStyleSheet(window_1.mainWindow.document.head, (s) => s.innerText = cssStyle);\n }\n else {\n this._styleSheet.innerText = cssStyle;\n }\n }\n dispose() {\n if (this._styleSheet) {\n this._styleSheet.remove();\n this._styleSheet = undefined;\n }\n }\n}\nfunction createStyleSheet(container = window_1.mainWindow.document.head, beforeAppend, disposableStore) {\n const style = document.createElement('style');\n style.type = 'text/css';\n style.media = 'screen';\n beforeAppend?.(style);\n container.appendChild(style);\n if (disposableStore) {\n disposableStore.add((0, lifecycle_1.toDisposable)(() => style.remove()));\n }\n // With <head> as container, the stylesheet becomes global and is tracked\n // to support auxiliary windows to clone the stylesheet.\n if (container === window_1.mainWindow.document.head) {\n const globalStylesheetClones = new Set();\n globalStylesheets.set(style, globalStylesheetClones);\n for (const { window: targetWindow, disposables } of (0, exports.getWindows)()) {\n if (targetWindow === window_1.mainWindow) {\n continue; // main window is already tracked\n }\n const cloneDisposable = disposables.add(cloneGlobalStyleSheet(style, globalStylesheetClones, targetWindow));\n disposableStore?.add(cloneDisposable);\n }\n }\n return style;\n}\nfunction cloneGlobalStylesheets(targetWindow) {\n const disposables = new lifecycle_1.DisposableStore();\n for (const [globalStylesheet, clonedGlobalStylesheets] of globalStylesheets) {\n disposables.add(cloneGlobalStyleSheet(globalStylesheet, clonedGlobalStylesheets, targetWindow));\n }\n return disposables;\n}\nfunction cloneGlobalStyleSheet(globalStylesheet, globalStylesheetClones, targetWindow) {\n const disposables = new lifecycle_1.DisposableStore();\n const clone = globalStylesheet.cloneNode(true);\n targetWindow.document.head.appendChild(clone);\n disposables.add((0, lifecycle_1.toDisposable)(() => clone.remove()));\n for (const rule of getDynamicStyleSheetRules(globalStylesheet)) {\n clone.sheet?.insertRule(rule.cssText, clone.sheet?.cssRules.length);\n }\n disposables.add(exports.sharedMutationObserver.observe(globalStylesheet, disposables, { childList: true })(() => {\n clone.textContent = globalStylesheet.textContent;\n }));\n globalStylesheetClones.add(clone);\n disposables.add((0, lifecycle_1.toDisposable)(() => globalStylesheetClones.delete(clone)));\n return disposables;\n}\nexports.sharedMutationObserver = new class {\n constructor() {\n this.mutationObservers = new Map();\n }\n observe(target, disposables, options) {\n let mutationObserversPerTarget = this.mutationObservers.get(target);\n if (!mutationObserversPerTarget) {\n mutationObserversPerTarget = new Map();\n this.mutationObservers.set(target, mutationObserversPerTarget);\n }\n const optionsHash = (0, hash_1.hash)(options);\n let mutationObserverPerOptions = mutationObserversPerTarget.get(optionsHash);\n if (!mutationObserverPerOptions) {\n const onDidMutate = new event.Emitter();\n const observer = new MutationObserver(mutations => onDidMutate.fire(mutations));\n observer.observe(target, options);\n const resolvedMutationObserverPerOptions = mutationObserverPerOptions = {\n users: 1,\n observer,\n onDidMutate: onDidMutate.event\n };\n disposables.add((0, lifecycle_1.toDisposable)(() => {\n resolvedMutationObserverPerOptions.users -= 1;\n if (resolvedMutationObserverPerOptions.users === 0) {\n onDidMutate.dispose();\n observer.disconnect();\n mutationObserversPerTarget?.delete(optionsHash);\n if (mutationObserversPerTarget?.size === 0) {\n this.mutationObservers.delete(target);\n }\n }\n }));\n mutationObserversPerTarget.set(optionsHash, mutationObserverPerOptions);\n }\n else {\n mutationObserverPerOptions.users += 1;\n }\n return mutationObserverPerOptions.onDidMutate;\n }\n};\nfunction createMetaElement(container = window_1.mainWindow.document.head) {\n return createHeadElement('meta', container);\n}\nfunction createLinkElement(container = window_1.mainWindow.document.head) {\n return createHeadElement('link', container);\n}\nfunction createHeadElement(tagName, container = window_1.mainWindow.document.head) {\n const element = document.createElement(tagName);\n container.appendChild(element);\n return element;\n}\nlet _sharedStyleSheet = null;\nfunction getSharedStyleSheet() {\n if (!_sharedStyleSheet) {\n _sharedStyleSheet = createStyleSheet();\n }\n return _sharedStyleSheet;\n}\nfunction getDynamicStyleSheetRules(style) {\n if (style?.sheet?.rules) {\n // Chrome, IE\n return style.sheet.rules;\n }\n if (style?.sheet?.cssRules) {\n // FF\n return style.sheet.cssRules;\n }\n return [];\n}\nfunction createCSSRule(selector, cssText, style = getSharedStyleSheet()) {\n if (!style || !cssText) {\n return;\n }\n style.sheet?.insertRule(`${selector} {${cssText}}`, 0);\n // Apply rule also to all cloned global stylesheets\n for (const clonedGlobalStylesheet of globalStylesheets.get(style) ?? []) {\n createCSSRule(selector, cssText, clonedGlobalStylesheet);\n }\n}\nfunction removeCSSRulesContainingSelector(ruleName, style = getSharedStyleSheet()) {\n if (!style) {\n return;\n }\n const rules = getDynamicStyleSheetRules(style);\n const toDelete = [];\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (isCSSStyleRule(rule) && rule.selectorText.indexOf(ruleName) !== -1) {\n toDelete.push(i);\n }\n }\n for (let i = toDelete.length - 1; i >= 0; i--) {\n style.sheet?.deleteRule(toDelete[i]);\n }\n // Remove rules also from all cloned global stylesheets\n for (const clonedGlobalStylesheet of globalStylesheets.get(style) ?? []) {\n removeCSSRulesContainingSelector(ruleName, clonedGlobalStylesheet);\n }\n}\nfunction isCSSStyleRule(rule) {\n return typeof rule.selectorText === 'string';\n}\nfunction isHTMLElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLElement || e instanceof (0, exports.getWindow)(e).HTMLElement;\n}\nfunction isHTMLAnchorElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLAnchorElement || e instanceof (0, exports.getWindow)(e).HTMLAnchorElement;\n}\nfunction isHTMLSpanElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLSpanElement || e instanceof (0, exports.getWindow)(e).HTMLSpanElement;\n}\nfunction isHTMLTextAreaElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLTextAreaElement || e instanceof (0, exports.getWindow)(e).HTMLTextAreaElement;\n}\nfunction isHTMLInputElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLInputElement || e instanceof (0, exports.getWindow)(e).HTMLInputElement;\n}\nfunction isHTMLButtonElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLButtonElement || e instanceof (0, exports.getWindow)(e).HTMLButtonElement;\n}\nfunction isHTMLDivElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLDivElement || e instanceof (0, exports.getWindow)(e).HTMLDivElement;\n}\nfunction isSVGElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof SVGElement || e instanceof (0, exports.getWindow)(e).SVGElement;\n}\nfunction isMouseEvent(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof MouseEvent || e instanceof (0, exports.getWindow)(e).MouseEvent;\n}\nfunction isKeyboardEvent(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof KeyboardEvent || e instanceof (0, exports.getWindow)(e).KeyboardEvent;\n}\nfunction isPointerEvent(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof PointerEvent || e instanceof (0, exports.getWindow)(e).PointerEvent;\n}\nfunction isDragEvent(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof DragEvent || e instanceof (0, exports.getWindow)(e).DragEvent;\n}\nexports.EventType = {\n // Mouse\n CLICK: 'click',\n AUXCLICK: 'auxclick',\n DBLCLICK: 'dblclick',\n MOUSE_UP: 'mouseup',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_MOVE: 'mousemove',\n MOUSE_OUT: 'mouseout',\n MOUSE_ENTER: 'mouseenter',\n MOUSE_LEAVE: 'mouseleave',\n MOUSE_WHEEL: 'wheel',\n POINTER_UP: 'pointerup',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_LEAVE: 'pointerleave',\n CONTEXT_MENU: 'contextmenu',\n WHEEL: 'wheel',\n // Keyboard\n KEY_DOWN: 'keydown',\n KEY_PRESS: 'keypress',\n KEY_UP: 'keyup',\n // HTML Document\n LOAD: 'load',\n BEFORE_UNLOAD: 'beforeunload',\n UNLOAD: 'unload',\n PAGE_SHOW: 'pageshow',\n PAGE_HIDE: 'pagehide',\n PASTE: 'paste',\n ABORT: 'abort',\n ERROR: 'error',\n RESIZE: 'resize',\n SCROLL: 'scroll',\n FULLSCREEN_CHANGE: 'fullscreenchange',\n WK_FULLSCREEN_CHANGE: 'webkitfullscreenchange',\n // Form\n SELECT: 'select',\n CHANGE: 'change',\n SUBMIT: 'submit',\n RESET: 'reset',\n FOCUS: 'focus',\n FOCUS_IN: 'focusin',\n FOCUS_OUT: 'focusout',\n BLUR: 'blur',\n INPUT: 'input',\n // Local Storage\n STORAGE: 'storage',\n // Drag\n DRAG_START: 'dragstart',\n DRAG: 'drag',\n DRAG_ENTER: 'dragenter',\n DRAG_LEAVE: 'dragleave',\n DRAG_OVER: 'dragover',\n DROP: 'drop',\n DRAG_END: 'dragend',\n // Animation\n ANIMATION_START: browser.isWebKit ? 'webkitAnimationStart' : 'animationstart',\n ANIMATION_END: browser.isWebKit ? 'webkitAnimationEnd' : 'animationend',\n ANIMATION_ITERATION: browser.isWebKit ? 'webkitAnimationIteration' : 'animationiteration'\n};\nfunction isEventLike(obj) {\n const candidate = obj;\n return !!(candidate && typeof candidate.preventDefault === 'function' && typeof candidate.stopPropagation === 'function');\n}\nexports.EventHelper = {\n stop: (e, cancelBubble) => {\n e.preventDefault();\n if (cancelBubble) {\n e.stopPropagation();\n }\n return e;\n }\n};\nfunction saveParentsScrollTop(node) {\n const r = [];\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n r[i] = node.scrollTop;\n node = node.parentNode;\n }\n return r;\n}\nfunction restoreParentsScrollTop(node, state) {\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n if (node.scrollTop !== state[i]) {\n node.scrollTop = state[i];\n }\n node = node.parentNode;\n }\n}\nclass FocusTracker extends lifecycle_1.Disposable {\n static hasFocusWithin(element) {\n if (isHTMLElement(element)) {\n const shadowRoot = getShadowRoot(element);\n const activeElement = (shadowRoot ? shadowRoot.activeElement : element.ownerDocument.activeElement);\n return isAncestor(activeElement, element);\n }\n else {\n const window = element;\n return isAncestor(window.document.activeElement, window.document);\n }\n }\n constructor(element) {\n super();\n this._onDidFocus = this._register(new event.Emitter());\n this.onDidFocus = this._onDidFocus.event;\n this._onDidBlur = this._register(new event.Emitter());\n this.onDidBlur = this._onDidBlur.event;\n let hasFocus = FocusTracker.hasFocusWithin(element);\n let loosingFocus = false;\n const onFocus = () => {\n loosingFocus = false;\n if (!hasFocus) {\n hasFocus = true;\n this._onDidFocus.fire();\n }\n };\n const onBlur = () => {\n if (hasFocus) {\n loosingFocus = true;\n (isHTMLElement(element) ? (0, exports.getWindow)(element) : element).setTimeout(() => {\n if (loosingFocus) {\n loosingFocus = false;\n hasFocus = false;\n this._onDidBlur.fire();\n }\n }, 0);\n }\n };\n this._refreshStateHandler = () => {\n const currentNodeHasFocus = FocusTracker.hasFocusWithin(element);\n if (currentNodeHasFocus !== hasFocus) {\n if (hasFocus) {\n onBlur();\n }\n else {\n onFocus();\n }\n }\n };\n this._register(addDisposableListener(element, exports.EventType.FOCUS, onFocus, true));\n this._register(addDisposableListener(element, exports.EventType.BLUR, onBlur, true));\n if (isHTMLElement(element)) {\n this._register(addDisposableListener(element, exports.EventType.FOCUS_IN, () => this._refreshStateHandler()));\n this._register(addDisposableListener(element, exports.EventType.FOCUS_OUT, () => this._refreshStateHandler()));\n }\n }\n refreshState() {\n this._refreshStateHandler();\n }\n}\n/**\n * Creates a new `IFocusTracker` instance that tracks focus changes on the given `element` and its descendants.\n *\n * @param element The `HTMLElement` or `Window` to track focus changes on.\n * @returns An `IFocusTracker` instance.\n */\nfunction trackFocus(element) {\n return new FocusTracker(element);\n}\nfunction after(sibling, child) {\n sibling.after(child);\n return child;\n}\nfunction append(parent, ...children) {\n parent.append(...children);\n if (children.length === 1 && typeof children[0] !== 'string') {\n return children[0];\n }\n}\nfunction prepend(parent, child) {\n parent.insertBefore(child, parent.firstChild);\n return child;\n}\n/**\n * Removes all children from `parent` and appends `children`\n */\nfunction reset(parent, ...children) {\n parent.innerText = '';\n append(parent, ...children);\n}\nconst SELECTOR_REGEX = /([\\w\\-]+)?(#([\\w\\-]+))?((\\.([\\w\\-]+))*)/;\nvar Namespace;\n(function (Namespace) {\n Namespace[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n Namespace[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n})(Namespace || (exports.Namespace = Namespace = {}));\nfunction _$(namespace, description, attrs, ...children) {\n const match = SELECTOR_REGEX.exec(description);\n if (!match) {\n throw new Error('Bad use of emmet');\n }\n const tagName = match[1] || 'div';\n let result;\n if (namespace !== Namespace.HTML) {\n result = document.createElementNS(namespace, tagName);\n }\n else {\n result = document.createElement(tagName);\n }\n if (match[3]) {\n result.id = match[3];\n }\n if (match[4]) {\n result.className = match[4].replace(/\\./g, ' ').trim();\n }\n if (attrs) {\n Object.entries(attrs).forEach(([name, value]) => {\n if (typeof value === 'undefined') {\n return;\n }\n if (/^on\\w+$/.test(name)) {\n result[name] = value;\n }\n else if (name === 'selected') {\n if (value) {\n result.setAttribute(name, 'true');\n }\n }\n else {\n result.setAttribute(name, value);\n }\n });\n }\n result.append(...children);\n return result;\n}\nfunction $(description, attrs, ...children) {\n return _$(Namespace.HTML, description, attrs, ...children);\n}\n$.SVG = function (description, attrs, ...children) {\n return _$(Namespace.SVG, description, attrs, ...children);\n};\nfunction join(nodes, separator) {\n const result = [];\n nodes.forEach((node, index) => {\n if (index > 0) {\n if (separator instanceof Node) {\n result.push(separator.cloneNode());\n }\n else {\n result.push(document.createTextNode(separator));\n }\n }\n result.push(node);\n });\n return result;\n}\nfunction setVisibility(visible, ...elements) {\n if (visible) {\n show(...elements);\n }\n else {\n hide(...elements);\n }\n}\nfunction show(...elements) {\n for (const element of elements) {\n element.style.display = '';\n element.removeAttribute('aria-hidden');\n }\n}\nfunction hide(...elements) {\n for (const element of elements) {\n element.style.display = 'none';\n element.setAttribute('aria-hidden', 'true');\n }\n}\nfunction findParentWithAttribute(node, attribute) {\n while (node && node.nodeType === node.ELEMENT_NODE) {\n if (isHTMLElement(node) && node.hasAttribute(attribute)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n}\nfunction removeTabIndexAndUpdateFocus(node) {\n if (!node || !node.hasAttribute('tabIndex')) {\n return;\n }\n // If we are the currently focused element and tabIndex is removed,\n // standard DOM behavior is to move focus to the <body> element. We\n // typically never want that, rather put focus to the closest element\n // in the hierarchy of the parent DOM nodes.\n if (node.ownerDocument.activeElement === node) {\n const parentFocusable = findParentWithAttribute(node.parentElement, 'tabIndex');\n parentFocusable?.focus();\n }\n node.removeAttribute('tabindex');\n}\nfunction finalHandler(fn) {\n return e => {\n e.preventDefault();\n e.stopPropagation();\n fn(e);\n };\n}\nfunction domContentLoaded(targetWindow) {\n return new Promise(resolve => {\n const readyState = targetWindow.document.readyState;\n if (readyState === 'complete' || (targetWindow.document && targetWindow.document.body !== null)) {\n resolve(undefined);\n }\n else {\n const listener = () => {\n targetWindow.window.removeEventListener('DOMContentLoaded', listener, false);\n resolve();\n };\n targetWindow.window.addEventListener('DOMContentLoaded', listener, false);\n }\n });\n}\n/**\n * Find a value usable for a dom node size such that the likelihood that it would be\n * displayed with constant screen pixels size is as high as possible.\n *\n * e.g. We would desire for the cursors to be 2px (CSS px) wide. Under a devicePixelRatio\n * of 1.25, the cursor will be 2.5 screen pixels wide. Depending on how the dom node aligns/\"snaps\"\n * with the screen pixels, it will sometimes be rendered with 2 screen pixels, and sometimes with 3 screen pixels.\n */\nfunction computeScreenAwareSize(window, cssPx) {\n const screenPx = window.devicePixelRatio * cssPx;\n return Math.max(1, Math.floor(screenPx)) / window.devicePixelRatio;\n}\n/**\n * Open safely a new window. This is the best way to do so, but you cannot tell\n * if the window was opened or if it was blocked by the browser's popup blocker.\n * If you want to tell if the browser blocked the new window, use {@link windowOpenWithSuccess}.\n *\n * See https://github.com/microsoft/monaco-editor/issues/601\n * To protect against malicious code in the linked site, particularly phishing attempts,\n * the window.opener should be set to null to prevent the linked site from having access\n * to change the location of the current page.\n * See https://mathiasbynens.github.io/rel-noopener/\n */\nfunction windowOpenNoOpener(url) {\n // By using 'noopener' in the `windowFeatures` argument, the newly created window will\n // not be able to use `window.opener` to reach back to the current page.\n // See https://stackoverflow.com/a/46958731\n // See https://developer.mozilla.org/en-US/docs/Web/API/Window/open#noopener\n // However, this also doesn't allow us to realize if the browser blocked\n // the creation of the window.\n window_1.mainWindow.open(url, '_blank', 'noopener');\n}\n/**\n * Open a new window in a popup. This is the best way to do so, but you cannot tell\n * if the window was opened or if it was blocked by the browser's popup blocker.\n * If you want to tell if the browser blocked the new window, use {@link windowOpenWithSuccess}.\n *\n * Note: this does not set {@link window.opener} to null. This is to allow the opened popup to\n * be able to use {@link window.close} to close itself. Because of this, you should only use\n * this function on urls that you trust.\n *\n * In otherwords, you should almost always use {@link windowOpenNoOpener} instead of this function.\n */\nconst popupWidth = 780, popupHeight = 640;\nfunction windowOpenPopup(url) {\n const left = Math.floor(window_1.mainWindow.screenLeft + window_1.mainWindow.innerWidth / 2 - popupWidth / 2);\n const top = Math.floor(window_1.mainWindow.screenTop + window_1.mainWindow.innerHeight / 2 - popupHeight / 2);\n window_1.mainWindow.open(url, '_blank', `width=${popupWidth},height=${popupHeight},top=${top},left=${left}`);\n}\n/**\n * Attempts to open a window and returns whether it succeeded. This technique is\n * not appropriate in certain contexts, like for example when the JS context is\n * executing inside a sandboxed iframe. If it is not necessary to know if the\n * browser blocked the new window, use {@link windowOpenNoOpener}.\n *\n * See https://github.com/microsoft/monaco-editor/issues/601\n * See https://github.com/microsoft/monaco-editor/issues/2474\n * See https://mathiasbynens.github.io/rel-noopener/\n *\n * @param url the url to open\n * @param noOpener whether or not to set the {@link window.opener} to null. You should leave the default\n * (true) unless you trust the url that is being opened.\n * @returns boolean indicating if the {@link window.open} call succeeded\n */\nfunction windowOpenWithSuccess(url, noOpener = true) {\n const newTab = window_1.mainWindow.open();\n if (newTab) {\n if (noOpener) {\n // see `windowOpenNoOpener` for details on why this is important\n newTab.opener = null;\n }\n newTab.location.href = url;\n return true;\n }\n return false;\n}\nfunction animate(targetWindow, fn) {\n const step = () => {\n fn();\n stepDisposable = (0, exports.scheduleAtNextAnimationFrame)(targetWindow, step);\n };\n let stepDisposable = (0, exports.scheduleAtNextAnimationFrame)(targetWindow, step);\n return (0, lifecycle_1.toDisposable)(() => stepDisposable.dispose());\n}\nfunction asCSSPropertyValue(value) {\n return `'${value.replace(/'/g, '%27')}'`;\n}\nfunction asCssValueWithDefault(cssPropertyValue, dflt) {\n if (cssPropertyValue !== undefined) {\n const variableMatch = cssPropertyValue.match(/^\\s*var\\((.+)\\)$/);\n if (variableMatch) {\n const varArguments = variableMatch[1].split(',', 2);\n if (varArguments.length === 2) {\n dflt = asCssValueWithDefault(varArguments[1].trim(), dflt);\n }\n return `var(${varArguments[0]}, ${dflt})`;\n }\n return cssPropertyValue;\n }\n return dflt;\n}\nvar DetectedFullscreenMode;\n(function (DetectedFullscreenMode) {\n /**\n * The document is fullscreen, e.g. because an element\n * in the document requested to be fullscreen.\n */\n DetectedFullscreenMode[DetectedFullscreenMode[\"DOCUMENT\"] = 1] = \"DOCUMENT\";\n /**\n * The browser is fullscreen, e.g. because the user enabled\n * native window fullscreen for it.\n */\n DetectedFullscreenMode[DetectedFullscreenMode[\"BROWSER\"] = 2] = \"BROWSER\";\n})(DetectedFullscreenMode || (exports.DetectedFullscreenMode = DetectedFullscreenMode = {}));\nfunction detectFullscreen(targetWindow) {\n // Browser fullscreen: use DOM APIs to detect\n if (targetWindow.document.fullscreenElement || targetWindow.document.webkitFullscreenElement || targetWindow.document.webkitIsFullScreen) {\n return { mode: DetectedFullscreenMode.DOCUMENT, guess: false };\n }\n // There is no standard way to figure out if the browser\n // is using native fullscreen. Via checking on screen\n // height and comparing that to window height, we can guess\n // it though.\n if (targetWindow.innerHeight === targetWindow.screen.height) {\n // if the height of the window matches the screen height, we can\n // safely assume that the browser is fullscreen because no browser\n // chrome is taking height away (e.g. like toolbars).\n return { mode: DetectedFullscreenMode.BROWSER, guess: false };\n }\n if (platform.isMacintosh || platform.isLinux) {\n // macOS and Linux do not properly report `innerHeight`, only Windows does\n if (targetWindow.outerHeight === targetWindow.screen.height && targetWindow.outerWidth === targetWindow.screen.width) {\n // if the height of the browser matches the screen height, we can\n // only guess that we are in fullscreen. It is also possible that\n // the user has turned off taskbars in the OS and the browser is\n // simply able to span the entire size of the screen.\n return { mode: DetectedFullscreenMode.BROWSER, guess: true };\n }\n }\n // Not in fullscreen\n return null;\n}\n/**\n * Convert a Unicode string to a string in which each 16-bit unit occupies only one byte\n *\n * From https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa\n */\nfunction toBinary(str) {\n const codeUnits = new Uint16Array(str.length);\n for (let i = 0; i < codeUnits.length; i++) {\n codeUnits[i] = str.charCodeAt(i);\n }\n let binary = '';\n const uint8array = new Uint8Array(codeUnits.buffer);\n for (let i = 0; i < uint8array.length; i++) {\n binary += String.fromCharCode(uint8array[i]);\n }\n return binary;\n}\n/**\n * Version of the global `btoa` function that handles multi-byte characters instead\n * of throwing an exception.\n */\nfunction multibyteAwareBtoa(str) {\n return btoa(toBinary(str));\n}\nclass ModifierKeyEmitter extends event.Emitter {\n constructor() {\n super();\n this._subscriptions = new lifecycle_1.DisposableStore();\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n this._subscriptions.add(event.Event.runAndSubscribe(exports.onDidRegisterWindow, ({ window, disposables }) => this.registerListeners(window, disposables), { window: window_1.mainWindow, disposables: this._subscriptions }));\n }\n registerListeners(window, disposables) {\n disposables.add(addDisposableListener(window, 'keydown', e => {\n if (e.defaultPrevented) {\n return;\n }\n const event = new keyboardEvent_1.StandardKeyboardEvent(e);\n // If Alt-key keydown event is repeated, ignore it #112347\n // Only known to be necessary for Alt-Key at the moment #115810\n if (event.keyCode === keyCodes_1.KeyCode.Alt && e.repeat) {\n return;\n }\n if (e.altKey && !this._keyStatus.altKey) {\n this._keyStatus.lastKeyPressed = 'alt';\n }\n else if (e.ctrlKey && !this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyPressed = 'ctrl';\n }\n else if (e.metaKey && !this._keyStatus.metaKey) {\n this._keyStatus.lastKeyPressed = 'meta';\n }\n else if (e.shiftKey && !this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyPressed = 'shift';\n }\n else if (event.keyCode !== keyCodes_1.KeyCode.Alt) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n else {\n return;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyPressed) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }, true));\n disposables.add(addDisposableListener(window, 'keyup', e => {\n if (e.defaultPrevented) {\n return;\n }\n if (!e.altKey && this._keyStatus.altKey) {\n this._keyStatus.lastKeyReleased = 'alt';\n }\n else if (!e.ctrlKey && this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyReleased = 'ctrl';\n }\n else if (!e.metaKey && this._keyStatus.metaKey) {\n this._keyStatus.lastKeyReleased = 'meta';\n }\n else if (!e.shiftKey && this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyReleased = 'shift';\n }\n else {\n this._keyStatus.lastKeyReleased = undefined;\n }\n if (this._keyStatus.lastKeyPressed !== this._keyStatus.lastKeyReleased) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyReleased) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }, true));\n disposables.add(addDisposableListener(window.document.body, 'mousedown', () => {\n this._keyStatus.lastKeyPressed = undefined;\n }, true));\n disposables.add(addDisposableListener(window.document.body, 'mouseup', () => {\n this._keyStatus.lastKeyPressed = undefined;\n }, true));\n disposables.add(addDisposableListener(window.document.body, 'mousemove', e => {\n if (e.buttons) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n }, true));\n disposables.add(addDisposableListener(window, 'blur', () => {\n this.resetKeyStatus();\n }));\n }\n get keyStatus() {\n return this._keyStatus;\n }\n get isModifierPressed() {\n return this._keyStatus.altKey || this._keyStatus.ctrlKey || this._keyStatus.metaKey || this._keyStatus.shiftKey;\n }\n /**\n * Allows to explicitly reset the key status based on more knowledge (#109062)\n */\n resetKeyStatus() {\n this.doResetKeyStatus();\n this.fire(this._keyStatus);\n }\n doResetKeyStatus() {\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n }\n static getInstance() {\n if (!ModifierKeyEmitter.instance) {\n ModifierKeyEmitter.instance = new ModifierKeyEmitter();\n }\n return ModifierKeyEmitter.instance;\n }\n dispose() {\n super.dispose();\n this._subscriptions.dispose();\n }\n}\nexports.ModifierKeyEmitter = ModifierKeyEmitter;\nfunction getCookieValue(name) {\n const match = document.cookie.match('(^|[^;]+)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)'); // See https://stackoverflow.com/a/25490531\n return match ? match.pop() : undefined;\n}\nclass DragAndDropObserver extends lifecycle_1.Disposable {\n constructor(element, callbacks) {\n super();\n this.element = element;\n this.callbacks = callbacks;\n // A helper to fix issues with repeated DRAG_ENTER / DRAG_LEAVE\n // calls see https://github.com/microsoft/vscode/issues/14470\n // when the element has child elements where the events are fired\n // repeadedly.\n this.counter = 0;\n // Allows to measure the duration of the drag operation.\n this.dragStartTime = 0;\n this.registerListeners();\n }\n registerListeners() {\n if (this.callbacks.onDragStart) {\n this._register(addDisposableListener(this.element, exports.EventType.DRAG_START, (e) => {\n this.callbacks.onDragStart?.(e);\n }));\n }\n if (this.callbacks.onDrag) {\n this._register(addDisposableListener(this.element, exports.EventType.DRAG, (e) => {\n this.callbacks.onDrag?.(e);\n }));\n }\n this._register(addDisposableListener(this.element, exports.EventType.DRAG_ENTER, (e) => {\n this.counter++;\n this.dragStartTime = e.timeStamp;\n this.callbacks.onDragEnter?.(e);\n }));\n this._register(addDisposableListener(this.element, exports.EventType.DRAG_OVER, (e) => {\n e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\n this.callbacks.onDragOver?.(e, e.timeStamp - this.dragStartTime);\n }));\n this._register(addDisposableListener(this.element, exports.EventType.DRAG_LEAVE, (e) => {\n this.counter--;\n if (this.counter === 0) {\n this.dragStartTime = 0;\n this.callbacks.onDragLeave?.(e);\n }\n }));\n this._register(addDisposableListener(this.element, exports.EventType.DRAG_END, (e) => {\n this.counter = 0;\n this.dragStartTime = 0;\n this.callbacks.onDragEnd?.(e);\n }));\n this._register(addDisposableListener(this.element, exports.EventType.DROP, (e) => {\n this.counter = 0;\n this.dragStartTime = 0;\n this.callbacks.onDrop?.(e);\n }));\n }\n}\nexports.DragAndDropObserver = DragAndDropObserver;\nconst H_REGEX = /(?<tag>[\\w\\-]+)?(?:#(?<id>[\\w\\-]+))?(?<class>(?:\\.(?:[\\w\\-]+))*)(?:@(?<name>(?:[\\w\\_])+))?/;\nfunction h(tag, ...args) {\n let attributes;\n let children;\n if (Array.isArray(args[0])) {\n attributes = {};\n children = args[0];\n }\n else {\n attributes = args[0] || {};\n children = args[1];\n }\n const match = H_REGEX.exec(tag);\n if (!match || !match.groups) {\n throw new Error('Bad use of h');\n }\n const tagName = match.groups['tag'] || 'div';\n const el = document.createElement(tagName);\n if (match.groups['id']) {\n el.id = match.groups['id'];\n }\n const classNames = [];\n if (match.groups['class']) {\n for (const className of match.groups['class'].split('.')) {\n if (className !== '') {\n classNames.push(className);\n }\n }\n }\n if (attributes.className !== undefined) {\n for (const className of attributes.className.split('.')) {\n if (className !== '') {\n classNames.push(className);\n }\n }\n }\n if (classNames.length > 0) {\n el.className = classNames.join(' ');\n }\n const result = {};\n if (match.groups['name']) {\n result[match.groups['name']] = el;\n }\n if (children) {\n for (const c of children) {\n if (isHTMLElement(c)) {\n el.appendChild(c);\n }\n else if (typeof c === 'string') {\n el.append(c);\n }\n else if ('root' in c) {\n Object.assign(result, c);\n el.appendChild(c.root);\n }\n }\n }\n for (const [key, value] of Object.entries(attributes)) {\n if (key === 'className') {\n continue;\n }\n else if (key === 'style') {\n for (const [cssKey, cssValue] of Object.entries(value)) {\n el.style.setProperty(camelCaseToHyphenCase(cssKey), typeof cssValue === 'number' ? cssValue + 'px' : '' + cssValue);\n }\n }\n else if (key === 'tabIndex') {\n el.tabIndex = value;\n }\n else {\n el.setAttribute(camelCaseToHyphenCase(key), value.toString());\n }\n }\n result['root'] = el;\n return result;\n}\nfunction svgElem(tag, ...args) {\n let attributes;\n let children;\n if (Array.isArray(args[0])) {\n attributes = {};\n children = args[0];\n }\n else {\n attributes = args[0] || {};\n children = args[1];\n }\n const match = H_REGEX.exec(tag);\n if (!match || !match.groups) {\n throw new Error('Bad use of h');\n }\n const tagName = match.groups['tag'] || 'div';\n const el = document.createElementNS('http://www.w3.org/2000/svg', tagName);\n if (match.groups['id']) {\n el.id = match.groups['id'];\n }\n const classNames = [];\n if (match.groups['class']) {\n for (const className of match.groups['class'].split('.')) {\n if (className !== '') {\n classNames.push(className);\n }\n }\n }\n if (attributes.className !== undefined) {\n for (const className of attributes.className.split('.')) {\n if (className !== '') {\n classNames.push(className);\n }\n }\n }\n if (classNames.length > 0) {\n el.className = classNames.join(' ');\n }\n const result = {};\n if (match.groups['name']) {\n result[match.groups['name']] = el;\n }\n if (children) {\n for (const c of children) {\n if (isHTMLElement(c)) {\n el.appendChild(c);\n }\n else if (typeof c === 'string') {\n el.append(c);\n }\n else if ('root' in c) {\n Object.assign(result, c);\n el.appendChild(c.root);\n }\n }\n }\n for (const [key, value] of Object.entries(attributes)) {\n if (key === 'className') {\n continue;\n }\n else if (key === 'style') {\n for (const [cssKey, cssValue] of Object.entries(value)) {\n el.style.setProperty(camelCaseToHyphenCase(cssKey), typeof cssValue === 'number' ? cssValue + 'px' : '' + cssValue);\n }\n }\n else if (key === 'tabIndex') {\n el.tabIndex = value;\n }\n else {\n el.setAttribute(camelCaseToHyphenCase(key), value.toString());\n }\n }\n result['root'] = el;\n return result;\n}\nfunction camelCaseToHyphenCase(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction copyAttributes(from, to, filter) {\n for (const { name, value } of from.attributes) {\n if (!filter || filter.includes(name)) {\n to.setAttribute(name, value);\n }\n }\n}\nfunction copyAttribute(from, to, name) {\n const value = from.getAttribute(name);\n if (value) {\n to.setAttribute(name, value);\n }\n else {\n to.removeAttribute(name);\n }\n}\nfunction trackAttributes(from, to, filter) {\n copyAttributes(from, to, filter);\n const disposables = new lifecycle_1.DisposableStore();\n disposables.add(exports.sharedMutationObserver.observe(from, disposables, { attributes: true, attributeFilter: filter })(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName) {\n copyAttribute(from, to, mutation.attributeName);\n }\n }\n }));\n return disposables;\n}\n/**\n * Helper for calculating the \"safe triangle\" occluded by hovers to avoid early dismissal.\n * @see https://www.smashingmagazine.com/2023/08/better-context-menus-safe-triangles/ for example\n */\nclass SafeTriangle {\n constructor(originX, originY, target) {\n this.originX = originX;\n this.originY = originY;\n // 4 triangles, 2 points (x, y) stored for each\n this.triangles = [];\n const { top, left, right, bottom } = target.getBoundingClientRect();\n const t = this.triangles;\n let i = 0;\n t[i++] = left;\n t[i++] = top;\n t[i++] = right;\n t[i++] = top;\n t[i++] = left;\n t[i++] = top;\n t[i++] = left;\n t[i++] = bottom;\n t[i++] = right;\n t[i++] = top;\n t[i++] = right;\n t[i++] = bottom;\n t[i++] = left;\n t[i++] = bottom;\n t[i++] = right;\n t[i++] = bottom;\n }\n contains(x, y) {\n const { triangles, originX, originY } = this;\n for (let i = 0; i < 4; i++) {\n if ((0, numbers_1.isPointWithinTriangle)(x, y, originX, originY, triangles[2 * i], triangles[2 * i + 1], triangles[2 * i + 2], triangles[2 * i + 3])) {\n return true;\n }\n }\n return false;\n }\n}\nexports.SafeTriangle = SafeTriangle;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IframeUtils = void 0;\nexports.parentOriginHash = parentOriginHash;\nconst sameOriginWindowChainCache = new WeakMap();\nfunction getParentWindowIfSameOrigin(w) {\n if (!w.parent || w.parent === w) {\n return null;\n }\n // Cannot really tell if we have access to the parent window unless we try to access something in it\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n }\n catch (e) {\n return null;\n }\n return w.parent;\n}\nclass IframeUtils {\n /**\n * Returns a chain of embedded windows with the same origin (which can be accessed programmatically).\n * Having a chain of length 1 might mean that the current execution environment is running outside of an iframe or inside an iframe embedded in a window with a different origin.\n */\n static getSameOriginWindowChain(targetWindow) {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w = targetWindow;\n let parent;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement || null\n });\n }\n else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n /**\n * Returns the position of `childWindow` relative to `ancestorWindow`\n */\n static getPositionOfChildWindowRelativeToAncestorWindow(childWindow, ancestorWindow) {\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n let top = 0, left = 0;\n const windowChain = this.getSameOriginWindowChain(childWindow);\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n if (windowInChain === ancestorWindow) {\n break;\n }\n if (!windowChainEl.iframeElement) {\n break;\n }\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n return {\n top: top,\n left: left\n };\n }\n}\nexports.IframeUtils = IframeUtils;\n/**\n * Returns a sha-256 composed of `parentOrigin` and `salt` converted to base 32\n */\nasync function parentOriginHash(parentOrigin, salt) {\n // This same code is also inlined at `src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html`\n if (!crypto.subtle) {\n throw new Error(`'crypto.subtle' is not available so webviews will not work. This is likely because the editor is not running in a secure context (https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts).`);\n }\n const strData = JSON.stringify({ parentOrigin, salt });\n const encoder = new TextEncoder();\n const arrData = encoder.encode(strData);\n const hash = await crypto.subtle.digest('sha-256', arrData);\n return sha256AsBase32(hash);\n}\nfunction sha256AsBase32(bytes) {\n const array = Array.from(new Uint8Array(bytes));\n const hexArray = array.map(b => b.toString(16).padStart(2, '0')).join('');\n // sha256 has 256 bits, so we need at most ceil(lg(2^256-1)/lg(32)) = 52 chars to represent it in base 32\n return BigInt(`0x${hexArray}`).toString(32).padStart(52, '0');\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StandardKeyboardEvent = void 0;\nexports.printKeyboardEvent = printKeyboardEvent;\nexports.printStandardKeyboardEvent = printStandardKeyboardEvent;\nconst browser = __importStar(require(\"vs/base/browser/browser\"));\nconst keyCodes_1 = require(\"vs/base/common/keyCodes\");\nconst keybindings_1 = require(\"vs/base/common/keybindings\");\nconst platform = __importStar(require(\"vs/base/common/platform\"));\nfunction extractKeyCode(e) {\n if (e.charCode) {\n // \"keypress\" events mostly\n const char = String.fromCharCode(e.charCode).toUpperCase();\n return keyCodes_1.KeyCodeUtils.fromString(char);\n }\n const keyCode = e.keyCode;\n // browser quirks\n if (keyCode === 3) {\n return keyCodes_1.KeyCode.PauseBreak;\n }\n else if (browser.isFirefox) {\n switch (keyCode) {\n case 59: return keyCodes_1.KeyCode.Semicolon;\n case 60:\n if (platform.isLinux) {\n return keyCodes_1.KeyCode.IntlBackslash;\n }\n break;\n case 61: return keyCodes_1.KeyCode.Equal;\n // based on: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#numpad_keys\n case 107: return keyCodes_1.KeyCode.NumpadAdd;\n case 109: return keyCodes_1.KeyCode.NumpadSubtract;\n case 173: return keyCodes_1.KeyCode.Minus;\n case 224:\n if (platform.isMacintosh) {\n return keyCodes_1.KeyCode.Meta;\n }\n break;\n }\n }\n else if (browser.isWebKit) {\n if (platform.isMacintosh && keyCode === 93) {\n // the two meta keys in the Mac have different key codes (91 and 93)\n return keyCodes_1.KeyCode.Meta;\n }\n else if (!platform.isMacintosh && keyCode === 92) {\n return keyCodes_1.KeyCode.Meta;\n }\n }\n // cross browser keycodes:\n return keyCodes_1.EVENT_KEY_CODE_MAP[keyCode] || keyCodes_1.KeyCode.Unknown;\n}\nconst ctrlKeyMod = (platform.isMacintosh ? keyCodes_1.KeyMod.WinCtrl : keyCodes_1.KeyMod.CtrlCmd);\nconst altKeyMod = keyCodes_1.KeyMod.Alt;\nconst shiftKeyMod = keyCodes_1.KeyMod.Shift;\nconst metaKeyMod = (platform.isMacintosh ? keyCodes_1.KeyMod.CtrlCmd : keyCodes_1.KeyMod.WinCtrl);\nfunction printKeyboardEvent(e) {\n const modifiers = [];\n if (e.ctrlKey) {\n modifiers.push(`ctrl`);\n }\n if (e.shiftKey) {\n modifiers.push(`shift`);\n }\n if (e.altKey) {\n modifiers.push(`alt`);\n }\n if (e.metaKey) {\n modifiers.push(`meta`);\n }\n return `modifiers: [${modifiers.join(',')}], code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`;\n}\nfunction printStandardKeyboardEvent(e) {\n const modifiers = [];\n if (e.ctrlKey) {\n modifiers.push(`ctrl`);\n }\n if (e.shiftKey) {\n modifiers.push(`shift`);\n }\n if (e.altKey) {\n modifiers.push(`alt`);\n }\n if (e.metaKey) {\n modifiers.push(`meta`);\n }\n return `modifiers: [${modifiers.join(',')}], code: ${e.code}, keyCode: ${e.keyCode} ('${keyCodes_1.KeyCodeUtils.toString(e.keyCode)}')`;\n}\nclass StandardKeyboardEvent {\n constructor(source) {\n this._standardKeyboardEventBrand = true;\n const e = source;\n this.browserEvent = e;\n this.target = e.target;\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n this.altGraphKey = e.getModifierState?.('AltGraph');\n this.keyCode = extractKeyCode(e);\n this.code = e.code;\n // console.info(e.type + \": keyCode: \" + e.keyCode + \", which: \" + e.which + \", charCode: \" + e.charCode + \", detail: \" + e.detail + \" ====> \" + this.keyCode + ' -- ' + KeyCode[this.keyCode]);\n this.ctrlKey = this.ctrlKey || this.keyCode === keyCodes_1.KeyCode.Ctrl;\n this.altKey = this.altKey || this.keyCode === keyCodes_1.KeyCode.Alt;\n this.shiftKey = this.shiftKey || this.keyCode === keyCodes_1.KeyCode.Shift;\n this.metaKey = this.metaKey || this.keyCode === keyCodes_1.KeyCode.Meta;\n this._asKeybinding = this._computeKeybinding();\n this._asKeyCodeChord = this._computeKeyCodeChord();\n // console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);\n }\n preventDefault() {\n if (this.browserEvent && this.browserEvent.preventDefault) {\n this.browserEvent.preventDefault();\n }\n }\n stopPropagation() {\n if (this.browserEvent && this.browserEvent.stopPropagation) {\n this.browserEvent.stopPropagation();\n }\n }\n toKeyCodeChord() {\n return this._asKeyCodeChord;\n }\n equals(other) {\n return this._asKeybinding === other;\n }\n _computeKeybinding() {\n let key = keyCodes_1.KeyCode.Unknown;\n if (this.keyCode !== keyCodes_1.KeyCode.Ctrl && this.keyCode !== keyCodes_1.KeyCode.Shift && this.keyCode !== keyCodes_1.KeyCode.Alt && this.keyCode !== keyCodes_1.KeyCode.Meta) {\n key = this.keyCode;\n }\n let result = 0;\n if (this.ctrlKey) {\n result |= ctrlKeyMod;\n }\n if (this.altKey) {\n result |= altKeyMod;\n }\n if (this.shiftKey) {\n result |= shiftKeyMod;\n }\n if (this.metaKey) {\n result |= metaKeyMod;\n }\n result |= key;\n return result;\n }\n _computeKeyCodeChord() {\n let key = keyCodes_1.KeyCode.Unknown;\n if (this.keyCode !== keyCodes_1.KeyCode.Ctrl && this.keyCode !== keyCodes_1.KeyCode.Shift && this.keyCode !== keyCodes_1.KeyCode.Alt && this.keyCode !== keyCodes_1.KeyCode.Meta) {\n key = this.keyCode;\n }\n return new keybindings_1.KeyCodeChord(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);\n }\n}\nexports.StandardKeyboardEvent = StandardKeyboardEvent;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StandardWheelEvent = exports.DragMouseEvent = exports.StandardMouseEvent = void 0;\nconst browser = __importStar(require(\"vs/base/browser/browser\"));\nconst iframe_1 = require(\"vs/base/browser/iframe\");\nconst platform = __importStar(require(\"vs/base/common/platform\"));\nclass StandardMouseEvent {\n constructor(targetWindow, e) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n this.target = e.target;\n this.detail = e.detail || 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n }\n else {\n // Probably hit by MSGestureEvent\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n // Find the position of the iframe this code is executing in relative to the iframe where the event was captured.\n const iframeOffsets = iframe_1.IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n preventDefault() {\n this.browserEvent.preventDefault();\n }\n stopPropagation() {\n this.browserEvent.stopPropagation();\n }\n}\nexports.StandardMouseEvent = StandardMouseEvent;\nclass DragMouseEvent extends StandardMouseEvent {\n constructor(targetWindow, e) {\n super(targetWindow, e);\n this.dataTransfer = e.dataTransfer;\n }\n}\nexports.DragMouseEvent = DragMouseEvent;\nclass StandardWheelEvent {\n constructor(e, deltaX = 0, deltaY = 0) {\n this.browserEvent = e || null;\n this.target = e ? (e.target || e.targetNode || e.srcElement) : null;\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n let shouldFactorDPR = false;\n if (browser.isChrome) {\n // Chrome version >= 123 contains the fix to factor devicePixelRatio into the wheel event.\n // See https://chromium.googlesource.com/chromium/src.git/+/be51b448441ff0c9d1f17e0f25c4bf1ab3f11f61\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1]) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n if (e) {\n // Old (deprecated) wheel events\n const e1 = e;\n const e2 = e;\n const devicePixelRatio = e.view?.devicePixelRatio || 1;\n // vertical delta scroll\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n }\n else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n }\n else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaY = -e.deltaY / 3;\n }\n else {\n this.deltaY = -e.deltaY;\n }\n }\n else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n // horizontal delta scroll\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (browser.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n }\n else if (shouldFactorDPR) {\n // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n }\n else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n }\n else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaX = -e.deltaX / 3;\n }\n else {\n this.deltaX = -e.deltaX;\n }\n }\n else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n // Assume a vertical scroll if nothing else worked\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n }\n else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n preventDefault() {\n this.browserEvent?.preventDefault();\n }\n stopPropagation() {\n this.browserEvent?.stopPropagation();\n }\n}\nexports.StandardWheelEvent = StandardWheelEvent;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mainWindow = void 0;\nexports.ensureCodeWindow = ensureCodeWindow;\nfunction ensureCodeWindow(targetWindow, fallbackWindowId) {\n}\n// eslint-disable-next-line no-restricted-globals\nexports.mainWindow = (typeof window === 'object' ? window : globalThis);\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Permutation = exports.CallbackIterable = exports.ArrayQueue = exports.booleanComparator = exports.numberComparator = exports.CompareResult = void 0;\nexports.tail = tail;\nexports.tail2 = tail2;\nexports.equals = equals;\nexports.removeFastWithoutKeepingOrder = removeFastWithoutKeepingOrder;\nexports.binarySearch = binarySearch;\nexports.binarySearch2 = binarySearch2;\nexports.quickSelect = quickSelect;\nexports.groupBy = groupBy;\nexports.groupAdjacentBy = groupAdjacentBy;\nexports.forEachAdjacent = forEachAdjacent;\nexports.forEachWithNeighbors = forEachWithNeighbors;\nexports.sortedDiff = sortedDiff;\nexports.delta = delta;\nexports.top = top;\nexports.topAsync = topAsync;\nexports.coalesce = coalesce;\nexports.coalesceInPlace = coalesceInPlace;\nexports.move = move;\nexports.isFalsyOrEmpty = isFalsyOrEmpty;\nexports.isNonEmptyArray = isNonEmptyArray;\nexports.distinct = distinct;\nexports.uniqueFilter = uniqueFilter;\nexports.firstOrDefault = firstOrDefault;\nexports.lastOrDefault = lastOrDefault;\nexports.commonPrefixLength = commonPrefixLength;\nexports.range = range;\nexports.index = index;\nexports.insert = insert;\nexports.remove = remove;\nexports.arrayInsert = arrayInsert;\nexports.shuffle = shuffle;\nexports.pushToStart = pushToStart;\nexports.pushToEnd = pushToEnd;\nexports.pushMany = pushMany;\nexports.mapArrayOrNot = mapArrayOrNot;\nexports.asArray = asArray;\nexports.getRandomElement = getRandomElement;\nexports.insertInto = insertInto;\nexports.splice = splice;\nexports.compareBy = compareBy;\nexports.tieBreakComparators = tieBreakComparators;\nexports.reverseOrder = reverseOrder;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst arraysFind_1 = require(\"./arraysFind\");\n/**\n * Returns the last element of an array.\n * @param array The array.\n * @param n Which element from the end (default is zero).\n */\nfunction tail(array, n = 0) {\n return array[array.length - (1 + n)];\n}\nfunction tail2(arr) {\n if (arr.length === 0) {\n throw new Error('Invalid tail call');\n }\n return [arr.slice(0, arr.length - 1), arr[arr.length - 1]];\n}\nfunction equals(one, other, itemEquals = (a, b) => a === b) {\n if (one === other) {\n return true;\n }\n if (!one || !other) {\n return false;\n }\n if (one.length !== other.length) {\n return false;\n }\n for (let i = 0, len = one.length; i < len; i++) {\n if (!itemEquals(one[i], other[i])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Remove the element at `index` by replacing it with the last element. This is faster than `splice`\n * but changes the order of the array\n */\nfunction removeFastWithoutKeepingOrder(array, index) {\n const last = array.length - 1;\n if (index < last) {\n array[index] = array[last];\n }\n array.pop();\n}\n/**\n * Performs a binary search algorithm over a sorted array.\n *\n * @param array The array being searched.\n * @param key The value we search for.\n * @param comparator A function that takes two array elements and returns zero\n * if they are equal, a negative number if the first element precedes the\n * second one in the sorting order, or a positive number if the second element\n * precedes the first one.\n * @return See {@link binarySearch2}\n */\nfunction binarySearch(array, key, comparator) {\n return binarySearch2(array.length, i => comparator(array[i], key));\n}\n/**\n * Performs a binary search algorithm over a sorted collection. Useful for cases\n * when we need to perform a binary search over something that isn't actually an\n * array, and converting data to an array would defeat the use of binary search\n * in the first place.\n *\n * @param length The collection length.\n * @param compareToKey A function that takes an index of an element in the\n * collection and returns zero if the value at this index is equal to the\n * search key, a negative number if the value precedes the search key in the\n * sorting order, or a positive number if the search key precedes the value.\n * @return A non-negative index of an element, if found. If not found, the\n * result is -(n+1) (or ~n, using bitwise notation), where n is the index\n * where the key should be inserted to maintain the sorting order.\n */\nfunction binarySearch2(length, compareToKey) {\n let low = 0, high = length - 1;\n while (low <= high) {\n const mid = ((low + high) / 2) | 0;\n const comp = compareToKey(mid);\n if (comp < 0) {\n low = mid + 1;\n }\n else if (comp > 0) {\n high = mid - 1;\n }\n else {\n return mid;\n }\n }\n return -(low + 1);\n}\nfunction quickSelect(nth, data, compare) {\n nth = nth | 0;\n if (nth >= data.length) {\n throw new TypeError('invalid index');\n }\n const pivotValue = data[Math.floor(data.length * Math.random())];\n const lower = [];\n const higher = [];\n const pivots = [];\n for (const value of data) {\n const val = compare(value, pivotValue);\n if (val < 0) {\n lower.push(value);\n }\n else if (val > 0) {\n higher.push(value);\n }\n else {\n pivots.push(value);\n }\n }\n if (nth < lower.length) {\n return quickSelect(nth, lower, compare);\n }\n else if (nth < lower.length + pivots.length) {\n return pivots[0];\n }\n else {\n return quickSelect(nth - (lower.length + pivots.length), higher, compare);\n }\n}\nfunction groupBy(data, compare) {\n const result = [];\n let currentGroup = undefined;\n for (const element of data.slice(0).sort(compare)) {\n if (!currentGroup || compare(currentGroup[0], element) !== 0) {\n currentGroup = [element];\n result.push(currentGroup);\n }\n else {\n currentGroup.push(element);\n }\n }\n return result;\n}\n/**\n * Splits the given items into a list of (non-empty) groups.\n * `shouldBeGrouped` is used to decide if two consecutive items should be in the same group.\n * The order of the items is preserved.\n */\nfunction* groupAdjacentBy(items, shouldBeGrouped) {\n let currentGroup;\n let last;\n for (const item of items) {\n if (last !== undefined && shouldBeGrouped(last, item)) {\n currentGroup.push(item);\n }\n else {\n if (currentGroup) {\n yield currentGroup;\n }\n currentGroup = [item];\n }\n last = item;\n }\n if (currentGroup) {\n yield currentGroup;\n }\n}\nfunction forEachAdjacent(arr, f) {\n for (let i = 0; i <= arr.length; i++) {\n f(i === 0 ? undefined : arr[i - 1], i === arr.length ? undefined : arr[i]);\n }\n}\nfunction forEachWithNeighbors(arr, f) {\n for (let i = 0; i < arr.length; i++) {\n f(i === 0 ? undefined : arr[i - 1], arr[i], i + 1 === arr.length ? undefined : arr[i + 1]);\n }\n}\n/**\n * Diffs two *sorted* arrays and computes the splices which apply the diff.\n */\nfunction sortedDiff(before, after, compare) {\n const result = [];\n function pushSplice(start, deleteCount, toInsert) {\n if (deleteCount === 0 && toInsert.length === 0) {\n return;\n }\n const latest = result[result.length - 1];\n if (latest && latest.start + latest.deleteCount === start) {\n latest.deleteCount += deleteCount;\n latest.toInsert.push(...toInsert);\n }\n else {\n result.push({ start, deleteCount, toInsert });\n }\n }\n let beforeIdx = 0;\n let afterIdx = 0;\n while (true) {\n if (beforeIdx === before.length) {\n pushSplice(beforeIdx, 0, after.slice(afterIdx));\n break;\n }\n if (afterIdx === after.length) {\n pushSplice(beforeIdx, before.length - beforeIdx, []);\n break;\n }\n const beforeElement = before[beforeIdx];\n const afterElement = after[afterIdx];\n const n = compare(beforeElement, afterElement);\n if (n === 0) {\n // equal\n beforeIdx += 1;\n afterIdx += 1;\n }\n else if (n < 0) {\n // beforeElement is smaller -> before element removed\n pushSplice(beforeIdx, 1, []);\n beforeIdx += 1;\n }\n else if (n > 0) {\n // beforeElement is greater -> after element added\n pushSplice(beforeIdx, 0, [afterElement]);\n afterIdx += 1;\n }\n }\n return result;\n}\n/**\n * Takes two *sorted* arrays and computes their delta (removed, added elements).\n * Finishes in `Math.min(before.length, after.length)` steps.\n */\nfunction delta(before, after, compare) {\n const splices = sortedDiff(before, after, compare);\n const removed = [];\n const added = [];\n for (const splice of splices) {\n removed.push(...before.slice(splice.start, splice.start + splice.deleteCount));\n added.push(...splice.toInsert);\n }\n return { removed, added };\n}\n/**\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @return The first n elements from array when sorted with compare.\n */\nfunction top(array, compare, n) {\n if (n === 0) {\n return [];\n }\n const result = array.slice(0, n).sort(compare);\n topStep(array, compare, result, n, array.length);\n return result;\n}\n/**\n * Asynchronous variant of `top()` allowing for splitting up work in batches between which the event loop can run.\n *\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @param batch The number of elements to examine before yielding to the event loop.\n * @return The first n elements from array when sorted with compare.\n */\nfunction topAsync(array, compare, n, batch, token) {\n if (n === 0) {\n return Promise.resolve([]);\n }\n return new Promise((resolve, reject) => {\n (async () => {\n const o = array.length;\n const result = array.slice(0, n).sort(compare);\n for (let i = n, m = Math.min(n + batch, o); i < o; i = m, m = Math.min(m + batch, o)) {\n if (i > n) {\n await new Promise(resolve => setTimeout(resolve)); // any other delay function would starve I/O\n }\n if (token && token.isCancellationRequested) {\n throw new errors_1.CancellationError();\n }\n topStep(array, compare, result, i, m);\n }\n return result;\n })()\n .then(resolve, reject);\n });\n}\nfunction topStep(array, compare, result, i, m) {\n for (const n = result.length; i < m; i++) {\n const element = array[i];\n if (compare(element, result[n - 1]) < 0) {\n result.pop();\n const j = (0, arraysFind_1.findFirstIdxMonotonousOrArrLen)(result, e => compare(element, e) < 0);\n result.splice(j, 0, element);\n }\n }\n}\n/**\n * @returns New array with all falsy values removed. The original array IS NOT modified.\n */\nfunction coalesce(array) {\n return array.filter((e) => !!e);\n}\n/**\n * Remove all falsy values from `array`. The original array IS modified.\n */\nfunction coalesceInPlace(array) {\n let to = 0;\n for (let i = 0; i < array.length; i++) {\n if (!!array[i]) {\n array[to] = array[i];\n to += 1;\n }\n }\n array.length = to;\n}\n/**\n * @deprecated Use `Array.copyWithin` instead\n */\nfunction move(array, from, to) {\n array.splice(to, 0, array.splice(from, 1)[0]);\n}\n/**\n * @returns false if the provided object is an array and not empty.\n */\nfunction isFalsyOrEmpty(obj) {\n return !Array.isArray(obj) || obj.length === 0;\n}\nfunction isNonEmptyArray(obj) {\n return Array.isArray(obj) && obj.length > 0;\n}\n/**\n * Removes duplicates from the given array. The optional keyFn allows to specify\n * how elements are checked for equality by returning an alternate value for each.\n */\nfunction distinct(array, keyFn = value => value) {\n const seen = new Set();\n return array.filter(element => {\n const key = keyFn(element);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n}\nfunction uniqueFilter(keyFn) {\n const seen = new Set();\n return element => {\n const key = keyFn(element);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n };\n}\nfunction firstOrDefault(array, notFoundValue) {\n return array.length > 0 ? array[0] : notFoundValue;\n}\nfunction lastOrDefault(array, notFoundValue) {\n return array.length > 0 ? array[array.length - 1] : notFoundValue;\n}\nfunction commonPrefixLength(one, other, equals = (a, b) => a === b) {\n let result = 0;\n for (let i = 0, len = Math.min(one.length, other.length); i < len && equals(one[i], other[i]); i++) {\n result++;\n }\n return result;\n}\nfunction range(arg, to) {\n let from = typeof to === 'number' ? arg : 0;\n if (typeof to === 'number') {\n from = arg;\n }\n else {\n from = 0;\n to = arg;\n }\n const result = [];\n if (from <= to) {\n for (let i = from; i < to; i++) {\n result.push(i);\n }\n }\n else {\n for (let i = from; i > to; i--) {\n result.push(i);\n }\n }\n return result;\n}\nfunction index(array, indexer, mapper) {\n return array.reduce((r, t) => {\n r[indexer(t)] = mapper ? mapper(t) : t;\n return r;\n }, Object.create(null));\n}\n/**\n * Inserts an element into an array. Returns a function which, when\n * called, will remove that element from the array.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction insert(array, element) {\n array.push(element);\n return () => remove(array, element);\n}\n/**\n * Removes an element from an array if it can be found.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction remove(array, element) {\n const index = array.indexOf(element);\n if (index > -1) {\n array.splice(index, 1);\n return element;\n }\n return undefined;\n}\n/**\n * Insert `insertArr` inside `target` at `insertIndex`.\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\n */\nfunction arrayInsert(target, insertIndex, insertArr) {\n const before = target.slice(0, insertIndex);\n const after = target.slice(insertIndex);\n return before.concat(insertArr, after);\n}\n/**\n * Uses Fisher-Yates shuffle to shuffle the given array\n */\nfunction shuffle(array, _seed) {\n let rand;\n if (typeof _seed === 'number') {\n let seed = _seed;\n // Seeded random number generator in JS. Modified from:\n // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n rand = () => {\n const x = Math.sin(seed++) * 179426549; // throw away most significant digits and reduce any potential bias\n return x - Math.floor(x);\n };\n }\n else {\n rand = Math.random;\n }\n for (let i = array.length - 1; i > 0; i -= 1) {\n const j = Math.floor(rand() * (i + 1));\n const temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n}\n/**\n * Pushes an element to the start of the array, if found.\n */\nfunction pushToStart(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.unshift(value);\n }\n}\n/**\n * Pushes an element to the end of the array, if found.\n */\nfunction pushToEnd(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.push(value);\n }\n}\nfunction pushMany(arr, items) {\n for (const item of items) {\n arr.push(item);\n }\n}\nfunction mapArrayOrNot(items, fn) {\n return Array.isArray(items) ?\n items.map(fn) :\n fn(items);\n}\nfunction asArray(x) {\n return Array.isArray(x) ? x : [x];\n}\nfunction getRandomElement(arr) {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n/**\n * Insert the new items in the array.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start inserting elements.\n * @param newItems The items to be inserted\n */\nfunction insertInto(array, start, newItems) {\n const startIdx = getActualStartIndex(array, start);\n const originalLength = array.length;\n const newItemsLength = newItems.length;\n array.length = originalLength + newItemsLength;\n // Move the items after the start index, start from the end so that we don't overwrite any value.\n for (let i = originalLength - 1; i >= startIdx; i--) {\n array[i + newItemsLength] = array[i];\n }\n for (let i = 0; i < newItemsLength; i++) {\n array[i + startIdx] = newItems[i];\n }\n}\n/**\n * Removes elements from an array and inserts new elements in their place, returning the deleted elements. Alternative to the native Array.splice method, it\n * can only support limited number of items due to the maximum call stack size limit.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @returns An array containing the elements that were deleted.\n */\nfunction splice(array, start, deleteCount, newItems) {\n const index = getActualStartIndex(array, start);\n let result = array.splice(index, deleteCount);\n if (result === undefined) {\n // see https://bugs.webkit.org/show_bug.cgi?id=261140\n result = [];\n }\n insertInto(array, index, newItems);\n return result;\n}\n/**\n * Determine the actual start index (same logic as the native splice() or slice())\n * If greater than the length of the array, start will be set to the length of the array. In this case, no element will be deleted but the method will behave as an adding function, adding as many element as item[n*] provided.\n * If negative, it will begin that many elements from the end of the array. (In this case, the origin -1, meaning -n is the index of the nth last element, and is therefore equivalent to the index of array.length - n.) If array.length + start is less than 0, it will begin from index 0.\n * @param array The target array.\n * @param start The operation index.\n */\nfunction getActualStartIndex(array, start) {\n return start < 0 ? Math.max(start + array.length, 0) : Math.min(start, array.length);\n}\nvar CompareResult;\n(function (CompareResult) {\n function isLessThan(result) {\n return result < 0;\n }\n CompareResult.isLessThan = isLessThan;\n function isLessThanOrEqual(result) {\n return result <= 0;\n }\n CompareResult.isLessThanOrEqual = isLessThanOrEqual;\n function isGreaterThan(result) {\n return result > 0;\n }\n CompareResult.isGreaterThan = isGreaterThan;\n function isNeitherLessOrGreaterThan(result) {\n return result === 0;\n }\n CompareResult.isNeitherLessOrGreaterThan = isNeitherLessOrGreaterThan;\n CompareResult.greaterThan = 1;\n CompareResult.lessThan = -1;\n CompareResult.neitherLessOrGreaterThan = 0;\n})(CompareResult || (exports.CompareResult = CompareResult = {}));\nfunction compareBy(selector, comparator) {\n return (a, b) => comparator(selector(a), selector(b));\n}\nfunction tieBreakComparators(...comparators) {\n return (item1, item2) => {\n for (const comparator of comparators) {\n const result = comparator(item1, item2);\n if (!CompareResult.isNeitherLessOrGreaterThan(result)) {\n return result;\n }\n }\n return CompareResult.neitherLessOrGreaterThan;\n };\n}\n/**\n * The natural order on numbers.\n*/\nconst numberComparator = (a, b) => a - b;\nexports.numberComparator = numberComparator;\nconst booleanComparator = (a, b) => (0, exports.numberComparator)(a ? 1 : 0, b ? 1 : 0);\nexports.booleanComparator = booleanComparator;\nfunction reverseOrder(comparator) {\n return (a, b) => -comparator(a, b);\n}\nclass ArrayQueue {\n /**\n * Constructs a queue that is backed by the given array. Runtime is O(1).\n */\n constructor(items) {\n this.items = items;\n this.firstIdx = 0;\n this.lastIdx = this.items.length - 1;\n }\n get length() {\n return this.lastIdx - this.firstIdx + 1;\n }\n /**\n * Consumes elements from the beginning of the queue as long as the predicate returns true.\n * If no elements were consumed, `null` is returned. Has a runtime of O(result.length).\n */\n takeWhile(predicate) {\n // P(k) := k <= this.lastIdx && predicate(this.items[k])\n // Find s := min { k | k >= this.firstIdx && !P(k) } and return this.data[this.firstIdx...s)\n let startIdx = this.firstIdx;\n while (startIdx < this.items.length && predicate(this.items[startIdx])) {\n startIdx++;\n }\n const result = startIdx === this.firstIdx ? null : this.items.slice(this.firstIdx, startIdx);\n this.firstIdx = startIdx;\n return result;\n }\n /**\n * Consumes elements from the end of the queue as long as the predicate returns true.\n * If no elements were consumed, `null` is returned.\n * The result has the same order as the underlying array!\n */\n takeFromEndWhile(predicate) {\n // P(k) := this.firstIdx >= k && predicate(this.items[k])\n // Find s := max { k | k <= this.lastIdx && !P(k) } and return this.data(s...this.lastIdx]\n let endIdx = this.lastIdx;\n while (endIdx >= 0 && predicate(this.items[endIdx])) {\n endIdx--;\n }\n const result = endIdx === this.lastIdx ? null : this.items.slice(endIdx + 1, this.lastIdx + 1);\n this.lastIdx = endIdx;\n return result;\n }\n peek() {\n if (this.length === 0) {\n return undefined;\n }\n return this.items[this.firstIdx];\n }\n peekLast() {\n if (this.length === 0) {\n return undefined;\n }\n return this.items[this.lastIdx];\n }\n dequeue() {\n const result = this.items[this.firstIdx];\n this.firstIdx++;\n return result;\n }\n removeLast() {\n const result = this.items[this.lastIdx];\n this.lastIdx--;\n return result;\n }\n takeCount(count) {\n const result = this.items.slice(this.firstIdx, this.firstIdx + count);\n this.firstIdx += count;\n return result;\n }\n}\nexports.ArrayQueue = ArrayQueue;\n/**\n * This class is faster than an iterator and array for lazy computed data.\n*/\nclass CallbackIterable {\n static { this.empty = new CallbackIterable(_callback => { }); }\n constructor(\n /**\n * Calls the callback for every item.\n * Stops when the callback returns false.\n */\n iterate) {\n this.iterate = iterate;\n }\n forEach(handler) {\n this.iterate(item => { handler(item); return true; });\n }\n toArray() {\n const result = [];\n this.iterate(item => { result.push(item); return true; });\n return result;\n }\n filter(predicate) {\n return new CallbackIterable(cb => this.iterate(item => predicate(item) ? cb(item) : true));\n }\n map(mapFn) {\n return new CallbackIterable(cb => this.iterate(item => cb(mapFn(item))));\n }\n some(predicate) {\n let result = false;\n this.iterate(item => { result = predicate(item); return !result; });\n return result;\n }\n findFirst(predicate) {\n let result;\n this.iterate(item => {\n if (predicate(item)) {\n result = item;\n return false;\n }\n return true;\n });\n return result;\n }\n findLast(predicate) {\n let result;\n this.iterate(item => {\n if (predicate(item)) {\n result = item;\n }\n return true;\n });\n return result;\n }\n findLastMaxBy(comparator) {\n let result;\n let first = true;\n this.iterate(item => {\n if (first || CompareResult.isGreaterThan(comparator(item, result))) {\n first = false;\n result = item;\n }\n return true;\n });\n return result;\n }\n}\nexports.CallbackIterable = CallbackIterable;\n/**\n * Represents a re-arrangement of items in an array.\n */\nclass Permutation {\n constructor(_indexMap) {\n this._indexMap = _indexMap;\n }\n /**\n * Returns a permutation that sorts the given array according to the given compare function.\n */\n static createSortPermutation(arr, compareFn) {\n const sortIndices = Array.from(arr.keys()).sort((index1, index2) => compareFn(arr[index1], arr[index2]));\n return new Permutation(sortIndices);\n }\n /**\n * Returns a new array with the elements of the given array re-arranged according to this permutation.\n */\n apply(arr) {\n return arr.map((_, index) => arr[this._indexMap[index]]);\n }\n /**\n * Returns a new permutation that undoes the re-arrangement of this permutation.\n */\n inverse() {\n const inverseIndexMap = this._indexMap.slice();\n for (let i = 0; i < this._indexMap.length; i++) {\n inverseIndexMap[this._indexMap[i]] = i;\n }\n return new Permutation(inverseIndexMap);\n }\n}\nexports.Permutation = Permutation;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MonotonousArray = void 0;\nexports.findLast = findLast;\nexports.findLastIdx = findLastIdx;\nexports.findLastMonotonous = findLastMonotonous;\nexports.findLastIdxMonotonous = findLastIdxMonotonous;\nexports.findFirstMonotonous = findFirstMonotonous;\nexports.findFirstIdxMonotonousOrArrLen = findFirstIdxMonotonousOrArrLen;\nexports.findFirstIdxMonotonous = findFirstIdxMonotonous;\nexports.findFirstMax = findFirstMax;\nexports.findLastMax = findLastMax;\nexports.findFirstMin = findFirstMin;\nexports.findMaxIdx = findMaxIdx;\nexports.mapFindFirst = mapFindFirst;\nfunction findLast(array, predicate) {\n const idx = findLastIdx(array, predicate);\n if (idx === -1) {\n return undefined;\n }\n return array[idx];\n}\nfunction findLastIdx(array, predicate, fromIndex = array.length - 1) {\n for (let i = fromIndex; i >= 0; i--) {\n const element = array[i];\n if (predicate(element)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `undefined` if no item matches, otherwise the last item that matches the predicate.\n */\nfunction findLastMonotonous(array, predicate) {\n const idx = findLastIdxMonotonous(array, predicate);\n return idx === -1 ? undefined : array[idx];\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `startIdx - 1` if predicate is false for all items, otherwise the index of the last item that matches the predicate.\n */\nfunction findLastIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n let i = startIdx;\n let j = endIdxEx;\n while (i < j) {\n const k = Math.floor((i + j) / 2);\n if (predicate(array[k])) {\n i = k + 1;\n }\n else {\n j = k;\n }\n }\n return i - 1;\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `undefined` if no item matches, otherwise the first item that matches the predicate.\n */\nfunction findFirstMonotonous(array, predicate) {\n const idx = findFirstIdxMonotonousOrArrLen(array, predicate);\n return idx === array.length ? undefined : array[idx];\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `endIdxEx` if predicate is false for all items, otherwise the index of the first item that matches the predicate.\n */\nfunction findFirstIdxMonotonousOrArrLen(array, predicate, startIdx = 0, endIdxEx = array.length) {\n let i = startIdx;\n let j = endIdxEx;\n while (i < j) {\n const k = Math.floor((i + j) / 2);\n if (predicate(array[k])) {\n j = k;\n }\n else {\n i = k + 1;\n }\n }\n return i;\n}\nfunction findFirstIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n const idx = findFirstIdxMonotonousOrArrLen(array, predicate, startIdx, endIdxEx);\n return idx === array.length ? -1 : idx;\n}\n/**\n * Use this when\n * * You have a sorted array\n * * You query this array with a monotonous predicate to find the last item that has a certain property.\n * * You query this array multiple times with monotonous predicates that get weaker and weaker.\n */\nclass MonotonousArray {\n static { this.assertInvariants = false; }\n constructor(_array) {\n this._array = _array;\n this._findLastMonotonousLastIdx = 0;\n }\n /**\n * The predicate must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n * For subsequent calls, current predicate must be weaker than (or equal to) the previous predicate, i.e. more entries must be `true`.\n */\n findLastMonotonous(predicate) {\n if (MonotonousArray.assertInvariants) {\n if (this._prevFindLastPredicate) {\n for (const item of this._array) {\n if (this._prevFindLastPredicate(item) && !predicate(item)) {\n throw new Error('MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.');\n }\n }\n }\n this._prevFindLastPredicate = predicate;\n }\n const idx = findLastIdxMonotonous(this._array, predicate, this._findLastMonotonousLastIdx);\n this._findLastMonotonousLastIdx = idx + 1;\n return idx === -1 ? undefined : this._array[idx];\n }\n}\nexports.MonotonousArray = MonotonousArray;\n/**\n * Returns the first item that is equal to or greater than every other item.\n*/\nfunction findFirstMax(array, comparator) {\n if (array.length === 0) {\n return undefined;\n }\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n const item = array[i];\n if (comparator(item, max) > 0) {\n max = item;\n }\n }\n return max;\n}\n/**\n * Returns the last item that is equal to or greater than every other item.\n*/\nfunction findLastMax(array, comparator) {\n if (array.length === 0) {\n return undefined;\n }\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n const item = array[i];\n if (comparator(item, max) >= 0) {\n max = item;\n }\n }\n return max;\n}\n/**\n * Returns the first item that is equal to or less than every other item.\n*/\nfunction findFirstMin(array, comparator) {\n return findFirstMax(array, (a, b) => -comparator(a, b));\n}\nfunction findMaxIdx(array, comparator) {\n if (array.length === 0) {\n return -1;\n }\n let maxIdx = 0;\n for (let i = 1; i < array.length; i++) {\n const item = array[i];\n if (comparator(item, array[maxIdx]) > 0) {\n maxIdx = i;\n }\n }\n return maxIdx;\n}\n/**\n * Returns the first mapped value of the array which is not undefined.\n */\nfunction mapFindFirst(items, mapFn) {\n for (const value of items) {\n const mapped = mapFn(value);\n if (mapped !== undefined) {\n return mapped;\n }\n }\n return undefined;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AsyncIterableSource = exports.CancelableAsyncIterableObject = exports.AsyncIterableObject = exports.LazyStatefulPromise = exports.StatefulPromise = exports.Promises = exports.DeferredPromise = exports.IntervalCounter = exports.TaskSequentializer = exports.GlobalIdleValue = exports.AbstractIdleValue = exports._runWhenIdle = exports.runWhenGlobalIdle = exports.ThrottledWorker = exports.RunOnceWorker = exports.ProcessTimeRunOnceScheduler = exports.RunOnceScheduler = exports.IntervalTimer = exports.TimeoutTimer = exports.LimitedQueue = exports.Queue = exports.Limiter = exports.AutoOpenBarrier = exports.Barrier = exports.ThrottledDelayer = exports.Delayer = exports.SequencerByKey = exports.Sequencer = exports.Throttler = void 0;\nexports.isThenable = isThenable;\nexports.createCancelablePromise = createCancelablePromise;\nexports.raceCancellation = raceCancellation;\nexports.raceCancellationError = raceCancellationError;\nexports.raceCancellablePromises = raceCancellablePromises;\nexports.raceTimeout = raceTimeout;\nexports.asPromise = asPromise;\nexports.promiseWithResolvers = promiseWithResolvers;\nexports.timeout = timeout;\nexports.disposableTimeout = disposableTimeout;\nexports.sequence = sequence;\nexports.first = first;\nexports.firstParallel = firstParallel;\nexports.retry = retry;\nexports.createCancelableAsyncIterable = createCancelableAsyncIterable;\nconst cancellation_1 = require(\"vs/base/common/cancellation\");\nconst errors_1 = require(\"vs/base/common/errors\");\nconst event_1 = require(\"vs/base/common/event\");\nconst lifecycle_1 = require(\"vs/base/common/lifecycle\");\nconst platform_1 = require(\"vs/base/common/platform\");\nconst symbols_1 = require(\"./symbols\");\nconst lazy_1 = require(\"vs/base/common/lazy\");\nfunction isThenable(obj) {\n return !!obj && typeof obj.then === 'function';\n}\nfunction createCancelablePromise(callback) {\n const source = new cancellation_1.CancellationTokenSource();\n const thenable = callback(source.token);\n const promise = new Promise((resolve, reject) => {\n const subscription = source.token.onCancellationRequested(() => {\n subscription.dispose();\n reject(new errors_1.CancellationError());\n });\n Promise.resolve(thenable).then(value => {\n subscription.dispose();\n source.dispose();\n resolve(value);\n }, err => {\n subscription.dispose();\n source.dispose();\n reject(err);\n });\n });\n return new class {\n cancel() {\n source.cancel();\n source.dispose();\n }\n then(resolve, reject) {\n return promise.then(resolve, reject);\n }\n catch(reject) {\n return this.then(undefined, reject);\n }\n finally(onfinally) {\n return promise.finally(onfinally);\n }\n };\n}\nfunction raceCancellation(promise, token, defaultValue) {\n return new Promise((resolve, reject) => {\n const ref = token.onCancellationRequested(() => {\n ref.dispose();\n resolve(defaultValue);\n });\n promise.then(resolve, reject).finally(() => ref.dispose());\n });\n}\n/**\n * Returns a promise that rejects with an {@CancellationError} as soon as the passed token is cancelled.\n * @see {@link raceCancellation}\n */\nfunction raceCancellationError(promise, token) {\n return new Promise((resolve, reject) => {\n const ref = token.onCancellationRequested(() => {\n ref.dispose();\n reject(new errors_1.CancellationError());\n });\n promise.then(resolve, reject).finally(() => ref.dispose());\n });\n}\n/**\n * Returns as soon as one of the promises resolves or rejects and cancels remaining promises\n */\nasync function raceCancellablePromises(cancellablePromises) {\n let resolvedPromiseIndex = -1;\n const promises = cancellablePromises.map((promise, index) => promise.then(result => { resolvedPromiseIndex = index; return result; }));\n try {\n const result = await Promise.race(promises);\n return result;\n }\n finally {\n cancellablePromises.forEach((cancellablePromise, index) => {\n if (index !== resolvedPromiseIndex) {\n cancellablePromise.cancel();\n }\n });\n }\n}\nfunction raceTimeout(promise, timeout, onTimeout) {\n let promiseResolve = undefined;\n const timer = setTimeout(() => {\n promiseResolve?.(undefined);\n onTimeout?.();\n }, timeout);\n return Promise.race([\n promise.finally(() => clearTimeout(timer)),\n new Promise(resolve => promiseResolve = resolve)\n ]);\n}\nfunction asPromise(callback) {\n return new Promise((resolve, reject) => {\n const item = callback();\n if (isThenable(item)) {\n item.then(resolve, reject);\n }\n else {\n resolve(item);\n }\n });\n}\n/**\n * Creates and returns a new promise, plus its `resolve` and `reject` callbacks.\n *\n * Replace with standardized [`Promise.withResolvers`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers) once it is supported\n */\nfunction promiseWithResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve, reject: reject };\n}\n/**\n * A helper to prevent accumulation of sequential async tasks.\n *\n * Imagine a mail man with the sole task of delivering letters. As soon as\n * a letter submitted for delivery, he drives to the destination, delivers it\n * and returns to his base. Imagine that during the trip, N more letters were submitted.\n * When the mail man returns, he picks those N letters and delivers them all in a\n * single trip. Even though N+1 submissions occurred, only 2 deliveries were made.\n *\n * The throttler implements this via the queue() method, by providing it a task\n * factory. Following the example:\n *\n * \t\tconst throttler = new Throttler();\n * \t\tconst letters = [];\n *\n * \t\tfunction deliver() {\n * \t\t\tconst lettersToDeliver = letters;\n * \t\t\tletters = [];\n * \t\t\treturn makeTheTrip(lettersToDeliver);\n * \t\t}\n *\n * \t\tfunction onLetterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tthrottler.queue(deliver);\n * \t\t}\n */\nclass Throttler {\n constructor() {\n this.isDisposed = false;\n this.activePromise = null;\n this.queuedPromise = null;\n this.queuedPromiseFactory = null;\n }\n queue(promiseFactory) {\n if (this.isDisposed) {\n return Promise.reject(new Error('Throttler is disposed'));\n }\n if (this.activePromise) {\n this.queuedPromiseFactory = promiseFactory;\n if (!this.queuedPromise) {\n const onComplete = () => {\n this.queuedPromise = null;\n if (this.isDisposed) {\n return;\n }\n const result = this.queue(this.queuedPromiseFactory);\n this.queuedPromiseFactory = null;\n return result;\n };\n this.queuedPromise = new Promise(resolve => {\n this.activePromise.then(onComplete, onComplete).then(resolve);\n });\n }\n return new Promise((resolve, reject) => {\n this.queuedPromise.then(resolve, reject);\n });\n }\n this.activePromise = promiseFactory();\n return new Promise((resolve, reject) => {\n this.activePromise.then((result) => {\n this.activePromise = null;\n resolve(result);\n }, (err) => {\n this.activePromise = null;\n reject(err);\n });\n });\n }\n dispose() {\n this.isDisposed = true;\n }\n}\nexports.Throttler = Throttler;\nclass Sequencer {\n constructor() {\n this.current = Promise.resolve(null);\n }\n queue(promiseTask) {\n return this.current = this.current.then(() => promiseTask(), () => promiseTask());\n }\n}\nexports.Sequencer = Sequencer;\nclass SequencerByKey {\n constructor() {\n this.promiseMap = new Map();\n }\n queue(key, promiseTask) {\n const runningPromise = this.promiseMap.get(key) ?? Promise.resolve();\n const newPromise = runningPromise\n .catch(() => { })\n .then(promiseTask)\n .finally(() => {\n if (this.promiseMap.get(key) === newPromise) {\n this.promiseMap.delete(key);\n }\n });\n this.promiseMap.set(key, newPromise);\n return newPromise;\n }\n}\nexports.SequencerByKey = SequencerByKey;\nconst timeoutDeferred = (timeout, fn) => {\n let scheduled = true;\n const handle = setTimeout(() => {\n scheduled = false;\n fn();\n }, timeout);\n return {\n isTriggered: () => scheduled,\n dispose: () => {\n clearTimeout(handle);\n scheduled = false;\n },\n };\n};\nconst microtaskDeferred = (fn) => {\n let scheduled = true;\n queueMicrotask(() => {\n if (scheduled) {\n scheduled = false;\n fn();\n }\n });\n return {\n isTriggered: () => scheduled,\n dispose: () => { scheduled = false; },\n };\n};\n/**\n * A helper to delay (debounce) execution of a task that is being requested often.\n *\n * Following the throttler, now imagine the mail man wants to optimize the number of\n * trips proactively. The trip itself can be long, so he decides not to make the trip\n * as soon as a letter is submitted. Instead he waits a while, in case more\n * letters are submitted. After said waiting period, if no letters were submitted, he\n * decides to make the trip. Imagine that N more letters were submitted after the first\n * one, all within a short period of time between each other. Even though N+1\n * submissions occurred, only 1 delivery was made.\n *\n * The delayer offers this behavior via the trigger() method, into which both the task\n * to be executed and the waiting period (delay) must be passed in as arguments. Following\n * the example:\n *\n * \t\tconst delayer = new Delayer(WAITING_PERIOD);\n * \t\tconst letters = [];\n *\n * \t\tfunction letterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tdelayer.trigger(() => { return makeTheTrip(); });\n * \t\t}\n */\nclass Delayer {\n constructor(defaultDelay) {\n this.defaultDelay = defaultDelay;\n this.deferred = null;\n this.completionPromise = null;\n this.doResolve = null;\n this.doReject = null;\n this.task = null;\n }\n trigger(task, delay = this.defaultDelay) {\n this.task = task;\n this.cancelTimeout();\n if (!this.completionPromise) {\n this.completionPromise = new Promise((resolve, reject) => {\n this.doResolve = resolve;\n this.doReject = reject;\n }).then(() => {\n this.completionPromise = null;\n this.doResolve = null;\n if (this.task) {\n const task = this.task;\n this.task = null;\n return task();\n }\n return undefined;\n });\n }\n const fn = () => {\n this.deferred = null;\n this.doResolve?.(null);\n };\n this.deferred = delay === symbols_1.MicrotaskDelay ? microtaskDeferred(fn) : timeoutDeferred(delay, fn);\n return this.completionPromise;\n }\n isTriggered() {\n return !!this.deferred?.isTriggered();\n }\n cancel() {\n this.cancelTimeout();\n if (this.completionPromise) {\n this.doReject?.(new errors_1.CancellationError());\n this.completionPromise = null;\n }\n }\n cancelTimeout() {\n this.deferred?.dispose();\n this.deferred = null;\n }\n dispose() {\n this.cancel();\n }\n}\nexports.Delayer = Delayer;\n/**\n * A helper to delay execution of a task that is being requested often, while\n * preventing accumulation of consecutive executions, while the task runs.\n *\n * The mail man is clever and waits for a certain amount of time, before going\n * out to deliver letters. While the mail man is going out, more letters arrive\n * and can only be delivered once he is back. Once he is back the mail man will\n * do one more trip to deliver the letters that have accumulated while he was out.\n */\nclass ThrottledDelayer {\n constructor(defaultDelay) {\n this.delayer = new Delayer(defaultDelay);\n this.throttler = new Throttler();\n }\n trigger(promiseFactory, delay) {\n return this.delayer.trigger(() => this.throttler.queue(promiseFactory), delay);\n }\n isTriggered() {\n return this.delayer.isTriggered();\n }\n cancel() {\n this.delayer.cancel();\n }\n dispose() {\n this.delayer.dispose();\n this.throttler.dispose();\n }\n}\nexports.ThrottledDelayer = ThrottledDelayer;\n/**\n * A barrier that is initially closed and then becomes opened permanently.\n */\nclass Barrier {\n constructor() {\n this._isOpen = false;\n this._promise = new Promise((c, e) => {\n this._completePromise = c;\n });\n }\n isOpen() {\n return this._isOpen;\n }\n open() {\n this._isOpen = true;\n this._completePromise(true);\n }\n wait() {\n return this._promise;\n }\n}\nexports.Barrier = Barrier;\n/**\n * A barrier that is initially closed and then becomes opened permanently after a certain period of\n * time or when open is called explicitly\n */\nclass AutoOpenBarrier extends Barrier {\n constructor(autoOpenTimeMs) {\n super();\n this._timeout = setTimeout(() => this.open(), autoOpenTimeMs);\n }\n open() {\n clearTimeout(this._timeout);\n super.open();\n }\n}\nexports.AutoOpenBarrier = AutoOpenBarrier;\nfunction timeout(millis, token) {\n if (!token) {\n return createCancelablePromise(token => timeout(millis, token));\n }\n return new Promise((resolve, reject) => {\n const handle = setTimeout(() => {\n disposable.dispose();\n resolve();\n }, millis);\n const disposable = token.onCancellationRequested(() => {\n clearTimeout(handle);\n disposable.dispose();\n reject(new errors_1.CancellationError());\n });\n });\n}\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed automatically.\n *\n * @example\n * const store = new DisposableStore;\n * // Call the timeout after 1000ms at which point it will be automatically\n * // evicted from the store.\n * const timeoutDisposable = disposableTimeout(() => {}, 1000, store);\n *\n * if (foo) {\n * // Cancel the timeout and evict it from store.\n * timeoutDisposable.dispose();\n * }\n */\nfunction disposableTimeout(handler, timeout = 0, store) {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = (0, lifecycle_1.toDisposable)(() => {\n clearTimeout(timer);\n store?.deleteAndLeak(disposable);\n });\n store?.add(disposable);\n return disposable;\n}\n/**\n * Runs the provided list of promise factories in sequential order. The returned\n * promise will complete to an array of results from each promise.\n */\nfunction sequence(promiseFactories) {\n const results = [];\n let index = 0;\n const len = promiseFactories.length;\n function next() {\n return index < len ? promiseFactories[index++]() : null;\n }\n function thenHandler(result) {\n if (result !== undefined && result !== null) {\n results.push(result);\n }\n const n = next();\n if (n) {\n return n.then(thenHandler);\n }\n return Promise.resolve(results);\n }\n return Promise.resolve(null).then(thenHandler);\n}\nfunction first(promiseFactories, shouldStop = t => !!t, defaultValue = null) {\n let index = 0;\n const len = promiseFactories.length;\n const loop = () => {\n if (index >= len) {\n return Promise.resolve(defaultValue);\n }\n const factory = promiseFactories[index++];\n const promise = Promise.resolve(factory());\n return promise.then(result => {\n if (shouldStop(result)) {\n return Promise.resolve(result);\n }\n return loop();\n });\n };\n return loop();\n}\nfunction firstParallel(promiseList, shouldStop = t => !!t, defaultValue = null) {\n if (promiseList.length === 0) {\n return Promise.resolve(defaultValue);\n }\n let todo = promiseList.length;\n const finish = () => {\n todo = -1;\n for (const promise of promiseList) {\n promise.cancel?.();\n }\n };\n return new Promise((resolve, reject) => {\n for (const promise of promiseList) {\n promise.then(result => {\n if (--todo >= 0 && shouldStop(result)) {\n finish();\n resolve(result);\n }\n else if (todo === 0) {\n resolve(defaultValue);\n }\n })\n .catch(err => {\n if (--todo >= 0) {\n finish();\n reject(err);\n }\n });\n }\n });\n}\n/**\n * A helper to queue N promises and run them all with a max degree of parallelism. The helper\n * ensures that at any time no more than M promises are running at the same time.\n */\nclass Limiter {\n constructor(maxDegreeOfParalellism) {\n this._size = 0;\n this._isDisposed = false;\n this.maxDegreeOfParalellism = maxDegreeOfParalellism;\n this.outstandingPromises = [];\n this.runningPromises = 0;\n this._onDrained = new event_1.Emitter();\n }\n /**\n *\n * @returns A promise that resolved when all work is done (onDrained) or when\n * there is nothing to do\n */\n whenIdle() {\n return this.size > 0\n ? event_1.Event.toPromise(this.onDrained)\n : Promise.resolve();\n }\n get onDrained() {\n return this._onDrained.event;\n }\n get size() {\n return this._size;\n }\n queue(factory) {\n if (this._isDisposed) {\n throw new Error('Object has been disposed');\n }\n this._size++;\n return new Promise((c, e) => {\n this.outstandingPromises.push({ factory, c, e });\n this.consume();\n });\n }\n consume() {\n while (this.outstandingPromises.length && this.runningPromises < this.maxDegreeOfParalellism) {\n const iLimitedTask = this.outstandingPromises.shift();\n this.runningPromises++;\n const promise = iLimitedTask.factory();\n promise.then(iLimitedTask.c, iLimitedTask.e);\n promise.then(() => this.consumed(), () => this.consumed());\n }\n }\n consumed() {\n if (this._isDisposed) {\n return;\n }\n this.runningPromises--;\n if (--this._size === 0) {\n this._onDrained.fire();\n }\n if (this.outstandingPromises.length > 0) {\n this.consume();\n }\n }\n clear() {\n if (this._isDisposed) {\n throw new Error('Object has been disposed');\n }\n this.outstandingPromises.length = 0;\n this._size = this.runningPromises;\n }\n dispose() {\n this._isDisposed = true;\n this.outstandingPromises.length = 0; // stop further processing\n this._size = 0;\n this._onDrained.dispose();\n }\n}\nexports.Limiter = Limiter;\n/**\n * A queue is handles one promise at a time and guarantees that at any time only one promise is executing.\n */\nclass Queue extends Limiter {\n constructor() {\n super(1);\n }\n}\nexports.Queue = Queue;\n/**\n * Same as `Queue`, ensures that only 1 task is executed at the same time. The difference to `Queue` is that\n * there is only 1 task about to be scheduled next. As such, calling `queue` while a task is executing will\n * replace the currently queued task until it executes.\n *\n * As such, the returned promise may not be from the factory that is passed in but from the next factory that\n * is running after having called `queue`.\n */\nclass LimitedQueue {\n constructor() {\n this.sequentializer = new TaskSequentializer();\n this.tasks = 0;\n }\n queue(factory) {\n if (!this.sequentializer.isRunning()) {\n return this.sequentializer.run(this.tasks++, factory());\n }\n return this.sequentializer.queue(() => {\n return this.sequentializer.run(this.tasks++, factory());\n });\n }\n}\nexports.LimitedQueue = LimitedQueue;\nclass TimeoutTimer {\n constructor(runner, timeout) {\n this._isDisposed = false;\n this._token = -1;\n if (typeof runner === 'function' && typeof timeout === 'number') {\n this.setIfNotSet(runner, timeout);\n }\n }\n dispose() {\n this.cancel();\n this._isDisposed = true;\n }\n cancel() {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n cancelAndSet(runner, timeout) {\n if (this._isDisposed) {\n throw new errors_1.BugIndicatingError(`Calling 'cancelAndSet' on a disposed TimeoutTimer`);\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n setIfNotSet(runner, timeout) {\n if (this._isDisposed) {\n throw new errors_1.BugIndicatingError(`Calling 'setIfNotSet' on a disposed TimeoutTimer`);\n }\n if (this._token !== -1) {\n // timer is already set\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\nexports.TimeoutTimer = TimeoutTimer;\nclass IntervalTimer {\n constructor() {\n this.disposable = undefined;\n this.isDisposed = false;\n }\n cancel() {\n this.disposable?.dispose();\n this.disposable = undefined;\n }\n cancelAndSet(runner, interval, context = globalThis) {\n if (this.isDisposed) {\n throw new errors_1.BugIndicatingError(`Calling 'cancelAndSet' on a disposed IntervalTimer`);\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this.disposable = (0, lifecycle_1.toDisposable)(() => {\n context.clearInterval(handle);\n this.disposable = undefined;\n });\n }\n dispose() {\n this.cancel();\n this.isDisposed = true;\n }\n}\nexports.IntervalTimer = IntervalTimer;\nclass RunOnceScheduler {\n constructor(runner, delay) {\n this.timeoutToken = -1;\n this.runner = runner;\n this.timeout = delay;\n this.timeoutHandler = this.onTimeout.bind(this);\n }\n /**\n * Dispose RunOnceScheduler\n */\n dispose() {\n this.cancel();\n this.runner = null;\n }\n /**\n * Cancel current scheduled runner (if any).\n */\n cancel() {\n if (this.isScheduled()) {\n clearTimeout(this.timeoutToken);\n this.timeoutToken = -1;\n }\n }\n /**\n * Cancel previous runner (if any) & schedule a new runner.\n */\n schedule(delay = this.timeout) {\n this.cancel();\n this.timeoutToken = setTimeout(this.timeoutHandler, delay);\n }\n get delay() {\n return this.timeout;\n }\n set delay(value) {\n this.timeout = value;\n }\n /**\n * Returns true if scheduled.\n */\n isScheduled() {\n return this.timeoutToken !== -1;\n }\n flush() {\n if (this.isScheduled()) {\n this.cancel();\n this.doRun();\n }\n }\n onTimeout() {\n this.timeoutToken = -1;\n if (this.runner) {\n this.doRun();\n }\n }\n doRun() {\n this.runner?.();\n }\n}\nexports.RunOnceScheduler = RunOnceScheduler;\n/**\n * Same as `RunOnceScheduler`, but doesn't count the time spent in sleep mode.\n * > **NOTE**: Only offers 1s resolution.\n *\n * When calling `setTimeout` with 3hrs, and putting the computer immediately to sleep\n * for 8hrs, `setTimeout` will fire **as soon as the computer wakes from sleep**. But\n * this scheduler will execute 3hrs **after waking the computer from sleep**.\n */\nclass ProcessTimeRunOnceScheduler {\n constructor(runner, delay) {\n if (delay % 1000 !== 0) {\n console.warn(`ProcessTimeRunOnceScheduler resolution is 1s, ${delay}ms is not a multiple of 1000ms.`);\n }\n this.runner = runner;\n this.timeout = delay;\n this.counter = 0;\n this.intervalToken = -1;\n this.intervalHandler = this.onInterval.bind(this);\n }\n dispose() {\n this.cancel();\n this.runner = null;\n }\n cancel() {\n if (this.isScheduled()) {\n clearInterval(this.intervalToken);\n this.intervalToken = -1;\n }\n }\n /**\n * Cancel previous runner (if any) & schedule a new runner.\n */\n schedule(delay = this.timeout) {\n if (delay % 1000 !== 0) {\n console.warn(`ProcessTimeRunOnceScheduler resolution is 1s, ${delay}ms is not a multiple of 1000ms.`);\n }\n this.cancel();\n this.counter = Math.ceil(delay / 1000);\n this.intervalToken = setInterval(this.intervalHandler, 1000);\n }\n /**\n * Returns true if scheduled.\n */\n isScheduled() {\n return this.intervalToken !== -1;\n }\n onInterval() {\n this.counter--;\n if (this.counter > 0) {\n // still need to wait\n return;\n }\n // time elapsed\n clearInterval(this.intervalToken);\n this.intervalToken = -1;\n this.runner?.();\n }\n}\nexports.ProcessTimeRunOnceScheduler = ProcessTimeRunOnceScheduler;\nclass RunOnceWorker extends RunOnceScheduler {\n constructor(runner, timeout) {\n super(runner, timeout);\n this.units = [];\n }\n work(unit) {\n this.units.push(unit);\n if (!this.isScheduled()) {\n this.schedule();\n }\n }\n doRun() {\n const units = this.units;\n this.units = [];\n this.runner?.(units);\n }\n dispose() {\n this.units = [];\n super.dispose();\n }\n}\nexports.RunOnceWorker = RunOnceWorker;\n/**\n * The `ThrottledWorker` will accept units of work `T`\n * to handle. The contract is:\n * * there is a maximum of units the worker can handle at once (via `maxWorkChunkSize`)\n * * there is a maximum of units the worker will keep in memory for processing (via `maxBufferedWork`)\n * * after having handled `maxWorkChunkSize` units, the worker needs to rest (via `throttleDelay`)\n */\nclass ThrottledWorker extends lifecycle_1.Disposable {\n constructor(options, handler) {\n super();\n this.options = options;\n this.handler = handler;\n this.pendingWork = [];\n this.throttler = this._register(new lifecycle_1.MutableDisposable());\n this.disposed = false;\n }\n /**\n * The number of work units that are pending to be processed.\n */\n get pending() { return this.pendingWork.length; }\n /**\n * Add units to be worked on. Use `pending` to figure out\n * how many units are not yet processed after this method\n * was called.\n *\n * @returns whether the work was accepted or not. If the\n * worker is disposed, it will not accept any more work.\n * If the number of pending units would become larger\n * than `maxPendingWork`, more work will also not be accepted.\n */\n work(units) {\n if (this.disposed) {\n return false; // work not accepted: disposed\n }\n // Check for reaching maximum of pending work\n if (typeof this.options.maxBufferedWork === 'number') {\n // Throttled: simple check if pending + units exceeds max pending\n if (this.throttler.value) {\n if (this.pending + units.length > this.options.maxBufferedWork) {\n return false; // work not accepted: too much pending work\n }\n }\n // Unthrottled: same as throttled, but account for max chunk getting\n // worked on directly without being pending\n else {\n if (this.pending + units.length - this.options.maxWorkChunkSize > this.options.maxBufferedWork) {\n return false; // work not accepted: too much pending work\n }\n }\n }\n // Add to pending units first\n for (const unit of units) {\n this.pendingWork.push(unit);\n }\n // If not throttled, start working directly\n // Otherwise, when the throttle delay has\n // past, pending work will be worked again.\n if (!this.throttler.value) {\n this.doWork();\n }\n return true; // work accepted\n }\n doWork() {\n // Extract chunk to handle and handle it\n this.handler(this.pendingWork.splice(0, this.options.maxWorkChunkSize));\n // If we have remaining work, schedule it after a delay\n if (this.pendingWork.length > 0) {\n this.throttler.value = new RunOnceScheduler(() => {\n this.throttler.clear();\n this.doWork();\n }, this.options.throttleDelay);\n this.throttler.value.schedule();\n }\n }\n dispose() {\n super.dispose();\n this.disposed = true;\n }\n}\nexports.ThrottledWorker = ThrottledWorker;\n(function () {\n if (typeof globalThis.requestIdleCallback !== 'function' || typeof globalThis.cancelIdleCallback !== 'function') {\n exports._runWhenIdle = (_targetWindow, runner) => {\n (0, platform_1.setTimeout0)(() => {\n if (disposed) {\n return;\n }\n const end = Date.now() + 15; // one frame at 64fps\n const deadline = {\n didTimeout: true,\n timeRemaining() {\n return Math.max(0, end - Date.now());\n }\n };\n runner(Object.freeze(deadline));\n });\n let disposed = false;\n return {\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n }\n };\n };\n }\n else {\n exports._runWhenIdle = (targetWindow, runner, timeout) => {\n const handle = targetWindow.requestIdleCallback(runner, typeof timeout === 'number' ? { timeout } : undefined);\n let disposed = false;\n return {\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n targetWindow.cancelIdleCallback(handle);\n }\n };\n };\n }\n exports.runWhenGlobalIdle = (runner) => (0, exports._runWhenIdle)(globalThis, runner);\n})();\nclass AbstractIdleValue {\n constructor(targetWindow, executor) {\n this._didRun = false;\n this._executor = () => {\n try {\n this._value = executor();\n }\n catch (err) {\n this._error = err;\n }\n finally {\n this._didRun = true;\n }\n };\n this._handle = (0, exports._runWhenIdle)(targetWindow, () => this._executor());\n }\n dispose() {\n this._handle.dispose();\n }\n get value() {\n if (!this._didRun) {\n this._handle.dispose();\n this._executor();\n }\n if (this._error) {\n throw this._error;\n }\n return this._value;\n }\n get isInitialized() {\n return this._didRun;\n }\n}\nexports.AbstractIdleValue = AbstractIdleValue;\n/**\n * An `IdleValue` that always uses the current window (which might be throttled or inactive)\n *\n * **Note** that there is `dom.ts#WindowIdleValue` which is better suited when running inside a browser\n * context\n */\nclass GlobalIdleValue extends AbstractIdleValue {\n constructor(executor) {\n super(globalThis, executor);\n }\n}\nexports.GlobalIdleValue = GlobalIdleValue;\n//#endregion\nasync function retry(task, delay, retries) {\n let lastError;\n for (let i = 0; i < retries; i++) {\n try {\n return await task();\n }\n catch (error) {\n lastError = error;\n await timeout(delay);\n }\n }\n throw lastError;\n}\n/**\n * @deprecated use `LimitedQueue` instead for an easier to use API\n */\nclass TaskSequentializer {\n isRunning(taskId) {\n if (typeof taskId === 'number') {\n return this._running?.taskId === taskId;\n }\n return !!this._running;\n }\n get running() {\n return this._running?.promise;\n }\n cancelRunning() {\n this._running?.cancel();\n }\n run(taskId, promise, onCancel) {\n this._running = { taskId, cancel: () => onCancel?.(), promise };\n promise.then(() => this.doneRunning(taskId), () => this.doneRunning(taskId));\n return promise;\n }\n doneRunning(taskId) {\n if (this._running && taskId === this._running.taskId) {\n // only set running to done if the promise finished that is associated with that taskId\n this._running = undefined;\n // schedule the queued task now that we are free if we have any\n this.runQueued();\n }\n }\n runQueued() {\n if (this._queued) {\n const queued = this._queued;\n this._queued = undefined;\n // Run queued task and complete on the associated promise\n queued.run().then(queued.promiseResolve, queued.promiseReject);\n }\n }\n /**\n * Note: the promise to schedule as next run MUST itself call `run`.\n * Otherwise, this sequentializer will report `false` for `isRunning`\n * even when this task is running. Missing this detail means that\n * suddenly multiple tasks will run in parallel.\n */\n queue(run) {\n // this is our first queued task, so we create associated promise with it\n // so that we can return a promise that completes when the task has\n // completed.\n if (!this._queued) {\n const { promise, resolve: promiseResolve, reject: promiseReject } = promiseWithResolvers();\n this._queued = {\n run,\n promise,\n promiseResolve: promiseResolve,\n promiseReject: promiseReject\n };\n }\n // we have a previous queued task, just overwrite it\n else {\n this._queued.run = run;\n }\n return this._queued.promise;\n }\n hasQueued() {\n return !!this._queued;\n }\n async join() {\n return this._queued?.promise ?? this._running?.promise;\n }\n}\nexports.TaskSequentializer = TaskSequentializer;\n//#endregion\n//#region\n/**\n * The `IntervalCounter` allows to count the number\n * of calls to `increment()` over a duration of\n * `interval`. This utility can be used to conditionally\n * throttle a frequent task when a certain threshold\n * is reached.\n */\nclass IntervalCounter {\n constructor(interval, nowFn = () => Date.now()) {\n this.interval = interval;\n this.nowFn = nowFn;\n this.lastIncrementTime = 0;\n this.value = 0;\n }\n increment() {\n const now = this.nowFn();\n // We are outside of the range of `interval` and as such\n // start counting from 0 and remember the time\n if (now - this.lastIncrementTime > this.interval) {\n this.lastIncrementTime = now;\n this.value = 0;\n }\n this.value++;\n return this.value;\n }\n}\nexports.IntervalCounter = IntervalCounter;\nvar DeferredOutcome;\n(function (DeferredOutcome) {\n DeferredOutcome[DeferredOutcome[\"Resolved\"] = 0] = \"Resolved\";\n DeferredOutcome[DeferredOutcome[\"Rejected\"] = 1] = \"Rejected\";\n})(DeferredOutcome || (DeferredOutcome = {}));\n/**\n * Creates a promise whose resolution or rejection can be controlled imperatively.\n */\nclass DeferredPromise {\n get isRejected() {\n return this.outcome?.outcome === DeferredOutcome.Rejected;\n }\n get isResolved() {\n return this.outcome?.outcome === DeferredOutcome.Resolved;\n }\n get isSettled() {\n return !!this.outcome;\n }\n get value() {\n return this.outcome?.outcome === DeferredOutcome.Resolved ? this.outcome?.value : undefined;\n }\n constructor() {\n this.p = new Promise((c, e) => {\n this.completeCallback = c;\n this.errorCallback = e;\n });\n }\n complete(value) {\n return new Promise(resolve => {\n this.completeCallback(value);\n this.outcome = { outcome: DeferredOutcome.Resolved, value };\n resolve();\n });\n }\n error(err) {\n return new Promise(resolve => {\n this.errorCallback(err);\n this.outcome = { outcome: DeferredOutcome.Rejected, value: err };\n resolve();\n });\n }\n cancel() {\n return this.error(new errors_1.CancellationError());\n }\n}\nexports.DeferredPromise = DeferredPromise;\n//#endregion\n//#region Promises\nvar Promises;\n(function (Promises) {\n /**\n * A drop-in replacement for `Promise.all` with the only difference\n * that the method awaits every promise to either fulfill or reject.\n *\n * Similar to `Promise.all`, only the first error will be returned\n * if any.\n */\n async function settled(promises) {\n let firstError = undefined;\n const result = await Promise.all(promises.map(promise => promise.then(value => value, error => {\n if (!firstError) {\n firstError = error;\n }\n return undefined; // do not rethrow so that other promises can settle\n })));\n if (typeof firstError !== 'undefined') {\n throw firstError;\n }\n return result; // cast is needed and protected by the `throw` above\n }\n Promises.settled = settled;\n /**\n * A helper to create a new `Promise<T>` with a body that is a promise\n * itself. By default, an error that raises from the async body will\n * end up as a unhandled rejection, so this utility properly awaits the\n * body and rejects the promise as a normal promise does without async\n * body.\n *\n * This method should only be used in rare cases where otherwise `async`\n * cannot be used (e.g. when callbacks are involved that require this).\n */\n function withAsyncBody(bodyFn) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n await bodyFn(resolve, reject);\n }\n catch (error) {\n reject(error);\n }\n });\n }\n Promises.withAsyncBody = withAsyncBody;\n})(Promises || (exports.Promises = Promises = {}));\nclass StatefulPromise {\n get value() { return this._value; }\n get error() { return this._error; }\n get isResolved() { return this._isResolved; }\n constructor(promise) {\n this._value = undefined;\n this._error = undefined;\n this._isResolved = false;\n this.promise = promise.then(value => {\n this._value = value;\n this._isResolved = true;\n return value;\n }, error => {\n this._error = error;\n this._isResolved = true;\n throw error;\n });\n }\n /**\n * Returns the resolved value.\n * Throws if the promise is not resolved yet.\n */\n requireValue() {\n if (!this._isResolved) {\n throw new errors_1.BugIndicatingError('Promise is not resolved yet');\n }\n if (this._error) {\n throw this._error;\n }\n return this._value;\n }\n}\nexports.StatefulPromise = StatefulPromise;\nclass LazyStatefulPromise {\n constructor(_compute) {\n this._compute = _compute;\n this._promise = new lazy_1.Lazy(() => new StatefulPromise(this._compute()));\n }\n /**\n * Returns the resolved value.\n * Throws if the promise is not resolved yet.\n */\n requireValue() {\n return this._promise.value.requireValue();\n }\n /**\n * Returns the promise (and triggers a computation of the promise if not yet done so).\n */\n getPromise() {\n return this._promise.value.promise;\n }\n /**\n * Reads the current value without triggering a computation of the promise.\n */\n get currentValue() {\n return this._promise.rawValue?.value;\n }\n}\nexports.LazyStatefulPromise = LazyStatefulPromise;\n//#endregion\n//#region\nvar AsyncIterableSourceState;\n(function (AsyncIterableSourceState) {\n AsyncIterableSourceState[AsyncIterableSourceState[\"Initial\"] = 0] = \"Initial\";\n AsyncIterableSourceState[AsyncIterableSourceState[\"DoneOK\"] = 1] = \"DoneOK\";\n AsyncIterableSourceState[AsyncIterableSourceState[\"DoneError\"] = 2] = \"DoneError\";\n})(AsyncIterableSourceState || (AsyncIterableSourceState = {}));\n/**\n * A rich implementation for an `AsyncIterable<T>`.\n */\nclass AsyncIterableObject {\n static fromArray(items) {\n return new AsyncIterableObject((writer) => {\n writer.emitMany(items);\n });\n }\n static fromPromise(promise) {\n return new AsyncIterableObject(async (emitter) => {\n emitter.emitMany(await promise);\n });\n }\n static fromPromises(promises) {\n return new AsyncIterableObject(async (emitter) => {\n await Promise.all(promises.map(async (p) => emitter.emitOne(await p)));\n });\n }\n static merge(iterables) {\n return new AsyncIterableObject(async (emitter) => {\n await Promise.all(iterables.map(async (iterable) => {\n for await (const item of iterable) {\n emitter.emitOne(item);\n }\n }));\n });\n }\n static { this.EMPTY = AsyncIterableObject.fromArray([]); }\n constructor(executor, onReturn) {\n this._state = AsyncIterableSourceState.Initial;\n this._results = [];\n this._error = null;\n this._onReturn = onReturn;\n this._onStateChanged = new event_1.Emitter();\n queueMicrotask(async () => {\n const writer = {\n emitOne: (item) => this.emitOne(item),\n emitMany: (items) => this.emitMany(items),\n reject: (error) => this.reject(error)\n };\n try {\n await Promise.resolve(executor(writer));\n this.resolve();\n }\n catch (err) {\n this.reject(err);\n }\n finally {\n writer.emitOne = undefined;\n writer.emitMany = undefined;\n writer.reject = undefined;\n }\n });\n }\n [Symbol.asyncIterator]() {\n let i = 0;\n return {\n next: async () => {\n do {\n if (this._state === AsyncIterableSourceState.DoneError) {\n throw this._error;\n }\n if (i < this._results.length) {\n return { done: false, value: this._results[i++] };\n }\n if (this._state === AsyncIterableSourceState.DoneOK) {\n return { done: true, value: undefined };\n }\n await event_1.Event.toPromise(this._onStateChanged.event);\n } while (true);\n },\n return: async () => {\n this._onReturn?.();\n return { done: true, value: undefined };\n }\n };\n }\n static map(iterable, mapFn) {\n return new AsyncIterableObject(async (emitter) => {\n for await (const item of iterable) {\n emitter.emitOne(mapFn(item));\n }\n });\n }\n map(mapFn) {\n return AsyncIterableObject.map(this, mapFn);\n }\n static filter(iterable, filterFn) {\n return new AsyncIterableObject(async (emitter) => {\n for await (const item of iterable) {\n if (filterFn(item)) {\n emitter.emitOne(item);\n }\n }\n });\n }\n filter(filterFn) {\n return AsyncIterableObject.filter(this, filterFn);\n }\n static coalesce(iterable) {\n return AsyncIterableObject.filter(iterable, item => !!item);\n }\n coalesce() {\n return AsyncIterableObject.coalesce(this);\n }\n static async toPromise(iterable) {\n const result = [];\n for await (const item of iterable) {\n result.push(item);\n }\n return result;\n }\n toPromise() {\n return AsyncIterableObject.toPromise(this);\n }\n /**\n * The value will be appended at the end.\n *\n * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n */\n emitOne(value) {\n if (this._state !== AsyncIterableSourceState.Initial) {\n return;\n }\n // it is important to add new values at the end,\n // as we may have iterators already running on the array\n this._results.push(value);\n this._onStateChanged.fire();\n }\n /**\n * The values will be appended at the end.\n *\n * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n */\n emitMany(values) {\n if (this._state !== AsyncIterableSourceState.Initial) {\n return;\n }\n // it is important to add new values at the end,\n // as we may have iterators already running on the array\n this._results = this._results.concat(values);\n this._onStateChanged.fire();\n }\n /**\n * Calling `resolve()` will mark the result array as complete.\n *\n * **NOTE** `resolve()` must be called, otherwise all consumers of this iterable will hang indefinitely, similar to a non-resolved promise.\n * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n */\n resolve() {\n if (this._state !== AsyncIterableSourceState.Initial) {\n return;\n }\n this._state = AsyncIterableSourceState.DoneOK;\n this._onStateChanged.fire();\n }\n /**\n * Writing an error will permanently invalidate this iterable.\n * The current users will receive an error thrown, as will all future users.\n *\n * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n */\n reject(error) {\n if (this._state !== AsyncIterableSourceState.Initial) {\n return;\n }\n this._state = AsyncIterableSourceState.DoneError;\n this._error = error;\n this._onStateChanged.fire();\n }\n}\nexports.AsyncIterableObject = AsyncIterableObject;\nclass CancelableAsyncIterableObject extends AsyncIterableObject {\n constructor(_source, executor) {\n super(executor);\n this._source = _source;\n }\n cancel() {\n this._source.cancel();\n }\n}\nexports.CancelableAsyncIterableObject = CancelableAsyncIterableObject;\nfunction createCancelableAsyncIterable(callback) {\n const source = new cancellation_1.CancellationTokenSource();\n const innerIterable = callback(source.token);\n return new CancelableAsyncIterableObject(source, async (emitter) => {\n const subscription = source.token.onCancellationRequested(() => {\n subscription.dispose();\n source.dispose();\n emitter.reject(new errors_1.CancellationError());\n });\n try {\n for await (const item of innerIterable) {\n if (source.token.isCancellationRequested) {\n // canceled in the meantime\n return;\n }\n emitter.emitOne(item);\n }\n subscription.dispose();\n source.dispose();\n }\n catch (err) {\n subscription.dispose();\n source.dispose();\n emitter.reject(err);\n }\n });\n}\nclass AsyncIterableSource {\n /**\n *\n * @param onReturn A function that will be called when consuming the async iterable\n * has finished by the consumer, e.g the for-await-loop has be existed (break, return) early.\n * This is NOT called when resolving this source by its owner.\n */\n constructor(onReturn) {\n this._deferred = new DeferredPromise();\n this._asyncIterable = new AsyncIterableObject(emitter => {\n if (earlyError) {\n emitter.reject(earlyError);\n return;\n }\n if (earlyItems) {\n emitter.emitMany(earlyItems);\n }\n this._errorFn = (error) => emitter.reject(error);\n this._emitFn = (item) => emitter.emitOne(item);\n return this._deferred.p;\n }, onReturn);\n let earlyError;\n let earlyItems;\n this._emitFn = (item) => {\n if (!earlyItems) {\n earlyItems = [];\n }\n earlyItems.push(item);\n };\n this._errorFn = (error) => {\n if (!earlyError) {\n earlyError = error;\n }\n };\n }\n get asyncIterable() {\n return this._asyncIterable;\n }\n resolve() {\n this._deferred.complete();\n }\n reject(error) {\n this._errorFn(error);\n this._deferred.complete();\n }\n emitOne(item) {\n this._emitFn(item);\n }\n}\nexports.AsyncIterableSource = AsyncIterableSource;\n//#endregion\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancellationTokenSource = exports.CancellationToken = void 0;\nexports.cancelOnDispose = cancelOnDispose;\nconst event_1 = require(\"vs/base/common/event\");\nconst shortcutEvent = Object.freeze(function (callback, context) {\n const handle = setTimeout(callback.bind(context), 0);\n return { dispose() { clearTimeout(handle); } };\n});\nvar CancellationToken;\n(function (CancellationToken) {\n function isCancellationToken(thing) {\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) {\n return true;\n }\n if (thing instanceof MutableToken) {\n return true;\n }\n if (!thing || typeof thing !== 'object') {\n return false;\n }\n return typeof thing.isCancellationRequested === 'boolean'\n && typeof thing.onCancellationRequested === 'function';\n }\n CancellationToken.isCancellationToken = isCancellationToken;\n CancellationToken.None = Object.freeze({\n isCancellationRequested: false,\n onCancellationRequested: event_1.Event.None\n });\n CancellationToken.Cancelled = Object.freeze({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent\n });\n})(CancellationToken || (exports.CancellationToken = CancellationToken = {}));\nclass MutableToken {\n constructor() {\n this._isCancelled = false;\n this._emitter = null;\n }\n cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(undefined);\n this.dispose();\n }\n }\n }\n get isCancellationRequested() {\n return this._isCancelled;\n }\n get onCancellationRequested() {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new event_1.Emitter();\n }\n return this._emitter.event;\n }\n dispose() {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = null;\n }\n }\n}\nclass CancellationTokenSource {\n constructor(parent) {\n this._token = undefined;\n this._parentListener = undefined;\n this._parentListener = parent && parent.onCancellationRequested(this.cancel, this);\n }\n get token() {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n cancel() {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = CancellationToken.Cancelled;\n }\n else if (this._token instanceof MutableToken) {\n // actually cancel\n this._token.cancel();\n }\n }\n dispose(cancel = false) {\n if (cancel) {\n this.cancel();\n }\n this._parentListener?.dispose();\n if (!this._token) {\n // ensure to initialize with an empty token if we had none\n this._token = CancellationToken.None;\n }\n else if (this._token instanceof MutableToken) {\n // actually dispose\n this._token.dispose();\n }\n }\n}\nexports.CancellationTokenSource = CancellationTokenSource;\nfunction cancelOnDispose(store) {\n const source = new CancellationTokenSource();\n store.add({ dispose() { source.cancel(); } });\n return source.token;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CharCode = void 0;\n// Names from https://blog.codinghorror.com/ascii-pronunciation-rules-for-programmers/\n/**\n * An inlined enum containing useful character codes (to be used with String.charCodeAt).\n * Please leave the const keyword such that it gets inlined when compiled to JavaScript!\n */\nvar CharCode;\n(function (CharCode) {\n CharCode[CharCode[\"Null\"] = 0] = \"Null\";\n /**\n * The `\\b` character.\n */\n CharCode[CharCode[\"Backspace\"] = 8] = \"Backspace\";\n /**\n * The `\\t` character.\n */\n CharCode[CharCode[\"Tab\"] = 9] = \"Tab\";\n /**\n * The `\\n` character.\n */\n CharCode[CharCode[\"LineFeed\"] = 10] = \"LineFeed\";\n /**\n * The `\\r` character.\n */\n CharCode[CharCode[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n CharCode[CharCode[\"Space\"] = 32] = \"Space\";\n /**\n * The `!` character.\n */\n CharCode[CharCode[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n /**\n * The `\"` character.\n */\n CharCode[CharCode[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n /**\n * The `#` character.\n */\n CharCode[CharCode[\"Hash\"] = 35] = \"Hash\";\n /**\n * The `$` character.\n */\n CharCode[CharCode[\"DollarSign\"] = 36] = \"DollarSign\";\n /**\n * The `%` character.\n */\n CharCode[CharCode[\"PercentSign\"] = 37] = \"PercentSign\";\n /**\n * The `&` character.\n */\n CharCode[CharCode[\"Ampersand\"] = 38] = \"Ampersand\";\n /**\n * The `'` character.\n */\n CharCode[CharCode[\"SingleQuote\"] = 39] = \"SingleQuote\";\n /**\n * The `(` character.\n */\n CharCode[CharCode[\"OpenParen\"] = 40] = \"OpenParen\";\n /**\n * The `)` character.\n */\n CharCode[CharCode[\"CloseParen\"] = 41] = \"CloseParen\";\n /**\n * The `*` character.\n */\n CharCode[CharCode[\"Asterisk\"] = 42] = \"Asterisk\";\n /**\n * The `+` character.\n */\n CharCode[CharCode[\"Plus\"] = 43] = \"Plus\";\n /**\n * The `,` character.\n */\n CharCode[CharCode[\"Comma\"] = 44] = \"Comma\";\n /**\n * The `-` character.\n */\n CharCode[CharCode[\"Dash\"] = 45] = \"Dash\";\n /**\n * The `.` character.\n */\n CharCode[CharCode[\"Period\"] = 46] = \"Period\";\n /**\n * The `/` character.\n */\n CharCode[CharCode[\"Slash\"] = 47] = \"Slash\";\n CharCode[CharCode[\"Digit0\"] = 48] = \"Digit0\";\n CharCode[CharCode[\"Digit1\"] = 49] = \"Digit1\";\n CharCode[CharCode[\"Digit2\"] = 50] = \"Digit2\";\n CharCode[CharCode[\"Digit3\"] = 51] = \"Digit3\";\n CharCode[CharCode[\"Digit4\"] = 52] = \"Digit4\";\n CharCode[CharCode[\"Digit5\"] = 53] = \"Digit5\";\n CharCode[CharCode[\"Digit6\"] = 54] = \"Digit6\";\n CharCode[CharCode[\"Digit7\"] = 55] = \"Digit7\";\n CharCode[CharCode[\"Digit8\"] = 56] = \"Digit8\";\n CharCode[CharCode[\"Digit9\"] = 57] = \"Digit9\";\n /**\n * The `:` character.\n */\n CharCode[CharCode[\"Colon\"] = 58] = \"Colon\";\n /**\n * The `;` character.\n */\n CharCode[CharCode[\"Semicolon\"] = 59] = \"Semicolon\";\n /**\n * The `<` character.\n */\n CharCode[CharCode[\"LessThan\"] = 60] = \"LessThan\";\n /**\n * The `=` character.\n */\n CharCode[CharCode[\"Equals\"] = 61] = \"Equals\";\n /**\n * The `>` character.\n */\n CharCode[CharCode[\"GreaterThan\"] = 62] = \"GreaterThan\";\n /**\n * The `?` character.\n */\n CharCode[CharCode[\"QuestionMark\"] = 63] = \"QuestionMark\";\n /**\n * The `@` character.\n */\n CharCode[CharCode[\"AtSign\"] = 64] = \"AtSign\";\n CharCode[CharCode[\"A\"] = 65] = \"A\";\n CharCode[CharCode[\"B\"] = 66] = \"B\";\n CharCode[CharCode[\"C\"] = 67] = \"C\";\n CharCode[CharCode[\"D\"] = 68] = \"D\";\n CharCode[CharCode[\"E\"] = 69] = \"E\";\n CharCode[CharCode[\"F\"] = 70] = \"F\";\n CharCode[CharCode[\"G\"] = 71] = \"G\";\n CharCode[CharCode[\"H\"] = 72] = \"H\";\n CharCode[CharCode[\"I\"] = 73] = \"I\";\n CharCode[CharCode[\"J\"] = 74] = \"J\";\n CharCode[CharCode[\"K\"] = 75] = \"K\";\n CharCode[CharCode[\"L\"] = 76] = \"L\";\n CharCode[CharCode[\"M\"] = 77] = \"M\";\n CharCode[CharCode[\"N\"] = 78] = \"N\";\n CharCode[CharCode[\"O\"] = 79] = \"O\";\n CharCode[CharCode[\"P\"] = 80] = \"P\";\n CharCode[CharCode[\"Q\"] = 81] = \"Q\";\n CharCode[CharCode[\"R\"] = 82] = \"R\";\n CharCode[CharCode[\"S\"] = 83] = \"S\";\n CharCode[CharCode[\"T\"] = 84] = \"T\";\n CharCode[CharCode[\"U\"] = 85] = \"U\";\n CharCode[CharCode[\"V\"] = 86] = \"V\";\n CharCode[CharCode[\"W\"] = 87] = \"W\";\n CharCode[CharCode[\"X\"] = 88] = \"X\";\n CharCode[CharCode[\"Y\"] = 89] = \"Y\";\n CharCode[CharCode[\"Z\"] = 90] = \"Z\";\n /**\n * The `[` character.\n */\n CharCode[CharCode[\"OpenSquareBracket\"] = 91] = \"OpenSquareBracket\";\n /**\n * The `\\` character.\n */\n CharCode[CharCode[\"Backslash\"] = 92] = \"Backslash\";\n /**\n * The `]` character.\n */\n CharCode[CharCode[\"CloseSquareBracket\"] = 93] = \"CloseSquareBracket\";\n /**\n * The `^` character.\n */\n CharCode[CharCode[\"Caret\"] = 94] = \"Caret\";\n /**\n * The `_` character.\n */\n CharCode[CharCode[\"Underline\"] = 95] = \"Underline\";\n /**\n * The ``(`)`` character.\n */\n CharCode[CharCode[\"BackTick\"] = 96] = \"BackTick\";\n CharCode[CharCode[\"a\"] = 97] = \"a\";\n CharCode[CharCode[\"b\"] = 98] = \"b\";\n CharCode[CharCode[\"c\"] = 99] = \"c\";\n CharCode[CharCode[\"d\"] = 100] = \"d\";\n CharCode[CharCode[\"e\"] = 101] = \"e\";\n CharCode[CharCode[\"f\"] = 102] = \"f\";\n CharCode[CharCode[\"g\"] = 103] = \"g\";\n CharCode[CharCode[\"h\"] = 104] = \"h\";\n CharCode[CharCode[\"i\"] = 105] = \"i\";\n CharCode[CharCode[\"j\"] = 106] = \"j\";\n CharCode[CharCode[\"k\"] = 107] = \"k\";\n CharCode[CharCode[\"l\"] = 108] = \"l\";\n CharCode[CharCode[\"m\"] = 109] = \"m\";\n CharCode[CharCode[\"n\"] = 110] = \"n\";\n CharCode[CharCode[\"o\"] = 111] = \"o\";\n CharCode[CharCode[\"p\"] = 112] = \"p\";\n CharCode[CharCode[\"q\"] = 113] = \"q\";\n CharCode[CharCode[\"r\"] = 114] = \"r\";\n CharCode[CharCode[\"s\"] = 115] = \"s\";\n CharCode[CharCode[\"t\"] = 116] = \"t\";\n CharCode[CharCode[\"u\"] = 117] = \"u\";\n CharCode[CharCode[\"v\"] = 118] = \"v\";\n CharCode[CharCode[\"w\"] = 119] = \"w\";\n CharCode[CharCode[\"x\"] = 120] = \"x\";\n CharCode[CharCode[\"y\"] = 121] = \"y\";\n CharCode[CharCode[\"z\"] = 122] = \"z\";\n /**\n * The `{` character.\n */\n CharCode[CharCode[\"OpenCurlyBrace\"] = 123] = \"OpenCurlyBrace\";\n /**\n * The `|` character.\n */\n CharCode[CharCode[\"Pipe\"] = 124] = \"Pipe\";\n /**\n * The `}` character.\n */\n CharCode[CharCode[\"CloseCurlyBrace\"] = 125] = \"CloseCurlyBrace\";\n /**\n * The `~` character.\n */\n CharCode[CharCode[\"Tilde\"] = 126] = \"Tilde\";\n /**\n * The &nbsp; (no-break space) character.\n * Unicode Character 'NO-BREAK SPACE' (U+00A0)\n */\n CharCode[CharCode[\"NoBreakSpace\"] = 160] = \"NoBreakSpace\";\n CharCode[CharCode[\"U_Combining_Grave_Accent\"] = 768] = \"U_Combining_Grave_Accent\";\n CharCode[CharCode[\"U_Combining_Acute_Accent\"] = 769] = \"U_Combining_Acute_Accent\";\n CharCode[CharCode[\"U_Combining_Circumflex_Accent\"] = 770] = \"U_Combining_Circumflex_Accent\";\n CharCode[CharCode[\"U_Combining_Tilde\"] = 771] = \"U_Combining_Tilde\";\n CharCode[CharCode[\"U_Combining_Macron\"] = 772] = \"U_Combining_Macron\";\n CharCode[CharCode[\"U_Combining_Overline\"] = 773] = \"U_Combining_Overline\";\n CharCode[CharCode[\"U_Combining_Breve\"] = 774] = \"U_Combining_Breve\";\n CharCode[CharCode[\"U_Combining_Dot_Above\"] = 775] = \"U_Combining_Dot_Above\";\n CharCode[CharCode[\"U_Combining_Diaeresis\"] = 776] = \"U_Combining_Diaeresis\";\n CharCode[CharCode[\"U_Combining_Hook_Above\"] = 777] = \"U_Combining_Hook_Above\";\n CharCode[CharCode[\"U_Combining_Ring_Above\"] = 778] = \"U_Combining_Ring_Above\";\n CharCode[CharCode[\"U_Combining_Double_Acute_Accent\"] = 779] = \"U_Combining_Double_Acute_Accent\";\n CharCode[CharCode[\"U_Combining_Caron\"] = 780] = \"U_Combining_Caron\";\n CharCode[CharCode[\"U_Combining_Vertical_Line_Above\"] = 781] = \"U_Combining_Vertical_Line_Above\";\n CharCode[CharCode[\"U_Combining_Double_Vertical_Line_Above\"] = 782] = \"U_Combining_Double_Vertical_Line_Above\";\n CharCode[CharCode[\"U_Combining_Double_Grave_Accent\"] = 783] = \"U_Combining_Double_Grave_Accent\";\n CharCode[CharCode[\"U_Combining_Candrabindu\"] = 784] = \"U_Combining_Candrabindu\";\n CharCode[CharCode[\"U_Combining_Inverted_Breve\"] = 785] = \"U_Combining_Inverted_Breve\";\n CharCode[CharCode[\"U_Combining_Turned_Comma_Above\"] = 786] = \"U_Combining_Turned_Comma_Above\";\n CharCode[CharCode[\"U_Combining_Comma_Above\"] = 787] = \"U_Combining_Comma_Above\";\n CharCode[CharCode[\"U_Combining_Reversed_Comma_Above\"] = 788] = \"U_Combining_Reversed_Comma_Above\";\n CharCode[CharCode[\"U_Combining_Comma_Above_Right\"] = 789] = \"U_Combining_Comma_Above_Right\";\n CharCode[CharCode[\"U_Combining_Grave_Accent_Below\"] = 790] = \"U_Combining_Grave_Accent_Below\";\n CharCode[CharCode[\"U_Combining_Acute_Accent_Below\"] = 791] = \"U_Combining_Acute_Accent_Below\";\n CharCode[CharCode[\"U_Combining_Left_Tack_Below\"] = 792] = \"U_Combining_Left_Tack_Below\";\n CharCode[CharCode[\"U_Combining_Right_Tack_Below\"] = 793] = \"U_Combining_Right_Tack_Below\";\n CharCode[CharCode[\"U_Combining_Left_Angle_Above\"] = 794] = \"U_Combining_Left_Angle_Above\";\n CharCode[CharCode[\"U_Combining_Horn\"] = 795] = \"U_Combining_Horn\";\n CharCode[CharCode[\"U_Combining_Left_Half_Ring_Below\"] = 796] = \"U_Combining_Left_Half_Ring_Below\";\n CharCode[CharCode[\"U_Combining_Up_Tack_Below\"] = 797] = \"U_Combining_Up_Tack_Below\";\n CharCode[CharCode[\"U_Combining_Down_Tack_Below\"] = 798] = \"U_Combining_Down_Tack_Below\";\n CharCode[CharCode[\"U_Combining_Plus_Sign_Below\"] = 799] = \"U_Combining_Plus_Sign_Below\";\n CharCode[CharCode[\"U_Combining_Minus_Sign_Below\"] = 800] = \"U_Combining_Minus_Sign_Below\";\n CharCode[CharCode[\"U_Combining_Palatalized_Hook_Below\"] = 801] = \"U_Combining_Palatalized_Hook_Below\";\n CharCode[CharCode[\"U_Combining_Retroflex_Hook_Below\"] = 802] = \"U_Combining_Retroflex_Hook_Below\";\n CharCode[CharCode[\"U_Combining_Dot_Below\"] = 803] = \"U_Combining_Dot_Below\";\n CharCode[CharCode[\"U_Combining_Diaeresis_Below\"] = 804] = \"U_Combining_Diaeresis_Below\";\n CharCode[CharCode[\"U_Combining_Ring_Below\"] = 805] = \"U_Combining_Ring_Below\";\n CharCode[CharCode[\"U_Combining_Comma_Below\"] = 806] = \"U_Combining_Comma_Below\";\n CharCode[CharCode[\"U_Combining_Cedilla\"] = 807] = \"U_Combining_Cedilla\";\n CharCode[CharCode[\"U_Combining_Ogonek\"] = 808] = \"U_Combining_Ogonek\";\n CharCode[CharCode[\"U_Combining_Vertical_Line_Below\"] = 809] = \"U_Combining_Vertical_Line_Below\";\n CharCode[CharCode[\"U_Combining_Bridge_Below\"] = 810] = \"U_Combining_Bridge_Below\";\n CharCode[CharCode[\"U_Combining_Inverted_Double_Arch_Below\"] = 811] = \"U_Combining_Inverted_Double_Arch_Below\";\n CharCode[CharCode[\"U_Combining_Caron_Below\"] = 812] = \"U_Combining_Caron_Below\";\n CharCode[CharCode[\"U_Combining_Circumflex_Accent_Below\"] = 813] = \"U_Combining_Circumflex_Accent_Below\";\n CharCode[CharCode[\"U_Combining_Breve_Below\"] = 814] = \"U_Combining_Breve_Below\";\n CharCode[CharCode[\"U_Combining_Inverted_Breve_Below\"] = 815] = \"U_Combining_Inverted_Breve_Below\";\n CharCode[CharCode[\"U_Combining_Tilde_Below\"] = 816] = \"U_Combining_Tilde_Below\";\n CharCode[CharCode[\"U_Combining_Macron_Below\"] = 817] = \"U_Combining_Macron_Below\";\n CharCode[CharCode[\"U_Combining_Low_Line\"] = 818] = \"U_Combining_Low_Line\";\n CharCode[CharCode[\"U_Combining_Double_Low_Line\"] = 819] = \"U_Combining_Double_Low_Line\";\n CharCode[CharCode[\"U_Combining_Tilde_Overlay\"] = 820] = \"U_Combining_Tilde_Overlay\";\n CharCode[CharCode[\"U_Combining_Short_Stroke_Overlay\"] = 821] = \"U_Combining_Short_Stroke_Overlay\";\n CharCode[CharCode[\"U_Combining_Long_Stroke_Overlay\"] = 822] = \"U_Combining_Long_Stroke_Overlay\";\n CharCode[CharCode[\"U_Combining_Short_Solidus_Overlay\"] = 823] = \"U_Combining_Short_Solidus_Overlay\";\n CharCode[CharCode[\"U_Combining_Long_Solidus_Overlay\"] = 824] = \"U_Combining_Long_Solidus_Overlay\";\n CharCode[CharCode[\"U_Combining_Right_Half_Ring_Below\"] = 825] = \"U_Combining_Right_Half_Ring_Below\";\n CharCode[CharCode[\"U_Combining_Inverted_Bridge_Below\"] = 826] = \"U_Combining_Inverted_Bridge_Below\";\n CharCode[CharCode[\"U_Combining_Square_Below\"] = 827] = \"U_Combining_Square_Below\";\n CharCode[CharCode[\"U_Combining_Seagull_Below\"] = 828] = \"U_Combining_Seagull_Below\";\n CharCode[CharCode[\"U_Combining_X_Above\"] = 829] = \"U_Combining_X_Above\";\n CharCode[CharCode[\"U_Combining_Vertical_Tilde\"] = 830] = \"U_Combining_Vertical_Tilde\";\n CharCode[CharCode[\"U_Combining_Double_Overline\"] = 831] = \"U_Combining_Double_Overline\";\n CharCode[CharCode[\"U_Combining_Grave_Tone_Mark\"] = 832] = \"U_Combining_Grave_Tone_Mark\";\n CharCode[CharCode[\"U_Combining_Acute_Tone_Mark\"] = 833] = \"U_Combining_Acute_Tone_Mark\";\n CharCode[CharCode[\"U_Combining_Greek_Perispomeni\"] = 834] = \"U_Combining_Greek_Perispomeni\";\n CharCode[CharCode[\"U_Combining_Greek_Koronis\"] = 835] = \"U_Combining_Greek_Koronis\";\n CharCode[CharCode[\"U_Combining_Greek_Dialytika_Tonos\"] = 836] = \"U_Combining_Greek_Dialytika_Tonos\";\n CharCode[CharCode[\"U_Combining_Greek_Ypogegrammeni\"] = 837] = \"U_Combining_Greek_Ypogegrammeni\";\n CharCode[CharCode[\"U_Combining_Bridge_Above\"] = 838] = \"U_Combining_Bridge_Above\";\n CharCode[CharCode[\"U_Combining_Equals_Sign_Below\"] = 839] = \"U_Combining_Equals_Sign_Below\";\n CharCode[CharCode[\"U_Combining_Double_Vertical_Line_Below\"] = 840] = \"U_Combining_Double_Vertical_Line_Below\";\n CharCode[CharCode[\"U_Combining_Left_Angle_Below\"] = 841] = \"U_Combining_Left_Angle_Below\";\n CharCode[CharCode[\"U_Combining_Not_Tilde_Above\"] = 842] = \"U_Combining_Not_Tilde_Above\";\n CharCode[CharCode[\"U_Combining_Homothetic_Above\"] = 843] = \"U_Combining_Homothetic_Above\";\n CharCode[CharCode[\"U_Combining_Almost_Equal_To_Above\"] = 844] = \"U_Combining_Almost_Equal_To_Above\";\n CharCode[CharCode[\"U_Combining_Left_Right_Arrow_Below\"] = 845] = \"U_Combining_Left_Right_Arrow_Below\";\n CharCode[CharCode[\"U_Combining_Upwards_Arrow_Below\"] = 846] = \"U_Combining_Upwards_Arrow_Below\";\n CharCode[CharCode[\"U_Combining_Grapheme_Joiner\"] = 847] = \"U_Combining_Grapheme_Joiner\";\n CharCode[CharCode[\"U_Combining_Right_Arrowhead_Above\"] = 848] = \"U_Combining_Right_Arrowhead_Above\";\n CharCode[CharCode[\"U_Combining_Left_Half_Ring_Above\"] = 849] = \"U_Combining_Left_Half_Ring_Above\";\n CharCode[CharCode[\"U_Combining_Fermata\"] = 850] = \"U_Combining_Fermata\";\n CharCode[CharCode[\"U_Combining_X_Below\"] = 851] = \"U_Combining_X_Below\";\n CharCode[CharCode[\"U_Combining_Left_Arrowhead_Below\"] = 852] = \"U_Combining_Left_Arrowhead_Below\";\n CharCode[CharCode[\"U_Combining_Right_Arrowhead_Below\"] = 853] = \"U_Combining_Right_Arrowhead_Below\";\n CharCode[CharCode[\"U_Combining_Right_Arrowhead_And_Up_Arrowhead_Below\"] = 854] = \"U_Combining_Right_Arrowhead_And_Up_Arrowhead_Below\";\n CharCode[CharCode[\"U_Combining_Right_Half_Ring_Above\"] = 855] = \"U_Combining_Right_Half_Ring_Above\";\n CharCode[CharCode[\"U_Combining_Dot_Above_Right\"] = 856] = \"U_Combining_Dot_Above_Right\";\n CharCode[CharCode[\"U_Combining_Asterisk_Below\"] = 857] = \"U_Combining_Asterisk_Below\";\n CharCode[CharCode[\"U_Combining_Double_Ring_Below\"] = 858] = \"U_Combining_Double_Ring_Below\";\n CharCode[CharCode[\"U_Combining_Zigzag_Above\"] = 859] = \"U_Combining_Zigzag_Above\";\n CharCode[CharCode[\"U_Combining_Double_Breve_Below\"] = 860] = \"U_Combining_Double_Breve_Below\";\n CharCode[CharCode[\"U_Combining_Double_Breve\"] = 861] = \"U_Combining_Double_Breve\";\n CharCode[CharCode[\"U_Combining_Double_Macron\"] = 862] = \"U_Combining_Double_Macron\";\n CharCode[CharCode[\"U_Combining_Double_Macron_Below\"] = 863] = \"U_Combining_Double_Macron_Below\";\n CharCode[CharCode[\"U_Combining_Double_Tilde\"] = 864] = \"U_Combining_Double_Tilde\";\n CharCode[CharCode[\"U_Combining_Double_Inverted_Breve\"] = 865] = \"U_Combining_Double_Inverted_Breve\";\n CharCode[CharCode[\"U_Combining_Double_Rightwards_Arrow_Below\"] = 866] = \"U_Combining_Double_Rightwards_Arrow_Below\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_A\"] = 867] = \"U_Combining_Latin_Small_Letter_A\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_E\"] = 868] = \"U_Combining_Latin_Small_Letter_E\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_I\"] = 869] = \"U_Combining_Latin_Small_Letter_I\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_O\"] = 870] = \"U_Combining_Latin_Small_Letter_O\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_U\"] = 871] = \"U_Combining_Latin_Small_Letter_U\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_C\"] = 872] = \"U_Combining_Latin_Small_Letter_C\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_D\"] = 873] = \"U_Combining_Latin_Small_Letter_D\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_H\"] = 874] = \"U_Combining_Latin_Small_Letter_H\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_M\"] = 875] = \"U_Combining_Latin_Small_Letter_M\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_R\"] = 876] = \"U_Combining_Latin_Small_Letter_R\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_T\"] = 877] = \"U_Combining_Latin_Small_Letter_T\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_V\"] = 878] = \"U_Combining_Latin_Small_Letter_V\";\n CharCode[CharCode[\"U_Combining_Latin_Small_Letter_X\"] = 879] = \"U_Combining_Latin_Small_Letter_X\";\n /**\n * Unicode Character 'LINE SEPARATOR' (U+2028)\n * http://www.fileformat.info/info/unicode/char/2028/index.htm\n */\n CharCode[CharCode[\"LINE_SEPARATOR\"] = 8232] = \"LINE_SEPARATOR\";\n /**\n * Unicode Character 'PARAGRAPH SEPARATOR' (U+2029)\n * http://www.fileformat.info/info/unicode/char/2029/index.htm\n */\n CharCode[CharCode[\"PARAGRAPH_SEPARATOR\"] = 8233] = \"PARAGRAPH_SEPARATOR\";\n /**\n * Unicode Character 'NEXT LINE' (U+0085)\n * http://www.fileformat.info/info/unicode/char/0085/index.htm\n */\n CharCode[CharCode[\"NEXT_LINE\"] = 133] = \"NEXT_LINE\";\n // http://www.fileformat.info/info/unicode/category/Sk/list.htm\n CharCode[CharCode[\"U_CIRCUMFLEX\"] = 94] = \"U_CIRCUMFLEX\";\n CharCode[CharCode[\"U_GRAVE_ACCENT\"] = 96] = \"U_GRAVE_ACCENT\";\n CharCode[CharCode[\"U_DIAERESIS\"] = 168] = \"U_DIAERESIS\";\n CharCode[CharCode[\"U_MACRON\"] = 175] = \"U_MACRON\";\n CharCode[CharCode[\"U_ACUTE_ACCENT\"] = 180] = \"U_ACUTE_ACCENT\";\n CharCode[CharCode[\"U_CEDILLA\"] = 184] = \"U_CEDILLA\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LEFT_ARROWHEAD\"] = 706] = \"U_MODIFIER_LETTER_LEFT_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_RIGHT_ARROWHEAD\"] = 707] = \"U_MODIFIER_LETTER_RIGHT_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_UP_ARROWHEAD\"] = 708] = \"U_MODIFIER_LETTER_UP_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_DOWN_ARROWHEAD\"] = 709] = \"U_MODIFIER_LETTER_DOWN_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_CENTRED_RIGHT_HALF_RING\"] = 722] = \"U_MODIFIER_LETTER_CENTRED_RIGHT_HALF_RING\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_CENTRED_LEFT_HALF_RING\"] = 723] = \"U_MODIFIER_LETTER_CENTRED_LEFT_HALF_RING\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_UP_TACK\"] = 724] = \"U_MODIFIER_LETTER_UP_TACK\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_DOWN_TACK\"] = 725] = \"U_MODIFIER_LETTER_DOWN_TACK\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_PLUS_SIGN\"] = 726] = \"U_MODIFIER_LETTER_PLUS_SIGN\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_MINUS_SIGN\"] = 727] = \"U_MODIFIER_LETTER_MINUS_SIGN\";\n CharCode[CharCode[\"U_BREVE\"] = 728] = \"U_BREVE\";\n CharCode[CharCode[\"U_DOT_ABOVE\"] = 729] = \"U_DOT_ABOVE\";\n CharCode[CharCode[\"U_RING_ABOVE\"] = 730] = \"U_RING_ABOVE\";\n CharCode[CharCode[\"U_OGONEK\"] = 731] = \"U_OGONEK\";\n CharCode[CharCode[\"U_SMALL_TILDE\"] = 732] = \"U_SMALL_TILDE\";\n CharCode[CharCode[\"U_DOUBLE_ACUTE_ACCENT\"] = 733] = \"U_DOUBLE_ACUTE_ACCENT\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_RHOTIC_HOOK\"] = 734] = \"U_MODIFIER_LETTER_RHOTIC_HOOK\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_CROSS_ACCENT\"] = 735] = \"U_MODIFIER_LETTER_CROSS_ACCENT\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_EXTRA_HIGH_TONE_BAR\"] = 741] = \"U_MODIFIER_LETTER_EXTRA_HIGH_TONE_BAR\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_HIGH_TONE_BAR\"] = 742] = \"U_MODIFIER_LETTER_HIGH_TONE_BAR\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_MID_TONE_BAR\"] = 743] = \"U_MODIFIER_LETTER_MID_TONE_BAR\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_TONE_BAR\"] = 744] = \"U_MODIFIER_LETTER_LOW_TONE_BAR\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_EXTRA_LOW_TONE_BAR\"] = 745] = \"U_MODIFIER_LETTER_EXTRA_LOW_TONE_BAR\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_YIN_DEPARTING_TONE_MARK\"] = 746] = \"U_MODIFIER_LETTER_YIN_DEPARTING_TONE_MARK\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_YANG_DEPARTING_TONE_MARK\"] = 747] = \"U_MODIFIER_LETTER_YANG_DEPARTING_TONE_MARK\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_UNASPIRATED\"] = 749] = \"U_MODIFIER_LETTER_UNASPIRATED\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_DOWN_ARROWHEAD\"] = 751] = \"U_MODIFIER_LETTER_LOW_DOWN_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_UP_ARROWHEAD\"] = 752] = \"U_MODIFIER_LETTER_LOW_UP_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_LEFT_ARROWHEAD\"] = 753] = \"U_MODIFIER_LETTER_LOW_LEFT_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_RIGHT_ARROWHEAD\"] = 754] = \"U_MODIFIER_LETTER_LOW_RIGHT_ARROWHEAD\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_RING\"] = 755] = \"U_MODIFIER_LETTER_LOW_RING\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_MIDDLE_GRAVE_ACCENT\"] = 756] = \"U_MODIFIER_LETTER_MIDDLE_GRAVE_ACCENT\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_MIDDLE_DOUBLE_GRAVE_ACCENT\"] = 757] = \"U_MODIFIER_LETTER_MIDDLE_DOUBLE_GRAVE_ACCENT\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_MIDDLE_DOUBLE_ACUTE_ACCENT\"] = 758] = \"U_MODIFIER_LETTER_MIDDLE_DOUBLE_ACUTE_ACCENT\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_TILDE\"] = 759] = \"U_MODIFIER_LETTER_LOW_TILDE\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_RAISED_COLON\"] = 760] = \"U_MODIFIER_LETTER_RAISED_COLON\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_BEGIN_HIGH_TONE\"] = 761] = \"U_MODIFIER_LETTER_BEGIN_HIGH_TONE\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_END_HIGH_TONE\"] = 762] = \"U_MODIFIER_LETTER_END_HIGH_TONE\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_BEGIN_LOW_TONE\"] = 763] = \"U_MODIFIER_LETTER_BEGIN_LOW_TONE\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_END_LOW_TONE\"] = 764] = \"U_MODIFIER_LETTER_END_LOW_TONE\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_SHELF\"] = 765] = \"U_MODIFIER_LETTER_SHELF\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_OPEN_SHELF\"] = 766] = \"U_MODIFIER_LETTER_OPEN_SHELF\";\n CharCode[CharCode[\"U_MODIFIER_LETTER_LOW_LEFT_ARROW\"] = 767] = \"U_MODIFIER_LETTER_LOW_LEFT_ARROW\";\n CharCode[CharCode[\"U_GREEK_LOWER_NUMERAL_SIGN\"] = 885] = \"U_GREEK_LOWER_NUMERAL_SIGN\";\n CharCode[CharCode[\"U_GREEK_TONOS\"] = 900] = \"U_GREEK_TONOS\";\n CharCode[CharCode[\"U_GREEK_DIALYTIKA_TONOS\"] = 901] = \"U_GREEK_DIALYTIKA_TONOS\";\n CharCode[CharCode[\"U_GREEK_KORONIS\"] = 8125] = \"U_GREEK_KORONIS\";\n CharCode[CharCode[\"U_GREEK_PSILI\"] = 8127] = \"U_GREEK_PSILI\";\n CharCode[CharCode[\"U_GREEK_PERISPOMENI\"] = 8128] = \"U_GREEK_PERISPOMENI\";\n CharCode[CharCode[\"U_GREEK_DIALYTIKA_AND_PERISPOMENI\"] = 8129] = \"U_GREEK_DIALYTIKA_AND_PERISPOMENI\";\n CharCode[CharCode[\"U_GREEK_PSILI_AND_VARIA\"] = 8141] = \"U_GREEK_PSILI_AND_VARIA\";\n CharCode[CharCode[\"U_GREEK_PSILI_AND_OXIA\"] = 8142] = \"U_GREEK_PSILI_AND_OXIA\";\n CharCode[CharCode[\"U_GREEK_PSILI_AND_PERISPOMENI\"] = 8143] = \"U_GREEK_PSILI_AND_PERISPOMENI\";\n CharCode[CharCode[\"U_GREEK_DASIA_AND_VARIA\"] = 8157] = \"U_GREEK_DASIA_AND_VARIA\";\n CharCode[CharCode[\"U_GREEK_DASIA_AND_OXIA\"] = 8158] = \"U_GREEK_DASIA_AND_OXIA\";\n CharCode[CharCode[\"U_GREEK_DASIA_AND_PERISPOMENI\"] = 8159] = \"U_GREEK_DASIA_AND_PERISPOMENI\";\n CharCode[CharCode[\"U_GREEK_DIALYTIKA_AND_VARIA\"] = 8173] = \"U_GREEK_DIALYTIKA_AND_VARIA\";\n CharCode[CharCode[\"U_GREEK_DIALYTIKA_AND_OXIA\"] = 8174] = \"U_GREEK_DIALYTIKA_AND_OXIA\";\n CharCode[CharCode[\"U_GREEK_VARIA\"] = 8175] = \"U_GREEK_VARIA\";\n CharCode[CharCode[\"U_GREEK_OXIA\"] = 8189] = \"U_GREEK_OXIA\";\n CharCode[CharCode[\"U_GREEK_DASIA\"] = 8190] = \"U_GREEK_DASIA\";\n CharCode[CharCode[\"U_IDEOGRAPHIC_FULL_STOP\"] = 12290] = \"U_IDEOGRAPHIC_FULL_STOP\";\n CharCode[CharCode[\"U_LEFT_CORNER_BRACKET\"] = 12300] = \"U_LEFT_CORNER_BRACKET\";\n CharCode[CharCode[\"U_RIGHT_CORNER_BRACKET\"] = 12301] = \"U_RIGHT_CORNER_BRACKET\";\n CharCode[CharCode[\"U_LEFT_BLACK_LENTICULAR_BRACKET\"] = 12304] = \"U_LEFT_BLACK_LENTICULAR_BRACKET\";\n CharCode[CharCode[\"U_RIGHT_BLACK_LENTICULAR_BRACKET\"] = 12305] = \"U_RIGHT_BLACK_LENTICULAR_BRACKET\";\n CharCode[CharCode[\"U_OVERLINE\"] = 8254] = \"U_OVERLINE\";\n /**\n * UTF-8 BOM\n * Unicode Character 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF)\n * http://www.fileformat.info/info/unicode/char/feff/index.htm\n */\n CharCode[CharCode[\"UTF8_BOM\"] = 65279] = \"UTF8_BOM\";\n CharCode[CharCode[\"U_FULLWIDTH_SEMICOLON\"] = 65307] = \"U_FULLWIDTH_SEMICOLON\";\n CharCode[CharCode[\"U_FULLWIDTH_COMMA\"] = 65292] = \"U_FULLWIDTH_COMMA\";\n})(CharCode || (exports.CharCode = CharCode = {}));\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetWithKey = void 0;\nexports.groupBy = groupBy;\nexports.diffSets = diffSets;\nexports.diffMaps = diffMaps;\nexports.intersection = intersection;\n/**\n * Groups the collection into a dictionary based on the provided\n * group function.\n */\nfunction groupBy(data, groupFn) {\n const result = Object.create(null);\n for (const element of data) {\n const key = groupFn(element);\n let target = result[key];\n if (!target) {\n target = result[key] = [];\n }\n target.push(element);\n }\n return result;\n}\nfunction diffSets(before, after) {\n const removed = [];\n const added = [];\n for (const element of before) {\n if (!after.has(element)) {\n removed.push(element);\n }\n }\n for (const element of after) {\n if (!before.has(element)) {\n added.push(element);\n }\n }\n return { removed, added };\n}\nfunction diffMaps(before, after) {\n const removed = [];\n const added = [];\n for (const [index, value] of before) {\n if (!after.has(index)) {\n removed.push(value);\n }\n }\n for (const [index, value] of after) {\n if (!before.has(index)) {\n added.push(value);\n }\n }\n return { removed, added };\n}\n/**\n * Computes the intersection of two sets.\n *\n * @param setA - The first set.\n * @param setB - The second iterable.\n * @returns A new set containing the elements that are in both `setA` and `setB`.\n */\nfunction intersection(setA, setB) {\n const result = new Set();\n for (const elem of setB) {\n if (setA.has(elem)) {\n result.add(elem);\n }\n }\n return result;\n}\nclass SetWithKey {\n static { _a = Symbol.toStringTag; }\n constructor(values, toKey) {\n this.toKey = toKey;\n this._map = new Map();\n this[_a] = 'SetWithKey';\n for (const value of values) {\n this.add(value);\n }\n }\n get size() {\n return this._map.size;\n }\n add(value) {\n const key = this.toKey(value);\n this._map.set(key, value);\n return this;\n }\n delete(value) {\n return this._map.delete(this.toKey(value));\n }\n has(value) {\n return this._map.has(this.toKey(value));\n }\n *entries() {\n for (const entry of this._map.values()) {\n yield [entry, entry];\n }\n }\n keys() {\n return this.values();\n }\n *values() {\n for (const entry of this._map.values()) {\n yield entry;\n }\n }\n clear() {\n this._map.clear();\n }\n forEach(callbackfn, thisArg) {\n this._map.forEach(entry => callbackfn.call(thisArg, entry, entry, this));\n }\n [Symbol.iterator]() {\n return this.values();\n }\n}\nexports.SetWithKey = SetWithKey;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BugIndicatingError = exports.ErrorNoTelemetry = exports.ExpectedError = exports.NotSupportedError = exports.NotImplementedError = exports.ReadonlyError = exports.CancellationError = exports.errorHandler = exports.ErrorHandler = void 0;\nexports.setUnexpectedErrorHandler = setUnexpectedErrorHandler;\nexports.isSigPipeError = isSigPipeError;\nexports.onUnexpectedError = onUnexpectedError;\nexports.onUnexpectedExternalError = onUnexpectedExternalError;\nexports.transformErrorForSerialization = transformErrorForSerialization;\nexports.transformErrorFromSerialization = transformErrorFromSerialization;\nexports.isCancellationError = isCancellationError;\nexports.canceled = canceled;\nexports.illegalArgument = illegalArgument;\nexports.illegalState = illegalState;\nexports.getErrorMessage = getErrorMessage;\n// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\nclass ErrorHandler {\n constructor() {\n this.listeners = [];\n this.unexpectedErrorHandler = function (e) {\n setTimeout(() => {\n if (e.stack) {\n if (ErrorNoTelemetry.isErrorNoTelemetry(e)) {\n throw new ErrorNoTelemetry(e.message + '\\n\\n' + e.stack);\n }\n throw new Error(e.message + '\\n\\n' + e.stack);\n }\n throw e;\n }, 0);\n };\n }\n addListener(listener) {\n this.listeners.push(listener);\n return () => {\n this._removeListener(listener);\n };\n }\n emit(e) {\n this.listeners.forEach((listener) => {\n listener(e);\n });\n }\n _removeListener(listener) {\n this.listeners.splice(this.listeners.indexOf(listener), 1);\n }\n setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n this.unexpectedErrorHandler = newUnexpectedErrorHandler;\n }\n getUnexpectedErrorHandler() {\n return this.unexpectedErrorHandler;\n }\n onUnexpectedError(e) {\n this.unexpectedErrorHandler(e);\n this.emit(e);\n }\n // For external errors, we don't want the listeners to be called\n onUnexpectedExternalError(e) {\n this.unexpectedErrorHandler(e);\n }\n}\nexports.ErrorHandler = ErrorHandler;\nexports.errorHandler = new ErrorHandler();\n/** @skipMangle */\nfunction setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n exports.errorHandler.setUnexpectedErrorHandler(newUnexpectedErrorHandler);\n}\n/**\n * Returns if the error is a SIGPIPE error. SIGPIPE errors should generally be\n * logged at most once, to avoid a loop.\n *\n * @see https://github.com/microsoft/vscode-remote-release/issues/6481\n */\nfunction isSigPipeError(e) {\n if (!e || typeof e !== 'object') {\n return false;\n }\n const cast = e;\n return cast.code === 'EPIPE' && cast.syscall?.toUpperCase() === 'WRITE';\n}\nfunction onUnexpectedError(e) {\n // ignore errors from cancelled promises\n if (!isCancellationError(e)) {\n exports.errorHandler.onUnexpectedError(e);\n }\n return undefined;\n}\nfunction onUnexpectedExternalError(e) {\n // ignore errors from cancelled promises\n if (!isCancellationError(e)) {\n exports.errorHandler.onUnexpectedExternalError(e);\n }\n return undefined;\n}\nfunction transformErrorForSerialization(error) {\n if (error instanceof Error) {\n const { name, message } = error;\n const stack = error.stacktrace || error.stack;\n return {\n $isError: true,\n name,\n message,\n stack,\n noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error)\n };\n }\n // return as is\n return error;\n}\nfunction transformErrorFromSerialization(data) {\n let error;\n if (data.noTelemetry) {\n error = new ErrorNoTelemetry();\n }\n else {\n error = new Error();\n error.name = data.name;\n }\n error.message = data.message;\n error.stack = data.stack;\n return error;\n}\nconst canceledName = 'Canceled';\n/**\n * Checks if the given error is a promise in canceled state\n */\nfunction isCancellationError(error) {\n if (error instanceof CancellationError) {\n return true;\n }\n return error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n// !!!IMPORTANT!!!\n// Do NOT change this class because it is also used as an API-type.\nclass CancellationError extends Error {\n constructor() {\n super(canceledName);\n this.name = this.message;\n }\n}\nexports.CancellationError = CancellationError;\n/**\n * @deprecated use {@link CancellationError `new CancellationError()`} instead\n */\nfunction canceled() {\n const error = new Error(canceledName);\n error.name = error.message;\n return error;\n}\nfunction illegalArgument(name) {\n if (name) {\n return new Error(`Illegal argument: ${name}`);\n }\n else {\n return new Error('Illegal argument');\n }\n}\nfunction illegalState(name) {\n if (name) {\n return new Error(`Illegal state: ${name}`);\n }\n else {\n return new Error('Illegal state');\n }\n}\nclass ReadonlyError extends TypeError {\n constructor(name) {\n super(name ? `${name} is read-only and cannot be changed` : 'Cannot change read-only property');\n }\n}\nexports.ReadonlyError = ReadonlyError;\nfunction getErrorMessage(err) {\n if (!err) {\n return 'Error';\n }\n if (err.message) {\n return err.message;\n }\n if (err.stack) {\n return err.stack.split('\\n')[0];\n }\n return String(err);\n}\nclass NotImplementedError extends Error {\n constructor(message) {\n super('NotImplemented');\n if (message) {\n this.message = message;\n }\n }\n}\nexports.NotImplementedError = NotImplementedError;\nclass NotSupportedError extends Error {\n constructor(message) {\n super('NotSupported');\n if (message) {\n this.message = message;\n }\n }\n}\nexports.NotSupportedError = NotSupportedError;\nclass ExpectedError extends Error {\n constructor() {\n super(...arguments);\n this.isExpected = true;\n }\n}\nexports.ExpectedError = ExpectedError;\n/**\n * Error that when thrown won't be logged in telemetry as an unhandled error.\n */\nclass ErrorNoTelemetry extends Error {\n constructor(msg) {\n super(msg);\n this.name = 'CodeExpectedError';\n }\n static fromError(err) {\n if (err instanceof ErrorNoTelemetry) {\n return err;\n }\n const result = new ErrorNoTelemetry();\n result.message = err.message;\n result.stack = err.stack;\n return result;\n }\n static isErrorNoTelemetry(err) {\n return err.name === 'CodeExpectedError';\n }\n}\nexports.ErrorNoTelemetry = ErrorNoTelemetry;\n/**\n * This error indicates a bug.\n * Do not throw this for invalid user input.\n * Only catch this error to recover gracefully from bugs.\n */\nclass BugIndicatingError extends Error {\n constructor(message) {\n super(message || 'An unexpected bug occurred.');\n Object.setPrototypeOf(this, BugIndicatingError.prototype);\n // Because we know for sure only buggy code throws this,\n // we definitely want to break here and fix the bug.\n // eslint-disable-next-line no-debugger\n // debugger;\n }\n}\nexports.BugIndicatingError = BugIndicatingError;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueWithChangeEvent = exports.Relay = exports.EventBufferer = exports.DynamicListEventMultiplexer = exports.EventMultiplexer = exports.MicrotaskEmitter = exports.DebounceEmitter = exports.PauseableEmitter = exports.AsyncEmitter = exports.createEventDeliveryQueue = exports.Emitter = exports.ListenerRefusalError = exports.ListenerLeakError = exports.EventProfiling = exports.Event = void 0;\nexports.setGlobalLeakWarningThreshold = setGlobalLeakWarningThreshold;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst functional_1 = require(\"vs/base/common/functional\");\nconst lifecycle_1 = require(\"vs/base/common/lifecycle\");\nconst linkedList_1 = require(\"vs/base/common/linkedList\");\nconst stopwatch_1 = require(\"vs/base/common/stopwatch\");\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a listener is GC'ed without having been disposed. This is a LEAK.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableListenerGCedWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever an emitter with listeners is disposed. That is a sign of code smell.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableDisposeWithListenerWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a snapshotted event is used repeatedly without cleanup.\n// See https://github.com/microsoft/vscode/issues/142851\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableSnapshotPotentialLeakWarning = false;\nvar Event;\n(function (Event) {\n Event.None = () => lifecycle_1.Disposable.None;\n function _addLeakageTraceLogic(options) {\n if (_enableSnapshotPotentialLeakWarning) {\n const { onDidAddListener: origListenerDidAdd } = options;\n const stack = Stacktrace.create();\n let count = 0;\n options.onDidAddListener = () => {\n if (++count === 2) {\n console.warn('snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here');\n stack.print();\n }\n origListenerDidAdd?.();\n };\n }\n }\n /**\n * Given an event, returns another event which debounces calls and defers the listeners to a later task via a shared\n * `setTimeout`. The event is converted into a signal (`Event<void>`) to avoid additional object creation as a\n * result of merging events and to try prevent race conditions that could arise when using related deferred and\n * non-deferred events.\n *\n * This is useful for deferring non-critical work (eg. general UI updates) to ensure it does not block critical work\n * (eg. latency of keypress to text rendered).\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function defer(event, disposable) {\n return debounce(event, () => void 0, 0, undefined, true, undefined, disposable);\n }\n Event.defer = defer;\n /**\n * Given an event, returns another event which only fires once.\n *\n * @param event The event source for the new event.\n */\n function once(event) {\n return (listener, thisArgs = null, disposables) => {\n // we need this, in case the event fires during the listener call\n let didFire = false;\n let result = undefined;\n result = event(e => {\n if (didFire) {\n return;\n }\n else if (result) {\n result.dispose();\n }\n else {\n didFire = true;\n }\n return listener.call(thisArgs, e);\n }, null, disposables);\n if (didFire) {\n result.dispose();\n }\n return result;\n };\n }\n Event.once = once;\n /**\n * Maps an event of one type into an event of another type using a mapping function, similar to how\n * `Array.prototype.map` works.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param map The mapping function.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function map(event, map, disposable) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables), disposable);\n }\n Event.map = map;\n /**\n * Wraps an event in another event that performs some function on the event object before firing.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param each The function to perform on the event object.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function forEach(event, each, disposable) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables), disposable);\n }\n Event.forEach = forEach;\n function filter(event, filter, disposable) {\n return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables), disposable);\n }\n Event.filter = filter;\n /**\n * Given an event, returns the same event but typed as `Event<void>`.\n */\n function signal(event) {\n return event;\n }\n Event.signal = signal;\n function any(...events) {\n return (listener, thisArgs = null, disposables) => {\n const disposable = (0, lifecycle_1.combinedDisposable)(...events.map(event => event(e => listener.call(thisArgs, e))));\n return addAndReturnDisposable(disposable, disposables);\n };\n }\n Event.any = any;\n /**\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n */\n function reduce(event, merge, initial, disposable) {\n let output = initial;\n return map(event, e => {\n output = merge(output, e);\n return output;\n }, disposable);\n }\n Event.reduce = reduce;\n function snapshot(event, disposable) {\n let listener;\n const options = {\n onWillAddFirstListener() {\n listener = event(emitter.fire, emitter);\n },\n onDidRemoveLastListener() {\n listener?.dispose();\n }\n };\n if (!disposable) {\n _addLeakageTraceLogic(options);\n }\n const emitter = new Emitter(options);\n disposable?.add(emitter);\n return emitter.event;\n }\n /**\n * Adds the IDisposable to the store if it's set, and returns it. Useful to\n * Event function implementation.\n */\n function addAndReturnDisposable(d, store) {\n if (store instanceof Array) {\n store.push(d);\n }\n else if (store) {\n store.add(d);\n }\n return d;\n }\n function debounce(event, merge, delay = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold, disposable) {\n let subscription;\n let output = undefined;\n let handle = undefined;\n let numDebouncedCalls = 0;\n let doFire;\n const options = {\n leakWarningThreshold,\n onWillAddFirstListener() {\n subscription = event(cur => {\n numDebouncedCalls++;\n output = merge(output, cur);\n if (leading && !handle) {\n emitter.fire(output);\n output = undefined;\n }\n doFire = () => {\n const _output = output;\n output = undefined;\n handle = undefined;\n if (!leading || numDebouncedCalls > 1) {\n emitter.fire(_output);\n }\n numDebouncedCalls = 0;\n };\n if (typeof delay === 'number') {\n clearTimeout(handle);\n handle = setTimeout(doFire, delay);\n }\n else {\n if (handle === undefined) {\n handle = 0;\n queueMicrotask(doFire);\n }\n }\n });\n },\n onWillRemoveListener() {\n if (flushOnListenerRemove && numDebouncedCalls > 0) {\n doFire?.();\n }\n },\n onDidRemoveLastListener() {\n doFire = undefined;\n subscription.dispose();\n }\n };\n if (!disposable) {\n _addLeakageTraceLogic(options);\n }\n const emitter = new Emitter(options);\n disposable?.add(emitter);\n return emitter.event;\n }\n Event.debounce = debounce;\n /**\n * Debounces an event, firing after some delay (default=0) with an array of all event original objects.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n */\n function accumulate(event, delay = 0, disposable) {\n return Event.debounce(event, (last, e) => {\n if (!last) {\n return [e];\n }\n last.push(e);\n return last;\n }, delay, undefined, true, undefined, disposable);\n }\n Event.accumulate = accumulate;\n /**\n * Filters an event such that some condition is _not_ met more than once in a row, effectively ensuring duplicate\n * event objects from different sources do not fire the same event object.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param equals The equality condition.\n * @param disposable A disposable store to add the new EventEmitter to.\n *\n * @example\n * ```\n * // Fire only one time when a single window is opened or focused\n * Event.latch(Event.any(onDidOpenWindow, onDidFocusWindow))\n * ```\n */\n function latch(event, equals = (a, b) => a === b, disposable) {\n let firstCall = true;\n let cache;\n return filter(event, value => {\n const shouldEmit = firstCall || !equals(value, cache);\n firstCall = false;\n cache = value;\n return shouldEmit;\n }, disposable);\n }\n Event.latch = latch;\n /**\n * Splits an event whose parameter is a union type into 2 separate events for each type in the union.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @example\n * ```\n * const event = new EventEmitter<number | undefined>().event;\n * const [numberEvent, undefinedEvent] = Event.split(event, isUndefined);\n * ```\n *\n * @param event The event source for the new event.\n * @param isT A function that determines what event is of the first type.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function split(event, isT, disposable) {\n return [\n Event.filter(event, isT, disposable),\n Event.filter(event, e => !isT(e), disposable),\n ];\n }\n Event.split = split;\n /**\n * Buffers an event until it has a listener attached.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param flushAfterTimeout Determines whether to flush the buffer after a timeout immediately or after a\n * `setTimeout` when the first event listener is added.\n * @param _buffer Internal: A source event array used for tests.\n *\n * @example\n * ```\n * // Start accumulating events, when the first listener is attached, flush\n * // the event after a timeout such that multiple listeners attached before\n * // the timeout would receive the event\n * this.onInstallExtension = Event.buffer(service.onInstallExtension, true);\n * ```\n */\n function buffer(event, flushAfterTimeout = false, _buffer = [], disposable) {\n let buffer = _buffer.slice();\n let listener = event(e => {\n if (buffer) {\n buffer.push(e);\n }\n else {\n emitter.fire(e);\n }\n });\n if (disposable) {\n disposable.add(listener);\n }\n const flush = () => {\n buffer?.forEach(e => emitter.fire(e));\n buffer = null;\n };\n const emitter = new Emitter({\n onWillAddFirstListener() {\n if (!listener) {\n listener = event(e => emitter.fire(e));\n if (disposable) {\n disposable.add(listener);\n }\n }\n },\n onDidAddFirstListener() {\n if (buffer) {\n if (flushAfterTimeout) {\n setTimeout(flush);\n }\n else {\n flush();\n }\n }\n },\n onDidRemoveLastListener() {\n if (listener) {\n listener.dispose();\n }\n listener = null;\n }\n });\n if (disposable) {\n disposable.add(emitter);\n }\n return emitter.event;\n }\n Event.buffer = buffer;\n /**\n * Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style.\n *\n * @example\n * ```\n * // Normal\n * const onEnterPressNormal = Event.filter(\n * Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)),\n * e.keyCode === KeyCode.Enter\n * ).event;\n *\n * // Using chain\n * const onEnterPressChain = Event.chain(onKeyPress.event, $ => $\n * .map(e => new StandardKeyboardEvent(e))\n * .filter(e => e.keyCode === KeyCode.Enter)\n * );\n * ```\n */\n function chain(event, sythensize) {\n const fn = (listener, thisArgs, disposables) => {\n const cs = sythensize(new ChainableSynthesis());\n return event(function (value) {\n const result = cs.evaluate(value);\n if (result !== HaltChainable) {\n listener.call(thisArgs, result);\n }\n }, undefined, disposables);\n };\n return fn;\n }\n Event.chain = chain;\n const HaltChainable = Symbol('HaltChainable');\n class ChainableSynthesis {\n constructor() {\n this.steps = [];\n }\n map(fn) {\n this.steps.push(fn);\n return this;\n }\n forEach(fn) {\n this.steps.push(v => {\n fn(v);\n return v;\n });\n return this;\n }\n filter(fn) {\n this.steps.push(v => fn(v) ? v : HaltChainable);\n return this;\n }\n reduce(merge, initial) {\n let last = initial;\n this.steps.push(v => {\n last = merge(last, v);\n return last;\n });\n return this;\n }\n latch(equals = (a, b) => a === b) {\n let firstCall = true;\n let cache;\n this.steps.push(value => {\n const shouldEmit = firstCall || !equals(value, cache);\n firstCall = false;\n cache = value;\n return shouldEmit ? value : HaltChainable;\n });\n return this;\n }\n evaluate(value) {\n for (const step of this.steps) {\n value = step(value);\n if (value === HaltChainable) {\n break;\n }\n }\n return value;\n }\n }\n /**\n * Creates an {@link Event} from a node event emitter.\n */\n function fromNodeEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n return result.event;\n }\n Event.fromNodeEventEmitter = fromNodeEventEmitter;\n /**\n * Creates an {@link Event} from a DOM event emitter.\n */\n function fromDOMEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n return result.event;\n }\n Event.fromDOMEventEmitter = fromDOMEventEmitter;\n /**\n * Creates a promise out of an event, using the {@link Event.once} helper.\n */\n function toPromise(event) {\n return new Promise(resolve => once(event)(resolve));\n }\n Event.toPromise = toPromise;\n /**\n * Creates an event out of a promise that fires once when the promise is\n * resolved with the result of the promise or `undefined`.\n */\n function fromPromise(promise) {\n const result = new Emitter();\n promise.then(res => {\n result.fire(res);\n }, () => {\n result.fire(undefined);\n }).finally(() => {\n result.dispose();\n });\n return result.event;\n }\n Event.fromPromise = fromPromise;\n /**\n * A convenience function for forwarding an event to another emitter which\n * improves readability.allows Event.forward(event, emitter) instead of `event(e => emitter.fire(e))`.\n * @param from The event to forward.\n * @param to The emitter to forward the event to.\n * @example\n * Event.forward(event, emitter);\n * // equivalent to\n * event(e => emitter.fire(e));\n * // equivalent to\n * event(emitter.fire, emitter);\n */\n function forward(from, to) {\n return from(e => to.fire(e));\n }\n Event.forward = forward;\n function runAndSubscribe(event, handler, initial) {\n handler(initial);\n return event(e => handler(e));\n }\n Event.runAndSubscribe = runAndSubscribe;\n class EmitterObserver {\n constructor(_observable, store) {\n this._observable = _observable;\n this._counter = 0;\n this._hasChanged = false;\n const options = {\n onWillAddFirstListener: () => {\n _observable.addObserver(this);\n },\n onDidRemoveLastListener: () => {\n _observable.removeObserver(this);\n }\n };\n if (!store) {\n _addLeakageTraceLogic(options);\n }\n this.emitter = new Emitter(options);\n if (store) {\n store.add(this.emitter);\n }\n }\n beginUpdate(_observable) {\n // assert(_observable === this.obs);\n this._counter++;\n }\n handlePossibleChange(_observable) {\n // assert(_observable === this.obs);\n }\n handleChange(_observable, _change) {\n // assert(_observable === this.obs);\n this._hasChanged = true;\n }\n endUpdate(_observable) {\n // assert(_observable === this.obs);\n this._counter--;\n if (this._counter === 0) {\n this._observable.reportChanges();\n if (this._hasChanged) {\n this._hasChanged = false;\n this.emitter.fire(this._observable.get());\n }\n }\n }\n }\n /**\n * Creates an event emitter that is fired when the observable changes.\n * Each listeners subscribes to the emitter.\n */\n function fromObservable(obs, store) {\n const observer = new EmitterObserver(obs, store);\n return observer.emitter.event;\n }\n Event.fromObservable = fromObservable;\n /**\n * Each listener is attached to the observable directly.\n */\n function fromObservableLight(observable) {\n return (listener, thisArgs, disposables) => {\n let count = 0;\n let didChange = false;\n const observer = {\n beginUpdate() {\n count++;\n },\n endUpdate() {\n count--;\n if (count === 0) {\n observable.reportChanges();\n if (didChange) {\n didChange = false;\n listener.call(thisArgs);\n }\n }\n },\n handlePossibleChange() {\n // noop\n },\n handleChange() {\n didChange = true;\n }\n };\n observable.addObserver(observer);\n observable.reportChanges();\n const disposable = {\n dispose() {\n observable.removeObserver(observer);\n }\n };\n if (disposables instanceof lifecycle_1.DisposableStore) {\n disposables.add(disposable);\n }\n else if (Array.isArray(disposables)) {\n disposables.push(disposable);\n }\n return disposable;\n };\n }\n Event.fromObservableLight = fromObservableLight;\n})(Event || (exports.Event = Event = {}));\nclass EventProfiling {\n static { this.all = new Set(); }\n static { this._idPool = 0; }\n constructor(name) {\n this.listenerCount = 0;\n this.invocationCount = 0;\n this.elapsedOverall = 0;\n this.durations = [];\n this.name = `${name}_${EventProfiling._idPool++}`;\n EventProfiling.all.add(this);\n }\n start(listenerCount) {\n this._stopWatch = new stopwatch_1.StopWatch();\n this.listenerCount = listenerCount;\n }\n stop() {\n if (this._stopWatch) {\n const elapsed = this._stopWatch.elapsed();\n this.durations.push(elapsed);\n this.elapsedOverall += elapsed;\n this.invocationCount += 1;\n this._stopWatch = undefined;\n }\n }\n}\nexports.EventProfiling = EventProfiling;\nlet _globalLeakWarningThreshold = -1;\nfunction setGlobalLeakWarningThreshold(n) {\n const oldValue = _globalLeakWarningThreshold;\n _globalLeakWarningThreshold = n;\n return {\n dispose() {\n _globalLeakWarningThreshold = oldValue;\n }\n };\n}\nclass LeakageMonitor {\n static { this._idPool = 1; }\n constructor(_errorHandler, threshold, name = (LeakageMonitor._idPool++).toString(16).padStart(3, '0')) {\n this._errorHandler = _errorHandler;\n this.threshold = threshold;\n this.name = name;\n this._warnCountdown = 0;\n }\n dispose() {\n this._stacks?.clear();\n }\n check(stack, listenerCount) {\n const threshold = this.threshold;\n if (threshold <= 0 || listenerCount < threshold) {\n return undefined;\n }\n if (!this._stacks) {\n this._stacks = new Map();\n }\n const count = (this._stacks.get(stack.value) || 0);\n this._stacks.set(stack.value, count + 1);\n this._warnCountdown -= 1;\n if (this._warnCountdown <= 0) {\n // only warn on first exceed and then every time the limit\n // is exceeded by 50% again\n this._warnCountdown = threshold * 0.5;\n const [topStack, topCount] = this.getMostFrequentStack();\n const message = `[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`;\n console.warn(message);\n console.warn(topStack);\n const error = new ListenerLeakError(message, topStack);\n this._errorHandler(error);\n }\n return () => {\n const count = (this._stacks.get(stack.value) || 0);\n this._stacks.set(stack.value, count - 1);\n };\n }\n getMostFrequentStack() {\n if (!this._stacks) {\n return undefined;\n }\n let topStack;\n let topCount = 0;\n for (const [stack, count] of this._stacks) {\n if (!topStack || topCount < count) {\n topStack = [stack, count];\n topCount = count;\n }\n }\n return topStack;\n }\n}\nclass Stacktrace {\n static create() {\n const err = new Error();\n return new Stacktrace(err.stack ?? '');\n }\n constructor(value) {\n this.value = value;\n }\n print() {\n console.warn(this.value.split('\\n').slice(2).join('\\n'));\n }\n}\n// error that is logged when going over the configured listener threshold\nclass ListenerLeakError extends Error {\n constructor(message, stack) {\n super(message);\n this.name = 'ListenerLeakError';\n this.stack = stack;\n }\n}\nexports.ListenerLeakError = ListenerLeakError;\n// SEVERE error that is logged when having gone way over the configured listener\n// threshold so that the emitter refuses to accept more listeners\nclass ListenerRefusalError extends Error {\n constructor(message, stack) {\n super(message);\n this.name = 'ListenerRefusalError';\n this.stack = stack;\n }\n}\nexports.ListenerRefusalError = ListenerRefusalError;\nlet id = 0;\nclass UniqueContainer {\n constructor(value) {\n this.value = value;\n this.id = id++;\n }\n}\nconst compactionThreshold = 2;\nconst forEachListener = (listeners, fn) => {\n if (listeners instanceof UniqueContainer) {\n fn(listeners);\n }\n else {\n for (let i = 0; i < listeners.length; i++) {\n const l = listeners[i];\n if (l) {\n fn(l);\n }\n }\n }\n};\nlet _listenerFinalizers;\nif (_enableListenerGCedWarning) {\n const leaks = [];\n setInterval(() => {\n if (leaks.length === 0) {\n return;\n }\n console.warn('[LEAKING LISTENERS] GC\\'ed these listeners that were NOT yet disposed:');\n console.warn(leaks.join('\\n'));\n leaks.length = 0;\n }, 3000);\n _listenerFinalizers = new FinalizationRegistry(heldValue => {\n if (typeof heldValue === 'string') {\n leaks.push(heldValue);\n }\n });\n}\n/**\n * The Emitter can be used to expose an Event to the public\n * to fire it from the insides.\n * Sample:\n class Document {\n\n private readonly _onDidChange = new Emitter<(value:string)=>any>();\n\n public onDidChange = this._onDidChange.event;\n\n // getter-style\n // get onDidChange(): Event<(value:string)=>any> {\n // \treturn this._onDidChange.event;\n // }\n\n private _doIt() {\n //...\n this._onDidChange.fire(value);\n }\n }\n */\nclass Emitter {\n constructor(options) {\n this._size = 0;\n this._options = options;\n this._leakageMon = (_globalLeakWarningThreshold > 0 || this._options?.leakWarningThreshold)\n ? new LeakageMonitor(options?.onListenerError ?? errors_1.onUnexpectedError, this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) :\n undefined;\n this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : undefined;\n this._deliveryQueue = this._options?.deliveryQueue;\n }\n dispose() {\n if (!this._disposed) {\n this._disposed = true;\n // It is bad to have listeners at the time of disposing an emitter, it is worst to have listeners keep the emitter\n // alive via the reference that's embedded in their disposables. Therefore we loop over all remaining listeners and\n // unset their subscriptions/disposables. Looping and blaming remaining listeners is done on next tick because the\n // the following programming pattern is very popular:\n //\n // const someModel = this._disposables.add(new ModelObject()); // (1) create and register model\n // this._disposables.add(someModel.onDidChange(() => { ... }); // (2) subscribe and register model-event listener\n // ...later...\n // this._disposables.dispose(); disposes (1) then (2): don't warn after (1) but after the \"overall dispose\" is done\n if (this._deliveryQueue?.current === this) {\n this._deliveryQueue.reset();\n }\n if (this._listeners) {\n if (_enableDisposeWithListenerWarning) {\n const listeners = this._listeners;\n queueMicrotask(() => {\n forEachListener(listeners, l => l.stack?.print());\n });\n }\n this._listeners = undefined;\n this._size = 0;\n }\n this._options?.onDidRemoveLastListener?.();\n this._leakageMon?.dispose();\n }\n }\n /**\n * For the public to allow to subscribe\n * to events from this Emitter\n */\n get event() {\n this._event ??= (callback, thisArgs, disposables) => {\n if (this._leakageMon && this._size > this._leakageMon.threshold ** 2) {\n const message = `[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;\n console.warn(message);\n const tuple = this._leakageMon.getMostFrequentStack() ?? ['UNKNOWN stack', -1];\n const error = new ListenerRefusalError(`${message}. HINT: Stack shows most frequent listener (${tuple[1]}-times)`, tuple[0]);\n const errorHandler = this._options?.onListenerError || errors_1.onUnexpectedError;\n errorHandler(error);\n return lifecycle_1.Disposable.None;\n }\n if (this._disposed) {\n // todo: should we warn if a listener is added to a disposed emitter? This happens often\n return lifecycle_1.Disposable.None;\n }\n if (thisArgs) {\n callback = callback.bind(thisArgs);\n }\n const contained = new UniqueContainer(callback);\n let removeMonitor;\n let stack;\n if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * 0.2)) {\n // check and record this emitter for potential leakage\n contained.stack = Stacktrace.create();\n removeMonitor = this._leakageMon.check(contained.stack, this._size + 1);\n }\n if (_enableDisposeWithListenerWarning) {\n contained.stack = stack ?? Stacktrace.create();\n }\n if (!this._listeners) {\n this._options?.onWillAddFirstListener?.(this);\n this._listeners = contained;\n this._options?.onDidAddFirstListener?.(this);\n }\n else if (this._listeners instanceof UniqueContainer) {\n this._deliveryQueue ??= new EventDeliveryQueuePrivate();\n this._listeners = [this._listeners, contained];\n }\n else {\n this._listeners.push(contained);\n }\n this._size++;\n const result = (0, lifecycle_1.toDisposable)(() => {\n _listenerFinalizers?.unregister(result);\n removeMonitor?.();\n this._removeListener(contained);\n });\n if (disposables instanceof lifecycle_1.DisposableStore) {\n disposables.add(result);\n }\n else if (Array.isArray(disposables)) {\n disposables.push(result);\n }\n if (_listenerFinalizers) {\n const stack = new Error().stack.split('\\n').slice(2, 3).join('\\n').trim();\n const match = /(file:|vscode-file:\\/\\/vscode-app)?(\\/[^:]*:\\d+:\\d+)/.exec(stack);\n _listenerFinalizers.register(result, match?.[2] ?? stack, result);\n }\n return result;\n };\n return this._event;\n }\n _removeListener(listener) {\n this._options?.onWillRemoveListener?.(this);\n if (!this._listeners) {\n return; // expected if a listener gets disposed\n }\n if (this._size === 1) {\n this._listeners = undefined;\n this._options?.onDidRemoveLastListener?.(this);\n this._size = 0;\n return;\n }\n // size > 1 which requires that listeners be a list:\n const listeners = this._listeners;\n const index = listeners.indexOf(listener);\n if (index === -1) {\n console.log('disposed?', this._disposed);\n console.log('size?', this._size);\n console.log('arr?', JSON.stringify(this._listeners));\n throw new Error('Attempted to dispose unknown listener');\n }\n this._size--;\n listeners[index] = undefined;\n const adjustDeliveryQueue = this._deliveryQueue.current === this;\n if (this._size * compactionThreshold <= listeners.length) {\n let n = 0;\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i]) {\n listeners[n++] = listeners[i];\n }\n else if (adjustDeliveryQueue) {\n this._deliveryQueue.end--;\n if (n < this._deliveryQueue.i) {\n this._deliveryQueue.i--;\n }\n }\n }\n listeners.length = n;\n }\n }\n _deliver(listener, value) {\n if (!listener) {\n return;\n }\n const errorHandler = this._options?.onListenerError || errors_1.onUnexpectedError;\n if (!errorHandler) {\n listener.value(value);\n return;\n }\n try {\n listener.value(value);\n }\n catch (e) {\n errorHandler(e);\n }\n }\n /** Delivers items in the queue. Assumes the queue is ready to go. */\n _deliverQueue(dq) {\n const listeners = dq.current._listeners;\n while (dq.i < dq.end) {\n // important: dq.i is incremented before calling deliver() because it might reenter deliverQueue()\n this._deliver(listeners[dq.i++], dq.value);\n }\n dq.reset();\n }\n /**\n * To be kept private to fire an event to\n * subscribers\n */\n fire(event) {\n if (this._deliveryQueue?.current) {\n this._deliverQueue(this._deliveryQueue);\n this._perfMon?.stop(); // last fire() will have starting perfmon, stop it before starting the next dispatch\n }\n this._perfMon?.start(this._size);\n if (!this._listeners) {\n // no-op\n }\n else if (this._listeners instanceof UniqueContainer) {\n this._deliver(this._listeners, event);\n }\n else {\n const dq = this._deliveryQueue;\n dq.enqueue(this, event, this._listeners.length);\n this._deliverQueue(dq);\n }\n this._perfMon?.stop();\n }\n hasListeners() {\n return this._size > 0;\n }\n}\nexports.Emitter = Emitter;\nconst createEventDeliveryQueue = () => new EventDeliveryQueuePrivate();\nexports.createEventDeliveryQueue = createEventDeliveryQueue;\nclass EventDeliveryQueuePrivate {\n constructor() {\n /**\n * Index in current's listener list.\n */\n this.i = -1;\n /**\n * The last index in the listener's list to deliver.\n */\n this.end = 0;\n }\n enqueue(emitter, value, end) {\n this.i = 0;\n this.end = end;\n this.current = emitter;\n this.value = value;\n }\n reset() {\n this.i = this.end; // force any current emission loop to stop, mainly for during dispose\n this.current = undefined;\n this.value = undefined;\n }\n}\nclass AsyncEmitter extends Emitter {\n async fireAsync(data, token, promiseJoin) {\n if (!this._listeners) {\n return;\n }\n if (!this._asyncDeliveryQueue) {\n this._asyncDeliveryQueue = new linkedList_1.LinkedList();\n }\n forEachListener(this._listeners, listener => this._asyncDeliveryQueue.push([listener.value, data]));\n while (this._asyncDeliveryQueue.size > 0 && !token.isCancellationRequested) {\n const [listener, data] = this._asyncDeliveryQueue.shift();\n const thenables = [];\n const event = {\n ...data,\n token,\n waitUntil: (p) => {\n if (Object.isFrozen(thenables)) {\n throw new Error('waitUntil can NOT be called asynchronous');\n }\n if (promiseJoin) {\n p = promiseJoin(p, listener);\n }\n thenables.push(p);\n }\n };\n try {\n listener(event);\n }\n catch (e) {\n (0, errors_1.onUnexpectedError)(e);\n continue;\n }\n // freeze thenables-collection to enforce sync-calls to\n // wait until and then wait for all thenables to resolve\n Object.freeze(thenables);\n await Promise.allSettled(thenables).then(values => {\n for (const value of values) {\n if (value.status === 'rejected') {\n (0, errors_1.onUnexpectedError)(value.reason);\n }\n }\n });\n }\n }\n}\nexports.AsyncEmitter = AsyncEmitter;\nclass PauseableEmitter extends Emitter {\n get isPaused() {\n return this._isPaused !== 0;\n }\n constructor(options) {\n super(options);\n this._isPaused = 0;\n this._eventQueue = new linkedList_1.LinkedList();\n this._mergeFn = options?.merge;\n }\n pause() {\n this._isPaused++;\n }\n resume() {\n if (this._isPaused !== 0 && --this._isPaused === 0) {\n if (this._mergeFn) {\n // use the merge function to create a single composite\n // event. make a copy in case firing pauses this emitter\n if (this._eventQueue.size > 0) {\n const events = Array.from(this._eventQueue);\n this._eventQueue.clear();\n super.fire(this._mergeFn(events));\n }\n }\n else {\n // no merging, fire each event individually and test\n // that this emitter isn't paused halfway through\n while (!this._isPaused && this._eventQueue.size !== 0) {\n super.fire(this._eventQueue.shift());\n }\n }\n }\n }\n fire(event) {\n if (this._size) {\n if (this._isPaused !== 0) {\n this._eventQueue.push(event);\n }\n else {\n super.fire(event);\n }\n }\n }\n}\nexports.PauseableEmitter = PauseableEmitter;\nclass DebounceEmitter extends PauseableEmitter {\n constructor(options) {\n super(options);\n this._delay = options.delay ?? 100;\n }\n fire(event) {\n if (!this._handle) {\n this.pause();\n this._handle = setTimeout(() => {\n this._handle = undefined;\n this.resume();\n }, this._delay);\n }\n super.fire(event);\n }\n}\nexports.DebounceEmitter = DebounceEmitter;\n/**\n * An emitter which queue all events and then process them at the\n * end of the event loop.\n */\nclass MicrotaskEmitter extends Emitter {\n constructor(options) {\n super(options);\n this._queuedEvents = [];\n this._mergeFn = options?.merge;\n }\n fire(event) {\n if (!this.hasListeners()) {\n return;\n }\n this._queuedEvents.push(event);\n if (this._queuedEvents.length === 1) {\n queueMicrotask(() => {\n if (this._mergeFn) {\n super.fire(this._mergeFn(this._queuedEvents));\n }\n else {\n this._queuedEvents.forEach(e => super.fire(e));\n }\n this._queuedEvents = [];\n });\n }\n }\n}\nexports.MicrotaskEmitter = MicrotaskEmitter;\n/**\n * An event emitter that multiplexes many events into a single event.\n *\n * @example Listen to the `onData` event of all `Thing`s, dynamically adding and removing `Thing`s\n * to the multiplexer as needed.\n *\n * ```typescript\n * const anythingDataMultiplexer = new EventMultiplexer<{ data: string }>();\n *\n * const thingListeners = DisposableMap<Thing, IDisposable>();\n *\n * thingService.onDidAddThing(thing => {\n * thingListeners.set(thing, anythingDataMultiplexer.add(thing.onData);\n * });\n * thingService.onDidRemoveThing(thing => {\n * thingListeners.deleteAndDispose(thing);\n * });\n *\n * anythingDataMultiplexer.event(e => {\n * console.log('Something fired data ' + e.data)\n * });\n * ```\n */\nclass EventMultiplexer {\n constructor() {\n this.hasListeners = false;\n this.events = [];\n this.emitter = new Emitter({\n onWillAddFirstListener: () => this.onFirstListenerAdd(),\n onDidRemoveLastListener: () => this.onLastListenerRemove()\n });\n }\n get event() {\n return this.emitter.event;\n }\n add(event) {\n const e = { event: event, listener: null };\n this.events.push(e);\n if (this.hasListeners) {\n this.hook(e);\n }\n const dispose = () => {\n if (this.hasListeners) {\n this.unhook(e);\n }\n const idx = this.events.indexOf(e);\n this.events.splice(idx, 1);\n };\n return (0, lifecycle_1.toDisposable)((0, functional_1.createSingleCallFunction)(dispose));\n }\n onFirstListenerAdd() {\n this.hasListeners = true;\n this.events.forEach(e => this.hook(e));\n }\n onLastListenerRemove() {\n this.hasListeners = false;\n this.events.forEach(e => this.unhook(e));\n }\n hook(e) {\n e.listener = e.event(r => this.emitter.fire(r));\n }\n unhook(e) {\n e.listener?.dispose();\n e.listener = null;\n }\n dispose() {\n this.emitter.dispose();\n for (const e of this.events) {\n e.listener?.dispose();\n }\n this.events = [];\n }\n}\nexports.EventMultiplexer = EventMultiplexer;\nclass DynamicListEventMultiplexer {\n constructor(items, onAddItem, onRemoveItem, getEvent) {\n this._store = new lifecycle_1.DisposableStore();\n const multiplexer = this._store.add(new EventMultiplexer());\n const itemListeners = this._store.add(new lifecycle_1.DisposableMap());\n function addItem(instance) {\n itemListeners.set(instance, multiplexer.add(getEvent(instance)));\n }\n // Existing items\n for (const instance of items) {\n addItem(instance);\n }\n // Added items\n this._store.add(onAddItem(instance => {\n addItem(instance);\n }));\n // Removed items\n this._store.add(onRemoveItem(instance => {\n itemListeners.deleteAndDispose(instance);\n }));\n this.event = multiplexer.event;\n }\n dispose() {\n this._store.dispose();\n }\n}\nexports.DynamicListEventMultiplexer = DynamicListEventMultiplexer;\n/**\n * The EventBufferer is useful in situations in which you want\n * to delay firing your events during some code.\n * You can wrap that code and be sure that the event will not\n * be fired during that wrap.\n *\n * ```\n * const emitter: Emitter;\n * const delayer = new EventDelayer();\n * const delayedEvent = delayer.wrapEvent(emitter.event);\n *\n * delayedEvent(console.log);\n *\n * delayer.bufferEvents(() => {\n * emitter.fire(); // event will not be fired yet\n * });\n *\n * // event will only be fired at this point\n * ```\n */\nclass EventBufferer {\n constructor() {\n this.data = [];\n }\n wrapEvent(event, reduce, initial) {\n return (listener, thisArgs, disposables) => {\n return event(i => {\n const data = this.data[this.data.length - 1];\n // Non-reduce scenario\n if (!reduce) {\n // Buffering case\n if (data) {\n data.buffers.push(() => listener.call(thisArgs, i));\n }\n else {\n // Not buffering case\n listener.call(thisArgs, i);\n }\n return;\n }\n // Reduce scenario\n const reduceData = data;\n // Not buffering case\n if (!reduceData) {\n // TODO: Is there a way to cache this reduce call for all listeners?\n listener.call(thisArgs, reduce(initial, i));\n return;\n }\n // Buffering case\n reduceData.items ??= [];\n reduceData.items.push(i);\n if (reduceData.buffers.length === 0) {\n // Include a single buffered function that will reduce all events when we're done buffering events\n data.buffers.push(() => {\n // cache the reduced result so that the value can be shared across all listeners\n reduceData.reducedResult ??= initial\n ? reduceData.items.reduce(reduce, initial)\n : reduceData.items.reduce(reduce);\n listener.call(thisArgs, reduceData.reducedResult);\n });\n }\n }, undefined, disposables);\n };\n }\n bufferEvents(fn) {\n const data = { buffers: new Array() };\n this.data.push(data);\n const r = fn();\n this.data.pop();\n data.buffers.forEach(flush => flush());\n return r;\n }\n}\nexports.EventBufferer = EventBufferer;\n/**\n * A Relay is an event forwarder which functions as a replugabble event pipe.\n * Once created, you can connect an input event to it and it will simply forward\n * events from that input event through its own `event` property. The `input`\n * can be changed at any point in time.\n */\nclass Relay {\n constructor() {\n this.listening = false;\n this.inputEvent = Event.None;\n this.inputEventListener = lifecycle_1.Disposable.None;\n this.emitter = new Emitter({\n onDidAddFirstListener: () => {\n this.listening = true;\n this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);\n },\n onDidRemoveLastListener: () => {\n this.listening = false;\n this.inputEventListener.dispose();\n }\n });\n this.event = this.emitter.event;\n }\n set input(event) {\n this.inputEvent = event;\n if (this.listening) {\n this.inputEventListener.dispose();\n this.inputEventListener = event(this.emitter.fire, this.emitter);\n }\n }\n dispose() {\n this.inputEventListener.dispose();\n this.emitter.dispose();\n }\n}\nexports.Relay = Relay;\nclass ValueWithChangeEvent {\n static const(value) {\n return new ConstValueWithChangeEvent(value);\n }\n constructor(_value) {\n this._value = _value;\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n }\n get value() {\n return this._value;\n }\n set value(value) {\n if (value !== this._value) {\n this._value = value;\n this._onDidChange.fire(undefined);\n }\n }\n}\nexports.ValueWithChangeEvent = ValueWithChangeEvent;\nclass ConstValueWithChangeEvent {\n constructor(value) {\n this.value = value;\n this.onDidChange = Event.None;\n }\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createSingleCallFunction = createSingleCallFunction;\n/**\n * Given a function, returns a function that is only calling that function once.\n */\nfunction createSingleCallFunction(fn, fnDidRunCallback) {\n const _this = this;\n let didCall = false;\n let result;\n return function () {\n if (didCall) {\n return result;\n }\n didCall = true;\n if (fnDidRunCallback) {\n try {\n result = fn.apply(_this, arguments);\n }\n finally {\n fnDidRunCallback();\n }\n }\n else {\n result = fn.apply(_this, arguments);\n }\n return result;\n };\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StringSHA1 = exports.Hasher = void 0;\nexports.hash = hash;\nexports.doHash = doHash;\nexports.numberHash = numberHash;\nexports.stringHash = stringHash;\nexports.toHexString = toHexString;\nconst strings = __importStar(require(\"vs/base/common/strings\"));\n/**\n * Return a hash value for an object.\n */\nfunction hash(obj) {\n return doHash(obj, 0);\n}\nfunction doHash(obj, hashVal) {\n switch (typeof obj) {\n case 'object':\n if (obj === null) {\n return numberHash(349, hashVal);\n }\n else if (Array.isArray(obj)) {\n return arrayHash(obj, hashVal);\n }\n return objectHash(obj, hashVal);\n case 'string':\n return stringHash(obj, hashVal);\n case 'boolean':\n return booleanHash(obj, hashVal);\n case 'number':\n return numberHash(obj, hashVal);\n case 'undefined':\n return numberHash(937, hashVal);\n default:\n return numberHash(617, hashVal);\n }\n}\nfunction numberHash(val, initialHashVal) {\n return (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32\n}\nfunction booleanHash(b, initialHashVal) {\n return numberHash(b ? 433 : 863, initialHashVal);\n}\nfunction stringHash(s, hashVal) {\n hashVal = numberHash(149417, hashVal);\n for (let i = 0, length = s.length; i < length; i++) {\n hashVal = numberHash(s.charCodeAt(i), hashVal);\n }\n return hashVal;\n}\nfunction arrayHash(arr, initialHashVal) {\n initialHashVal = numberHash(104579, initialHashVal);\n return arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);\n}\nfunction objectHash(obj, initialHashVal) {\n initialHashVal = numberHash(181387, initialHashVal);\n return Object.keys(obj).sort().reduce((hashVal, key) => {\n hashVal = stringHash(key, hashVal);\n return doHash(obj[key], hashVal);\n }, initialHashVal);\n}\nclass Hasher {\n constructor() {\n this._value = 0;\n }\n get value() {\n return this._value;\n }\n hash(obj) {\n this._value = doHash(obj, this._value);\n return this._value;\n }\n}\nexports.Hasher = Hasher;\nvar SHA1Constant;\n(function (SHA1Constant) {\n SHA1Constant[SHA1Constant[\"BLOCK_SIZE\"] = 64] = \"BLOCK_SIZE\";\n SHA1Constant[SHA1Constant[\"UNICODE_REPLACEMENT\"] = 65533] = \"UNICODE_REPLACEMENT\";\n})(SHA1Constant || (SHA1Constant = {}));\nfunction leftRotate(value, bits, totalBits = 32) {\n // delta + bits = totalBits\n const delta = totalBits - bits;\n // All ones, expect `delta` zeros aligned to the right\n const mask = ~((1 << delta) - 1);\n // Join (value left-shifted `bits` bits) with (masked value right-shifted `delta` bits)\n return ((value << bits) | ((mask & value) >>> delta)) >>> 0;\n}\nfunction fill(dest, index = 0, count = dest.byteLength, value = 0) {\n for (let i = 0; i < count; i++) {\n dest[index + i] = value;\n }\n}\nfunction leftPad(value, length, char = '0') {\n while (value.length < length) {\n value = char + value;\n }\n return value;\n}\nfunction toHexString(bufferOrValue, bitsize = 32) {\n if (bufferOrValue instanceof ArrayBuffer) {\n return Array.from(new Uint8Array(bufferOrValue)).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n return leftPad((bufferOrValue >>> 0).toString(16), bitsize / 4);\n}\n/**\n * A SHA1 implementation that works with strings and does not allocate.\n */\nclass StringSHA1 {\n static { this._bigBlock32 = new DataView(new ArrayBuffer(320)); } // 80 * 4 = 320\n constructor() {\n this._h0 = 0x67452301;\n this._h1 = 0xEFCDAB89;\n this._h2 = 0x98BADCFE;\n this._h3 = 0x10325476;\n this._h4 = 0xC3D2E1F0;\n this._buff = new Uint8Array(SHA1Constant.BLOCK_SIZE + 3 /* to fit any utf-8 */);\n this._buffDV = new DataView(this._buff.buffer);\n this._buffLen = 0;\n this._totalLen = 0;\n this._leftoverHighSurrogate = 0;\n this._finished = false;\n }\n update(str) {\n const strLen = str.length;\n if (strLen === 0) {\n return;\n }\n const buff = this._buff;\n let buffLen = this._buffLen;\n let leftoverHighSurrogate = this._leftoverHighSurrogate;\n let charCode;\n let offset;\n if (leftoverHighSurrogate !== 0) {\n charCode = leftoverHighSurrogate;\n offset = -1;\n leftoverHighSurrogate = 0;\n }\n else {\n charCode = str.charCodeAt(0);\n offset = 0;\n }\n while (true) {\n let codePoint = charCode;\n if (strings.isHighSurrogate(charCode)) {\n if (offset + 1 < strLen) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (strings.isLowSurrogate(nextCharCode)) {\n offset++;\n codePoint = strings.computeCodePoint(charCode, nextCharCode);\n }\n else {\n // illegal => unicode replacement character\n codePoint = SHA1Constant.UNICODE_REPLACEMENT;\n }\n }\n else {\n // last character is a surrogate pair\n leftoverHighSurrogate = charCode;\n break;\n }\n }\n else if (strings.isLowSurrogate(charCode)) {\n // illegal => unicode replacement character\n codePoint = SHA1Constant.UNICODE_REPLACEMENT;\n }\n buffLen = this._push(buff, buffLen, codePoint);\n offset++;\n if (offset < strLen) {\n charCode = str.charCodeAt(offset);\n }\n else {\n break;\n }\n }\n this._buffLen = buffLen;\n this._leftoverHighSurrogate = leftoverHighSurrogate;\n }\n _push(buff, buffLen, codePoint) {\n if (codePoint < 0x0080) {\n buff[buffLen++] = codePoint;\n }\n else if (codePoint < 0x0800) {\n buff[buffLen++] = 0b11000000 | ((codePoint & 0b00000000000000000000011111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else if (codePoint < 0x10000) {\n buff[buffLen++] = 0b11100000 | ((codePoint & 0b00000000000000001111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else {\n buff[buffLen++] = 0b11110000 | ((codePoint & 0b00000000000111000000000000000000) >>> 18);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000111111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n if (buffLen >= SHA1Constant.BLOCK_SIZE) {\n this._step();\n buffLen -= SHA1Constant.BLOCK_SIZE;\n this._totalLen += SHA1Constant.BLOCK_SIZE;\n // take last 3 in case of UTF8 overflow\n buff[0] = buff[SHA1Constant.BLOCK_SIZE + 0];\n buff[1] = buff[SHA1Constant.BLOCK_SIZE + 1];\n buff[2] = buff[SHA1Constant.BLOCK_SIZE + 2];\n }\n return buffLen;\n }\n digest() {\n if (!this._finished) {\n this._finished = true;\n if (this._leftoverHighSurrogate) {\n // illegal => unicode replacement character\n this._leftoverHighSurrogate = 0;\n this._buffLen = this._push(this._buff, this._buffLen, SHA1Constant.UNICODE_REPLACEMENT);\n }\n this._totalLen += this._buffLen;\n this._wrapUp();\n }\n return toHexString(this._h0) + toHexString(this._h1) + toHexString(this._h2) + toHexString(this._h3) + toHexString(this._h4);\n }\n _wrapUp() {\n this._buff[this._buffLen++] = 0x80;\n fill(this._buff, this._buffLen);\n if (this._buffLen > 56) {\n this._step();\n fill(this._buff);\n }\n // this will fit because the mantissa can cover up to 52 bits\n const ml = 8 * this._totalLen;\n this._buffDV.setUint32(56, Math.floor(ml / 4294967296), false);\n this._buffDV.setUint32(60, ml % 4294967296, false);\n this._step();\n }\n _step() {\n const bigBlock32 = StringSHA1._bigBlock32;\n const data = this._buffDV;\n for (let j = 0; j < 64 /* 16*4 */; j += 4) {\n bigBlock32.setUint32(j, data.getUint32(j, false), false);\n }\n for (let j = 64; j < 320 /* 80*4 */; j += 4) {\n bigBlock32.setUint32(j, leftRotate((bigBlock32.getUint32(j - 12, false) ^ bigBlock32.getUint32(j - 32, false) ^ bigBlock32.getUint32(j - 56, false) ^ bigBlock32.getUint32(j - 64, false)), 1), false);\n }\n let a = this._h0;\n let b = this._h1;\n let c = this._h2;\n let d = this._h3;\n let e = this._h4;\n let f, k;\n let temp;\n for (let j = 0; j < 80; j++) {\n if (j < 20) {\n f = (b & c) | ((~b) & d);\n k = 0x5A827999;\n }\n else if (j < 40) {\n f = b ^ c ^ d;\n k = 0x6ED9EBA1;\n }\n else if (j < 60) {\n f = (b & c) | (b & d) | (c & d);\n k = 0x8F1BBCDC;\n }\n else {\n f = b ^ c ^ d;\n k = 0xCA62C1D6;\n }\n temp = (leftRotate(a, 5) + f + e + k + bigBlock32.getUint32(j * 4, false)) & 0xffffffff;\n e = d;\n d = c;\n c = leftRotate(b, 30);\n b = a;\n a = temp;\n }\n this._h0 = (this._h0 + a) & 0xffffffff;\n this._h1 = (this._h1 + b) & 0xffffffff;\n this._h2 = (this._h2 + c) & 0xffffffff;\n this._h3 = (this._h3 + d) & 0xffffffff;\n this._h4 = (this._h4 + e) & 0xffffffff;\n }\n}\nexports.StringSHA1 = StringSHA1;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Iterable = void 0;\nvar Iterable;\n(function (Iterable) {\n function is(thing) {\n return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';\n }\n Iterable.is = is;\n const _empty = Object.freeze([]);\n function empty() {\n return _empty;\n }\n Iterable.empty = empty;\n function* single(element) {\n yield element;\n }\n Iterable.single = single;\n function wrap(iterableOrElement) {\n if (is(iterableOrElement)) {\n return iterableOrElement;\n }\n else {\n return single(iterableOrElement);\n }\n }\n Iterable.wrap = wrap;\n function from(iterable) {\n return iterable || _empty;\n }\n Iterable.from = from;\n function* reverse(array) {\n for (let i = array.length - 1; i >= 0; i--) {\n yield array[i];\n }\n }\n Iterable.reverse = reverse;\n function isEmpty(iterable) {\n return !iterable || iterable[Symbol.iterator]().next().done === true;\n }\n Iterable.isEmpty = isEmpty;\n function first(iterable) {\n return iterable[Symbol.iterator]().next().value;\n }\n Iterable.first = first;\n function some(iterable, predicate) {\n let i = 0;\n for (const element of iterable) {\n if (predicate(element, i++)) {\n return true;\n }\n }\n return false;\n }\n Iterable.some = some;\n function find(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return element;\n }\n }\n return undefined;\n }\n Iterable.find = find;\n function* filter(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n yield element;\n }\n }\n }\n Iterable.filter = filter;\n function* map(iterable, fn) {\n let index = 0;\n for (const element of iterable) {\n yield fn(element, index++);\n }\n }\n Iterable.map = map;\n function* flatMap(iterable, fn) {\n let index = 0;\n for (const element of iterable) {\n yield* fn(element, index++);\n }\n }\n Iterable.flatMap = flatMap;\n function* concat(...iterables) {\n for (const iterable of iterables) {\n yield* iterable;\n }\n }\n Iterable.concat = concat;\n function reduce(iterable, reducer, initialValue) {\n let value = initialValue;\n for (const element of iterable) {\n value = reducer(value, element);\n }\n return value;\n }\n Iterable.reduce = reduce;\n /**\n * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n */\n function* slice(arr, from, to = arr.length) {\n if (from < 0) {\n from += arr.length;\n }\n if (to < 0) {\n to += arr.length;\n }\n else if (to > arr.length) {\n to = arr.length;\n }\n for (; from < to; from++) {\n yield arr[from];\n }\n }\n Iterable.slice = slice;\n /**\n * Consumes `atMost` elements from iterable and returns the consumed elements,\n * and an iterable for the rest of the elements.\n */\n function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n const consumed = [];\n if (atMost === 0) {\n return [consumed, iterable];\n }\n const iterator = iterable[Symbol.iterator]();\n for (let i = 0; i < atMost; i++) {\n const next = iterator.next();\n if (next.done) {\n return [consumed, Iterable.empty()];\n }\n consumed.push(next.value);\n }\n return [consumed, { [Symbol.iterator]() { return iterator; } }];\n }\n Iterable.consume = consume;\n async function asyncToArray(iterable) {\n const result = [];\n for await (const item of iterable) {\n result.push(item);\n }\n return Promise.resolve(result);\n }\n Iterable.asyncToArray = asyncToArray;\n})(Iterable || (exports.Iterable = Iterable = {}));\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KeyMod = exports.KeyCodeUtils = exports.ScanCodeUtils = exports.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE = exports.EVENT_KEY_CODE_MAP = exports.ScanCode = exports.KeyCode = void 0;\nexports.KeyChord = KeyChord;\n/**\n * Virtual Key Codes, the value does not hold any inherent meaning.\n * Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\n * But these are \"more general\", as they should work across browsers & OS`s.\n */\nvar KeyCode;\n(function (KeyCode) {\n KeyCode[KeyCode[\"DependsOnKbLayout\"] = -1] = \"DependsOnKbLayout\";\n /**\n * Placed first to cover the 0 value of the enum.\n */\n KeyCode[KeyCode[\"Unknown\"] = 0] = \"Unknown\";\n KeyCode[KeyCode[\"Backspace\"] = 1] = \"Backspace\";\n KeyCode[KeyCode[\"Tab\"] = 2] = \"Tab\";\n KeyCode[KeyCode[\"Enter\"] = 3] = \"Enter\";\n KeyCode[KeyCode[\"Shift\"] = 4] = \"Shift\";\n KeyCode[KeyCode[\"Ctrl\"] = 5] = \"Ctrl\";\n KeyCode[KeyCode[\"Alt\"] = 6] = \"Alt\";\n KeyCode[KeyCode[\"PauseBreak\"] = 7] = \"PauseBreak\";\n KeyCode[KeyCode[\"CapsLock\"] = 8] = \"CapsLock\";\n KeyCode[KeyCode[\"Escape\"] = 9] = \"Escape\";\n KeyCode[KeyCode[\"Space\"] = 10] = \"Space\";\n KeyCode[KeyCode[\"PageUp\"] = 11] = \"PageUp\";\n KeyCode[KeyCode[\"PageDown\"] = 12] = \"PageDown\";\n KeyCode[KeyCode[\"End\"] = 13] = \"End\";\n KeyCode[KeyCode[\"Home\"] = 14] = \"Home\";\n KeyCode[KeyCode[\"LeftArrow\"] = 15] = \"LeftArrow\";\n KeyCode[KeyCode[\"UpArrow\"] = 16] = \"UpArrow\";\n KeyCode[KeyCode[\"RightArrow\"] = 17] = \"RightArrow\";\n KeyCode[KeyCode[\"DownArrow\"] = 18] = \"DownArrow\";\n KeyCode[KeyCode[\"Insert\"] = 19] = \"Insert\";\n KeyCode[KeyCode[\"Delete\"] = 20] = \"Delete\";\n KeyCode[KeyCode[\"Digit0\"] = 21] = \"Digit0\";\n KeyCode[KeyCode[\"Digit1\"] = 22] = \"Digit1\";\n KeyCode[KeyCode[\"Digit2\"] = 23] = \"Digit2\";\n KeyCode[KeyCode[\"Digit3\"] = 24] = \"Digit3\";\n KeyCode[KeyCode[\"Digit4\"] = 25] = \"Digit4\";\n KeyCode[KeyCode[\"Digit5\"] = 26] = \"Digit5\";\n KeyCode[KeyCode[\"Digit6\"] = 27] = \"Digit6\";\n KeyCode[KeyCode[\"Digit7\"] = 28] = \"Digit7\";\n KeyCode[KeyCode[\"Digit8\"] = 29] = \"Digit8\";\n KeyCode[KeyCode[\"Digit9\"] = 30] = \"Digit9\";\n KeyCode[KeyCode[\"KeyA\"] = 31] = \"KeyA\";\n KeyCode[KeyCode[\"KeyB\"] = 32] = \"KeyB\";\n KeyCode[KeyCode[\"KeyC\"] = 33] = \"KeyC\";\n KeyCode[KeyCode[\"KeyD\"] = 34] = \"KeyD\";\n KeyCode[KeyCode[\"KeyE\"] = 35] = \"KeyE\";\n KeyCode[KeyCode[\"KeyF\"] = 36] = \"KeyF\";\n KeyCode[KeyCode[\"KeyG\"] = 37] = \"KeyG\";\n KeyCode[KeyCode[\"KeyH\"] = 38] = \"KeyH\";\n KeyCode[KeyCode[\"KeyI\"] = 39] = \"KeyI\";\n KeyCode[KeyCode[\"KeyJ\"] = 40] = \"KeyJ\";\n KeyCode[KeyCode[\"KeyK\"] = 41] = \"KeyK\";\n KeyCode[KeyCode[\"KeyL\"] = 42] = \"KeyL\";\n KeyCode[KeyCode[\"KeyM\"] = 43] = \"KeyM\";\n KeyCode[KeyCode[\"KeyN\"] = 44] = \"KeyN\";\n KeyCode[KeyCode[\"KeyO\"] = 45] = \"KeyO\";\n KeyCode[KeyCode[\"KeyP\"] = 46] = \"KeyP\";\n KeyCode[KeyCode[\"KeyQ\"] = 47] = \"KeyQ\";\n KeyCode[KeyCode[\"KeyR\"] = 48] = \"KeyR\";\n KeyCode[KeyCode[\"KeyS\"] = 49] = \"KeyS\";\n KeyCode[KeyCode[\"KeyT\"] = 50] = \"KeyT\";\n KeyCode[KeyCode[\"KeyU\"] = 51] = \"KeyU\";\n KeyCode[KeyCode[\"KeyV\"] = 52] = \"KeyV\";\n KeyCode[KeyCode[\"KeyW\"] = 53] = \"KeyW\";\n KeyCode[KeyCode[\"KeyX\"] = 54] = \"KeyX\";\n KeyCode[KeyCode[\"KeyY\"] = 55] = \"KeyY\";\n KeyCode[KeyCode[\"KeyZ\"] = 56] = \"KeyZ\";\n KeyCode[KeyCode[\"Meta\"] = 57] = \"Meta\";\n KeyCode[KeyCode[\"ContextMenu\"] = 58] = \"ContextMenu\";\n KeyCode[KeyCode[\"F1\"] = 59] = \"F1\";\n KeyCode[KeyCode[\"F2\"] = 60] = \"F2\";\n KeyCode[KeyCode[\"F3\"] = 61] = \"F3\";\n KeyCode[KeyCode[\"F4\"] = 62] = \"F4\";\n KeyCode[KeyCode[\"F5\"] = 63] = \"F5\";\n KeyCode[KeyCode[\"F6\"] = 64] = \"F6\";\n KeyCode[KeyCode[\"F7\"] = 65] = \"F7\";\n KeyCode[KeyCode[\"F8\"] = 66] = \"F8\";\n KeyCode[KeyCode[\"F9\"] = 67] = \"F9\";\n KeyCode[KeyCode[\"F10\"] = 68] = \"F10\";\n KeyCode[KeyCode[\"F11\"] = 69] = \"F11\";\n KeyCode[KeyCode[\"F12\"] = 70] = \"F12\";\n KeyCode[KeyCode[\"F13\"] = 71] = \"F13\";\n KeyCode[KeyCode[\"F14\"] = 72] = \"F14\";\n KeyCode[KeyCode[\"F15\"] = 73] = \"F15\";\n KeyCode[KeyCode[\"F16\"] = 74] = \"F16\";\n KeyCode[KeyCode[\"F17\"] = 75] = \"F17\";\n KeyCode[KeyCode[\"F18\"] = 76] = \"F18\";\n KeyCode[KeyCode[\"F19\"] = 77] = \"F19\";\n KeyCode[KeyCode[\"F20\"] = 78] = \"F20\";\n KeyCode[KeyCode[\"F21\"] = 79] = \"F21\";\n KeyCode[KeyCode[\"F22\"] = 80] = \"F22\";\n KeyCode[KeyCode[\"F23\"] = 81] = \"F23\";\n KeyCode[KeyCode[\"F24\"] = 82] = \"F24\";\n KeyCode[KeyCode[\"NumLock\"] = 83] = \"NumLock\";\n KeyCode[KeyCode[\"ScrollLock\"] = 84] = \"ScrollLock\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ';:' key\n */\n KeyCode[KeyCode[\"Semicolon\"] = 85] = \"Semicolon\";\n /**\n * For any country/region, the '+' key\n * For the US standard keyboard, the '=+' key\n */\n KeyCode[KeyCode[\"Equal\"] = 86] = \"Equal\";\n /**\n * For any country/region, the ',' key\n * For the US standard keyboard, the ',<' key\n */\n KeyCode[KeyCode[\"Comma\"] = 87] = \"Comma\";\n /**\n * For any country/region, the '-' key\n * For the US standard keyboard, the '-_' key\n */\n KeyCode[KeyCode[\"Minus\"] = 88] = \"Minus\";\n /**\n * For any country/region, the '.' key\n * For the US standard keyboard, the '.>' key\n */\n KeyCode[KeyCode[\"Period\"] = 89] = \"Period\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '/?' key\n */\n KeyCode[KeyCode[\"Slash\"] = 90] = \"Slash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '`~' key\n */\n KeyCode[KeyCode[\"Backquote\"] = 91] = \"Backquote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '[{' key\n */\n KeyCode[KeyCode[\"BracketLeft\"] = 92] = \"BracketLeft\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '\\|' key\n */\n KeyCode[KeyCode[\"Backslash\"] = 93] = \"Backslash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ']}' key\n */\n KeyCode[KeyCode[\"BracketRight\"] = 94] = \"BracketRight\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ''\"' key\n */\n KeyCode[KeyCode[\"Quote\"] = 95] = \"Quote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n */\n KeyCode[KeyCode[\"OEM_8\"] = 96] = \"OEM_8\";\n /**\n * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n */\n KeyCode[KeyCode[\"IntlBackslash\"] = 97] = \"IntlBackslash\";\n KeyCode[KeyCode[\"Numpad0\"] = 98] = \"Numpad0\";\n KeyCode[KeyCode[\"Numpad1\"] = 99] = \"Numpad1\";\n KeyCode[KeyCode[\"Numpad2\"] = 100] = \"Numpad2\";\n KeyCode[KeyCode[\"Numpad3\"] = 101] = \"Numpad3\";\n KeyCode[KeyCode[\"Numpad4\"] = 102] = \"Numpad4\";\n KeyCode[KeyCode[\"Numpad5\"] = 103] = \"Numpad5\";\n KeyCode[KeyCode[\"Numpad6\"] = 104] = \"Numpad6\";\n KeyCode[KeyCode[\"Numpad7\"] = 105] = \"Numpad7\";\n KeyCode[KeyCode[\"Numpad8\"] = 106] = \"Numpad8\";\n KeyCode[KeyCode[\"Numpad9\"] = 107] = \"Numpad9\";\n KeyCode[KeyCode[\"NumpadMultiply\"] = 108] = \"NumpadMultiply\";\n KeyCode[KeyCode[\"NumpadAdd\"] = 109] = \"NumpadAdd\";\n KeyCode[KeyCode[\"NUMPAD_SEPARATOR\"] = 110] = \"NUMPAD_SEPARATOR\";\n KeyCode[KeyCode[\"NumpadSubtract\"] = 111] = \"NumpadSubtract\";\n KeyCode[KeyCode[\"NumpadDecimal\"] = 112] = \"NumpadDecimal\";\n KeyCode[KeyCode[\"NumpadDivide\"] = 113] = \"NumpadDivide\";\n /**\n * Cover all key codes when IME is processing input.\n */\n KeyCode[KeyCode[\"KEY_IN_COMPOSITION\"] = 114] = \"KEY_IN_COMPOSITION\";\n KeyCode[KeyCode[\"ABNT_C1\"] = 115] = \"ABNT_C1\";\n KeyCode[KeyCode[\"ABNT_C2\"] = 116] = \"ABNT_C2\";\n KeyCode[KeyCode[\"AudioVolumeMute\"] = 117] = \"AudioVolumeMute\";\n KeyCode[KeyCode[\"AudioVolumeUp\"] = 118] = \"AudioVolumeUp\";\n KeyCode[KeyCode[\"AudioVolumeDown\"] = 119] = \"AudioVolumeDown\";\n KeyCode[KeyCode[\"BrowserSearch\"] = 120] = \"BrowserSearch\";\n KeyCode[KeyCode[\"BrowserHome\"] = 121] = \"BrowserHome\";\n KeyCode[KeyCode[\"BrowserBack\"] = 122] = \"BrowserBack\";\n KeyCode[KeyCode[\"BrowserForward\"] = 123] = \"BrowserForward\";\n KeyCode[KeyCode[\"MediaTrackNext\"] = 124] = \"MediaTrackNext\";\n KeyCode[KeyCode[\"MediaTrackPrevious\"] = 125] = \"MediaTrackPrevious\";\n KeyCode[KeyCode[\"MediaStop\"] = 126] = \"MediaStop\";\n KeyCode[KeyCode[\"MediaPlayPause\"] = 127] = \"MediaPlayPause\";\n KeyCode[KeyCode[\"LaunchMediaPlayer\"] = 128] = \"LaunchMediaPlayer\";\n KeyCode[KeyCode[\"LaunchMail\"] = 129] = \"LaunchMail\";\n KeyCode[KeyCode[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n /**\n * VK_CLEAR, 0x0C, CLEAR key\n */\n KeyCode[KeyCode[\"Clear\"] = 131] = \"Clear\";\n /**\n * Placed last to cover the length of the enum.\n * Please do not depend on this value!\n */\n KeyCode[KeyCode[\"MAX_VALUE\"] = 132] = \"MAX_VALUE\";\n})(KeyCode || (exports.KeyCode = KeyCode = {}));\n/**\n * keyboardEvent.code\n */\nvar ScanCode;\n(function (ScanCode) {\n ScanCode[ScanCode[\"DependsOnKbLayout\"] = -1] = \"DependsOnKbLayout\";\n ScanCode[ScanCode[\"None\"] = 0] = \"None\";\n ScanCode[ScanCode[\"Hyper\"] = 1] = \"Hyper\";\n ScanCode[ScanCode[\"Super\"] = 2] = \"Super\";\n ScanCode[ScanCode[\"Fn\"] = 3] = \"Fn\";\n ScanCode[ScanCode[\"FnLock\"] = 4] = \"FnLock\";\n ScanCode[ScanCode[\"Suspend\"] = 5] = \"Suspend\";\n ScanCode[ScanCode[\"Resume\"] = 6] = \"Resume\";\n ScanCode[ScanCode[\"Turbo\"] = 7] = \"Turbo\";\n ScanCode[ScanCode[\"Sleep\"] = 8] = \"Sleep\";\n ScanCode[ScanCode[\"WakeUp\"] = 9] = \"WakeUp\";\n ScanCode[ScanCode[\"KeyA\"] = 10] = \"KeyA\";\n ScanCode[ScanCode[\"KeyB\"] = 11] = \"KeyB\";\n ScanCode[ScanCode[\"KeyC\"] = 12] = \"KeyC\";\n ScanCode[ScanCode[\"KeyD\"] = 13] = \"KeyD\";\n ScanCode[ScanCode[\"KeyE\"] = 14] = \"KeyE\";\n ScanCode[ScanCode[\"KeyF\"] = 15] = \"KeyF\";\n ScanCode[ScanCode[\"KeyG\"] = 16] = \"KeyG\";\n ScanCode[ScanCode[\"KeyH\"] = 17] = \"KeyH\";\n ScanCode[ScanCode[\"KeyI\"] = 18] = \"KeyI\";\n ScanCode[ScanCode[\"KeyJ\"] = 19] = \"KeyJ\";\n ScanCode[ScanCode[\"KeyK\"] = 20] = \"KeyK\";\n ScanCode[ScanCode[\"KeyL\"] = 21] = \"KeyL\";\n ScanCode[ScanCode[\"KeyM\"] = 22] = \"KeyM\";\n ScanCode[ScanCode[\"KeyN\"] = 23] = \"KeyN\";\n ScanCode[ScanCode[\"KeyO\"] = 24] = \"KeyO\";\n ScanCode[ScanCode[\"KeyP\"] = 25] = \"KeyP\";\n ScanCode[ScanCode[\"KeyQ\"] = 26] = \"KeyQ\";\n ScanCode[ScanCode[\"KeyR\"] = 27] = \"KeyR\";\n ScanCode[ScanCode[\"KeyS\"] = 28] = \"KeyS\";\n ScanCode[ScanCode[\"KeyT\"] = 29] = \"KeyT\";\n ScanCode[ScanCode[\"KeyU\"] = 30] = \"KeyU\";\n ScanCode[ScanCode[\"KeyV\"] = 31] = \"KeyV\";\n ScanCode[ScanCode[\"KeyW\"] = 32] = \"KeyW\";\n ScanCode[ScanCode[\"KeyX\"] = 33] = \"KeyX\";\n ScanCode[ScanCode[\"KeyY\"] = 34] = \"KeyY\";\n ScanCode[ScanCode[\"KeyZ\"] = 35] = \"KeyZ\";\n ScanCode[ScanCode[\"Digit1\"] = 36] = \"Digit1\";\n ScanCode[ScanCode[\"Digit2\"] = 37] = \"Digit2\";\n ScanCode[ScanCode[\"Digit3\"] = 38] = \"Digit3\";\n ScanCode[ScanCode[\"Digit4\"] = 39] = \"Digit4\";\n ScanCode[ScanCode[\"Digit5\"] = 40] = \"Digit5\";\n ScanCode[ScanCode[\"Digit6\"] = 41] = \"Digit6\";\n ScanCode[ScanCode[\"Digit7\"] = 42] = \"Digit7\";\n ScanCode[ScanCode[\"Digit8\"] = 43] = \"Digit8\";\n ScanCode[ScanCode[\"Digit9\"] = 44] = \"Digit9\";\n ScanCode[ScanCode[\"Digit0\"] = 45] = \"Digit0\";\n ScanCode[ScanCode[\"Enter\"] = 46] = \"Enter\";\n ScanCode[ScanCode[\"Escape\"] = 47] = \"Escape\";\n ScanCode[ScanCode[\"Backspace\"] = 48] = \"Backspace\";\n ScanCode[ScanCode[\"Tab\"] = 49] = \"Tab\";\n ScanCode[ScanCode[\"Space\"] = 50] = \"Space\";\n ScanCode[ScanCode[\"Minus\"] = 51] = \"Minus\";\n ScanCode[ScanCode[\"Equal\"] = 52] = \"Equal\";\n ScanCode[ScanCode[\"BracketLeft\"] = 53] = \"BracketLeft\";\n ScanCode[ScanCode[\"BracketRight\"] = 54] = \"BracketRight\";\n ScanCode[ScanCode[\"Backslash\"] = 55] = \"Backslash\";\n ScanCode[ScanCode[\"IntlHash\"] = 56] = \"IntlHash\";\n ScanCode[ScanCode[\"Semicolon\"] = 57] = \"Semicolon\";\n ScanCode[ScanCode[\"Quote\"] = 58] = \"Quote\";\n ScanCode[ScanCode[\"Backquote\"] = 59] = \"Backquote\";\n ScanCode[ScanCode[\"Comma\"] = 60] = \"Comma\";\n ScanCode[ScanCode[\"Period\"] = 61] = \"Period\";\n ScanCode[ScanCode[\"Slash\"] = 62] = \"Slash\";\n ScanCode[ScanCode[\"CapsLock\"] = 63] = \"CapsLock\";\n ScanCode[ScanCode[\"F1\"] = 64] = \"F1\";\n ScanCode[ScanCode[\"F2\"] = 65] = \"F2\";\n ScanCode[ScanCode[\"F3\"] = 66] = \"F3\";\n ScanCode[ScanCode[\"F4\"] = 67] = \"F4\";\n ScanCode[ScanCode[\"F5\"] = 68] = \"F5\";\n ScanCode[ScanCode[\"F6\"] = 69] = \"F6\";\n ScanCode[ScanCode[\"F7\"] = 70] = \"F7\";\n ScanCode[ScanCode[\"F8\"] = 71] = \"F8\";\n ScanCode[ScanCode[\"F9\"] = 72] = \"F9\";\n ScanCode[ScanCode[\"F10\"] = 73] = \"F10\";\n ScanCode[ScanCode[\"F11\"] = 74] = \"F11\";\n ScanCode[ScanCode[\"F12\"] = 75] = \"F12\";\n ScanCode[ScanCode[\"PrintScreen\"] = 76] = \"PrintScreen\";\n ScanCode[ScanCode[\"ScrollLock\"] = 77] = \"ScrollLock\";\n ScanCode[ScanCode[\"Pause\"] = 78] = \"Pause\";\n ScanCode[ScanCode[\"Insert\"] = 79] = \"Insert\";\n ScanCode[ScanCode[\"Home\"] = 80] = \"Home\";\n ScanCode[ScanCode[\"PageUp\"] = 81] = \"PageUp\";\n ScanCode[ScanCode[\"Delete\"] = 82] = \"Delete\";\n ScanCode[ScanCode[\"End\"] = 83] = \"End\";\n ScanCode[ScanCode[\"PageDown\"] = 84] = \"PageDown\";\n ScanCode[ScanCode[\"ArrowRight\"] = 85] = \"ArrowRight\";\n ScanCode[ScanCode[\"ArrowLeft\"] = 86] = \"ArrowLeft\";\n ScanCode[ScanCode[\"ArrowDown\"] = 87] = \"ArrowDown\";\n ScanCode[ScanCode[\"ArrowUp\"] = 88] = \"ArrowUp\";\n ScanCode[ScanCode[\"NumLock\"] = 89] = \"NumLock\";\n ScanCode[ScanCode[\"NumpadDivide\"] = 90] = \"NumpadDivide\";\n ScanCode[ScanCode[\"NumpadMultiply\"] = 91] = \"NumpadMultiply\";\n ScanCode[ScanCode[\"NumpadSubtract\"] = 92] = \"NumpadSubtract\";\n ScanCode[ScanCode[\"NumpadAdd\"] = 93] = \"NumpadAdd\";\n ScanCode[ScanCode[\"NumpadEnter\"] = 94] = \"NumpadEnter\";\n ScanCode[ScanCode[\"Numpad1\"] = 95] = \"Numpad1\";\n ScanCode[ScanCode[\"Numpad2\"] = 96] = \"Numpad2\";\n ScanCode[ScanCode[\"Numpad3\"] = 97] = \"Numpad3\";\n ScanCode[ScanCode[\"Numpad4\"] = 98] = \"Numpad4\";\n ScanCode[ScanCode[\"Numpad5\"] = 99] = \"Numpad5\";\n ScanCode[ScanCode[\"Numpad6\"] = 100] = \"Numpad6\";\n ScanCode[ScanCode[\"Numpad7\"] = 101] = \"Numpad7\";\n ScanCode[ScanCode[\"Numpad8\"] = 102] = \"Numpad8\";\n ScanCode[ScanCode[\"Numpad9\"] = 103] = \"Numpad9\";\n ScanCode[ScanCode[\"Numpad0\"] = 104] = \"Numpad0\";\n ScanCode[ScanCode[\"NumpadDecimal\"] = 105] = \"NumpadDecimal\";\n ScanCode[ScanCode[\"IntlBackslash\"] = 106] = \"IntlBackslash\";\n ScanCode[ScanCode[\"ContextMenu\"] = 107] = \"ContextMenu\";\n ScanCode[ScanCode[\"Power\"] = 108] = \"Power\";\n ScanCode[ScanCode[\"NumpadEqual\"] = 109] = \"NumpadEqual\";\n ScanCode[ScanCode[\"F13\"] = 110] = \"F13\";\n ScanCode[ScanCode[\"F14\"] = 111] = \"F14\";\n ScanCode[ScanCode[\"F15\"] = 112] = \"F15\";\n ScanCode[ScanCode[\"F16\"] = 113] = \"F16\";\n ScanCode[ScanCode[\"F17\"] = 114] = \"F17\";\n ScanCode[ScanCode[\"F18\"] = 115] = \"F18\";\n ScanCode[ScanCode[\"F19\"] = 116] = \"F19\";\n ScanCode[ScanCode[\"F20\"] = 117] = \"F20\";\n ScanCode[ScanCode[\"F21\"] = 118] = \"F21\";\n ScanCode[ScanCode[\"F22\"] = 119] = \"F22\";\n ScanCode[ScanCode[\"F23\"] = 120] = \"F23\";\n ScanCode[ScanCode[\"F24\"] = 121] = \"F24\";\n ScanCode[ScanCode[\"Open\"] = 122] = \"Open\";\n ScanCode[ScanCode[\"Help\"] = 123] = \"Help\";\n ScanCode[ScanCode[\"Select\"] = 124] = \"Select\";\n ScanCode[ScanCode[\"Again\"] = 125] = \"Again\";\n ScanCode[ScanCode[\"Undo\"] = 126] = \"Undo\";\n ScanCode[ScanCode[\"Cut\"] = 127] = \"Cut\";\n ScanCode[ScanCode[\"Copy\"] = 128] = \"Copy\";\n ScanCode[ScanCode[\"Paste\"] = 129] = \"Paste\";\n ScanCode[ScanCode[\"Find\"] = 130] = \"Find\";\n ScanCode[ScanCode[\"AudioVolumeMute\"] = 131] = \"AudioVolumeMute\";\n ScanCode[ScanCode[\"AudioVolumeUp\"] = 132] = \"AudioVolumeUp\";\n ScanCode[ScanCode[\"AudioVolumeDown\"] = 133] = \"AudioVolumeDown\";\n ScanCode[ScanCode[\"NumpadComma\"] = 134] = \"NumpadComma\";\n ScanCode[ScanCode[\"IntlRo\"] = 135] = \"IntlRo\";\n ScanCode[ScanCode[\"KanaMode\"] = 136] = \"KanaMode\";\n ScanCode[ScanCode[\"IntlYen\"] = 137] = \"IntlYen\";\n ScanCode[ScanCode[\"Convert\"] = 138] = \"Convert\";\n ScanCode[ScanCode[\"NonConvert\"] = 139] = \"NonConvert\";\n ScanCode[ScanCode[\"Lang1\"] = 140] = \"Lang1\";\n ScanCode[ScanCode[\"Lang2\"] = 141] = \"Lang2\";\n ScanCode[ScanCode[\"Lang3\"] = 142] = \"Lang3\";\n ScanCode[ScanCode[\"Lang4\"] = 143] = \"Lang4\";\n ScanCode[ScanCode[\"Lang5\"] = 144] = \"Lang5\";\n ScanCode[ScanCode[\"Abort\"] = 145] = \"Abort\";\n ScanCode[ScanCode[\"Props\"] = 146] = \"Props\";\n ScanCode[ScanCode[\"NumpadParenLeft\"] = 147] = \"NumpadParenLeft\";\n ScanCode[ScanCode[\"NumpadParenRight\"] = 148] = \"NumpadParenRight\";\n ScanCode[ScanCode[\"NumpadBackspace\"] = 149] = \"NumpadBackspace\";\n ScanCode[ScanCode[\"NumpadMemoryStore\"] = 150] = \"NumpadMemoryStore\";\n ScanCode[ScanCode[\"NumpadMemoryRecall\"] = 151] = \"NumpadMemoryRecall\";\n ScanCode[ScanCode[\"NumpadMemoryClear\"] = 152] = \"NumpadMemoryClear\";\n ScanCode[ScanCode[\"NumpadMemoryAdd\"] = 153] = \"NumpadMemoryAdd\";\n ScanCode[ScanCode[\"NumpadMemorySubtract\"] = 154] = \"NumpadMemorySubtract\";\n ScanCode[ScanCode[\"NumpadClear\"] = 155] = \"NumpadClear\";\n ScanCode[ScanCode[\"NumpadClearEntry\"] = 156] = \"NumpadClearEntry\";\n ScanCode[ScanCode[\"ControlLeft\"] = 157] = \"ControlLeft\";\n ScanCode[ScanCode[\"ShiftLeft\"] = 158] = \"ShiftLeft\";\n ScanCode[ScanCode[\"AltLeft\"] = 159] = \"AltLeft\";\n ScanCode[ScanCode[\"MetaLeft\"] = 160] = \"MetaLeft\";\n ScanCode[ScanCode[\"ControlRight\"] = 161] = \"ControlRight\";\n ScanCode[ScanCode[\"ShiftRight\"] = 162] = \"ShiftRight\";\n ScanCode[ScanCode[\"AltRight\"] = 163] = \"AltRight\";\n ScanCode[ScanCode[\"MetaRight\"] = 164] = \"MetaRight\";\n ScanCode[ScanCode[\"BrightnessUp\"] = 165] = \"BrightnessUp\";\n ScanCode[ScanCode[\"BrightnessDown\"] = 166] = \"BrightnessDown\";\n ScanCode[ScanCode[\"MediaPlay\"] = 167] = \"MediaPlay\";\n ScanCode[ScanCode[\"MediaRecord\"] = 168] = \"MediaRecord\";\n ScanCode[ScanCode[\"MediaFastForward\"] = 169] = \"MediaFastForward\";\n ScanCode[ScanCode[\"MediaRewind\"] = 170] = \"MediaRewind\";\n ScanCode[ScanCode[\"MediaTrackNext\"] = 171] = \"MediaTrackNext\";\n ScanCode[ScanCode[\"MediaTrackPrevious\"] = 172] = \"MediaTrackPrevious\";\n ScanCode[ScanCode[\"MediaStop\"] = 173] = \"MediaStop\";\n ScanCode[ScanCode[\"Eject\"] = 174] = \"Eject\";\n ScanCode[ScanCode[\"MediaPlayPause\"] = 175] = \"MediaPlayPause\";\n ScanCode[ScanCode[\"MediaSelect\"] = 176] = \"MediaSelect\";\n ScanCode[ScanCode[\"LaunchMail\"] = 177] = \"LaunchMail\";\n ScanCode[ScanCode[\"LaunchApp2\"] = 178] = \"LaunchApp2\";\n ScanCode[ScanCode[\"LaunchApp1\"] = 179] = \"LaunchApp1\";\n ScanCode[ScanCode[\"SelectTask\"] = 180] = \"SelectTask\";\n ScanCode[ScanCode[\"LaunchScreenSaver\"] = 181] = \"LaunchScreenSaver\";\n ScanCode[ScanCode[\"BrowserSearch\"] = 182] = \"BrowserSearch\";\n ScanCode[ScanCode[\"BrowserHome\"] = 183] = \"BrowserHome\";\n ScanCode[ScanCode[\"BrowserBack\"] = 184] = \"BrowserBack\";\n ScanCode[ScanCode[\"BrowserForward\"] = 185] = \"BrowserForward\";\n ScanCode[ScanCode[\"BrowserStop\"] = 186] = \"BrowserStop\";\n ScanCode[ScanCode[\"BrowserRefresh\"] = 187] = \"BrowserRefresh\";\n ScanCode[ScanCode[\"BrowserFavorites\"] = 188] = \"BrowserFavorites\";\n ScanCode[ScanCode[\"ZoomToggle\"] = 189] = \"ZoomToggle\";\n ScanCode[ScanCode[\"MailReply\"] = 190] = \"MailReply\";\n ScanCode[ScanCode[\"MailForward\"] = 191] = \"MailForward\";\n ScanCode[ScanCode[\"MailSend\"] = 192] = \"MailSend\";\n ScanCode[ScanCode[\"MAX_VALUE\"] = 193] = \"MAX_VALUE\";\n})(ScanCode || (exports.ScanCode = ScanCode = {}));\nclass KeyCodeStrMap {\n constructor() {\n this._keyCodeToStr = [];\n this._strToKeyCode = Object.create(null);\n }\n define(keyCode, str) {\n this._keyCodeToStr[keyCode] = str;\n this._strToKeyCode[str.toLowerCase()] = keyCode;\n }\n keyCodeToStr(keyCode) {\n return this._keyCodeToStr[keyCode];\n }\n strToKeyCode(str) {\n return this._strToKeyCode[str.toLowerCase()] || KeyCode.Unknown;\n }\n}\nconst uiMap = new KeyCodeStrMap();\nconst userSettingsUSMap = new KeyCodeStrMap();\nconst userSettingsGeneralMap = new KeyCodeStrMap();\nexports.EVENT_KEY_CODE_MAP = new Array(230);\nexports.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE = {};\nconst scanCodeIntToStr = [];\nconst scanCodeStrToInt = Object.create(null);\nconst scanCodeLowerCaseStrToInt = Object.create(null);\nexports.ScanCodeUtils = {\n lowerCaseToEnum: (scanCode) => scanCodeLowerCaseStrToInt[scanCode] || ScanCode.None,\n toEnum: (scanCode) => scanCodeStrToInt[scanCode] || ScanCode.None,\n toString: (scanCode) => scanCodeIntToStr[scanCode] || 'None'\n};\nvar KeyCodeUtils;\n(function (KeyCodeUtils) {\n function toString(keyCode) {\n return uiMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toString = toString;\n function fromString(key) {\n return uiMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromString = fromString;\n function toUserSettingsUS(keyCode) {\n return userSettingsUSMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsUS = toUserSettingsUS;\n function toUserSettingsGeneral(keyCode) {\n return userSettingsGeneralMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsGeneral = toUserSettingsGeneral;\n function fromUserSettings(key) {\n return userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromUserSettings = fromUserSettings;\n function toElectronAccelerator(keyCode) {\n if (keyCode >= KeyCode.Numpad0 && keyCode <= KeyCode.NumpadDivide) {\n // [Electron Accelerators] Electron is able to parse numpad keys, but unfortunately it\n // renders them just as regular keys in menus. For example, num0 is rendered as \"0\",\n // numdiv is rendered as \"/\", numsub is rendered as \"-\".\n //\n // This can lead to incredible confusion, as it makes numpad based keybindings indistinguishable\n // from keybindings based on regular keys.\n //\n // We therefore need to fall back to custom rendering for numpad keys.\n return null;\n }\n switch (keyCode) {\n case KeyCode.UpArrow:\n return 'Up';\n case KeyCode.DownArrow:\n return 'Down';\n case KeyCode.LeftArrow:\n return 'Left';\n case KeyCode.RightArrow:\n return 'Right';\n }\n return uiMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toElectronAccelerator = toElectronAccelerator;\n})(KeyCodeUtils || (exports.KeyCodeUtils = KeyCodeUtils = {}));\nvar KeyMod;\n(function (KeyMod) {\n KeyMod[KeyMod[\"CtrlCmd\"] = 2048] = \"CtrlCmd\";\n KeyMod[KeyMod[\"Shift\"] = 1024] = \"Shift\";\n KeyMod[KeyMod[\"Alt\"] = 512] = \"Alt\";\n KeyMod[KeyMod[\"WinCtrl\"] = 256] = \"WinCtrl\";\n})(KeyMod || (exports.KeyMod = KeyMod = {}));\nfunction KeyChord(firstPart, secondPart) {\n const chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;\n return (firstPart | chordPart) >>> 0;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ResolvedKeybinding = exports.ResolvedChord = exports.Keybinding = exports.ScanCodeChord = exports.KeyCodeChord = void 0;\nexports.decodeKeybinding = decodeKeybinding;\nexports.createSimpleKeybinding = createSimpleKeybinding;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst keyCodes_1 = require(\"vs/base/common/keyCodes\");\nconst platform_1 = require(\"vs/base/common/platform\");\n/**\n * Binary encoding strategy:\n * ```\n * 1111 11\n * 5432 1098 7654 3210\n * ---- CSAW KKKK KKKK\n * C = bit 11 = ctrlCmd flag\n * S = bit 10 = shift flag\n * A = bit 9 = alt flag\n * W = bit 8 = winCtrl flag\n * K = bits 0-7 = key code\n * ```\n */\nvar BinaryKeybindingsMask;\n(function (BinaryKeybindingsMask) {\n BinaryKeybindingsMask[BinaryKeybindingsMask[\"CtrlCmd\"] = 2048] = \"CtrlCmd\";\n BinaryKeybindingsMask[BinaryKeybindingsMask[\"Shift\"] = 1024] = \"Shift\";\n BinaryKeybindingsMask[BinaryKeybindingsMask[\"Alt\"] = 512] = \"Alt\";\n BinaryKeybindingsMask[BinaryKeybindingsMask[\"WinCtrl\"] = 256] = \"WinCtrl\";\n BinaryKeybindingsMask[BinaryKeybindingsMask[\"KeyCode\"] = 255] = \"KeyCode\";\n})(BinaryKeybindingsMask || (BinaryKeybindingsMask = {}));\nfunction decodeKeybinding(keybinding, OS) {\n if (typeof keybinding === 'number') {\n if (keybinding === 0) {\n return null;\n }\n const firstChord = (keybinding & 0x0000FFFF) >>> 0;\n const secondChord = (keybinding & 0xFFFF0000) >>> 16;\n if (secondChord !== 0) {\n return new Keybinding([\n createSimpleKeybinding(firstChord, OS),\n createSimpleKeybinding(secondChord, OS)\n ]);\n }\n return new Keybinding([createSimpleKeybinding(firstChord, OS)]);\n }\n else {\n const chords = [];\n for (let i = 0; i < keybinding.length; i++) {\n chords.push(createSimpleKeybinding(keybinding[i], OS));\n }\n return new Keybinding(chords);\n }\n}\nfunction createSimpleKeybinding(keybinding, OS) {\n const ctrlCmd = (keybinding & BinaryKeybindingsMask.CtrlCmd ? true : false);\n const winCtrl = (keybinding & BinaryKeybindingsMask.WinCtrl ? true : false);\n const ctrlKey = (OS === platform_1.OperatingSystem.Macintosh ? winCtrl : ctrlCmd);\n const shiftKey = (keybinding & BinaryKeybindingsMask.Shift ? true : false);\n const altKey = (keybinding & BinaryKeybindingsMask.Alt ? true : false);\n const metaKey = (OS === platform_1.OperatingSystem.Macintosh ? ctrlCmd : winCtrl);\n const keyCode = (keybinding & BinaryKeybindingsMask.KeyCode);\n return new KeyCodeChord(ctrlKey, shiftKey, altKey, metaKey, keyCode);\n}\n/**\n * Represents a chord which uses the `keyCode` field of keyboard events.\n * A chord is a combination of keys pressed simultaneously.\n */\nclass KeyCodeChord {\n constructor(ctrlKey, shiftKey, altKey, metaKey, keyCode) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.keyCode = keyCode;\n }\n equals(other) {\n return (other instanceof KeyCodeChord\n && this.ctrlKey === other.ctrlKey\n && this.shiftKey === other.shiftKey\n && this.altKey === other.altKey\n && this.metaKey === other.metaKey\n && this.keyCode === other.keyCode);\n }\n getHashCode() {\n const ctrl = this.ctrlKey ? '1' : '0';\n const shift = this.shiftKey ? '1' : '0';\n const alt = this.altKey ? '1' : '0';\n const meta = this.metaKey ? '1' : '0';\n return `K${ctrl}${shift}${alt}${meta}${this.keyCode}`;\n }\n isModifierKey() {\n return (this.keyCode === keyCodes_1.KeyCode.Unknown\n || this.keyCode === keyCodes_1.KeyCode.Ctrl\n || this.keyCode === keyCodes_1.KeyCode.Meta\n || this.keyCode === keyCodes_1.KeyCode.Alt\n || this.keyCode === keyCodes_1.KeyCode.Shift);\n }\n toKeybinding() {\n return new Keybinding([this]);\n }\n /**\n * Does this keybinding refer to the key code of a modifier and it also has the modifier flag?\n */\n isDuplicateModifierCase() {\n return ((this.ctrlKey && this.keyCode === keyCodes_1.KeyCode.Ctrl)\n || (this.shiftKey && this.keyCode === keyCodes_1.KeyCode.Shift)\n || (this.altKey && this.keyCode === keyCodes_1.KeyCode.Alt)\n || (this.metaKey && this.keyCode === keyCodes_1.KeyCode.Meta));\n }\n}\nexports.KeyCodeChord = KeyCodeChord;\n/**\n * Represents a chord which uses the `code` field of keyboard events.\n * A chord is a combination of keys pressed simultaneously.\n */\nclass ScanCodeChord {\n constructor(ctrlKey, shiftKey, altKey, metaKey, scanCode) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.scanCode = scanCode;\n }\n equals(other) {\n return (other instanceof ScanCodeChord\n && this.ctrlKey === other.ctrlKey\n && this.shiftKey === other.shiftKey\n && this.altKey === other.altKey\n && this.metaKey === other.metaKey\n && this.scanCode === other.scanCode);\n }\n getHashCode() {\n const ctrl = this.ctrlKey ? '1' : '0';\n const shift = this.shiftKey ? '1' : '0';\n const alt = this.altKey ? '1' : '0';\n const meta = this.metaKey ? '1' : '0';\n return `S${ctrl}${shift}${alt}${meta}${this.scanCode}`;\n }\n /**\n * Does this keybinding refer to the key code of a modifier and it also has the modifier flag?\n */\n isDuplicateModifierCase() {\n return ((this.ctrlKey && (this.scanCode === keyCodes_1.ScanCode.ControlLeft || this.scanCode === keyCodes_1.ScanCode.ControlRight))\n || (this.shiftKey && (this.scanCode === keyCodes_1.ScanCode.ShiftLeft || this.scanCode === keyCodes_1.ScanCode.ShiftRight))\n || (this.altKey && (this.scanCode === keyCodes_1.ScanCode.AltLeft || this.scanCode === keyCodes_1.ScanCode.AltRight))\n || (this.metaKey && (this.scanCode === keyCodes_1.ScanCode.MetaLeft || this.scanCode === keyCodes_1.ScanCode.MetaRight)));\n }\n}\nexports.ScanCodeChord = ScanCodeChord;\n/**\n * A keybinding is a sequence of chords.\n */\nclass Keybinding {\n constructor(chords) {\n if (chords.length === 0) {\n throw (0, errors_1.illegalArgument)(`chords`);\n }\n this.chords = chords;\n }\n getHashCode() {\n let result = '';\n for (let i = 0, len = this.chords.length; i < len; i++) {\n if (i !== 0) {\n result += ';';\n }\n result += this.chords[i].getHashCode();\n }\n return result;\n }\n equals(other) {\n if (other === null) {\n return false;\n }\n if (this.chords.length !== other.chords.length) {\n return false;\n }\n for (let i = 0; i < this.chords.length; i++) {\n if (!this.chords[i].equals(other.chords[i])) {\n return false;\n }\n }\n return true;\n }\n}\nexports.Keybinding = Keybinding;\nclass ResolvedChord {\n constructor(ctrlKey, shiftKey, altKey, metaKey, keyLabel, keyAriaLabel) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.keyLabel = keyLabel;\n this.keyAriaLabel = keyAriaLabel;\n }\n}\nexports.ResolvedChord = ResolvedChord;\n/**\n * A resolved keybinding. Consists of one or multiple chords.\n */\nclass ResolvedKeybinding {\n}\nexports.ResolvedKeybinding = ResolvedKeybinding;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Lazy = void 0;\nclass Lazy {\n constructor(executor) {\n this.executor = executor;\n this._didRun = false;\n }\n /**\n * True if the lazy value has been resolved.\n */\n get hasValue() { return this._didRun; }\n /**\n * Get the wrapped value.\n *\n * This will force evaluation of the lazy value if it has not been resolved yet. Lazy values are only\n * resolved once. `getValue` will re-throw exceptions that are hit while resolving the value\n */\n get value() {\n if (!this._didRun) {\n try {\n this._value = this.executor();\n }\n catch (err) {\n this._error = err;\n }\n finally {\n this._didRun = true;\n }\n }\n if (this._error) {\n throw this._error;\n }\n return this._value;\n }\n /**\n * Get the wrapped value without forcing evaluation.\n */\n get rawValue() { return this._value; }\n}\nexports.Lazy = Lazy;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DisposableMap = exports.ImmortalReference = exports.AsyncReferenceCollection = exports.ReferenceCollection = exports.SafeDisposable = exports.RefCountedDisposable = exports.MandatoryMutableDisposable = exports.MutableDisposable = exports.Disposable = exports.DisposableStore = exports.DisposableTracker = void 0;\nexports.setDisposableTracker = setDisposableTracker;\nexports.trackDisposable = trackDisposable;\nexports.markAsDisposed = markAsDisposed;\nexports.markAsSingleton = markAsSingleton;\nexports.isDisposable = isDisposable;\nexports.dispose = dispose;\nexports.disposeIfDisposable = disposeIfDisposable;\nexports.combinedDisposable = combinedDisposable;\nexports.toDisposable = toDisposable;\nexports.disposeOnReturn = disposeOnReturn;\nconst arrays_1 = require(\"vs/base/common/arrays\");\nconst collections_1 = require(\"vs/base/common/collections\");\nconst map_1 = require(\"./map\");\nconst functional_1 = require(\"vs/base/common/functional\");\nconst iterator_1 = require(\"vs/base/common/iterator\");\n// #region Disposable Tracking\n/**\n * Enables logging of potentially leaked disposables.\n *\n * A disposable is considered leaked if it is not disposed or not registered as the child of\n * another disposable. This tracking is very simple an only works for classes that either\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\n */\nconst TRACK_DISPOSABLES = false;\nlet disposableTracker = null;\nclass DisposableTracker {\n constructor() {\n this.livingDisposables = new Map();\n }\n static { this.idx = 0; }\n getDisposableData(d) {\n let val = this.livingDisposables.get(d);\n if (!val) {\n val = { parent: null, source: null, isSingleton: false, value: d, idx: DisposableTracker.idx++ };\n this.livingDisposables.set(d, val);\n }\n return val;\n }\n trackDisposable(d) {\n const data = this.getDisposableData(d);\n if (!data.source) {\n data.source =\n new Error().stack;\n }\n }\n setParent(child, parent) {\n const data = this.getDisposableData(child);\n data.parent = parent;\n }\n markAsDisposed(x) {\n this.livingDisposables.delete(x);\n }\n markAsSingleton(disposable) {\n this.getDisposableData(disposable).isSingleton = true;\n }\n getRootParent(data, cache) {\n const cacheValue = cache.get(data);\n if (cacheValue) {\n return cacheValue;\n }\n const result = data.parent ? this.getRootParent(this.getDisposableData(data.parent), cache) : data;\n cache.set(data, result);\n return result;\n }\n getTrackedDisposables() {\n const rootParentCache = new Map();\n const leaking = [...this.livingDisposables.entries()]\n .filter(([, v]) => v.source !== null && !this.getRootParent(v, rootParentCache).isSingleton)\n .flatMap(([k]) => k);\n return leaking;\n }\n computeLeakingDisposables(maxReported = 10, preComputedLeaks) {\n let uncoveredLeakingObjs;\n if (preComputedLeaks) {\n uncoveredLeakingObjs = preComputedLeaks;\n }\n else {\n const rootParentCache = new Map();\n const leakingObjects = [...this.livingDisposables.values()]\n .filter((info) => info.source !== null && !this.getRootParent(info, rootParentCache).isSingleton);\n if (leakingObjects.length === 0) {\n return;\n }\n const leakingObjsSet = new Set(leakingObjects.map(o => o.value));\n // Remove all objects that are a child of other leaking objects. Assumes there are no cycles.\n uncoveredLeakingObjs = leakingObjects.filter(l => {\n return !(l.parent && leakingObjsSet.has(l.parent));\n });\n if (uncoveredLeakingObjs.length === 0) {\n throw new Error('There are cyclic diposable chains!');\n }\n }\n if (!uncoveredLeakingObjs) {\n return undefined;\n }\n function getStackTracePath(leaking) {\n function removePrefix(array, linesToRemove) {\n while (array.length > 0 && linesToRemove.some(regexp => typeof regexp === 'string' ? regexp === array[0] : array[0].match(regexp))) {\n array.shift();\n }\n }\n const lines = leaking.source.split('\\n').map(p => p.trim().replace('at ', '')).filter(l => l !== '');\n removePrefix(lines, ['Error', /^trackDisposable \\(.*\\)$/, /^DisposableTracker.trackDisposable \\(.*\\)$/]);\n return lines.reverse();\n }\n const stackTraceStarts = new map_1.SetMap();\n for (const leaking of uncoveredLeakingObjs) {\n const stackTracePath = getStackTracePath(leaking);\n for (let i = 0; i <= stackTracePath.length; i++) {\n stackTraceStarts.add(stackTracePath.slice(0, i).join('\\n'), leaking);\n }\n }\n // Put earlier leaks first\n uncoveredLeakingObjs.sort((0, arrays_1.compareBy)(l => l.idx, arrays_1.numberComparator));\n let message = '';\n let i = 0;\n for (const leaking of uncoveredLeakingObjs.slice(0, maxReported)) {\n i++;\n const stackTracePath = getStackTracePath(leaking);\n const stackTraceFormattedLines = [];\n for (let i = 0; i < stackTracePath.length; i++) {\n let line = stackTracePath[i];\n const starts = stackTraceStarts.get(stackTracePath.slice(0, i + 1).join('\\n'));\n line = `(shared with ${starts.size}/${uncoveredLeakingObjs.length} leaks) at ${line}`;\n const prevStarts = stackTraceStarts.get(stackTracePath.slice(0, i).join('\\n'));\n const continuations = (0, collections_1.groupBy)([...prevStarts].map(d => getStackTracePath(d)[i]), v => v);\n delete continuations[stackTracePath[i]];\n for (const [cont, set] of Object.entries(continuations)) {\n stackTraceFormattedLines.unshift(` - stacktraces of ${set.length} other leaks continue with ${cont}`);\n }\n stackTraceFormattedLines.unshift(line);\n }\n message += `\\n\\n\\n==================== Leaking disposable ${i}/${uncoveredLeakingObjs.length}: ${leaking.value.constructor.name} ====================\\n${stackTraceFormattedLines.join('\\n')}\\n============================================================\\n\\n`;\n }\n if (uncoveredLeakingObjs.length > maxReported) {\n message += `\\n\\n\\n... and ${uncoveredLeakingObjs.length - maxReported} more leaking disposables\\n\\n`;\n }\n return { leaks: uncoveredLeakingObjs, details: message };\n }\n}\nexports.DisposableTracker = DisposableTracker;\nfunction setDisposableTracker(tracker) {\n disposableTracker = tracker;\n}\nif (TRACK_DISPOSABLES) {\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n setDisposableTracker(new class {\n trackDisposable(x) {\n const stack = new Error('Potentially leaked disposable').stack;\n setTimeout(() => {\n if (!x[__is_disposable_tracked__]) {\n console.log(stack);\n }\n }, 3000);\n }\n setParent(child, parent) {\n if (child && child !== Disposable.None) {\n try {\n child[__is_disposable_tracked__] = true;\n }\n catch {\n // noop\n }\n }\n }\n markAsDisposed(disposable) {\n if (disposable && disposable !== Disposable.None) {\n try {\n disposable[__is_disposable_tracked__] = true;\n }\n catch {\n // noop\n }\n }\n }\n markAsSingleton(disposable) { }\n });\n}\nfunction trackDisposable(x) {\n disposableTracker?.trackDisposable(x);\n return x;\n}\nfunction markAsDisposed(disposable) {\n disposableTracker?.markAsDisposed(disposable);\n}\nfunction setParentOfDisposable(child, parent) {\n disposableTracker?.setParent(child, parent);\n}\nfunction setParentOfDisposables(children, parent) {\n if (!disposableTracker) {\n return;\n }\n for (const child of children) {\n disposableTracker.setParent(child, parent);\n }\n}\n/**\n * Indicates that the given object is a singleton which does not need to be disposed.\n*/\nfunction markAsSingleton(singleton) {\n disposableTracker?.markAsSingleton(singleton);\n return singleton;\n}\n/**\n * Check if `thing` is {@link IDisposable disposable}.\n */\nfunction isDisposable(thing) {\n return typeof thing === 'object' && thing !== null && typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nfunction dispose(arg) {\n if (iterator_1.Iterable.is(arg)) {\n const errors = [];\n for (const d of arg) {\n if (d) {\n try {\n d.dispose();\n }\n catch (e) {\n errors.push(e);\n }\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n else if (errors.length > 1) {\n throw new AggregateError(errors, 'Encountered errors while disposing of store');\n }\n return Array.isArray(arg) ? [] : arg;\n }\n else if (arg) {\n arg.dispose();\n return arg;\n }\n}\nfunction disposeIfDisposable(disposables) {\n for (const d of disposables) {\n if (isDisposable(d)) {\n d.dispose();\n }\n }\n return [];\n}\n/**\n * Combine multiple disposable values into a single {@link IDisposable}.\n */\nfunction combinedDisposable(...disposables) {\n const parent = toDisposable(() => dispose(disposables));\n setParentOfDisposables(disposables, parent);\n return parent;\n}\n/**\n * Turn a function that implements dispose into an {@link IDisposable}.\n *\n * @param fn Clean up function, guaranteed to be called only **once**.\n */\nfunction toDisposable(fn) {\n const self = trackDisposable({\n dispose: (0, functional_1.createSingleCallFunction)(() => {\n markAsDisposed(self);\n fn();\n })\n });\n return self;\n}\n/**\n * Manages a collection of disposable values.\n *\n * This is the preferred way to manage multiple disposables. A `DisposableStore` is safer to work with than an\n * `IDisposable[]` as it considers edge cases, such as registering the same value multiple times or adding an item to a\n * store that has already been disposed of.\n */\nclass DisposableStore {\n static { this.DISABLE_DISPOSED_WARNING = false; }\n constructor() {\n this._toDispose = new Set();\n this._isDisposed = false;\n trackDisposable(this);\n }\n /**\n * Dispose of all registered disposables and mark this object as disposed.\n *\n * Any future disposables added to this object will be disposed of on `add`.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n markAsDisposed(this);\n this._isDisposed = true;\n this.clear();\n }\n /**\n * @return `true` if this object has been disposed of.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of all registered disposables but do not mark this object as disposed.\n */\n clear() {\n if (this._toDispose.size === 0) {\n return;\n }\n try {\n dispose(this._toDispose);\n }\n finally {\n this._toDispose.clear();\n }\n }\n /**\n * Add a new {@link IDisposable disposable} to the collection.\n */\n add(o) {\n if (!o) {\n return o;\n }\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n setParentOfDisposable(o, this);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\n }\n }\n else {\n this._toDispose.add(o);\n }\n return o;\n }\n /**\n * Deletes a disposable from store and disposes of it. This will not throw or warn and proceed to dispose the\n * disposable even when the disposable is not part in the store.\n */\n delete(o) {\n if (!o) {\n return;\n }\n if (o === this) {\n throw new Error('Cannot dispose a disposable on itself!');\n }\n this._toDispose.delete(o);\n o.dispose();\n }\n /**\n * Deletes the value from the store, but does not dispose it.\n */\n deleteAndLeak(o) {\n if (!o) {\n return;\n }\n if (this._toDispose.has(o)) {\n this._toDispose.delete(o);\n setParentOfDisposable(o, null);\n }\n }\n}\nexports.DisposableStore = DisposableStore;\n/**\n * Abstract base class for a {@link IDisposable disposable} object.\n *\n * Subclasses can {@linkcode _register} disposables that will be automatically cleaned up when this object is disposed of.\n */\nclass Disposable {\n /**\n * A disposable that does nothing when it is disposed of.\n *\n * TODO: This should not be a static property.\n */\n static { this.None = Object.freeze({ dispose() { } }); }\n constructor() {\n this._store = new DisposableStore();\n trackDisposable(this);\n setParentOfDisposable(this._store, this);\n }\n dispose() {\n markAsDisposed(this);\n this._store.dispose();\n }\n /**\n * Adds `o` to the collection of disposables managed by this object.\n */\n _register(o) {\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(o);\n }\n}\nexports.Disposable = Disposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed.\n *\n * This ensures that when the disposable value is changed, the previously held disposable is disposed of. You can\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\n */\nclass MutableDisposable {\n constructor() {\n this._isDisposed = false;\n trackDisposable(this);\n }\n get value() {\n return this._isDisposed ? undefined : this._value;\n }\n set value(value) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n if (value) {\n setParentOfDisposable(value, this);\n }\n this._value = value;\n }\n /**\n * Resets the stored value and disposed of the previously stored value.\n */\n clear() {\n this.value = undefined;\n }\n dispose() {\n this._isDisposed = true;\n markAsDisposed(this);\n this._value?.dispose();\n this._value = undefined;\n }\n /**\n * Clears the value, but does not dispose it.\n * The old value is returned.\n */\n clearAndLeak() {\n const oldValue = this._value;\n this._value = undefined;\n if (oldValue) {\n setParentOfDisposable(oldValue, null);\n }\n return oldValue;\n }\n}\nexports.MutableDisposable = MutableDisposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed like {@link MutableDisposable}, but the value must\n * exist and cannot be undefined.\n */\nclass MandatoryMutableDisposable {\n constructor(initialValue) {\n this._disposable = new MutableDisposable();\n this._isDisposed = false;\n this._disposable.value = initialValue;\n }\n get value() {\n return this._disposable.value;\n }\n set value(value) {\n if (this._isDisposed || value === this._disposable.value) {\n return;\n }\n this._disposable.value = value;\n }\n dispose() {\n this._isDisposed = true;\n this._disposable.dispose();\n }\n}\nexports.MandatoryMutableDisposable = MandatoryMutableDisposable;\nclass RefCountedDisposable {\n constructor(_disposable) {\n this._disposable = _disposable;\n this._counter = 1;\n }\n acquire() {\n this._counter++;\n return this;\n }\n release() {\n if (--this._counter === 0) {\n this._disposable.dispose();\n }\n return this;\n }\n}\nexports.RefCountedDisposable = RefCountedDisposable;\n/**\n * A safe disposable can be `unset` so that a leaked reference (listener)\n * can be cut-off.\n */\nclass SafeDisposable {\n constructor() {\n this.dispose = () => { };\n this.unset = () => { };\n this.isset = () => false;\n trackDisposable(this);\n }\n set(fn) {\n let callback = fn;\n this.unset = () => callback = undefined;\n this.isset = () => callback !== undefined;\n this.dispose = () => {\n if (callback) {\n callback();\n callback = undefined;\n markAsDisposed(this);\n }\n };\n return this;\n }\n}\nexports.SafeDisposable = SafeDisposable;\nclass ReferenceCollection {\n constructor() {\n this.references = new Map();\n }\n acquire(key, ...args) {\n let reference = this.references.get(key);\n if (!reference) {\n reference = { counter: 0, object: this.createReferencedObject(key, ...args) };\n this.references.set(key, reference);\n }\n const { object } = reference;\n const dispose = (0, functional_1.createSingleCallFunction)(() => {\n if (--reference.counter === 0) {\n this.destroyReferencedObject(key, reference.object);\n this.references.delete(key);\n }\n });\n reference.counter++;\n return { object, dispose };\n }\n}\nexports.ReferenceCollection = ReferenceCollection;\n/**\n * Unwraps a reference collection of promised values. Makes sure\n * references are disposed whenever promises get rejected.\n */\nclass AsyncReferenceCollection {\n constructor(referenceCollection) {\n this.referenceCollection = referenceCollection;\n }\n async acquire(key, ...args) {\n const ref = this.referenceCollection.acquire(key, ...args);\n try {\n const object = await ref.object;\n return {\n object,\n dispose: () => ref.dispose()\n };\n }\n catch (error) {\n ref.dispose();\n throw error;\n }\n }\n}\nexports.AsyncReferenceCollection = AsyncReferenceCollection;\nclass ImmortalReference {\n constructor(object) {\n this.object = object;\n }\n dispose() { }\n}\nexports.ImmortalReference = ImmortalReference;\nfunction disposeOnReturn(fn) {\n const store = new DisposableStore();\n try {\n fn(store);\n }\n finally {\n store.dispose();\n }\n}\n/**\n * A map the manages the lifecycle of the values that it stores.\n */\nclass DisposableMap {\n constructor() {\n this._store = new Map();\n this._isDisposed = false;\n trackDisposable(this);\n }\n /**\n * Disposes of all stored values and mark this object as disposed.\n *\n * Trying to use this object after it has been disposed of is an error.\n */\n dispose() {\n markAsDisposed(this);\n this._isDisposed = true;\n this.clearAndDisposeAll();\n }\n /**\n * Disposes of all stored values and clear the map, but DO NOT mark this object as disposed.\n */\n clearAndDisposeAll() {\n if (!this._store.size) {\n return;\n }\n try {\n dispose(this._store.values());\n }\n finally {\n this._store.clear();\n }\n }\n has(key) {\n return this._store.has(key);\n }\n get size() {\n return this._store.size;\n }\n get(key) {\n return this._store.get(key);\n }\n set(key, value, skipDisposeOnOverwrite = false) {\n if (this._isDisposed) {\n console.warn(new Error('Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!').stack);\n }\n if (!skipDisposeOnOverwrite) {\n this._store.get(key)?.dispose();\n }\n this._store.set(key, value);\n }\n /**\n * Delete the value stored for `key` from this map and also dispose of it.\n */\n deleteAndDispose(key) {\n this._store.get(key)?.dispose();\n this._store.delete(key);\n }\n /**\n * Delete the value stored for `key` from this map but return it. The caller is\n * responsible for disposing of the value.\n */\n deleteAndLeak(key) {\n const value = this._store.get(key);\n this._store.delete(key);\n return value;\n }\n keys() {\n return this._store.keys();\n }\n values() {\n return this._store.values();\n }\n [Symbol.iterator]() {\n return this._store[Symbol.iterator]();\n }\n}\nexports.DisposableMap = DisposableMap;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LinkedList = void 0;\nclass Node {\n static { this.Undefined = new Node(undefined); }\n constructor(element) {\n this.element = element;\n this.next = Node.Undefined;\n this.prev = Node.Undefined;\n }\n}\nclass LinkedList {\n constructor() {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n get size() {\n return this._size;\n }\n isEmpty() {\n return this._first === Node.Undefined;\n }\n clear() {\n let node = this._first;\n while (node !== Node.Undefined) {\n const next = node.next;\n node.prev = Node.Undefined;\n node.next = Node.Undefined;\n node = next;\n }\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n unshift(element) {\n return this._insert(element, false);\n }\n push(element) {\n return this._insert(element, true);\n }\n _insert(element, atTheEnd) {\n const newNode = new Node(element);\n if (this._first === Node.Undefined) {\n this._first = newNode;\n this._last = newNode;\n }\n else if (atTheEnd) {\n // push\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n }\n else {\n // unshift\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n this._size += 1;\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n shift() {\n if (this._first === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._first.element;\n this._remove(this._first);\n return res;\n }\n }\n pop() {\n if (this._last === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._last.element;\n this._remove(this._last);\n return res;\n }\n }\n _remove(node) {\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n // middle\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n }\n else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n // only node\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n }\n else if (node.next === Node.Undefined) {\n // last\n this._last = this._last.prev;\n this._last.next = Node.Undefined;\n }\n else if (node.prev === Node.Undefined) {\n // first\n this._first = this._first.next;\n this._first.prev = Node.Undefined;\n }\n // done\n this._size -= 1;\n }\n *[Symbol.iterator]() {\n let node = this._first;\n while (node !== Node.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\nexports.LinkedList = LinkedList;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetMap = exports.BidirectionalMap = exports.CounterSet = exports.Touch = void 0;\nexports.getOrSet = getOrSet;\nexports.mapToString = mapToString;\nexports.setToString = setToString;\nexports.mapsStrictEqualIgnoreOrder = mapsStrictEqualIgnoreOrder;\nfunction getOrSet(map, key, value) {\n let result = map.get(key);\n if (result === undefined) {\n result = value;\n map.set(key, result);\n }\n return result;\n}\nfunction mapToString(map) {\n const entries = [];\n map.forEach((value, key) => {\n entries.push(`${key} => ${value}`);\n });\n return `Map(${map.size}) {${entries.join(', ')}}`;\n}\nfunction setToString(set) {\n const entries = [];\n set.forEach(value => {\n entries.push(value);\n });\n return `Set(${set.size}) {${entries.join(', ')}}`;\n}\nvar Touch;\n(function (Touch) {\n Touch[Touch[\"None\"] = 0] = \"None\";\n Touch[Touch[\"AsOld\"] = 1] = \"AsOld\";\n Touch[Touch[\"AsNew\"] = 2] = \"AsNew\";\n})(Touch || (exports.Touch = Touch = {}));\nclass CounterSet {\n constructor() {\n this.map = new Map();\n }\n add(value) {\n this.map.set(value, (this.map.get(value) || 0) + 1);\n return this;\n }\n delete(value) {\n let counter = this.map.get(value) || 0;\n if (counter === 0) {\n return false;\n }\n counter--;\n if (counter === 0) {\n this.map.delete(value);\n }\n else {\n this.map.set(value, counter);\n }\n return true;\n }\n has(value) {\n return this.map.has(value);\n }\n}\nexports.CounterSet = CounterSet;\n/**\n * A map that allows access both by keys and values.\n * **NOTE**: values need to be unique.\n */\nclass BidirectionalMap {\n constructor(entries) {\n this._m1 = new Map();\n this._m2 = new Map();\n if (entries) {\n for (const [key, value] of entries) {\n this.set(key, value);\n }\n }\n }\n clear() {\n this._m1.clear();\n this._m2.clear();\n }\n set(key, value) {\n this._m1.set(key, value);\n this._m2.set(value, key);\n }\n get(key) {\n return this._m1.get(key);\n }\n getKey(value) {\n return this._m2.get(value);\n }\n delete(key) {\n const value = this._m1.get(key);\n if (value === undefined) {\n return false;\n }\n this._m1.delete(key);\n this._m2.delete(value);\n return true;\n }\n forEach(callbackfn, thisArg) {\n this._m1.forEach((value, key) => {\n callbackfn.call(thisArg, value, key, this);\n });\n }\n keys() {\n return this._m1.keys();\n }\n values() {\n return this._m1.values();\n }\n}\nexports.BidirectionalMap = BidirectionalMap;\nclass SetMap {\n constructor() {\n this.map = new Map();\n }\n add(key, value) {\n let values = this.map.get(key);\n if (!values) {\n values = new Set();\n this.map.set(key, values);\n }\n values.add(value);\n }\n delete(key, value) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.delete(value);\n if (values.size === 0) {\n this.map.delete(key);\n }\n }\n forEach(key, fn) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.forEach(fn);\n }\n get(key) {\n const values = this.map.get(key);\n if (!values) {\n return new Set();\n }\n return values;\n }\n}\nexports.SetMap = SetMap;\nfunction mapsStrictEqualIgnoreOrder(a, b) {\n if (a === b) {\n return true;\n }\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || b.get(key) !== value) {\n return false;\n }\n }\n for (const [key] of b) {\n if (!a.has(key)) {\n return false;\n }\n }\n return true;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SlidingWindowAverage = exports.MovingAverage = exports.Counter = void 0;\nexports.clamp = clamp;\nexports.rot = rot;\nexports.isPointWithinTriangle = isPointWithinTriangle;\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nfunction rot(index, modulo) {\n return (modulo + (index % modulo)) % modulo;\n}\nclass Counter {\n constructor() {\n this._next = 0;\n }\n getNext() {\n return this._next++;\n }\n}\nexports.Counter = Counter;\nclass MovingAverage {\n constructor() {\n this._n = 1;\n this._val = 0;\n }\n update(value) {\n this._val = this._val + (value - this._val) / this._n;\n this._n += 1;\n return this._val;\n }\n get value() {\n return this._val;\n }\n}\nexports.MovingAverage = MovingAverage;\nclass SlidingWindowAverage {\n constructor(size) {\n this._n = 0;\n this._val = 0;\n this._values = [];\n this._index = 0;\n this._sum = 0;\n this._values = new Array(size);\n this._values.fill(0, 0, size);\n }\n update(value) {\n const oldValue = this._values[this._index];\n this._values[this._index] = value;\n this._index = (this._index + 1) % this._values.length;\n this._sum -= oldValue;\n this._sum += value;\n if (this._n < this._values.length) {\n this._n += 1;\n }\n this._val = this._sum / this._n;\n return this._val;\n }\n get value() {\n return this._val;\n }\n}\nexports.SlidingWindowAverage = SlidingWindowAverage;\n/** Returns whether the point is within the triangle formed by the following 6 x/y point pairs */\nfunction isPointWithinTriangle(x, y, ax, ay, bx, by, cx, cy) {\n const v0x = cx - ax;\n const v0y = cy - ay;\n const v1x = bx - ax;\n const v1y = by - ay;\n const v2x = x - ax;\n const v2y = y - ay;\n const dot00 = v0x * v0x + v0y * v0y;\n const dot01 = v0x * v1x + v0y * v1y;\n const dot02 = v0x * v2x + v0y * v2y;\n const dot11 = v1x * v1x + v1y * v1y;\n const dot12 = v1x * v2x + v1y * v2y;\n const invDenom = 1 / (dot00 * dot11 - dot01 * dot01);\n const u = (dot11 * dot02 - dot01 * dot12) * invDenom;\n const v = (dot00 * dot12 - dot01 * dot02) * invDenom;\n return u >= 0 && v >= 0 && u + v < 1;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAndroid = exports.isEdge = exports.isSafari = exports.isFirefox = exports.isChrome = exports.OS = exports.OperatingSystem = exports.setTimeout0 = exports.setTimeout0IsFaster = exports.translationsConfigFile = exports.platformLocale = exports.locale = exports.Language = exports.language = exports.userAgent = exports.platform = exports.isCI = exports.isMobile = exports.isIOS = exports.webWorkerOrigin = exports.isWebWorker = exports.isWeb = exports.isElectron = exports.isNative = exports.isLinuxSnap = exports.isLinux = exports.isMacintosh = exports.isWindows = exports.Platform = exports.LANGUAGE_DEFAULT = void 0;\nexports.PlatformToString = PlatformToString;\nexports.isLittleEndian = isLittleEndian;\nexports.isBigSurOrNewer = isBigSurOrNewer;\nexports.LANGUAGE_DEFAULT = 'en';\nlet _isWindows = false;\nlet _isMacintosh = false;\nlet _isLinux = false;\nlet _isLinuxSnap = false;\nlet _isNative = false;\nlet _isWeb = false;\nlet _isElectron = false;\nlet _isIOS = false;\nlet _isCI = false;\nlet _isMobile = false;\nlet _locale = undefined;\nlet _language = exports.LANGUAGE_DEFAULT;\nlet _platformLocale = exports.LANGUAGE_DEFAULT;\nlet _translationsConfigFile = undefined;\nlet _userAgent = undefined;\nconst $globalThis = globalThis;\nlet nodeProcess = undefined;\nif (typeof $globalThis.vscode !== 'undefined' && typeof $globalThis.vscode.process !== 'undefined') {\n // Native environment (sandboxed)\n nodeProcess = $globalThis.vscode.process;\n}\nelse if (typeof process !== 'undefined' && typeof process?.versions?.node === 'string') {\n // Native environment (non-sandboxed)\n nodeProcess = process;\n}\nconst isElectronProcess = typeof nodeProcess?.versions?.electron === 'string';\nconst isElectronRenderer = isElectronProcess && nodeProcess?.type === 'renderer';\n// Native environment\nif (typeof nodeProcess === 'object') {\n _isWindows = (nodeProcess.platform === 'win32');\n _isMacintosh = (nodeProcess.platform === 'darwin');\n _isLinux = (nodeProcess.platform === 'linux');\n _isLinuxSnap = _isLinux && !!nodeProcess.env['SNAP'] && !!nodeProcess.env['SNAP_REVISION'];\n _isElectron = isElectronProcess;\n _isCI = !!nodeProcess.env['CI'] || !!nodeProcess.env['BUILD_ARTIFACTSTAGINGDIRECTORY'];\n _locale = exports.LANGUAGE_DEFAULT;\n _language = exports.LANGUAGE_DEFAULT;\n const rawNlsConfig = nodeProcess.env['VSCODE_NLS_CONFIG'];\n if (rawNlsConfig) {\n try {\n const nlsConfig = JSON.parse(rawNlsConfig);\n _locale = nlsConfig.userLocale;\n _platformLocale = nlsConfig.osLocale;\n _language = nlsConfig.resolvedLanguage || exports.LANGUAGE_DEFAULT;\n _translationsConfigFile = nlsConfig.languagePack?.translationsConfigFile;\n }\n catch (e) {\n }\n }\n _isNative = true;\n}\n// Web environment\nelse if (typeof navigator === 'object' && !isElectronRenderer) {\n _userAgent = navigator.userAgent;\n _isWindows = _userAgent.indexOf('Windows') >= 0;\n _isMacintosh = _userAgent.indexOf('Macintosh') >= 0;\n _isIOS = (_userAgent.indexOf('Macintosh') >= 0 || _userAgent.indexOf('iPad') >= 0 || _userAgent.indexOf('iPhone') >= 0) && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0;\n _isLinux = _userAgent.indexOf('Linux') >= 0;\n _isMobile = _userAgent?.indexOf('Mobi') >= 0;\n _isWeb = true;\n // VSCODE_GLOBALS: NLS\n _language = globalThis._VSCODE_NLS_LANGUAGE || exports.LANGUAGE_DEFAULT;\n _locale = navigator.language.toLowerCase();\n _platformLocale = _locale;\n}\n// Unknown environment\nelse {\n console.error('Unable to resolve platform.');\n}\nvar Platform;\n(function (Platform) {\n Platform[Platform[\"Web\"] = 0] = \"Web\";\n Platform[Platform[\"Mac\"] = 1] = \"Mac\";\n Platform[Platform[\"Linux\"] = 2] = \"Linux\";\n Platform[Platform[\"Windows\"] = 3] = \"Windows\";\n})(Platform || (exports.Platform = Platform = {}));\nfunction PlatformToString(platform) {\n switch (platform) {\n case Platform.Web: return 'Web';\n case Platform.Mac: return 'Mac';\n case Platform.Linux: return 'Linux';\n case Platform.Windows: return 'Windows';\n }\n}\nlet _platform = Platform.Web;\nif (_isMacintosh) {\n _platform = Platform.Mac;\n}\nelse if (_isWindows) {\n _platform = Platform.Windows;\n}\nelse if (_isLinux) {\n _platform = Platform.Linux;\n}\nexports.isWindows = _isWindows;\nexports.isMacintosh = _isMacintosh;\nexports.isLinux = _isLinux;\nexports.isLinuxSnap = _isLinuxSnap;\nexports.isNative = _isNative;\nexports.isElectron = _isElectron;\nexports.isWeb = _isWeb;\nexports.isWebWorker = (_isWeb && typeof $globalThis.importScripts === 'function');\nexports.webWorkerOrigin = exports.isWebWorker ? $globalThis.origin : undefined;\nexports.isIOS = _isIOS;\nexports.isMobile = _isMobile;\n/**\n * Whether we run inside a CI environment, such as\n * GH actions or Azure Pipelines.\n */\nexports.isCI = _isCI;\nexports.platform = _platform;\nexports.userAgent = _userAgent;\n/**\n * The language used for the user interface. The format of\n * the string is all lower case (e.g. zh-tw for Traditional\n * Chinese or de for German)\n */\nexports.language = _language;\nvar Language;\n(function (Language) {\n function value() {\n return exports.language;\n }\n Language.value = value;\n function isDefaultVariant() {\n if (exports.language.length === 2) {\n return exports.language === 'en';\n }\n else if (exports.language.length >= 3) {\n return exports.language[0] === 'e' && exports.language[1] === 'n' && exports.language[2] === '-';\n }\n else {\n return false;\n }\n }\n Language.isDefaultVariant = isDefaultVariant;\n function isDefault() {\n return exports.language === 'en';\n }\n Language.isDefault = isDefault;\n})(Language || (exports.Language = Language = {}));\n/**\n * Desktop: The OS locale or the locale specified by --locale or `argv.json`.\n * Web: matches `platformLocale`.\n *\n * The UI is not necessarily shown in the provided locale.\n */\nexports.locale = _locale;\n/**\n * This will always be set to the OS/browser's locale regardless of\n * what was specified otherwise. The format of the string is all\n * lower case (e.g. zh-tw for Traditional Chinese). The UI is not\n * necessarily shown in the provided locale.\n */\nexports.platformLocale = _platformLocale;\n/**\n * The translations that are available through language packs.\n */\nexports.translationsConfigFile = _translationsConfigFile;\nexports.setTimeout0IsFaster = (typeof $globalThis.postMessage === 'function' && !$globalThis.importScripts);\n/**\n * See https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#:~:text=than%204%2C%20then-,set%20timeout%20to%204,-.\n *\n * Works similarly to `setTimeout(0)` but doesn't suffer from the 4ms artificial delay\n * that browsers set when the nesting level is > 5.\n */\nexports.setTimeout0 = (() => {\n if (exports.setTimeout0IsFaster) {\n const pending = [];\n $globalThis.addEventListener('message', (e) => {\n if (e.data && e.data.vscodeScheduleAsyncWork) {\n for (let i = 0, len = pending.length; i < len; i++) {\n const candidate = pending[i];\n if (candidate.id === e.data.vscodeScheduleAsyncWork) {\n pending.splice(i, 1);\n candidate.callback();\n return;\n }\n }\n }\n });\n let lastId = 0;\n return (callback) => {\n const myId = ++lastId;\n pending.push({\n id: myId,\n callback: callback\n });\n $globalThis.postMessage({ vscodeScheduleAsyncWork: myId }, '*');\n };\n }\n return (callback) => setTimeout(callback);\n})();\nvar OperatingSystem;\n(function (OperatingSystem) {\n OperatingSystem[OperatingSystem[\"Windows\"] = 1] = \"Windows\";\n OperatingSystem[OperatingSystem[\"Macintosh\"] = 2] = \"Macintosh\";\n OperatingSystem[OperatingSystem[\"Linux\"] = 3] = \"Linux\";\n})(OperatingSystem || (exports.OperatingSystem = OperatingSystem = {}));\nexports.OS = (_isMacintosh || _isIOS ? OperatingSystem.Macintosh : (_isWindows ? OperatingSystem.Windows : OperatingSystem.Linux));\nlet _isLittleEndian = true;\nlet _isLittleEndianComputed = false;\nfunction isLittleEndian() {\n if (!_isLittleEndianComputed) {\n _isLittleEndianComputed = true;\n const test = new Uint8Array(2);\n test[0] = 1;\n test[1] = 2;\n const view = new Uint16Array(test.buffer);\n _isLittleEndian = (view[0] === (2 << 8) + 1);\n }\n return _isLittleEndian;\n}\nexports.isChrome = !!(exports.userAgent && exports.userAgent.indexOf('Chrome') >= 0);\nexports.isFirefox = !!(exports.userAgent && exports.userAgent.indexOf('Firefox') >= 0);\nexports.isSafari = !!(!exports.isChrome && (exports.userAgent && exports.userAgent.indexOf('Safari') >= 0));\nexports.isEdge = !!(exports.userAgent && exports.userAgent.indexOf('Edg/') >= 0);\nexports.isAndroid = !!(exports.userAgent && exports.userAgent.indexOf('Android') >= 0);\nfunction isBigSurOrNewer(osVersion) {\n return parseFloat(osVersion) >= 20;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StopWatch = void 0;\nconst hasPerformanceNow = (globalThis.performance && typeof globalThis.performance.now === 'function');\nclass StopWatch {\n static create(highResolution) {\n return new StopWatch(highResolution);\n }\n constructor(highResolution) {\n this._now = hasPerformanceNow && highResolution === false ? Date.now : globalThis.performance.now.bind(globalThis.performance);\n this._startTime = this._now();\n this._stopTime = -1;\n }\n stop() {\n this._stopTime = this._now();\n }\n reset() {\n this._startTime = this._now();\n this._stopTime = -1;\n }\n elapsed() {\n if (this._stopTime !== -1) {\n return this._stopTime - this._startTime;\n }\n return this._now() - this._startTime;\n }\n}\nexports.StopWatch = StopWatch;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.noBreakWhitespace = exports.CodePointIterator = void 0;\nexports.isFalsyOrWhitespace = isFalsyOrWhitespace;\nexports.format = format;\nexports.format2 = format2;\nexports.htmlAttributeEncodeValue = htmlAttributeEncodeValue;\nexports.escape = escape;\nexports.escapeRegExpCharacters = escapeRegExpCharacters;\nexports.count = count;\nexports.truncate = truncate;\nexports.truncateMiddle = truncateMiddle;\nexports.trim = trim;\nexports.ltrim = ltrim;\nexports.rtrim = rtrim;\nexports.convertSimple2RegExpPattern = convertSimple2RegExpPattern;\nexports.stripWildcards = stripWildcards;\nexports.createRegExp = createRegExp;\nexports.regExpLeadsToEndlessLoop = regExpLeadsToEndlessLoop;\nexports.splitLines = splitLines;\nexports.splitLinesIncludeSeparators = splitLinesIncludeSeparators;\nexports.firstNonWhitespaceIndex = firstNonWhitespaceIndex;\nexports.getLeadingWhitespace = getLeadingWhitespace;\nexports.lastNonWhitespaceIndex = lastNonWhitespaceIndex;\nexports.replaceAsync = replaceAsync;\nexports.compare = compare;\nexports.compareSubstring = compareSubstring;\nexports.compareIgnoreCase = compareIgnoreCase;\nexports.compareSubstringIgnoreCase = compareSubstringIgnoreCase;\nexports.isAsciiDigit = isAsciiDigit;\nexports.isLowerAsciiLetter = isLowerAsciiLetter;\nexports.isUpperAsciiLetter = isUpperAsciiLetter;\nexports.equalsIgnoreCase = equalsIgnoreCase;\nexports.startsWithIgnoreCase = startsWithIgnoreCase;\nexports.commonPrefixLength = commonPrefixLength;\nexports.commonSuffixLength = commonSuffixLength;\nexports.isHighSurrogate = isHighSurrogate;\nexports.isLowSurrogate = isLowSurrogate;\nexports.computeCodePoint = computeCodePoint;\nexports.getNextCodePoint = getNextCodePoint;\nconst charCode_1 = require(\"vs/base/common/charCode\");\nconst uint_1 = require(\"vs/base/common/uint\");\nfunction isFalsyOrWhitespace(str) {\n if (!str || typeof str !== 'string') {\n return true;\n }\n return str.trim().length === 0;\n}\nconst _formatRegexp = /{(\\d+)}/g;\n/**\n * Helper to produce a string with a variable number of arguments. Insert variable segments\n * into the string using the {n} notation where N is the index of the argument following the string.\n * @param value string to which formatting is applied\n * @param args replacements for {n}-entries\n */\nfunction format(value, ...args) {\n if (args.length === 0) {\n return value;\n }\n return value.replace(_formatRegexp, function (match, group) {\n const idx = parseInt(group, 10);\n return isNaN(idx) || idx < 0 || idx >= args.length ?\n match :\n args[idx];\n });\n}\nconst _format2Regexp = /{([^}]+)}/g;\n/**\n * Helper to create a string from a template and a string record.\n * Similar to `format` but with objects instead of positional arguments.\n */\nfunction format2(template, values) {\n if (Object.keys(values).length === 0) {\n return template;\n }\n return template.replace(_format2Regexp, (match, group) => (values[group] ?? match));\n}\n/**\n * Encodes the given value so that it can be used as literal value in html attributes.\n *\n * In other words, computes `$val`, such that `attr` in `<div attr=\"$val\" />` has the runtime value `value`.\n * This prevents XSS injection.\n */\nfunction htmlAttributeEncodeValue(value) {\n return value.replace(/[<>\"'&]/g, ch => {\n switch (ch) {\n case '<': return '&lt;';\n case '>': return '&gt;';\n case '\"': return '&quot;';\n case '\\'': return '&apos;';\n case '&': return '&amp;';\n }\n return ch;\n });\n}\n/**\n * Converts HTML characters inside the string to use entities instead. Makes the string safe from\n * being used e.g. in HTMLElement.innerHTML.\n */\nfunction escape(html) {\n return html.replace(/[<>&]/g, function (match) {\n switch (match) {\n case '<': return '&lt;';\n case '>': return '&gt;';\n case '&': return '&amp;';\n default: return match;\n }\n });\n}\n/**\n * Escapes regular expression characters in a given string\n */\nfunction escapeRegExpCharacters(value) {\n return value.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g, '\\\\$&');\n}\n/**\n * Counts how often `substr` occurs inside `value`.\n */\nfunction count(value, substr) {\n let result = 0;\n let index = value.indexOf(substr);\n while (index !== -1) {\n result++;\n index = value.indexOf(substr, index + substr.length);\n }\n return result;\n}\nfunction truncate(value, maxLength, suffix = '…') {\n if (value.length <= maxLength) {\n return value;\n }\n return `${value.substr(0, maxLength)}${suffix}`;\n}\nfunction truncateMiddle(value, maxLength, suffix = '…') {\n if (value.length <= maxLength) {\n return value;\n }\n const prefixLength = Math.ceil(maxLength / 2) - suffix.length / 2;\n const suffixLength = Math.floor(maxLength / 2) - suffix.length / 2;\n return `${value.substr(0, prefixLength)}${suffix}${value.substr(value.length - suffixLength)}`;\n}\n/**\n * Removes all occurrences of needle from the beginning and end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim (default is a blank)\n */\nfunction trim(haystack, needle = ' ') {\n const trimmed = ltrim(haystack, needle);\n return rtrim(trimmed, needle);\n}\n/**\n * Removes all occurrences of needle from the beginning of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nfunction ltrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length;\n if (needleLen === 0 || haystack.length === 0) {\n return haystack;\n }\n let offset = 0;\n while (haystack.indexOf(needle, offset) === offset) {\n offset = offset + needleLen;\n }\n return haystack.substring(offset);\n}\n/**\n * Removes all occurrences of needle from the end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nfunction rtrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length, haystackLen = haystack.length;\n if (needleLen === 0 || haystackLen === 0) {\n return haystack;\n }\n let offset = haystackLen, idx = -1;\n while (true) {\n idx = haystack.lastIndexOf(needle, offset - 1);\n if (idx === -1 || idx + needleLen !== offset) {\n break;\n }\n if (idx === 0) {\n return '';\n }\n offset = idx;\n }\n return haystack.substring(0, offset);\n}\nfunction convertSimple2RegExpPattern(pattern) {\n return pattern.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&').replace(/[\\*]/g, '.*');\n}\nfunction stripWildcards(pattern) {\n return pattern.replace(/\\*/g, '');\n}\nfunction createRegExp(searchString, isRegex, options = {}) {\n if (!searchString) {\n throw new Error('Cannot create regex from empty string');\n }\n if (!isRegex) {\n searchString = escapeRegExpCharacters(searchString);\n }\n if (options.wholeWord) {\n if (!/\\B/.test(searchString.charAt(0))) {\n searchString = '\\\\b' + searchString;\n }\n if (!/\\B/.test(searchString.charAt(searchString.length - 1))) {\n searchString = searchString + '\\\\b';\n }\n }\n let modifiers = '';\n if (options.global) {\n modifiers += 'g';\n }\n if (!options.matchCase) {\n modifiers += 'i';\n }\n if (options.multiline) {\n modifiers += 'm';\n }\n if (options.unicode) {\n modifiers += 'u';\n }\n return new RegExp(searchString, modifiers);\n}\nfunction regExpLeadsToEndlessLoop(regexp) {\n // Exit early if it's one of these special cases which are meant to match\n // against an empty string\n if (regexp.source === '^' || regexp.source === '^$' || regexp.source === '$' || regexp.source === '^\\\\s*$') {\n return false;\n }\n // We check against an empty string. If the regular expression doesn't advance\n // (e.g. ends in an endless loop) it will match an empty string.\n const match = regexp.exec('');\n return !!(match && regexp.lastIndex === 0);\n}\nfunction splitLines(str) {\n return str.split(/\\r\\n|\\r|\\n/);\n}\nfunction splitLinesIncludeSeparators(str) {\n const linesWithSeparators = [];\n const splitLinesAndSeparators = str.split(/(\\r\\n|\\r|\\n)/);\n for (let i = 0; i < Math.ceil(splitLinesAndSeparators.length / 2); i++) {\n linesWithSeparators.push(splitLinesAndSeparators[2 * i] + (splitLinesAndSeparators[2 * i + 1] ?? ''));\n }\n return linesWithSeparators;\n}\n/**\n * Returns first index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nfunction firstNonWhitespaceIndex(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== charCode_1.CharCode.Space && chCode !== charCode_1.CharCode.Tab) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Returns the leading whitespace of the string.\n * If the string contains only whitespaces, returns entire string\n */\nfunction getLeadingWhitespace(str, start = 0, end = str.length) {\n for (let i = start; i < end; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== charCode_1.CharCode.Space && chCode !== charCode_1.CharCode.Tab) {\n return str.substring(start, i);\n }\n }\n return str.substring(start, end);\n}\n/**\n * Returns last index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nfunction lastNonWhitespaceIndex(str, startIndex = str.length - 1) {\n for (let i = startIndex; i >= 0; i--) {\n const chCode = str.charCodeAt(i);\n if (chCode !== charCode_1.CharCode.Space && chCode !== charCode_1.CharCode.Tab) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Function that works identically to String.prototype.replace, except, the\n * replace function is allowed to be async and return a Promise.\n */\nfunction replaceAsync(str, search, replacer) {\n const parts = [];\n let last = 0;\n for (const match of str.matchAll(search)) {\n parts.push(str.slice(last, match.index));\n if (match.index === undefined) {\n throw new Error('match.index should be defined');\n }\n last = match.index + match[0].length;\n parts.push(replacer(match[0], ...match.slice(1), match.index, str, match.groups));\n }\n parts.push(str.slice(last));\n return Promise.all(parts).then(p => p.join(''));\n}\nfunction compare(a, b) {\n if (a < b) {\n return -1;\n }\n else if (a > b) {\n return 1;\n }\n else {\n return 0;\n }\n}\nfunction compareSubstring(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n const codeA = a.charCodeAt(aStart);\n const codeB = b.charCodeAt(bStart);\n if (codeA < codeB) {\n return -1;\n }\n else if (codeA > codeB) {\n return 1;\n }\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nfunction compareIgnoreCase(a, b) {\n return compareSubstringIgnoreCase(a, b, 0, a.length, 0, b.length);\n}\nfunction compareSubstringIgnoreCase(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n let codeA = a.charCodeAt(aStart);\n let codeB = b.charCodeAt(bStart);\n if (codeA === codeB) {\n // equal\n continue;\n }\n if (codeA >= 128 || codeB >= 128) {\n // not ASCII letters -> fallback to lower-casing strings\n return compareSubstring(a.toLowerCase(), b.toLowerCase(), aStart, aEnd, bStart, bEnd);\n }\n // mapper lower-case ascii letter onto upper-case varinats\n // [97-122] (lower ascii) --> [65-90] (upper ascii)\n if (isLowerAsciiLetter(codeA)) {\n codeA -= 32;\n }\n if (isLowerAsciiLetter(codeB)) {\n codeB -= 32;\n }\n // compare both code points\n const diff = codeA - codeB;\n if (diff === 0) {\n continue;\n }\n return diff;\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nfunction isAsciiDigit(code) {\n return code >= charCode_1.CharCode.Digit0 && code <= charCode_1.CharCode.Digit9;\n}\nfunction isLowerAsciiLetter(code) {\n return code >= charCode_1.CharCode.a && code <= charCode_1.CharCode.z;\n}\nfunction isUpperAsciiLetter(code) {\n return code >= charCode_1.CharCode.A && code <= charCode_1.CharCode.Z;\n}\nfunction equalsIgnoreCase(a, b) {\n return a.length === b.length && compareSubstringIgnoreCase(a, b) === 0;\n}\nfunction startsWithIgnoreCase(str, candidate) {\n const candidateLength = candidate.length;\n if (candidate.length > str.length) {\n return false;\n }\n return compareSubstringIgnoreCase(str, candidate, 0, candidateLength) === 0;\n}\n/**\n * @returns the length of the common prefix of the two strings.\n */\nfunction commonPrefixLength(a, b) {\n const len = Math.min(a.length, b.length);\n let i;\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(i) !== b.charCodeAt(i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * @returns the length of the common suffix of the two strings.\n */\nfunction commonSuffixLength(a, b) {\n const len = Math.min(a.length, b.length);\n let i;\n const aLastIndex = a.length - 1;\n const bLastIndex = b.length - 1;\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nfunction isHighSurrogate(charCode) {\n return (0xD800 <= charCode && charCode <= 0xDBFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nfunction isLowSurrogate(charCode) {\n return (0xDC00 <= charCode && charCode <= 0xDFFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nfunction computeCodePoint(highSurrogate, lowSurrogate) {\n return ((highSurrogate - 0xD800) << 10) + (lowSurrogate - 0xDC00) + 0x10000;\n}\n/**\n * get the code point that begins at offset `offset`\n */\nfunction getNextCodePoint(str, len, offset) {\n const charCode = str.charCodeAt(offset);\n if (isHighSurrogate(charCode) && offset + 1 < len) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (isLowSurrogate(nextCharCode)) {\n return computeCodePoint(charCode, nextCharCode);\n }\n }\n return charCode;\n}\n/**\n * get the code point that ends right before offset `offset`\n */\nfunction getPrevCodePoint(str, offset) {\n const charCode = str.charCodeAt(offset - 1);\n if (isLowSurrogate(charCode) && offset > 1) {\n const prevCharCode = str.charCodeAt(offset - 2);\n if (isHighSurrogate(prevCharCode)) {\n return computeCodePoint(prevCharCode, charCode);\n }\n }\n return charCode;\n}\nclass CodePointIterator {\n get offset() {\n return this._offset;\n }\n constructor(str, offset = 0) {\n this._str = str;\n this._len = str.length;\n this._offset = offset;\n }\n setOffset(offset) {\n this._offset = offset;\n }\n prevCodePoint() {\n const codePoint = getPrevCodePoint(this._str, this._offset);\n this._offset -= (codePoint >= uint_1.Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);\n return codePoint;\n }\n nextCodePoint() {\n const codePoint = getNextCodePoint(this._str, this._len, this._offset);\n this._offset += (codePoint >= uint_1.Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);\n return codePoint;\n }\n eol() {\n return (this._offset >= this._len);\n }\n}\nexports.CodePointIterator = CodePointIterator;\nexports.noBreakWhitespace = '\\xa0';\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MicrotaskDelay = void 0;\n/**\n * Can be passed into the Delayed to defer using a microtask\n * */\nexports.MicrotaskDelay = Symbol('MicrotaskDelay');\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Constants = void 0;\nexports.toUint8 = toUint8;\nexports.toUint32 = toUint32;\nvar Constants;\n(function (Constants) {\n /**\n * MAX SMI (SMall Integer) as defined in v8.\n * one bit is lost for boxing/unboxing flag.\n * one bit is lost for sign flag.\n * See https://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/#tagged-values\n */\n Constants[Constants[\"MAX_SAFE_SMALL_INTEGER\"] = 1073741824] = \"MAX_SAFE_SMALL_INTEGER\";\n /**\n * MIN SMI (SMall Integer) as defined in v8.\n * one bit is lost for boxing/unboxing flag.\n * one bit is lost for sign flag.\n * See https://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/#tagged-values\n */\n Constants[Constants[\"MIN_SAFE_SMALL_INTEGER\"] = -1073741824] = \"MIN_SAFE_SMALL_INTEGER\";\n /**\n * Max unsigned integer that fits on 8 bits.\n */\n Constants[Constants[\"MAX_UINT_8\"] = 255] = \"MAX_UINT_8\";\n /**\n * Max unsigned integer that fits on 16 bits.\n */\n Constants[Constants[\"MAX_UINT_16\"] = 65535] = \"MAX_UINT_16\";\n /**\n * Max unsigned integer that fits on 32 bits.\n */\n Constants[Constants[\"MAX_UINT_32\"] = 4294967295] = \"MAX_UINT_32\";\n Constants[Constants[\"UNICODE_SUPPLEMENTARY_PLANE_BEGIN\"] = 65536] = \"UNICODE_SUPPLEMENTARY_PLANE_BEGIN\";\n})(Constants || (exports.Constants = Constants = {}));\nfunction toUint8(v) {\n if (v < 0) {\n return 0;\n }\n if (v > Constants.MAX_UINT_8) {\n return Constants.MAX_UINT_8;\n }\n return v | 0;\n}\nfunction toUint32(v) {\n if (v < 0) {\n return 0;\n }\n if (v > Constants.MAX_UINT_32) {\n return Constants.MAX_UINT_32;\n }\n return v | 0;\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) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { setTraceLogger } from 'common/services/LogService';\nimport { Emitter, Event } from 'vs/base/common/event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon , IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter<HTMLCanvasElement>());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter<HTMLCanvasElement>());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter<HTMLCanvasElement>());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter<void>());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _preserveDrawingBuffer?: boolean\n ) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('Webgl2 is only supported on Safari 16 and above');\n }\n }\n super();\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n // Set trace logger just in case it hasn't been yet which could happen when the addon is\n // bundled separately to the core module\n setTraceLogger(logService);\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n optionsService,\n themeService,\n this._preserveDrawingBuffer\n ));\n this._register(Event.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(Event.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(Event.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(Event.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","INDICES_PER_CELL","BYTES_PER_CELL","Float32Array","BYTES_PER_ELEMENT","$glyph","$i","$leftCellPadding","$clippedPixels","GlyphRenderer","Disposable","constructor","_terminal","_gl","_dimensions","_optionsService","super","_activeBuffer","_vertices","count","attributes","attributesBuffers","gl","this","undefined","TextureAtlas","maxAtlasPages","Math","min","throwIfFalsy","getParameter","MAX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","_program","createProgram","maxFragmentShaderTextureUnits","textureConditionals","i","createFragmentShaderSource","_register","toDisposable","deleteProgram","_projectionLocation","getUniformLocation","_resolutionLocation","_textureLocation","_vertexArrayObject","createVertexArray","bindVertexArray","unitQuadVertices","unitQuadVerticesBuffer","createBuffer","deleteBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","unitQuadElementIndices","Uint8Array","elementIndicesBuffer","ELEMENT_ARRAY_BUFFER","_attributesBuffer","vertexAttribDivisor","useProgram","textureUnits","Int32Array","uniform1iv","uniformMatrix4fv","PROJECTION_MATRIX","_atlasTextures","glTexture","GLTexture","createTexture","deleteTexture","texture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","enable","BLEND","blendFunc","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","handleResize","beginFrame","_atlas","updateCell","x","y","code","bg","fg","ext","chars","width","lastBg","_updateCell","array","cols","NULL_CELL_CODE","length","getRasterizedGlyphCombinedChar","getRasterizedGlyph","floor","device","cell","char","offset","left","top","size","canvas","height","texturePage","texturePositionClipSpace","pages","sizeClipSpace","rawOptions","rescaleOverlappingGlyphs","allowRescaling","fill","clear","terminal","newCount","rows","viewport","uniform2f","render","renderModel","activeBuffer","bufferLength","lineLengths","si","sub","subarray","set","STREAM_DRAW","version","_bindAtlasPageTexture","drawElementsInstanced","TRIANGLE_STRIP","setAtlas","atlas","generateMipmap","setDimensions","dimensions","BYTES_PER_RECTANGLE","Vertices","$rgba","$x1","$y1","$r","$g","$b","$a","RectangleRenderer","_themeService","_verticesCursor","_updateCachedColors","colors","onChangeColors","e","_updateViewportRectangle","renderBackgrounds","_renderVertices","renderCursor","vertices","DYNAMIC_DRAW","_bgFloat","_colorToFloat32Array","background","_cursorFloat","cursor","_addRectangleFloat","updateBackgrounds","model","currentStartX","currentBg","currentFg","currentInverse","modelIndex","inverse","rectangleCount","RENDER_MODEL_INDICIES_PER_CELL","cells","RENDER_MODEL_BG_OFFSET","RENDER_MODEL_FG_OFFSET","_updateRectangle","updateCursor","style","dpr","cursorWidth","startX","endX","ansi","rgba","foreground","expandFloat32Array","_addRectangle","x1","y1","r","g","b","a","color","RENDER_MODEL_EXT_OFFSET","COMBINED_CHAR_BIT_MASK","Uint32Array","selection","createSelectionRenderModel","resize","indexCount","WebglRenderer","_characterJoinerService","_charSizeService","_coreBrowserService","_coreService","_decorationService","preserveDrawingBuffer","_cursorBlinkStateManager","MutableDisposable","_charAtlasDisposable","_observerDisposable","_model","RenderModel","_workCell","CellData","_workCell2","_rectangleRenderer","_glyphRenderer","_onChangeTextureAtlas","Emitter","onChangeTextureAtlas","event","_onAddTextureAtlasCanvas","onAddTextureAtlasCanvas","_onRemoveTextureAtlasCanvas","onRemoveTextureAtlasCanvas","_onRequestRedraw","onRequestRedraw","_onContextLoss","onContextLoss","_handleColorChange","_cellColorResolver","CellColorResolver","_core","_renderLayers","LinkRenderLayer","screenElement","linkifier","createRenderDimensions","_devicePixelRatio","_updateDimensions","_updateCursorBlink","onOptionChange","_handleOptionsChanged","_canvas","mainDocument","createElement","contextAttributes","antialias","depth","getContext","Error","addDisposableListener","console","log","preventDefault","_contextRestorationTimeout","setTimeout","warn","fire","clearTimeout","removeTerminalFromCache","_initializeWebGLState","_requestRedrawViewport","value","observeDevicePixelDimensions","window","w","h","_setCanvasDevicePixelDimensions","onWindowChange","appendChild","_isAttached","document","body","contains","l","dispose","parentElement","removeChild","textureAtlas","_charAtlas","_refreshCharAtlas","_clearModel","handleDevicePixelRatioChange","css","handleCharSizeChanged","handleBlur","pause","handleFocus","resume","handleSelectionChanged","start","end","columnSelectMode","update","handleCursorMove","restartBlinkAnimation","acquireTextureAtlas","combinedDisposable","Event","forward","warmUp","clearGlyphRenderer","clearTextureAtlas","clearTexture","reset","registerCharacterJoiner","handler","deregisterCharacterJoiner","joinerId","renderRows","handleGridChanged","_updateModel","isCursorVisible","options","cursorBlink","CursorBlinkStateManager","_requestRedrawCursor","row","line","joinedRanges","isJoined","lastCharX","range","j","clamp","cursorY","buffer","active","baseY","viewportRelativeCursorY","ydisp","cursorX","lastCursorX","isCursorInitialized","isCursorHidden","modelUpdated","lines","get","getJoinedCharacters","result","loadCell","shift","JoinedCellData","translateToString","getChars","getCode","resolve","getWidth","isFocused","cursorStyle","cursorInactiveStyle","cursorAccent","NULL_CELL_CHAR","ceil","lineHeight","round","letterSpacing","AttributeData","firstCell","content","combinedData","_width","isCombined","setFromCharData","getAsCharData","max","vertexSource","fragmentSource","program","attachShader","createShader","VERTEX_SHADER","FRAGMENT_SHADER","linkProgram","getProgramParameter","LINK_STATUS","error","getProgramInfoLog","source","newLength","newArray","type","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","BaseRenderLayer","_container","id","zIndex","_alpha","_deviceCharWidth","_deviceCharHeight","_deviceCellWidth","_deviceCellHeight","_deviceCharLeft","_deviceCharTop","classList","add","toString","_initCanvas","remove","_ctx","alpha","_clearAll","startRow","endRow","_setTransparency","oldCanvas","cloneNode","replaceChild","colorSet","dim","_fillBottomLineAtCells","fillRect","clearRect","fillStyle","_clearCells","_fillCharTrueColor","font","_getFont","textBaseline","TEXT_BASELINE","_clipCell","fillText","beginPath","rect","clip","isBold","isItalic","fontWeightBold","fontWeight","fontSize","fontFamily","container","linkifier2","coreBrowserService","optionsService","themeService","onShowLinkUnderline","_handleShowLinkUnderline","onHideLinkUnderline","_handleHideLinkUnderline","_state","_clearCurrentLink","middleRowCount","y2","x2","INVERTED_DEFAULT_COLOR","is256Color","$colors","$fg","$bg","$hasFg","$hasBg","$isSelected","$variantOffset","_optionService","_selectionRenderModel","deviceCellWidth","extended","underlineStyle","lineWidth","forEachDecorationAtCell","d","backgroundColorRGB","foregroundColorRGB","isCellSelected","blend","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","selectionForeground","treatGlyphAsBackgroundColor","deviceCellHeight","deviceCharWidth","deviceCharHeight","devicePixelRatio","newConfig","generateConfig","charAtlasCache","entry","ownedByIndex","ownedBy","indexOf","configEquals","config","splice","push","core","newEntry","unicodeService","index","clonedColors","NULL_COLOR","selectionBackgroundTransparent","selectionInactiveBackgroundTransparent","overviewRulerBorder","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","slice","contrastCache","halfContrastCache","customGlyphs","allowTransparency","drawBoldTextInBrightColors","minimumContrastRatio","colorCode","DIM_OPACITY","isFirefox","isLegacyEdge","_renderCallback","_restartInterval","isPaused","_blinkStartTimeout","_blinkInterval","clearInterval","_animationFrame","cancelAnimationFrame","_animationTimeRestarted","Date","now","requestAnimationFrame","timeToStart","BLINK_INTERVAL","time","setInterval","ctx","c","xOffset","yOffset","blockElementDefinition","blockElementDefinitions","charDefinition","box","xEighth","yEighth","drawBlockElementChar","patternDefinition","patternCharacterDefinitions","patternSet","cachedPatterns","Map","pattern","tmpCanvas","ownerDocument","tmpCtx","imageData","ImageData","startsWith","parseInt","substring","split","map","parseFloat","data","putImageData","createPattern","drawPatternChar","boxDrawingDefinition","boxDrawingDefinitions","strokeStyle","instructions","Object","entries","actualInstructions","Number","instruction","f","svgToCanvasInstructionMap","args","translateArgs","stroke","closePath","drawBoxDrawingChar","powerlineDefinition","powerlineDefinitions","clipRegion","Path2D","cssLineWidth","leftPadding","rightPadding","drawPowerlineChar","xp","yp","bezierCurveTo","lineTo","moveTo","cellWidth","cellHeight","doClamp","element","parentWindow","callback","observer","ResizeObserver","find","target","disconnect","devicePixelContentBoxSize","inlineSize","blockSize","observe","isPowerlineGlyph","codepoint","isEmoji","glyphSizeX","isNerdFontGlyph","isBoxOrBlockGlyph","currentOffset","SelectionRenderModel","hasSelection","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startCol","endCol","selectionStart","selectionEnd","viewportY","buffers","NULL_RASTERIZED_GLYPH","texturePosition","_pages","_document","_config","_unicodeService","_didWarmUp","_cacheMap","FourKeyMap","_cacheMapCombined","_activePages","_workBoundingBox","bottom","right","_workAttributeData","_textureSize","_requestClearModel","_createNewPage","_tmpCanvas","createCanvas","TMP_CANVAS_GLYPH_PADDING","_tmpCtx","willReadFrequently","page","_doWarmUp","queue","IdleTaskQueue","enqueue","DEFAULT_COLOR","DEFAULT_EXT","rasterizedGlyph","_drawToCache","currentRow","pagesBySize","filter","sort","percentageUsed","sameSizeI","mergingPages","sortedMergingPagesIndexes","glyphs","mergedPageIndex","mergedPage","_mergePages","_deletePage","newPage","AtlasPage","mergedSize","p","drawImage","pageIndex","adjustingPage","restrictToCellHeight","_getFromCacheMap","cacheMap","key","_getColorFromAnsiIndex","idx","_getBackgroundColor","bgColorMode","bgColor","arr","toColorRGB","channels","toColor","opaque","_getForegroundColor","fgColorMode","fgColor","bold","excludeFromContrastRatioDemands","minimumContrastColor","_getMinimumContrastColor","multiplyOpacity","_resolveBackgroundRgba","_resolveForegroundRgba","cache","_getContrastCache","adjustedColor","getColor","bgRgba","fgRgba","ensureContrastRatio","setColor","codeOrChars","String","fromCharCode","allowedWidth","allowedHeight","save","isInvisible","isInverse","isDim","italic","underline","isUnderline","strikethrough","isStrikethrough","overline","isOverline","getFgColor","getFgColorMode","getBgColor","getBgColorMode","temp","temp2","backgroundColor","globalCompositeOperation","fontStyle","powerlineGlyph","charCodeAt","restrictedPowerlineGlyph","isRestrictedPowerlineGlyph","foregroundColor","padding","customGlyph","tryDrawCustomChar","chWidth","enableClearThresholdCheck","wcwidth","getStringCellWidth","isUnderlineColorDefault","isUnderlineColorRGB","getUnderlineColor","join","xLeft","yTop","yMid","yBot","nextOffset","getUnderlineVariantOffset","xChLeft","xChRight","xChMid","yCurlyBot","yCurlyTop","offsetWidth","setLineDash","computeNextVariantOffset","lineRatio","gapRatio","xChWidth","gap","restore","metrics","measureText","actualBoundingBoxDescent","strokeText","isBeyondCellBounds","clearColor","getImageData","isEmpty","checkCompletelyTransparent","_findGlyphBoundingBox","activePage","activeRow","fixedRows","wasPageAndRowFound","candidatePage","addGlyph","boundingBox","restrictedGlyph","found","alphaOffset","_usedPixels","_glyphs","glyph","sourcePages","enableThresholdCheck","fgR","fgG","fgB","threshold","abs","rgb","toPaddedHex","s","contrastRatio","l1","l2","toCss","toRgba","opacity","toChannels","bgR","bgG","bgB","isOpaque","ratio","rgbaColor","factor","$ctx","$litmusColor","createLinearGradient","match","repeat","rgbaMatch","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","TwoKeyMap","_data","first","second","third","fourth","isSafari","majorVersion","userAgent","isNode","process","navigator","platform","includes","test","isMac","isIpad","isIphone","isWindows","isLinux","isChromeOS","TaskQueue","_tasks","_i","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","bind","deadline","taskDuration","longestTask","lastDeadlineRemaining","timeRemaining","deadlineRemaining","PriorityTaskQueue","_createDeadline","identifier","duration","requestIdleCallback","cancelIdleCallback","_queue","ExtendedAttrs","fromColorRGB","clone","newObj","hasExtendedAttrs","isBlink","isProtected","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","updateExtended","underlineColor","getUnderlineColorMode","isUnderlineColorPalette","getUnderlineStyle","underlineVariantOffset","_urlId","_ext","urlId","val","fromCharData","obj","stringFromCodePoint","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","DEFAULT_ATTR","CHAR_DATA_CODE_INDEX","NULL_CELL_WIDTH","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","_interim","decode","input","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","missing","fourStop","logger","traceLogger","_target","descriptor","fn","logLevel","LogLevelEnum","TRACE","apply","trace","name","JSON","stringify","optionsKeyToLogLevel","debug","DEBUG","info","INFO","WARN","ERROR","off","OFF","LogService","_logLevel","_updateLogLevel","onSpecificOptionChange","_evalLazyOptionalParams","optionalParams","_log","message","call","IOptionsService","ctor","DI_DEPENDENCIES","serviceRegistry","has","decorator","arguments","DI_TARGET","storeServiceDependency","IBufferService","createDecorator","ICoreMouseService","ICoreService","ICharsetService","IInstantiationService","ILogService","IOscLinkService","IUnicodeService","IDecorationService","defineProperty","isAndroid","isElectron","isWebkitWebView","isChrome","isWebKit","onDidChangeFullscreen","onDidChangeZoomLevel","addMatchMediaChangeListener","setZoomLevel","zoomLevel","targetWindow","WindowManager","INSTANCE","getZoomLevel","getZoomFactor","setZoomFactor","zoomFactor","setFullscreen","fullscreen","isFullscreen","isStandalone","standalone","isWCOEnabled","windowControlsOverlay","visible","getWCOBoundingRect","getTitlebarAreaRect","window_1","event_1","mapWindowIdToZoomLevel","_onDidChangeZoomLevel","mapWindowIdToZoomFactor","_onDidChangeFullscreen","mapWindowIdToFullScreen","getWindowId","targetWindowId","windowId","vscodeWindowId","query","matchMedia","addEventListener","mainWindow","standaloneMatchMedia","fullScreenMatchMedia","matches","__createBinding","create","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","__setModuleDefault","v","__importStar","mod","prototype","hasOwnProperty","BrowserFeatures","KeyboardSupport","browser","safeNavigator","clipboard","writeText","isNative","queryCommandSupported","readText","keyboard","Always","FullScreen","None","touch","maxTouchPoints","pointerEvents","PointerEvent","_a","SafeTriangle","DragAndDropObserver","ModifierKeyEmitter","DetectedFullscreenMode","Namespace","EventHelper","EventType","sharedMutationObserver","Dimension","WindowIntervalTimer","scheduleAtNextAnimationFrame","runAtThisOrScheduleAtNextAnimationFrame","WindowIdleValue","addStandardDisposableGenericMouseUpListener","addStandardDisposableGenericMouseDownListener","addStandardDisposableListener","onDidUnregisterWindow","onWillUnregisterWindow","onDidRegisterWindow","hasWindow","getWindowById","getWindowsCount","getWindows","getDocument","getWindow","registerWindow","clearNode","node","firstChild","clearNodeRecursively","domNode","addDisposableGenericMouseDownListener","addDisposableGenericMouseMoveListener","useCapture","isIOS","canIUse_1","POINTER_MOVE","MOUSE_MOVE","addDisposableGenericMouseUpListener","runWhenWindowIdle","timeout","async_1","_runWhenIdle","disposableWindowInterval","interval","iterations","iteration","timer","disposable","lifecycle_1","measure","modify","addDisposableThrottledListener","eventMerger","minimumTimeMs","TimeoutThrottledDomListener","getComputedStyle","getClientArea","fallback","elWindow","elDocument","clientWidth","clientHeight","visualViewport","innerWidth","innerHeight","documentElement","getTopLeftOffset","position","getDomNodePagePosition","bb","getBoundingClientRect","scrollX","scrollY","getDomNodeZoomLevel","testElement","zoom","elementZoomLevel","getTotalWidth","getContentWidth","border","SizeUtils","getBorderLeftWidth","getBorderRightWidth","getPaddingLeft","getPaddingRight","getTotalScrollWidth","getContentHeight","getBorderTopWidth","getBorderBottomWidth","getPaddingTop","getPaddingBottom","offsetHeight","getTotalHeight","margin","getMarginTop","getMarginBottom","getLargestChildWidth","parent","children","childWidths","child","elementPosition","parentPosition","getRelativeLeft","isAncestor","setParentFlowTo","fromChildElement","toParentElement","dataset","parentFlowToDataKey","isAncestorUsingFlowTo","testChild","testAncestor","isHTMLElement","flowToParentElement","getParentFlowToElement","parentNode","findParentWithClass","hasParentWithClass","clazz","stopAtClazzOrNode","isShadowRoot","isInShadowDOM","getShadowRoot","getActiveElement","isActiveElement","isAncestorOfActiveElement","ancestor","isActiveDocument","getActiveDocument","getActiveWindow","defaultView","isGlobalStylesheet","globalStylesheets","createStyleSheet2","WrappedStyleElement","createStyleSheet","cloneGlobalStylesheets","disposables","DisposableStore","globalStylesheet","clonedGlobalStylesheets","cloneGlobalStyleSheet","createMetaElement","head","createHeadElement","createLinkElement","createCSSRule","selector","cssText","getSharedStyleSheet","sheet","insertRule","clonedGlobalStylesheet","removeCSSRulesContainingSelector","ruleName","rules","getDynamicStyleSheetRules","toDelete","rule","isCSSStyleRule","selectorText","deleteRule","isHTMLAnchorElement","HTMLAnchorElement","isHTMLSpanElement","HTMLSpanElement","isHTMLTextAreaElement","HTMLTextAreaElement","isHTMLInputElement","HTMLInputElement","isHTMLButtonElement","HTMLButtonElement","isHTMLDivElement","HTMLDivElement","isSVGElement","SVGElement","isMouseEvent","MouseEvent","isKeyboardEvent","KeyboardEvent","isPointerEvent","isDragEvent","DragEvent","isEventLike","candidate","stopPropagation","saveParentsScrollTop","nodeType","ELEMENT_NODE","scrollTop","restoreParentsScrollTop","state","trackFocus","FocusTracker","after","sibling","append","prepend","insertBefore","innerText","$","nodes","separator","forEach","Node","createTextNode","setVisibility","elements","show","hide","removeTabIndexAndUpdateFocus","hasAttribute","activeElement","parentFocusable","findParentWithAttribute","focus","removeAttribute","finalHandler","domContentLoaded","Promise","readyState","listener","removeEventListener","computeScreenAwareSize","cssPx","screenPx","windowOpenNoOpener","url","open","windowOpenPopup","screenLeft","popupWidth","screenTop","popupHeight","windowOpenWithSuccess","noOpener","newTab","opener","location","href","animate","step","stepDisposable","asCSSPropertyValue","replace","asCssValueWithDefault","cssPropertyValue","dflt","variableMatch","varArguments","trim","detectFullscreen","fullscreenElement","webkitFullscreenElement","webkitIsFullScreen","mode","DOCUMENT","guess","screen","BROWSER","isMacintosh","outerHeight","outerWidth","multibyteAwareBtoa","str","btoa","codeUnits","Uint16Array","binary","uint8array","toBinary","getCookieValue","cookie","pop","tag","Array","isArray","H_REGEX","exec","groups","tagName","el","classNames","className","assign","cssKey","cssValue","setProperty","camelCaseToHyphenCase","tabIndex","setAttribute","svgElem","createElementNS","copyAttributes","trackAttributes","from","to","attributeFilter","mutations","mutation","attributeName","copyAttribute","keyboardEvent_1","mouseEvent_1","errors_1","keyCodes_1","hash_1","numbers_1","windows","ensureCodeWindow","mainWindowRegistration","registeredWindow","delete","BEFORE_UNLOAD","values","fallbackToMain","candidateNode","candidateEvent","view","DomListener","_node","_type","_handler","_options","useCaptureOrOptions","_wrapAsStandardMouseEvent","StandardMouseEvent","POINTER_DOWN","MOUSE_DOWN","POINTER_UP","MOUSE_UP","wrapHandler","StandardKeyboardEvent","_wrapAsStandardKeyboardEvent","AbstractIdleValue","executor","IntervalTimer","defaultTarget","cancelAndSet","runner","AnimationFrameQueueItem","priority","_runner","_canceled","execute","onUnexpectedError","NEXT_QUEUE","CURRENT_QUEUE","animFrameRequested","inAnimationFrameRunner","item","nextQueue","currentQueue","animationFrameRunner","DEFAULT_EVENT_MERGER","lastEvent","currentEvent","lastHandlerTime","TimeoutTimer","invokeHandler","getTime","elapsedTime","cancel","setIfNotSet","convertToPixels","getDimension","cssPropertyName","jsPropertyName","computedStyle","getPropertyValue","getMarginLeft","getMarginRight","is","lift","equals","offsetParent","offsetTop","offsetLeft","direction","scrollLeft","scrollWidth","Boolean","flowToParentId","getElementById","host","shadowRoot","doc","hasFocus","_currentCssStyle","_styleSheet","setStyle","cssStyle","beforeAppend","disposableStore","media","globalStylesheetClones","Set","cloneDisposable","cssRules","childList","textContent","mutationObservers","mutationObserversPerTarget","optionsHash","hash","mutationObserverPerOptions","users","onDidMutate","MutationObserver","resolvedMutationObserverPerOptions","_sharedStyleSheet","HTMLElement","CLICK","AUXCLICK","DBLCLICK","MOUSE_OVER","MOUSE_OUT","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_WHEEL","POINTER_LEAVE","CONTEXT_MENU","WHEEL","KEY_DOWN","KEY_PRESS","KEY_UP","LOAD","UNLOAD","PAGE_SHOW","PAGE_HIDE","PASTE","ABORT","RESIZE","SCROLL","FULLSCREEN_CHANGE","WK_FULLSCREEN_CHANGE","SELECT","CHANGE","SUBMIT","RESET","FOCUS","FOCUS_IN","FOCUS_OUT","BLUR","INPUT","STORAGE","DRAG_START","DRAG","DRAG_ENTER","DRAG_LEAVE","DRAG_OVER","DROP","DRAG_END","ANIMATION_START","ANIMATION_END","ANIMATION_ITERATION","stop","cancelBubble","hasFocusWithin","_onDidFocus","onDidFocus","_onDidBlur","onDidBlur","loosingFocus","onFocus","onBlur","_refreshStateHandler","refreshState","SELECTOR_REGEX","_$","namespace","description","attrs","HTML","display","SVG","_subscriptions","_keyStatus","altKey","shiftKey","ctrlKey","metaKey","runAndSubscribe","registerListeners","defaultPrevented","keyCode","KeyCode","Alt","lastKeyPressed","lastKeyReleased","buttons","resetKeyStatus","keyStatus","isModifierPressed","doResetKeyStatus","getInstance","instance","callbacks","counter","dragStartTime","onDragStart","onDrag","timeStamp","onDragEnter","onDragOver","onDragLeave","onDragEnd","onDrop","toLowerCase","getAttribute","originX","originY","triangles","t","isPointWithinTriangle","IframeUtils","parentOriginHash","async","parentOrigin","salt","crypto","subtle","strData","arrData","TextEncoder","encode","bytes","hexArray","padStart","BigInt","sha256AsBase32","digest","sameOriginWindowChainCache","WeakMap","getParentWindowIfSameOrigin","parentLocation","origin","getSameOriginWindowChain","windowChainCache","WeakRef","iframeElement","frameElement","getPositionOfChildWindowRelativeToAncestorWindow","childWindow","ancestorWindow","windowChain","windowChainEl","windowInChain","deref","boundingRect","printKeyboardEvent","modifiers","printStandardKeyboardEvent","KeyCodeUtils","keybindings_1","ctrlKeyMod","KeyMod","WinCtrl","CtrlCmd","altKeyMod","shiftKeyMod","Shift","metaKeyMod","_standardKeyboardEventBrand","browserEvent","altGraphKey","getModifierState","charCode","toUpperCase","fromString","PauseBreak","Semicolon","IntlBackslash","Equal","NumpadAdd","NumpadSubtract","Minus","Meta","EVENT_KEY_CODE_MAP","Unknown","extractKeyCode","Ctrl","_asKeybinding","_computeKeybinding","_asKeyCodeChord","_computeKeyCodeChord","toKeyCodeChord","other","KeyCodeChord","StandardWheelEvent","DragMouseEvent","iframe_1","timestamp","leftButton","button","middleButton","rightButton","detail","pageX","posx","posy","pageY","clientX","clientY","iframeOffsets","dataTransfer","deltaX","deltaY","targetNode","srcElement","shouldFactorDPR","chromeVersionMatch","e1","e2","wheelDeltaY","VERTICAL_AXIS","axis","ev","deltaMode","DOM_DELTA_LINE","wheelDeltaX","HORIZONTAL_AXIS","wheelDelta","fallbackWindowId","Permutation","CallbackIterable","ArrayQueue","booleanComparator","numberComparator","CompareResult","tail","n","tail2","one","itemEquals","len","removeFastWithoutKeepingOrder","last","binarySearch","comparator","binarySearch2","quickSelect","nth","compare","TypeError","pivotValue","random","lower","higher","pivots","groupBy","currentGroup","groupAdjacentBy","items","shouldBeGrouped","forEachAdjacent","forEachWithNeighbors","sortedDiff","delta","before","splices","removed","added","deleteCount","toInsert","topStep","topAsync","batch","token","reject","isCancellationRequested","CancellationError","then","coalesce","coalesceInPlace","move","isFalsyOrEmpty","isNonEmptyArray","distinct","keyFn","seen","uniqueFilter","firstOrDefault","notFoundValue","lastOrDefault","commonPrefixLength","arg","indexer","mapper","reduce","insert","arrayInsert","insertIndex","insertArr","concat","shuffle","_seed","rand","seed","sin","pushToStart","unshift","pushToEnd","pushMany","mapArrayOrNot","asArray","getRandomElement","insertInto","newItems","getActualStartIndex","compareBy","tieBreakComparators","comparators","item1","item2","isNeitherLessOrGreaterThan","neitherLessOrGreaterThan","reverseOrder","arraysFind_1","compareToKey","low","high","mid","comp","pushSplice","latest","beforeIdx","afterIdx","beforeElement","afterElement","findFirstIdxMonotonousOrArrLen","startIdx","originalLength","newItemsLength","isLessThan","isLessThanOrEqual","isGreaterThan","greaterThan","lessThan","firstIdx","lastIdx","takeWhile","predicate","takeFromEndWhile","endIdx","peek","peekLast","dequeue","removeLast","takeCount","empty","_callback","iterate","toArray","cb","mapFn","some","findFirst","findLast","findLastMaxBy","_indexMap","createSortPermutation","compareFn","sortIndices","keys","index1","index2","_","inverseIndexMap","findLastIdx","fromIndex","findLastIdxMonotonous","endIdxEx","MonotonousArray","findLastMonotonous","findFirstMonotonous","findFirstIdxMonotonous","findFirstMax","findLastMax","findFirstMin","findMaxIdx","maxIdx","mapFindFirst","mapped","assertInvariants","_array","_findLastMonotonousLastIdx","_prevFindLastPredicate","AsyncIterableSource","CancelableAsyncIterableObject","AsyncIterableObject","LazyStatefulPromise","StatefulPromise","Promises","DeferredPromise","IntervalCounter","TaskSequentializer","GlobalIdleValue","runWhenGlobalIdle","ThrottledWorker","RunOnceWorker","ProcessTimeRunOnceScheduler","RunOnceScheduler","LimitedQueue","Queue","Limiter","AutoOpenBarrier","Barrier","ThrottledDelayer","Delayer","SequencerByKey","Sequencer","Throttler","isThenable","createCancelablePromise","raceCancellation","promise","defaultValue","ref","onCancellationRequested","finally","raceCancellationError","raceCancellablePromises","cancellablePromises","resolvedPromiseIndex","promises","race","cancellablePromise","raceTimeout","onTimeout","promiseResolve","asPromise","promiseWithResolvers","disposableTimeout","store","deleteAndLeak","sequence","promiseFactories","results","thenHandler","shouldStop","loop","firstParallel","promiseList","todo","finish","catch","err","retry","delay","retries","lastError","createCancelableAsyncIterable","cancellation_1","CancellationTokenSource","innerIterable","emitter","subscription","emitOne","platform_1","symbols_1","lazy_1","thenable","onfinally","res","rej","isDisposed","activePromise","queuedPromise","queuedPromiseFactory","promiseFactory","onComplete","current","promiseTask","promiseMap","newPromise","defaultDelay","deferred","completionPromise","doResolve","doReject","trigger","cancelTimeout","MicrotaskDelay","scheduled","queueMicrotask","isTriggered","microtaskDeferred","handle","timeoutDeferred","delayer","throttler","_isOpen","_promise","_completePromise","isOpen","wait","millis","autoOpenTimeMs","_timeout","maxDegreeOfParalellism","_size","_isDisposed","outstandingPromises","runningPromises","_onDrained","whenIdle","toPromise","onDrained","consume","iLimitedTask","consumed","sequentializer","tasks","isRunning","run","_token","BugIndicatingError","context","timeoutToken","timeoutHandler","isScheduled","schedule","doRun","intervalToken","intervalHandler","onInterval","units","work","unit","pendingWork","disposed","pending","maxBufferedWork","maxWorkChunkSize","doWork","throttleDelay","_targetWindow","setTimeout0","didTimeout","freeze","_didRun","_executor","_value","_error","_handle","isInitialized","taskId","_running","running","cancelRunning","onCancel","doneRunning","runQueued","_queued","queued","promiseReject","hasQueued","DeferredOutcome","AsyncIterableSourceState","nowFn","lastIncrementTime","increment","isRejected","outcome","Rejected","isResolved","Resolved","isSettled","completeCallback","errorCallback","complete","settled","firstError","all","withAsyncBody","bodyFn","_isResolved","requireValue","_compute","Lazy","getPromise","currentValue","rawValue","fromArray","writer","emitMany","fromPromise","fromPromises","merge","iterables","iterable","EMPTY","onReturn","Initial","_results","_onReturn","_onStateChanged","Symbol","asyncIterator","next","DoneError","done","DoneOK","return","filterFn","_source","earlyError","earlyItems","_deferred","_asyncIterable","_errorFn","_emitFn","asyncIterable","CancellationToken","cancelOnDispose","shortcutEvent","isCancellationToken","thing","Cancelled","MutableToken","_isCancelled","_emitter","_parentListener","CharCode","SetWithKey","groupFn","diffSets","diffMaps","intersection","setA","setB","elem","toStringTag","toKey","_map","callbackfn","thisArg","iterator","ErrorNoTelemetry","ExpectedError","NotSupportedError","NotImplementedError","ReadonlyError","errorHandler","ErrorHandler","setUnexpectedErrorHandler","newUnexpectedErrorHandler","isSigPipeError","cast","syscall","isCancellationError","onUnexpectedExternalError","transformErrorForSerialization","$isError","stack","stacktrace","noTelemetry","isErrorNoTelemetry","transformErrorFromSerialization","canceled","canceledName","illegalArgument","illegalState","getErrorMessage","listeners","unexpectedErrorHandler","addListener","_removeListener","emit","getUnexpectedErrorHandler","isExpected","msg","fromError","setPrototypeOf","ValueWithChangeEvent","Relay","EventBufferer","DynamicListEventMultiplexer","EventMultiplexer","MicrotaskEmitter","DebounceEmitter","PauseableEmitter","AsyncEmitter","createEventDeliveryQueue","ListenerRefusalError","ListenerLeakError","EventProfiling","setGlobalLeakWarningThreshold","oldValue","_globalLeakWarningThreshold","functional_1","linkedList_1","stopwatch_1","once","thisArgs","didFire","snapshot","onWillAddFirstListener","onDidRemoveLastListener","debounce","leading","flushOnListenerRemove","leakWarningThreshold","output","doFire","numDebouncedCalls","cur","_output","onWillRemoveListener","defer","each","signal","any","events","initial","accumulate","latch","firstCall","shouldEmit","isT","flushAfterTimeout","_buffer","onDidAddFirstListener","chain","sythensize","cs","ChainableSynthesis","evaluate","HaltChainable","steps","fromNodeEventEmitter","eventName","on","removeListener","fromDOMEventEmitter","EmitterObserver","_observable","_counter","_hasChanged","addObserver","removeObserver","beginUpdate","handlePossibleChange","handleChange","_change","endUpdate","reportChanges","fromObservable","obs","fromObservableLight","observable","didChange","_idPool","listenerCount","invocationCount","elapsedOverall","durations","_stopWatch","StopWatch","elapsed","LeakageMonitor","_errorHandler","_warnCountdown","_stacks","check","topStack","topCount","getMostFrequentStack","Stacktrace","print","UniqueContainer","_leakageMon","onListenerError","_perfMon","_profName","_deliveryQueue","deliveryQueue","_disposed","_listeners","_event","tuple","contained","removeMonitor","EventDeliveryQueuePrivate","adjustDeliveryQueue","_deliver","_deliverQueue","dq","hasListeners","fireAsync","promiseJoin","_asyncDeliveryQueue","LinkedList","forEachListener","thenables","waitUntil","isFrozen","allSettled","status","reason","_isPaused","_eventQueue","_mergeFn","_delay","_queuedEvents","onFirstListenerAdd","onLastListenerRemove","hook","createSingleCallFunction","unhook","onAddItem","onRemoveItem","getEvent","_store","multiplexer","itemListeners","DisposableMap","addItem","deleteAndDispose","wrapEvent","reduceData","reducedResult","bufferEvents","listening","inputEvent","inputEventListener","ConstValueWithChangeEvent","_onDidChange","onDidChange","fnDidRunCallback","_this","didCall","StringSHA1","Hasher","doHash","numberHash","stringHash","toHexString","strings","hashVal","initialHashVal","objectHash","booleanHash","SHA1Constant","leftRotate","bits","totalBits","dest","byteLength","bufferOrValue","bitsize","ArrayBuffer","leftPad","_bigBlock32","DataView","_h0","_h1","_h2","_h3","_h4","_buff","BLOCK_SIZE","_buffDV","_buffLen","_totalLen","_leftoverHighSurrogate","_finished","strLen","buff","buffLen","leftoverHighSurrogate","isHighSurrogate","nextCharCode","isLowSurrogate","computeCodePoint","UNICODE_REPLACEMENT","_push","_step","_wrapUp","ml","setUint32","bigBlock32","getUint32","Iterable","_empty","single","wrap","iterableOrElement","reverse","flatMap","reducer","initialValue","atMost","POSITIVE_INFINITY","asyncToArray","ScanCode","ScanCodeUtils","NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE","KeyChord","firstPart","secondPart","KeyCodeStrMap","_keyCodeToStr","_strToKeyCode","keyCodeToStr","strToKeyCode","uiMap","userSettingsUSMap","userSettingsGeneralMap","scanCodeIntToStr","scanCodeStrToInt","scanCodeLowerCaseStrToInt","lowerCaseToEnum","scanCode","toEnum","toUserSettingsUS","toUserSettingsGeneral","fromUserSettings","toElectronAccelerator","Numpad0","NumpadDivide","UpArrow","DownArrow","LeftArrow","RightArrow","ResolvedKeybinding","ResolvedChord","Keybinding","ScanCodeChord","decodeKeybinding","keybinding","OS","firstChord","secondChord","createSimpleKeybinding","chords","BinaryKeybindingsMask","ctrlCmd","winCtrl","OperatingSystem","Macintosh","getHashCode","isModifierKey","toKeybinding","isDuplicateModifierCase","ControlLeft","ControlRight","ShiftLeft","ShiftRight","AltLeft","AltRight","MetaLeft","MetaRight","keyLabel","keyAriaLabel","hasValue","ImmortalReference","AsyncReferenceCollection","ReferenceCollection","SafeDisposable","RefCountedDisposable","MandatoryMutableDisposable","DisposableTracker","setDisposableTracker","tracker","disposableTracker","trackDisposable","markAsDisposed","markAsSingleton","singleton","isDisposable","disposeIfDisposable","setParent","setParentOfDisposables","disposeOnReturn","arrays_1","collections_1","map_1","iterator_1","livingDisposables","getDisposableData","isSingleton","getRootParent","cacheValue","getTrackedDisposables","rootParentCache","computeLeakingDisposables","maxReported","preComputedLeaks","uncoveredLeakingObjs","leakingObjects","leakingObjsSet","getStackTracePath","leaking","linesToRemove","regexp","removePrefix","stackTraceStarts","SetMap","stackTracePath","stackTraceFormattedLines","prevStarts","continuations","cont","leaks","details","setParentOfDisposable","errors","AggregateError","self","DISABLE_DISPOSED_WARNING","_toDispose","clearAndLeak","_disposable","acquire","release","unset","isset","references","reference","object","createReferencedObject","destroyReferencedObject","referenceCollection","clearAndDisposeAll","skipDisposeOnOverwrite","Undefined","prev","_first","_last","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","anchor","Touch","BidirectionalMap","CounterSet","getOrSet","mapToString","setToString","mapsStrictEqualIgnoreOrder","_m1","_m2","getKey","SlidingWindowAverage","MovingAverage","Counter","rot","modulo","ax","ay","bx","by","cx","cy","v0x","v0y","v1x","v1y","v2x","v2y","dot00","dot01","dot02","dot11","dot12","invDenom","u","_next","getNext","_n","_val","_values","_index","_sum","isEdge","setTimeout0IsFaster","translationsConfigFile","platformLocale","locale","Language","language","isCI","isMobile","webWorkerOrigin","isWebWorker","isWeb","isLinuxSnap","Platform","LANGUAGE_DEFAULT","PlatformToString","Web","Mac","Linux","Windows","isLittleEndian","_isLittleEndianComputed","_isLittleEndian","isBigSurOrNewer","osVersion","_locale","_translationsConfigFile","_userAgent","_isWindows","_isMacintosh","_isLinux","_isLinuxSnap","_isNative","_isWeb","_isElectron","_isIOS","_isCI","_isMobile","_language","_platformLocale","$globalThis","nodeProcess","vscode","versions","isElectronProcess","electron","isElectronRenderer","env","rawNlsConfig","nlsConfig","parse","userLocale","osLocale","resolvedLanguage","languagePack","_VSCODE_NLS_LANGUAGE","_platform","importScripts","isDefaultVariant","isDefault","postMessage","vscodeScheduleAsyncWork","lastId","myId","hasPerformanceNow","performance","highResolution","_now","_startTime","_stopTime","noBreakWhitespace","CodePointIterator","isFalsyOrWhitespace","format","_formatRegexp","group","isNaN","format2","template","_format2Regexp","htmlAttributeEncodeValue","ch","escape","html","escapeRegExpCharacters","substr","truncate","maxLength","suffix","truncateMiddle","prefixLength","suffixLength","haystack","needle","rtrim","ltrim","convertSimple2RegExpPattern","stripWildcards","createRegExp","searchString","isRegex","wholeWord","charAt","global","matchCase","multiline","unicode","RegExp","regExpLeadsToEndlessLoop","lastIndex","splitLines","splitLinesIncludeSeparators","linesWithSeparators","splitLinesAndSeparators","firstNonWhitespaceIndex","chCode","charCode_1","Space","Tab","getLeadingWhitespace","lastNonWhitespaceIndex","startIndex","replaceAsync","search","replacer","parts","matchAll","compareSubstring","compareIgnoreCase","compareSubstringIgnoreCase","isAsciiDigit","Digit0","Digit9","isLowerAsciiLetter","isUpperAsciiLetter","A","Z","equalsIgnoreCase","startsWithIgnoreCase","candidateLength","commonSuffixLength","aLastIndex","bLastIndex","getNextCodePoint","uint_1","needleLen","haystackLen","lastIndexOf","aStart","aEnd","bStart","bEnd","codeA","codeB","aLen","bLen","diff","z","highSurrogate","lowSurrogate","_offset","_str","_len","setOffset","prevCodePoint","prevCharCode","getPrevCodePoint","Constants","UNICODE_SUPPLEMENTARY_PLANE_BEGIN","nextCodePoint","eol","toUint8","MAX_UINT_8","toUint32","MAX_UINT_32","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","WebglAddon","_preserveDrawingBuffer","getSafariVersion","activate","onWillOpen","coreService","unsafeCore","renderService","_renderService","characterJoinerService","charSizeService","decorationService","logService","_logService","setTraceLogger","_renderer","setRenderer","_createRenderer"],"sourceRoot":""}