monaco-editor-core 0.55.1 → 0.56.0-dev-20251121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/esm/nls.keys.json +1 -1
  2. package/esm/nls.messages.cs.js +2 -2
  3. package/esm/nls.messages.de.js +2 -2
  4. package/esm/nls.messages.es.js +2 -2
  5. package/esm/nls.messages.fr.js +2 -2
  6. package/esm/nls.messages.it.js +2 -2
  7. package/esm/nls.messages.ja.js +2 -2
  8. package/esm/nls.messages.js +1 -1
  9. package/esm/nls.messages.json +1 -1
  10. package/esm/nls.messages.ko.js +2 -2
  11. package/esm/nls.messages.pl.js +2 -2
  12. package/esm/nls.messages.pt-br.js +2 -2
  13. package/esm/nls.messages.ru.js +2 -2
  14. package/esm/nls.messages.tr.js +2 -2
  15. package/esm/nls.messages.zh-cn.js +2 -2
  16. package/esm/nls.messages.zh-tw.js +2 -2
  17. package/esm/nls.metadata.json +27 -8
  18. package/esm/vs/base/browser/dom.js +31 -34
  19. package/esm/vs/base/browser/dom.js.map +1 -1
  20. package/esm/vs/base/browser/dompurify/dompurify.js +0 -1
  21. package/esm/vs/base/browser/keyboardEvent.js +3 -3
  22. package/esm/vs/base/browser/keyboardEvent.js.map +1 -1
  23. package/esm/vs/base/browser/markdownRenderer.js +5 -2
  24. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  25. package/esm/vs/base/browser/pixelRatio.js +5 -5
  26. package/esm/vs/base/browser/pixelRatio.js.map +1 -1
  27. package/esm/vs/base/browser/trustedTypes.js +1 -1
  28. package/esm/vs/base/browser/trustedTypes.js.map +1 -1
  29. package/esm/vs/base/browser/ui/actionbar/actionbar.js +3 -0
  30. package/esm/vs/base/browser/ui/actionbar/actionbar.js.map +1 -1
  31. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  32. package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +7 -0
  33. package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js.map +1 -1
  34. package/esm/vs/base/browser/ui/hover/hoverWidget.css +0 -13
  35. package/esm/vs/base/browser/ui/inputbox/inputBox.js +7 -0
  36. package/esm/vs/base/browser/ui/inputbox/inputBox.js.map +1 -1
  37. package/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.css +4 -2
  38. package/esm/vs/base/browser/ui/list/listView.js +7 -2
  39. package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
  40. package/esm/vs/base/browser/ui/selectBox/selectBox.js +4 -0
  41. package/esm/vs/base/browser/ui/selectBox/selectBox.js.map +1 -1
  42. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.css +12 -32
  43. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js +8 -18
  44. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js.map +1 -1
  45. package/esm/vs/base/browser/ui/toolbar/toolbar.js +41 -14
  46. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  47. package/esm/vs/base/browser/ui/tree/abstractTree.js +11 -0
  48. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  49. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +1 -0
  50. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  51. package/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js.map +1 -1
  52. package/esm/vs/base/browser/ui/tree/dataTree.js.map +1 -1
  53. package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
  54. package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
  55. package/esm/vs/base/browser/ui/tree/objectTreeModel.js.map +1 -1
  56. package/esm/vs/base/browser/ui/tree/tree.js.map +1 -1
  57. package/esm/vs/base/common/arrays.js +10 -0
  58. package/esm/vs/base/common/arrays.js.map +1 -1
  59. package/esm/vs/base/common/async.js +34 -0
  60. package/esm/vs/base/common/async.js.map +1 -1
  61. package/esm/vs/base/common/buffer.js +1 -1
  62. package/esm/vs/base/common/buffer.js.map +1 -1
  63. package/esm/vs/base/common/cancellation.js.map +1 -1
  64. package/esm/vs/base/common/codiconsLibrary.js +3 -0
  65. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  66. package/esm/vs/base/common/collections.js.map +1 -1
  67. package/esm/vs/base/common/equals.js.map +1 -1
  68. package/esm/vs/base/common/event.js +32 -15
  69. package/esm/vs/base/common/event.js.map +1 -1
  70. package/esm/vs/base/common/filters.js +22 -3
  71. package/esm/vs/base/common/filters.js.map +1 -1
  72. package/esm/vs/base/common/hotReload.js +2 -2
  73. package/esm/vs/base/common/hotReload.js.map +1 -1
  74. package/esm/vs/base/common/iterator.js +1 -1
  75. package/esm/vs/base/common/iterator.js.map +1 -1
  76. package/esm/vs/base/common/keyCodes.js +7 -6
  77. package/esm/vs/base/common/keyCodes.js.map +1 -1
  78. package/esm/vs/base/common/linkedList.js.map +1 -1
  79. package/esm/vs/base/common/map.js.map +1 -1
  80. package/esm/vs/base/common/marked/marked.js +0 -1
  81. package/esm/vs/base/common/network.js +26 -1
  82. package/esm/vs/base/common/network.js.map +1 -1
  83. package/esm/vs/base/common/normalization.js +19 -6
  84. package/esm/vs/base/common/normalization.js.map +1 -1
  85. package/esm/vs/base/common/observableInternal/debugLocation.js +1 -2
  86. package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
  87. package/esm/vs/base/common/observableInternal/debugName.js +0 -1
  88. package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
  89. package/esm/vs/base/common/observableInternal/index.js +4 -4
  90. package/esm/vs/base/common/observableInternal/index.js.map +1 -1
  91. package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js +38 -10
  92. package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js.map +1 -1
  93. package/esm/vs/base/common/observableInternal/observables/baseObservable.js +3 -3
  94. package/esm/vs/base/common/observableInternal/observables/baseObservable.js.map +1 -1
  95. package/esm/vs/base/common/observableInternal/utils/utils.js +46 -5
  96. package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
  97. package/esm/vs/base/common/path.js +1 -0
  98. package/esm/vs/base/common/path.js.map +1 -1
  99. package/esm/vs/base/common/strings.js +27 -19
  100. package/esm/vs/base/common/strings.js.map +1 -1
  101. package/esm/vs/editor/browser/config/elementSizeObserver.js +5 -5
  102. package/esm/vs/editor/browser/config/elementSizeObserver.js.map +1 -1
  103. package/esm/vs/editor/browser/config/fontMeasurements.js.map +1 -1
  104. package/esm/vs/editor/browser/config/migrateOptions.js +6 -0
  105. package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
  106. package/esm/vs/editor/browser/config/tabFocus.js +4 -2
  107. package/esm/vs/editor/browser/config/tabFocus.js.map +1 -1
  108. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +8 -0
  109. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
  110. package/esm/vs/editor/browser/coreCommands.js +1 -2
  111. package/esm/vs/editor/browser/coreCommands.js.map +1 -1
  112. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  113. package/esm/vs/editor/browser/observableCodeEditor.js +32 -1
  114. package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
  115. package/esm/vs/editor/browser/services/contribution.js +9 -0
  116. package/esm/vs/editor/browser/services/contribution.js.map +1 -0
  117. package/esm/vs/editor/browser/services/editorWorkerService.js +27 -14
  118. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  119. package/esm/vs/editor/browser/services/openerService.js +5 -1
  120. package/esm/vs/editor/browser/services/openerService.js.map +1 -1
  121. package/esm/vs/editor/browser/view/domLineBreaksComputer.js +1 -1
  122. package/esm/vs/editor/browser/view/domLineBreaksComputer.js.map +1 -1
  123. package/esm/vs/editor/browser/view/renderingContext.js +1 -1
  124. package/esm/vs/editor/browser/view/renderingContext.js.map +1 -1
  125. package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js +10 -3
  126. package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js.map +1 -1
  127. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +3 -4
  128. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js.map +1 -1
  129. package/esm/vs/editor/browser/viewParts/minimap/minimap.js +1 -1
  130. package/esm/vs/editor/browser/viewParts/minimap/minimap.js.map +1 -1
  131. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +1 -1
  132. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js.map +1 -1
  133. package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js +4 -2
  134. package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js.map +1 -1
  135. package/esm/vs/editor/browser/viewParts/rulers/rulers.js +1 -3
  136. package/esm/vs/editor/browser/viewParts/rulers/rulers.js.map +1 -1
  137. package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js +1 -1
  138. package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js.map +1 -1
  139. package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js +2 -1
  140. package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js.map +1 -1
  141. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +6 -18
  142. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js.map +1 -1
  143. package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js +0 -7
  144. package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js.map +1 -1
  145. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +7 -2
  146. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  147. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +1 -0
  148. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js.map +1 -1
  149. package/esm/vs/editor/common/commands/replaceCommand.js +2 -2
  150. package/esm/vs/editor/common/commands/replaceCommand.js.map +1 -1
  151. package/esm/vs/editor/common/config/editorOptions.js +374 -360
  152. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  153. package/esm/vs/editor/common/core/2d/rect.js +7 -0
  154. package/esm/vs/editor/common/core/2d/rect.js.map +1 -1
  155. package/esm/vs/editor/common/core/2d/size.js +20 -0
  156. package/esm/vs/editor/common/core/2d/size.js.map +1 -0
  157. package/esm/vs/editor/common/core/editorColorRegistry.js +69 -68
  158. package/esm/vs/editor/common/core/editorColorRegistry.js.map +1 -1
  159. package/esm/vs/editor/common/core/ranges/offsetRange.js +9 -0
  160. package/esm/vs/editor/common/core/ranges/offsetRange.js.map +1 -1
  161. package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
  162. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  163. package/esm/vs/editor/common/editorContextKeys.js +47 -47
  164. package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
  165. package/esm/vs/editor/common/languages.js +56 -56
  166. package/esm/vs/editor/common/languages.js.map +1 -1
  167. package/esm/vs/editor/common/model/editStack.js +1 -1
  168. package/esm/vs/editor/common/services/languagesAssociations.js +6 -8
  169. package/esm/vs/editor/common/services/languagesAssociations.js.map +1 -1
  170. package/esm/vs/editor/common/standaloneStrings.js +11 -10
  171. package/esm/vs/editor/common/standaloneStrings.js.map +1 -1
  172. package/esm/vs/editor/common/textModelEditSource.js +1 -1
  173. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  174. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
  175. package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
  176. package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
  177. package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
  178. package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
  179. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +17 -17
  180. package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
  181. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
  182. package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
  183. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
  184. package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
  185. package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
  186. package/esm/vs/editor/contrib/codelens/browser/codelens.js.map +1 -1
  187. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
  188. package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
  189. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
  190. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
  191. package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
  192. package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
  193. package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
  194. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
  195. package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
  196. package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js +14 -0
  197. package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js.map +1 -1
  198. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
  199. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +9 -9
  200. package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
  201. package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
  202. package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
  203. package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
  204. package/esm/vs/editor/contrib/find/browser/findController.js +17 -17
  205. package/esm/vs/editor/contrib/find/browser/findController.js.map +1 -1
  206. package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
  207. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
  208. package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
  209. package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
  210. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
  211. package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
  212. package/esm/vs/editor/contrib/format/browser/format.js +21 -6
  213. package/esm/vs/editor/contrib/format/browser/format.js.map +1 -1
  214. package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
  215. package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
  216. package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
  217. package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
  218. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  219. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
  220. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
  221. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
  222. package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
  223. package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
  224. package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
  225. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js +5 -10
  226. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js.map +1 -1
  227. package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js +11 -6
  228. package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js.map +1 -1
  229. package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
  230. package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
  231. package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
  232. package/esm/vs/editor/contrib/hover/browser/hoverUtils.js +24 -0
  233. package/esm/vs/editor/contrib/hover/browser/hoverUtils.js.map +1 -1
  234. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +9 -9
  235. package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
  236. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  237. package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
  238. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +8 -8
  239. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +20 -20
  240. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +12 -12
  241. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +18 -16
  242. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
  243. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  244. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
  245. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +42 -37
  246. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  247. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +3 -3
  248. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +1 -1
  249. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +8 -8
  250. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
  251. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +54 -43
  252. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  253. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +12 -12
  254. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
  255. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +74 -48
  256. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  257. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +8 -36
  258. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
  259. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js +10 -11
  260. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js.map +1 -1
  261. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +105 -119
  262. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  263. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
  264. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +8 -36
  265. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
  266. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js +95 -0
  267. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js.map +1 -0
  268. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +17 -9
  269. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
  270. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +415 -0
  271. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -0
  272. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +253 -0
  273. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -0
  274. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
  275. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js +103 -0
  276. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js.map +1 -0
  277. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js +32 -0
  278. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js.map +1 -0
  279. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +44 -11
  280. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
  281. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +181 -0
  282. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -0
  283. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  284. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  285. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -31
  286. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
  287. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  288. package/esm/vs/editor/contrib/links/browser/links.js +10 -10
  289. package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
  290. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
  291. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  292. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  293. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  294. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  295. package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +2 -2
  296. package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js.map +1 -1
  297. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +18 -13
  298. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js.map +1 -1
  299. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  300. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  301. package/esm/vs/editor/contrib/rename/browser/rename.js +12 -12
  302. package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
  303. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  304. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  305. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
  306. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  307. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  308. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -1
  309. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
  310. package/esm/vs/editor/contrib/suggest/browser/suggest.js +8 -8
  311. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +10 -10
  312. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
  313. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
  314. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  315. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  316. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  317. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  318. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  319. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  320. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +29 -29
  321. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
  322. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  323. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  324. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +4 -4
  325. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js.map +1 -1
  326. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +1 -1
  327. package/esm/vs/editor/editor.all.js +1 -0
  328. package/esm/vs/editor/editor.all.js.map +1 -1
  329. package/esm/vs/editor/editor.api.d.ts +9 -5
  330. package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js +22 -2
  331. package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js.map +1 -1
  332. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js +39 -0
  333. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js.map +1 -0
  334. package/esm/vs/editor/standalone/browser/standaloneEditor.js +2 -1
  335. package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
  336. package/esm/vs/editor/standalone/browser/standaloneServices.js +3 -21
  337. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  338. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js +4 -4
  339. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
  340. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
  341. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  342. package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
  343. package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
  344. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +7 -9
  345. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js.map +1 -1
  346. package/esm/vs/platform/actions/browser/toolbar.js +2 -2
  347. package/esm/vs/platform/actions/common/actions.js +2 -0
  348. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  349. package/esm/vs/platform/actions/common/menuService.js +2 -2
  350. package/esm/vs/platform/configuration/common/configuration.js +5 -4
  351. package/esm/vs/platform/configuration/common/configuration.js.map +1 -1
  352. package/esm/vs/platform/configuration/common/configurationModels.js +21 -10
  353. package/esm/vs/platform/configuration/common/configurationModels.js.map +1 -1
  354. package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
  355. package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
  356. package/esm/vs/platform/configuration/common/configurations.js.map +1 -1
  357. package/esm/vs/platform/contextkey/browser/contextKeyService.js +3 -3
  358. package/esm/vs/platform/contextkey/browser/contextKeyService.js.map +1 -1
  359. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  360. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  361. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  362. package/esm/vs/platform/contextview/browser/contextViewService.js.map +1 -1
  363. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  364. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  365. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  366. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
  367. package/esm/vs/platform/list/browser/listService.js +27 -27
  368. package/esm/vs/platform/list/browser/listService.js.map +1 -1
  369. package/esm/vs/platform/markers/common/markerService.js +2 -2
  370. package/esm/vs/platform/markers/common/markers.js +6 -6
  371. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +11 -32
  372. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
  373. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  374. package/esm/vs/platform/quickinput/browser/media/quickInput.css +9 -3
  375. package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
  376. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  377. package/esm/vs/platform/quickinput/browser/quickInputController.js +35 -14
  378. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  379. package/esm/vs/platform/quickinput/browser/quickInputList.js +4 -1
  380. package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
  381. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  382. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  383. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js +71 -40
  384. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
  385. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js +21 -8
  386. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js.map +1 -1
  387. package/esm/vs/platform/telemetry/common/gdprTypings.js.map +1 -1
  388. package/esm/vs/platform/telemetry/common/telemetry.js.map +1 -1
  389. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  390. package/esm/vs/platform/theme/common/colors/baseColors.js +17 -17
  391. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  392. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  393. package/esm/vs/platform/theme/common/colors/editorColors.js.map +1 -1
  394. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  395. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  396. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  397. package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
  398. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  399. package/esm/vs/platform/theme/common/colors/miscColors.js.map +1 -1
  400. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  401. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  402. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  403. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  404. package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js +12 -0
  405. package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js.map +1 -0
  406. package/esm/vs/platform/webWorker/browser/webWorkerService.js +7 -0
  407. package/esm/vs/platform/webWorker/browser/webWorkerService.js.map +1 -0
  408. package/esm/vs/{base/browser/webWorkerFactory.js → platform/webWorker/browser/webWorkerServiceImpl.js} +47 -66
  409. package/esm/vs/platform/webWorker/browser/webWorkerServiceImpl.js.map +1 -0
  410. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  411. package/monaco.d.ts +9 -5
  412. package/package.json +2 -2
  413. package/esm/vs/base/browser/webWorkerFactory.js.map +0 -1
  414. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.js +0 -82
  415. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/view/domLineBreaksComputer.ts","vs/editor/browser/view/domLineBreaksComputer.ts"],"names":[],"mappings":"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","file":"domLineBreaksComputer.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { assertReturnsDefined } from '../../../base/common/types.js';\nimport { applyFontInfo } from '../config/domFontInfo.js';\nimport { WrappingIndent } from '../../common/config/editorOptions.js';\nimport { FontInfo } from '../../common/config/fontInfo.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport { InjectedTextOptions } from '../../common/model.js';\nimport { ILineBreaksComputer, ILineBreaksComputerFactory, ModelLineProjectionData } from '../../common/modelLineProjectionData.js';\nimport { LineInjectedText } from '../../common/textModelEvents.js';\n\nconst ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value });\n\nexport class DOMLineBreaksComputerFactory implements ILineBreaksComputerFactory {\n\n\tpublic static create(targetWindow: Window): DOMLineBreaksComputerFactory {\n\t\treturn new DOMLineBreaksComputerFactory(new WeakRef(targetWindow));\n\t}\n\n\tconstructor(private targetWindow: WeakRef<Window>) {\n\t}\n\n\tpublic createLineBreaksComputer(fontInfo: FontInfo, tabSize: number, wrappingColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', wrapOnEscapedLineFeeds: boolean): ILineBreaksComputer {\n\t\tconst requests: string[] = [];\n\t\tconst injectedTexts: (LineInjectedText[] | null)[] = [];\n\t\treturn {\n\t\t\taddRequest: (lineText: string, injectedText: LineInjectedText[] | null, previousLineBreakData: ModelLineProjectionData | null) => {\n\t\t\t\trequests.push(lineText);\n\t\t\t\tinjectedTexts.push(injectedText);\n\t\t\t},\n\t\t\tfinalize: () => {\n\t\t\t\treturn createLineBreaks(assertReturnsDefined(this.targetWindow.deref()), requests, fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak, injectedTexts);\n\t\t\t}\n\t\t};\n\t}\n}\n\nfunction createLineBreaks(targetWindow: Window, requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', injectedTextsPerLine: (LineInjectedText[] | null)[]): (ModelLineProjectionData | null)[] {\n\tfunction createEmptyLineBreakWithPossiblyInjectedText(requestIdx: number): ModelLineProjectionData | null {\n\t\tconst injectedTexts = injectedTextsPerLine[requestIdx];\n\t\tif (injectedTexts) {\n\t\t\tconst lineText = LineInjectedText.applyInjectedText(requests[requestIdx], injectedTexts);\n\n\t\t\tconst injectionOptions = injectedTexts.map(t => t.options);\n\t\t\tconst injectionOffsets = injectedTexts.map(text => text.column - 1);\n\n\t\t\t// creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n\t\t\t// because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n\t\t\treturn new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tif (firstLineBreakColumn === -1) {\n\t\tconst result: (ModelLineProjectionData | null)[] = [];\n\t\tfor (let i = 0, len = requests.length; i < len; i++) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconst overallWidth = Math.round(firstLineBreakColumn * fontInfo.typicalHalfwidthCharacterWidth);\n\tconst additionalIndent = (wrappingIndent === WrappingIndent.DeepIndent ? 2 : wrappingIndent === WrappingIndent.Indent ? 1 : 0);\n\tconst additionalIndentSize = Math.round(tabSize * additionalIndent);\n\tconst additionalIndentLength = Math.ceil(fontInfo.spaceWidth * additionalIndentSize);\n\n\tconst containerDomNode = document.createElement('div');\n\tapplyFontInfo(containerDomNode, fontInfo);\n\n\tconst sb = new StringBuilder(10000);\n\tconst firstNonWhitespaceIndices: number[] = [];\n\tconst wrappedTextIndentLengths: number[] = [];\n\tconst renderLineContents: string[] = [];\n\tconst allCharOffsets: number[][] = [];\n\tconst allVisibleColumns: number[][] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTextsPerLine[i]);\n\n\t\tlet firstNonWhitespaceIndex = 0;\n\t\tlet wrappedTextIndentLength = 0;\n\t\tlet width = overallWidth;\n\n\t\tif (wrappingIndent !== WrappingIndent.None) {\n\t\t\tfirstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\t\t\tif (firstNonWhitespaceIndex === -1) {\n\t\t\t\t// all whitespace line\n\t\t\t\tfirstNonWhitespaceIndex = 0;\n\n\t\t\t} else {\n\t\t\t\t// Track existing indent\n\n\t\t\t\tfor (let i = 0; i < firstNonWhitespaceIndex; i++) {\n\t\t\t\t\tconst charWidth = (\n\t\t\t\t\t\tlineContent.charCodeAt(i) === CharCode.Tab\n\t\t\t\t\t\t\t? (tabSize - (wrappedTextIndentLength % tabSize))\n\t\t\t\t\t\t\t: 1\n\t\t\t\t\t);\n\t\t\t\t\twrappedTextIndentLength += charWidth;\n\t\t\t\t}\n\n\t\t\t\tconst indentWidth = Math.ceil(fontInfo.spaceWidth * wrappedTextIndentLength);\n\n\t\t\t\t// Force sticking to beginning of line if no character would fit except for the indentation\n\t\t\t\tif (indentWidth + fontInfo.typicalFullwidthCharacterWidth > overallWidth) {\n\t\t\t\t\tfirstNonWhitespaceIndex = 0;\n\t\t\t\t\twrappedTextIndentLength = 0;\n\t\t\t\t} else {\n\t\t\t\t\twidth = overallWidth - indentWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderLineContent = lineContent.substr(firstNonWhitespaceIndex);\n\t\tconst tmp = renderLine(renderLineContent, wrappedTextIndentLength, tabSize, width, sb, additionalIndentLength);\n\t\tfirstNonWhitespaceIndices[i] = firstNonWhitespaceIndex;\n\t\twrappedTextIndentLengths[i] = wrappedTextIndentLength;\n\t\trenderLineContents[i] = renderLineContent;\n\t\tallCharOffsets[i] = tmp[0];\n\t\tallVisibleColumns[i] = tmp[1];\n\t}\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy?.createHTML(html) ?? html;\n\tcontainerDomNode.innerHTML = trustedhtml as string;\n\n\tcontainerDomNode.style.position = 'absolute';\n\tcontainerDomNode.style.top = '10000';\n\tif (wordBreak === 'keepAll') {\n\t\t// word-break: keep-all; overflow-wrap: anywhere\n\t\tcontainerDomNode.style.wordBreak = 'keep-all';\n\t\tcontainerDomNode.style.overflowWrap = 'anywhere';\n\t} else {\n\t\t// overflow-wrap: break-word\n\t\tcontainerDomNode.style.wordBreak = 'inherit';\n\t\tcontainerDomNode.style.overflowWrap = 'break-word';\n\t}\n\ttargetWindow.document.body.appendChild(containerDomNode);\n\n\tconst range = document.createRange();\n\tconst lineDomNodes = Array.prototype.slice.call(containerDomNode.children, 0);\n\n\tconst result: (ModelLineProjectionData | null)[] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineDomNode = lineDomNodes[i];\n\t\tconst breakOffsets: number[] | null = readLineBreaks(range, lineDomNode, renderLineContents[i], allCharOffsets[i]);\n\t\tif (breakOffsets === null) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst firstNonWhitespaceIndex = firstNonWhitespaceIndices[i];\n\t\tconst wrappedTextIndentLength = wrappedTextIndentLengths[i] + additionalIndentSize;\n\t\tconst visibleColumns = allVisibleColumns[i];\n\n\t\tconst breakOffsetsVisibleColumn: number[] = [];\n\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\tbreakOffsetsVisibleColumn[j] = visibleColumns[breakOffsets[j]];\n\t\t}\n\n\t\tif (firstNonWhitespaceIndex !== 0) {\n\t\t\t// All break offsets are relative to the renderLineContent, make them absolute again\n\t\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\t\tbreakOffsets[j] += firstNonWhitespaceIndex;\n\t\t\t}\n\t\t}\n\n\t\tlet injectionOptions: InjectedTextOptions[] | null;\n\t\tlet injectionOffsets: number[] | null;\n\t\tconst curInjectedTexts = injectedTextsPerLine[i];\n\t\tif (curInjectedTexts) {\n\t\t\tinjectionOptions = curInjectedTexts.map(t => t.options);\n\t\t\tinjectionOffsets = curInjectedTexts.map(text => text.column - 1);\n\t\t} else {\n\t\t\tinjectionOptions = null;\n\t\t\tinjectionOffsets = null;\n\t\t}\n\n\t\tresult[i] = new ModelLineProjectionData(injectionOffsets, injectionOptions, breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength);\n\t}\n\n\tcontainerDomNode.remove();\n\treturn result;\n}\n\nconst enum Constants {\n\tSPAN_MODULO_LIMIT = 16384\n}\n\nfunction renderLine(lineContent: string, initialVisibleColumn: number, tabSize: number, width: number, sb: StringBuilder, wrappingIndentLength: number): [number[], number[]] {\n\n\tif (wrappingIndentLength !== 0) {\n\t\tconst hangingOffset = String(wrappingIndentLength);\n\t\tsb.appendString('<div style=\"text-indent: -');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; padding-left: ');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; box-sizing: border-box; width:');\n\t} else {\n\t\tsb.appendString('<div style=\"width:');\n\t}\n\tsb.appendString(String(width));\n\tsb.appendString('px;\">');\n\t// if (containsRTL) {\n\t// \tsb.appendASCIIString('\" dir=\"ltr');\n\t// }\n\n\tconst len = lineContent.length;\n\tlet visibleColumn = initialVisibleColumn;\n\tlet charOffset = 0;\n\tconst charOffsets: number[] = [];\n\tconst visibleColumns: number[] = [];\n\tlet nextCharCode = (0 < len ? lineContent.charCodeAt(0) : CharCode.Null);\n\n\tsb.appendString('<span>');\n\tfor (let charIndex = 0; charIndex < len; charIndex++) {\n\t\tif (charIndex !== 0 && charIndex % Constants.SPAN_MODULO_LIMIT === 0) {\n\t\t\tsb.appendString('</span><span>');\n\t\t}\n\t\tcharOffsets[charIndex] = charOffset;\n\t\tvisibleColumns[charIndex] = visibleColumn;\n\t\tconst charCode = nextCharCode;\n\t\tnextCharCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\tlet producedCharacters = 1;\n\t\tlet charWidth = 1;\n\t\tswitch (charCode) {\n\t\t\tcase CharCode.Tab:\n\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\tif (space < producedCharacters) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Space:\n\t\t\t\tif (nextCharCode === CharCode.Space) {\n\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.LessThan:\n\t\t\t\tsb.appendString('&lt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.GreaterThan:\n\t\t\t\tsb.appendString('&gt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Ampersand:\n\t\t\t\tsb.appendString('&amp;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Null:\n\t\t\t\tsb.appendString('&#00;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.UTF8_BOM:\n\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\tcharWidth++;\n\t\t\t\t}\n\t\t\t\tif (charCode < 32) {\n\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t}\n\t\t}\n\n\t\tcharOffset += producedCharacters;\n\t\tvisibleColumn += charWidth;\n\t}\n\tsb.appendString('</span>');\n\n\tcharOffsets[lineContent.length] = charOffset;\n\tvisibleColumns[lineContent.length] = visibleColumn;\n\n\tsb.appendString('</div>');\n\n\treturn [charOffsets, visibleColumns];\n}\n\nfunction readLineBreaks(range: Range, lineDomNode: HTMLDivElement, lineContent: string, charOffsets: number[]): number[] | null {\n\tif (lineContent.length <= 1) {\n\t\treturn null;\n\t}\n\tconst spans = <HTMLSpanElement[]>Array.prototype.slice.call(lineDomNode.children, 0);\n\n\tconst breakOffsets: number[] = [];\n\ttry {\n\t\tdiscoverBreaks(range, spans, charOffsets, 0, null, lineContent.length - 1, null, breakOffsets);\n\t} catch (err) {\n\t\tconsole.log(err);\n\t\treturn null;\n\t}\n\n\tif (breakOffsets.length === 0) {\n\t\treturn null;\n\t}\n\n\tbreakOffsets.push(lineContent.length);\n\treturn breakOffsets;\n}\n\nfunction discoverBreaks(range: Range, spans: HTMLSpanElement[], charOffsets: number[], low: number, lowRects: DOMRectList | null, high: number, highRects: DOMRectList | null, result: number[]): void {\n\tif (low === high) {\n\t\treturn;\n\t}\n\n\tlowRects = lowRects || readClientRect(range, spans, charOffsets[low], charOffsets[low + 1]);\n\thighRects = highRects || readClientRect(range, spans, charOffsets[high], charOffsets[high + 1]);\n\n\tif (Math.abs(lowRects[0].top - highRects[0].top) <= 0.1) {\n\t\t// same line\n\t\treturn;\n\t}\n\n\t// there is at least one line break between these two offsets\n\tif (low + 1 === high) {\n\t\t// the two characters are adjacent, so the line break must be exactly between them\n\t\tresult.push(high);\n\t\treturn;\n\t}\n\n\tconst mid = low + ((high - low) / 2) | 0;\n\tconst midRects = readClientRect(range, spans, charOffsets[mid], charOffsets[mid + 1]);\n\tdiscoverBreaks(range, spans, charOffsets, low, lowRects, mid, midRects, result);\n\tdiscoverBreaks(range, spans, charOffsets, mid, midRects, high, highRects, result);\n}\n\nfunction readClientRect(range: Range, spans: HTMLSpanElement[], startOffset: number, endOffset: number): DOMRectList {\n\trange.setStart(spans[(startOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, startOffset % Constants.SPAN_MODULO_LIMIT);\n\trange.setEnd(spans[(endOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, endOffset % Constants.SPAN_MODULO_LIMIT);\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { assertReturnsDefined } from '../../../base/common/types.js';\nimport { applyFontInfo } from '../config/domFontInfo.js';\nimport { WrappingIndent } from '../../common/config/editorOptions.js';\nimport { FontInfo } from '../../common/config/fontInfo.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport { InjectedTextOptions } from '../../common/model.js';\nimport { ILineBreaksComputer, ILineBreaksComputerFactory, ModelLineProjectionData } from '../../common/modelLineProjectionData.js';\nimport { LineInjectedText } from '../../common/textModelEvents.js';\n\nconst ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value });\n\nexport class DOMLineBreaksComputerFactory implements ILineBreaksComputerFactory {\n\n\tpublic static create(targetWindow: Window): DOMLineBreaksComputerFactory {\n\t\treturn new DOMLineBreaksComputerFactory(new WeakRef(targetWindow));\n\t}\n\n\tconstructor(private targetWindow: WeakRef<Window>) {\n\t}\n\n\tpublic createLineBreaksComputer(fontInfo: FontInfo, tabSize: number, wrappingColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', wrapOnEscapedLineFeeds: boolean): ILineBreaksComputer {\n\t\tconst requests: string[] = [];\n\t\tconst injectedTexts: (LineInjectedText[] | null)[] = [];\n\t\treturn {\n\t\t\taddRequest: (lineText: string, injectedText: LineInjectedText[] | null, previousLineBreakData: ModelLineProjectionData | null) => {\n\t\t\t\trequests.push(lineText);\n\t\t\t\tinjectedTexts.push(injectedText);\n\t\t\t},\n\t\t\tfinalize: () => {\n\t\t\t\treturn createLineBreaks(assertReturnsDefined(this.targetWindow.deref()), requests, fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak, injectedTexts);\n\t\t\t}\n\t\t};\n\t}\n}\n\nfunction createLineBreaks(targetWindow: Window, requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', injectedTextsPerLine: (LineInjectedText[] | null)[]): (ModelLineProjectionData | null)[] {\n\tfunction createEmptyLineBreakWithPossiblyInjectedText(requestIdx: number): ModelLineProjectionData | null {\n\t\tconst injectedTexts = injectedTextsPerLine[requestIdx];\n\t\tif (injectedTexts) {\n\t\t\tconst lineText = LineInjectedText.applyInjectedText(requests[requestIdx], injectedTexts);\n\n\t\t\tconst injectionOptions = injectedTexts.map(t => t.options);\n\t\t\tconst injectionOffsets = injectedTexts.map(text => text.column - 1);\n\n\t\t\t// creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n\t\t\t// because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n\t\t\treturn new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tif (firstLineBreakColumn === -1) {\n\t\tconst result: (ModelLineProjectionData | null)[] = [];\n\t\tfor (let i = 0, len = requests.length; i < len; i++) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconst overallWidth = Math.round(firstLineBreakColumn * fontInfo.typicalHalfwidthCharacterWidth);\n\tconst additionalIndent = (wrappingIndent === WrappingIndent.DeepIndent ? 2 : wrappingIndent === WrappingIndent.Indent ? 1 : 0);\n\tconst additionalIndentSize = Math.round(tabSize * additionalIndent);\n\tconst additionalIndentLength = Math.ceil(fontInfo.spaceWidth * additionalIndentSize);\n\n\tconst containerDomNode = document.createElement('div');\n\tapplyFontInfo(containerDomNode, fontInfo);\n\n\tconst sb = new StringBuilder(10000);\n\tconst firstNonWhitespaceIndices: number[] = [];\n\tconst wrappedTextIndentLengths: number[] = [];\n\tconst renderLineContents: string[] = [];\n\tconst allCharOffsets: number[][] = [];\n\tconst allVisibleColumns: number[][] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTextsPerLine[i]);\n\n\t\tlet firstNonWhitespaceIndex = 0;\n\t\tlet wrappedTextIndentLength = 0;\n\t\tlet width = overallWidth;\n\n\t\tif (wrappingIndent !== WrappingIndent.None) {\n\t\t\tfirstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\t\t\tif (firstNonWhitespaceIndex === -1) {\n\t\t\t\t// all whitespace line\n\t\t\t\tfirstNonWhitespaceIndex = 0;\n\n\t\t\t} else {\n\t\t\t\t// Track existing indent\n\n\t\t\t\tfor (let i = 0; i < firstNonWhitespaceIndex; i++) {\n\t\t\t\t\tconst charWidth = (\n\t\t\t\t\t\tlineContent.charCodeAt(i) === CharCode.Tab\n\t\t\t\t\t\t\t? (tabSize - (wrappedTextIndentLength % tabSize))\n\t\t\t\t\t\t\t: 1\n\t\t\t\t\t);\n\t\t\t\t\twrappedTextIndentLength += charWidth;\n\t\t\t\t}\n\n\t\t\t\tconst indentWidth = Math.ceil(fontInfo.spaceWidth * wrappedTextIndentLength);\n\n\t\t\t\t// Force sticking to beginning of line if no character would fit except for the indentation\n\t\t\t\tif (indentWidth + fontInfo.typicalFullwidthCharacterWidth > overallWidth) {\n\t\t\t\t\tfirstNonWhitespaceIndex = 0;\n\t\t\t\t\twrappedTextIndentLength = 0;\n\t\t\t\t} else {\n\t\t\t\t\twidth = overallWidth - indentWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderLineContent = lineContent.substr(firstNonWhitespaceIndex);\n\t\tconst tmp = renderLine(renderLineContent, wrappedTextIndentLength, tabSize, width, sb, additionalIndentLength);\n\t\tfirstNonWhitespaceIndices[i] = firstNonWhitespaceIndex;\n\t\twrappedTextIndentLengths[i] = wrappedTextIndentLength;\n\t\trenderLineContents[i] = renderLineContent;\n\t\tallCharOffsets[i] = tmp[0];\n\t\tallVisibleColumns[i] = tmp[1];\n\t}\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy?.createHTML(html) ?? html;\n\tcontainerDomNode.innerHTML = trustedhtml as string;\n\n\tcontainerDomNode.style.position = 'absolute';\n\tcontainerDomNode.style.top = '10000';\n\tif (wordBreak === 'keepAll') {\n\t\t// word-break: keep-all; overflow-wrap: anywhere\n\t\tcontainerDomNode.style.wordBreak = 'keep-all';\n\t\tcontainerDomNode.style.overflowWrap = 'anywhere';\n\t} else {\n\t\t// overflow-wrap: break-word\n\t\tcontainerDomNode.style.wordBreak = 'inherit';\n\t\tcontainerDomNode.style.overflowWrap = 'break-word';\n\t}\n\ttargetWindow.document.body.appendChild(containerDomNode);\n\n\tconst range = document.createRange();\n\tconst lineDomNodes = Array.prototype.slice.call(containerDomNode.children, 0);\n\n\tconst result: (ModelLineProjectionData | null)[] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineDomNode = lineDomNodes[i];\n\t\tconst breakOffsets: number[] | null = readLineBreaks(range, lineDomNode, renderLineContents[i], allCharOffsets[i]);\n\t\tif (breakOffsets === null) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst firstNonWhitespaceIndex = firstNonWhitespaceIndices[i];\n\t\tconst wrappedTextIndentLength = wrappedTextIndentLengths[i] + additionalIndentSize;\n\t\tconst visibleColumns = allVisibleColumns[i];\n\n\t\tconst breakOffsetsVisibleColumn: number[] = [];\n\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\tbreakOffsetsVisibleColumn[j] = visibleColumns[breakOffsets[j]];\n\t\t}\n\n\t\tif (firstNonWhitespaceIndex !== 0) {\n\t\t\t// All break offsets are relative to the renderLineContent, make them absolute again\n\t\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\t\tbreakOffsets[j] += firstNonWhitespaceIndex;\n\t\t\t}\n\t\t}\n\n\t\tlet injectionOptions: InjectedTextOptions[] | null;\n\t\tlet injectionOffsets: number[] | null;\n\t\tconst curInjectedTexts = injectedTextsPerLine[i];\n\t\tif (curInjectedTexts) {\n\t\t\tinjectionOptions = curInjectedTexts.map(t => t.options);\n\t\t\tinjectionOffsets = curInjectedTexts.map(text => text.column - 1);\n\t\t} else {\n\t\t\tinjectionOptions = null;\n\t\t\tinjectionOffsets = null;\n\t\t}\n\n\t\tresult[i] = new ModelLineProjectionData(injectionOffsets, injectionOptions, breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength);\n\t}\n\n\tcontainerDomNode.remove();\n\treturn result;\n}\n\nconst enum Constants {\n\tSPAN_MODULO_LIMIT = 16384\n}\n\nfunction renderLine(lineContent: string, initialVisibleColumn: number, tabSize: number, width: number, sb: StringBuilder, wrappingIndentLength: number): [number[], number[]] {\n\n\tif (wrappingIndentLength !== 0) {\n\t\tconst hangingOffset = String(wrappingIndentLength);\n\t\tsb.appendString('<div style=\"text-indent: -');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; padding-left: ');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; box-sizing: border-box; width:');\n\t} else {\n\t\tsb.appendString('<div style=\"width:');\n\t}\n\tsb.appendString(String(width));\n\tsb.appendString('px;\">');\n\t// if (containsRTL) {\n\t// \tsb.appendASCIIString('\" dir=\"ltr');\n\t// }\n\n\tconst len = lineContent.length;\n\tlet visibleColumn = initialVisibleColumn;\n\tlet charOffset = 0;\n\tconst charOffsets: number[] = [];\n\tconst visibleColumns: number[] = [];\n\tlet nextCharCode = (0 < len ? lineContent.charCodeAt(0) : CharCode.Null);\n\n\tsb.appendString('<span>');\n\tfor (let charIndex = 0; charIndex < len; charIndex++) {\n\t\tif (charIndex !== 0 && charIndex % Constants.SPAN_MODULO_LIMIT === 0) {\n\t\t\tsb.appendString('</span><span>');\n\t\t}\n\t\tcharOffsets[charIndex] = charOffset;\n\t\tvisibleColumns[charIndex] = visibleColumn;\n\t\tconst charCode = nextCharCode;\n\t\tnextCharCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\tlet producedCharacters = 1;\n\t\tlet charWidth = 1;\n\t\tswitch (charCode) {\n\t\t\tcase CharCode.Tab:\n\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\tif (space < producedCharacters) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Space:\n\t\t\t\tif (nextCharCode === CharCode.Space) {\n\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.LessThan:\n\t\t\t\tsb.appendString('&lt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.GreaterThan:\n\t\t\t\tsb.appendString('&gt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Ampersand:\n\t\t\t\tsb.appendString('&amp;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Null:\n\t\t\t\tsb.appendString('&#00;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.UTF8_BOM:\n\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\tcharWidth++;\n\t\t\t\t}\n\t\t\t\tif (charCode < 32) {\n\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t}\n\t\t}\n\n\t\tcharOffset += producedCharacters;\n\t\tvisibleColumn += charWidth;\n\t}\n\tsb.appendString('</span>');\n\n\tcharOffsets[lineContent.length] = charOffset;\n\tvisibleColumns[lineContent.length] = visibleColumn;\n\n\tsb.appendString('</div>');\n\n\treturn [charOffsets, visibleColumns];\n}\n\nfunction readLineBreaks(range: Range, lineDomNode: HTMLDivElement, lineContent: string, charOffsets: number[]): number[] | null {\n\tif (lineContent.length <= 1) {\n\t\treturn null;\n\t}\n\tconst spans = <HTMLSpanElement[]>Array.prototype.slice.call(lineDomNode.children, 0);\n\n\tconst breakOffsets: number[] = [];\n\ttry {\n\t\tdiscoverBreaks(range, spans, charOffsets, 0, null, lineContent.length - 1, null, breakOffsets);\n\t} catch (err) {\n\t\tconsole.log(err);\n\t\treturn null;\n\t}\n\n\tif (breakOffsets.length === 0) {\n\t\treturn null;\n\t}\n\n\tbreakOffsets.push(lineContent.length);\n\treturn breakOffsets;\n}\n\nfunction discoverBreaks(range: Range, spans: HTMLSpanElement[], charOffsets: number[], low: number, lowRects: DOMRectList | null, high: number, highRects: DOMRectList | null, result: number[]): void {\n\tif (low === high) {\n\t\treturn;\n\t}\n\n\tlowRects = lowRects || readClientRect(range, spans, charOffsets[low], charOffsets[low + 1]);\n\thighRects = highRects || readClientRect(range, spans, charOffsets[high], charOffsets[high + 1]);\n\n\tif (Math.abs(lowRects[0].top - highRects[0].top) <= 0.1) {\n\t\t// same line\n\t\treturn;\n\t}\n\n\t// there is at least one line break between these two offsets\n\tif (low + 1 === high) {\n\t\t// the two characters are adjacent, so the line break must be exactly between them\n\t\tresult.push(high);\n\t\treturn;\n\t}\n\n\tconst mid = low + ((high - low) / 2) | 0;\n\tconst midRects = readClientRect(range, spans, charOffsets[mid], charOffsets[mid + 1]);\n\tdiscoverBreaks(range, spans, charOffsets, low, lowRects, mid, midRects, result);\n\tdiscoverBreaks(range, spans, charOffsets, mid, midRects, high, highRects, result);\n}\n\nfunction readClientRect(range: Range, spans: HTMLSpanElement[], startOffset: number, endOffset: number): DOMRectList {\n\trange.setStart(spans[(startOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, startOffset % Constants.SPAN_MODULO_LIMIT);\n\trange.setEnd(spans[(endOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, endOffset % Constants.SPAN_MODULO_LIMIT);\n\treturn range.getClientRects();\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/view/domLineBreaksComputer.ts","vs/editor/browser/view/domLineBreaksComputer.ts"],"names":[],"mappings":"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","file":"domLineBreaksComputer.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { assertReturnsDefined } from '../../../base/common/types.js';\nimport { applyFontInfo } from '../config/domFontInfo.js';\nimport { WrappingIndent } from '../../common/config/editorOptions.js';\nimport { FontInfo } from '../../common/config/fontInfo.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport { InjectedTextOptions } from '../../common/model.js';\nimport { ILineBreaksComputer, ILineBreaksComputerFactory, ModelLineProjectionData } from '../../common/modelLineProjectionData.js';\nimport { LineInjectedText } from '../../common/textModelEvents.js';\n\nconst ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value });\n\nexport class DOMLineBreaksComputerFactory implements ILineBreaksComputerFactory {\n\n\tpublic static create(targetWindow: Window): DOMLineBreaksComputerFactory {\n\t\treturn new DOMLineBreaksComputerFactory(new WeakRef(targetWindow));\n\t}\n\n\tconstructor(private targetWindow: WeakRef<Window>) {\n\t}\n\n\tpublic createLineBreaksComputer(fontInfo: FontInfo, tabSize: number, wrappingColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', wrapOnEscapedLineFeeds: boolean): ILineBreaksComputer {\n\t\tconst requests: string[] = [];\n\t\tconst injectedTexts: (LineInjectedText[] | null)[] = [];\n\t\treturn {\n\t\t\taddRequest: (lineText: string, injectedText: LineInjectedText[] | null, previousLineBreakData: ModelLineProjectionData | null) => {\n\t\t\t\trequests.push(lineText);\n\t\t\t\tinjectedTexts.push(injectedText);\n\t\t\t},\n\t\t\tfinalize: () => {\n\t\t\t\treturn createLineBreaks(assertReturnsDefined(this.targetWindow.deref()), requests, fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak, injectedTexts);\n\t\t\t}\n\t\t};\n\t}\n}\n\nfunction createLineBreaks(targetWindow: Window, requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', injectedTextsPerLine: (LineInjectedText[] | null)[]): (ModelLineProjectionData | null)[] {\n\tfunction createEmptyLineBreakWithPossiblyInjectedText(requestIdx: number): ModelLineProjectionData | null {\n\t\tconst injectedTexts = injectedTextsPerLine[requestIdx];\n\t\tif (injectedTexts) {\n\t\t\tconst lineText = LineInjectedText.applyInjectedText(requests[requestIdx], injectedTexts);\n\n\t\t\tconst injectionOptions = injectedTexts.map(t => t.options);\n\t\t\tconst injectionOffsets = injectedTexts.map(text => text.column - 1);\n\n\t\t\t// creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n\t\t\t// because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n\t\t\treturn new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tif (firstLineBreakColumn === -1) {\n\t\tconst result: (ModelLineProjectionData | null)[] = [];\n\t\tfor (let i = 0, len = requests.length; i < len; i++) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconst overallWidth = Math.round(firstLineBreakColumn * fontInfo.typicalHalfwidthCharacterWidth);\n\tconst additionalIndent = (wrappingIndent === WrappingIndent.DeepIndent ? 2 : wrappingIndent === WrappingIndent.Indent ? 1 : 0);\n\tconst additionalIndentSize = Math.round(tabSize * additionalIndent);\n\tconst additionalIndentLength = Math.ceil(fontInfo.spaceWidth * additionalIndentSize);\n\n\tconst containerDomNode = document.createElement('div');\n\tapplyFontInfo(containerDomNode, fontInfo);\n\n\tconst sb = new StringBuilder(10000);\n\tconst firstNonWhitespaceIndices: number[] = [];\n\tconst wrappedTextIndentLengths: number[] = [];\n\tconst renderLineContents: string[] = [];\n\tconst allCharOffsets: number[][] = [];\n\tconst allVisibleColumns: number[][] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTextsPerLine[i]);\n\n\t\tlet firstNonWhitespaceIndex = 0;\n\t\tlet wrappedTextIndentLength = 0;\n\t\tlet width = overallWidth;\n\n\t\tif (wrappingIndent !== WrappingIndent.None) {\n\t\t\tfirstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\t\t\tif (firstNonWhitespaceIndex === -1) {\n\t\t\t\t// all whitespace line\n\t\t\t\tfirstNonWhitespaceIndex = 0;\n\n\t\t\t} else {\n\t\t\t\t// Track existing indent\n\n\t\t\t\tfor (let i = 0; i < firstNonWhitespaceIndex; i++) {\n\t\t\t\t\tconst charWidth = (\n\t\t\t\t\t\tlineContent.charCodeAt(i) === CharCode.Tab\n\t\t\t\t\t\t\t? (tabSize - (wrappedTextIndentLength % tabSize))\n\t\t\t\t\t\t\t: 1\n\t\t\t\t\t);\n\t\t\t\t\twrappedTextIndentLength += charWidth;\n\t\t\t\t}\n\n\t\t\t\tconst indentWidth = Math.ceil(fontInfo.spaceWidth * wrappedTextIndentLength);\n\n\t\t\t\t// Force sticking to beginning of line if no character would fit except for the indentation\n\t\t\t\tif (indentWidth + fontInfo.typicalFullwidthCharacterWidth > overallWidth) {\n\t\t\t\t\tfirstNonWhitespaceIndex = 0;\n\t\t\t\t\twrappedTextIndentLength = 0;\n\t\t\t\t} else {\n\t\t\t\t\twidth = overallWidth - indentWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderLineContent = lineContent.substr(firstNonWhitespaceIndex);\n\t\tconst tmp = renderLine(renderLineContent, wrappedTextIndentLength, tabSize, width, sb, additionalIndentLength);\n\t\tfirstNonWhitespaceIndices[i] = firstNonWhitespaceIndex;\n\t\twrappedTextIndentLengths[i] = wrappedTextIndentLength;\n\t\trenderLineContents[i] = renderLineContent;\n\t\tallCharOffsets[i] = tmp[0];\n\t\tallVisibleColumns[i] = tmp[1];\n\t}\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy?.createHTML(html) ?? html;\n\tcontainerDomNode.innerHTML = trustedhtml as string;\n\n\tcontainerDomNode.style.position = 'absolute';\n\tcontainerDomNode.style.top = '10000px';\n\tif (wordBreak === 'keepAll') {\n\t\t// word-break: keep-all; overflow-wrap: anywhere\n\t\tcontainerDomNode.style.wordBreak = 'keep-all';\n\t\tcontainerDomNode.style.overflowWrap = 'anywhere';\n\t} else {\n\t\t// overflow-wrap: break-word\n\t\tcontainerDomNode.style.wordBreak = 'inherit';\n\t\tcontainerDomNode.style.overflowWrap = 'break-word';\n\t}\n\ttargetWindow.document.body.appendChild(containerDomNode);\n\n\tconst range = document.createRange();\n\tconst lineDomNodes = Array.prototype.slice.call(containerDomNode.children, 0);\n\n\tconst result: (ModelLineProjectionData | null)[] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineDomNode = lineDomNodes[i];\n\t\tconst breakOffsets: number[] | null = readLineBreaks(range, lineDomNode, renderLineContents[i], allCharOffsets[i]);\n\t\tif (breakOffsets === null) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst firstNonWhitespaceIndex = firstNonWhitespaceIndices[i];\n\t\tconst wrappedTextIndentLength = wrappedTextIndentLengths[i] + additionalIndentSize;\n\t\tconst visibleColumns = allVisibleColumns[i];\n\n\t\tconst breakOffsetsVisibleColumn: number[] = [];\n\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\tbreakOffsetsVisibleColumn[j] = visibleColumns[breakOffsets[j]];\n\t\t}\n\n\t\tif (firstNonWhitespaceIndex !== 0) {\n\t\t\t// All break offsets are relative to the renderLineContent, make them absolute again\n\t\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\t\tbreakOffsets[j] += firstNonWhitespaceIndex;\n\t\t\t}\n\t\t}\n\n\t\tlet injectionOptions: InjectedTextOptions[] | null;\n\t\tlet injectionOffsets: number[] | null;\n\t\tconst curInjectedTexts = injectedTextsPerLine[i];\n\t\tif (curInjectedTexts) {\n\t\t\tinjectionOptions = curInjectedTexts.map(t => t.options);\n\t\t\tinjectionOffsets = curInjectedTexts.map(text => text.column - 1);\n\t\t} else {\n\t\t\tinjectionOptions = null;\n\t\t\tinjectionOffsets = null;\n\t\t}\n\n\t\tresult[i] = new ModelLineProjectionData(injectionOffsets, injectionOptions, breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength);\n\t}\n\n\tcontainerDomNode.remove();\n\treturn result;\n}\n\nconst enum Constants {\n\tSPAN_MODULO_LIMIT = 16384\n}\n\nfunction renderLine(lineContent: string, initialVisibleColumn: number, tabSize: number, width: number, sb: StringBuilder, wrappingIndentLength: number): [number[], number[]] {\n\n\tif (wrappingIndentLength !== 0) {\n\t\tconst hangingOffset = String(wrappingIndentLength);\n\t\tsb.appendString('<div style=\"text-indent: -');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; padding-left: ');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; box-sizing: border-box; width:');\n\t} else {\n\t\tsb.appendString('<div style=\"width:');\n\t}\n\tsb.appendString(String(width));\n\tsb.appendString('px;\">');\n\t// if (containsRTL) {\n\t// \tsb.appendASCIIString('\" dir=\"ltr');\n\t// }\n\n\tconst len = lineContent.length;\n\tlet visibleColumn = initialVisibleColumn;\n\tlet charOffset = 0;\n\tconst charOffsets: number[] = [];\n\tconst visibleColumns: number[] = [];\n\tlet nextCharCode = (0 < len ? lineContent.charCodeAt(0) : CharCode.Null);\n\n\tsb.appendString('<span>');\n\tfor (let charIndex = 0; charIndex < len; charIndex++) {\n\t\tif (charIndex !== 0 && charIndex % Constants.SPAN_MODULO_LIMIT === 0) {\n\t\t\tsb.appendString('</span><span>');\n\t\t}\n\t\tcharOffsets[charIndex] = charOffset;\n\t\tvisibleColumns[charIndex] = visibleColumn;\n\t\tconst charCode = nextCharCode;\n\t\tnextCharCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\tlet producedCharacters = 1;\n\t\tlet charWidth = 1;\n\t\tswitch (charCode) {\n\t\t\tcase CharCode.Tab:\n\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\tif (space < producedCharacters) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Space:\n\t\t\t\tif (nextCharCode === CharCode.Space) {\n\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.LessThan:\n\t\t\t\tsb.appendString('&lt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.GreaterThan:\n\t\t\t\tsb.appendString('&gt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Ampersand:\n\t\t\t\tsb.appendString('&amp;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Null:\n\t\t\t\tsb.appendString('&#00;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.UTF8_BOM:\n\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\tcharWidth++;\n\t\t\t\t}\n\t\t\t\tif (charCode < 32) {\n\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t}\n\t\t}\n\n\t\tcharOffset += producedCharacters;\n\t\tvisibleColumn += charWidth;\n\t}\n\tsb.appendString('</span>');\n\n\tcharOffsets[lineContent.length] = charOffset;\n\tvisibleColumns[lineContent.length] = visibleColumn;\n\n\tsb.appendString('</div>');\n\n\treturn [charOffsets, visibleColumns];\n}\n\nfunction readLineBreaks(range: Range, lineDomNode: HTMLDivElement, lineContent: string, charOffsets: number[]): number[] | null {\n\tif (lineContent.length <= 1) {\n\t\treturn null;\n\t}\n\tconst spans = <HTMLSpanElement[]>Array.prototype.slice.call(lineDomNode.children, 0);\n\n\tconst breakOffsets: number[] = [];\n\ttry {\n\t\tdiscoverBreaks(range, spans, charOffsets, 0, null, lineContent.length - 1, null, breakOffsets);\n\t} catch (err) {\n\t\tconsole.log(err);\n\t\treturn null;\n\t}\n\n\tif (breakOffsets.length === 0) {\n\t\treturn null;\n\t}\n\n\tbreakOffsets.push(lineContent.length);\n\treturn breakOffsets;\n}\n\nfunction discoverBreaks(range: Range, spans: HTMLSpanElement[], charOffsets: number[], low: number, lowRects: DOMRectList | null, high: number, highRects: DOMRectList | null, result: number[]): void {\n\tif (low === high) {\n\t\treturn;\n\t}\n\n\tlowRects = lowRects || readClientRect(range, spans, charOffsets[low], charOffsets[low + 1]);\n\thighRects = highRects || readClientRect(range, spans, charOffsets[high], charOffsets[high + 1]);\n\n\tif (Math.abs(lowRects[0].top - highRects[0].top) <= 0.1) {\n\t\t// same line\n\t\treturn;\n\t}\n\n\t// there is at least one line break between these two offsets\n\tif (low + 1 === high) {\n\t\t// the two characters are adjacent, so the line break must be exactly between them\n\t\tresult.push(high);\n\t\treturn;\n\t}\n\n\tconst mid = low + ((high - low) / 2) | 0;\n\tconst midRects = readClientRect(range, spans, charOffsets[mid], charOffsets[mid + 1]);\n\tdiscoverBreaks(range, spans, charOffsets, low, lowRects, mid, midRects, result);\n\tdiscoverBreaks(range, spans, charOffsets, mid, midRects, high, highRects, result);\n}\n\nfunction readClientRect(range: Range, spans: HTMLSpanElement[], startOffset: number, endOffset: number): DOMRectList {\n\trange.setStart(spans[(startOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, startOffset % Constants.SPAN_MODULO_LIMIT);\n\trange.setEnd(spans[(endOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, endOffset % Constants.SPAN_MODULO_LIMIT);\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { assertReturnsDefined } from '../../../base/common/types.js';\nimport { applyFontInfo } from '../config/domFontInfo.js';\nimport { WrappingIndent } from '../../common/config/editorOptions.js';\nimport { FontInfo } from '../../common/config/fontInfo.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport { InjectedTextOptions } from '../../common/model.js';\nimport { ILineBreaksComputer, ILineBreaksComputerFactory, ModelLineProjectionData } from '../../common/modelLineProjectionData.js';\nimport { LineInjectedText } from '../../common/textModelEvents.js';\n\nconst ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value });\n\nexport class DOMLineBreaksComputerFactory implements ILineBreaksComputerFactory {\n\n\tpublic static create(targetWindow: Window): DOMLineBreaksComputerFactory {\n\t\treturn new DOMLineBreaksComputerFactory(new WeakRef(targetWindow));\n\t}\n\n\tconstructor(private targetWindow: WeakRef<Window>) {\n\t}\n\n\tpublic createLineBreaksComputer(fontInfo: FontInfo, tabSize: number, wrappingColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', wrapOnEscapedLineFeeds: boolean): ILineBreaksComputer {\n\t\tconst requests: string[] = [];\n\t\tconst injectedTexts: (LineInjectedText[] | null)[] = [];\n\t\treturn {\n\t\t\taddRequest: (lineText: string, injectedText: LineInjectedText[] | null, previousLineBreakData: ModelLineProjectionData | null) => {\n\t\t\t\trequests.push(lineText);\n\t\t\t\tinjectedTexts.push(injectedText);\n\t\t\t},\n\t\t\tfinalize: () => {\n\t\t\t\treturn createLineBreaks(assertReturnsDefined(this.targetWindow.deref()), requests, fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak, injectedTexts);\n\t\t\t}\n\t\t};\n\t}\n}\n\nfunction createLineBreaks(targetWindow: Window, requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent, wordBreak: 'normal' | 'keepAll', injectedTextsPerLine: (LineInjectedText[] | null)[]): (ModelLineProjectionData | null)[] {\n\tfunction createEmptyLineBreakWithPossiblyInjectedText(requestIdx: number): ModelLineProjectionData | null {\n\t\tconst injectedTexts = injectedTextsPerLine[requestIdx];\n\t\tif (injectedTexts) {\n\t\t\tconst lineText = LineInjectedText.applyInjectedText(requests[requestIdx], injectedTexts);\n\n\t\t\tconst injectionOptions = injectedTexts.map(t => t.options);\n\t\t\tconst injectionOffsets = injectedTexts.map(text => text.column - 1);\n\n\t\t\t// creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n\t\t\t// because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n\t\t\treturn new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tif (firstLineBreakColumn === -1) {\n\t\tconst result: (ModelLineProjectionData | null)[] = [];\n\t\tfor (let i = 0, len = requests.length; i < len; i++) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconst overallWidth = Math.round(firstLineBreakColumn * fontInfo.typicalHalfwidthCharacterWidth);\n\tconst additionalIndent = (wrappingIndent === WrappingIndent.DeepIndent ? 2 : wrappingIndent === WrappingIndent.Indent ? 1 : 0);\n\tconst additionalIndentSize = Math.round(tabSize * additionalIndent);\n\tconst additionalIndentLength = Math.ceil(fontInfo.spaceWidth * additionalIndentSize);\n\n\tconst containerDomNode = document.createElement('div');\n\tapplyFontInfo(containerDomNode, fontInfo);\n\n\tconst sb = new StringBuilder(10000);\n\tconst firstNonWhitespaceIndices: number[] = [];\n\tconst wrappedTextIndentLengths: number[] = [];\n\tconst renderLineContents: string[] = [];\n\tconst allCharOffsets: number[][] = [];\n\tconst allVisibleColumns: number[][] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTextsPerLine[i]);\n\n\t\tlet firstNonWhitespaceIndex = 0;\n\t\tlet wrappedTextIndentLength = 0;\n\t\tlet width = overallWidth;\n\n\t\tif (wrappingIndent !== WrappingIndent.None) {\n\t\t\tfirstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\t\t\tif (firstNonWhitespaceIndex === -1) {\n\t\t\t\t// all whitespace line\n\t\t\t\tfirstNonWhitespaceIndex = 0;\n\n\t\t\t} else {\n\t\t\t\t// Track existing indent\n\n\t\t\t\tfor (let i = 0; i < firstNonWhitespaceIndex; i++) {\n\t\t\t\t\tconst charWidth = (\n\t\t\t\t\t\tlineContent.charCodeAt(i) === CharCode.Tab\n\t\t\t\t\t\t\t? (tabSize - (wrappedTextIndentLength % tabSize))\n\t\t\t\t\t\t\t: 1\n\t\t\t\t\t);\n\t\t\t\t\twrappedTextIndentLength += charWidth;\n\t\t\t\t}\n\n\t\t\t\tconst indentWidth = Math.ceil(fontInfo.spaceWidth * wrappedTextIndentLength);\n\n\t\t\t\t// Force sticking to beginning of line if no character would fit except for the indentation\n\t\t\t\tif (indentWidth + fontInfo.typicalFullwidthCharacterWidth > overallWidth) {\n\t\t\t\t\tfirstNonWhitespaceIndex = 0;\n\t\t\t\t\twrappedTextIndentLength = 0;\n\t\t\t\t} else {\n\t\t\t\t\twidth = overallWidth - indentWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderLineContent = lineContent.substr(firstNonWhitespaceIndex);\n\t\tconst tmp = renderLine(renderLineContent, wrappedTextIndentLength, tabSize, width, sb, additionalIndentLength);\n\t\tfirstNonWhitespaceIndices[i] = firstNonWhitespaceIndex;\n\t\twrappedTextIndentLengths[i] = wrappedTextIndentLength;\n\t\trenderLineContents[i] = renderLineContent;\n\t\tallCharOffsets[i] = tmp[0];\n\t\tallVisibleColumns[i] = tmp[1];\n\t}\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy?.createHTML(html) ?? html;\n\tcontainerDomNode.innerHTML = trustedhtml as string;\n\n\tcontainerDomNode.style.position = 'absolute';\n\tcontainerDomNode.style.top = '10000px';\n\tif (wordBreak === 'keepAll') {\n\t\t// word-break: keep-all; overflow-wrap: anywhere\n\t\tcontainerDomNode.style.wordBreak = 'keep-all';\n\t\tcontainerDomNode.style.overflowWrap = 'anywhere';\n\t} else {\n\t\t// overflow-wrap: break-word\n\t\tcontainerDomNode.style.wordBreak = 'inherit';\n\t\tcontainerDomNode.style.overflowWrap = 'break-word';\n\t}\n\ttargetWindow.document.body.appendChild(containerDomNode);\n\n\tconst range = document.createRange();\n\tconst lineDomNodes = Array.prototype.slice.call(containerDomNode.children, 0);\n\n\tconst result: (ModelLineProjectionData | null)[] = [];\n\tfor (let i = 0; i < requests.length; i++) {\n\t\tconst lineDomNode = lineDomNodes[i];\n\t\tconst breakOffsets: number[] | null = readLineBreaks(range, lineDomNode, renderLineContents[i], allCharOffsets[i]);\n\t\tif (breakOffsets === null) {\n\t\t\tresult[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst firstNonWhitespaceIndex = firstNonWhitespaceIndices[i];\n\t\tconst wrappedTextIndentLength = wrappedTextIndentLengths[i] + additionalIndentSize;\n\t\tconst visibleColumns = allVisibleColumns[i];\n\n\t\tconst breakOffsetsVisibleColumn: number[] = [];\n\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\tbreakOffsetsVisibleColumn[j] = visibleColumns[breakOffsets[j]];\n\t\t}\n\n\t\tif (firstNonWhitespaceIndex !== 0) {\n\t\t\t// All break offsets are relative to the renderLineContent, make them absolute again\n\t\t\tfor (let j = 0, len = breakOffsets.length; j < len; j++) {\n\t\t\t\tbreakOffsets[j] += firstNonWhitespaceIndex;\n\t\t\t}\n\t\t}\n\n\t\tlet injectionOptions: InjectedTextOptions[] | null;\n\t\tlet injectionOffsets: number[] | null;\n\t\tconst curInjectedTexts = injectedTextsPerLine[i];\n\t\tif (curInjectedTexts) {\n\t\t\tinjectionOptions = curInjectedTexts.map(t => t.options);\n\t\t\tinjectionOffsets = curInjectedTexts.map(text => text.column - 1);\n\t\t} else {\n\t\t\tinjectionOptions = null;\n\t\t\tinjectionOffsets = null;\n\t\t}\n\n\t\tresult[i] = new ModelLineProjectionData(injectionOffsets, injectionOptions, breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength);\n\t}\n\n\tcontainerDomNode.remove();\n\treturn result;\n}\n\nconst enum Constants {\n\tSPAN_MODULO_LIMIT = 16384\n}\n\nfunction renderLine(lineContent: string, initialVisibleColumn: number, tabSize: number, width: number, sb: StringBuilder, wrappingIndentLength: number): [number[], number[]] {\n\n\tif (wrappingIndentLength !== 0) {\n\t\tconst hangingOffset = String(wrappingIndentLength);\n\t\tsb.appendString('<div style=\"text-indent: -');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; padding-left: ');\n\t\tsb.appendString(hangingOffset);\n\t\tsb.appendString('px; box-sizing: border-box; width:');\n\t} else {\n\t\tsb.appendString('<div style=\"width:');\n\t}\n\tsb.appendString(String(width));\n\tsb.appendString('px;\">');\n\t// if (containsRTL) {\n\t// \tsb.appendASCIIString('\" dir=\"ltr');\n\t// }\n\n\tconst len = lineContent.length;\n\tlet visibleColumn = initialVisibleColumn;\n\tlet charOffset = 0;\n\tconst charOffsets: number[] = [];\n\tconst visibleColumns: number[] = [];\n\tlet nextCharCode = (0 < len ? lineContent.charCodeAt(0) : CharCode.Null);\n\n\tsb.appendString('<span>');\n\tfor (let charIndex = 0; charIndex < len; charIndex++) {\n\t\tif (charIndex !== 0 && charIndex % Constants.SPAN_MODULO_LIMIT === 0) {\n\t\t\tsb.appendString('</span><span>');\n\t\t}\n\t\tcharOffsets[charIndex] = charOffset;\n\t\tvisibleColumns[charIndex] = visibleColumn;\n\t\tconst charCode = nextCharCode;\n\t\tnextCharCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\tlet producedCharacters = 1;\n\t\tlet charWidth = 1;\n\t\tswitch (charCode) {\n\t\t\tcase CharCode.Tab:\n\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\tif (space < producedCharacters) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Space:\n\t\t\t\tif (nextCharCode === CharCode.Space) {\n\t\t\t\t\tsb.appendCharCode(0xA0); // &nbsp;\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendASCIICharCode(CharCode.Space);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.LessThan:\n\t\t\t\tsb.appendString('&lt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.GreaterThan:\n\t\t\t\tsb.appendString('&gt;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Ampersand:\n\t\t\t\tsb.appendString('&amp;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Null:\n\t\t\t\tsb.appendString('&#00;');\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.UTF8_BOM:\n\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\tcharWidth++;\n\t\t\t\t}\n\t\t\t\tif (charCode < 32) {\n\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t} else {\n\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t}\n\t\t}\n\n\t\tcharOffset += producedCharacters;\n\t\tvisibleColumn += charWidth;\n\t}\n\tsb.appendString('</span>');\n\n\tcharOffsets[lineContent.length] = charOffset;\n\tvisibleColumns[lineContent.length] = visibleColumn;\n\n\tsb.appendString('</div>');\n\n\treturn [charOffsets, visibleColumns];\n}\n\nfunction readLineBreaks(range: Range, lineDomNode: HTMLDivElement, lineContent: string, charOffsets: number[]): number[] | null {\n\tif (lineContent.length <= 1) {\n\t\treturn null;\n\t}\n\tconst spans = <HTMLSpanElement[]>Array.prototype.slice.call(lineDomNode.children, 0);\n\n\tconst breakOffsets: number[] = [];\n\ttry {\n\t\tdiscoverBreaks(range, spans, charOffsets, 0, null, lineContent.length - 1, null, breakOffsets);\n\t} catch (err) {\n\t\tconsole.log(err);\n\t\treturn null;\n\t}\n\n\tif (breakOffsets.length === 0) {\n\t\treturn null;\n\t}\n\n\tbreakOffsets.push(lineContent.length);\n\treturn breakOffsets;\n}\n\nfunction discoverBreaks(range: Range, spans: HTMLSpanElement[], charOffsets: number[], low: number, lowRects: DOMRectList | null, high: number, highRects: DOMRectList | null, result: number[]): void {\n\tif (low === high) {\n\t\treturn;\n\t}\n\n\tlowRects = lowRects || readClientRect(range, spans, charOffsets[low], charOffsets[low + 1]);\n\thighRects = highRects || readClientRect(range, spans, charOffsets[high], charOffsets[high + 1]);\n\n\tif (Math.abs(lowRects[0].top - highRects[0].top) <= 0.1) {\n\t\t// same line\n\t\treturn;\n\t}\n\n\t// there is at least one line break between these two offsets\n\tif (low + 1 === high) {\n\t\t// the two characters are adjacent, so the line break must be exactly between them\n\t\tresult.push(high);\n\t\treturn;\n\t}\n\n\tconst mid = low + ((high - low) / 2) | 0;\n\tconst midRects = readClientRect(range, spans, charOffsets[mid], charOffsets[mid + 1]);\n\tdiscoverBreaks(range, spans, charOffsets, low, lowRects, mid, midRects, result);\n\tdiscoverBreaks(range, spans, charOffsets, mid, midRects, high, highRects, result);\n}\n\nfunction readClientRect(range: Range, spans: HTMLSpanElement[], startOffset: number, endOffset: number): DOMRectList {\n\trange.setStart(spans[(startOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, startOffset % Constants.SPAN_MODULO_LIMIT);\n\trange.setEnd(spans[(endOffset / Constants.SPAN_MODULO_LIMIT) | 0].firstChild!, endOffset % Constants.SPAN_MODULO_LIMIT);\n\treturn range.getClientRects();\n}\n"]}
@@ -43,7 +43,7 @@ export class RenderingContext extends RestrictedRenderingContext {
43
43
  linesVisibleRangesForRange(range, includeNewLines) {
44
44
  const domRanges = this._viewLines.linesVisibleRangesForRange(range, includeNewLines);
45
45
  if (!this._viewLinesGpu) {
46
- return domRanges ?? null;
46
+ return domRanges;
47
47
  }
48
48
  const gpuRanges = this._viewLinesGpu.linesVisibleRangesForRange(range, includeNewLines);
49
49
  if (!domRanges) {
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/view/renderingContext.ts","vs/editor/browser/view/renderingContext.ts"],"names":[],"mappings":"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","file":"renderingContext.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { IViewLayout } from '../../common/viewModel.js';\nimport { ViewModelDecoration } from '../../common/viewModel/viewModelDecoration.js';\n\nexport interface IViewLines {\n\tlinesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null;\n\tvisibleRangeForPosition(position: Position): HorizontalPosition | null;\n}\n\nexport abstract class RestrictedRenderingContext {\n\t_restrictedRenderingContextBrand: void = undefined;\n\n\tpublic readonly viewportData: ViewportData;\n\n\tpublic readonly scrollWidth: number;\n\tpublic readonly scrollHeight: number;\n\n\tpublic readonly visibleRange: Range;\n\tpublic readonly bigNumbersDelta: number;\n\n\tpublic readonly scrollTop: number;\n\tpublic readonly scrollLeft: number;\n\n\tpublic readonly viewportWidth: number;\n\tpublic readonly viewportHeight: number;\n\n\tprivate readonly _viewLayout: IViewLayout;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData) {\n\t\tthis._viewLayout = viewLayout;\n\t\tthis.viewportData = viewportData;\n\n\t\tthis.scrollWidth = this._viewLayout.getScrollWidth();\n\t\tthis.scrollHeight = this._viewLayout.getScrollHeight();\n\n\t\tthis.visibleRange = this.viewportData.visibleRange;\n\t\tthis.bigNumbersDelta = this.viewportData.bigNumbersDelta;\n\n\t\tconst vInfo = this._viewLayout.getCurrentViewport();\n\t\tthis.scrollTop = vInfo.top;\n\t\tthis.scrollLeft = vInfo.left;\n\t\tthis.viewportWidth = vInfo.width;\n\t\tthis.viewportHeight = vInfo.height;\n\t}\n\n\tpublic getScrolledTopFromAbsoluteTop(absoluteTop: number): number {\n\t\treturn absoluteTop - this.scrollTop;\n\t}\n\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetForLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getVerticalOffsetAfterLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getLineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\n\n\tpublic getDecorationsInViewport(): ViewModelDecoration[] {\n\t\treturn this.viewportData.getDecorationsInViewport();\n\t}\n\n}\n\nexport class RenderingContext extends RestrictedRenderingContext {\n\t_renderingContextBrand: void = undefined;\n\n\tprivate readonly _viewLines: IViewLines;\n\tprivate readonly _viewLinesGpu?: IViewLines;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData, viewLines: IViewLines, viewLinesGpu?: IViewLines) {\n\t\tsuper(viewLayout, viewportData);\n\t\tthis._viewLines = viewLines;\n\t\tthis._viewLinesGpu = viewLinesGpu;\n\t}\n\n\tpublic linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tconst domRanges = this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!this._viewLinesGpu) {\n\t\t\treturn domRanges ?? null;\n\t\t}\n\t\tconst gpuRanges = this._viewLinesGpu.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!domRanges) {\n\t\t\treturn gpuRanges;\n\t\t}\n\t\tif (!gpuRanges) {\n\t\t\treturn domRanges;\n\t\t}\n\t\treturn domRanges.concat(gpuRanges).sort((a, b) => a.lineNumber - b.lineNumber);\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\treturn this._viewLines.visibleRangeForPosition(position) ?? this._viewLinesGpu?.visibleRangeForPosition(position) ?? null;\n\t}\n}\n\nexport class LineVisibleRanges {\n\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly ranges: HorizontalRange[],\n\t\t/**\n\t\t * Indicates if the requested range does not end in this line, but continues on the next line.\n\t\t */\n\t\tpublic readonly continuesOnNextLine: boolean,\n\t) { }\n}\n\nexport class HorizontalRange {\n\t_horizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tpublic static from(ranges: FloatHorizontalRange[]): HorizontalRange[] {\n\t\tconst result = new Array(ranges.length);\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst range = ranges[i];\n\t\t\tresult[i] = new HorizontalRange(range.left, range.width);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = Math.round(left);\n\t\tthis.width = Math.round(width);\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n}\n\nexport class FloatHorizontalRange {\n\t_floatHorizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = left;\n\t\tthis.width = width;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n\n\tpublic static compare(a: FloatHorizontalRange, b: FloatHorizontalRange): number {\n\t\treturn a.left - b.left;\n\t}\n}\n\nexport class HorizontalPosition {\n\tpublic outsideRenderedLine: boolean;\n\t/**\n\t * Math.round(this.originalLeft)\n\t */\n\tpublic left: number;\n\tpublic originalLeft: number;\n\n\tconstructor(outsideRenderedLine: boolean, left: number) {\n\t\tthis.outsideRenderedLine = outsideRenderedLine;\n\t\tthis.originalLeft = left;\n\t\tthis.left = Math.round(this.originalLeft);\n\t}\n}\n\nexport class VisibleRanges {\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly ranges: FloatHorizontalRange[]\n\t) {\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { IViewLayout } from '../../common/viewModel.js';\nimport { ViewModelDecoration } from '../../common/viewModel/viewModelDecoration.js';\n\nexport interface IViewLines {\n\tlinesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null;\n\tvisibleRangeForPosition(position: Position): HorizontalPosition | null;\n}\n\nexport abstract class RestrictedRenderingContext {\n\t_restrictedRenderingContextBrand: void = undefined;\n\n\tpublic readonly viewportData: ViewportData;\n\n\tpublic readonly scrollWidth: number;\n\tpublic readonly scrollHeight: number;\n\n\tpublic readonly visibleRange: Range;\n\tpublic readonly bigNumbersDelta: number;\n\n\tpublic readonly scrollTop: number;\n\tpublic readonly scrollLeft: number;\n\n\tpublic readonly viewportWidth: number;\n\tpublic readonly viewportHeight: number;\n\n\tprivate readonly _viewLayout: IViewLayout;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData) {\n\t\tthis._viewLayout = viewLayout;\n\t\tthis.viewportData = viewportData;\n\n\t\tthis.scrollWidth = this._viewLayout.getScrollWidth();\n\t\tthis.scrollHeight = this._viewLayout.getScrollHeight();\n\n\t\tthis.visibleRange = this.viewportData.visibleRange;\n\t\tthis.bigNumbersDelta = this.viewportData.bigNumbersDelta;\n\n\t\tconst vInfo = this._viewLayout.getCurrentViewport();\n\t\tthis.scrollTop = vInfo.top;\n\t\tthis.scrollLeft = vInfo.left;\n\t\tthis.viewportWidth = vInfo.width;\n\t\tthis.viewportHeight = vInfo.height;\n\t}\n\n\tpublic getScrolledTopFromAbsoluteTop(absoluteTop: number): number {\n\t\treturn absoluteTop - this.scrollTop;\n\t}\n\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetForLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getVerticalOffsetAfterLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getLineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\n\n\tpublic getDecorationsInViewport(): ViewModelDecoration[] {\n\t\treturn this.viewportData.getDecorationsInViewport();\n\t}\n\n}\n\nexport class RenderingContext extends RestrictedRenderingContext {\n\t_renderingContextBrand: void = undefined;\n\n\tprivate readonly _viewLines: IViewLines;\n\tprivate readonly _viewLinesGpu?: IViewLines;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData, viewLines: IViewLines, viewLinesGpu?: IViewLines) {\n\t\tsuper(viewLayout, viewportData);\n\t\tthis._viewLines = viewLines;\n\t\tthis._viewLinesGpu = viewLinesGpu;\n\t}\n\n\tpublic linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tconst domRanges = this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!this._viewLinesGpu) {\n\t\t\treturn domRanges ?? null;\n\t\t}\n\t\tconst gpuRanges = this._viewLinesGpu.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!domRanges) {\n\t\t\treturn gpuRanges;\n\t\t}\n\t\tif (!gpuRanges) {\n\t\t\treturn domRanges;\n\t\t}\n\t\treturn domRanges.concat(gpuRanges).sort((a, b) => a.lineNumber - b.lineNumber);\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\treturn this._viewLines.visibleRangeForPosition(position) ?? this._viewLinesGpu?.visibleRangeForPosition(position) ?? null;\n\t}\n}\n\nexport class LineVisibleRanges {\n\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly ranges: HorizontalRange[],\n\t\t/**\n\t\t * Indicates if the requested range does not end in this line, but continues on the next line.\n\t\t */\n\t\tpublic readonly continuesOnNextLine: boolean,\n\t) { }\n}\n\nexport class HorizontalRange {\n\t_horizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tpublic static from(ranges: FloatHorizontalRange[]): HorizontalRange[] {\n\t\tconst result = new Array(ranges.length);\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst range = ranges[i];\n\t\t\tresult[i] = new HorizontalRange(range.left, range.width);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = Math.round(left);\n\t\tthis.width = Math.round(width);\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n}\n\nexport class FloatHorizontalRange {\n\t_floatHorizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = left;\n\t\tthis.width = width;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n\n\tpublic static compare(a: FloatHorizontalRange, b: FloatHorizontalRange): number {\n\t\treturn a.left - b.left;\n\t}\n}\n\nexport class HorizontalPosition {\n\tpublic outsideRenderedLine: boolean;\n\t/**\n\t * Math.round(this.originalLeft)\n\t */\n\tpublic left: number;\n\tpublic originalLeft: number;\n\n\tconstructor(outsideRenderedLine: boolean, left: number) {\n\t\tthis.outsideRenderedLine = outsideRenderedLine;\n\t\tthis.originalLeft = left;\n\t\tthis.left = Math.round(this.originalLeft);\n\t}\n}\n\nexport class VisibleRanges {\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly ranges: FloatHorizontalRange[]\n\t) {\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/view/renderingContext.ts","vs/editor/browser/view/renderingContext.ts"],"names":[],"mappings":"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","file":"renderingContext.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { IViewLayout } from '../../common/viewModel.js';\nimport { ViewModelDecoration } from '../../common/viewModel/viewModelDecoration.js';\n\nexport interface IViewLines {\n\tlinesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null;\n\tvisibleRangeForPosition(position: Position): HorizontalPosition | null;\n}\n\nexport abstract class RestrictedRenderingContext {\n\t_restrictedRenderingContextBrand: void = undefined;\n\n\tpublic readonly viewportData: ViewportData;\n\n\tpublic readonly scrollWidth: number;\n\tpublic readonly scrollHeight: number;\n\n\tpublic readonly visibleRange: Range;\n\tpublic readonly bigNumbersDelta: number;\n\n\tpublic readonly scrollTop: number;\n\tpublic readonly scrollLeft: number;\n\n\tpublic readonly viewportWidth: number;\n\tpublic readonly viewportHeight: number;\n\n\tprivate readonly _viewLayout: IViewLayout;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData) {\n\t\tthis._viewLayout = viewLayout;\n\t\tthis.viewportData = viewportData;\n\n\t\tthis.scrollWidth = this._viewLayout.getScrollWidth();\n\t\tthis.scrollHeight = this._viewLayout.getScrollHeight();\n\n\t\tthis.visibleRange = this.viewportData.visibleRange;\n\t\tthis.bigNumbersDelta = this.viewportData.bigNumbersDelta;\n\n\t\tconst vInfo = this._viewLayout.getCurrentViewport();\n\t\tthis.scrollTop = vInfo.top;\n\t\tthis.scrollLeft = vInfo.left;\n\t\tthis.viewportWidth = vInfo.width;\n\t\tthis.viewportHeight = vInfo.height;\n\t}\n\n\tpublic getScrolledTopFromAbsoluteTop(absoluteTop: number): number {\n\t\treturn absoluteTop - this.scrollTop;\n\t}\n\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetForLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getVerticalOffsetAfterLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getLineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\n\n\tpublic getDecorationsInViewport(): ViewModelDecoration[] {\n\t\treturn this.viewportData.getDecorationsInViewport();\n\t}\n\n}\n\nexport class RenderingContext extends RestrictedRenderingContext {\n\t_renderingContextBrand: void = undefined;\n\n\tprivate readonly _viewLines: IViewLines;\n\tprivate readonly _viewLinesGpu?: IViewLines;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData, viewLines: IViewLines, viewLinesGpu?: IViewLines) {\n\t\tsuper(viewLayout, viewportData);\n\t\tthis._viewLines = viewLines;\n\t\tthis._viewLinesGpu = viewLinesGpu;\n\t}\n\n\tpublic linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tconst domRanges = this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!this._viewLinesGpu) {\n\t\t\treturn domRanges;\n\t\t}\n\t\tconst gpuRanges = this._viewLinesGpu.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!domRanges) {\n\t\t\treturn gpuRanges;\n\t\t}\n\t\tif (!gpuRanges) {\n\t\t\treturn domRanges;\n\t\t}\n\t\treturn domRanges.concat(gpuRanges).sort((a, b) => a.lineNumber - b.lineNumber);\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\treturn this._viewLines.visibleRangeForPosition(position) ?? this._viewLinesGpu?.visibleRangeForPosition(position) ?? null;\n\t}\n}\n\nexport class LineVisibleRanges {\n\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly ranges: HorizontalRange[],\n\t\t/**\n\t\t * Indicates if the requested range does not end in this line, but continues on the next line.\n\t\t */\n\t\tpublic readonly continuesOnNextLine: boolean,\n\t) { }\n}\n\nexport class HorizontalRange {\n\t_horizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tpublic static from(ranges: FloatHorizontalRange[]): HorizontalRange[] {\n\t\tconst result = new Array(ranges.length);\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst range = ranges[i];\n\t\t\tresult[i] = new HorizontalRange(range.left, range.width);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = Math.round(left);\n\t\tthis.width = Math.round(width);\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n}\n\nexport class FloatHorizontalRange {\n\t_floatHorizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = left;\n\t\tthis.width = width;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n\n\tpublic static compare(a: FloatHorizontalRange, b: FloatHorizontalRange): number {\n\t\treturn a.left - b.left;\n\t}\n}\n\nexport class HorizontalPosition {\n\tpublic outsideRenderedLine: boolean;\n\t/**\n\t * Math.round(this.originalLeft)\n\t */\n\tpublic left: number;\n\tpublic originalLeft: number;\n\n\tconstructor(outsideRenderedLine: boolean, left: number) {\n\t\tthis.outsideRenderedLine = outsideRenderedLine;\n\t\tthis.originalLeft = left;\n\t\tthis.left = Math.round(this.originalLeft);\n\t}\n}\n\nexport class VisibleRanges {\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly ranges: FloatHorizontalRange[]\n\t) {\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { IViewLayout } from '../../common/viewModel.js';\nimport { ViewModelDecoration } from '../../common/viewModel/viewModelDecoration.js';\n\nexport interface IViewLines {\n\tlinesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null;\n\tvisibleRangeForPosition(position: Position): HorizontalPosition | null;\n}\n\nexport abstract class RestrictedRenderingContext {\n\t_restrictedRenderingContextBrand: void = undefined;\n\n\tpublic readonly viewportData: ViewportData;\n\n\tpublic readonly scrollWidth: number;\n\tpublic readonly scrollHeight: number;\n\n\tpublic readonly visibleRange: Range;\n\tpublic readonly bigNumbersDelta: number;\n\n\tpublic readonly scrollTop: number;\n\tpublic readonly scrollLeft: number;\n\n\tpublic readonly viewportWidth: number;\n\tpublic readonly viewportHeight: number;\n\n\tprivate readonly _viewLayout: IViewLayout;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData) {\n\t\tthis._viewLayout = viewLayout;\n\t\tthis.viewportData = viewportData;\n\n\t\tthis.scrollWidth = this._viewLayout.getScrollWidth();\n\t\tthis.scrollHeight = this._viewLayout.getScrollHeight();\n\n\t\tthis.visibleRange = this.viewportData.visibleRange;\n\t\tthis.bigNumbersDelta = this.viewportData.bigNumbersDelta;\n\n\t\tconst vInfo = this._viewLayout.getCurrentViewport();\n\t\tthis.scrollTop = vInfo.top;\n\t\tthis.scrollLeft = vInfo.left;\n\t\tthis.viewportWidth = vInfo.width;\n\t\tthis.viewportHeight = vInfo.height;\n\t}\n\n\tpublic getScrolledTopFromAbsoluteTop(absoluteTop: number): number {\n\t\treturn absoluteTop - this.scrollTop;\n\t}\n\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetForLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getVerticalOffsetAfterLineNumber(lineNumber: number, includeViewZones?: boolean): number {\n\t\treturn this._viewLayout.getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones);\n\t}\n\n\tpublic getLineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\n\n\tpublic getDecorationsInViewport(): ViewModelDecoration[] {\n\t\treturn this.viewportData.getDecorationsInViewport();\n\t}\n\n}\n\nexport class RenderingContext extends RestrictedRenderingContext {\n\t_renderingContextBrand: void = undefined;\n\n\tprivate readonly _viewLines: IViewLines;\n\tprivate readonly _viewLinesGpu?: IViewLines;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData, viewLines: IViewLines, viewLinesGpu?: IViewLines) {\n\t\tsuper(viewLayout, viewportData);\n\t\tthis._viewLines = viewLines;\n\t\tthis._viewLinesGpu = viewLinesGpu;\n\t}\n\n\tpublic linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tconst domRanges = this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!this._viewLinesGpu) {\n\t\t\treturn domRanges;\n\t\t}\n\t\tconst gpuRanges = this._viewLinesGpu.linesVisibleRangesForRange(range, includeNewLines);\n\t\tif (!domRanges) {\n\t\t\treturn gpuRanges;\n\t\t}\n\t\tif (!gpuRanges) {\n\t\t\treturn domRanges;\n\t\t}\n\t\treturn domRanges.concat(gpuRanges).sort((a, b) => a.lineNumber - b.lineNumber);\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\treturn this._viewLines.visibleRangeForPosition(position) ?? this._viewLinesGpu?.visibleRangeForPosition(position) ?? null;\n\t}\n}\n\nexport class LineVisibleRanges {\n\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly ranges: HorizontalRange[],\n\t\t/**\n\t\t * Indicates if the requested range does not end in this line, but continues on the next line.\n\t\t */\n\t\tpublic readonly continuesOnNextLine: boolean,\n\t) { }\n}\n\nexport class HorizontalRange {\n\t_horizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tpublic static from(ranges: FloatHorizontalRange[]): HorizontalRange[] {\n\t\tconst result = new Array(ranges.length);\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst range = ranges[i];\n\t\t\tresult[i] = new HorizontalRange(range.left, range.width);\n\t\t}\n\t\treturn result;\n\t}\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = Math.round(left);\n\t\tthis.width = Math.round(width);\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n}\n\nexport class FloatHorizontalRange {\n\t_floatHorizontalRangeBrand: void = undefined;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = left;\n\t\tthis.width = width;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n\n\tpublic static compare(a: FloatHorizontalRange, b: FloatHorizontalRange): number {\n\t\treturn a.left - b.left;\n\t}\n}\n\nexport class HorizontalPosition {\n\tpublic outsideRenderedLine: boolean;\n\t/**\n\t * Math.round(this.originalLeft)\n\t */\n\tpublic left: number;\n\tpublic originalLeft: number;\n\n\tconstructor(outsideRenderedLine: boolean, left: number) {\n\t\tthis.outsideRenderedLine = outsideRenderedLine;\n\t\tthis.originalLeft = left;\n\t\tthis.left = Math.round(this.originalLeft);\n\t}\n}\n\nexport class VisibleRanges {\n\tconstructor(\n\t\tpublic readonly outsideRenderedLine: boolean,\n\t\tpublic readonly ranges: FloatHorizontalRange[]\n\t) {\n\t}\n}\n"]}
@@ -4,7 +4,7 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import './currentLineHighlight.css';
6
6
  import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';
7
- import { editorLineHighlight, editorLineHighlightBorder } from '../../../common/core/editorColorRegistry.js';
7
+ import { editorLineHighlight, editorInactiveLineHighlight, editorLineHighlightBorder } from '../../../common/core/editorColorRegistry.js';
8
8
  import * as arrays from '../../../../base/common/arrays.js';
9
9
  import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';
10
10
  import { Selection } from '../../../common/core/selection.js';
@@ -184,9 +184,16 @@ export class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOver
184
184
  }
185
185
  registerThemingParticipant((theme, collector) => {
186
186
  const lineHighlight = theme.getColor(editorLineHighlight);
187
+ const inactiveLineHighlight = theme.getColor(editorInactiveLineHighlight);
188
+ // Apply active line highlight when editor is focused
187
189
  if (lineHighlight) {
188
- collector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${lineHighlight}; }`);
189
- collector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);
190
+ collector.addRule(`.monaco-editor.focused .view-overlays .current-line { background-color: ${lineHighlight}; }`);
191
+ collector.addRule(`.monaco-editor.focused .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);
192
+ }
193
+ // Apply inactive line highlight when editor is not focused
194
+ if (inactiveLineHighlight) {
195
+ collector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${inactiveLineHighlight}; }`);
196
+ collector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${inactiveLineHighlight}; border: none; }`);
190
197
  }
191
198
  if (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {
192
199
  const lineHighlightBorder = theme.getColor(editorLineHighlightBorder);
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts","vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts"],"names":[],"mappings":"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","file":"currentLineHighlight.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport './currentLineHighlight.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { editorLineHighlight, editorLineHighlightBorder } from '../../../common/core/editorColorRegistry.js';\nimport { RenderingContext } from '../../view/renderingContext.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport * as arrays from '../../../../base/common/arrays.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { Position } from '../../../common/core/position.js';\n\nexport abstract class AbstractLineHighlightOverlay extends DynamicViewOverlay {\n\tprivate readonly _context: ViewContext;\n\tprotected _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';\n\tprotected _wordWrap: boolean;\n\tprotected _contentLeft: number;\n\tprotected _contentWidth: number;\n\tprotected _selectionIsEmpty: boolean;\n\tprotected _renderLineHighlightOnlyWhenFocus: boolean;\n\tprotected _focused: boolean;\n\t/**\n\t * Unique sorted list of view line numbers which have cursors sitting on them.\n\t */\n\tprivate _cursorLineNumbers: number[];\n\tprivate _selections: Selection[];\n\tprivate _renderData: string[] | null;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\tthis._selectionIsEmpty = true;\n\t\tthis._focused = false;\n\t\tthis._cursorLineNumbers = [1];\n\t\tthis._selections = [new Selection(1, 1, 1, 1)];\n\t\tthis._renderData = null;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tsuper.dispose();\n\t}\n\n\tprivate _readFromSelections(): boolean {\n\t\tlet hasChanged = false;\n\n\t\tconst lineNumbers = new Set<number>();\n\t\tfor (const selection of this._selections) {\n\t\t\tlineNumbers.add(selection.positionLineNumber);\n\t\t}\n\t\tconst cursorsLineNumbers = Array.from(lineNumbers);\n\t\tcursorsLineNumbers.sort((a, b) => a - b);\n\t\tif (!arrays.equals(this._cursorLineNumbers, cursorsLineNumbers)) {\n\t\t\tthis._cursorLineNumbers = cursorsLineNumbers;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\tconst selectionIsEmpty = this._selections.every(s => s.isEmpty());\n\t\tif (this._selectionIsEmpty !== selectionIsEmpty) {\n\t\t\tthis._selectionIsEmpty = selectionIsEmpty;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\treturn hasChanged;\n\t}\n\n\t// --- begin event handlers\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\treturn true;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._selections = e.selections;\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollWidthChanged || e.scrollTopChanged;\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tif (!this._renderLineHighlightOnlyWhenFocus) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._focused = e.isFocused;\n\t\treturn true;\n\t}\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (!this._shouldRenderThis()) {\n\t\t\tthis._renderData = null;\n\t\t\treturn;\n\t\t}\n\t\tconst visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tconst visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\n\t\t// initialize renderData\n\t\tconst renderData: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = '';\n\t\t}\n\n\t\tif (this._wordWrap) {\n\t\t\t// do a first pass to render wrapped lines\n\t\t\tconst renderedLineWrapped = this._renderOne(ctx, false);\n\t\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\n\t\t\t\tconst coordinatesConverter = this._context.viewModel.coordinatesConverter;\n\t\t\t\tconst modelLineNumber = coordinatesConverter.convertViewPositionToModelPosition(new Position(cursorLineNumber, 1)).lineNumber;\n\t\t\t\tconst firstViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, 1)).lineNumber;\n\t\t\t\tconst lastViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, this._context.viewModel.model.getLineMaxColumn(modelLineNumber))).lineNumber;\n\n\t\t\t\tconst firstLine = Math.max(firstViewLineNumber, visibleStartLineNumber);\n\t\t\t\tconst lastLine = Math.min(lastViewLineNumber, visibleEndLineNumber);\n\t\t\t\tfor (let lineNumber = firstLine; lineNumber <= lastLine; lineNumber++) {\n\t\t\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\t\t\trenderData[lineIndex] = renderedLineWrapped;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// do a second pass to render exact lines\n\t\tconst renderedLineExact = this._renderOne(ctx, true);\n\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\t\t\tif (cursorLineNumber < visibleStartLineNumber || cursorLineNumber > visibleEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst lineIndex = cursorLineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = renderedLineExact;\n\t\t}\n\n\t\tthis._renderData = renderData;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderData) {\n\t\t\treturn '';\n\t\t}\n\t\tconst lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex >= this._renderData.length) {\n\t\t\treturn '';\n\t\t}\n\t\treturn this._renderData[lineIndex];\n\t}\n\n\tprotected _shouldRenderInMargin(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all')\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected _shouldRenderInContent(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\n\t\t\t&& this._selectionIsEmpty\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected abstract _shouldRenderThis(): boolean;\n\tprotected abstract _shouldRenderOther(): boolean;\n\tprotected abstract _renderOne(ctx: RenderingContext, exact: boolean): string;\n}\n\n/**\n * Emphasizes the current line by drawing a border around it.\n */\nexport class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay {\n\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-both' : '') + (exact ? ' current-line-exact' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${Math.max(ctx.scrollWidth, this._contentWidth)}px;\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInMargin();\n\t}\n}\n\n/**\n * Emphasizes the current line margin/gutter by drawing a border around it.\n */\nexport class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOverlay {\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-margin' : '') + (this._shouldRenderOther() ? ' current-line-margin-both' : '') + (this._shouldRenderInMargin() && exact ? ' current-line-exact-margin' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${this._contentLeft}px\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn true;\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tconst lineHighlight = theme.getColor(editorLineHighlight);\n\tif (lineHighlight) {\n\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${lineHighlight}; }`);\n\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);\n\t}\n\tif (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {\n\t\tconst lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\n\t\tif (lineHighlightBorder) {\n\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tif (isHighContrast(theme.type)) {\n\t\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border-width: 1px; }`);\n\t\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border-width: 1px; }`);\n\t\t\t}\n\t\t}\n\t}\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport './currentLineHighlight.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { editorLineHighlight, editorLineHighlightBorder } from '../../../common/core/editorColorRegistry.js';\nimport { RenderingContext } from '../../view/renderingContext.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport * as arrays from '../../../../base/common/arrays.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { Position } from '../../../common/core/position.js';\n\nexport abstract class AbstractLineHighlightOverlay extends DynamicViewOverlay {\n\tprivate readonly _context: ViewContext;\n\tprotected _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';\n\tprotected _wordWrap: boolean;\n\tprotected _contentLeft: number;\n\tprotected _contentWidth: number;\n\tprotected _selectionIsEmpty: boolean;\n\tprotected _renderLineHighlightOnlyWhenFocus: boolean;\n\tprotected _focused: boolean;\n\t/**\n\t * Unique sorted list of view line numbers which have cursors sitting on them.\n\t */\n\tprivate _cursorLineNumbers: number[];\n\tprivate _selections: Selection[];\n\tprivate _renderData: string[] | null;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\tthis._selectionIsEmpty = true;\n\t\tthis._focused = false;\n\t\tthis._cursorLineNumbers = [1];\n\t\tthis._selections = [new Selection(1, 1, 1, 1)];\n\t\tthis._renderData = null;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tsuper.dispose();\n\t}\n\n\tprivate _readFromSelections(): boolean {\n\t\tlet hasChanged = false;\n\n\t\tconst lineNumbers = new Set<number>();\n\t\tfor (const selection of this._selections) {\n\t\t\tlineNumbers.add(selection.positionLineNumber);\n\t\t}\n\t\tconst cursorsLineNumbers = Array.from(lineNumbers);\n\t\tcursorsLineNumbers.sort((a, b) => a - b);\n\t\tif (!arrays.equals(this._cursorLineNumbers, cursorsLineNumbers)) {\n\t\t\tthis._cursorLineNumbers = cursorsLineNumbers;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\tconst selectionIsEmpty = this._selections.every(s => s.isEmpty());\n\t\tif (this._selectionIsEmpty !== selectionIsEmpty) {\n\t\t\tthis._selectionIsEmpty = selectionIsEmpty;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\treturn hasChanged;\n\t}\n\n\t// --- begin event handlers\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\treturn true;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._selections = e.selections;\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollWidthChanged || e.scrollTopChanged;\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tif (!this._renderLineHighlightOnlyWhenFocus) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._focused = e.isFocused;\n\t\treturn true;\n\t}\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (!this._shouldRenderThis()) {\n\t\t\tthis._renderData = null;\n\t\t\treturn;\n\t\t}\n\t\tconst visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tconst visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\n\t\t// initialize renderData\n\t\tconst renderData: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = '';\n\t\t}\n\n\t\tif (this._wordWrap) {\n\t\t\t// do a first pass to render wrapped lines\n\t\t\tconst renderedLineWrapped = this._renderOne(ctx, false);\n\t\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\n\t\t\t\tconst coordinatesConverter = this._context.viewModel.coordinatesConverter;\n\t\t\t\tconst modelLineNumber = coordinatesConverter.convertViewPositionToModelPosition(new Position(cursorLineNumber, 1)).lineNumber;\n\t\t\t\tconst firstViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, 1)).lineNumber;\n\t\t\t\tconst lastViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, this._context.viewModel.model.getLineMaxColumn(modelLineNumber))).lineNumber;\n\n\t\t\t\tconst firstLine = Math.max(firstViewLineNumber, visibleStartLineNumber);\n\t\t\t\tconst lastLine = Math.min(lastViewLineNumber, visibleEndLineNumber);\n\t\t\t\tfor (let lineNumber = firstLine; lineNumber <= lastLine; lineNumber++) {\n\t\t\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\t\t\trenderData[lineIndex] = renderedLineWrapped;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// do a second pass to render exact lines\n\t\tconst renderedLineExact = this._renderOne(ctx, true);\n\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\t\t\tif (cursorLineNumber < visibleStartLineNumber || cursorLineNumber > visibleEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst lineIndex = cursorLineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = renderedLineExact;\n\t\t}\n\n\t\tthis._renderData = renderData;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderData) {\n\t\t\treturn '';\n\t\t}\n\t\tconst lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex >= this._renderData.length) {\n\t\t\treturn '';\n\t\t}\n\t\treturn this._renderData[lineIndex];\n\t}\n\n\tprotected _shouldRenderInMargin(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all')\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected _shouldRenderInContent(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\n\t\t\t&& this._selectionIsEmpty\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected abstract _shouldRenderThis(): boolean;\n\tprotected abstract _shouldRenderOther(): boolean;\n\tprotected abstract _renderOne(ctx: RenderingContext, exact: boolean): string;\n}\n\n/**\n * Emphasizes the current line by drawing a border around it.\n */\nexport class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay {\n\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-both' : '') + (exact ? ' current-line-exact' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${Math.max(ctx.scrollWidth, this._contentWidth)}px;\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInMargin();\n\t}\n}\n\n/**\n * Emphasizes the current line margin/gutter by drawing a border around it.\n */\nexport class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOverlay {\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-margin' : '') + (this._shouldRenderOther() ? ' current-line-margin-both' : '') + (this._shouldRenderInMargin() && exact ? ' current-line-exact-margin' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${this._contentLeft}px\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn true;\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tconst lineHighlight = theme.getColor(editorLineHighlight);\n\tif (lineHighlight) {\n\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${lineHighlight}; }`);\n\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);\n\t}\n\tif (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {\n\t\tconst lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\n\t\tif (lineHighlightBorder) {\n\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tif (isHighContrast(theme.type)) {\n\t\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border-width: 1px; }`);\n\t\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border-width: 1px; }`);\n\t\t\t}\n\t\t}\n\t}\n});\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts","vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts"],"names":[],"mappings":"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","file":"currentLineHighlight.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport './currentLineHighlight.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { editorLineHighlight, editorInactiveLineHighlight, editorLineHighlightBorder } from '../../../common/core/editorColorRegistry.js';\nimport { RenderingContext } from '../../view/renderingContext.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport * as arrays from '../../../../base/common/arrays.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { Position } from '../../../common/core/position.js';\n\nexport abstract class AbstractLineHighlightOverlay extends DynamicViewOverlay {\n\tprivate readonly _context: ViewContext;\n\tprotected _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';\n\tprotected _wordWrap: boolean;\n\tprotected _contentLeft: number;\n\tprotected _contentWidth: number;\n\tprotected _selectionIsEmpty: boolean;\n\tprotected _renderLineHighlightOnlyWhenFocus: boolean;\n\tprotected _focused: boolean;\n\t/**\n\t * Unique sorted list of view line numbers which have cursors sitting on them.\n\t */\n\tprivate _cursorLineNumbers: number[];\n\tprivate _selections: Selection[];\n\tprivate _renderData: string[] | null;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\tthis._selectionIsEmpty = true;\n\t\tthis._focused = false;\n\t\tthis._cursorLineNumbers = [1];\n\t\tthis._selections = [new Selection(1, 1, 1, 1)];\n\t\tthis._renderData = null;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tsuper.dispose();\n\t}\n\n\tprivate _readFromSelections(): boolean {\n\t\tlet hasChanged = false;\n\n\t\tconst lineNumbers = new Set<number>();\n\t\tfor (const selection of this._selections) {\n\t\t\tlineNumbers.add(selection.positionLineNumber);\n\t\t}\n\t\tconst cursorsLineNumbers = Array.from(lineNumbers);\n\t\tcursorsLineNumbers.sort((a, b) => a - b);\n\t\tif (!arrays.equals(this._cursorLineNumbers, cursorsLineNumbers)) {\n\t\t\tthis._cursorLineNumbers = cursorsLineNumbers;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\tconst selectionIsEmpty = this._selections.every(s => s.isEmpty());\n\t\tif (this._selectionIsEmpty !== selectionIsEmpty) {\n\t\t\tthis._selectionIsEmpty = selectionIsEmpty;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\treturn hasChanged;\n\t}\n\n\t// --- begin event handlers\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\treturn true;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._selections = e.selections;\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollWidthChanged || e.scrollTopChanged;\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tif (!this._renderLineHighlightOnlyWhenFocus) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._focused = e.isFocused;\n\t\treturn true;\n\t}\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (!this._shouldRenderThis()) {\n\t\t\tthis._renderData = null;\n\t\t\treturn;\n\t\t}\n\t\tconst visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tconst visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\n\t\t// initialize renderData\n\t\tconst renderData: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = '';\n\t\t}\n\n\t\tif (this._wordWrap) {\n\t\t\t// do a first pass to render wrapped lines\n\t\t\tconst renderedLineWrapped = this._renderOne(ctx, false);\n\t\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\n\t\t\t\tconst coordinatesConverter = this._context.viewModel.coordinatesConverter;\n\t\t\t\tconst modelLineNumber = coordinatesConverter.convertViewPositionToModelPosition(new Position(cursorLineNumber, 1)).lineNumber;\n\t\t\t\tconst firstViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, 1)).lineNumber;\n\t\t\t\tconst lastViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, this._context.viewModel.model.getLineMaxColumn(modelLineNumber))).lineNumber;\n\n\t\t\t\tconst firstLine = Math.max(firstViewLineNumber, visibleStartLineNumber);\n\t\t\t\tconst lastLine = Math.min(lastViewLineNumber, visibleEndLineNumber);\n\t\t\t\tfor (let lineNumber = firstLine; lineNumber <= lastLine; lineNumber++) {\n\t\t\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\t\t\trenderData[lineIndex] = renderedLineWrapped;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// do a second pass to render exact lines\n\t\tconst renderedLineExact = this._renderOne(ctx, true);\n\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\t\t\tif (cursorLineNumber < visibleStartLineNumber || cursorLineNumber > visibleEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst lineIndex = cursorLineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = renderedLineExact;\n\t\t}\n\n\t\tthis._renderData = renderData;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderData) {\n\t\t\treturn '';\n\t\t}\n\t\tconst lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex >= this._renderData.length) {\n\t\t\treturn '';\n\t\t}\n\t\treturn this._renderData[lineIndex];\n\t}\n\n\tprotected _shouldRenderInMargin(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all')\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected _shouldRenderInContent(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\n\t\t\t&& this._selectionIsEmpty\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected abstract _shouldRenderThis(): boolean;\n\tprotected abstract _shouldRenderOther(): boolean;\n\tprotected abstract _renderOne(ctx: RenderingContext, exact: boolean): string;\n}\n\n/**\n * Emphasizes the current line by drawing a border around it.\n */\nexport class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay {\n\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-both' : '') + (exact ? ' current-line-exact' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${Math.max(ctx.scrollWidth, this._contentWidth)}px;\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInMargin();\n\t}\n}\n\n/**\n * Emphasizes the current line margin/gutter by drawing a border around it.\n */\nexport class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOverlay {\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-margin' : '') + (this._shouldRenderOther() ? ' current-line-margin-both' : '') + (this._shouldRenderInMargin() && exact ? ' current-line-exact-margin' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${this._contentLeft}px\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn true;\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tconst lineHighlight = theme.getColor(editorLineHighlight);\n\tconst inactiveLineHighlight = theme.getColor(editorInactiveLineHighlight);\n\n\t// Apply active line highlight when editor is focused\n\tif (lineHighlight) {\n\t\tcollector.addRule(`.monaco-editor.focused .view-overlays .current-line { background-color: ${lineHighlight}; }`);\n\t\tcollector.addRule(`.monaco-editor.focused .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);\n\t}\n\n\t// Apply inactive line highlight when editor is not focused\n\tif (inactiveLineHighlight) {\n\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${inactiveLineHighlight}; }`);\n\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${inactiveLineHighlight}; border: none; }`);\n\t}\n\n\tif (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {\n\t\tconst lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\n\t\tif (lineHighlightBorder) {\n\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tif (isHighContrast(theme.type)) {\n\t\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border-width: 1px; }`);\n\t\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border-width: 1px; }`);\n\t\t\t}\n\t\t}\n\t}\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport './currentLineHighlight.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { editorLineHighlight, editorInactiveLineHighlight, editorLineHighlightBorder } from '../../../common/core/editorColorRegistry.js';\nimport { RenderingContext } from '../../view/renderingContext.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport * as arrays from '../../../../base/common/arrays.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { Position } from '../../../common/core/position.js';\n\nexport abstract class AbstractLineHighlightOverlay extends DynamicViewOverlay {\n\tprivate readonly _context: ViewContext;\n\tprotected _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';\n\tprotected _wordWrap: boolean;\n\tprotected _contentLeft: number;\n\tprotected _contentWidth: number;\n\tprotected _selectionIsEmpty: boolean;\n\tprotected _renderLineHighlightOnlyWhenFocus: boolean;\n\tprotected _focused: boolean;\n\t/**\n\t * Unique sorted list of view line numbers which have cursors sitting on them.\n\t */\n\tprivate _cursorLineNumbers: number[];\n\tprivate _selections: Selection[];\n\tprivate _renderData: string[] | null;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\tthis._selectionIsEmpty = true;\n\t\tthis._focused = false;\n\t\tthis._cursorLineNumbers = [1];\n\t\tthis._selections = [new Selection(1, 1, 1, 1)];\n\t\tthis._renderData = null;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tsuper.dispose();\n\t}\n\n\tprivate _readFromSelections(): boolean {\n\t\tlet hasChanged = false;\n\n\t\tconst lineNumbers = new Set<number>();\n\t\tfor (const selection of this._selections) {\n\t\t\tlineNumbers.add(selection.positionLineNumber);\n\t\t}\n\t\tconst cursorsLineNumbers = Array.from(lineNumbers);\n\t\tcursorsLineNumbers.sort((a, b) => a - b);\n\t\tif (!arrays.equals(this._cursorLineNumbers, cursorsLineNumbers)) {\n\t\t\tthis._cursorLineNumbers = cursorsLineNumbers;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\tconst selectionIsEmpty = this._selections.every(s => s.isEmpty());\n\t\tif (this._selectionIsEmpty !== selectionIsEmpty) {\n\t\t\tthis._selectionIsEmpty = selectionIsEmpty;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\treturn hasChanged;\n\t}\n\n\t// --- begin event handlers\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tconst options = this._context.configuration.options;\n\t\tconst layoutInfo = options.get(EditorOption.layoutInfo);\n\t\tthis._renderLineHighlight = options.get(EditorOption.renderLineHighlight);\n\t\tthis._renderLineHighlightOnlyWhenFocus = options.get(EditorOption.renderLineHighlightOnlyWhenFocus);\n\t\tthis._wordWrap = layoutInfo.isViewportWrapping;\n\t\tthis._contentLeft = layoutInfo.contentLeft;\n\t\tthis._contentWidth = layoutInfo.contentWidth;\n\t\treturn true;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._selections = e.selections;\n\t\treturn this._readFromSelections();\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollWidthChanged || e.scrollTopChanged;\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tif (!this._renderLineHighlightOnlyWhenFocus) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._focused = e.isFocused;\n\t\treturn true;\n\t}\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (!this._shouldRenderThis()) {\n\t\t\tthis._renderData = null;\n\t\t\treturn;\n\t\t}\n\t\tconst visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tconst visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\n\t\t// initialize renderData\n\t\tconst renderData: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = '';\n\t\t}\n\n\t\tif (this._wordWrap) {\n\t\t\t// do a first pass to render wrapped lines\n\t\t\tconst renderedLineWrapped = this._renderOne(ctx, false);\n\t\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\n\t\t\t\tconst coordinatesConverter = this._context.viewModel.coordinatesConverter;\n\t\t\t\tconst modelLineNumber = coordinatesConverter.convertViewPositionToModelPosition(new Position(cursorLineNumber, 1)).lineNumber;\n\t\t\t\tconst firstViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, 1)).lineNumber;\n\t\t\t\tconst lastViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, this._context.viewModel.model.getLineMaxColumn(modelLineNumber))).lineNumber;\n\n\t\t\t\tconst firstLine = Math.max(firstViewLineNumber, visibleStartLineNumber);\n\t\t\t\tconst lastLine = Math.min(lastViewLineNumber, visibleEndLineNumber);\n\t\t\t\tfor (let lineNumber = firstLine; lineNumber <= lastLine; lineNumber++) {\n\t\t\t\t\tconst lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\t\t\trenderData[lineIndex] = renderedLineWrapped;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// do a second pass to render exact lines\n\t\tconst renderedLineExact = this._renderOne(ctx, true);\n\t\tfor (const cursorLineNumber of this._cursorLineNumbers) {\n\t\t\tif (cursorLineNumber < visibleStartLineNumber || cursorLineNumber > visibleEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst lineIndex = cursorLineNumber - visibleStartLineNumber;\n\t\t\trenderData[lineIndex] = renderedLineExact;\n\t\t}\n\n\t\tthis._renderData = renderData;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderData) {\n\t\t\treturn '';\n\t\t}\n\t\tconst lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex >= this._renderData.length) {\n\t\t\treturn '';\n\t\t}\n\t\treturn this._renderData[lineIndex];\n\t}\n\n\tprotected _shouldRenderInMargin(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all')\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected _shouldRenderInContent(): boolean {\n\t\treturn (\n\t\t\t(this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\n\t\t\t&& this._selectionIsEmpty\n\t\t\t&& (!this._renderLineHighlightOnlyWhenFocus || this._focused)\n\t\t);\n\t}\n\n\tprotected abstract _shouldRenderThis(): boolean;\n\tprotected abstract _shouldRenderOther(): boolean;\n\tprotected abstract _renderOne(ctx: RenderingContext, exact: boolean): string;\n}\n\n/**\n * Emphasizes the current line by drawing a border around it.\n */\nexport class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay {\n\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-both' : '') + (exact ? ' current-line-exact' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${Math.max(ctx.scrollWidth, this._contentWidth)}px;\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInMargin();\n\t}\n}\n\n/**\n * Emphasizes the current line margin/gutter by drawing a border around it.\n */\nexport class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOverlay {\n\tprotected _renderOne(ctx: RenderingContext, exact: boolean): string {\n\t\tconst className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-margin' : '') + (this._shouldRenderOther() ? ' current-line-margin-both' : '') + (this._shouldRenderInMargin() && exact ? ' current-line-exact-margin' : '');\n\t\treturn `<div class=\"${className}\" style=\"width:${this._contentLeft}px\"></div>`;\n\t}\n\tprotected _shouldRenderThis(): boolean {\n\t\treturn true;\n\t}\n\tprotected _shouldRenderOther(): boolean {\n\t\treturn this._shouldRenderInContent();\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tconst lineHighlight = theme.getColor(editorLineHighlight);\n\tconst inactiveLineHighlight = theme.getColor(editorInactiveLineHighlight);\n\n\t// Apply active line highlight when editor is focused\n\tif (lineHighlight) {\n\t\tcollector.addRule(`.monaco-editor.focused .view-overlays .current-line { background-color: ${lineHighlight}; }`);\n\t\tcollector.addRule(`.monaco-editor.focused .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);\n\t}\n\n\t// Apply inactive line highlight when editor is not focused\n\tif (inactiveLineHighlight) {\n\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${inactiveLineHighlight}; }`);\n\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${inactiveLineHighlight}; border: none; }`);\n\t}\n\n\tif (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {\n\t\tconst lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\n\t\tif (lineHighlightBorder) {\n\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tif (isHighContrast(theme.type)) {\n\t\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line-exact { border-width: 1px; }`);\n\t\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border-width: 1px; }`);\n\t\t\t}\n\t\t}\n\t}\n});\n"]}
@@ -73,8 +73,7 @@ export class DedupOverlay extends DynamicViewOverlay {
73
73
  });
74
74
  let prevClassName = null;
75
75
  let prevEndLineIndex = 0;
76
- for (let i = 0, len = decorations.length; i < len; i++) {
77
- const d = decorations[i];
76
+ for (const d of decorations) {
78
77
  const className = d.className;
79
78
  const zIndex = d.zIndex;
80
79
  let startLineIndex = Math.max(d.startLineNumber, visibleStartLineNumber) - visibleStartLineNumber;
@@ -88,8 +87,8 @@ export class DedupOverlay extends DynamicViewOverlay {
88
87
  prevClassName = className;
89
88
  prevEndLineIndex = endLineIndex;
90
89
  }
91
- for (let i = startLineIndex; i <= prevEndLineIndex; i++) {
92
- output[i].add(new LineDecorationToRender(className, zIndex, d.tooltip));
90
+ for (let lineIndex = startLineIndex; lineIndex <= prevEndLineIndex; lineIndex++) {
91
+ output[lineIndex].add(new LineDecorationToRender(className, zIndex, d.tooltip));
93
92
  }
94
93
  }
95
94
  return output;