{"version":3,"file":"static/js/5728_3f4389d66ad9e916453b.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/view/domLineBreaksComputer.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/view/dynamicViewOverlay.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/scrollDecoration/scrollDecoration.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/selections/selections.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/viewCursors/viewCursor.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/viewCursors/viewCursors.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/viewZones/viewZones.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/whitespace/whitespace.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 { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { assertIsDefined } from '../../../base/common/types.js';\nimport { applyFontInfo } from '../config/domFontInfo.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport { ModelLineProjectionData } from '../../common/modelLineProjectionData.js';\nimport { LineInjectedText } from '../../common/textModelEvents.js';\nconst ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value });\nexport class DOMLineBreaksComputerFactory {\n static create(targetWindow) {\n return new DOMLineBreaksComputerFactory(new WeakRef(targetWindow));\n }\n constructor(targetWindow) {\n this.targetWindow = targetWindow;\n }\n createLineBreaksComputer(fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak) {\n const requests = [];\n const injectedTexts = [];\n return {\n addRequest: (lineText, injectedText, previousLineBreakData) => {\n requests.push(lineText);\n injectedTexts.push(injectedText);\n },\n finalize: () => {\n return createLineBreaks(assertIsDefined(this.targetWindow.deref()), requests, fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak, injectedTexts);\n }\n };\n }\n}\nfunction createLineBreaks(targetWindow, requests, fontInfo, tabSize, firstLineBreakColumn, wrappingIndent, wordBreak, injectedTextsPerLine) {\n var _a;\n function createEmptyLineBreakWithPossiblyInjectedText(requestIdx) {\n const injectedTexts = injectedTextsPerLine[requestIdx];\n if (injectedTexts) {\n const lineText = LineInjectedText.applyInjectedText(requests[requestIdx], injectedTexts);\n const injectionOptions = injectedTexts.map(t => t.options);\n const injectionOffsets = injectedTexts.map(text => text.column - 1);\n // creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n // because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n return new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n }\n else {\n return null;\n }\n }\n if (firstLineBreakColumn === -1) {\n const result = [];\n for (let i = 0, len = requests.length; i < len; i++) {\n result[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n }\n return result;\n }\n const overallWidth = Math.round(firstLineBreakColumn * fontInfo.typicalHalfwidthCharacterWidth);\n const additionalIndent = (wrappingIndent === 3 /* WrappingIndent.DeepIndent */ ? 2 : wrappingIndent === 2 /* WrappingIndent.Indent */ ? 1 : 0);\n const additionalIndentSize = Math.round(tabSize * additionalIndent);\n const additionalIndentLength = Math.ceil(fontInfo.spaceWidth * additionalIndentSize);\n const containerDomNode = document.createElement('div');\n applyFontInfo(containerDomNode, fontInfo);\n const sb = new StringBuilder(10000);\n const firstNonWhitespaceIndices = [];\n const wrappedTextIndentLengths = [];\n const renderLineContents = [];\n const allCharOffsets = [];\n const allVisibleColumns = [];\n for (let i = 0; i < requests.length; i++) {\n const lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTextsPerLine[i]);\n let firstNonWhitespaceIndex = 0;\n let wrappedTextIndentLength = 0;\n let width = overallWidth;\n if (wrappingIndent !== 0 /* WrappingIndent.None */) {\n firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n if (firstNonWhitespaceIndex === -1) {\n // all whitespace line\n firstNonWhitespaceIndex = 0;\n }\n else {\n // Track existing indent\n for (let i = 0; i < firstNonWhitespaceIndex; i++) {\n const charWidth = (lineContent.charCodeAt(i) === 9 /* CharCode.Tab */\n ? (tabSize - (wrappedTextIndentLength % tabSize))\n : 1);\n wrappedTextIndentLength += charWidth;\n }\n const indentWidth = Math.ceil(fontInfo.spaceWidth * wrappedTextIndentLength);\n // Force sticking to beginning of line if no character would fit except for the indentation\n if (indentWidth + fontInfo.typicalFullwidthCharacterWidth > overallWidth) {\n firstNonWhitespaceIndex = 0;\n wrappedTextIndentLength = 0;\n }\n else {\n width = overallWidth - indentWidth;\n }\n }\n }\n const renderLineContent = lineContent.substr(firstNonWhitespaceIndex);\n const tmp = renderLine(renderLineContent, wrappedTextIndentLength, tabSize, width, sb, additionalIndentLength);\n firstNonWhitespaceIndices[i] = firstNonWhitespaceIndex;\n wrappedTextIndentLengths[i] = wrappedTextIndentLength;\n renderLineContents[i] = renderLineContent;\n allCharOffsets[i] = tmp[0];\n allVisibleColumns[i] = tmp[1];\n }\n const html = sb.build();\n const trustedhtml = (_a = ttPolicy === null || ttPolicy === void 0 ? void 0 : ttPolicy.createHTML(html)) !== null && _a !== void 0 ? _a : html;\n containerDomNode.innerHTML = trustedhtml;\n containerDomNode.style.position = 'absolute';\n containerDomNode.style.top = '10000';\n if (wordBreak === 'keepAll') {\n // word-break: keep-all; overflow-wrap: anywhere\n containerDomNode.style.wordBreak = 'keep-all';\n containerDomNode.style.overflowWrap = 'anywhere';\n }\n else {\n // overflow-wrap: break-word\n containerDomNode.style.wordBreak = 'inherit';\n containerDomNode.style.overflowWrap = 'break-word';\n }\n targetWindow.document.body.appendChild(containerDomNode);\n const range = document.createRange();\n const lineDomNodes = Array.prototype.slice.call(containerDomNode.children, 0);\n const result = [];\n for (let i = 0; i < requests.length; i++) {\n const lineDomNode = lineDomNodes[i];\n const breakOffsets = readLineBreaks(range, lineDomNode, renderLineContents[i], allCharOffsets[i]);\n if (breakOffsets === null) {\n result[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n continue;\n }\n const firstNonWhitespaceIndex = firstNonWhitespaceIndices[i];\n const wrappedTextIndentLength = wrappedTextIndentLengths[i] + additionalIndentSize;\n const visibleColumns = allVisibleColumns[i];\n const breakOffsetsVisibleColumn = [];\n for (let j = 0, len = breakOffsets.length; j < len; j++) {\n breakOffsetsVisibleColumn[j] = visibleColumns[breakOffsets[j]];\n }\n if (firstNonWhitespaceIndex !== 0) {\n // All break offsets are relative to the renderLineContent, make them absolute again\n for (let j = 0, len = breakOffsets.length; j < len; j++) {\n breakOffsets[j] += firstNonWhitespaceIndex;\n }\n }\n let injectionOptions;\n let injectionOffsets;\n const curInjectedTexts = injectedTextsPerLine[i];\n if (curInjectedTexts) {\n injectionOptions = curInjectedTexts.map(t => t.options);\n injectionOffsets = curInjectedTexts.map(text => text.column - 1);\n }\n else {\n injectionOptions = null;\n injectionOffsets = null;\n }\n result[i] = new ModelLineProjectionData(injectionOffsets, injectionOptions, breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength);\n }\n targetWindow.document.body.removeChild(containerDomNode);\n return result;\n}\nfunction renderLine(lineContent, initialVisibleColumn, tabSize, width, sb, wrappingIndentLength) {\n if (wrappingIndentLength !== 0) {\n const hangingOffset = String(wrappingIndentLength);\n sb.appendString('
');\n // if (containsRTL) {\n // \tsb.appendASCIIString('\" dir=\"ltr');\n // }\n const len = lineContent.length;\n let visibleColumn = initialVisibleColumn;\n let charOffset = 0;\n const charOffsets = [];\n const visibleColumns = [];\n let nextCharCode = (0 < len ? lineContent.charCodeAt(0) : 0 /* CharCode.Null */);\n sb.appendString('');\n for (let charIndex = 0; charIndex < len; charIndex++) {\n if (charIndex !== 0 && charIndex % 16384 /* Constants.SPAN_MODULO_LIMIT */ === 0) {\n sb.appendString('');\n }\n charOffsets[charIndex] = charOffset;\n visibleColumns[charIndex] = visibleColumn;\n const charCode = nextCharCode;\n nextCharCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : 0 /* CharCode.Null */);\n let producedCharacters = 1;\n let charWidth = 1;\n switch (charCode) {\n case 9 /* CharCode.Tab */:\n producedCharacters = (tabSize - (visibleColumn % tabSize));\n charWidth = producedCharacters;\n for (let space = 1; space <= producedCharacters; space++) {\n if (space < producedCharacters) {\n sb.appendCharCode(0xA0); //  \n }\n else {\n sb.appendASCIICharCode(32 /* CharCode.Space */);\n }\n }\n break;\n case 32 /* CharCode.Space */:\n if (nextCharCode === 32 /* CharCode.Space */) {\n sb.appendCharCode(0xA0); //  \n }\n else {\n sb.appendASCIICharCode(32 /* CharCode.Space */);\n }\n break;\n case 60 /* CharCode.LessThan */:\n sb.appendString('<');\n break;\n case 62 /* CharCode.GreaterThan */:\n sb.appendString('>');\n break;\n case 38 /* CharCode.Ampersand */:\n sb.appendString('&');\n break;\n case 0 /* CharCode.Null */:\n sb.appendString('�');\n break;\n case 65279 /* CharCode.UTF8_BOM */:\n case 8232 /* CharCode.LINE_SEPARATOR */:\n case 8233 /* CharCode.PARAGRAPH_SEPARATOR */:\n case 133 /* CharCode.NEXT_LINE */:\n sb.appendCharCode(0xFFFD);\n break;\n default:\n if (strings.isFullWidthCharacter(charCode)) {\n charWidth++;\n }\n if (charCode < 32) {\n sb.appendCharCode(9216 + charCode);\n }\n else {\n sb.appendCharCode(charCode);\n }\n }\n charOffset += producedCharacters;\n visibleColumn += charWidth;\n }\n sb.appendString('');\n charOffsets[lineContent.length] = charOffset;\n visibleColumns[lineContent.length] = visibleColumn;\n sb.appendString('
');\n return [charOffsets, visibleColumns];\n}\nfunction readLineBreaks(range, lineDomNode, lineContent, charOffsets) {\n if (lineContent.length <= 1) {\n return null;\n }\n const spans = Array.prototype.slice.call(lineDomNode.children, 0);\n const breakOffsets = [];\n try {\n discoverBreaks(range, spans, charOffsets, 0, null, lineContent.length - 1, null, breakOffsets);\n }\n catch (err) {\n console.log(err);\n return null;\n }\n if (breakOffsets.length === 0) {\n return null;\n }\n breakOffsets.push(lineContent.length);\n return breakOffsets;\n}\nfunction discoverBreaks(range, spans, charOffsets, low, lowRects, high, highRects, result) {\n if (low === high) {\n return;\n }\n lowRects = lowRects || readClientRect(range, spans, charOffsets[low], charOffsets[low + 1]);\n highRects = highRects || readClientRect(range, spans, charOffsets[high], charOffsets[high + 1]);\n if (Math.abs(lowRects[0].top - highRects[0].top) <= 0.1) {\n // same line\n return;\n }\n // there is at least one line break between these two offsets\n if (low + 1 === high) {\n // the two characters are adjacent, so the line break must be exactly between them\n result.push(high);\n return;\n }\n const mid = low + ((high - low) / 2) | 0;\n const midRects = readClientRect(range, spans, charOffsets[mid], charOffsets[mid + 1]);\n discoverBreaks(range, spans, charOffsets, low, lowRects, mid, midRects, result);\n discoverBreaks(range, spans, charOffsets, mid, midRects, high, highRects, result);\n}\nfunction readClientRect(range, spans, startOffset, endOffset) {\n range.setStart(spans[(startOffset / 16384 /* Constants.SPAN_MODULO_LIMIT */) | 0].firstChild, startOffset % 16384 /* Constants.SPAN_MODULO_LIMIT */);\n range.setEnd(spans[(endOffset / 16384 /* Constants.SPAN_MODULO_LIMIT */) | 0].firstChild, endOffset % 16384 /* Constants.SPAN_MODULO_LIMIT */);\n return range.getClientRects();\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 { ViewEventHandler } from '../../common/viewEventHandler.js';\nexport class DynamicViewOverlay extends ViewEventHandler {\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 './scrollDecoration.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { ViewPart } from '../../view/viewPart.js';\nexport class ScrollDecorationViewPart extends ViewPart {\n constructor(context) {\n super(context);\n this._scrollTop = 0;\n this._width = 0;\n this._updateWidth();\n this._shouldShow = false;\n const options = this._context.configuration.options;\n const scrollbar = options.get(103 /* EditorOption.scrollbar */);\n this._useShadows = scrollbar.useShadows;\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n }\n dispose() {\n super.dispose();\n }\n _updateShouldShow() {\n const newShouldShow = (this._useShadows && this._scrollTop > 0);\n if (this._shouldShow !== newShouldShow) {\n this._shouldShow = newShouldShow;\n return true;\n }\n return false;\n }\n getDomNode() {\n return this._domNode;\n }\n _updateWidth() {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(145 /* EditorOption.layoutInfo */);\n if (layoutInfo.minimap.renderMinimap === 0 || (layoutInfo.minimap.minimapWidth > 0 && layoutInfo.minimap.minimapLeft === 0)) {\n this._width = layoutInfo.width;\n }\n else {\n this._width = layoutInfo.width - layoutInfo.verticalScrollbarWidth;\n }\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const scrollbar = options.get(103 /* EditorOption.scrollbar */);\n this._useShadows = scrollbar.useShadows;\n this._updateWidth();\n this._updateShouldShow();\n return true;\n }\n onScrollChanged(e) {\n this._scrollTop = e.scrollTop;\n return this._updateShouldShow();\n }\n // --- end event handlers\n prepareRender(ctx) {\n // Nothing to read\n }\n render(ctx) {\n this._domNode.setWidth(this._width);\n this._domNode.setClassName(this._shouldShow ? 'scroll-decoration' : '');\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 './selections.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { editorSelectionForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nclass HorizontalRangeWithStyle {\n constructor(other) {\n this.left = other.left;\n this.width = other.width;\n this.startStyle = null;\n this.endStyle = null;\n }\n}\nclass LineVisibleRangesWithStyle {\n constructor(lineNumber, ranges) {\n this.lineNumber = lineNumber;\n this.ranges = ranges;\n }\n}\nfunction toStyledRange(item) {\n return new HorizontalRangeWithStyle(item);\n}\nfunction toStyled(item) {\n return new LineVisibleRangesWithStyle(item.lineNumber, item.ranges.map(toStyledRange));\n}\nexport class SelectionsOverlay extends DynamicViewOverlay {\n constructor(context) {\n super();\n this._previousFrameVisibleRangesWithStyle = [];\n this._context = context;\n const options = this._context.configuration.options;\n this._roundedSelection = options.get(101 /* EditorOption.roundedSelection */);\n this._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.fontInfo */).typicalHalfwidthCharacterWidth;\n this._selections = [];\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 const options = this._context.configuration.options;\n this._roundedSelection = options.get(101 /* EditorOption.roundedSelection */);\n this._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.fontInfo */).typicalHalfwidthCharacterWidth;\n return true;\n }\n onCursorStateChanged(e) {\n this._selections = e.selections.slice(0);\n return true;\n }\n onDecorationsChanged(e) {\n // true for inline decorations that can end up relayouting text\n return true; //e.inlineDecorationsChanged;\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 _visibleRangesHaveGaps(linesVisibleRanges) {\n for (let i = 0, len = linesVisibleRanges.length; i < len; i++) {\n const lineVisibleRanges = linesVisibleRanges[i];\n if (lineVisibleRanges.ranges.length > 1) {\n // There are two ranges on the same line\n return true;\n }\n }\n return false;\n }\n _enrichVisibleRangesWithStyle(viewport, linesVisibleRanges, previousFrame) {\n const epsilon = this._typicalHalfwidthCharacterWidth / 4;\n let previousFrameTop = null;\n let previousFrameBottom = null;\n if (previousFrame && previousFrame.length > 0 && linesVisibleRanges.length > 0) {\n const topLineNumber = linesVisibleRanges[0].lineNumber;\n if (topLineNumber === viewport.startLineNumber) {\n for (let i = 0; !previousFrameTop && i < previousFrame.length; i++) {\n if (previousFrame[i].lineNumber === topLineNumber) {\n previousFrameTop = previousFrame[i].ranges[0];\n }\n }\n }\n const bottomLineNumber = linesVisibleRanges[linesVisibleRanges.length - 1].lineNumber;\n if (bottomLineNumber === viewport.endLineNumber) {\n for (let i = previousFrame.length - 1; !previousFrameBottom && i >= 0; i--) {\n if (previousFrame[i].lineNumber === bottomLineNumber) {\n previousFrameBottom = previousFrame[i].ranges[0];\n }\n }\n }\n if (previousFrameTop && !previousFrameTop.startStyle) {\n previousFrameTop = null;\n }\n if (previousFrameBottom && !previousFrameBottom.startStyle) {\n previousFrameBottom = null;\n }\n }\n for (let i = 0, len = linesVisibleRanges.length; i < len; i++) {\n // We know for a fact that there is precisely one range on each line\n const curLineRange = linesVisibleRanges[i].ranges[0];\n const curLeft = curLineRange.left;\n const curRight = curLineRange.left + curLineRange.width;\n const startStyle = {\n top: 0 /* CornerStyle.EXTERN */,\n bottom: 0 /* CornerStyle.EXTERN */\n };\n const endStyle = {\n top: 0 /* CornerStyle.EXTERN */,\n bottom: 0 /* CornerStyle.EXTERN */\n };\n if (i > 0) {\n // Look above\n const prevLeft = linesVisibleRanges[i - 1].ranges[0].left;\n const prevRight = linesVisibleRanges[i - 1].ranges[0].left + linesVisibleRanges[i - 1].ranges[0].width;\n if (abs(curLeft - prevLeft) < epsilon) {\n startStyle.top = 2 /* CornerStyle.FLAT */;\n }\n else if (curLeft > prevLeft) {\n startStyle.top = 1 /* CornerStyle.INTERN */;\n }\n if (abs(curRight - prevRight) < epsilon) {\n endStyle.top = 2 /* CornerStyle.FLAT */;\n }\n else if (prevLeft < curRight && curRight < prevRight) {\n endStyle.top = 1 /* CornerStyle.INTERN */;\n }\n }\n else if (previousFrameTop) {\n // Accept some hiccups near the viewport edges to save on repaints\n startStyle.top = previousFrameTop.startStyle.top;\n endStyle.top = previousFrameTop.endStyle.top;\n }\n if (i + 1 < len) {\n // Look below\n const nextLeft = linesVisibleRanges[i + 1].ranges[0].left;\n const nextRight = linesVisibleRanges[i + 1].ranges[0].left + linesVisibleRanges[i + 1].ranges[0].width;\n if (abs(curLeft - nextLeft) < epsilon) {\n startStyle.bottom = 2 /* CornerStyle.FLAT */;\n }\n else if (nextLeft < curLeft && curLeft < nextRight) {\n startStyle.bottom = 1 /* CornerStyle.INTERN */;\n }\n if (abs(curRight - nextRight) < epsilon) {\n endStyle.bottom = 2 /* CornerStyle.FLAT */;\n }\n else if (curRight < nextRight) {\n endStyle.bottom = 1 /* CornerStyle.INTERN */;\n }\n }\n else if (previousFrameBottom) {\n // Accept some hiccups near the viewport edges to save on repaints\n startStyle.bottom = previousFrameBottom.startStyle.bottom;\n endStyle.bottom = previousFrameBottom.endStyle.bottom;\n }\n curLineRange.startStyle = startStyle;\n curLineRange.endStyle = endStyle;\n }\n }\n _getVisibleRangesWithStyle(selection, ctx, previousFrame) {\n const _linesVisibleRanges = ctx.linesVisibleRangesForRange(selection, true) || [];\n const linesVisibleRanges = _linesVisibleRanges.map(toStyled);\n const visibleRangesHaveGaps = this._visibleRangesHaveGaps(linesVisibleRanges);\n if (!visibleRangesHaveGaps && this._roundedSelection) {\n this._enrichVisibleRangesWithStyle(ctx.visibleRange, linesVisibleRanges, previousFrame);\n }\n // The visible ranges are sorted TOP-BOTTOM and LEFT-RIGHT\n return linesVisibleRanges;\n }\n _createSelectionPiece(top, bottom, className, left, width) {\n return ('
');\n }\n _actualRenderOneSelection(output2, visibleStartLineNumber, hasMultipleSelections, visibleRanges) {\n if (visibleRanges.length === 0) {\n return;\n }\n const visibleRangesHaveStyle = !!visibleRanges[0].ranges[0].startStyle;\n const firstLineNumber = visibleRanges[0].lineNumber;\n const lastLineNumber = visibleRanges[visibleRanges.length - 1].lineNumber;\n for (let i = 0, len = visibleRanges.length; i < len; i++) {\n const lineVisibleRanges = visibleRanges[i];\n const lineNumber = lineVisibleRanges.lineNumber;\n const lineIndex = lineNumber - visibleStartLineNumber;\n const top = hasMultipleSelections ? (lineNumber === firstLineNumber ? 1 : 0) : 0;\n const bottom = hasMultipleSelections ? (lineNumber !== firstLineNumber && lineNumber === lastLineNumber ? 1 : 0) : 0;\n let innerCornerOutput = '';\n let restOfSelectionOutput = '';\n for (let j = 0, lenJ = lineVisibleRanges.ranges.length; j < lenJ; j++) {\n const visibleRange = lineVisibleRanges.ranges[j];\n if (visibleRangesHaveStyle) {\n const startStyle = visibleRange.startStyle;\n const endStyle = visibleRange.endStyle;\n if (startStyle.top === 1 /* CornerStyle.INTERN */ || startStyle.bottom === 1 /* CornerStyle.INTERN */) {\n // Reverse rounded corner to the left\n // First comes the selection (blue layer)\n innerCornerOutput += this._createSelectionPiece(top, bottom, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n // Second comes the background (white layer) with inverse border radius\n let className = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\n if (startStyle.top === 1 /* CornerStyle.INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n }\n if (startStyle.bottom === 1 /* CornerStyle.INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n }\n innerCornerOutput += this._createSelectionPiece(top, bottom, className, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n }\n if (endStyle.top === 1 /* CornerStyle.INTERN */ || endStyle.bottom === 1 /* CornerStyle.INTERN */) {\n // Reverse rounded corner to the right\n // First comes the selection (blue layer)\n innerCornerOutput += this._createSelectionPiece(top, bottom, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n // Second comes the background (white layer) with inverse border radius\n let className = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\n if (endStyle.top === 1 /* CornerStyle.INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n }\n if (endStyle.bottom === 1 /* CornerStyle.INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n }\n innerCornerOutput += this._createSelectionPiece(top, bottom, className, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n }\n }\n let className = SelectionsOverlay.SELECTION_CLASS_NAME;\n if (visibleRangesHaveStyle) {\n const startStyle = visibleRange.startStyle;\n const endStyle = visibleRange.endStyle;\n if (startStyle.top === 0 /* CornerStyle.EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n }\n if (startStyle.bottom === 0 /* CornerStyle.EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n }\n if (endStyle.top === 0 /* CornerStyle.EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n }\n if (endStyle.bottom === 0 /* CornerStyle.EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n }\n }\n restOfSelectionOutput += this._createSelectionPiece(top, bottom, className, visibleRange.left, visibleRange.width);\n }\n output2[lineIndex][0] += innerCornerOutput;\n output2[lineIndex][1] += restOfSelectionOutput;\n }\n }\n prepareRender(ctx) {\n // Build HTML for inner corners separate from HTML for the rest of selections,\n // as the inner corner HTML can interfere with that of other selections.\n // In final render, make sure to place the inner corner HTML before the rest of selection HTML. See issue #77777.\n const output = [];\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n output[lineIndex] = ['', ''];\n }\n const thisFrameVisibleRangesWithStyle = [];\n for (let i = 0, len = this._selections.length; i < len; i++) {\n const selection = this._selections[i];\n if (selection.isEmpty()) {\n thisFrameVisibleRangesWithStyle[i] = null;\n continue;\n }\n const visibleRangesWithStyle = this._getVisibleRangesWithStyle(selection, ctx, this._previousFrameVisibleRangesWithStyle[i]);\n thisFrameVisibleRangesWithStyle[i] = visibleRangesWithStyle;\n this._actualRenderOneSelection(output, visibleStartLineNumber, this._selections.length > 1, visibleRangesWithStyle);\n }\n this._previousFrameVisibleRangesWithStyle = thisFrameVisibleRangesWithStyle;\n this._renderResult = output.map(([internalCorners, restOfSelection]) => internalCorners + restOfSelection);\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n return '';\n }\n return this._renderResult[lineIndex];\n }\n}\nSelectionsOverlay.SELECTION_CLASS_NAME = 'selected-text';\nSelectionsOverlay.SELECTION_TOP_LEFT = 'top-left-radius';\nSelectionsOverlay.SELECTION_BOTTOM_LEFT = 'bottom-left-radius';\nSelectionsOverlay.SELECTION_TOP_RIGHT = 'top-right-radius';\nSelectionsOverlay.SELECTION_BOTTOM_RIGHT = 'bottom-right-radius';\nSelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME = 'monaco-editor-background';\nSelectionsOverlay.ROUNDED_PIECE_WIDTH = 10;\nregisterThemingParticipant((theme, collector) => {\n const editorSelectionForegroundColor = theme.getColor(editorSelectionForeground);\n if (editorSelectionForegroundColor && !editorSelectionForegroundColor.isTransparent()) {\n collector.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${editorSelectionForegroundColor}; }`);\n }\n});\nfunction abs(n) {\n return n < 0 ? -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 * as dom from '../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../config/domFontInfo.js';\nimport { TextEditorCursorStyle } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nclass ViewCursorRenderData {\n constructor(top, left, paddingLeft, width, height, textContent, textContentClassName) {\n this.top = top;\n this.left = left;\n this.paddingLeft = paddingLeft;\n this.width = width;\n this.height = height;\n this.textContent = textContent;\n this.textContentClassName = textContentClassName;\n }\n}\nexport var CursorPlurality;\n(function (CursorPlurality) {\n CursorPlurality[CursorPlurality[\"Single\"] = 0] = \"Single\";\n CursorPlurality[CursorPlurality[\"MultiPrimary\"] = 1] = \"MultiPrimary\";\n CursorPlurality[CursorPlurality[\"MultiSecondary\"] = 2] = \"MultiSecondary\";\n})(CursorPlurality || (CursorPlurality = {}));\nexport class ViewCursor {\n constructor(context, plurality) {\n this._context = context;\n const options = this._context.configuration.options;\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this._lineCursorWidth = Math.min(options.get(31 /* EditorOption.cursorWidth */), this._typicalHalfwidthCharacterWidth);\n this._isVisible = true;\n // Create the dom node\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setClassName(`cursor ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n this._domNode.setHeight(this._lineHeight);\n this._domNode.setTop(0);\n this._domNode.setLeft(0);\n applyFontInfo(this._domNode, fontInfo);\n this._domNode.setDisplay('none');\n this._position = new Position(1, 1);\n this._pluralityClass = '';\n this.setPlurality(plurality);\n this._lastRenderedContent = '';\n this._renderData = null;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return this._position;\n }\n setPlurality(plurality) {\n switch (plurality) {\n default:\n case CursorPlurality.Single:\n this._pluralityClass = '';\n break;\n case CursorPlurality.MultiPrimary:\n this._pluralityClass = 'cursor-primary';\n break;\n case CursorPlurality.MultiSecondary:\n this._pluralityClass = 'cursor-secondary';\n break;\n }\n }\n show() {\n if (!this._isVisible) {\n this._domNode.setVisibility('inherit');\n this._isVisible = true;\n }\n }\n hide() {\n if (this._isVisible) {\n this._domNode.setVisibility('hidden');\n this._isVisible = false;\n }\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this._lineCursorWidth = Math.min(options.get(31 /* EditorOption.cursorWidth */), this._typicalHalfwidthCharacterWidth);\n applyFontInfo(this._domNode, fontInfo);\n return true;\n }\n onCursorPositionChanged(position, pauseAnimation) {\n if (pauseAnimation) {\n this._domNode.domNode.style.transitionProperty = 'none';\n }\n else {\n this._domNode.domNode.style.transitionProperty = '';\n }\n this._position = position;\n return true;\n }\n /**\n * If `this._position` is inside a grapheme, returns the position where the grapheme starts.\n * Also returns the next grapheme.\n */\n _getGraphemeAwarePosition() {\n const { lineNumber, column } = this._position;\n const lineContent = this._context.viewModel.getLineContent(lineNumber);\n const [startOffset, endOffset] = strings.getCharContainingOffset(lineContent, column - 1);\n return [new Position(lineNumber, startOffset + 1), lineContent.substring(startOffset, endOffset)];\n }\n _prepareRender(ctx) {\n let textContent = '';\n let textContentClassName = '';\n const [position, nextGrapheme] = this._getGraphemeAwarePosition();\n if (this._cursorStyle === TextEditorCursorStyle.Line || this._cursorStyle === TextEditorCursorStyle.LineThin) {\n const visibleRange = ctx.visibleRangeForPosition(position);\n if (!visibleRange || visibleRange.outsideRenderedLine) {\n // Outside viewport\n return null;\n }\n const window = dom.getWindow(this._domNode.domNode);\n let width;\n if (this._cursorStyle === TextEditorCursorStyle.Line) {\n width = dom.computeScreenAwareSize(window, this._lineCursorWidth > 0 ? this._lineCursorWidth : 2);\n if (width > 2) {\n textContent = nextGrapheme;\n textContentClassName = this._getTokenClassName(position);\n }\n }\n else {\n width = dom.computeScreenAwareSize(window, 1);\n }\n let left = visibleRange.left;\n let paddingLeft = 0;\n if (width >= 2 && left >= 1) {\n // shift the cursor a bit between the characters\n paddingLeft = 1;\n left -= paddingLeft;\n }\n const top = ctx.getVerticalOffsetForLineNumber(position.lineNumber) - ctx.bigNumbersDelta;\n return new ViewCursorRenderData(top, left, paddingLeft, width, this._lineHeight, textContent, textContentClassName);\n }\n const visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(position.lineNumber, position.column, position.lineNumber, position.column + nextGrapheme.length), false);\n if (!visibleRangeForCharacter || visibleRangeForCharacter.length === 0) {\n // Outside viewport\n return null;\n }\n const firstVisibleRangeForCharacter = visibleRangeForCharacter[0];\n if (firstVisibleRangeForCharacter.outsideRenderedLine || firstVisibleRangeForCharacter.ranges.length === 0) {\n // Outside viewport\n return null;\n }\n const range = firstVisibleRangeForCharacter.ranges[0];\n const width = (nextGrapheme === '\\t'\n ? this._typicalHalfwidthCharacterWidth\n : (range.width < 1\n ? this._typicalHalfwidthCharacterWidth\n : range.width));\n if (this._cursorStyle === TextEditorCursorStyle.Block) {\n textContent = nextGrapheme;\n textContentClassName = this._getTokenClassName(position);\n }\n let top = ctx.getVerticalOffsetForLineNumber(position.lineNumber) - ctx.bigNumbersDelta;\n let height = this._lineHeight;\n // Underline might interfere with clicking\n if (this._cursorStyle === TextEditorCursorStyle.Underline || this._cursorStyle === TextEditorCursorStyle.UnderlineThin) {\n top += this._lineHeight - 2;\n height = 2;\n }\n return new ViewCursorRenderData(top, range.left, 0, width, height, textContent, textContentClassName);\n }\n _getTokenClassName(position) {\n const lineData = this._context.viewModel.getViewLineData(position.lineNumber);\n const tokenIndex = lineData.tokens.findTokenIndexAtOffset(position.column - 1);\n return lineData.tokens.getClassName(tokenIndex);\n }\n prepareRender(ctx) {\n this._renderData = this._prepareRender(ctx);\n }\n render(ctx) {\n if (!this._renderData) {\n this._domNode.setDisplay('none');\n return null;\n }\n if (this._lastRenderedContent !== this._renderData.textContent) {\n this._lastRenderedContent = this._renderData.textContent;\n this._domNode.domNode.textContent = this._lastRenderedContent;\n }\n this._domNode.setClassName(`cursor ${this._pluralityClass} ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ${this._renderData.textContentClassName}`);\n this._domNode.setDisplay('block');\n this._domNode.setTop(this._renderData.top);\n this._domNode.setLeft(this._renderData.left);\n this._domNode.setPaddingLeft(this._renderData.paddingLeft);\n this._domNode.setWidth(this._renderData.width);\n this._domNode.setLineHeight(this._renderData.height);\n this._domNode.setHeight(this._renderData.height);\n return {\n domNode: this._domNode.domNode,\n position: this._position,\n contentLeft: this._renderData.left,\n height: this._renderData.height,\n width: 2\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 './viewCursors.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { TimeoutTimer } from '../../../../base/common/async.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { ViewCursor, CursorPlurality } from './viewCursor.js';\nimport { TextEditorCursorStyle } from '../../../common/config/editorOptions.js';\nimport { editorCursorBackground, editorCursorForeground, editorMultiCursorPrimaryForeground, editorMultiCursorPrimaryBackground, editorMultiCursorSecondaryForeground, editorMultiCursorSecondaryBackground } from '../../../common/core/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { WindowIntervalTimer, getWindow } from '../../../../base/browser/dom.js';\nexport class ViewCursors extends ViewPart {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n this._readOnly = options.get(91 /* EditorOption.readOnly */);\n this._cursorBlinking = options.get(26 /* EditorOption.cursorBlinking */);\n this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n this._cursorSmoothCaretAnimation = options.get(27 /* EditorOption.cursorSmoothCaretAnimation */);\n this._selectionIsEmpty = true;\n this._isComposingInput = false;\n this._isVisible = false;\n this._primaryCursor = new ViewCursor(this._context, CursorPlurality.Single);\n this._secondaryCursors = [];\n this._renderData = [];\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._updateDomClassName();\n this._domNode.appendChild(this._primaryCursor.getDomNode());\n this._startCursorBlinkAnimation = new TimeoutTimer();\n this._cursorFlatBlinkInterval = new WindowIntervalTimer();\n this._blinkingEnabled = false;\n this._editorHasFocus = false;\n this._updateBlinking();\n }\n dispose() {\n super.dispose();\n this._startCursorBlinkAnimation.dispose();\n this._cursorFlatBlinkInterval.dispose();\n }\n getDomNode() {\n return this._domNode;\n }\n // --- begin event handlers\n onCompositionStart(e) {\n this._isComposingInput = true;\n this._updateBlinking();\n return true;\n }\n onCompositionEnd(e) {\n this._isComposingInput = false;\n this._updateBlinking();\n return true;\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n this._readOnly = options.get(91 /* EditorOption.readOnly */);\n this._cursorBlinking = options.get(26 /* EditorOption.cursorBlinking */);\n this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n this._cursorSmoothCaretAnimation = options.get(27 /* EditorOption.cursorSmoothCaretAnimation */);\n this._updateBlinking();\n this._updateDomClassName();\n this._primaryCursor.onConfigurationChanged(e);\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].onConfigurationChanged(e);\n }\n return true;\n }\n _onCursorPositionChanged(position, secondaryPositions, reason) {\n const pauseAnimation = (this._secondaryCursors.length !== secondaryPositions.length\n || (this._cursorSmoothCaretAnimation === 'explicit' && reason !== 3 /* CursorChangeReason.Explicit */));\n this._primaryCursor.setPlurality(secondaryPositions.length ? CursorPlurality.MultiPrimary : CursorPlurality.Single);\n this._primaryCursor.onCursorPositionChanged(position, pauseAnimation);\n this._updateBlinking();\n if (this._secondaryCursors.length < secondaryPositions.length) {\n // Create new cursors\n const addCnt = secondaryPositions.length - this._secondaryCursors.length;\n for (let i = 0; i < addCnt; i++) {\n const newCursor = new ViewCursor(this._context, CursorPlurality.MultiSecondary);\n this._domNode.domNode.insertBefore(newCursor.getDomNode().domNode, this._primaryCursor.getDomNode().domNode.nextSibling);\n this._secondaryCursors.push(newCursor);\n }\n }\n else if (this._secondaryCursors.length > secondaryPositions.length) {\n // Remove some cursors\n const removeCnt = this._secondaryCursors.length - secondaryPositions.length;\n for (let i = 0; i < removeCnt; i++) {\n this._domNode.removeChild(this._secondaryCursors[0].getDomNode());\n this._secondaryCursors.splice(0, 1);\n }\n }\n for (let i = 0; i < secondaryPositions.length; i++) {\n this._secondaryCursors[i].onCursorPositionChanged(secondaryPositions[i], pauseAnimation);\n }\n }\n onCursorStateChanged(e) {\n const positions = [];\n for (let i = 0, len = e.selections.length; i < len; i++) {\n positions[i] = e.selections[i].getPosition();\n }\n this._onCursorPositionChanged(positions[0], positions.slice(1), e.reason);\n const selectionIsEmpty = e.selections[0].isEmpty();\n if (this._selectionIsEmpty !== selectionIsEmpty) {\n this._selectionIsEmpty = selectionIsEmpty;\n this._updateDomClassName();\n }\n return true;\n }\n onDecorationsChanged(e) {\n // true for inline decorations that can end up relayouting text\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onFocusChanged(e) {\n this._editorHasFocus = e.isFocused;\n this._updateBlinking();\n return false;\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 true;\n }\n onTokensChanged(e) {\n const shouldRender = (position) => {\n for (let i = 0, len = e.ranges.length; i < len; i++) {\n if (e.ranges[i].fromLineNumber <= position.lineNumber && position.lineNumber <= e.ranges[i].toLineNumber) {\n return true;\n }\n }\n return false;\n };\n if (shouldRender(this._primaryCursor.getPosition())) {\n return true;\n }\n for (const secondaryCursor of this._secondaryCursors) {\n if (shouldRender(secondaryCursor.getPosition())) {\n return true;\n }\n }\n return false;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n // ---- blinking logic\n _getCursorBlinking() {\n if (this._isComposingInput) {\n // avoid double cursors\n return 0 /* TextEditorCursorBlinkingStyle.Hidden */;\n }\n if (!this._editorHasFocus) {\n return 0 /* TextEditorCursorBlinkingStyle.Hidden */;\n }\n if (this._readOnly) {\n return 5 /* TextEditorCursorBlinkingStyle.Solid */;\n }\n return this._cursorBlinking;\n }\n _updateBlinking() {\n this._startCursorBlinkAnimation.cancel();\n this._cursorFlatBlinkInterval.cancel();\n const blinkingStyle = this._getCursorBlinking();\n // hidden and solid are special as they involve no animations\n const isHidden = (blinkingStyle === 0 /* TextEditorCursorBlinkingStyle.Hidden */);\n const isSolid = (blinkingStyle === 5 /* TextEditorCursorBlinkingStyle.Solid */);\n if (isHidden) {\n this._hide();\n }\n else {\n this._show();\n }\n this._blinkingEnabled = false;\n this._updateDomClassName();\n if (!isHidden && !isSolid) {\n if (blinkingStyle === 1 /* TextEditorCursorBlinkingStyle.Blink */) {\n // flat blinking is handled by JavaScript to save battery life due to Chromium step timing issue https://bugs.chromium.org/p/chromium/issues/detail?id=361587\n this._cursorFlatBlinkInterval.cancelAndSet(() => {\n if (this._isVisible) {\n this._hide();\n }\n else {\n this._show();\n }\n }, ViewCursors.BLINK_INTERVAL, getWindow(this._domNode.domNode));\n }\n else {\n this._startCursorBlinkAnimation.setIfNotSet(() => {\n this._blinkingEnabled = true;\n this._updateDomClassName();\n }, ViewCursors.BLINK_INTERVAL);\n }\n }\n }\n // --- end blinking logic\n _updateDomClassName() {\n this._domNode.setClassName(this._getClassName());\n }\n _getClassName() {\n let result = 'cursors-layer';\n if (!this._selectionIsEmpty) {\n result += ' has-selection';\n }\n switch (this._cursorStyle) {\n case TextEditorCursorStyle.Line:\n result += ' cursor-line-style';\n break;\n case TextEditorCursorStyle.Block:\n result += ' cursor-block-style';\n break;\n case TextEditorCursorStyle.Underline:\n result += ' cursor-underline-style';\n break;\n case TextEditorCursorStyle.LineThin:\n result += ' cursor-line-thin-style';\n break;\n case TextEditorCursorStyle.BlockOutline:\n result += ' cursor-block-outline-style';\n break;\n case TextEditorCursorStyle.UnderlineThin:\n result += ' cursor-underline-thin-style';\n break;\n default:\n result += ' cursor-line-style';\n }\n if (this._blinkingEnabled) {\n switch (this._getCursorBlinking()) {\n case 1 /* TextEditorCursorBlinkingStyle.Blink */:\n result += ' cursor-blink';\n break;\n case 2 /* TextEditorCursorBlinkingStyle.Smooth */:\n result += ' cursor-smooth';\n break;\n case 3 /* TextEditorCursorBlinkingStyle.Phase */:\n result += ' cursor-phase';\n break;\n case 4 /* TextEditorCursorBlinkingStyle.Expand */:\n result += ' cursor-expand';\n break;\n case 5 /* TextEditorCursorBlinkingStyle.Solid */:\n result += ' cursor-solid';\n break;\n default:\n result += ' cursor-solid';\n }\n }\n else {\n result += ' cursor-solid';\n }\n if (this._cursorSmoothCaretAnimation === 'on' || this._cursorSmoothCaretAnimation === 'explicit') {\n result += ' cursor-smooth-caret-animation';\n }\n return result;\n }\n _show() {\n this._primaryCursor.show();\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].show();\n }\n this._isVisible = true;\n }\n _hide() {\n this._primaryCursor.hide();\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].hide();\n }\n this._isVisible = false;\n }\n // ---- IViewPart implementation\n prepareRender(ctx) {\n this._primaryCursor.prepareRender(ctx);\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].prepareRender(ctx);\n }\n }\n render(ctx) {\n const renderData = [];\n let renderDataLen = 0;\n const primaryRenderData = this._primaryCursor.render(ctx);\n if (primaryRenderData) {\n renderData[renderDataLen++] = primaryRenderData;\n }\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n const secondaryRenderData = this._secondaryCursors[i].render(ctx);\n if (secondaryRenderData) {\n renderData[renderDataLen++] = secondaryRenderData;\n }\n }\n this._renderData = renderData;\n }\n getLastRenderData() {\n return this._renderData;\n }\n}\nViewCursors.BLINK_INTERVAL = 500;\nregisterThemingParticipant((theme, collector) => {\n const cursorThemes = [\n { class: '.cursor', foreground: editorCursorForeground, background: editorCursorBackground },\n { class: '.cursor-primary', foreground: editorMultiCursorPrimaryForeground, background: editorMultiCursorPrimaryBackground },\n { class: '.cursor-secondary', foreground: editorMultiCursorSecondaryForeground, background: editorMultiCursorSecondaryBackground },\n ];\n for (const cursorTheme of cursorThemes) {\n const caret = theme.getColor(cursorTheme.foreground);\n if (caret) {\n let caretBackground = theme.getColor(cursorTheme.background);\n if (!caretBackground) {\n caretBackground = caret.opposite();\n }\n collector.addRule(`.monaco-editor .cursors-layer ${cursorTheme.class} { background-color: ${caret}; border-color: ${caret}; color: ${caretBackground}; }`);\n if (isHighContrast(theme.type)) {\n collector.addRule(`.monaco-editor .cursors-layer.has-selection ${cursorTheme.class} { border-left: 1px solid ${caretBackground}; border-right: 1px solid ${caretBackground}; }`);\n }\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 { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { Position } from '../../../common/core/position.js';\nconst invalidFunc = () => { throw new Error(`Invalid change accessor`); };\nexport class ViewZones 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._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n this._contentWidth = layoutInfo.contentWidth;\n this._contentLeft = layoutInfo.contentLeft;\n this.domNode = createFastDomNode(document.createElement('div'));\n this.domNode.setClassName('view-zones');\n this.domNode.setPosition('absolute');\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n this.marginDomNode = createFastDomNode(document.createElement('div'));\n this.marginDomNode.setClassName('margin-view-zones');\n this.marginDomNode.setPosition('absolute');\n this.marginDomNode.setAttribute('role', 'presentation');\n this.marginDomNode.setAttribute('aria-hidden', 'true');\n this._zones = {};\n }\n dispose() {\n super.dispose();\n this._zones = {};\n }\n // ---- begin view event handlers\n _recomputeWhitespacesProps() {\n const whitespaces = this._context.viewLayout.getWhitespaces();\n const oldWhitespaces = new Map();\n for (const whitespace of whitespaces) {\n oldWhitespaces.set(whitespace.id, whitespace);\n }\n let hadAChange = false;\n this._context.viewModel.changeWhitespace((whitespaceAccessor) => {\n const keys = Object.keys(this._zones);\n for (let i = 0, len = keys.length; i < len; i++) {\n const id = keys[i];\n const zone = this._zones[id];\n const props = this._computeWhitespaceProps(zone.delegate);\n zone.isInHiddenArea = props.isInHiddenArea;\n const oldWhitespace = oldWhitespaces.get(id);\n if (oldWhitespace && (oldWhitespace.afterLineNumber !== props.afterViewLineNumber || oldWhitespace.height !== props.heightInPx)) {\n whitespaceAccessor.changeOneWhitespace(id, props.afterViewLineNumber, props.heightInPx);\n this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\n hadAChange = true;\n }\n }\n });\n return hadAChange;\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(145 /* EditorOption.layoutInfo */);\n this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n this._contentWidth = layoutInfo.contentWidth;\n this._contentLeft = layoutInfo.contentLeft;\n if (e.hasChanged(67 /* EditorOption.lineHeight */)) {\n this._recomputeWhitespacesProps();\n }\n return true;\n }\n onLineMappingChanged(e) {\n return this._recomputeWhitespacesProps();\n }\n onLinesDeleted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged || e.scrollWidthChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n // ---- end view event handlers\n _getZoneOrdinal(zone) {\n var _a, _b;\n return (_b = (_a = zone.ordinal) !== null && _a !== void 0 ? _a : zone.afterColumn) !== null && _b !== void 0 ? _b : 10000;\n }\n _computeWhitespaceProps(zone) {\n if (zone.afterLineNumber === 0) {\n return {\n isInHiddenArea: false,\n afterViewLineNumber: 0,\n heightInPx: this._heightInPixels(zone),\n minWidthInPx: this._minWidthInPixels(zone)\n };\n }\n let zoneAfterModelPosition;\n if (typeof zone.afterColumn !== 'undefined') {\n zoneAfterModelPosition = this._context.viewModel.model.validatePosition({\n lineNumber: zone.afterLineNumber,\n column: zone.afterColumn\n });\n }\n else {\n const validAfterLineNumber = this._context.viewModel.model.validatePosition({\n lineNumber: zone.afterLineNumber,\n column: 1\n }).lineNumber;\n zoneAfterModelPosition = new Position(validAfterLineNumber, this._context.viewModel.model.getLineMaxColumn(validAfterLineNumber));\n }\n let zoneBeforeModelPosition;\n if (zoneAfterModelPosition.column === this._context.viewModel.model.getLineMaxColumn(zoneAfterModelPosition.lineNumber)) {\n zoneBeforeModelPosition = this._context.viewModel.model.validatePosition({\n lineNumber: zoneAfterModelPosition.lineNumber + 1,\n column: 1\n });\n }\n else {\n zoneBeforeModelPosition = this._context.viewModel.model.validatePosition({\n lineNumber: zoneAfterModelPosition.lineNumber,\n column: zoneAfterModelPosition.column + 1\n });\n }\n const viewPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition, zone.afterColumnAffinity, true);\n const isVisible = zone.showInHiddenAreas || this._context.viewModel.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition);\n return {\n isInHiddenArea: !isVisible,\n afterViewLineNumber: viewPosition.lineNumber,\n heightInPx: (isVisible ? this._heightInPixels(zone) : 0),\n minWidthInPx: this._minWidthInPixels(zone)\n };\n }\n changeViewZones(callback) {\n let zonesHaveChanged = false;\n this._context.viewModel.changeWhitespace((whitespaceAccessor) => {\n const changeAccessor = {\n addZone: (zone) => {\n zonesHaveChanged = true;\n return this._addZone(whitespaceAccessor, zone);\n },\n removeZone: (id) => {\n if (!id) {\n return;\n }\n zonesHaveChanged = this._removeZone(whitespaceAccessor, id) || zonesHaveChanged;\n },\n layoutZone: (id) => {\n if (!id) {\n return;\n }\n zonesHaveChanged = this._layoutZone(whitespaceAccessor, id) || zonesHaveChanged;\n }\n };\n safeInvoke1Arg(callback, changeAccessor);\n // Invalidate changeAccessor\n changeAccessor.addZone = invalidFunc;\n changeAccessor.removeZone = invalidFunc;\n changeAccessor.layoutZone = invalidFunc;\n });\n return zonesHaveChanged;\n }\n _addZone(whitespaceAccessor, zone) {\n const props = this._computeWhitespaceProps(zone);\n const whitespaceId = whitespaceAccessor.insertWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx, props.minWidthInPx);\n const myZone = {\n whitespaceId: whitespaceId,\n delegate: zone,\n isInHiddenArea: props.isInHiddenArea,\n isVisible: false,\n domNode: createFastDomNode(zone.domNode),\n marginDomNode: zone.marginDomNode ? createFastDomNode(zone.marginDomNode) : null\n };\n this._safeCallOnComputedHeight(myZone.delegate, props.heightInPx);\n myZone.domNode.setPosition('absolute');\n myZone.domNode.domNode.style.width = '100%';\n myZone.domNode.setDisplay('none');\n myZone.domNode.setAttribute('monaco-view-zone', myZone.whitespaceId);\n this.domNode.appendChild(myZone.domNode);\n if (myZone.marginDomNode) {\n myZone.marginDomNode.setPosition('absolute');\n myZone.marginDomNode.domNode.style.width = '100%';\n myZone.marginDomNode.setDisplay('none');\n myZone.marginDomNode.setAttribute('monaco-view-zone', myZone.whitespaceId);\n this.marginDomNode.appendChild(myZone.marginDomNode);\n }\n this._zones[myZone.whitespaceId] = myZone;\n this.setShouldRender();\n return myZone.whitespaceId;\n }\n _removeZone(whitespaceAccessor, id) {\n if (this._zones.hasOwnProperty(id)) {\n const zone = this._zones[id];\n delete this._zones[id];\n whitespaceAccessor.removeWhitespace(zone.whitespaceId);\n zone.domNode.removeAttribute('monaco-visible-view-zone');\n zone.domNode.removeAttribute('monaco-view-zone');\n zone.domNode.domNode.parentNode.removeChild(zone.domNode.domNode);\n if (zone.marginDomNode) {\n zone.marginDomNode.removeAttribute('monaco-visible-view-zone');\n zone.marginDomNode.removeAttribute('monaco-view-zone');\n zone.marginDomNode.domNode.parentNode.removeChild(zone.marginDomNode.domNode);\n }\n this.setShouldRender();\n return true;\n }\n return false;\n }\n _layoutZone(whitespaceAccessor, id) {\n if (this._zones.hasOwnProperty(id)) {\n const zone = this._zones[id];\n const props = this._computeWhitespaceProps(zone.delegate);\n zone.isInHiddenArea = props.isInHiddenArea;\n // const newOrdinal = this._getZoneOrdinal(zone.delegate);\n whitespaceAccessor.changeOneWhitespace(zone.whitespaceId, props.afterViewLineNumber, props.heightInPx);\n // TODO@Alex: change `newOrdinal` too\n this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\n this.setShouldRender();\n return true;\n }\n return false;\n }\n shouldSuppressMouseDownOnViewZone(id) {\n if (this._zones.hasOwnProperty(id)) {\n const zone = this._zones[id];\n return Boolean(zone.delegate.suppressMouseDown);\n }\n return false;\n }\n _heightInPixels(zone) {\n if (typeof zone.heightInPx === 'number') {\n return zone.heightInPx;\n }\n if (typeof zone.heightInLines === 'number') {\n return this._lineHeight * zone.heightInLines;\n }\n return this._lineHeight;\n }\n _minWidthInPixels(zone) {\n if (typeof zone.minWidthInPx === 'number') {\n return zone.minWidthInPx;\n }\n return 0;\n }\n _safeCallOnComputedHeight(zone, height) {\n if (typeof zone.onComputedHeight === 'function') {\n try {\n zone.onComputedHeight(height);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n }\n _safeCallOnDomNodeTop(zone, top) {\n if (typeof zone.onDomNodeTop === 'function') {\n try {\n zone.onDomNodeTop(top);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n }\n prepareRender(ctx) {\n // Nothing to read\n }\n render(ctx) {\n const visibleWhitespaces = ctx.viewportData.whitespaceViewportData;\n const visibleZones = {};\n let hasVisibleZone = false;\n for (const visibleWhitespace of visibleWhitespaces) {\n if (this._zones[visibleWhitespace.id].isInHiddenArea) {\n continue;\n }\n visibleZones[visibleWhitespace.id] = visibleWhitespace;\n hasVisibleZone = true;\n }\n const keys = Object.keys(this._zones);\n for (let i = 0, len = keys.length; i < len; i++) {\n const id = keys[i];\n const zone = this._zones[id];\n let newTop = 0;\n let newHeight = 0;\n let newDisplay = 'none';\n if (visibleZones.hasOwnProperty(id)) {\n newTop = visibleZones[id].verticalOffset - ctx.bigNumbersDelta;\n newHeight = visibleZones[id].height;\n newDisplay = 'block';\n // zone is visible\n if (!zone.isVisible) {\n zone.domNode.setAttribute('monaco-visible-view-zone', 'true');\n zone.isVisible = true;\n }\n this._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(visibleZones[id].verticalOffset));\n }\n else {\n if (zone.isVisible) {\n zone.domNode.removeAttribute('monaco-visible-view-zone');\n zone.isVisible = false;\n }\n this._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(-1000000));\n }\n zone.domNode.setTop(newTop);\n zone.domNode.setHeight(newHeight);\n zone.domNode.setDisplay(newDisplay);\n if (zone.marginDomNode) {\n zone.marginDomNode.setTop(newTop);\n zone.marginDomNode.setHeight(newHeight);\n zone.marginDomNode.setDisplay(newDisplay);\n }\n }\n if (hasVisibleZone) {\n this.domNode.setWidth(Math.max(ctx.scrollWidth, this._contentWidth));\n this.marginDomNode.setWidth(this._contentLeft);\n }\n }\n}\nfunction safeInvoke1Arg(func, arg1) {\n try {\n return func(arg1);\n }\n catch (e) {\n onUnexpectedError(e);\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 './whitespace.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { LineRange } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { Position } from '../../../common/core/position.js';\nimport { editorWhitespaces } from '../../../common/core/editorColorRegistry.js';\nexport class WhitespaceOverlay extends DynamicViewOverlay {\n constructor(context) {\n super();\n this._context = context;\n this._options = new WhitespaceOptions(this._context.configuration);\n this._selection = [];\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 const newOptions = new WhitespaceOptions(this._context.configuration);\n if (this._options.equals(newOptions)) {\n return e.hasChanged(145 /* EditorOption.layoutInfo */);\n }\n this._options = newOptions;\n return true;\n }\n onCursorStateChanged(e) {\n this._selection = e.selections;\n if (this._options.renderWhitespace === 'selection') {\n return true;\n }\n return false;\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 prepareRender(ctx) {\n if (this._options.renderWhitespace === 'none') {\n this._renderResult = null;\n return;\n }\n const startLineNumber = ctx.visibleRange.startLineNumber;\n const endLineNumber = ctx.visibleRange.endLineNumber;\n const lineCount = endLineNumber - startLineNumber + 1;\n const needed = new Array(lineCount);\n for (let i = 0; i < lineCount; i++) {\n needed[i] = true;\n }\n const viewportData = this._context.viewModel.getMinimapLinesRenderingData(ctx.viewportData.startLineNumber, ctx.viewportData.endLineNumber, needed);\n this._renderResult = [];\n for (let lineNumber = ctx.viewportData.startLineNumber; lineNumber <= ctx.viewportData.endLineNumber; lineNumber++) {\n const lineIndex = lineNumber - ctx.viewportData.startLineNumber;\n const lineData = viewportData.data[lineIndex];\n let selectionsOnLine = null;\n if (this._options.renderWhitespace === 'selection') {\n const selections = this._selection;\n for (const selection of selections) {\n if (selection.endLineNumber < lineNumber || selection.startLineNumber > lineNumber) {\n // Selection does not intersect line\n continue;\n }\n const startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn);\n const endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn);\n if (startColumn < endColumn) {\n if (!selectionsOnLine) {\n selectionsOnLine = [];\n }\n selectionsOnLine.push(new LineRange(startColumn - 1, endColumn - 1));\n }\n }\n }\n this._renderResult[lineIndex] = this._applyRenderWhitespace(ctx, lineNumber, selectionsOnLine, lineData);\n }\n }\n _applyRenderWhitespace(ctx, lineNumber, selections, lineData) {\n if (this._options.renderWhitespace === 'selection' && !selections) {\n return '';\n }\n if (this._options.renderWhitespace === 'trailing' && lineData.continuesWithWrappedLine) {\n return '';\n }\n const color = this._context.theme.getColor(editorWhitespaces);\n const USE_SVG = this._options.renderWithSVG;\n const lineContent = lineData.content;\n const len = (this._options.stopRenderingLineAfter === -1 ? lineContent.length : Math.min(this._options.stopRenderingLineAfter, lineContent.length));\n const continuesWithWrappedLine = lineData.continuesWithWrappedLine;\n const fauxIndentLength = lineData.minColumn - 1;\n const onlyBoundary = (this._options.renderWhitespace === 'boundary');\n const onlyTrailing = (this._options.renderWhitespace === 'trailing');\n const lineHeight = this._options.lineHeight;\n const middotWidth = this._options.middotWidth;\n const wsmiddotWidth = this._options.wsmiddotWidth;\n const spaceWidth = this._options.spaceWidth;\n const wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n const middotDiff = Math.abs(middotWidth - spaceWidth);\n // U+2E31 - WORD SEPARATOR MIDDLE DOT\n // U+00B7 - MIDDLE DOT\n const renderSpaceCharCode = (wsmiddotDiff < middotDiff ? 0x2E31 : 0xB7);\n const canUseHalfwidthRightwardsArrow = this._options.canUseHalfwidthRightwardsArrow;\n let result = '';\n let lineIsEmptyOrWhitespace = false;\n let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n let lastNonWhitespaceIndex;\n if (firstNonWhitespaceIndex === -1) {\n lineIsEmptyOrWhitespace = true;\n firstNonWhitespaceIndex = len;\n lastNonWhitespaceIndex = len;\n }\n else {\n lastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n }\n let currentSelectionIndex = 0;\n let currentSelection = selections && selections[currentSelectionIndex];\n let maxLeft = 0;\n for (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n const chCode = lineContent.charCodeAt(charIndex);\n if (currentSelection && charIndex >= currentSelection.endOffset) {\n currentSelectionIndex++;\n currentSelection = selections && selections[currentSelectionIndex];\n }\n if (chCode !== 9 /* CharCode.Tab */ && chCode !== 32 /* CharCode.Space */) {\n continue;\n }\n if (onlyTrailing && !lineIsEmptyOrWhitespace && charIndex <= lastNonWhitespaceIndex) {\n // If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n continue;\n }\n if (onlyBoundary && charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex && chCode === 32 /* CharCode.Space */) {\n // rendering only boundary whitespace\n const prevChCode = (charIndex - 1 >= 0 ? lineContent.charCodeAt(charIndex - 1) : 0 /* CharCode.Null */);\n const nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : 0 /* CharCode.Null */);\n if (prevChCode !== 32 /* CharCode.Space */ && nextChCode !== 32 /* CharCode.Space */) {\n continue;\n }\n }\n if (onlyBoundary && continuesWithWrappedLine && charIndex === len - 1) {\n const prevCharCode = (charIndex - 1 >= 0 ? lineContent.charCodeAt(charIndex - 1) : 0 /* CharCode.Null */);\n const isSingleTrailingSpace = (chCode === 32 /* CharCode.Space */ && (prevCharCode !== 32 /* CharCode.Space */ && prevCharCode !== 9 /* CharCode.Tab */));\n if (isSingleTrailingSpace) {\n continue;\n }\n }\n if (selections && (!currentSelection || currentSelection.startOffset > charIndex || currentSelection.endOffset <= charIndex)) {\n // If rendering whitespace on selection, check that the charIndex falls within a selection\n continue;\n }\n const visibleRange = ctx.visibleRangeForPosition(new Position(lineNumber, charIndex + 1));\n if (!visibleRange) {\n continue;\n }\n if (USE_SVG) {\n maxLeft = Math.max(maxLeft, visibleRange.left);\n if (chCode === 9 /* CharCode.Tab */) {\n result += this._renderArrow(lineHeight, spaceWidth, visibleRange.left);\n }\n else {\n result += ``;\n }\n }\n else {\n if (chCode === 9 /* CharCode.Tab */) {\n result += `
${canUseHalfwidthRightwardsArrow ? String.fromCharCode(0xFFEB) : String.fromCharCode(0x2192)}
`;\n }\n else {\n result += `
${String.fromCharCode(renderSpaceCharCode)}
`;\n }\n }\n }\n if (USE_SVG) {\n maxLeft = Math.round(maxLeft + spaceWidth);\n return (``\n + result\n + ``);\n }\n return result;\n }\n _renderArrow(lineHeight, spaceWidth, left) {\n const strokeWidth = spaceWidth / 7;\n const width = spaceWidth;\n const dy = lineHeight / 2;\n const dx = left;\n const p1 = { x: 0, y: strokeWidth / 2 };\n const p2 = { x: 100 / 125 * width, y: p1.y };\n const p3 = { x: p2.x - 0.2 * p2.x, y: p2.y + 0.2 * p2.x };\n const p4 = { x: p3.x + 0.1 * p2.x, y: p3.y + 0.1 * p2.x };\n const p5 = { x: p4.x + 0.35 * p2.x, y: p4.y - 0.35 * p2.x };\n const p6 = { x: p5.x, y: -p5.y };\n const p7 = { x: p4.x, y: -p4.y };\n const p8 = { x: p3.x, y: -p3.y };\n const p9 = { x: p2.x, y: -p2.y };\n const p10 = { x: p1.x, y: -p1.y };\n const p = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10];\n const parts = p.map((p) => `${(dx + p.x).toFixed(2)} ${(dy + p.y).toFixed(2)}`).join(' L ');\n return ``;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n return '';\n }\n return this._renderResult[lineIndex];\n }\n}\nclass WhitespaceOptions {\n constructor(config) {\n const options = config.options;\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n const experimentalWhitespaceRendering = options.get(38 /* EditorOption.experimentalWhitespaceRendering */);\n if (experimentalWhitespaceRendering === 'off') {\n // whitespace is rendered in the view line\n this.renderWhitespace = 'none';\n this.renderWithSVG = false;\n }\n else if (experimentalWhitespaceRendering === 'svg') {\n this.renderWhitespace = options.get(99 /* EditorOption.renderWhitespace */);\n this.renderWithSVG = true;\n }\n else {\n this.renderWhitespace = options.get(99 /* EditorOption.renderWhitespace */);\n this.renderWithSVG = false;\n }\n this.spaceWidth = fontInfo.spaceWidth;\n this.middotWidth = fontInfo.middotWidth;\n this.wsmiddotWidth = fontInfo.wsmiddotWidth;\n this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow;\n this.lineHeight = options.get(67 /* EditorOption.lineHeight */);\n this.stopRenderingLineAfter = options.get(117 /* EditorOption.stopRenderingLineAfter */);\n }\n equals(other) {\n return (this.renderWhitespace === other.renderWhitespace\n && this.renderWithSVG === other.renderWithSVG\n && this.spaceWidth === other.spaceWidth\n && this.middotWidth === other.middotWidth\n && this.wsmiddotWidth === other.wsmiddotWidth\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n && this.lineHeight === other.lineHeight\n && this.stopRenderingLineAfter === other.stopRenderingLineAfter);\n }\n}\n"],"names":["ttPolicy","createHTML","value","DOMLineBreaksComputerFactory","create","targetWindow","WeakRef","constructor","this","createLineBreaksComputer","fontInfo","tabSize","wrappingColumn","wrappingIndent","wordBreak","requests","injectedTexts","addRequest","lineText","injectedText","previousLineBreakData","push","finalize","firstLineBreakColumn","injectedTextsPerLine","_a","createEmptyLineBreakWithPossiblyInjectedText","requestIdx","injectionOptions","map","t","options","injectionOffsets","text","column","length","result","i","len","overallWidth","Math","round","typicalHalfwidthCharacterWidth","additionalIndent","additionalIndentSize","additionalIndentLength","ceil","spaceWidth","containerDomNode","document","createElement","sb","firstNonWhitespaceIndices","wrappedTextIndentLengths","renderLineContents","allCharOffsets","allVisibleColumns","lineContent","firstNonWhitespaceIndex","wrappedTextIndentLength","width","charCodeAt","indentWidth","typicalFullwidthCharacterWidth","renderLineContent","substr","tmp","renderLine","html","build","trustedhtml","innerHTML","style","position","top","overflowWrap","body","appendChild","range","createRange","lineDomNodes","Array","prototype","slice","call","children","breakOffsets","readLineBreaks","visibleColumns","breakOffsetsVisibleColumn","j","curInjectedTexts","removeChild","createLineBreaks","deref","initialVisibleColumn","wrappingIndentLength","hangingOffset","String","appendString","visibleColumn","charOffset","charOffsets","nextCharCode","charIndex","charCode","producedCharacters","charWidth","space","appendCharCode","appendASCIICharCode","lineDomNode","spans","discoverBreaks","err","console","log","low","lowRects","high","highRects","readClientRect","abs","mid","midRects","startOffset","endOffset","setStart","firstChild","setEnd","getClientRects","DynamicViewOverlay","ScrollDecorationViewPart","context","super","_scrollTop","_width","_updateWidth","_shouldShow","scrollbar","_context","configuration","get","_useShadows","useShadows","_domNode","setAttribute","dispose","_updateShouldShow","newShouldShow","getDomNode","layoutInfo","minimap","renderMinimap","minimapWidth","minimapLeft","verticalScrollbarWidth","onConfigurationChanged","e","onScrollChanged","scrollTop","prepareRender","ctx","render","setWidth","setClassName","HorizontalRangeWithStyle","other","left","startStyle","endStyle","LineVisibleRangesWithStyle","lineNumber","ranges","toStyledRange","item","toStyled","SelectionsOverlay","_previousFrameVisibleRangesWithStyle","_roundedSelection","_typicalHalfwidthCharacterWidth","_selections","_renderResult","addEventHandler","removeEventHandler","onCursorStateChanged","selections","onDecorationsChanged","onFlushed","onLinesChanged","onLinesDeleted","onLinesInserted","scrollTopChanged","onZonesChanged","_visibleRangesHaveGaps","linesVisibleRanges","_enrichVisibleRangesWithStyle","viewport","previousFrame","epsilon","previousFrameTop","previousFrameBottom","topLineNumber","startLineNumber","bottomLineNumber","endLineNumber","curLineRange","curLeft","curRight","bottom","prevLeft","prevRight","nextLeft","nextRight","_getVisibleRangesWithStyle","selection","linesVisibleRangesForRange","visibleRange","_createSelectionPiece","className","toString","_actualRenderOneSelection","output2","visibleStartLineNumber","hasMultipleSelections","visibleRanges","visibleRangesHaveStyle","firstLineNumber","lastLineNumber","lineVisibleRanges","lineIndex","innerCornerOutput","restOfSelectionOutput","lenJ","SELECTION_CLASS_NAME","ROUNDED_PIECE_WIDTH","EDITOR_BACKGROUND_CLASS_NAME","SELECTION_TOP_RIGHT","SELECTION_BOTTOM_RIGHT","SELECTION_TOP_LEFT","SELECTION_BOTTOM_LEFT","output","visibleEndLineNumber","thisFrameVisibleRangesWithStyle","isEmpty","visibleRangesWithStyle","internalCorners","restOfSelection","n","theme","collector","editorSelectionForegroundColor","getColor","isTransparent","addRule","CursorPlurality","ViewCursorRenderData","paddingLeft","height","textContent","textContentClassName","ViewCursor","plurality","_cursorStyle","_lineHeight","_lineCursorWidth","min","_isVisible","setHeight","setTop","setLeft","setDisplay","_position","_pluralityClass","setPlurality","_lastRenderedContent","_renderData","getPosition","Single","MultiPrimary","MultiSecondary","show","setVisibility","hide","onCursorPositionChanged","pauseAnimation","domNode","transitionProperty","_getGraphemeAwarePosition","viewModel","getLineContent","strings","substring","_prepareRender","nextGrapheme","visibleRangeForPosition","outsideRenderedLine","window","dom","_getTokenClassName","getVerticalOffsetForLineNumber","bigNumbersDelta","visibleRangeForCharacter","firstVisibleRangeForCharacter","lineData","getViewLineData","tokenIndex","tokens","findTokenIndexAtOffset","getClassName","setPaddingLeft","setLineHeight","contentLeft","ViewCursors","_readOnly","_cursorBlinking","_cursorSmoothCaretAnimation","_selectionIsEmpty","_isComposingInput","_primaryCursor","_secondaryCursors","_updateDomClassName","_startCursorBlinkAnimation","_cursorFlatBlinkInterval","_blinkingEnabled","_editorHasFocus","_updateBlinking","onCompositionStart","onCompositionEnd","_onCursorPositionChanged","secondaryPositions","reason","addCnt","newCursor","insertBefore","nextSibling","removeCnt","splice","positions","selectionIsEmpty","onFocusChanged","isFocused","onTokensChanged","shouldRender","fromLineNumber","toLineNumber","secondaryCursor","_getCursorBlinking","cancel","blinkingStyle","isHidden","isSolid","_hide","_show","cancelAndSet","BLINK_INTERVAL","setIfNotSet","_getClassName","renderData","renderDataLen","primaryRenderData","secondaryRenderData","getLastRenderData","cursorThemes","class","foreground","background","cursorTheme","caret","caretBackground","opposite","type","invalidFunc","Error","ViewZones","_contentWidth","contentWidth","_contentLeft","setPosition","marginDomNode","_zones","_recomputeWhitespacesProps","whitespaces","viewLayout","getWhitespaces","oldWhitespaces","Map","whitespace","set","id","hadAChange","changeWhitespace","whitespaceAccessor","keys","Object","zone","props","_computeWhitespaceProps","delegate","isInHiddenArea","oldWhitespace","afterLineNumber","afterViewLineNumber","heightInPx","changeOneWhitespace","_safeCallOnComputedHeight","hasChanged","onLineMappingChanged","scrollWidthChanged","_getZoneOrdinal","_b","ordinal","afterColumn","_heightInPixels","minWidthInPx","_minWidthInPixels","zoneAfterModelPosition","zoneBeforeModelPosition","model","validatePosition","validAfterLineNumber","getLineMaxColumn","viewPosition","coordinatesConverter","convertModelPositionToViewPosition","afterColumnAffinity","isVisible","showInHiddenAreas","modelPositionIsVisible","changeViewZones","callback","zonesHaveChanged","changeAccessor","addZone","_addZone","removeZone","_removeZone","layoutZone","_layoutZone","func","arg1","safeInvoke1Arg","myZone","whitespaceId","insertWhitespace","setShouldRender","hasOwnProperty","removeWhitespace","removeAttribute","parentNode","shouldSuppressMouseDownOnViewZone","Boolean","suppressMouseDown","heightInLines","onComputedHeight","_safeCallOnDomNodeTop","onDomNodeTop","visibleWhitespaces","viewportData","whitespaceViewportData","visibleZones","hasVisibleZone","visibleWhitespace","newTop","newHeight","newDisplay","verticalOffset","getScrolledTopFromAbsoluteTop","max","scrollWidth","WhitespaceOverlay","_options","WhitespaceOptions","_selection","newOptions","equals","renderWhitespace","lineCount","needed","getMinimapLinesRenderingData","data","selectionsOnLine","startColumn","minColumn","endColumn","maxColumn","_applyRenderWhitespace","continuesWithWrappedLine","color","USE_SVG","renderWithSVG","content","stopRenderingLineAfter","fauxIndentLength","onlyBoundary","onlyTrailing","lineHeight","middotWidth","wsmiddotWidth","renderSpaceCharCode","canUseHalfwidthRightwardsArrow","lastNonWhitespaceIndex","lineIsEmptyOrWhitespace","currentSelectionIndex","currentSelection","maxLeft","chCode","prevChCode","nextChCode","prevCharCode","_renderArrow","toFixed","fromCharCode","dy","dx","p1","x","y","p2","p3","p4","p5","p","join","config","experimentalWhitespaceRendering"],"sourceRoot":""}