{"version":3,"file":"static/js/9197_a456e615af23f58f8288.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/margin/margin.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/marginDecorations/marginDecorations.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharSheet.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRenderer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapPreBaked.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimap.js"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\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 *--------------------------------------------------------------------------------------------*/\nimport './margin.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { ViewPart } from '../../view/viewPart.js';\nexport class Margin extends ViewPart {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n const layoutInfo = options.get(145 /* EditorOption.layoutInfo */);\n this._canUseLayerHinting = !options.get(32 /* EditorOption.disableLayerHinting */);\n this._contentLeft = layoutInfo.contentLeft;\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setClassName(Margin.OUTER_CLASS_NAME);\n this._domNode.setPosition('absolute');\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._glyphMarginBackgroundDomNode = createFastDomNode(document.createElement('div'));\n this._glyphMarginBackgroundDomNode.setClassName(Margin.CLASS_NAME);\n this._domNode.appendChild(this._glyphMarginBackgroundDomNode);\n }\n dispose() {\n super.dispose();\n }\n getDomNode() {\n return this._domNode;\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(145 /* EditorOption.layoutInfo */);\n this._canUseLayerHinting = !options.get(32 /* EditorOption.disableLayerHinting */);\n this._contentLeft = layoutInfo.contentLeft;\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n return true;\n }\n onScrollChanged(e) {\n return super.onScrollChanged(e) || e.scrollTopChanged;\n }\n // --- end event handlers\n prepareRender(ctx) {\n // Nothing to read\n }\n render(ctx) {\n this._domNode.setLayerHinting(this._canUseLayerHinting);\n this._domNode.setContain('strict');\n const adjustedScrollTop = ctx.scrollTop - ctx.bigNumbersDelta;\n this._domNode.setTop(-adjustedScrollTop);\n const height = Math.min(ctx.scrollHeight, 1000000);\n this._domNode.setHeight(height);\n this._domNode.setWidth(this._contentLeft);\n this._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft);\n this._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth);\n this._glyphMarginBackgroundDomNode.setHeight(height);\n }\n}\nMargin.CLASS_NAME = 'glyph-margin';\nMargin.OUTER_CLASS_NAME = 'margin';\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 *--------------------------------------------------------------------------------------------*/\nimport './marginDecorations.css';\nimport { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js';\nexport class MarginViewLineDecorationsOverlay extends DedupOverlay {\n constructor(context) {\n super();\n this._context = context;\n this._renderResult = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n return true;\n }\n onDecorationsChanged(e) {\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n _getDecorations(ctx) {\n const decorations = ctx.getDecorationsInViewport();\n const r = [];\n let rLen = 0;\n for (let i = 0, len = decorations.length; i < len; i++) {\n const d = decorations[i];\n const marginClassName = d.options.marginClassName;\n const zIndex = d.options.zIndex;\n if (marginClassName) {\n r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, marginClassName, null, zIndex);\n }\n }\n return r;\n }\n prepareRender(ctx) {\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n const decorations = toRender[lineIndex].getDecorations();\n let lineOutput = '';\n for (const decoration of decorations) {\n lineOutput += '
';\n }\n output[lineIndex] = lineOutput;\n }\n this._renderResult = output;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n return this._renderResult[lineNumber - startLineNumber];\n }\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 *--------------------------------------------------------------------------------------------*/\nexport const allCharCodes = (() => {\n const v = [];\n for (let i = 32 /* Constants.START_CH_CODE */; i <= 126 /* Constants.END_CH_CODE */; i++) {\n v.push(i);\n }\n v.push(65533 /* Constants.UNKNOWN_CODE */);\n return v;\n})();\nexport const getCharIndex = (chCode, fontScale) => {\n chCode -= 32 /* Constants.START_CH_CODE */;\n if (chCode < 0 || chCode > 96 /* Constants.CHAR_COUNT */) {\n if (fontScale <= 2) {\n // for smaller scales, we can get away with using any ASCII character...\n return (chCode + 96 /* Constants.CHAR_COUNT */) % 96 /* Constants.CHAR_COUNT */;\n }\n return 96 /* Constants.CHAR_COUNT */ - 1; // unknown symbol\n }\n return chCode;\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 *--------------------------------------------------------------------------------------------*/\nimport { getCharIndex } from './minimapCharSheet.js';\nimport { toUint8 } from '../../../../base/common/uint.js';\nexport class MinimapCharRenderer {\n constructor(charData, scale) {\n this.scale = scale;\n this._minimapCharRendererBrand = undefined;\n this.charDataNormal = MinimapCharRenderer.soften(charData, 12 / 15);\n this.charDataLight = MinimapCharRenderer.soften(charData, 50 / 60);\n }\n static soften(input, ratio) {\n const result = new Uint8ClampedArray(input.length);\n for (let i = 0, len = input.length; i < len; i++) {\n result[i] = toUint8(input[i] * ratio);\n }\n return result;\n }\n renderChar(target, dx, dy, chCode, color, foregroundAlpha, backgroundColor, backgroundAlpha, fontScale, useLighterFont, force1pxHeight) {\n const charWidth = 1 /* Constants.BASE_CHAR_WIDTH */ * this.scale;\n const charHeight = 2 /* Constants.BASE_CHAR_HEIGHT */ * this.scale;\n const renderHeight = (force1pxHeight ? 1 : charHeight);\n if (dx + charWidth > target.width || dy + renderHeight > target.height) {\n console.warn('bad render request outside image data');\n return;\n }\n const charData = useLighterFont ? this.charDataLight : this.charDataNormal;\n const charIndex = getCharIndex(chCode, fontScale);\n const destWidth = target.width * 4 /* Constants.RGBA_CHANNELS_CNT */;\n const backgroundR = backgroundColor.r;\n const backgroundG = backgroundColor.g;\n const backgroundB = backgroundColor.b;\n const deltaR = color.r - backgroundR;\n const deltaG = color.g - backgroundG;\n const deltaB = color.b - backgroundB;\n const destAlpha = Math.max(foregroundAlpha, backgroundAlpha);\n const dest = target.data;\n let sourceOffset = charIndex * charWidth * charHeight;\n let row = dy * destWidth + dx * 4 /* Constants.RGBA_CHANNELS_CNT */;\n for (let y = 0; y < renderHeight; y++) {\n let column = row;\n for (let x = 0; x < charWidth; x++) {\n const c = (charData[sourceOffset++] / 255) * (foregroundAlpha / 255);\n dest[column++] = backgroundR + deltaR * c;\n dest[column++] = backgroundG + deltaG * c;\n dest[column++] = backgroundB + deltaB * c;\n dest[column++] = destAlpha;\n }\n row += destWidth;\n }\n }\n blockRenderChar(target, dx, dy, color, foregroundAlpha, backgroundColor, backgroundAlpha, force1pxHeight) {\n const charWidth = 1 /* Constants.BASE_CHAR_WIDTH */ * this.scale;\n const charHeight = 2 /* Constants.BASE_CHAR_HEIGHT */ * this.scale;\n const renderHeight = (force1pxHeight ? 1 : charHeight);\n if (dx + charWidth > target.width || dy + renderHeight > target.height) {\n console.warn('bad render request outside image data');\n return;\n }\n const destWidth = target.width * 4 /* Constants.RGBA_CHANNELS_CNT */;\n const c = 0.5 * (foregroundAlpha / 255);\n const backgroundR = backgroundColor.r;\n const backgroundG = backgroundColor.g;\n const backgroundB = backgroundColor.b;\n const deltaR = color.r - backgroundR;\n const deltaG = color.g - backgroundG;\n const deltaB = color.b - backgroundB;\n const colorR = backgroundR + deltaR * c;\n const colorG = backgroundG + deltaG * c;\n const colorB = backgroundB + deltaB * c;\n const destAlpha = Math.max(foregroundAlpha, backgroundAlpha);\n const dest = target.data;\n let row = dy * destWidth + dx * 4 /* Constants.RGBA_CHANNELS_CNT */;\n for (let y = 0; y < renderHeight; y++) {\n let column = row;\n for (let x = 0; x < charWidth; x++) {\n dest[column++] = colorR;\n dest[column++] = colorG;\n dest[column++] = colorB;\n dest[column++] = destAlpha;\n }\n row += destWidth;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createSingleCallFunction } from '../../../../base/common/functional.js';\nconst charTable = {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n A: 10,\n B: 11,\n C: 12,\n D: 13,\n E: 14,\n F: 15\n};\nconst decodeData = (str) => {\n const output = new Uint8ClampedArray(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n output[i >> 1] = (charTable[str[i]] << 4) | (charTable[str[i + 1]] & 0xF);\n }\n return output;\n};\n/*\nconst encodeData = (data: Uint8ClampedArray, length: string) => {\n const chars = '0123456789ABCDEF';\n let output = '';\n for (let i = 0; i < data.length; i++) {\n output += chars[data[i] >> 4] + chars[data[i] & 0xf];\n }\n return output;\n};\n*/\n/**\n * Map of minimap scales to prebaked sample data at those scales. We don't\n * sample much larger data, because then font family becomes visible, which\n * is use-configurable.\n */\nexport const prebakedMiniMaps = {\n 1: createSingleCallFunction(() => decodeData('0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792')),\n 2: createSingleCallFunction(() => decodeData('000000000000000055394F383D2800008B8B1F210002000081B1CBCBCC820000847AAF6B9AAF2119BE08B8881AD60000A44FD07DCCF107015338130C00000000385972265F390B406E2437634B4B48031B12B8A0847000001E15B29A402F0000000000004B33460B00007A752C2A0000000000004D3900000084394B82013400ABA5CFC7AD9C0302A45A3E5A98AB000089A43382D97900008BA54AA087A70A0248A6A7AE6DBE0000BF6F94987EA40A01A06DCFA7A7A9030496C32F77891D0000A99FB1A0AFA80603B29AB9CA75930D010C0948354D3900000C0948354F37460D0028BE673D8400000000AF9D7B6E00002B007AA8933400007AA642675C2700007984CFB9C3985B768772A8A6B7B20000CAAECAAFC4B700009F94A6009F840009D09F9BA4CA9C0000CC8FC76DC87F0000C991C472A2000000A894A48CA7B501079BA2C9C69BA20000B19A5D3FA89000005CA6009DA2960901B0A7F0669FB200009D009E00B7890000DAD0F5D092820000D294D4C48BD10000B5A7A4A3B1A50402CAB6CBA6A2000000B5A7A4A3B1A8044FCDADD19D9CB00000B7778F7B8AAE0803C9AB5D3F5D3F00009EA09EA0BAB006039EA0989A8C7900009B9EF4D6B7C00000A9A7816CACA80000ABAC84705D3F000096DA635CDC8C00006F486F266F263D4784006124097B00374F6D2D6D2D6D4A3A95872322000000030000000000008D8939130000000000002E22A5C9CBC70600AB25C0B5C9B400061A2DB04CA67001082AA6BEBEBFC606002321DACBC19E03087AA08B6768380000282FBAC0B8CA7A88AD25BBA5A29900004C396C5894A6000040485A6E356E9442A32CD17EADA70000B4237923628600003E2DE9C1D7B500002F25BBA5A2990000231DB6AFB4A804023025C0B5CAB588062B2CBDBEC0C706882435A75CA20000002326BD6A82A908048B4B9A5A668000002423A09CB4BB060025259C9D8A7900001C1FCAB2C7C700002A2A9387ABA200002626A4A47D6E9D14333163A0C87500004B6F9C2D643A257049364936493647358A34438355497F1A0000A24C1D590000D38DFFBDD4CD3126'))\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 *--------------------------------------------------------------------------------------------*/\nimport { MinimapCharRenderer } from './minimapCharRenderer.js';\nimport { allCharCodes } from './minimapCharSheet.js';\nimport { prebakedMiniMaps } from './minimapPreBaked.js';\nimport { toUint8 } from '../../../../base/common/uint.js';\n/**\n * Creates character renderers. It takes a 'scale' that determines how large\n * characters should be drawn. Using this, it draws data into a canvas and\n * then downsamples the characters as necessary for the current display.\n * This makes rendering more efficient, rather than drawing a full (tiny)\n * font, or downsampling in real-time.\n */\nexport class MinimapCharRendererFactory {\n /**\n * Creates a new character renderer factory with the given scale.\n */\n static create(scale, fontFamily) {\n // renderers are immutable. By default we'll 'create' a new minimap\n // character renderer whenever we switch editors, no need to do extra work.\n if (this.lastCreated && scale === this.lastCreated.scale && fontFamily === this.lastFontFamily) {\n return this.lastCreated;\n }\n let factory;\n if (prebakedMiniMaps[scale]) {\n factory = new MinimapCharRenderer(prebakedMiniMaps[scale](), scale);\n }\n else {\n factory = MinimapCharRendererFactory.createFromSampleData(MinimapCharRendererFactory.createSampleData(fontFamily).data, scale);\n }\n this.lastFontFamily = fontFamily;\n this.lastCreated = factory;\n return factory;\n }\n /**\n * Creates the font sample data, writing to a canvas.\n */\n static createSampleData(fontFamily) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n canvas.style.height = `${16 /* Constants.SAMPLED_CHAR_HEIGHT */}px`;\n canvas.height = 16 /* Constants.SAMPLED_CHAR_HEIGHT */;\n canvas.width = 96 /* Constants.CHAR_COUNT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */;\n canvas.style.width = 96 /* Constants.CHAR_COUNT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */ + 'px';\n ctx.fillStyle = '#ffffff';\n ctx.font = `bold ${16 /* Constants.SAMPLED_CHAR_HEIGHT */}px ${fontFamily}`;\n ctx.textBaseline = 'middle';\n let x = 0;\n for (const code of allCharCodes) {\n ctx.fillText(String.fromCharCode(code), x, 16 /* Constants.SAMPLED_CHAR_HEIGHT */ / 2);\n x += 10 /* Constants.SAMPLED_CHAR_WIDTH */;\n }\n return ctx.getImageData(0, 0, 96 /* Constants.CHAR_COUNT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */, 16 /* Constants.SAMPLED_CHAR_HEIGHT */);\n }\n /**\n * Creates a character renderer from the canvas sample data.\n */\n static createFromSampleData(source, scale) {\n const expectedLength = 16 /* Constants.SAMPLED_CHAR_HEIGHT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */ * 4 /* Constants.RGBA_CHANNELS_CNT */ * 96 /* Constants.CHAR_COUNT */;\n if (source.length !== expectedLength) {\n throw new Error('Unexpected source in MinimapCharRenderer');\n }\n const charData = MinimapCharRendererFactory._downsample(source, scale);\n return new MinimapCharRenderer(charData, scale);\n }\n static _downsampleChar(source, sourceOffset, dest, destOffset, scale) {\n const width = 1 /* Constants.BASE_CHAR_WIDTH */ * scale;\n const height = 2 /* Constants.BASE_CHAR_HEIGHT */ * scale;\n let targetIndex = destOffset;\n let brightest = 0;\n // This is essentially an ad-hoc rescaling algorithm. Standard approaches\n // like bicubic interpolation are awesome for scaling between image sizes,\n // but don't work so well when scaling to very small pixel values, we end\n // up with blurry, indistinct forms.\n //\n // The approach taken here is simply mapping each source pixel to the target\n // pixels, and taking the weighted values for all pixels in each, and then\n // averaging them out. Finally we apply an intensity boost in _downsample,\n // since when scaling to the smallest pixel sizes there's more black space\n // which causes characters to be much less distinct.\n for (let y = 0; y < height; y++) {\n // 1. For this destination pixel, get the source pixels we're sampling\n // from (x1, y1) to the next pixel (x2, y2)\n const sourceY1 = (y / height) * 16 /* Constants.SAMPLED_CHAR_HEIGHT */;\n const sourceY2 = ((y + 1) / height) * 16 /* Constants.SAMPLED_CHAR_HEIGHT */;\n for (let x = 0; x < width; x++) {\n const sourceX1 = (x / width) * 10 /* Constants.SAMPLED_CHAR_WIDTH */;\n const sourceX2 = ((x + 1) / width) * 10 /* Constants.SAMPLED_CHAR_WIDTH */;\n // 2. Sample all of them, summing them up and weighting them. Similar\n // to bilinear interpolation.\n let value = 0;\n let samples = 0;\n for (let sy = sourceY1; sy < sourceY2; sy++) {\n const sourceRow = sourceOffset + Math.floor(sy) * 3840 /* Constants.RGBA_SAMPLED_ROW_WIDTH */;\n const yBalance = 1 - (sy - Math.floor(sy));\n for (let sx = sourceX1; sx < sourceX2; sx++) {\n const xBalance = 1 - (sx - Math.floor(sx));\n const sourceIndex = sourceRow + Math.floor(sx) * 4 /* Constants.RGBA_CHANNELS_CNT */;\n const weight = xBalance * yBalance;\n samples += weight;\n value += ((source[sourceIndex] * source[sourceIndex + 3]) / 255) * weight;\n }\n }\n const final = value / samples;\n brightest = Math.max(brightest, final);\n dest[targetIndex++] = toUint8(final);\n }\n }\n return brightest;\n }\n static _downsample(data, scale) {\n const pixelsPerCharacter = 2 /* Constants.BASE_CHAR_HEIGHT */ * scale * 1 /* Constants.BASE_CHAR_WIDTH */ * scale;\n const resultLen = pixelsPerCharacter * 96 /* Constants.CHAR_COUNT */;\n const result = new Uint8ClampedArray(resultLen);\n let resultOffset = 0;\n let sourceOffset = 0;\n let brightest = 0;\n for (let charIndex = 0; charIndex < 96 /* Constants.CHAR_COUNT */; charIndex++) {\n brightest = Math.max(brightest, this._downsampleChar(data, sourceOffset, result, resultOffset, scale));\n resultOffset += pixelsPerCharacter;\n sourceOffset += 10 /* Constants.SAMPLED_CHAR_WIDTH */ * 4 /* Constants.RGBA_CHANNELS_CNT */;\n }\n if (brightest > 0) {\n const adjust = 255 / brightest;\n for (let i = 0; i < resultLen; i++) {\n result[i] *= adjust;\n }\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './minimap.css';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { GlobalPointerMoveMonitor } from '../../../../base/browser/globalPointerMoveMonitor.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { RenderedLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { MINIMAP_GUTTER_WIDTH, EditorLayoutInfoComputer } from '../../../common/config/editorOptions.js';\nimport { Range } from '../../../common/core/range.js';\nimport { RGBA8 } from '../../../common/core/rgba.js';\nimport { MinimapTokensColorTracker } from '../../../common/viewModel/minimapTokensColorTracker.js';\nimport { ViewModelDecoration } from '../../../common/viewModel.js';\nimport { minimapSelection, minimapBackground, minimapForegroundOpacity, editorForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EventType, Gesture } from '../../../../base/browser/touch.js';\nimport { MinimapCharRendererFactory } from './minimapCharRendererFactory.js';\nimport { createSingleCallFunction } from '../../../../base/common/functional.js';\nimport { LRUCache } from '../../../../base/common/map.js';\nimport { DEFAULT_FONT_FAMILY } from '../../../../base/browser/fonts.js';\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\nconst GUTTER_DECORATION_WIDTH = 2;\nclass MinimapOptions {\n constructor(configuration, theme, tokensColorTracker) {\n const options = configuration.options;\n const pixelRatio = options.get(143 /* EditorOption.pixelRatio */);\n const layoutInfo = options.get(145 /* EditorOption.layoutInfo */);\n const minimapLayout = layoutInfo.minimap;\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n const minimapOpts = options.get(73 /* EditorOption.minimap */);\n this.renderMinimap = minimapLayout.renderMinimap;\n this.size = minimapOpts.size;\n this.minimapHeightIsEditorHeight = minimapLayout.minimapHeightIsEditorHeight;\n this.scrollBeyondLastLine = options.get(105 /* EditorOption.scrollBeyondLastLine */);\n this.paddingTop = options.get(84 /* EditorOption.padding */).top;\n this.paddingBottom = options.get(84 /* EditorOption.padding */).bottom;\n this.showSlider = minimapOpts.showSlider;\n this.autohide = minimapOpts.autohide;\n this.pixelRatio = pixelRatio;\n this.typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this.lineHeight = options.get(67 /* EditorOption.lineHeight */);\n this.minimapLeft = minimapLayout.minimapLeft;\n this.minimapWidth = minimapLayout.minimapWidth;\n this.minimapHeight = layoutInfo.height;\n this.canvasInnerWidth = minimapLayout.minimapCanvasInnerWidth;\n this.canvasInnerHeight = minimapLayout.minimapCanvasInnerHeight;\n this.canvasOuterWidth = minimapLayout.minimapCanvasOuterWidth;\n this.canvasOuterHeight = minimapLayout.minimapCanvasOuterHeight;\n this.isSampling = minimapLayout.minimapIsSampling;\n this.editorHeight = layoutInfo.height;\n this.fontScale = minimapLayout.minimapScale;\n this.minimapLineHeight = minimapLayout.minimapLineHeight;\n this.minimapCharWidth = 1 /* Constants.BASE_CHAR_WIDTH */ * this.fontScale;\n this.sectionHeaderFontFamily = DEFAULT_FONT_FAMILY;\n this.sectionHeaderFontSize = minimapOpts.sectionHeaderFontSize * pixelRatio;\n this.sectionHeaderLetterSpacing = minimapOpts.sectionHeaderLetterSpacing; // intentionally not multiplying by pixelRatio\n this.sectionHeaderFontColor = MinimapOptions._getSectionHeaderColor(theme, tokensColorTracker.getColor(1 /* ColorId.DefaultForeground */));\n this.charRenderer = createSingleCallFunction(() => MinimapCharRendererFactory.create(this.fontScale, fontInfo.fontFamily));\n this.defaultBackgroundColor = tokensColorTracker.getColor(2 /* ColorId.DefaultBackground */);\n this.backgroundColor = MinimapOptions._getMinimapBackground(theme, this.defaultBackgroundColor);\n this.foregroundAlpha = MinimapOptions._getMinimapForegroundOpacity(theme);\n }\n static _getMinimapBackground(theme, defaultBackgroundColor) {\n const themeColor = theme.getColor(minimapBackground);\n if (themeColor) {\n return new RGBA8(themeColor.rgba.r, themeColor.rgba.g, themeColor.rgba.b, Math.round(255 * themeColor.rgba.a));\n }\n return defaultBackgroundColor;\n }\n static _getMinimapForegroundOpacity(theme) {\n const themeColor = theme.getColor(minimapForegroundOpacity);\n if (themeColor) {\n return RGBA8._clamp(Math.round(255 * themeColor.rgba.a));\n }\n return 255;\n }\n static _getSectionHeaderColor(theme, defaultForegroundColor) {\n const themeColor = theme.getColor(editorForeground);\n if (themeColor) {\n return new RGBA8(themeColor.rgba.r, themeColor.rgba.g, themeColor.rgba.b, Math.round(255 * themeColor.rgba.a));\n }\n return defaultForegroundColor;\n }\n equals(other) {\n return (this.renderMinimap === other.renderMinimap\n && this.size === other.size\n && this.minimapHeightIsEditorHeight === other.minimapHeightIsEditorHeight\n && this.scrollBeyondLastLine === other.scrollBeyondLastLine\n && this.paddingTop === other.paddingTop\n && this.paddingBottom === other.paddingBottom\n && this.showSlider === other.showSlider\n && this.autohide === other.autohide\n && this.pixelRatio === other.pixelRatio\n && this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth\n && this.lineHeight === other.lineHeight\n && this.minimapLeft === other.minimapLeft\n && this.minimapWidth === other.minimapWidth\n && this.minimapHeight === other.minimapHeight\n && this.canvasInnerWidth === other.canvasInnerWidth\n && this.canvasInnerHeight === other.canvasInnerHeight\n && this.canvasOuterWidth === other.canvasOuterWidth\n && this.canvasOuterHeight === other.canvasOuterHeight\n && this.isSampling === other.isSampling\n && this.editorHeight === other.editorHeight\n && this.fontScale === other.fontScale\n && this.minimapLineHeight === other.minimapLineHeight\n && this.minimapCharWidth === other.minimapCharWidth\n && this.sectionHeaderFontSize === other.sectionHeaderFontSize\n && this.sectionHeaderLetterSpacing === other.sectionHeaderLetterSpacing\n && this.defaultBackgroundColor && this.defaultBackgroundColor.equals(other.defaultBackgroundColor)\n && this.backgroundColor && this.backgroundColor.equals(other.backgroundColor)\n && this.foregroundAlpha === other.foregroundAlpha);\n }\n}\nclass MinimapLayout {\n constructor(\n /**\n * The given editor scrollTop (input).\n */\n scrollTop, \n /**\n * The given editor scrollHeight (input).\n */\n scrollHeight, sliderNeeded, _computedSliderRatio, \n /**\n * slider dom node top (in CSS px)\n */\n sliderTop, \n /**\n * slider dom node height (in CSS px)\n */\n sliderHeight, \n /**\n * empty lines to reserve at the top of the minimap.\n */\n topPaddingLineCount, \n /**\n * minimap render start line number.\n */\n startLineNumber, \n /**\n * minimap render end line number.\n */\n endLineNumber) {\n this.scrollTop = scrollTop;\n this.scrollHeight = scrollHeight;\n this.sliderNeeded = sliderNeeded;\n this._computedSliderRatio = _computedSliderRatio;\n this.sliderTop = sliderTop;\n this.sliderHeight = sliderHeight;\n this.topPaddingLineCount = topPaddingLineCount;\n this.startLineNumber = startLineNumber;\n this.endLineNumber = endLineNumber;\n }\n /**\n * Compute a desired `scrollPosition` such that the slider moves by `delta`.\n */\n getDesiredScrollTopFromDelta(delta) {\n return Math.round(this.scrollTop + delta / this._computedSliderRatio);\n }\n getDesiredScrollTopFromTouchLocation(pageY) {\n return Math.round((pageY - this.sliderHeight / 2) / this._computedSliderRatio);\n }\n /**\n * Intersect a line range with `this.startLineNumber` and `this.endLineNumber`.\n */\n intersectWithViewport(range) {\n const startLineNumber = Math.max(this.startLineNumber, range.startLineNumber);\n const endLineNumber = Math.min(this.endLineNumber, range.endLineNumber);\n if (startLineNumber > endLineNumber) {\n // entirely outside minimap's viewport\n return null;\n }\n return [startLineNumber, endLineNumber];\n }\n /**\n * Get the inner minimap y coordinate for a line number.\n */\n getYForLineNumber(lineNumber, minimapLineHeight) {\n return +(lineNumber - this.startLineNumber + this.topPaddingLineCount) * minimapLineHeight;\n }\n static create(options, viewportStartLineNumber, viewportEndLineNumber, viewportStartLineNumberVerticalOffset, viewportHeight, viewportContainsWhitespaceGaps, lineCount, realLineCount, scrollTop, scrollHeight, previousLayout) {\n const pixelRatio = options.pixelRatio;\n const minimapLineHeight = options.minimapLineHeight;\n const minimapLinesFitting = Math.floor(options.canvasInnerHeight / minimapLineHeight);\n const lineHeight = options.lineHeight;\n if (options.minimapHeightIsEditorHeight) {\n let logicalScrollHeight = (realLineCount * options.lineHeight\n + options.paddingTop\n + options.paddingBottom);\n if (options.scrollBeyondLastLine) {\n logicalScrollHeight += Math.max(0, viewportHeight - options.lineHeight - options.paddingBottom);\n }\n const sliderHeight = Math.max(1, Math.floor(viewportHeight * viewportHeight / logicalScrollHeight));\n const maxMinimapSliderTop = Math.max(0, options.minimapHeight - sliderHeight);\n // The slider can move from 0 to `maxMinimapSliderTop`\n // in the same way `scrollTop` can move from 0 to `scrollHeight` - `viewportHeight`.\n const computedSliderRatio = (maxMinimapSliderTop) / (scrollHeight - viewportHeight);\n const sliderTop = (scrollTop * computedSliderRatio);\n const sliderNeeded = (maxMinimapSliderTop > 0);\n const maxLinesFitting = Math.floor(options.canvasInnerHeight / options.minimapLineHeight);\n const topPaddingLineCount = Math.floor(options.paddingTop / options.lineHeight);\n return new MinimapLayout(scrollTop, scrollHeight, sliderNeeded, computedSliderRatio, sliderTop, sliderHeight, topPaddingLineCount, 1, Math.min(lineCount, maxLinesFitting));\n }\n // The visible line count in a viewport can change due to a number of reasons:\n // a) with the same viewport width, different scroll positions can result in partial lines being visible:\n // e.g. for a line height of 20, and a viewport height of 600\n // * scrollTop = 0 => visible lines are [1, 30]\n // * scrollTop = 10 => visible lines are [1, 31] (with lines 1 and 31 partially visible)\n // * scrollTop = 20 => visible lines are [2, 31]\n // b) whitespace gaps might make their way in the viewport (which results in a decrease in the visible line count)\n // c) we could be in the scroll beyond last line case (which also results in a decrease in the visible line count, down to possibly only one line being visible)\n // We must first establish a desirable slider height.\n let sliderHeight;\n if (viewportContainsWhitespaceGaps && viewportEndLineNumber !== lineCount) {\n // case b) from above: there are whitespace gaps in the viewport.\n // In this case, the height of the slider directly reflects the visible line count.\n const viewportLineCount = viewportEndLineNumber - viewportStartLineNumber + 1;\n sliderHeight = Math.floor(viewportLineCount * minimapLineHeight / pixelRatio);\n }\n else {\n // The slider has a stable height\n const expectedViewportLineCount = viewportHeight / lineHeight;\n sliderHeight = Math.floor(expectedViewportLineCount * minimapLineHeight / pixelRatio);\n }\n const extraLinesAtTheTop = Math.floor(options.paddingTop / lineHeight);\n let extraLinesAtTheBottom = Math.floor(options.paddingBottom / lineHeight);\n if (options.scrollBeyondLastLine) {\n const expectedViewportLineCount = viewportHeight / lineHeight;\n extraLinesAtTheBottom = Math.max(extraLinesAtTheBottom, expectedViewportLineCount - 1);\n }\n let maxMinimapSliderTop;\n if (extraLinesAtTheBottom > 0) {\n const expectedViewportLineCount = viewportHeight / lineHeight;\n // The minimap slider, when dragged all the way down, will contain the last line at its top\n maxMinimapSliderTop = (extraLinesAtTheTop + lineCount + extraLinesAtTheBottom - expectedViewportLineCount - 1) * minimapLineHeight / pixelRatio;\n }\n else {\n // The minimap slider, when dragged all the way down, will contain the last line at its bottom\n maxMinimapSliderTop = Math.max(0, (extraLinesAtTheTop + lineCount) * minimapLineHeight / pixelRatio - sliderHeight);\n }\n maxMinimapSliderTop = Math.min(options.minimapHeight - sliderHeight, maxMinimapSliderTop);\n // The slider can move from 0 to `maxMinimapSliderTop`\n // in the same way `scrollTop` can move from 0 to `scrollHeight` - `viewportHeight`.\n const computedSliderRatio = (maxMinimapSliderTop) / (scrollHeight - viewportHeight);\n const sliderTop = (scrollTop * computedSliderRatio);\n if (minimapLinesFitting >= extraLinesAtTheTop + lineCount + extraLinesAtTheBottom) {\n // All lines fit in the minimap\n const sliderNeeded = (maxMinimapSliderTop > 0);\n return new MinimapLayout(scrollTop, scrollHeight, sliderNeeded, computedSliderRatio, sliderTop, sliderHeight, extraLinesAtTheTop, 1, lineCount);\n }\n else {\n let consideringStartLineNumber;\n if (viewportStartLineNumber > 1) {\n consideringStartLineNumber = viewportStartLineNumber + extraLinesAtTheTop;\n }\n else {\n consideringStartLineNumber = Math.max(1, scrollTop / lineHeight);\n }\n let topPaddingLineCount;\n let startLineNumber = Math.max(1, Math.floor(consideringStartLineNumber - sliderTop * pixelRatio / minimapLineHeight));\n if (startLineNumber < extraLinesAtTheTop) {\n topPaddingLineCount = extraLinesAtTheTop - startLineNumber + 1;\n startLineNumber = 1;\n }\n else {\n topPaddingLineCount = 0;\n startLineNumber = Math.max(1, startLineNumber - extraLinesAtTheTop);\n }\n // Avoid flickering caused by a partial viewport start line\n // by being consistent w.r.t. the previous layout decision\n if (previousLayout && previousLayout.scrollHeight === scrollHeight) {\n if (previousLayout.scrollTop > scrollTop) {\n // Scrolling up => never increase `startLineNumber`\n startLineNumber = Math.min(startLineNumber, previousLayout.startLineNumber);\n topPaddingLineCount = Math.max(topPaddingLineCount, previousLayout.topPaddingLineCount);\n }\n if (previousLayout.scrollTop < scrollTop) {\n // Scrolling down => never decrease `startLineNumber`\n startLineNumber = Math.max(startLineNumber, previousLayout.startLineNumber);\n topPaddingLineCount = Math.min(topPaddingLineCount, previousLayout.topPaddingLineCount);\n }\n }\n const endLineNumber = Math.min(lineCount, startLineNumber - topPaddingLineCount + minimapLinesFitting - 1);\n const partialLine = (scrollTop - viewportStartLineNumberVerticalOffset) / lineHeight;\n let sliderTopAligned;\n if (scrollTop >= options.paddingTop) {\n sliderTopAligned = (viewportStartLineNumber - startLineNumber + topPaddingLineCount + partialLine) * minimapLineHeight / pixelRatio;\n }\n else {\n sliderTopAligned = (scrollTop / options.paddingTop) * (topPaddingLineCount + partialLine) * minimapLineHeight / pixelRatio;\n }\n return new MinimapLayout(scrollTop, scrollHeight, true, computedSliderRatio, sliderTopAligned, sliderHeight, topPaddingLineCount, startLineNumber, endLineNumber);\n }\n }\n}\nclass MinimapLine {\n constructor(dy) {\n this.dy = dy;\n }\n onContentChanged() {\n this.dy = -1;\n }\n onTokensChanged() {\n this.dy = -1;\n }\n}\nMinimapLine.INVALID = new MinimapLine(-1);\nclass RenderData {\n constructor(renderedLayout, imageData, lines) {\n this.renderedLayout = renderedLayout;\n this._imageData = imageData;\n this._renderedLines = new RenderedLinesCollection(() => MinimapLine.INVALID);\n this._renderedLines._set(renderedLayout.startLineNumber, lines);\n }\n /**\n * Check if the current RenderData matches accurately the new desired layout and no painting is needed.\n */\n linesEquals(layout) {\n if (!this.scrollEquals(layout)) {\n return false;\n }\n const tmp = this._renderedLines._get();\n const lines = tmp.lines;\n for (let i = 0, len = lines.length; i < len; i++) {\n if (lines[i].dy === -1) {\n // This line is invalid\n return false;\n }\n }\n return true;\n }\n /**\n * Check if the current RenderData matches the new layout's scroll position\n */\n scrollEquals(layout) {\n return this.renderedLayout.startLineNumber === layout.startLineNumber\n && this.renderedLayout.endLineNumber === layout.endLineNumber;\n }\n _get() {\n const tmp = this._renderedLines._get();\n return {\n imageData: this._imageData,\n rendLineNumberStart: tmp.rendLineNumberStart,\n lines: tmp.lines\n };\n }\n onLinesChanged(changeFromLineNumber, changeCount) {\n return this._renderedLines.onLinesChanged(changeFromLineNumber, changeCount);\n }\n onLinesDeleted(deleteFromLineNumber, deleteToLineNumber) {\n this._renderedLines.onLinesDeleted(deleteFromLineNumber, deleteToLineNumber);\n }\n onLinesInserted(insertFromLineNumber, insertToLineNumber) {\n this._renderedLines.onLinesInserted(insertFromLineNumber, insertToLineNumber);\n }\n onTokensChanged(ranges) {\n return this._renderedLines.onTokensChanged(ranges);\n }\n}\n/**\n * Some sort of double buffering.\n *\n * Keeps two buffers around that will be rotated for painting.\n * Always gives a buffer that is filled with the background color.\n */\nclass MinimapBuffers {\n constructor(ctx, WIDTH, HEIGHT, background) {\n this._backgroundFillData = MinimapBuffers._createBackgroundFillData(WIDTH, HEIGHT, background);\n this._buffers = [\n ctx.createImageData(WIDTH, HEIGHT),\n ctx.createImageData(WIDTH, HEIGHT)\n ];\n this._lastUsedBuffer = 0;\n }\n getBuffer() {\n // rotate buffers\n this._lastUsedBuffer = 1 - this._lastUsedBuffer;\n const result = this._buffers[this._lastUsedBuffer];\n // fill with background color\n result.data.set(this._backgroundFillData);\n return result;\n }\n static _createBackgroundFillData(WIDTH, HEIGHT, background) {\n const backgroundR = background.r;\n const backgroundG = background.g;\n const backgroundB = background.b;\n const backgroundA = background.a;\n const result = new Uint8ClampedArray(WIDTH * HEIGHT * 4);\n let offset = 0;\n for (let i = 0; i < HEIGHT; i++) {\n for (let j = 0; j < WIDTH; j++) {\n result[offset] = backgroundR;\n result[offset + 1] = backgroundG;\n result[offset + 2] = backgroundB;\n result[offset + 3] = backgroundA;\n offset += 4;\n }\n }\n return result;\n }\n}\nclass MinimapSamplingState {\n static compute(options, viewLineCount, oldSamplingState) {\n if (options.renderMinimap === 0 /* RenderMinimap.None */ || !options.isSampling) {\n return [null, []];\n }\n // ratio is intentionally not part of the layout to avoid the layout changing all the time\n // so we need to recompute it again...\n const { minimapLineCount } = EditorLayoutInfoComputer.computeContainedMinimapLineCount({\n viewLineCount: viewLineCount,\n scrollBeyondLastLine: options.scrollBeyondLastLine,\n paddingTop: options.paddingTop,\n paddingBottom: options.paddingBottom,\n height: options.editorHeight,\n lineHeight: options.lineHeight,\n pixelRatio: options.pixelRatio\n });\n const ratio = viewLineCount / minimapLineCount;\n const halfRatio = ratio / 2;\n if (!oldSamplingState || oldSamplingState.minimapLines.length === 0) {\n const result = [];\n result[0] = 1;\n if (minimapLineCount > 1) {\n for (let i = 0, lastIndex = minimapLineCount - 1; i < lastIndex; i++) {\n result[i] = Math.round(i * ratio + halfRatio);\n }\n result[minimapLineCount - 1] = viewLineCount;\n }\n return [new MinimapSamplingState(ratio, result), []];\n }\n const oldMinimapLines = oldSamplingState.minimapLines;\n const oldLength = oldMinimapLines.length;\n const result = [];\n let oldIndex = 0;\n let oldDeltaLineCount = 0;\n let minViewLineNumber = 1;\n const MAX_EVENT_COUNT = 10; // generate at most 10 events, if there are more than 10 changes, just flush all previous data\n let events = [];\n let lastEvent = null;\n for (let i = 0; i < minimapLineCount; i++) {\n const fromViewLineNumber = Math.max(minViewLineNumber, Math.round(i * ratio));\n const toViewLineNumber = Math.max(fromViewLineNumber, Math.round((i + 1) * ratio));\n while (oldIndex < oldLength && oldMinimapLines[oldIndex] < fromViewLineNumber) {\n if (events.length < MAX_EVENT_COUNT) {\n const oldMinimapLineNumber = oldIndex + 1 + oldDeltaLineCount;\n if (lastEvent && lastEvent.type === 'deleted' && lastEvent._oldIndex === oldIndex - 1) {\n lastEvent.deleteToLineNumber++;\n }\n else {\n lastEvent = { type: 'deleted', _oldIndex: oldIndex, deleteFromLineNumber: oldMinimapLineNumber, deleteToLineNumber: oldMinimapLineNumber };\n events.push(lastEvent);\n }\n oldDeltaLineCount--;\n }\n oldIndex++;\n }\n let selectedViewLineNumber;\n if (oldIndex < oldLength && oldMinimapLines[oldIndex] <= toViewLineNumber) {\n // reuse the old sampled line\n selectedViewLineNumber = oldMinimapLines[oldIndex];\n oldIndex++;\n }\n else {\n if (i === 0) {\n selectedViewLineNumber = 1;\n }\n else if (i + 1 === minimapLineCount) {\n selectedViewLineNumber = viewLineCount;\n }\n else {\n selectedViewLineNumber = Math.round(i * ratio + halfRatio);\n }\n if (events.length < MAX_EVENT_COUNT) {\n const oldMinimapLineNumber = oldIndex + 1 + oldDeltaLineCount;\n if (lastEvent && lastEvent.type === 'inserted' && lastEvent._i === i - 1) {\n lastEvent.insertToLineNumber++;\n }\n else {\n lastEvent = { type: 'inserted', _i: i, insertFromLineNumber: oldMinimapLineNumber, insertToLineNumber: oldMinimapLineNumber };\n events.push(lastEvent);\n }\n oldDeltaLineCount++;\n }\n }\n result[i] = selectedViewLineNumber;\n minViewLineNumber = selectedViewLineNumber;\n }\n if (events.length < MAX_EVENT_COUNT) {\n while (oldIndex < oldLength) {\n const oldMinimapLineNumber = oldIndex + 1 + oldDeltaLineCount;\n if (lastEvent && lastEvent.type === 'deleted' && lastEvent._oldIndex === oldIndex - 1) {\n lastEvent.deleteToLineNumber++;\n }\n else {\n lastEvent = { type: 'deleted', _oldIndex: oldIndex, deleteFromLineNumber: oldMinimapLineNumber, deleteToLineNumber: oldMinimapLineNumber };\n events.push(lastEvent);\n }\n oldDeltaLineCount--;\n oldIndex++;\n }\n }\n else {\n // too many events, just give up\n events = [{ type: 'flush' }];\n }\n return [new MinimapSamplingState(ratio, result), events];\n }\n constructor(samplingRatio, minimapLines // a map of 0-based minimap line indexes to 1-based view line numbers\n ) {\n this.samplingRatio = samplingRatio;\n this.minimapLines = minimapLines;\n }\n modelLineToMinimapLine(lineNumber) {\n return Math.min(this.minimapLines.length, Math.max(1, Math.round(lineNumber / this.samplingRatio)));\n }\n /**\n * Will return null if the model line ranges are not intersecting with a sampled model line.\n */\n modelLineRangeToMinimapLineRange(fromLineNumber, toLineNumber) {\n let fromLineIndex = this.modelLineToMinimapLine(fromLineNumber) - 1;\n while (fromLineIndex > 0 && this.minimapLines[fromLineIndex - 1] >= fromLineNumber) {\n fromLineIndex--;\n }\n let toLineIndex = this.modelLineToMinimapLine(toLineNumber) - 1;\n while (toLineIndex + 1 < this.minimapLines.length && this.minimapLines[toLineIndex + 1] <= toLineNumber) {\n toLineIndex++;\n }\n if (fromLineIndex === toLineIndex) {\n const sampledLineNumber = this.minimapLines[fromLineIndex];\n if (sampledLineNumber < fromLineNumber || sampledLineNumber > toLineNumber) {\n // This line is not part of the sampled lines ==> nothing to do\n return null;\n }\n }\n return [fromLineIndex + 1, toLineIndex + 1];\n }\n /**\n * Will always return a range, even if it is not intersecting with a sampled model line.\n */\n decorationLineRangeToMinimapLineRange(startLineNumber, endLineNumber) {\n let minimapLineStart = this.modelLineToMinimapLine(startLineNumber);\n let minimapLineEnd = this.modelLineToMinimapLine(endLineNumber);\n if (startLineNumber !== endLineNumber && minimapLineEnd === minimapLineStart) {\n if (minimapLineEnd === this.minimapLines.length) {\n if (minimapLineStart > 1) {\n minimapLineStart--;\n }\n }\n else {\n minimapLineEnd++;\n }\n }\n return [minimapLineStart, minimapLineEnd];\n }\n onLinesDeleted(e) {\n // have the mapping be sticky\n const deletedLineCount = e.toLineNumber - e.fromLineNumber + 1;\n let changeStartIndex = this.minimapLines.length;\n let changeEndIndex = 0;\n for (let i = this.minimapLines.length - 1; i >= 0; i--) {\n if (this.minimapLines[i] < e.fromLineNumber) {\n break;\n }\n if (this.minimapLines[i] <= e.toLineNumber) {\n // this line got deleted => move to previous available\n this.minimapLines[i] = Math.max(1, e.fromLineNumber - 1);\n changeStartIndex = Math.min(changeStartIndex, i);\n changeEndIndex = Math.max(changeEndIndex, i);\n }\n else {\n this.minimapLines[i] -= deletedLineCount;\n }\n }\n return [changeStartIndex, changeEndIndex];\n }\n onLinesInserted(e) {\n // have the mapping be sticky\n const insertedLineCount = e.toLineNumber - e.fromLineNumber + 1;\n for (let i = this.minimapLines.length - 1; i >= 0; i--) {\n if (this.minimapLines[i] < e.fromLineNumber) {\n break;\n }\n this.minimapLines[i] += insertedLineCount;\n }\n }\n}\nexport class Minimap extends ViewPart {\n constructor(context) {\n super(context);\n this._sectionHeaderCache = new LRUCache(10, 1.5);\n this.tokensColorTracker = MinimapTokensColorTracker.getInstance();\n this._selections = [];\n this._minimapSelections = null;\n this.options = new MinimapOptions(this._context.configuration, this._context.theme, this.tokensColorTracker);\n const [samplingState,] = MinimapSamplingState.compute(this.options, this._context.viewModel.getLineCount(), null);\n this._samplingState = samplingState;\n this._shouldCheckSampling = false;\n this._actual = new InnerMinimap(context.theme, this);\n }\n dispose() {\n this._actual.dispose();\n super.dispose();\n }\n getDomNode() {\n return this._actual.getDomNode();\n }\n _onOptionsMaybeChanged() {\n const opts = new MinimapOptions(this._context.configuration, this._context.theme, this.tokensColorTracker);\n if (this.options.equals(opts)) {\n return false;\n }\n this.options = opts;\n this._recreateLineSampling();\n this._actual.onDidChangeOptions();\n return true;\n }\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n return this._onOptionsMaybeChanged();\n }\n onCursorStateChanged(e) {\n this._selections = e.selections;\n this._minimapSelections = null;\n return this._actual.onSelectionChanged();\n }\n onDecorationsChanged(e) {\n if (e.affectsMinimap) {\n return this._actual.onDecorationsChanged();\n }\n return false;\n }\n onFlushed(e) {\n if (this._samplingState) {\n this._shouldCheckSampling = true;\n }\n return this._actual.onFlushed();\n }\n onLinesChanged(e) {\n if (this._samplingState) {\n const minimapLineRange = this._samplingState.modelLineRangeToMinimapLineRange(e.fromLineNumber, e.fromLineNumber + e.count - 1);\n if (minimapLineRange) {\n return this._actual.onLinesChanged(minimapLineRange[0], minimapLineRange[1] - minimapLineRange[0] + 1);\n }\n else {\n return false;\n }\n }\n else {\n return this._actual.onLinesChanged(e.fromLineNumber, e.count);\n }\n }\n onLinesDeleted(e) {\n if (this._samplingState) {\n const [changeStartIndex, changeEndIndex] = this._samplingState.onLinesDeleted(e);\n if (changeStartIndex <= changeEndIndex) {\n this._actual.onLinesChanged(changeStartIndex + 1, changeEndIndex - changeStartIndex + 1);\n }\n this._shouldCheckSampling = true;\n return true;\n }\n else {\n return this._actual.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n }\n }\n onLinesInserted(e) {\n if (this._samplingState) {\n this._samplingState.onLinesInserted(e);\n this._shouldCheckSampling = true;\n return true;\n }\n else {\n return this._actual.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n }\n }\n onScrollChanged(e) {\n return this._actual.onScrollChanged();\n }\n onThemeChanged(e) {\n this._actual.onThemeChanged();\n this._onOptionsMaybeChanged();\n return true;\n }\n onTokensChanged(e) {\n if (this._samplingState) {\n const ranges = [];\n for (const range of e.ranges) {\n const minimapLineRange = this._samplingState.modelLineRangeToMinimapLineRange(range.fromLineNumber, range.toLineNumber);\n if (minimapLineRange) {\n ranges.push({ fromLineNumber: minimapLineRange[0], toLineNumber: minimapLineRange[1] });\n }\n }\n if (ranges.length) {\n return this._actual.onTokensChanged(ranges);\n }\n else {\n return false;\n }\n }\n else {\n return this._actual.onTokensChanged(e.ranges);\n }\n }\n onTokensColorsChanged(e) {\n this._onOptionsMaybeChanged();\n return this._actual.onTokensColorsChanged();\n }\n onZonesChanged(e) {\n return this._actual.onZonesChanged();\n }\n // --- end event handlers\n prepareRender(ctx) {\n if (this._shouldCheckSampling) {\n this._shouldCheckSampling = false;\n this._recreateLineSampling();\n }\n }\n render(ctx) {\n let viewportStartLineNumber = ctx.visibleRange.startLineNumber;\n let viewportEndLineNumber = ctx.visibleRange.endLineNumber;\n if (this._samplingState) {\n viewportStartLineNumber = this._samplingState.modelLineToMinimapLine(viewportStartLineNumber);\n viewportEndLineNumber = this._samplingState.modelLineToMinimapLine(viewportEndLineNumber);\n }\n const minimapCtx = {\n viewportContainsWhitespaceGaps: (ctx.viewportData.whitespaceViewportData.length > 0),\n scrollWidth: ctx.scrollWidth,\n scrollHeight: ctx.scrollHeight,\n viewportStartLineNumber: viewportStartLineNumber,\n viewportEndLineNumber: viewportEndLineNumber,\n viewportStartLineNumberVerticalOffset: ctx.getVerticalOffsetForLineNumber(viewportStartLineNumber),\n scrollTop: ctx.scrollTop,\n scrollLeft: ctx.scrollLeft,\n viewportWidth: ctx.viewportWidth,\n viewportHeight: ctx.viewportHeight,\n };\n this._actual.render(minimapCtx);\n }\n //#region IMinimapModel\n _recreateLineSampling() {\n this._minimapSelections = null;\n const wasSampling = Boolean(this._samplingState);\n const [samplingState, events] = MinimapSamplingState.compute(this.options, this._context.viewModel.getLineCount(), this._samplingState);\n this._samplingState = samplingState;\n if (wasSampling && this._samplingState) {\n // was sampling, is sampling\n for (const event of events) {\n switch (event.type) {\n case 'deleted':\n this._actual.onLinesDeleted(event.deleteFromLineNumber, event.deleteToLineNumber);\n break;\n case 'inserted':\n this._actual.onLinesInserted(event.insertFromLineNumber, event.insertToLineNumber);\n break;\n case 'flush':\n this._actual.onFlushed();\n break;\n }\n }\n }\n }\n getLineCount() {\n if (this._samplingState) {\n return this._samplingState.minimapLines.length;\n }\n return this._context.viewModel.getLineCount();\n }\n getRealLineCount() {\n return this._context.viewModel.getLineCount();\n }\n getLineContent(lineNumber) {\n if (this._samplingState) {\n return this._context.viewModel.getLineContent(this._samplingState.minimapLines[lineNumber - 1]);\n }\n return this._context.viewModel.getLineContent(lineNumber);\n }\n getLineMaxColumn(lineNumber) {\n if (this._samplingState) {\n return this._context.viewModel.getLineMaxColumn(this._samplingState.minimapLines[lineNumber - 1]);\n }\n return this._context.viewModel.getLineMaxColumn(lineNumber);\n }\n getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed) {\n if (this._samplingState) {\n const result = [];\n for (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\n if (needed[lineIndex]) {\n result[lineIndex] = this._context.viewModel.getViewLineData(this._samplingState.minimapLines[startLineNumber + lineIndex - 1]);\n }\n else {\n result[lineIndex] = null;\n }\n }\n return result;\n }\n return this._context.viewModel.getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed).data;\n }\n getSelections() {\n if (this._minimapSelections === null) {\n if (this._samplingState) {\n this._minimapSelections = [];\n for (const selection of this._selections) {\n const [minimapLineStart, minimapLineEnd] = this._samplingState.decorationLineRangeToMinimapLineRange(selection.startLineNumber, selection.endLineNumber);\n this._minimapSelections.push(new Selection(minimapLineStart, selection.startColumn, minimapLineEnd, selection.endColumn));\n }\n }\n else {\n this._minimapSelections = this._selections;\n }\n }\n return this._minimapSelections;\n }\n getMinimapDecorationsInViewport(startLineNumber, endLineNumber) {\n const decorations = this._getMinimapDecorationsInViewport(startLineNumber, endLineNumber)\n .filter(decoration => { var _a; return !((_a = decoration.options.minimap) === null || _a === void 0 ? void 0 : _a.sectionHeaderStyle); });\n if (this._samplingState) {\n const result = [];\n for (const decoration of decorations) {\n if (!decoration.options.minimap) {\n continue;\n }\n const range = decoration.range;\n const minimapStartLineNumber = this._samplingState.modelLineToMinimapLine(range.startLineNumber);\n const minimapEndLineNumber = this._samplingState.modelLineToMinimapLine(range.endLineNumber);\n result.push(new ViewModelDecoration(new Range(minimapStartLineNumber, range.startColumn, minimapEndLineNumber, range.endColumn), decoration.options));\n }\n return result;\n }\n return decorations;\n }\n getSectionHeaderDecorationsInViewport(startLineNumber, endLineNumber) {\n const minimapLineHeight = this.options.minimapLineHeight;\n const sectionHeaderFontSize = this.options.sectionHeaderFontSize;\n const headerHeightInMinimapLines = sectionHeaderFontSize / minimapLineHeight;\n startLineNumber = Math.floor(Math.max(1, startLineNumber - headerHeightInMinimapLines));\n return this._getMinimapDecorationsInViewport(startLineNumber, endLineNumber)\n .filter(decoration => { var _a; return !!((_a = decoration.options.minimap) === null || _a === void 0 ? void 0 : _a.sectionHeaderStyle); });\n }\n _getMinimapDecorationsInViewport(startLineNumber, endLineNumber) {\n let visibleRange;\n if (this._samplingState) {\n const modelStartLineNumber = this._samplingState.minimapLines[startLineNumber - 1];\n const modelEndLineNumber = this._samplingState.minimapLines[endLineNumber - 1];\n visibleRange = new Range(modelStartLineNumber, 1, modelEndLineNumber, this._context.viewModel.getLineMaxColumn(modelEndLineNumber));\n }\n else {\n visibleRange = new Range(startLineNumber, 1, endLineNumber, this._context.viewModel.getLineMaxColumn(endLineNumber));\n }\n return this._context.viewModel.getMinimapDecorationsInRange(visibleRange);\n }\n getSectionHeaderText(decoration, fitWidth) {\n var _a;\n const headerText = (_a = decoration.options.minimap) === null || _a === void 0 ? void 0 : _a.sectionHeaderText;\n if (!headerText) {\n return null;\n }\n const cachedText = this._sectionHeaderCache.get(headerText);\n if (cachedText) {\n return cachedText;\n }\n const fittedText = fitWidth(headerText);\n this._sectionHeaderCache.set(headerText, fittedText);\n return fittedText;\n }\n getOptions() {\n return this._context.viewModel.model.getOptions();\n }\n revealLineNumber(lineNumber) {\n if (this._samplingState) {\n lineNumber = this._samplingState.minimapLines[lineNumber - 1];\n }\n this._context.viewModel.revealRange('mouse', false, new Range(lineNumber, 1, lineNumber, 1), 1 /* viewEvents.VerticalRevealType.Center */, 0 /* ScrollType.Smooth */);\n }\n setScrollTop(scrollTop) {\n this._context.viewModel.viewLayout.setScrollPosition({\n scrollTop: scrollTop\n }, 1 /* ScrollType.Immediate */);\n }\n}\nclass InnerMinimap extends Disposable {\n constructor(theme, model) {\n super();\n this._renderDecorations = false;\n this._gestureInProgress = false;\n this._theme = theme;\n this._model = model;\n this._lastRenderData = null;\n this._buffers = null;\n this._selectionColor = this._theme.getColor(minimapSelection);\n this._domNode = createFastDomNode(document.createElement('div'));\n PartFingerprints.write(this._domNode, 9 /* PartFingerprint.Minimap */);\n this._domNode.setClassName(this._getMinimapDomNodeClassName());\n this._domNode.setPosition('absolute');\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._shadow = createFastDomNode(document.createElement('div'));\n this._shadow.setClassName('minimap-shadow-hidden');\n this._domNode.appendChild(this._shadow);\n this._canvas = createFastDomNode(document.createElement('canvas'));\n this._canvas.setPosition('absolute');\n this._canvas.setLeft(0);\n this._domNode.appendChild(this._canvas);\n this._decorationsCanvas = createFastDomNode(document.createElement('canvas'));\n this._decorationsCanvas.setPosition('absolute');\n this._decorationsCanvas.setClassName('minimap-decorations-layer');\n this._decorationsCanvas.setLeft(0);\n this._domNode.appendChild(this._decorationsCanvas);\n this._slider = createFastDomNode(document.createElement('div'));\n this._slider.setPosition('absolute');\n this._slider.setClassName('minimap-slider');\n this._slider.setLayerHinting(true);\n this._slider.setContain('strict');\n this._domNode.appendChild(this._slider);\n this._sliderHorizontal = createFastDomNode(document.createElement('div'));\n this._sliderHorizontal.setPosition('absolute');\n this._sliderHorizontal.setClassName('minimap-slider-horizontal');\n this._slider.appendChild(this._sliderHorizontal);\n this._applyLayout();\n this._pointerDownListener = dom.addStandardDisposableListener(this._domNode.domNode, dom.EventType.POINTER_DOWN, (e) => {\n e.preventDefault();\n const renderMinimap = this._model.options.renderMinimap;\n if (renderMinimap === 0 /* RenderMinimap.None */) {\n return;\n }\n if (!this._lastRenderData) {\n return;\n }\n if (this._model.options.size !== 'proportional') {\n if (e.button === 0 && this._lastRenderData) {\n // pretend the click occurred in the center of the slider\n const position = dom.getDomNodePagePosition(this._slider.domNode);\n const initialPosY = position.top + position.height / 2;\n this._startSliderDragging(e, initialPosY, this._lastRenderData.renderedLayout);\n }\n return;\n }\n const minimapLineHeight = this._model.options.minimapLineHeight;\n const internalOffsetY = (this._model.options.canvasInnerHeight / this._model.options.canvasOuterHeight) * e.offsetY;\n const lineIndex = Math.floor(internalOffsetY / minimapLineHeight);\n let lineNumber = lineIndex + this._lastRenderData.renderedLayout.startLineNumber - this._lastRenderData.renderedLayout.topPaddingLineCount;\n lineNumber = Math.min(lineNumber, this._model.getLineCount());\n this._model.revealLineNumber(lineNumber);\n });\n this._sliderPointerMoveMonitor = new GlobalPointerMoveMonitor();\n this._sliderPointerDownListener = dom.addStandardDisposableListener(this._slider.domNode, dom.EventType.POINTER_DOWN, (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.button === 0 && this._lastRenderData) {\n this._startSliderDragging(e, e.pageY, this._lastRenderData.renderedLayout);\n }\n });\n this._gestureDisposable = Gesture.addTarget(this._domNode.domNode);\n this._sliderTouchStartListener = dom.addDisposableListener(this._domNode.domNode, EventType.Start, (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (this._lastRenderData) {\n this._slider.toggleClassName('active', true);\n this._gestureInProgress = true;\n this.scrollDueToTouchEvent(e);\n }\n }, { passive: false });\n this._sliderTouchMoveListener = dom.addDisposableListener(this._domNode.domNode, EventType.Change, (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (this._lastRenderData && this._gestureInProgress) {\n this.scrollDueToTouchEvent(e);\n }\n }, { passive: false });\n this._sliderTouchEndListener = dom.addStandardDisposableListener(this._domNode.domNode, EventType.End, (e) => {\n e.preventDefault();\n e.stopPropagation();\n this._gestureInProgress = false;\n this._slider.toggleClassName('active', false);\n });\n }\n _startSliderDragging(e, initialPosY, initialSliderState) {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPosX = e.pageX;\n this._slider.toggleClassName('active', true);\n const handlePointerMove = (posy, posx) => {\n const minimapPosition = dom.getDomNodePagePosition(this._domNode.domNode);\n const pointerOrthogonalDelta = Math.min(Math.abs(posx - initialPosX), Math.abs(posx - minimapPosition.left), Math.abs(posx - minimapPosition.left - minimapPosition.width));\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n // The pointer has wondered away from the scrollbar => reset dragging\n this._model.setScrollTop(initialSliderState.scrollTop);\n return;\n }\n const pointerDelta = posy - initialPosY;\n this._model.setScrollTop(initialSliderState.getDesiredScrollTopFromDelta(pointerDelta));\n };\n if (e.pageY !== initialPosY) {\n handlePointerMove(e.pageY, initialPosX);\n }\n this._sliderPointerMoveMonitor.startMonitoring(e.target, e.pointerId, e.buttons, pointerMoveData => handlePointerMove(pointerMoveData.pageY, pointerMoveData.pageX), () => {\n this._slider.toggleClassName('active', false);\n });\n }\n scrollDueToTouchEvent(touch) {\n const startY = this._domNode.domNode.getBoundingClientRect().top;\n const scrollTop = this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(touch.pageY - startY);\n this._model.setScrollTop(scrollTop);\n }\n dispose() {\n this._pointerDownListener.dispose();\n this._sliderPointerMoveMonitor.dispose();\n this._sliderPointerDownListener.dispose();\n this._gestureDisposable.dispose();\n this._sliderTouchStartListener.dispose();\n this._sliderTouchMoveListener.dispose();\n this._sliderTouchEndListener.dispose();\n super.dispose();\n }\n _getMinimapDomNodeClassName() {\n const class_ = ['minimap'];\n if (this._model.options.showSlider === 'always') {\n class_.push('slider-always');\n }\n else {\n class_.push('slider-mouseover');\n }\n if (this._model.options.autohide) {\n class_.push('autohide');\n }\n return class_.join(' ');\n }\n getDomNode() {\n return this._domNode;\n }\n _applyLayout() {\n this._domNode.setLeft(this._model.options.minimapLeft);\n this._domNode.setWidth(this._model.options.minimapWidth);\n this._domNode.setHeight(this._model.options.minimapHeight);\n this._shadow.setHeight(this._model.options.minimapHeight);\n this._canvas.setWidth(this._model.options.canvasOuterWidth);\n this._canvas.setHeight(this._model.options.canvasOuterHeight);\n this._canvas.domNode.width = this._model.options.canvasInnerWidth;\n this._canvas.domNode.height = this._model.options.canvasInnerHeight;\n this._decorationsCanvas.setWidth(this._model.options.canvasOuterWidth);\n this._decorationsCanvas.setHeight(this._model.options.canvasOuterHeight);\n this._decorationsCanvas.domNode.width = this._model.options.canvasInnerWidth;\n this._decorationsCanvas.domNode.height = this._model.options.canvasInnerHeight;\n this._slider.setWidth(this._model.options.minimapWidth);\n }\n _getBuffer() {\n if (!this._buffers) {\n if (this._model.options.canvasInnerWidth > 0 && this._model.options.canvasInnerHeight > 0) {\n this._buffers = new MinimapBuffers(this._canvas.domNode.getContext('2d'), this._model.options.canvasInnerWidth, this._model.options.canvasInnerHeight, this._model.options.backgroundColor);\n }\n }\n return this._buffers ? this._buffers.getBuffer() : null;\n }\n // ---- begin view event handlers\n onDidChangeOptions() {\n this._lastRenderData = null;\n this._buffers = null;\n this._applyLayout();\n this._domNode.setClassName(this._getMinimapDomNodeClassName());\n }\n onSelectionChanged() {\n this._renderDecorations = true;\n return true;\n }\n onDecorationsChanged() {\n this._renderDecorations = true;\n return true;\n }\n onFlushed() {\n this._lastRenderData = null;\n return true;\n }\n onLinesChanged(changeFromLineNumber, changeCount) {\n if (this._lastRenderData) {\n return this._lastRenderData.onLinesChanged(changeFromLineNumber, changeCount);\n }\n return false;\n }\n onLinesDeleted(deleteFromLineNumber, deleteToLineNumber) {\n var _a;\n (_a = this._lastRenderData) === null || _a === void 0 ? void 0 : _a.onLinesDeleted(deleteFromLineNumber, deleteToLineNumber);\n return true;\n }\n onLinesInserted(insertFromLineNumber, insertToLineNumber) {\n var _a;\n (_a = this._lastRenderData) === null || _a === void 0 ? void 0 : _a.onLinesInserted(insertFromLineNumber, insertToLineNumber);\n return true;\n }\n onScrollChanged() {\n this._renderDecorations = true;\n return true;\n }\n onThemeChanged() {\n this._selectionColor = this._theme.getColor(minimapSelection);\n this._renderDecorations = true;\n return true;\n }\n onTokensChanged(ranges) {\n if (this._lastRenderData) {\n return this._lastRenderData.onTokensChanged(ranges);\n }\n return false;\n }\n onTokensColorsChanged() {\n this._lastRenderData = null;\n this._buffers = null;\n return true;\n }\n onZonesChanged() {\n this._lastRenderData = null;\n return true;\n }\n // --- end event handlers\n render(renderingCtx) {\n const renderMinimap = this._model.options.renderMinimap;\n if (renderMinimap === 0 /* RenderMinimap.None */) {\n this._shadow.setClassName('minimap-shadow-hidden');\n this._sliderHorizontal.setWidth(0);\n this._sliderHorizontal.setHeight(0);\n return;\n }\n if (renderingCtx.scrollLeft + renderingCtx.viewportWidth >= renderingCtx.scrollWidth) {\n this._shadow.setClassName('minimap-shadow-hidden');\n }\n else {\n this._shadow.setClassName('minimap-shadow-visible');\n }\n const layout = MinimapLayout.create(this._model.options, renderingCtx.viewportStartLineNumber, renderingCtx.viewportEndLineNumber, renderingCtx.viewportStartLineNumberVerticalOffset, renderingCtx.viewportHeight, renderingCtx.viewportContainsWhitespaceGaps, this._model.getLineCount(), this._model.getRealLineCount(), renderingCtx.scrollTop, renderingCtx.scrollHeight, this._lastRenderData ? this._lastRenderData.renderedLayout : null);\n this._slider.setDisplay(layout.sliderNeeded ? 'block' : 'none');\n this._slider.setTop(layout.sliderTop);\n this._slider.setHeight(layout.sliderHeight);\n // Compute horizontal slider coordinates\n this._sliderHorizontal.setLeft(0);\n this._sliderHorizontal.setWidth(this._model.options.minimapWidth);\n this._sliderHorizontal.setTop(0);\n this._sliderHorizontal.setHeight(layout.sliderHeight);\n this.renderDecorations(layout);\n this._lastRenderData = this.renderLines(layout);\n }\n renderDecorations(layout) {\n if (this._renderDecorations) {\n this._renderDecorations = false;\n const selections = this._model.getSelections();\n selections.sort(Range.compareRangesUsingStarts);\n const decorations = this._model.getMinimapDecorationsInViewport(layout.startLineNumber, layout.endLineNumber);\n decorations.sort((a, b) => (a.options.zIndex || 0) - (b.options.zIndex || 0));\n const { canvasInnerWidth, canvasInnerHeight } = this._model.options;\n const minimapLineHeight = this._model.options.minimapLineHeight;\n const minimapCharWidth = this._model.options.minimapCharWidth;\n const tabSize = this._model.getOptions().tabSize;\n const canvasContext = this._decorationsCanvas.domNode.getContext('2d');\n canvasContext.clearRect(0, 0, canvasInnerWidth, canvasInnerHeight);\n // We first need to render line highlights and then render decorations on top of those.\n // But we need to pick a single color for each line, and use that as a line highlight.\n // This needs to be the color of the decoration with the highest `zIndex`, but priority\n // is given to the selection.\n const highlightedLines = new ContiguousLineMap(layout.startLineNumber, layout.endLineNumber, false);\n this._renderSelectionLineHighlights(canvasContext, selections, highlightedLines, layout, minimapLineHeight);\n this._renderDecorationsLineHighlights(canvasContext, decorations, highlightedLines, layout, minimapLineHeight);\n const lineOffsetMap = new ContiguousLineMap(layout.startLineNumber, layout.endLineNumber, null);\n this._renderSelectionsHighlights(canvasContext, selections, lineOffsetMap, layout, minimapLineHeight, tabSize, minimapCharWidth, canvasInnerWidth);\n this._renderDecorationsHighlights(canvasContext, decorations, lineOffsetMap, layout, minimapLineHeight, tabSize, minimapCharWidth, canvasInnerWidth);\n this._renderSectionHeaders(layout);\n }\n }\n _renderSelectionLineHighlights(canvasContext, selections, highlightedLines, layout, minimapLineHeight) {\n if (!this._selectionColor || this._selectionColor.isTransparent()) {\n return;\n }\n canvasContext.fillStyle = this._selectionColor.transparent(0.5).toString();\n let y1 = 0;\n let y2 = 0;\n for (const selection of selections) {\n const intersection = layout.intersectWithViewport(selection);\n if (!intersection) {\n // entirely outside minimap's viewport\n continue;\n }\n const [startLineNumber, endLineNumber] = intersection;\n for (let line = startLineNumber; line <= endLineNumber; line++) {\n highlightedLines.set(line, true);\n }\n const yy1 = layout.getYForLineNumber(startLineNumber, minimapLineHeight);\n const yy2 = layout.getYForLineNumber(endLineNumber, minimapLineHeight);\n if (y2 >= yy1) {\n // merge into previous\n y2 = yy2;\n }\n else {\n if (y2 > y1) {\n // flush\n canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y1, canvasContext.canvas.width, y2 - y1);\n }\n y1 = yy1;\n y2 = yy2;\n }\n }\n if (y2 > y1) {\n // flush\n canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y1, canvasContext.canvas.width, y2 - y1);\n }\n }\n _renderDecorationsLineHighlights(canvasContext, decorations, highlightedLines, layout, minimapLineHeight) {\n const highlightColors = new Map();\n // Loop backwards to hit first decorations with higher `zIndex`\n for (let i = decorations.length - 1; i >= 0; i--) {\n const decoration = decorations[i];\n const minimapOptions = decoration.options.minimap;\n if (!minimapOptions || minimapOptions.position !== 1 /* MinimapPosition.Inline */) {\n continue;\n }\n const intersection = layout.intersectWithViewport(decoration.range);\n if (!intersection) {\n // entirely outside minimap's viewport\n continue;\n }\n const [startLineNumber, endLineNumber] = intersection;\n const decorationColor = minimapOptions.getColor(this._theme.value);\n if (!decorationColor || decorationColor.isTransparent()) {\n continue;\n }\n let highlightColor = highlightColors.get(decorationColor.toString());\n if (!highlightColor) {\n highlightColor = decorationColor.transparent(0.5).toString();\n highlightColors.set(decorationColor.toString(), highlightColor);\n }\n canvasContext.fillStyle = highlightColor;\n for (let line = startLineNumber; line <= endLineNumber; line++) {\n if (highlightedLines.has(line)) {\n continue;\n }\n highlightedLines.set(line, true);\n const y = layout.getYForLineNumber(startLineNumber, minimapLineHeight);\n canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y, canvasContext.canvas.width, minimapLineHeight);\n }\n }\n }\n _renderSelectionsHighlights(canvasContext, selections, lineOffsetMap, layout, lineHeight, tabSize, characterWidth, canvasInnerWidth) {\n if (!this._selectionColor || this._selectionColor.isTransparent()) {\n return;\n }\n for (const selection of selections) {\n const intersection = layout.intersectWithViewport(selection);\n if (!intersection) {\n // entirely outside minimap's viewport\n continue;\n }\n const [startLineNumber, endLineNumber] = intersection;\n for (let line = startLineNumber; line <= endLineNumber; line++) {\n this.renderDecorationOnLine(canvasContext, lineOffsetMap, selection, this._selectionColor, layout, line, lineHeight, lineHeight, tabSize, characterWidth, canvasInnerWidth);\n }\n }\n }\n _renderDecorationsHighlights(canvasContext, decorations, lineOffsetMap, layout, minimapLineHeight, tabSize, characterWidth, canvasInnerWidth) {\n // Loop forwards to hit first decorations with lower `zIndex`\n for (const decoration of decorations) {\n const minimapOptions = decoration.options.minimap;\n if (!minimapOptions) {\n continue;\n }\n const intersection = layout.intersectWithViewport(decoration.range);\n if (!intersection) {\n // entirely outside minimap's viewport\n continue;\n }\n const [startLineNumber, endLineNumber] = intersection;\n const decorationColor = minimapOptions.getColor(this._theme.value);\n if (!decorationColor || decorationColor.isTransparent()) {\n continue;\n }\n for (let line = startLineNumber; line <= endLineNumber; line++) {\n switch (minimapOptions.position) {\n case 1 /* MinimapPosition.Inline */:\n this.renderDecorationOnLine(canvasContext, lineOffsetMap, decoration.range, decorationColor, layout, line, minimapLineHeight, minimapLineHeight, tabSize, characterWidth, canvasInnerWidth);\n continue;\n case 2 /* MinimapPosition.Gutter */: {\n const y = layout.getYForLineNumber(line, minimapLineHeight);\n const x = 2;\n this.renderDecoration(canvasContext, decorationColor, x, y, GUTTER_DECORATION_WIDTH, minimapLineHeight);\n continue;\n }\n }\n }\n }\n }\n renderDecorationOnLine(canvasContext, lineOffsetMap, decorationRange, decorationColor, layout, lineNumber, height, minimapLineHeight, tabSize, charWidth, canvasInnerWidth) {\n const y = layout.getYForLineNumber(lineNumber, minimapLineHeight);\n // Skip rendering the line if it's vertically outside our viewport\n if (y + height < 0 || y > this._model.options.canvasInnerHeight) {\n return;\n }\n const { startLineNumber, endLineNumber } = decorationRange;\n const startColumn = (startLineNumber === lineNumber ? decorationRange.startColumn : 1);\n const endColumn = (endLineNumber === lineNumber ? decorationRange.endColumn : this._model.getLineMaxColumn(lineNumber));\n const x1 = this.getXOffsetForPosition(lineOffsetMap, lineNumber, startColumn, tabSize, charWidth, canvasInnerWidth);\n const x2 = this.getXOffsetForPosition(lineOffsetMap, lineNumber, endColumn, tabSize, charWidth, canvasInnerWidth);\n this.renderDecoration(canvasContext, decorationColor, x1, y, x2 - x1, height);\n }\n getXOffsetForPosition(lineOffsetMap, lineNumber, column, tabSize, charWidth, canvasInnerWidth) {\n if (column === 1) {\n return MINIMAP_GUTTER_WIDTH;\n }\n const minimumXOffset = (column - 1) * charWidth;\n if (minimumXOffset >= canvasInnerWidth) {\n // there is no need to look at actual characters,\n // as this column is certainly after the minimap width\n return canvasInnerWidth;\n }\n // Cache line offset data so that it is only read once per line\n let lineIndexToXOffset = lineOffsetMap.get(lineNumber);\n if (!lineIndexToXOffset) {\n const lineData = this._model.getLineContent(lineNumber);\n lineIndexToXOffset = [MINIMAP_GUTTER_WIDTH];\n let prevx = MINIMAP_GUTTER_WIDTH;\n for (let i = 1; i < lineData.length + 1; i++) {\n const charCode = lineData.charCodeAt(i - 1);\n const dx = charCode === 9 /* CharCode.Tab */\n ? tabSize * charWidth\n : strings.isFullWidthCharacter(charCode)\n ? 2 * charWidth\n : charWidth;\n const x = prevx + dx;\n if (x >= canvasInnerWidth) {\n // no need to keep on going, as we've hit the canvas width\n lineIndexToXOffset[i] = canvasInnerWidth;\n break;\n }\n lineIndexToXOffset[i] = x;\n prevx = x;\n }\n lineOffsetMap.set(lineNumber, lineIndexToXOffset);\n }\n if (column - 1 < lineIndexToXOffset.length) {\n return lineIndexToXOffset[column - 1];\n }\n // goes over the canvas width\n return canvasInnerWidth;\n }\n renderDecoration(canvasContext, decorationColor, x, y, width, height) {\n canvasContext.fillStyle = decorationColor && decorationColor.toString() || '';\n canvasContext.fillRect(x, y, width, height);\n }\n _renderSectionHeaders(layout) {\n var _a;\n const minimapLineHeight = this._model.options.minimapLineHeight;\n const sectionHeaderFontSize = this._model.options.sectionHeaderFontSize;\n const sectionHeaderLetterSpacing = this._model.options.sectionHeaderLetterSpacing;\n const backgroundFillHeight = sectionHeaderFontSize * 1.5;\n const { canvasInnerWidth } = this._model.options;\n const backgroundColor = this._model.options.backgroundColor;\n const backgroundFill = `rgb(${backgroundColor.r} ${backgroundColor.g} ${backgroundColor.b} / .7)`;\n const foregroundColor = this._model.options.sectionHeaderFontColor;\n const foregroundFill = `rgb(${foregroundColor.r} ${foregroundColor.g} ${foregroundColor.b})`;\n const separatorStroke = foregroundFill;\n const canvasContext = this._decorationsCanvas.domNode.getContext('2d');\n canvasContext.letterSpacing = sectionHeaderLetterSpacing + 'px';\n canvasContext.font = '500 ' + sectionHeaderFontSize + 'px ' + this._model.options.sectionHeaderFontFamily;\n canvasContext.strokeStyle = separatorStroke;\n canvasContext.lineWidth = 0.2;\n const decorations = this._model.getSectionHeaderDecorationsInViewport(layout.startLineNumber, layout.endLineNumber);\n decorations.sort((a, b) => a.range.startLineNumber - b.range.startLineNumber);\n const fitWidth = InnerMinimap._fitSectionHeader.bind(null, canvasContext, canvasInnerWidth - MINIMAP_GUTTER_WIDTH);\n for (const decoration of decorations) {\n const y = layout.getYForLineNumber(decoration.range.startLineNumber, minimapLineHeight) + sectionHeaderFontSize;\n const backgroundFillY = y - sectionHeaderFontSize;\n const separatorY = backgroundFillY + 2;\n const headerText = this._model.getSectionHeaderText(decoration, fitWidth);\n InnerMinimap._renderSectionLabel(canvasContext, headerText, ((_a = decoration.options.minimap) === null || _a === void 0 ? void 0 : _a.sectionHeaderStyle) === 2 /* MinimapSectionHeaderStyle.Underlined */, backgroundFill, foregroundFill, canvasInnerWidth, backgroundFillY, backgroundFillHeight, y, separatorY);\n }\n }\n static _fitSectionHeader(target, maxWidth, headerText) {\n if (!headerText) {\n return headerText;\n }\n const ellipsis = '…';\n const width = target.measureText(headerText).width;\n const ellipsisWidth = target.measureText(ellipsis).width;\n if (width <= maxWidth || width <= ellipsisWidth) {\n return headerText;\n }\n const len = headerText.length;\n const averageCharWidth = width / headerText.length;\n const maxCharCount = Math.floor((maxWidth - ellipsisWidth) / averageCharWidth) - 1;\n // Find a halfway point that isn't after whitespace\n let halfCharCount = Math.ceil(maxCharCount / 2);\n while (halfCharCount > 0 && /\\s/.test(headerText[halfCharCount - 1])) {\n --halfCharCount;\n }\n // Split with ellipsis\n return headerText.substring(0, halfCharCount)\n + ellipsis + headerText.substring(len - (maxCharCount - halfCharCount));\n }\n static _renderSectionLabel(target, headerText, hasSeparatorLine, backgroundFill, foregroundFill, minimapWidth, backgroundFillY, backgroundFillHeight, textY, separatorY) {\n if (headerText) {\n target.fillStyle = backgroundFill;\n target.fillRect(0, backgroundFillY, minimapWidth, backgroundFillHeight);\n target.fillStyle = foregroundFill;\n target.fillText(headerText, MINIMAP_GUTTER_WIDTH, textY);\n }\n if (hasSeparatorLine) {\n target.beginPath();\n target.moveTo(0, separatorY);\n target.lineTo(minimapWidth, separatorY);\n target.closePath();\n target.stroke();\n }\n }\n renderLines(layout) {\n const startLineNumber = layout.startLineNumber;\n const endLineNumber = layout.endLineNumber;\n const minimapLineHeight = this._model.options.minimapLineHeight;\n // Check if nothing changed w.r.t. lines from last frame\n if (this._lastRenderData && this._lastRenderData.linesEquals(layout)) {\n const _lastData = this._lastRenderData._get();\n // Nice!! Nothing changed from last frame\n return new RenderData(layout, _lastData.imageData, _lastData.lines);\n }\n // Oh well!! We need to repaint some lines...\n const imageData = this._getBuffer();\n if (!imageData) {\n // 0 width or 0 height canvas, nothing to do\n return null;\n }\n // Render untouched lines by using last rendered data.\n const [_dirtyY1, _dirtyY2, needed] = InnerMinimap._renderUntouchedLines(imageData, layout.topPaddingLineCount, startLineNumber, endLineNumber, minimapLineHeight, this._lastRenderData);\n // Fetch rendering info from view model for rest of lines that need rendering.\n const lineInfo = this._model.getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed);\n const tabSize = this._model.getOptions().tabSize;\n const defaultBackground = this._model.options.defaultBackgroundColor;\n const background = this._model.options.backgroundColor;\n const foregroundAlpha = this._model.options.foregroundAlpha;\n const tokensColorTracker = this._model.tokensColorTracker;\n const useLighterFont = tokensColorTracker.backgroundIsLight();\n const renderMinimap = this._model.options.renderMinimap;\n const charRenderer = this._model.options.charRenderer();\n const fontScale = this._model.options.fontScale;\n const minimapCharWidth = this._model.options.minimapCharWidth;\n const baseCharHeight = (renderMinimap === 1 /* RenderMinimap.Text */ ? 2 /* Constants.BASE_CHAR_HEIGHT */ : 2 /* Constants.BASE_CHAR_HEIGHT */ + 1);\n const renderMinimapLineHeight = baseCharHeight * fontScale;\n const innerLinePadding = (minimapLineHeight > renderMinimapLineHeight ? Math.floor((minimapLineHeight - renderMinimapLineHeight) / 2) : 0);\n // Render the rest of lines\n const backgroundA = background.a / 255;\n const renderBackground = new RGBA8(Math.round((background.r - defaultBackground.r) * backgroundA + defaultBackground.r), Math.round((background.g - defaultBackground.g) * backgroundA + defaultBackground.g), Math.round((background.b - defaultBackground.b) * backgroundA + defaultBackground.b), 255);\n let dy = layout.topPaddingLineCount * minimapLineHeight;\n const renderedLines = [];\n for (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\n if (needed[lineIndex]) {\n InnerMinimap._renderLine(imageData, renderBackground, background.a, useLighterFont, renderMinimap, minimapCharWidth, tokensColorTracker, foregroundAlpha, charRenderer, dy, innerLinePadding, tabSize, lineInfo[lineIndex], fontScale, minimapLineHeight);\n }\n renderedLines[lineIndex] = new MinimapLine(dy);\n dy += minimapLineHeight;\n }\n const dirtyY1 = (_dirtyY1 === -1 ? 0 : _dirtyY1);\n const dirtyY2 = (_dirtyY2 === -1 ? imageData.height : _dirtyY2);\n const dirtyHeight = dirtyY2 - dirtyY1;\n // Finally, paint to the canvas\n const ctx = this._canvas.domNode.getContext('2d');\n ctx.putImageData(imageData, 0, 0, 0, dirtyY1, imageData.width, dirtyHeight);\n // Save rendered data for reuse on next frame if possible\n return new RenderData(layout, imageData, renderedLines);\n }\n static _renderUntouchedLines(target, topPaddingLineCount, startLineNumber, endLineNumber, minimapLineHeight, lastRenderData) {\n const needed = [];\n if (!lastRenderData) {\n for (let i = 0, len = endLineNumber - startLineNumber + 1; i < len; i++) {\n needed[i] = true;\n }\n return [-1, -1, needed];\n }\n const _lastData = lastRenderData._get();\n const lastTargetData = _lastData.imageData.data;\n const lastStartLineNumber = _lastData.rendLineNumberStart;\n const lastLines = _lastData.lines;\n const lastLinesLength = lastLines.length;\n const WIDTH = target.width;\n const targetData = target.data;\n const maxDestPixel = (endLineNumber - startLineNumber + 1) * minimapLineHeight * WIDTH * 4;\n let dirtyPixel1 = -1; // the pixel offset up to which all the data is equal to the prev frame\n let dirtyPixel2 = -1; // the pixel offset after which all the data is equal to the prev frame\n let copySourceStart = -1;\n let copySourceEnd = -1;\n let copyDestStart = -1;\n let copyDestEnd = -1;\n let dest_dy = topPaddingLineCount * minimapLineHeight;\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const lineIndex = lineNumber - startLineNumber;\n const lastLineIndex = lineNumber - lastStartLineNumber;\n const source_dy = (lastLineIndex >= 0 && lastLineIndex < lastLinesLength ? lastLines[lastLineIndex].dy : -1);\n if (source_dy === -1) {\n needed[lineIndex] = true;\n dest_dy += minimapLineHeight;\n continue;\n }\n const sourceStart = source_dy * WIDTH * 4;\n const sourceEnd = (source_dy + minimapLineHeight) * WIDTH * 4;\n const destStart = dest_dy * WIDTH * 4;\n const destEnd = (dest_dy + minimapLineHeight) * WIDTH * 4;\n if (copySourceEnd === sourceStart && copyDestEnd === destStart) {\n // contiguous zone => extend copy request\n copySourceEnd = sourceEnd;\n copyDestEnd = destEnd;\n }\n else {\n if (copySourceStart !== -1) {\n // flush existing copy request\n targetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\n if (dirtyPixel1 === -1 && copySourceStart === 0 && copySourceStart === copyDestStart) {\n dirtyPixel1 = copySourceEnd;\n }\n if (dirtyPixel2 === -1 && copySourceEnd === maxDestPixel && copySourceStart === copyDestStart) {\n dirtyPixel2 = copySourceStart;\n }\n }\n copySourceStart = sourceStart;\n copySourceEnd = sourceEnd;\n copyDestStart = destStart;\n copyDestEnd = destEnd;\n }\n needed[lineIndex] = false;\n dest_dy += minimapLineHeight;\n }\n if (copySourceStart !== -1) {\n // flush existing copy request\n targetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\n if (dirtyPixel1 === -1 && copySourceStart === 0 && copySourceStart === copyDestStart) {\n dirtyPixel1 = copySourceEnd;\n }\n if (dirtyPixel2 === -1 && copySourceEnd === maxDestPixel && copySourceStart === copyDestStart) {\n dirtyPixel2 = copySourceStart;\n }\n }\n const dirtyY1 = (dirtyPixel1 === -1 ? -1 : dirtyPixel1 / (WIDTH * 4));\n const dirtyY2 = (dirtyPixel2 === -1 ? -1 : dirtyPixel2 / (WIDTH * 4));\n return [dirtyY1, dirtyY2, needed];\n }\n static _renderLine(target, backgroundColor, backgroundAlpha, useLighterFont, renderMinimap, charWidth, colorTracker, foregroundAlpha, minimapCharRenderer, dy, innerLinePadding, tabSize, lineData, fontScale, minimapLineHeight) {\n const content = lineData.content;\n const tokens = lineData.tokens;\n const maxDx = target.width - charWidth;\n const force1pxHeight = (minimapLineHeight === 1);\n let dx = MINIMAP_GUTTER_WIDTH;\n let charIndex = 0;\n let tabsCharDelta = 0;\n for (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n const tokenEndIndex = tokens.getEndOffset(tokenIndex);\n const tokenColorId = tokens.getForeground(tokenIndex);\n const tokenColor = colorTracker.getColor(tokenColorId);\n for (; charIndex < tokenEndIndex; charIndex++) {\n if (dx > maxDx) {\n // hit edge of minimap\n return;\n }\n const charCode = content.charCodeAt(charIndex);\n if (charCode === 9 /* CharCode.Tab */) {\n const insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n tabsCharDelta += insertSpacesCount - 1;\n // No need to render anything since tab is invisible\n dx += insertSpacesCount * charWidth;\n }\n else if (charCode === 32 /* CharCode.Space */) {\n // No need to render anything since space is invisible\n dx += charWidth;\n }\n else {\n // Render twice for a full width character\n const count = strings.isFullWidthCharacter(charCode) ? 2 : 1;\n for (let i = 0; i < count; i++) {\n if (renderMinimap === 2 /* RenderMinimap.Blocks */) {\n minimapCharRenderer.blockRenderChar(target, dx, dy + innerLinePadding, tokenColor, foregroundAlpha, backgroundColor, backgroundAlpha, force1pxHeight);\n }\n else { // RenderMinimap.Text\n minimapCharRenderer.renderChar(target, dx, dy + innerLinePadding, charCode, tokenColor, foregroundAlpha, backgroundColor, backgroundAlpha, fontScale, useLighterFont, force1pxHeight);\n }\n dx += charWidth;\n if (dx > maxDx) {\n // hit edge of minimap\n return;\n }\n }\n }\n }\n }\n }\n}\nclass ContiguousLineMap {\n constructor(startLineNumber, endLineNumber, defaultValue) {\n this._startLineNumber = startLineNumber;\n this._endLineNumber = endLineNumber;\n this._defaultValue = defaultValue;\n this._values = [];\n for (let i = 0, count = this._endLineNumber - this._startLineNumber + 1; i < count; i++) {\n this._values[i] = defaultValue;\n }\n }\n has(lineNumber) {\n return (this.get(lineNumber) !== this._defaultValue);\n }\n set(lineNumber, value) {\n if (lineNumber < this._startLineNumber || lineNumber > this._endLineNumber) {\n return;\n }\n this._values[lineNumber - this._startLineNumber] = value;\n }\n get(lineNumber) {\n if (lineNumber < this._startLineNumber || lineNumber > this._endLineNumber) {\n return this._defaultValue;\n }\n return this._values[lineNumber - this._startLineNumber];\n }\n}\n"],"names":["Margin","constructor","context","super","options","this","_context","configuration","layoutInfo","get","_canUseLayerHinting","_contentLeft","contentLeft","_glyphMarginLeft","glyphMarginLeft","_glyphMarginWidth","glyphMarginWidth","_domNode","document","createElement","setClassName","OUTER_CLASS_NAME","setPosition","setAttribute","_glyphMarginBackgroundDomNode","CLASS_NAME","appendChild","dispose","getDomNode","onConfigurationChanged","e","onScrollChanged","scrollTopChanged","prepareRender","ctx","render","setLayerHinting","setContain","adjustedScrollTop","scrollTop","bigNumbersDelta","setTop","height","Math","min","scrollHeight","setHeight","setWidth","setLeft","MarginViewLineDecorationsOverlay","_renderResult","addEventHandler","removeEventHandler","onDecorationsChanged","onFlushed","onLinesChanged","onLinesDeleted","onLinesInserted","onZonesChanged","_getDecorations","decorations","getDecorationsInViewport","r","rLen","i","len","length","d","marginClassName","zIndex","range","startLineNumber","endLineNumber","visibleStartLineNumber","visibleRange","visibleEndLineNumber","toRender","_render","output","lineNumber","lineIndex","getDecorations","lineOutput","decoration","className","allCharCodes","v","push","MinimapCharRenderer","charData","scale","_minimapCharRendererBrand","undefined","charDataNormal","soften","charDataLight","input","ratio","result","Uint8ClampedArray","renderChar","target","dx","dy","chCode","color","foregroundAlpha","backgroundColor","backgroundAlpha","fontScale","useLighterFont","force1pxHeight","charWidth","charHeight","renderHeight","width","console","warn","charIndex","getCharIndex","destWidth","backgroundR","backgroundG","g","backgroundB","b","deltaR","deltaG","deltaB","destAlpha","max","dest","data","sourceOffset","row","y","column","x","c","blockRenderChar","colorR","colorG","colorB","charTable","A","B","C","D","E","F","decodeData","str","prebakedMiniMaps","MinimapCharRendererFactory","create","fontFamily","lastCreated","lastFontFamily","factory","createFromSampleData","createSampleData","canvas","getContext","style","fillStyle","font","textBaseline","code","fillText","String","fromCharCode","getImageData","source","Error","_downsample","_downsampleChar","destOffset","targetIndex","brightest","sourceY1","sourceY2","sourceX1","sourceX2","value","samples","sy","sourceRow","floor","yBalance","sx","xBalance","sourceIndex","weight","final","pixelsPerCharacter","resultLen","resultOffset","adjust","MinimapOptions","theme","tokensColorTracker","pixelRatio","minimapLayout","minimap","fontInfo","minimapOpts","renderMinimap","size","minimapHeightIsEditorHeight","scrollBeyondLastLine","paddingTop","top","paddingBottom","bottom","showSlider","autohide","typicalHalfwidthCharacterWidth","lineHeight","minimapLeft","minimapWidth","minimapHeight","canvasInnerWidth","minimapCanvasInnerWidth","canvasInnerHeight","minimapCanvasInnerHeight","canvasOuterWidth","minimapCanvasOuterWidth","canvasOuterHeight","minimapCanvasOuterHeight","isSampling","minimapIsSampling","editorHeight","minimapScale","minimapLineHeight","minimapCharWidth","sectionHeaderFontFamily","sectionHeaderFontSize","sectionHeaderLetterSpacing","sectionHeaderFontColor","_getSectionHeaderColor","getColor","charRenderer","defaultBackgroundColor","_getMinimapBackground","_getMinimapForegroundOpacity","themeColor","rgba","round","a","defaultForegroundColor","equals","other","MinimapLayout","sliderNeeded","_computedSliderRatio","sliderTop","sliderHeight","topPaddingLineCount","getDesiredScrollTopFromDelta","delta","getDesiredScrollTopFromTouchLocation","pageY","intersectWithViewport","getYForLineNumber","viewportStartLineNumber","viewportEndLineNumber","viewportStartLineNumberVerticalOffset","viewportHeight","viewportContainsWhitespaceGaps","lineCount","realLineCount","previousLayout","minimapLinesFitting","logicalScrollHeight","maxMinimapSliderTop","computedSliderRatio","maxLinesFitting","viewportLineCount","expectedViewportLineCount","extraLinesAtTheTop","extraLinesAtTheBottom","consideringStartLineNumber","partialLine","sliderTopAligned","MinimapLine","onContentChanged","onTokensChanged","INVALID","RenderData","renderedLayout","imageData","lines","_imageData","_renderedLines","_set","linesEquals","layout","scrollEquals","_get","tmp","rendLineNumberStart","changeFromLineNumber","changeCount","deleteFromLineNumber","deleteToLineNumber","insertFromLineNumber","insertToLineNumber","ranges","MinimapBuffers","WIDTH","HEIGHT","background","_backgroundFillData","_createBackgroundFillData","_buffers","createImageData","_lastUsedBuffer","getBuffer","set","backgroundA","offset","j","MinimapSamplingState","compute","viewLineCount","oldSamplingState","minimapLineCount","halfRatio","minimapLines","lastIndex","oldMinimapLines","oldLength","oldIndex","oldDeltaLineCount","minViewLineNumber","events","lastEvent","fromViewLineNumber","toViewLineNumber","oldMinimapLineNumber","type","_oldIndex","selectedViewLineNumber","_i","samplingRatio","modelLineToMinimapLine","modelLineRangeToMinimapLineRange","fromLineNumber","toLineNumber","fromLineIndex","toLineIndex","sampledLineNumber","decorationLineRangeToMinimapLineRange","minimapLineStart","minimapLineEnd","deletedLineCount","changeStartIndex","changeEndIndex","insertedLineCount","Minimap","_sectionHeaderCache","_selections","_minimapSelections","samplingState","viewModel","getLineCount","_samplingState","_shouldCheckSampling","_actual","InnerMinimap","_onOptionsMaybeChanged","opts","_recreateLineSampling","onDidChangeOptions","onCursorStateChanged","selections","onSelectionChanged","affectsMinimap","minimapLineRange","count","onThemeChanged","onTokensColorsChanged","minimapCtx","viewportData","whitespaceViewportData","scrollWidth","getVerticalOffsetForLineNumber","scrollLeft","viewportWidth","wasSampling","Boolean","event","getRealLineCount","getLineContent","getLineMaxColumn","getMinimapLinesRenderingData","needed","getViewLineData","getSelections","selection","startColumn","endColumn","getMinimapDecorationsInViewport","_getMinimapDecorationsInViewport","filter","_a","sectionHeaderStyle","minimapStartLineNumber","minimapEndLineNumber","getSectionHeaderDecorationsInViewport","headerHeightInMinimapLines","modelStartLineNumber","modelEndLineNumber","getMinimapDecorationsInRange","getSectionHeaderText","fitWidth","headerText","sectionHeaderText","cachedText","fittedText","getOptions","model","revealLineNumber","revealRange","setScrollTop","viewLayout","setScrollPosition","_renderDecorations","_gestureInProgress","_theme","_model","_lastRenderData","_selectionColor","_getMinimapDomNodeClassName","_shadow","_canvas","_decorationsCanvas","_slider","_sliderHorizontal","_applyLayout","_pointerDownListener","dom","domNode","preventDefault","button","position","initialPosY","_startSliderDragging","internalOffsetY","offsetY","_sliderPointerMoveMonitor","_sliderPointerDownListener","stopPropagation","_gestureDisposable","_sliderTouchStartListener","toggleClassName","scrollDueToTouchEvent","passive","_sliderTouchMoveListener","_sliderTouchEndListener","initialSliderState","Element","initialPosX","pageX","handlePointerMove","posy","posx","minimapPosition","pointerOrthogonalDelta","abs","left","platform","pointerDelta","startMonitoring","pointerId","buttons","pointerMoveData","touch","startY","getBoundingClientRect","class_","join","_getBuffer","renderingCtx","setDisplay","renderDecorations","renderLines","sort","tabSize","canvasContext","clearRect","highlightedLines","ContiguousLineMap","_renderSelectionLineHighlights","_renderDecorationsLineHighlights","lineOffsetMap","_renderSelectionsHighlights","_renderDecorationsHighlights","_renderSectionHeaders","isTransparent","transparent","toString","y1","y2","intersection","line","yy1","yy2","fillRect","highlightColors","Map","minimapOptions","decorationColor","highlightColor","has","characterWidth","renderDecorationOnLine","renderDecoration","decorationRange","x1","getXOffsetForPosition","x2","lineIndexToXOffset","lineData","prevx","charCode","charCodeAt","strings","backgroundFillHeight","backgroundFill","foregroundColor","foregroundFill","separatorStroke","letterSpacing","strokeStyle","lineWidth","_fitSectionHeader","bind","backgroundFillY","separatorY","_renderSectionLabel","maxWidth","measureText","ellipsisWidth","averageCharWidth","maxCharCount","halfCharCount","ceil","test","substring","hasSeparatorLine","textY","beginPath","moveTo","lineTo","closePath","stroke","_lastData","_dirtyY1","_dirtyY2","_renderUntouchedLines","lineInfo","defaultBackground","backgroundIsLight","renderMinimapLineHeight","innerLinePadding","renderBackground","renderedLines","_renderLine","dirtyY1","dirtyHeight","putImageData","lastRenderData","lastTargetData","lastStartLineNumber","lastLines","lastLinesLength","targetData","maxDestPixel","dirtyPixel1","dirtyPixel2","copySourceStart","copySourceEnd","copyDestStart","copyDestEnd","dest_dy","lastLineIndex","source_dy","sourceStart","sourceEnd","destStart","destEnd","subarray","colorTracker","minimapCharRenderer","content","tokens","maxDx","tabsCharDelta","tokenIndex","tokensLen","getCount","tokenEndIndex","getEndOffset","tokenColorId","getForeground","tokenColor","insertSpacesCount","defaultValue","_startLineNumber","_endLineNumber","_defaultValue","_values"],"sourceRoot":""}