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

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 (430) 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 +29 -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/list/rowCache.js +1 -4
  41. package/esm/vs/base/browser/ui/list/rowCache.js.map +1 -1
  42. package/esm/vs/base/browser/ui/menu/menu.js +14 -12
  43. package/esm/vs/base/browser/ui/menu/menu.js.map +1 -1
  44. package/esm/vs/base/browser/ui/selectBox/selectBox.js +4 -0
  45. package/esm/vs/base/browser/ui/selectBox/selectBox.js.map +1 -1
  46. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.css +12 -32
  47. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js +8 -18
  48. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js.map +1 -1
  49. package/esm/vs/base/browser/ui/toolbar/toolbar.js +41 -14
  50. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  51. package/esm/vs/base/browser/ui/tree/abstractTree.js +11 -0
  52. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  53. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +1 -0
  54. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  55. package/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js.map +1 -1
  56. package/esm/vs/base/browser/ui/tree/dataTree.js.map +1 -1
  57. package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
  58. package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
  59. package/esm/vs/base/browser/ui/tree/objectTreeModel.js.map +1 -1
  60. package/esm/vs/base/browser/ui/tree/tree.js.map +1 -1
  61. package/esm/vs/base/common/arrays.js +10 -0
  62. package/esm/vs/base/common/arrays.js.map +1 -1
  63. package/esm/vs/base/common/async.js +34 -0
  64. package/esm/vs/base/common/async.js.map +1 -1
  65. package/esm/vs/base/common/buffer.js +1 -1
  66. package/esm/vs/base/common/buffer.js.map +1 -1
  67. package/esm/vs/base/common/cancellation.js.map +1 -1
  68. package/esm/vs/base/common/codiconsLibrary.js +3 -0
  69. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  70. package/esm/vs/base/common/collections.js.map +1 -1
  71. package/esm/vs/base/common/equals.js.map +1 -1
  72. package/esm/vs/base/common/event.js +32 -15
  73. package/esm/vs/base/common/event.js.map +1 -1
  74. package/esm/vs/base/common/filters.js +22 -3
  75. package/esm/vs/base/common/filters.js.map +1 -1
  76. package/esm/vs/base/common/hotReload.js +2 -2
  77. package/esm/vs/base/common/hotReload.js.map +1 -1
  78. package/esm/vs/base/common/iterator.js +1 -1
  79. package/esm/vs/base/common/iterator.js.map +1 -1
  80. package/esm/vs/base/common/keyCodes.js +7 -6
  81. package/esm/vs/base/common/keyCodes.js.map +1 -1
  82. package/esm/vs/base/common/linkedList.js.map +1 -1
  83. package/esm/vs/base/common/map.js +8 -5
  84. package/esm/vs/base/common/map.js.map +1 -1
  85. package/esm/vs/base/common/marked/marked.js +0 -1
  86. package/esm/vs/base/common/network.js +26 -1
  87. package/esm/vs/base/common/network.js.map +1 -1
  88. package/esm/vs/base/common/normalization.js +19 -6
  89. package/esm/vs/base/common/normalization.js.map +1 -1
  90. package/esm/vs/base/common/observableInternal/debugLocation.js +1 -2
  91. package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
  92. package/esm/vs/base/common/observableInternal/debugName.js +0 -1
  93. package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
  94. package/esm/vs/base/common/observableInternal/index.js +4 -4
  95. package/esm/vs/base/common/observableInternal/index.js.map +1 -1
  96. package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js +38 -10
  97. package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js.map +1 -1
  98. package/esm/vs/base/common/observableInternal/observables/baseObservable.js +3 -3
  99. package/esm/vs/base/common/observableInternal/observables/baseObservable.js.map +1 -1
  100. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js +1 -4
  101. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js.map +1 -1
  102. package/esm/vs/base/common/observableInternal/utils/utils.js +46 -5
  103. package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
  104. package/esm/vs/base/common/path.js +1 -0
  105. package/esm/vs/base/common/path.js.map +1 -1
  106. package/esm/vs/base/common/strings.js +27 -19
  107. package/esm/vs/base/common/strings.js.map +1 -1
  108. package/esm/vs/base/common/worker/webWorker.js +10 -7
  109. package/esm/vs/base/common/worker/webWorker.js.map +1 -1
  110. package/esm/vs/editor/browser/config/elementSizeObserver.js +5 -5
  111. package/esm/vs/editor/browser/config/elementSizeObserver.js.map +1 -1
  112. package/esm/vs/editor/browser/config/fontMeasurements.js.map +1 -1
  113. package/esm/vs/editor/browser/config/migrateOptions.js +6 -0
  114. package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
  115. package/esm/vs/editor/browser/config/tabFocus.js +4 -2
  116. package/esm/vs/editor/browser/config/tabFocus.js.map +1 -1
  117. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +8 -0
  118. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
  119. package/esm/vs/editor/browser/coreCommands.js +1 -2
  120. package/esm/vs/editor/browser/coreCommands.js.map +1 -1
  121. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  122. package/esm/vs/editor/browser/observableCodeEditor.js +32 -1
  123. package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
  124. package/esm/vs/editor/browser/services/contribution.js +9 -0
  125. package/esm/vs/editor/browser/services/contribution.js.map +1 -0
  126. package/esm/vs/editor/browser/services/editorWorkerService.js +27 -14
  127. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  128. package/esm/vs/editor/browser/services/openerService.js +5 -1
  129. package/esm/vs/editor/browser/services/openerService.js.map +1 -1
  130. package/esm/vs/editor/browser/view/domLineBreaksComputer.js +1 -1
  131. package/esm/vs/editor/browser/view/domLineBreaksComputer.js.map +1 -1
  132. package/esm/vs/editor/browser/view/renderingContext.js +1 -1
  133. package/esm/vs/editor/browser/view/renderingContext.js.map +1 -1
  134. package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js +10 -3
  135. package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js.map +1 -1
  136. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +3 -4
  137. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js.map +1 -1
  138. package/esm/vs/editor/browser/viewParts/minimap/minimap.js +1 -1
  139. package/esm/vs/editor/browser/viewParts/minimap/minimap.js.map +1 -1
  140. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +1 -1
  141. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js.map +1 -1
  142. package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js +4 -2
  143. package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js.map +1 -1
  144. package/esm/vs/editor/browser/viewParts/rulers/rulers.js +1 -3
  145. package/esm/vs/editor/browser/viewParts/rulers/rulers.js.map +1 -1
  146. package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js +1 -1
  147. package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js.map +1 -1
  148. package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js +2 -1
  149. package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js.map +1 -1
  150. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +6 -18
  151. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js.map +1 -1
  152. package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js +0 -7
  153. package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js.map +1 -1
  154. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +7 -2
  155. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  156. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +1 -0
  157. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js.map +1 -1
  158. package/esm/vs/editor/common/commands/replaceCommand.js +2 -2
  159. package/esm/vs/editor/common/commands/replaceCommand.js.map +1 -1
  160. package/esm/vs/editor/common/config/editorOptions.js +374 -360
  161. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  162. package/esm/vs/editor/common/core/2d/rect.js +7 -0
  163. package/esm/vs/editor/common/core/2d/rect.js.map +1 -1
  164. package/esm/vs/editor/common/core/2d/size.js +20 -0
  165. package/esm/vs/editor/common/core/2d/size.js.map +1 -0
  166. package/esm/vs/editor/common/core/editorColorRegistry.js +69 -68
  167. package/esm/vs/editor/common/core/editorColorRegistry.js.map +1 -1
  168. package/esm/vs/editor/common/core/ranges/offsetRange.js +9 -0
  169. package/esm/vs/editor/common/core/ranges/offsetRange.js.map +1 -1
  170. package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
  171. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  172. package/esm/vs/editor/common/editorContextKeys.js +47 -47
  173. package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
  174. package/esm/vs/editor/common/languages.js +56 -56
  175. package/esm/vs/editor/common/languages.js.map +1 -1
  176. package/esm/vs/editor/common/model/editStack.js +1 -1
  177. package/esm/vs/editor/common/services/languagesAssociations.js +6 -8
  178. package/esm/vs/editor/common/services/languagesAssociations.js.map +1 -1
  179. package/esm/vs/editor/common/standaloneStrings.js +11 -10
  180. package/esm/vs/editor/common/standaloneStrings.js.map +1 -1
  181. package/esm/vs/editor/common/textModelEditSource.js +1 -1
  182. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  183. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
  184. package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
  185. package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
  186. package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
  187. package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
  188. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +17 -17
  189. package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
  190. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
  191. package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
  192. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
  193. package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
  194. package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
  195. package/esm/vs/editor/contrib/codelens/browser/codelens.js.map +1 -1
  196. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
  197. package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
  198. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
  199. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
  200. package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
  201. package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
  202. package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
  203. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
  204. package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
  205. package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js +14 -0
  206. package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js.map +1 -1
  207. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
  208. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +9 -9
  209. package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
  210. package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
  211. package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
  212. package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
  213. package/esm/vs/editor/contrib/find/browser/findController.js +17 -17
  214. package/esm/vs/editor/contrib/find/browser/findController.js.map +1 -1
  215. package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
  216. package/esm/vs/editor/contrib/find/browser/findWidgetSearchHistory.js.map +1 -1
  217. package/esm/vs/editor/contrib/find/browser/replaceWidgetHistory.js.map +1 -1
  218. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
  219. package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
  220. package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
  221. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
  222. package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
  223. package/esm/vs/editor/contrib/format/browser/format.js +21 -6
  224. package/esm/vs/editor/contrib/format/browser/format.js.map +1 -1
  225. package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
  226. package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
  227. package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
  228. package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
  229. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  230. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
  231. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
  232. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
  233. package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
  234. package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
  235. package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
  236. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js +5 -10
  237. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js.map +1 -1
  238. package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js +11 -6
  239. package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js.map +1 -1
  240. package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
  241. package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
  242. package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
  243. package/esm/vs/editor/contrib/hover/browser/hoverUtils.js +24 -0
  244. package/esm/vs/editor/contrib/hover/browser/hoverUtils.js.map +1 -1
  245. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +9 -9
  246. package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
  247. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  248. package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
  249. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +8 -8
  250. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +20 -20
  251. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +12 -12
  252. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +18 -16
  253. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
  254. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  255. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
  256. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +42 -37
  257. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  258. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +3 -3
  259. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +1 -1
  260. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +8 -8
  261. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
  262. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +54 -43
  263. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  264. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +12 -12
  265. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
  266. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +74 -48
  267. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  268. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +8 -36
  269. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
  270. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js +10 -11
  271. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js.map +1 -1
  272. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +105 -119
  273. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  274. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
  275. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +8 -36
  276. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
  277. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js +95 -0
  278. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js.map +1 -0
  279. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +17 -9
  280. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
  281. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +428 -0
  282. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -0
  283. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +290 -0
  284. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -0
  285. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
  286. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js +103 -0
  287. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js.map +1 -0
  288. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js +32 -0
  289. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js.map +1 -0
  290. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +44 -11
  291. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
  292. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +10 -0
  293. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +181 -0
  294. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -0
  295. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  296. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  297. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -31
  298. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
  299. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  300. package/esm/vs/editor/contrib/links/browser/links.js +10 -10
  301. package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
  302. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
  303. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  304. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  305. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  306. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  307. package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +2 -2
  308. package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js.map +1 -1
  309. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +18 -13
  310. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js.map +1 -1
  311. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  312. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  313. package/esm/vs/editor/contrib/rename/browser/rename.js +12 -12
  314. package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
  315. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  316. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  317. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
  318. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  319. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  320. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -1
  321. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
  322. package/esm/vs/editor/contrib/suggest/browser/suggest.js +8 -8
  323. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +10 -10
  324. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
  325. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
  326. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  327. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  328. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  329. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  330. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  331. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  332. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +29 -29
  333. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
  334. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  335. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  336. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +4 -4
  337. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js.map +1 -1
  338. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +1 -1
  339. package/esm/vs/editor/editor.all.js +1 -0
  340. package/esm/vs/editor/editor.all.js.map +1 -1
  341. package/esm/vs/editor/editor.api.d.ts +9 -5
  342. package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js +22 -2
  343. package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js.map +1 -1
  344. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js +39 -0
  345. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js.map +1 -0
  346. package/esm/vs/editor/standalone/browser/standaloneEditor.js +2 -1
  347. package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
  348. package/esm/vs/editor/standalone/browser/standaloneServices.js +3 -21
  349. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  350. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js +4 -4
  351. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
  352. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
  353. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  354. package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
  355. package/esm/vs/platform/actionWidget/browser/actionWidget.css +7 -0
  356. package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
  357. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +7 -9
  358. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js.map +1 -1
  359. package/esm/vs/platform/actions/browser/toolbar.js +2 -2
  360. package/esm/vs/platform/actions/common/actions.js +2 -0
  361. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  362. package/esm/vs/platform/actions/common/menuService.js +2 -2
  363. package/esm/vs/platform/configuration/common/configuration.js +5 -4
  364. package/esm/vs/platform/configuration/common/configuration.js.map +1 -1
  365. package/esm/vs/platform/configuration/common/configurationModels.js +21 -10
  366. package/esm/vs/platform/configuration/common/configurationModels.js.map +1 -1
  367. package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
  368. package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
  369. package/esm/vs/platform/configuration/common/configurations.js.map +1 -1
  370. package/esm/vs/platform/contextkey/browser/contextKeyService.js +3 -3
  371. package/esm/vs/platform/contextkey/browser/contextKeyService.js.map +1 -1
  372. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  373. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  374. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  375. package/esm/vs/platform/contextview/browser/contextViewService.js.map +1 -1
  376. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  377. package/esm/vs/platform/hover/browser/hoverService.js +17 -8
  378. package/esm/vs/platform/hover/browser/hoverService.js.map +1 -1
  379. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  380. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  381. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
  382. package/esm/vs/platform/list/browser/listService.js +27 -27
  383. package/esm/vs/platform/list/browser/listService.js.map +1 -1
  384. package/esm/vs/platform/markers/common/markerService.js +2 -2
  385. package/esm/vs/platform/markers/common/markers.js +6 -6
  386. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +51 -39
  387. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
  388. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  389. package/esm/vs/platform/quickinput/browser/media/quickInput.css +9 -3
  390. package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
  391. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  392. package/esm/vs/platform/quickinput/browser/quickInputController.js +35 -14
  393. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  394. package/esm/vs/platform/quickinput/browser/quickInputList.js +4 -1
  395. package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
  396. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  397. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  398. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js +78 -39
  399. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
  400. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js +21 -8
  401. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js.map +1 -1
  402. package/esm/vs/platform/telemetry/common/gdprTypings.js.map +1 -1
  403. package/esm/vs/platform/telemetry/common/telemetry.js.map +1 -1
  404. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  405. package/esm/vs/platform/theme/common/colors/baseColors.js +17 -17
  406. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  407. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  408. package/esm/vs/platform/theme/common/colors/editorColors.js.map +1 -1
  409. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  410. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  411. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  412. package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
  413. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  414. package/esm/vs/platform/theme/common/colors/miscColors.js.map +1 -1
  415. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  416. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  417. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  418. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  419. package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js +12 -0
  420. package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js.map +1 -0
  421. package/esm/vs/platform/webWorker/browser/webWorkerService.js +7 -0
  422. package/esm/vs/platform/webWorker/browser/webWorkerService.js.map +1 -0
  423. package/esm/vs/{base/browser/webWorkerFactory.js → platform/webWorker/browser/webWorkerServiceImpl.js} +47 -66
  424. package/esm/vs/platform/webWorker/browser/webWorkerServiceImpl.js.map +1 -0
  425. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  426. package/monaco.d.ts +9 -5
  427. package/package.json +2 -2
  428. package/esm/vs/base/browser/webWorkerFactory.js.map +0 -1
  429. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.js +0 -82
  430. 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/viewParts/viewLines/viewLines.ts","vs/editor/browser/viewParts/viewLines/viewLines.ts"],"names":[],"mappings":"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","file":"viewLines.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 { FastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport { Constants } from '../../../../base/common/uint.js';\nimport './viewLines.css';\nimport { applyFontInfo } from '../../config/domFontInfo.js';\nimport { HorizontalPosition, HorizontalRange, IViewLines, LineVisibleRanges, VisibleRanges } from '../../view/renderingContext.js';\nimport { VisibleLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { DomReadingContext } from './domReadingContext.js';\nimport { ViewLine } from './viewLine.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { ScrollType } from '../../../common/editorCommon.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js';\nimport { Viewport } from '../../../common/viewModel.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ViewLineOptions } from './viewLineOptions.js';\nimport { ViewGpuContext } from '../../gpu/viewGpuContext.js';\nimport { TextDirection } from '../../../common/model.js';\n\nclass LastRenderedData {\n\n\tprivate _currentVisibleRange: Range;\n\n\tconstructor() {\n\t\tthis._currentVisibleRange = new Range(1, 1, 1, 1);\n\t}\n\n\tpublic getCurrentVisibleRange(): Range {\n\t\treturn this._currentVisibleRange;\n\t}\n\n\tpublic setCurrentVisibleRange(currentVisibleRange: Range): void {\n\t\tthis._currentVisibleRange = currentVisibleRange;\n\t}\n}\n\nclass HorizontalRevealRangeRequest {\n\tpublic readonly type = 'range';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly startColumn: number,\n\t\tpublic readonly endColumn: number,\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tthis.minLineNumber = lineNumber;\n\t\tthis.maxLineNumber = lineNumber;\n\t}\n}\n\nclass HorizontalRevealSelectionsRequest {\n\tpublic readonly type = 'selections';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly selections: Selection[],\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t}\n\t\tthis.minLineNumber = minLineNumber;\n\t\tthis.maxLineNumber = maxLineNumber;\n\t}\n}\n\ntype HorizontalRevealRequest = HorizontalRevealRangeRequest | HorizontalRevealSelectionsRequest;\n\n/**\n * The view lines part is responsible for rendering the actual content of a\n * file.\n */\nexport class ViewLines extends ViewPart implements IViewLines {\n\t/**\n\t * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\n\t */\n\tprivate static readonly HORIZONTAL_EXTRA_PX = 30;\n\n\tprivate readonly _linesContent: FastDomNode<HTMLElement>;\n\tprivate readonly _textRangeRestingSpot: HTMLElement;\n\tprivate readonly _visibleLines: VisibleLinesCollection<ViewLine>;\n\tprivate readonly domNode: FastDomNode<HTMLElement>;\n\n\t// --- config\n\tprivate _lineHeight: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\tprivate _isViewportWrapping: boolean;\n\tprivate _revealHorizontalRightPadding: number;\n\tprivate _cursorSurroundingLines: number;\n\tprivate _cursorSurroundingLinesStyle: 'default' | 'all';\n\tprivate _canUseLayerHinting: boolean;\n\tprivate _viewLineOptions: ViewLineOptions;\n\n\t// --- width\n\tprivate _maxLineWidth: number;\n\tprivate readonly _asyncUpdateLineWidths: RunOnceScheduler;\n\tprivate readonly _asyncCheckMonospaceFontAssumptions: RunOnceScheduler;\n\n\tprivate _horizontalRevealRequest: HorizontalRevealRequest | null;\n\tprivate readonly _lastRenderedData: LastRenderedData;\n\n\t// Sticky Scroll\n\tprivate _stickyScrollEnabled: boolean;\n\tprivate _maxNumberStickyLines: number;\n\n\tconstructor(context: ViewContext, viewGpuContext: ViewGpuContext | undefined, linesContent: FastDomNode<HTMLElement>) {\n\t\tsuper(context);\n\n\t\tconst conf = this._context.configuration;\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\t\tthis._viewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\n\t\tthis._linesContent = linesContent;\n\t\tthis._textRangeRestingSpot = document.createElement('div');\n\t\tthis._visibleLines = new VisibleLinesCollection(this._context, {\n\t\t\tcreateLine: () => new ViewLine(viewGpuContext, this._viewLineOptions),\n\t\t});\n\t\tthis.domNode = this._visibleLines.domNode;\n\n\t\tPartFingerprints.write(this.domNode, PartFingerprint.ViewLines);\n\t\tthis.domNode.setClassName(`view-lines ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\t// --- width & height\n\t\tthis._maxLineWidth = 0;\n\t\tthis._asyncUpdateLineWidths = new RunOnceScheduler(() => {\n\t\t\tthis._updateLineWidthsSlow();\n\t\t}, 200);\n\t\tthis._asyncCheckMonospaceFontAssumptions = new RunOnceScheduler(() => {\n\t\t\tthis._checkMonospaceFontAssumptions();\n\t\t}, 2000);\n\n\t\tthis._lastRenderedData = new LastRenderedData();\n\n\t\tthis._horizontalRevealRequest = null;\n\n\t\t// sticky scroll widget\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._asyncUpdateLineWidths.dispose();\n\t\tthis._asyncCheckMonospaceFontAssumptions.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic getDomNode(): FastDomNode<HTMLElement> {\n\t\treturn this.domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tthis._visibleLines.onConfigurationChanged(e);\n\t\tif (e.hasChanged(EditorOption.wrappingInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\n\t\t// sticky scroll\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\tthis._onOptionsMaybeChanged();\n\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\treturn true;\n\t}\n\tprivate _onOptionsMaybeChanged(): boolean {\n\t\tconst conf = this._context.configuration;\n\n\t\tconst newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\t\tif (!this._viewLineOptions.equals(newViewLineOptions)) {\n\t\t\tthis._viewLineOptions = newViewLineOptions;\n\n\t\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tline.onOptionsChanged(this._viewLineOptions);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tlet r = false;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tr = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;\n\t\t}\n\t\treturn r;\n\t}\n\tpublic override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\tif (true/*e.inlineDecorationsChanged*/) {\n\t\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tthis._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tconst shouldRender = this._visibleLines.onFlushed(e, this._viewLineOptions.useGpu);\n\t\tthis._maxLineWidth = 0;\n\t\treturn shouldRender;\n\t}\n\tpublic override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._visibleLines.onLinesChanged(e);\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn this._visibleLines.onLinesDeleted(e);\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn this._visibleLines.onLinesInserted(e);\n\t}\n\tpublic override onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean {\n\t\t// Using the future viewport here in order to handle multiple\n\t\t// incoming reveal range requests that might all desire to be animated\n\t\tconst desiredScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(), e.source, e.minimalReveal, e.range, e.selections, e.verticalType);\n\n\t\tif (desiredScrollTop === -1) {\n\t\t\t// marker to abort the reveal range request\n\t\t\treturn false;\n\t\t}\n\n\t\t// validate the new desired scroll top\n\t\tlet newScrollPosition = this._context.viewLayout.validateScrollPosition({ scrollTop: desiredScrollTop });\n\n\t\tif (e.revealHorizontal) {\n\t\t\tif (e.range && e.range.startLineNumber !== e.range.endLineNumber) {\n\t\t\t\t// Two or more lines? => scroll to base (That's how you see most of the two lines)\n\t\t\t\tnewScrollPosition = {\n\t\t\t\t\tscrollTop: newScrollPosition.scrollTop,\n\t\t\t\t\tscrollLeft: 0\n\t\t\t\t};\n\t\t\t} else if (e.range) {\n\t\t\t\t// We don't necessarily know the horizontal offset of this range since the line might not be in the view...\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealRangeRequest(e.minimalReveal, e.range.startLineNumber, e.range.startColumn, e.range.endColumn, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t} else if (e.selections && e.selections.length > 0) {\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealSelectionsRequest(e.minimalReveal, e.selections, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\n\t\tconst scrollTopDelta = Math.abs(this._context.viewLayout.getCurrentScrollTop() - newScrollPosition.scrollTop);\n\t\tconst scrollType = (scrollTopDelta <= this._lineHeight ? ScrollType.Immediate : e.scrollType);\n\t\tthis._context.viewModel.viewLayout.setScrollPosition(newScrollPosition, scrollType);\n\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tif (this._horizontalRevealRequest && e.scrollLeftChanged) {\n\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls horizontally.\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\t\tif (this._horizontalRevealRequest && e.scrollTopChanged) {\n\t\t\tconst min = Math.min(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tconst max = Math.max(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tif (e.scrollTop < min || e.scrollTop > max) {\n\t\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls vertically.\n\t\t\t\tthis._horizontalRevealRequest = null;\n\t\t\t}\n\t\t}\n\t\tthis.domNode.setWidth(e.scrollWidth);\n\t\treturn this._visibleLines.onScrollChanged(e) || true;\n\t}\n\n\tpublic override onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._visibleLines.onTokensChanged(e);\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\treturn this._visibleLines.onZonesChanged(e);\n\t}\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._onOptionsMaybeChanged();\n\t}\n\n\t// ---- end view event handlers\n\n\t// ----------- HELPERS FOR OTHERS\n\n\tpublic getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position | null {\n\t\tconst viewLineDomNode = this._getViewLineDomNode(spanNode);\n\t\tif (viewLineDomNode === null) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\t\tconst lineNumber = this._getLineNumberFor(viewLineDomNode);\n\n\t\tif (lineNumber === -1) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < 1 || lineNumber > this._context.viewModel.getLineCount()) {\n\t\t\t// lineNumber is outside range\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this._context.viewModel.getLineMaxColumn(lineNumber) === 1) {\n\t\t\t// Line is empty\n\t\t\treturn new Position(lineNumber, 1);\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn null;\n\t\t}\n\n\t\tlet column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(spanNode, offset);\n\t\tconst minColumn = this._context.viewModel.getLineMinColumn(lineNumber);\n\t\tif (column < minColumn) {\n\t\t\tcolumn = minColumn;\n\t\t}\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tprivate _getViewLineDomNode(node: HTMLElement | null): HTMLElement | null {\n\t\twhile (node && node.nodeType === 1) {\n\t\t\tif (node.className === ViewLine.CLASS_NAME) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * @returns the line number of this view line dom node.\n\t */\n\tprivate _getLineNumberFor(domNode: HTMLElement): number {\n\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (domNode === line.getDomNode()) {\n\t\t\t\treturn lineNumber;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tpublic getLineWidth(lineNumber: number): number {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst context = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getWidth(context);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(context);\n\n\t\treturn result;\n\t}\n\n\tpublic linesVisibleRangesForRange(_range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tif (this.shouldRender()) {\n\t\t\t// Cannot read from the DOM because it is dirty\n\t\t\t// i.e. the model & the dom are out of sync, so I'd be reading something stale\n\t\t\treturn null;\n\t\t}\n\n\t\tconst originalEndLineNumber = _range.endLineNumber;\n\t\tconst range = Range.intersectRanges(_range, this._lastRenderedData.getCurrentVisibleRange());\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst visibleRanges: LineVisibleRanges[] = [];\n\t\tlet visibleRangesLen = 0;\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\n\t\tlet nextLineModelLineNumber: number = 0;\n\t\tif (includeNewLines) {\n\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n\n\t\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\n\t\t\tconst continuesInNextLine = lineNumber !== originalEndLineNumber;\n\t\t\tconst endColumn = continuesInNextLine ? this._context.viewModel.getLineMaxColumn(lineNumber) : range.endColumn;\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tconst visibleRangesForLine = visibleLine.getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\n\t\t\tif (!visibleRangesForLine) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (includeNewLines && lineNumber < originalEndLineNumber) {\n\t\t\t\tconst currentLineModelLineNumber = nextLineModelLineNumber;\n\t\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;\n\n\t\t\t\tif (currentLineModelLineNumber !== nextLineModelLineNumber) {\n\t\t\t\t\tconst floatHorizontalRange = visibleRangesForLine.ranges[visibleRangesForLine.ranges.length - 1];\n\t\t\t\t\tfloatHorizontalRange.width += this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\tif (this._context.viewModel.getTextDirection(currentLineModelLineNumber) === TextDirection.RTL) {\n\t\t\t\t\t\tfloatHorizontalRange.left -= this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisibleRanges[visibleRangesLen++] = new LineVisibleRanges(visibleRangesForLine.outsideRenderedLine, lineNumber, HorizontalRange.from(visibleRangesForLine.ranges), continuesInNextLine);\n\t\t}\n\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\tif (visibleRangesLen === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visibleRanges;\n\t}\n\n\tprivate _visibleRangesForLineRange(lineNumber: number, startColumn: number, endColumn: number): VisibleRanges | null {\n\t\tif (this.shouldRender()) {\n\t\t\t// Cannot read from the DOM because it is dirty\n\t\t\t// i.e. the model & the dom are out of sync, so I'd be reading something stale\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\treturn result;\n\t}\n\n\tprivate _lineIsRenderedRTL(lineNumber: number): boolean {\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn false;\n\t\t}\n\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\treturn visibleLine.isRenderedRTL();\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\tconst visibleRanges = this._visibleRangesForLineRange(position.lineNumber, position.column, position.column);\n\t\tif (!visibleRanges) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new HorizontalPosition(visibleRanges.outsideRenderedLine, visibleRanges.ranges[0].left);\n\t}\n\n\t/**\n\t * Updates the max line width if it is fast to compute.\n\t * Returns true if all lines were taken into account.\n\t * Returns false if some lines need to be reevaluated (in a slow fashion).\n\t */\n\tprivate _updateLineWidthsFast(): boolean {\n\t\treturn this._updateLineWidths(true);\n\t}\n\n\tprivate _updateLineWidthsSlow(): void {\n\t\tthis._updateLineWidths(false);\n\t}\n\n\t/**\n\t * Update the line widths using DOM layout information after someone else\n\t * has caused a synchronous layout.\n\t */\n\tprivate _updateLineWidthsSlowIfDomDidLayout(domReadingContext: DomReadingContext): void {\n\t\tif (!domReadingContext.didDomLayout) {\n\t\t\t// only proceed if we just did a layout\n\t\t\treturn;\n\t\t}\n\t\tif (this._asyncUpdateLineWidths.isScheduled()) {\n\t\t\t// reading widths is not scheduled => widths are up-to-date\n\t\t\treturn;\n\t\t}\n\t\tthis._asyncUpdateLineWidths.cancel();\n\t\tthis._updateLineWidthsSlow();\n\t}\n\n\tprivate _updateLineWidths(fast: boolean): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\n\t\tlet localMaxLineWidth = 1;\n\t\tlet allWidthsComputed = true;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\n\t\t\tif (fast && !visibleLine.getWidthIsFast()) {\n\t\t\t\t// Cannot compute width in a fast way for this line\n\t\t\t\tallWidthsComputed = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlocalMaxLineWidth = Math.max(localMaxLineWidth, visibleLine.getWidth(null));\n\t\t}\n\n\t\tif (allWidthsComputed && rendStartLineNumber === 1 && rendEndLineNumber === this._context.viewModel.getLineCount()) {\n\t\t\t// we know the max line width for all the lines\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tthis._ensureMaxLineWidth(localMaxLineWidth);\n\n\t\treturn allWidthsComputed;\n\t}\n\n\tprivate _checkMonospaceFontAssumptions(): void {\n\t\t// Problems with monospace assumptions are more apparent for longer lines,\n\t\t// as small rounding errors start to sum up, so we will select the longest\n\t\t// line for a closer inspection\n\t\tlet longestLineNumber = -1;\n\t\tlet longestWidth = -1;\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\tconst lineWidth = visibleLine.getWidth(null);\n\t\t\t\tif (lineWidth > longestWidth) {\n\t\t\t\t\tlongestWidth = lineWidth;\n\t\t\t\t\tlongestLineNumber = lineNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (longestLineNumber === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._visibleLines.getVisibleLine(longestLineNumber).monospaceAssumptionsAreValid()) {\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tvisibleLine.onMonospaceAssumptionsInvalidated();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic prepareRender(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic render(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic renderText(viewportData: ViewportData): void {\n\t\t// (1) render lines - ensures lines are in the DOM\n\t\tthis._visibleLines.renderLines(viewportData);\n\t\tthis._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);\n\t\tthis.domNode.setWidth(this._context.viewLayout.getScrollWidth());\n\t\tthis.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(), 1000000));\n\n\t\t// (2) compute horizontal scroll position:\n\t\t// - this must happen after the lines are in the DOM since it might need a line that rendered just now\n\t\t// - it might change `scrollWidth` and `scrollLeft`\n\t\tif (this._horizontalRevealRequest) {\n\n\t\t\tconst horizontalRevealRequest = this._horizontalRevealRequest;\n\n\t\t\t// Check that we have the line that contains the horizontal range in the viewport\n\t\t\tif (viewportData.startLineNumber <= horizontalRevealRequest.minLineNumber && horizontalRevealRequest.maxLineNumber <= viewportData.endLineNumber) {\n\n\t\t\t\tthis._horizontalRevealRequest = null;\n\n\t\t\t\t// allow `visibleRangesForRange2` to work\n\t\t\t\tthis.onDidRender();\n\n\t\t\t\t// compute new scroll position\n\t\t\t\tconst newScrollLeft = this._computeScrollLeftToReveal(horizontalRevealRequest);\n\n\t\t\t\tif (newScrollLeft) {\n\t\t\t\t\tif (!this._isViewportWrapping && !newScrollLeft.hasRTL) {\n\t\t\t\t\t\t// ensure `scrollWidth` is large enough\n\t\t\t\t\t\tthis._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);\n\t\t\t\t\t}\n\t\t\t\t\t// set `scrollLeft`\n\t\t\t\t\tthis._context.viewModel.viewLayout.setScrollPosition({\n\t\t\t\t\t\tscrollLeft: newScrollLeft.scrollLeft\n\t\t\t\t\t}, horizontalRevealRequest.scrollType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)\n\t\tif (!this._updateLineWidthsFast()) {\n\t\t\t// Computing the width of some lines would be slow => delay it\n\t\t\tthis._asyncUpdateLineWidths.schedule();\n\t\t} else {\n\t\t\tthis._asyncUpdateLineWidths.cancel();\n\t\t}\n\n\t\tif (platform.isLinux && !this._asyncCheckMonospaceFontAssumptions.isScheduled()) {\n\t\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\t\tthis._asyncCheckMonospaceFontAssumptions.schedule();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (3) handle scrolling\n\t\tthis._linesContent.setLayerHinting(this._canUseLayerHinting);\n\t\tthis._linesContent.setContain('strict');\n\t\tconst adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta;\n\t\tthis._linesContent.setTop(-adjustedScrollTop);\n\t\tthis._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft());\n\t}\n\n\t// --- width\n\n\tprivate _ensureMaxLineWidth(lineWidth: number): void {\n\t\tconst iLineWidth = Math.ceil(lineWidth);\n\t\tif (this._maxLineWidth < iLineWidth) {\n\t\t\tthis._maxLineWidth = iLineWidth;\n\t\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\t}\n\t}\n\n\tprivate _computeScrollTopToRevealRange(viewport: Viewport, source: string | null | undefined, minimalReveal: boolean, range: Range | null, selections: Selection[] | null, verticalType: viewEvents.VerticalRevealType): number {\n\t\tconst viewportStartY = viewport.top;\n\t\tconst viewportHeight = viewport.height;\n\t\tconst viewportEndY = viewportStartY + viewportHeight;\n\t\tlet boxIsSingleRange: boolean;\n\t\tlet boxStartY: number;\n\t\tlet boxEndY: number;\n\n\t\tif (selections && selections.length > 0) {\n\t\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\t\tconst selection = selections[i];\n\t\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t\t}\n\t\t\tboxIsSingleRange = false;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(minLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(maxLineNumber) + this._lineHeight;\n\t\t} else if (range) {\n\t\t\tboxIsSingleRange = true;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst shouldIgnoreScrollOff = (source === 'mouse' || minimalReveal) && this._cursorSurroundingLinesStyle === 'default';\n\n\t\tlet paddingTop: number = 0;\n\t\tlet paddingBottom: number = 0;\n\n\t\tif (!shouldIgnoreScrollOff) {\n\t\t\tconst maxLinesInViewport = (viewportHeight / this._lineHeight);\n\t\t\tconst surroundingLines = Math.max(this._cursorSurroundingLines, this._stickyScrollEnabled ? this._maxNumberStickyLines : 0);\n\t\t\tconst context = Math.min(maxLinesInViewport / 2, surroundingLines);\n\t\t\tpaddingTop = context * this._lineHeight;\n\t\t\tpaddingBottom = Math.max(0, (context - 1)) * this._lineHeight;\n\t\t} else {\n\t\t\tif (!minimalReveal) {\n\t\t\t\t// Reveal one more line above (this case is hit when dragging)\n\t\t\t\tpaddingTop = this._lineHeight;\n\t\t\t}\n\t\t}\n\t\tif (!minimalReveal) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.Simple || verticalType === viewEvents.VerticalRevealType.Bottom) {\n\t\t\t\t// Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom\n\t\t\t\tpaddingBottom += this._lineHeight;\n\t\t\t}\n\t\t}\n\n\t\tboxStartY -= paddingTop;\n\t\tboxEndY += paddingBottom;\n\t\tlet newScrollTop: number;\n\n\t\tif (boxEndY - boxStartY > viewportHeight) {\n\t\t\t// the box is larger than the viewport ... scroll to its top\n\t\t\tif (!boxIsSingleRange) {\n\t\t\t\t// do not reveal multiple cursors if there are more than fit the viewport\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tnewScrollTop = boxStartY;\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.NearTop || verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// We want a gap that is 20% of the viewport, but with a minimum of 5 lines\n\t\t\t\tconst desiredGapAbove = Math.max(5 * this._lineHeight, viewportHeight * 0.2);\n\t\t\t\t// Try to scroll just above the box with the desired gap\n\t\t\t\tconst desiredScrollTop = boxStartY - desiredGapAbove;\n\t\t\t\t// But ensure that the box is not pushed out of viewport\n\t\t\t\tconst minScrollTop = boxEndY - viewportHeight;\n\t\t\t\tnewScrollTop = Math.max(minScrollTop, desiredScrollTop);\n\t\t\t}\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.Center || verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// Box is outside the viewport... center it\n\t\t\t\tconst boxMiddleY = (boxStartY + boxEndY) / 2;\n\t\t\t\tnewScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);\n\t\t\t}\n\t\t} else {\n\t\t\tnewScrollTop = this._computeMinimumScrolling(viewportStartY, viewportEndY, boxStartY, boxEndY, verticalType === viewEvents.VerticalRevealType.Top, verticalType === viewEvents.VerticalRevealType.Bottom);\n\t\t}\n\n\t\treturn newScrollTop;\n\t}\n\n\tprivate _computeScrollLeftToReveal(horizontalRevealRequest: HorizontalRevealRequest): { scrollLeft: number; maxHorizontalOffset: number; hasRTL: boolean } | null {\n\n\t\tconst viewport = this._context.viewLayout.getCurrentViewport();\n\t\tconst layoutInfo = this._context.configuration.options.get(EditorOption.layoutInfo);\n\t\tconst viewportStartX = viewport.left;\n\t\tconst viewportEndX = viewportStartX + viewport.width - layoutInfo.verticalScrollbarWidth;\n\n\t\tlet boxStartX = Constants.MAX_SAFE_SMALL_INTEGER;\n\t\tlet boxEndX = 0;\n\t\tlet hasRTL = false;\n\t\tif (horizontalRevealRequest.type === 'range') {\n\t\t\thasRTL = this._lineIsRenderedRTL(horizontalRevealRequest.lineNumber);\n\t\t\tconst visibleRanges = this._visibleRangesForLineRange(horizontalRevealRequest.lineNumber, horizontalRevealRequest.startColumn, horizontalRevealRequest.endColumn);\n\t\t\tif (!visibleRanges) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const selection of horizontalRevealRequest.selections) {\n\t\t\t\tif (selection.startLineNumber !== selection.endLineNumber) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst visibleRanges = this._visibleRangesForLineRange(selection.startLineNumber, selection.startColumn, selection.endColumn);\n\t\t\t\thasRTL ||= this._lineIsRenderedRTL(selection.startLineNumber);\n\t\t\t\tif (!visibleRanges) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!horizontalRevealRequest.minimalReveal) {\n\t\t\tboxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\n\t\t\tboxEndX += this._revealHorizontalRightPadding;\n\t\t}\n\n\t\tif (horizontalRevealRequest.type === 'selections' && boxEndX - boxStartX > viewport.width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);\n\t\treturn {\n\t\t\tscrollLeft: newScrollLeft,\n\t\t\tmaxHorizontalOffset: boxEndX,\n\t\t\thasRTL\n\t\t};\n\t}\n\n\tprivate _computeMinimumScrolling(viewportStart: number, viewportEnd: number, boxStart: number, boxEnd: number, revealAtStart?: boolean, revealAtEnd?: boolean): number {\n\t\tviewportStart = viewportStart | 0;\n\t\tviewportEnd = viewportEnd | 0;\n\t\tboxStart = boxStart | 0;\n\t\tboxEnd = boxEnd | 0;\n\t\trevealAtStart = !!revealAtStart;\n\t\trevealAtEnd = !!revealAtEnd;\n\n\t\tconst viewportLength = viewportEnd - viewportStart;\n\t\tconst boxLength = boxEnd - boxStart;\n\n\t\tif (boxLength < viewportLength) {\n\t\t\t// The box would fit in the viewport\n\n\t\t\tif (revealAtStart) {\n\t\t\t\treturn boxStart;\n\t\t\t}\n\n\t\t\tif (revealAtEnd) {\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\n\t\t\tif (boxStart < viewportStart) {\n\t\t\t\t// The box is above the viewport\n\t\t\t\treturn boxStart;\n\t\t\t} else if (boxEnd > viewportEnd) {\n\t\t\t\t// The box is below the viewport\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\t\t} else {\n\t\t\t// The box would not fit in the viewport\n\t\t\t// Reveal the beginning of the box\n\t\t\treturn boxStart;\n\t\t}\n\n\t\treturn viewportStart;\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 { FastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport { Constants } from '../../../../base/common/uint.js';\nimport './viewLines.css';\nimport { applyFontInfo } from '../../config/domFontInfo.js';\nimport { HorizontalPosition, HorizontalRange, IViewLines, LineVisibleRanges, VisibleRanges } from '../../view/renderingContext.js';\nimport { VisibleLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { DomReadingContext } from './domReadingContext.js';\nimport { ViewLine } from './viewLine.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { ScrollType } from '../../../common/editorCommon.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js';\nimport { Viewport } from '../../../common/viewModel.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ViewLineOptions } from './viewLineOptions.js';\nimport { ViewGpuContext } from '../../gpu/viewGpuContext.js';\nimport { TextDirection } from '../../../common/model.js';\n\nclass LastRenderedData {\n\n\tprivate _currentVisibleRange: Range;\n\n\tconstructor() {\n\t\tthis._currentVisibleRange = new Range(1, 1, 1, 1);\n\t}\n\n\tpublic getCurrentVisibleRange(): Range {\n\t\treturn this._currentVisibleRange;\n\t}\n\n\tpublic setCurrentVisibleRange(currentVisibleRange: Range): void {\n\t\tthis._currentVisibleRange = currentVisibleRange;\n\t}\n}\n\nclass HorizontalRevealRangeRequest {\n\tpublic readonly type = 'range';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly startColumn: number,\n\t\tpublic readonly endColumn: number,\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tthis.minLineNumber = lineNumber;\n\t\tthis.maxLineNumber = lineNumber;\n\t}\n}\n\nclass HorizontalRevealSelectionsRequest {\n\tpublic readonly type = 'selections';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly selections: Selection[],\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t}\n\t\tthis.minLineNumber = minLineNumber;\n\t\tthis.maxLineNumber = maxLineNumber;\n\t}\n}\n\ntype HorizontalRevealRequest = HorizontalRevealRangeRequest | HorizontalRevealSelectionsRequest;\n\n/**\n * The view lines part is responsible for rendering the actual content of a\n * file.\n */\nexport class ViewLines extends ViewPart implements IViewLines {\n\t/**\n\t * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\n\t */\n\tprivate static readonly HORIZONTAL_EXTRA_PX = 30;\n\n\tprivate readonly _linesContent: FastDomNode<HTMLElement>;\n\tprivate readonly _textRangeRestingSpot: HTMLElement;\n\tprivate readonly _visibleLines: VisibleLinesCollection<ViewLine>;\n\tprivate readonly domNode: FastDomNode<HTMLElement>;\n\n\t// --- config\n\tprivate _lineHeight: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\tprivate _isViewportWrapping: boolean;\n\tprivate _revealHorizontalRightPadding: number;\n\tprivate _cursorSurroundingLines: number;\n\tprivate _cursorSurroundingLinesStyle: 'default' | 'all';\n\tprivate _canUseLayerHinting: boolean;\n\tprivate _viewLineOptions: ViewLineOptions;\n\n\t// --- width\n\tprivate _maxLineWidth: number;\n\tprivate readonly _asyncUpdateLineWidths: RunOnceScheduler;\n\tprivate readonly _asyncCheckMonospaceFontAssumptions: RunOnceScheduler;\n\n\tprivate _horizontalRevealRequest: HorizontalRevealRequest | null;\n\tprivate readonly _lastRenderedData: LastRenderedData;\n\n\t// Sticky Scroll\n\tprivate _stickyScrollEnabled: boolean;\n\tprivate _maxNumberStickyLines: number;\n\n\tconstructor(context: ViewContext, viewGpuContext: ViewGpuContext | undefined, linesContent: FastDomNode<HTMLElement>) {\n\t\tsuper(context);\n\n\t\tconst conf = this._context.configuration;\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\t\tthis._viewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\n\t\tthis._linesContent = linesContent;\n\t\tthis._textRangeRestingSpot = document.createElement('div');\n\t\tthis._visibleLines = new VisibleLinesCollection(this._context, {\n\t\t\tcreateLine: () => new ViewLine(viewGpuContext, this._viewLineOptions),\n\t\t});\n\t\tthis.domNode = this._visibleLines.domNode;\n\n\t\tPartFingerprints.write(this.domNode, PartFingerprint.ViewLines);\n\t\tthis.domNode.setClassName(`view-lines ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\t// --- width & height\n\t\tthis._maxLineWidth = 0;\n\t\tthis._asyncUpdateLineWidths = new RunOnceScheduler(() => {\n\t\t\tthis._updateLineWidthsSlow();\n\t\t}, 200);\n\t\tthis._asyncCheckMonospaceFontAssumptions = new RunOnceScheduler(() => {\n\t\t\tthis._checkMonospaceFontAssumptions();\n\t\t}, 2000);\n\n\t\tthis._lastRenderedData = new LastRenderedData();\n\n\t\tthis._horizontalRevealRequest = null;\n\n\t\t// sticky scroll widget\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._asyncUpdateLineWidths.dispose();\n\t\tthis._asyncCheckMonospaceFontAssumptions.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic getDomNode(): FastDomNode<HTMLElement> {\n\t\treturn this.domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tthis._visibleLines.onConfigurationChanged(e);\n\t\tif (e.hasChanged(EditorOption.wrappingInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\n\t\t// sticky scroll\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\tthis._onOptionsMaybeChanged();\n\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\treturn true;\n\t}\n\tprivate _onOptionsMaybeChanged(): boolean {\n\t\tconst conf = this._context.configuration;\n\n\t\tconst newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\t\tif (!this._viewLineOptions.equals(newViewLineOptions)) {\n\t\t\tthis._viewLineOptions = newViewLineOptions;\n\n\t\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tline.onOptionsChanged(this._viewLineOptions);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tlet r = false;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tr = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;\n\t\t}\n\t\treturn r;\n\t}\n\tpublic override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\tif (true/*e.inlineDecorationsChanged*/) {\n\t\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tthis._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tconst shouldRender = this._visibleLines.onFlushed(e, this._viewLineOptions.useGpu);\n\t\tthis._maxLineWidth = 0;\n\t\treturn shouldRender;\n\t}\n\tpublic override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._visibleLines.onLinesChanged(e);\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn this._visibleLines.onLinesDeleted(e);\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn this._visibleLines.onLinesInserted(e);\n\t}\n\tpublic override onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean {\n\t\t// Using the future viewport here in order to handle multiple\n\t\t// incoming reveal range requests that might all desire to be animated\n\t\tconst desiredScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(), e.source, e.minimalReveal, e.range, e.selections, e.verticalType);\n\n\t\tif (desiredScrollTop === -1) {\n\t\t\t// marker to abort the reveal range request\n\t\t\treturn false;\n\t\t}\n\n\t\t// validate the new desired scroll top\n\t\tlet newScrollPosition = this._context.viewLayout.validateScrollPosition({ scrollTop: desiredScrollTop });\n\n\t\tif (e.revealHorizontal) {\n\t\t\tif (e.range && e.range.startLineNumber !== e.range.endLineNumber) {\n\t\t\t\t// Two or more lines? => scroll to base (That's how you see most of the two lines)\n\t\t\t\tnewScrollPosition = {\n\t\t\t\t\tscrollTop: newScrollPosition.scrollTop,\n\t\t\t\t\tscrollLeft: 0\n\t\t\t\t};\n\t\t\t} else if (e.range) {\n\t\t\t\t// We don't necessarily know the horizontal offset of this range since the line might not be in the view...\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealRangeRequest(e.minimalReveal, e.range.startLineNumber, e.range.startColumn, e.range.endColumn, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t} else if (e.selections && e.selections.length > 0) {\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealSelectionsRequest(e.minimalReveal, e.selections, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\n\t\tconst scrollTopDelta = Math.abs(this._context.viewLayout.getCurrentScrollTop() - newScrollPosition.scrollTop);\n\t\tconst scrollType = (scrollTopDelta <= this._lineHeight ? ScrollType.Immediate : e.scrollType);\n\t\tthis._context.viewModel.viewLayout.setScrollPosition(newScrollPosition, scrollType);\n\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tif (this._horizontalRevealRequest && e.scrollLeftChanged) {\n\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls horizontally.\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\t\tif (this._horizontalRevealRequest && e.scrollTopChanged) {\n\t\t\tconst min = Math.min(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tconst max = Math.max(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tif (e.scrollTop < min || e.scrollTop > max) {\n\t\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls vertically.\n\t\t\t\tthis._horizontalRevealRequest = null;\n\t\t\t}\n\t\t}\n\t\tthis.domNode.setWidth(e.scrollWidth);\n\t\treturn this._visibleLines.onScrollChanged(e) || true;\n\t}\n\n\tpublic override onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._visibleLines.onTokensChanged(e);\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\treturn this._visibleLines.onZonesChanged(e);\n\t}\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._onOptionsMaybeChanged();\n\t}\n\n\t// ---- end view event handlers\n\n\t// ----------- HELPERS FOR OTHERS\n\n\tpublic getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position | null {\n\t\tconst viewLineDomNode = this._getViewLineDomNode(spanNode);\n\t\tif (viewLineDomNode === null) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\t\tconst lineNumber = this._getLineNumberFor(viewLineDomNode);\n\n\t\tif (lineNumber === -1) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < 1 || lineNumber > this._context.viewModel.getLineCount()) {\n\t\t\t// lineNumber is outside range\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this._context.viewModel.getLineMaxColumn(lineNumber) === 1) {\n\t\t\t// Line is empty\n\t\t\treturn new Position(lineNumber, 1);\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn null;\n\t\t}\n\n\t\tlet column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(spanNode, offset);\n\t\tconst minColumn = this._context.viewModel.getLineMinColumn(lineNumber);\n\t\tif (column < minColumn) {\n\t\t\tcolumn = minColumn;\n\t\t}\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tprivate _getViewLineDomNode(node: HTMLElement | null): HTMLElement | null {\n\t\twhile (node && node.nodeType === 1) {\n\t\t\tif (node.className === ViewLine.CLASS_NAME) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * @returns the line number of this view line dom node.\n\t */\n\tprivate _getLineNumberFor(domNode: HTMLElement): number {\n\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (domNode === line.getDomNode()) {\n\t\t\t\treturn lineNumber;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tpublic getLineWidth(lineNumber: number): number {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst context = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getWidth(context);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(context);\n\n\t\treturn result;\n\t}\n\n\tpublic linesVisibleRangesForRange(_range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tif (this.shouldRender()) {\n\t\t\t// Cannot read from the DOM because it is dirty\n\t\t\t// i.e. the model & the dom are out of sync, so I'd be reading something stale\n\t\t\treturn null;\n\t\t}\n\n\t\tconst originalEndLineNumber = _range.endLineNumber;\n\t\tconst range = Range.intersectRanges(_range, this._lastRenderedData.getCurrentVisibleRange());\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst visibleRanges: LineVisibleRanges[] = [];\n\t\tlet visibleRangesLen = 0;\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\n\t\tlet nextLineModelLineNumber: number = 0;\n\t\tif (includeNewLines) {\n\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n\n\t\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\n\t\t\tconst continuesInNextLine = lineNumber !== originalEndLineNumber;\n\t\t\tconst endColumn = continuesInNextLine ? this._context.viewModel.getLineMaxColumn(lineNumber) : range.endColumn;\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tconst visibleRangesForLine = visibleLine.getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\n\t\t\tif (!visibleRangesForLine) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (includeNewLines && lineNumber < originalEndLineNumber) {\n\t\t\t\tconst currentLineModelLineNumber = nextLineModelLineNumber;\n\t\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;\n\n\t\t\t\tif (currentLineModelLineNumber !== nextLineModelLineNumber) {\n\t\t\t\t\tconst floatHorizontalRange = visibleRangesForLine.ranges[visibleRangesForLine.ranges.length - 1];\n\t\t\t\t\tfloatHorizontalRange.width += this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\tif (this._context.viewModel.getTextDirection(currentLineModelLineNumber) === TextDirection.RTL) {\n\t\t\t\t\t\tfloatHorizontalRange.left -= this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisibleRanges[visibleRangesLen++] = new LineVisibleRanges(visibleRangesForLine.outsideRenderedLine, lineNumber, HorizontalRange.from(visibleRangesForLine.ranges), continuesInNextLine);\n\t\t}\n\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\tif (visibleRangesLen === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visibleRanges;\n\t}\n\n\tprivate _visibleRangesForLineRange(lineNumber: number, startColumn: number, endColumn: number): VisibleRanges | null {\n\t\tif (this.shouldRender()) {\n\t\t\t// Cannot read from the DOM because it is dirty\n\t\t\t// i.e. the model & the dom are out of sync, so I'd be reading something stale\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\treturn result;\n\t}\n\n\tprivate _lineIsRenderedRTL(lineNumber: number): boolean {\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn false;\n\t\t}\n\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\treturn visibleLine.isRenderedRTL();\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\tconst visibleRanges = this._visibleRangesForLineRange(position.lineNumber, position.column, position.column);\n\t\tif (!visibleRanges) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new HorizontalPosition(visibleRanges.outsideRenderedLine, visibleRanges.ranges[0].left);\n\t}\n\n\t/**\n\t * Updates the max line width if it is fast to compute.\n\t * Returns true if all lines were taken into account.\n\t * Returns false if some lines need to be reevaluated (in a slow fashion).\n\t */\n\tprivate _updateLineWidthsFast(): boolean {\n\t\treturn this._updateLineWidths(true);\n\t}\n\n\tprivate _updateLineWidthsSlow(): void {\n\t\tthis._updateLineWidths(false);\n\t}\n\n\t/**\n\t * Update the line widths using DOM layout information after someone else\n\t * has caused a synchronous layout.\n\t */\n\tprivate _updateLineWidthsSlowIfDomDidLayout(domReadingContext: DomReadingContext): void {\n\t\tif (!domReadingContext.didDomLayout) {\n\t\t\t// only proceed if we just did a layout\n\t\t\treturn;\n\t\t}\n\t\tif (this._asyncUpdateLineWidths.isScheduled()) {\n\t\t\t// reading widths is not scheduled => widths are up-to-date\n\t\t\treturn;\n\t\t}\n\t\tthis._asyncUpdateLineWidths.cancel();\n\t\tthis._updateLineWidthsSlow();\n\t}\n\n\tprivate _updateLineWidths(fast: boolean): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\n\t\tlet localMaxLineWidth = 1;\n\t\tlet allWidthsComputed = true;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\n\t\t\tif (fast && !visibleLine.getWidthIsFast()) {\n\t\t\t\t// Cannot compute width in a fast way for this line\n\t\t\t\tallWidthsComputed = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlocalMaxLineWidth = Math.max(localMaxLineWidth, visibleLine.getWidth(null));\n\t\t}\n\n\t\tif (allWidthsComputed && rendStartLineNumber === 1 && rendEndLineNumber === this._context.viewModel.getLineCount()) {\n\t\t\t// we know the max line width for all the lines\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tthis._ensureMaxLineWidth(localMaxLineWidth);\n\n\t\treturn allWidthsComputed;\n\t}\n\n\tprivate _checkMonospaceFontAssumptions(): void {\n\t\t// Problems with monospace assumptions are more apparent for longer lines,\n\t\t// as small rounding errors start to sum up, so we will select the longest\n\t\t// line for a closer inspection\n\t\tlet longestLineNumber = -1;\n\t\tlet longestWidth = -1;\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\tconst lineWidth = visibleLine.getWidth(null);\n\t\t\t\tif (lineWidth > longestWidth) {\n\t\t\t\t\tlongestWidth = lineWidth;\n\t\t\t\t\tlongestLineNumber = lineNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (longestLineNumber === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._visibleLines.getVisibleLine(longestLineNumber).monospaceAssumptionsAreValid()) {\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tvisibleLine.onMonospaceAssumptionsInvalidated();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic prepareRender(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic render(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic renderText(viewportData: ViewportData): void {\n\t\t// (1) render lines - ensures lines are in the DOM\n\t\tthis._visibleLines.renderLines(viewportData);\n\t\tthis._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);\n\t\tthis.domNode.setWidth(this._context.viewLayout.getScrollWidth());\n\t\tthis.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(), 1000000));\n\n\t\t// (2) compute horizontal scroll position:\n\t\t// - this must happen after the lines are in the DOM since it might need a line that rendered just now\n\t\t// - it might change `scrollWidth` and `scrollLeft`\n\t\tif (this._horizontalRevealRequest) {\n\n\t\t\tconst horizontalRevealRequest = this._horizontalRevealRequest;\n\n\t\t\t// Check that we have the line that contains the horizontal range in the viewport\n\t\t\tif (viewportData.startLineNumber <= horizontalRevealRequest.minLineNumber && horizontalRevealRequest.maxLineNumber <= viewportData.endLineNumber) {\n\n\t\t\t\tthis._horizontalRevealRequest = null;\n\n\t\t\t\t// allow `visibleRangesForRange2` to work\n\t\t\t\tthis.onDidRender();\n\n\t\t\t\t// compute new scroll position\n\t\t\t\tconst newScrollLeft = this._computeScrollLeftToReveal(horizontalRevealRequest);\n\n\t\t\t\tif (newScrollLeft) {\n\t\t\t\t\tif (!this._isViewportWrapping && !newScrollLeft.hasRTL) {\n\t\t\t\t\t\t// ensure `scrollWidth` is large enough\n\t\t\t\t\t\tthis._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);\n\t\t\t\t\t}\n\t\t\t\t\t// set `scrollLeft`\n\t\t\t\t\tthis._context.viewModel.viewLayout.setScrollPosition({\n\t\t\t\t\t\tscrollLeft: newScrollLeft.scrollLeft\n\t\t\t\t\t}, horizontalRevealRequest.scrollType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)\n\t\tif (!this._updateLineWidthsFast()) {\n\t\t\t// Computing the width of some lines would be slow => delay it\n\t\t\tthis._asyncUpdateLineWidths.schedule();\n\t\t} else {\n\t\t\tthis._asyncUpdateLineWidths.cancel();\n\t\t}\n\n\t\tif (platform.isLinux && !this._asyncCheckMonospaceFontAssumptions.isScheduled()) {\n\t\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\t\tthis._asyncCheckMonospaceFontAssumptions.schedule();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (3) handle scrolling\n\t\tthis._linesContent.setLayerHinting(this._canUseLayerHinting);\n\t\tthis._linesContent.setContain('strict');\n\t\tconst adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta;\n\t\tthis._linesContent.setTop(-adjustedScrollTop);\n\t\tthis._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft());\n\t}\n\n\t// --- width\n\n\tprivate _ensureMaxLineWidth(lineWidth: number): void {\n\t\tconst iLineWidth = Math.ceil(lineWidth);\n\t\tif (this._maxLineWidth < iLineWidth) {\n\t\t\tthis._maxLineWidth = iLineWidth;\n\t\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\t}\n\t}\n\n\tprivate _computeScrollTopToRevealRange(viewport: Viewport, source: string | null | undefined, minimalReveal: boolean, range: Range | null, selections: Selection[] | null, verticalType: viewEvents.VerticalRevealType): number {\n\t\tconst viewportStartY = viewport.top;\n\t\tconst viewportHeight = viewport.height;\n\t\tconst viewportEndY = viewportStartY + viewportHeight;\n\t\tlet boxIsSingleRange: boolean;\n\t\tlet boxStartY: number;\n\t\tlet boxEndY: number;\n\n\t\tif (selections && selections.length > 0) {\n\t\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\t\tconst selection = selections[i];\n\t\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t\t}\n\t\t\tboxIsSingleRange = false;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(minLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(maxLineNumber) + this._lineHeight;\n\t\t} else if (range) {\n\t\t\tboxIsSingleRange = true;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst shouldIgnoreScrollOff = (source === 'mouse' || minimalReveal) && this._cursorSurroundingLinesStyle === 'default';\n\n\t\tlet paddingTop: number = 0;\n\t\tlet paddingBottom: number = 0;\n\n\t\tif (!shouldIgnoreScrollOff) {\n\t\t\tconst maxLinesInViewport = (viewportHeight / this._lineHeight);\n\t\t\tconst surroundingLines = Math.max(this._cursorSurroundingLines, this._stickyScrollEnabled ? this._maxNumberStickyLines : 0);\n\t\t\tconst context = Math.min(maxLinesInViewport / 2, surroundingLines);\n\t\t\tpaddingTop = context * this._lineHeight;\n\t\t\tpaddingBottom = Math.max(0, (context - 1)) * this._lineHeight;\n\t\t} else {\n\t\t\tif (!minimalReveal) {\n\t\t\t\t// Reveal one more line above (this case is hit when dragging)\n\t\t\t\tpaddingTop = this._lineHeight;\n\t\t\t}\n\t\t}\n\t\tif (!minimalReveal) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.Simple || verticalType === viewEvents.VerticalRevealType.Bottom) {\n\t\t\t\t// Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom\n\t\t\t\tpaddingBottom += this._lineHeight;\n\t\t\t}\n\t\t}\n\n\t\tboxStartY -= paddingTop;\n\t\tboxEndY += paddingBottom;\n\t\tlet newScrollTop: number;\n\n\t\tif (boxEndY - boxStartY > viewportHeight) {\n\t\t\t// the box is larger than the viewport ... scroll to its top\n\t\t\tif (!boxIsSingleRange) {\n\t\t\t\t// do not reveal multiple cursors if there are more than fit the viewport\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tnewScrollTop = boxStartY;\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.NearTop || verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// We want a gap that is 20% of the viewport, but with a minimum of 5 lines\n\t\t\t\tconst desiredGapAbove = Math.max(5 * this._lineHeight, viewportHeight * 0.2);\n\t\t\t\t// Try to scroll just above the box with the desired gap\n\t\t\t\tconst desiredScrollTop = boxStartY - desiredGapAbove;\n\t\t\t\t// But ensure that the box is not pushed out of viewport\n\t\t\t\tconst minScrollTop = boxEndY - viewportHeight;\n\t\t\t\tnewScrollTop = Math.max(minScrollTop, desiredScrollTop);\n\t\t\t}\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.Center || verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// Box is outside the viewport... center it\n\t\t\t\tconst boxMiddleY = (boxStartY + boxEndY) / 2;\n\t\t\t\tnewScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);\n\t\t\t}\n\t\t} else {\n\t\t\tnewScrollTop = this._computeMinimumScrolling(viewportStartY, viewportEndY, boxStartY, boxEndY, verticalType === viewEvents.VerticalRevealType.Top, verticalType === viewEvents.VerticalRevealType.Bottom);\n\t\t}\n\n\t\treturn newScrollTop;\n\t}\n\n\tprivate _computeScrollLeftToReveal(horizontalRevealRequest: HorizontalRevealRequest): { scrollLeft: number; maxHorizontalOffset: number; hasRTL: boolean } | null {\n\n\t\tconst viewport = this._context.viewLayout.getCurrentViewport();\n\t\tconst layoutInfo = this._context.configuration.options.get(EditorOption.layoutInfo);\n\t\tconst viewportStartX = viewport.left;\n\t\tconst viewportEndX = viewportStartX + viewport.width - layoutInfo.verticalScrollbarWidth;\n\n\t\tlet boxStartX = Constants.MAX_SAFE_SMALL_INTEGER;\n\t\tlet boxEndX = 0;\n\t\tlet hasRTL = false;\n\t\tif (horizontalRevealRequest.type === 'range') {\n\t\t\thasRTL = this._lineIsRenderedRTL(horizontalRevealRequest.lineNumber);\n\t\t\tconst visibleRanges = this._visibleRangesForLineRange(horizontalRevealRequest.lineNumber, horizontalRevealRequest.startColumn, horizontalRevealRequest.endColumn);\n\t\t\tif (!visibleRanges) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const selection of horizontalRevealRequest.selections) {\n\t\t\t\tif (selection.startLineNumber !== selection.endLineNumber) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst visibleRanges = this._visibleRangesForLineRange(selection.startLineNumber, selection.startColumn, selection.endColumn);\n\t\t\t\thasRTL ||= this._lineIsRenderedRTL(selection.startLineNumber);\n\t\t\t\tif (!visibleRanges) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!horizontalRevealRequest.minimalReveal) {\n\t\t\tboxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\n\t\t\tboxEndX += this._revealHorizontalRightPadding;\n\t\t}\n\n\t\tif (horizontalRevealRequest.type === 'selections' && boxEndX - boxStartX > viewport.width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);\n\t\treturn {\n\t\t\tscrollLeft: newScrollLeft,\n\t\t\tmaxHorizontalOffset: boxEndX,\n\t\t\thasRTL\n\t\t};\n\t}\n\n\tprivate _computeMinimumScrolling(viewportStart: number, viewportEnd: number, boxStart: number, boxEnd: number, revealAtStart?: boolean, revealAtEnd?: boolean): number {\n\t\tviewportStart = viewportStart | 0;\n\t\tviewportEnd = viewportEnd | 0;\n\t\tboxStart = boxStart | 0;\n\t\tboxEnd = boxEnd | 0;\n\t\trevealAtStart = !!revealAtStart;\n\t\trevealAtEnd = !!revealAtEnd;\n\n\t\tconst viewportLength = viewportEnd - viewportStart;\n\t\tconst boxLength = boxEnd - boxStart;\n\n\t\tif (boxLength < viewportLength) {\n\t\t\t// The box would fit in the viewport\n\n\t\t\tif (revealAtStart) {\n\t\t\t\treturn boxStart;\n\t\t\t}\n\n\t\t\tif (revealAtEnd) {\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\n\t\t\tif (boxStart < viewportStart) {\n\t\t\t\t// The box is above the viewport\n\t\t\t\treturn boxStart;\n\t\t\t} else if (boxEnd > viewportEnd) {\n\t\t\t\t// The box is below the viewport\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\t\t} else {\n\t\t\t// The box would not fit in the viewport\n\t\t\t// Reveal the beginning of the box\n\t\t\treturn boxStart;\n\t\t}\n\n\t\treturn viewportStart;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/viewParts/viewLines/viewLines.ts","vs/editor/browser/viewParts/viewLines/viewLines.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAGhG,OAAO,EAAE,gCAAgC,EAAE,MAAM,wDAAwD,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,QAAQ,MAAM,qCAAqC,CAAC;AAEhE,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAc,iBAAiB,EAAiB,MAAM,gCAAgC,CAAC;AACnI,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAmB,gBAAgB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAOtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,gBAAgB;IAIrB;QACC,IAAI,CAAC,oBAAoB,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IAEM,sBAAsB;QAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IAClC,CAAC;IAEM,sBAAsB,CAAC,mBAA0B;QACvD,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;IACjD,CAAC;CACD;AAED,MAAM,4BAA4B;IAKjC,YACiB,aAAsB,EACtB,UAAkB,EAClB,WAAmB,EACnB,SAAiB,EACjB,cAAsB,EACtB,aAAqB,EACrB,UAAsB;QANtB,kBAAa,GAAb,aAAa,CAAS;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,gBAAW,GAAX,WAAW,CAAQ;QACnB,cAAS,GAAT,SAAS,CAAQ;QACjB,mBAAc,GAAd,cAAc,CAAQ;QACtB,kBAAa,GAAb,aAAa,CAAQ;QACrB,eAAU,GAAV,UAAU,CAAY;QAXvB,SAAI,GAAG,OAAO,CAAC;QAa9B,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;IACjC,CAAC;CACD;AAED,MAAM,iCAAiC;IAKtC,YACiB,aAAsB,EACtB,UAAuB,EACvB,cAAsB,EACtB,aAAqB,EACrB,UAAsB;QAJtB,kBAAa,GAAb,aAAa,CAAS;QACtB,eAAU,GAAV,UAAU,CAAa;QACvB,mBAAc,GAAd,cAAc,CAAQ;QACtB,kBAAa,GAAb,aAAa,CAAQ;QACrB,eAAU,GAAV,UAAU,CAAY;QATvB,SAAI,GAAG,YAAY,CAAC;QAWnC,IAAI,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QAClD,IAAI,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;YACnE,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,CAAC;CACD;AAID;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,QAAQ;IACtC;;OAEG;aACqB,wBAAmB,GAAG,EAAE,CAAC;IA6BjD,YAAY,OAAoB,EAAE,cAA0C,EAAE,YAAsC;QACnH,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,gCAAuB,CAAC;QACpD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,qCAA2B,CAAC;QAE5D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,kCAAyB,CAAC;QACxD,IAAI,CAAC,+BAA+B,GAAG,QAAQ,CAAC,8BAA8B,CAAC;QAC/E,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,kBAAkB,CAAC;QAC3D,IAAI,CAAC,6BAA6B,GAAG,OAAO,CAAC,GAAG,qDAA2C,CAAC;QAC5F,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,GAAG,8CAAqC,CAAC;QAChF,IAAI,CAAC,4BAA4B,GAAG,OAAO,CAAC,GAAG,mDAA0C,CAAC;QAC1F,IAAI,CAAC,mBAAmB,GAAG,CAAC,OAAO,CAAC,GAAG,2CAAkC,CAAC;QAC1E,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5E,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9D,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC;SACrE,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAE1C,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,oCAA4B,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,gCAAgC,EAAE,CAAC,CAAC;QAC5E,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEtC,qBAAqB;QACrB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,sBAAsB,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACvD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC9B,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,IAAI,CAAC,mCAAmC,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACpE,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACvC,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,CAAC,iBAAiB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAEhD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAErC,uBAAuB;QACvB,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,GAAG,qCAA2B,CAAC,OAAO,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,GAAG,qCAA2B,CAAC,YAAY,CAAC;IAClF,CAAC;IAEe,OAAO;QACtB,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,mCAAmC,CAAC,OAAO,EAAE,CAAC;QACnD,KAAK,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEM,UAAU;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,iCAAiC;IAEjB,sBAAsB,CAAC,CAA2C;QACjF,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC,UAAU,qCAA2B,EAAE,CAAC;YAC7C,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,gCAAuB,CAAC;QACpD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,qCAA2B,CAAC;QAE5D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,kCAAyB,CAAC;QACxD,IAAI,CAAC,+BAA+B,GAAG,QAAQ,CAAC,8BAA8B,CAAC;QAC/E,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,kBAAkB,CAAC;QAC3D,IAAI,CAAC,6BAA6B,GAAG,OAAO,CAAC,GAAG,qDAA2C,CAAC;QAC5F,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,GAAG,8CAAqC,CAAC;QAChF,IAAI,CAAC,4BAA4B,GAAG,OAAO,CAAC,GAAG,mDAA0C,CAAC;QAC1F,IAAI,CAAC,mBAAmB,GAAG,CAAC,OAAO,CAAC,GAAG,2CAAkC,CAAC;QAE1E,gBAAgB;QAChB,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,GAAG,qCAA2B,CAAC,OAAO,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,GAAG,qCAA2B,CAAC,YAAY,CAAC;QAEjF,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEtC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IAAI,CAAC,CAAC,UAAU,mCAAyB,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IACO,sBAAsB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAEzC,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;YAE3C,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;YAChE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;YAC5D,KAAK,IAAI,UAAU,GAAG,eAAe,EAAE,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC;gBAClF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC3D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IACe,oBAAoB,CAAC,CAAyC;QAC7E,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAChE,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,KAAK,IAAI,UAAU,GAAG,mBAAmB,EAAE,UAAU,IAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC;YAC1F,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,CAAC;IACV,CAAC;IACe,oBAAoB,CAAC,CAAyC;QAC7E,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAChE,KAAK,IAAI,UAAU,GAAG,mBAAmB,EAAE,UAAU,IAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC;YAC1F,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACe,SAAS,CAAC,CAA8B;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,OAAO,YAAY,CAAC;IACrB,CAAC;IACe,cAAc,CAAC,CAAmC;QACjE,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACe,cAAc,CAAC,CAAmC;QACjE,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACe,eAAe,CAAC,CAAoC;QACnE,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACe,oBAAoB,CAAC,CAAyC;QAC7E,6DAA6D;QAC7D,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;QAE7K,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7B,2CAA2C;YAC3C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,sCAAsC;QACtC,IAAI,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAEzG,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAClE,kFAAkF;gBAClF,iBAAiB,GAAG;oBACnB,SAAS,EAAE,iBAAiB,CAAC,SAAS;oBACtC,UAAU,EAAE,CAAC;iBACb,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACpB,2GAA2G;gBAC3G,IAAI,CAAC,wBAAwB,GAAG,IAAI,4BAA4B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAC/O,CAAC;iBAAM,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,wBAAwB,GAAG,IAAI,iCAAiC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YACjM,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC9G,MAAM,UAAU,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,8BAAsB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAEpF,OAAO,IAAI,CAAC;IACb,CAAC;IACe,eAAe,CAAC,CAAoC;QACnE,IAAI,IAAI,CAAC,wBAAwB,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;YAC1D,yFAAyF;YACzF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,CAAC,wBAAwB,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;YAChH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;YAChH,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;gBAC5C,uFAAuF;gBACvF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;YACtC,CAAC;QACF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,iBAAiB,CAAC;IAC3F,CAAC;IAEe,eAAe,CAAC,CAAoC;QACnE,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACe,cAAc,CAAC,CAAmC;QACjE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACe,cAAc,CAAC,CAAmC;QACjE,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACtC,CAAC;IAED,+BAA+B;IAE/B,iCAAiC;IAE1B,sBAAsB,CAAC,QAAqB,EAAE,MAAc;QAClE,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC9B,+BAA+B;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAE3D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,+BAA+B;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;YAC3E,8BAA8B;YAC9B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,gBAAgB;YAChB,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAChE,IAAI,UAAU,GAAG,mBAAmB,IAAI,UAAU,GAAG,iBAAiB,EAAE,CAAC;YACxE,qBAAqB;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;YACxB,MAAM,GAAG,SAAS,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,mBAAmB,CAAC,IAAwB;QACnD,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC5C,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAoB;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAC5D,KAAK,IAAI,UAAU,GAAG,eAAe,EAAE,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAI,OAAO,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnC,OAAO,UAAU,CAAC;YACnB,CAAC;QACF,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;IAEM,YAAY,CAAC,UAAkB;QACrC,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAChE,IAAI,UAAU,GAAG,mBAAmB,IAAI,UAAU,GAAG,iBAAiB,EAAE,CAAC;YACxE,qBAAqB;YACrB,OAAO,CAAC,CAAC,CAAC;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC;QAElD,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,0BAA0B,CAAC,MAAa,EAAE,eAAwB;QACxE,MAAM,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,aAAa,GAAwB,EAAE,CAAC;QAC9C,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAElG,IAAI,uBAAuB,GAAW,CAAC,CAAC;QACxC,IAAI,eAAe,EAAE,CAAC;YACrB,uBAAuB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9J,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAChE,KAAK,IAAI,UAAU,GAAG,KAAK,CAAC,eAAe,EAAE,UAAU,IAAI,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC;YAE9F,IAAI,UAAU,GAAG,mBAAmB,IAAI,UAAU,GAAG,iBAAiB,EAAE,CAAC;gBACxE,SAAS;YACV,CAAC;YAED,MAAM,WAAW,GAAG,UAAU,KAAK,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,mBAAmB,GAAG,UAAU,KAAK,qBAAqB,CAAC;YACjE,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YAC/G,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAClE,MAAM,oBAAoB,GAAG,WAAW,CAAC,wBAAwB,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAEzH,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC3B,SAAS;YACV,CAAC;YAED,IAAI,eAAe,IAAI,UAAU,GAAG,qBAAqB,EAAE,CAAC;gBAC3D,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;gBAC3D,uBAAuB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBAEtJ,IAAI,0BAA0B,KAAK,uBAAuB,EAAE,CAAC;oBAC5D,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACjG,oBAAoB,CAAC,KAAK,IAAI,IAAI,CAAC,+BAA+B,CAAC;oBACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,KAAK,aAAa,CAAC,GAAG,EAAE,CAAC;wBAChG,oBAAoB,CAAC,IAAI,IAAI,IAAI,CAAC,+BAA+B,CAAC;oBACnE,CAAC;gBACF,CAAC;YACF,CAAC;YAED,aAAa,CAAC,gBAAgB,EAAE,CAAC,GAAG,IAAI,iBAAiB,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACzL,CAAC;QAED,IAAI,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,CAAC;QAE5D,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAEO,0BAA0B,CAAC,UAAkB,EAAE,WAAmB,EAAE,SAAiB;QAC5F,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAChH,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClG,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,wBAAwB,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC7I,IAAI,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,CAAC;QAE5D,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,kBAAkB,CAAC,UAAkB;QAC5C,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAChH,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAClE,OAAO,WAAW,CAAC,aAAa,EAAE,CAAC;IACpC,CAAC;IAEM,uBAAuB,CAAC,QAAkB;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7G,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,IAAI,kBAAkB,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC;IAED;;;;OAIG;IACK,qBAAqB;QAC5B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEO,qBAAqB;QAC5B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACK,mCAAmC,CAAC,iBAAoC;QAC/E,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;YACrC,uCAAuC;YACvC,OAAO;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,EAAE,CAAC;YAChD,2DAA2D;YAC3D,OAAO;QACR,CAAC;QACD,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC9B,CAAC;IAEO,iBAAiB,CAAC,IAAa;QACtC,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAEhE,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,iBAAiB,GAAG,IAAI,CAAC;QAC7B,KAAK,IAAI,UAAU,GAAG,mBAAmB,EAAE,UAAU,IAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC;YAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAElE,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC3C,mDAAmD;gBACnD,iBAAiB,GAAG,KAAK,CAAC;gBAC1B,SAAS;YACV,CAAC;YAED,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,iBAAiB,IAAI,mBAAmB,KAAK,CAAC,IAAI,iBAAiB,KAAK,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;YACpH,+CAA+C;YAC/C,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QAE5C,OAAO,iBAAiB,CAAC;IAC1B,CAAC;IAEO,8BAA8B;QACrC,0EAA0E;QAC1E,0EAA0E;QAC1E,+BAA+B;QAC/B,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAChE,KAAK,IAAI,UAAU,GAAG,mBAAmB,EAAE,UAAU,IAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC;YAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAClE,IAAI,WAAW,CAAC,uBAAuB,EAAE,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;oBAC9B,YAAY,GAAG,SAAS,CAAC;oBACzB,iBAAiB,GAAG,UAAU,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,4BAA4B,EAAE,EAAE,CAAC;YAC1F,KAAK,IAAI,UAAU,GAAG,mBAAmB,EAAE,UAAU,IAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC;gBAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAClE,WAAW,CAAC,iCAAiC,EAAE,CAAC;YACjD,CAAC;QACF,CAAC;IACF,CAAC;IAEM,aAAa;QACnB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAEM,MAAM;QACZ,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAEM,UAAU,CAAC,YAA0B;QAC3C,kDAAkD;QAClD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAEtF,0CAA0C;QAC1C,uGAAuG;QACvG,oDAAoD;QACpD,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAEnC,MAAM,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC;YAE9D,iFAAiF;YACjF,IAAI,YAAY,CAAC,eAAe,IAAI,uBAAuB,CAAC,aAAa,IAAI,uBAAuB,CAAC,aAAa,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;gBAElJ,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;gBAErC,yCAAyC;gBACzC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEnB,8BAA8B;gBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;gBAE/E,IAAI,aAAa,EAAE,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;wBACxD,uCAAuC;wBACvC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;oBAC7D,CAAC;oBACD,mBAAmB;oBACnB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC;wBACpD,UAAU,EAAE,aAAa,CAAC,UAAU;qBACpC,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;gBACxC,CAAC;YACF,CAAC;QACF,CAAC;QAED,yGAAyG;QACzG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACnC,8DAA8D;YAC9D,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC;QACtC,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,WAAW,EAAE,EAAE,CAAC;YACjF,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;YACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;YAChE,KAAK,IAAI,UAAU,GAAG,mBAAmB,EAAE,UAAU,IAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC;gBAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAClE,IAAI,WAAW,CAAC,uBAAuB,EAAE,EAAE,CAAC;oBAC3C,IAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,CAAC;oBACpD,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,YAAY,CAAC,eAAe,CAAC;QACxG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,YAAY;IAEJ,mBAAmB,CAAC,SAAiB;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,aAAa,GAAG,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxE,CAAC;IACF,CAAC;IAEO,8BAA8B,CAAC,QAAkB,EAAE,MAAiC,EAAE,aAAsB,EAAE,KAAmB,EAAE,UAA8B,EAAE,YAA2C;QACrN,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC;QACpC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvC,MAAM,YAAY,GAAG,cAAc,GAAG,cAAc,CAAC;QACrD,IAAI,gBAAyB,CAAC;QAC9B,IAAI,SAAiB,CAAC;QACtB,IAAI,OAAe,CAAC;QAEpB,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAClD,IAAI,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;gBACnE,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;YAClE,CAAC;YACD,gBAAgB,GAAG,KAAK,CAAC;YACzB,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC;YACnF,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,8BAA8B,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACrG,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YAClB,gBAAgB,GAAG,IAAI,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,8BAA8B,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC3F,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,8BAA8B,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3G,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,CAAC,CAAC;QACX,CAAC;QAED,MAAM,qBAAqB,GAAG,CAAC,MAAM,KAAK,OAAO,IAAI,aAAa,CAAC,IAAI,IAAI,CAAC,4BAA4B,KAAK,SAAS,CAAC;QAEvH,IAAI,UAAU,GAAW,CAAC,CAAC;QAC3B,IAAI,aAAa,GAAW,CAAC,CAAC;QAE9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5B,MAAM,kBAAkB,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5H,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAC;YACnE,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;YACxC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/D,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpB,8DAA8D;gBAC9D,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,CAAC;QACF,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,IAAI,YAAY,iDAAyC,IAAI,YAAY,iDAAyC,EAAE,CAAC;gBACpH,uIAAuI;gBACvI,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC;YACnC,CAAC;QACF,CAAC;QAED,SAAS,IAAI,UAAU,CAAC;QACxB,OAAO,IAAI,aAAa,CAAC;QACzB,IAAI,YAAoB,CAAC;QAEzB,IAAI,OAAO,GAAG,SAAS,GAAG,cAAc,EAAE,CAAC;YAC1C,4DAA4D;YAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvB,yEAAyE;gBACzE,OAAO,CAAC,CAAC,CAAC;YACX,CAAC;YACD,YAAY,GAAG,SAAS,CAAC;QAC1B,CAAC;aAAM,IAAI,YAAY,kDAA0C,IAAI,YAAY,mEAA2D,EAAE,CAAC;YAC9I,IAAI,YAAY,mEAA2D,IAAI,cAAc,IAAI,SAAS,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;gBACvI,+CAA+C;gBAC/C,YAAY,GAAG,cAAc,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACP,2EAA2E;gBAC3E,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,GAAG,CAAC,CAAC;gBAC7E,wDAAwD;gBACxD,MAAM,gBAAgB,GAAG,SAAS,GAAG,eAAe,CAAC;gBACrD,wDAAwD;gBACxD,MAAM,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;gBAC9C,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACzD,CAAC;QACF,CAAC;aAAM,IAAI,YAAY,iDAAyC,IAAI,YAAY,kEAA0D,EAAE,CAAC;YAC5I,IAAI,YAAY,kEAA0D,IAAI,cAAc,IAAI,SAAS,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;gBACtI,+CAA+C;gBAC/C,YAAY,GAAG,cAAc,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACP,2CAA2C;gBAC3C,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7C,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC;QACF,CAAC;aAAM,CAAC;YACP,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,8CAAsC,EAAE,YAAY,iDAAyC,CAAC,CAAC;QAC3M,CAAC;QAED,OAAO,YAAY,CAAC;IACrB,CAAC;IAEO,0BAA0B,CAAC,uBAAgD;QAElF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,mCAAyB,CAAC;QACpF,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC;QACrC,MAAM,YAAY,GAAG,cAAc,GAAG,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,sBAAsB,CAAC;QAEzF,IAAI,SAAS,oDAAmC,CAAC;QACjD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,uBAAuB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9C,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;YACrE,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,UAAU,EAAE,uBAAuB,CAAC,WAAW,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAClK,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACb,CAAC;YACD,KAAK,MAAM,YAAY,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACjD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/D,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACjF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,UAAU,EAAE,CAAC;gBAC5D,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;oBAC3D,OAAO,IAAI,CAAC;gBACb,CAAC;gBACD,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC7H,MAAM,KAAK,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC;gBACb,CAAC;gBACD,KAAK,MAAM,YAAY,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACjD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC/D,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjF,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,CAAC;YAC5C,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACnE,OAAO,IAAI,IAAI,CAAC,6BAA6B,CAAC;QAC/C,CAAC;QAED,IAAI,uBAAuB,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC3F,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtG,OAAO;YACN,UAAU,EAAE,aAAa;YACzB,mBAAmB,EAAE,OAAO;YAC5B,MAAM;SACN,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,aAAqB,EAAE,WAAmB,EAAE,QAAgB,EAAE,MAAc,EAAE,aAAuB,EAAE,WAAqB;QAC5J,aAAa,GAAG,aAAa,GAAG,CAAC,CAAC;QAClC,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;QAC9B,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;QACxB,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;QACpB,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;QAChC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;QAE5B,MAAM,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;QAEpC,IAAI,SAAS,GAAG,cAAc,EAAE,CAAC;YAChC,oCAAoC;YAEpC,IAAI,aAAa,EAAE,CAAC;gBACnB,OAAO,QAAQ,CAAC;YACjB,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC;YAC7C,CAAC;YAED,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;gBAC9B,gCAAgC;gBAChC,OAAO,QAAQ,CAAC;YACjB,CAAC;iBAAM,IAAI,MAAM,GAAG,WAAW,EAAE,CAAC;gBACjC,gCAAgC;gBAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC;aAAM,CAAC;YACP,wCAAwC;YACxC,kCAAkC;YAClC,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC","file":"viewLines.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 { FastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport { Constants } from '../../../../base/common/uint.js';\nimport './viewLines.css';\nimport { applyFontInfo } from '../../config/domFontInfo.js';\nimport { HorizontalPosition, HorizontalRange, IViewLines, LineVisibleRanges, VisibleRanges } from '../../view/renderingContext.js';\nimport { VisibleLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { DomReadingContext } from './domReadingContext.js';\nimport { ViewLine } from './viewLine.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { ScrollType } from '../../../common/editorCommon.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js';\nimport { Viewport } from '../../../common/viewModel.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ViewLineOptions } from './viewLineOptions.js';\nimport { ViewGpuContext } from '../../gpu/viewGpuContext.js';\nimport { TextDirection } from '../../../common/model.js';\n\nclass LastRenderedData {\n\n\tprivate _currentVisibleRange: Range;\n\n\tconstructor() {\n\t\tthis._currentVisibleRange = new Range(1, 1, 1, 1);\n\t}\n\n\tpublic getCurrentVisibleRange(): Range {\n\t\treturn this._currentVisibleRange;\n\t}\n\n\tpublic setCurrentVisibleRange(currentVisibleRange: Range): void {\n\t\tthis._currentVisibleRange = currentVisibleRange;\n\t}\n}\n\nclass HorizontalRevealRangeRequest {\n\tpublic readonly type = 'range';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly startColumn: number,\n\t\tpublic readonly endColumn: number,\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tthis.minLineNumber = lineNumber;\n\t\tthis.maxLineNumber = lineNumber;\n\t}\n}\n\nclass HorizontalRevealSelectionsRequest {\n\tpublic readonly type = 'selections';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly selections: Selection[],\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t}\n\t\tthis.minLineNumber = minLineNumber;\n\t\tthis.maxLineNumber = maxLineNumber;\n\t}\n}\n\ntype HorizontalRevealRequest = HorizontalRevealRangeRequest | HorizontalRevealSelectionsRequest;\n\n/**\n * The view lines part is responsible for rendering the actual content of a\n * file.\n */\nexport class ViewLines extends ViewPart implements IViewLines {\n\t/**\n\t * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\n\t */\n\tprivate static readonly HORIZONTAL_EXTRA_PX = 30;\n\n\tprivate readonly _linesContent: FastDomNode<HTMLElement>;\n\tprivate readonly _textRangeRestingSpot: HTMLElement;\n\tprivate readonly _visibleLines: VisibleLinesCollection<ViewLine>;\n\tprivate readonly domNode: FastDomNode<HTMLElement>;\n\n\t// --- config\n\tprivate _lineHeight: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\tprivate _isViewportWrapping: boolean;\n\tprivate _revealHorizontalRightPadding: number;\n\tprivate _cursorSurroundingLines: number;\n\tprivate _cursorSurroundingLinesStyle: 'default' | 'all';\n\tprivate _canUseLayerHinting: boolean;\n\tprivate _viewLineOptions: ViewLineOptions;\n\n\t// --- width\n\tprivate _maxLineWidth: number;\n\tprivate readonly _asyncUpdateLineWidths: RunOnceScheduler;\n\tprivate readonly _asyncCheckMonospaceFontAssumptions: RunOnceScheduler;\n\n\tprivate _horizontalRevealRequest: HorizontalRevealRequest | null;\n\tprivate readonly _lastRenderedData: LastRenderedData;\n\n\t// Sticky Scroll\n\tprivate _stickyScrollEnabled: boolean;\n\tprivate _maxNumberStickyLines: number;\n\n\tconstructor(context: ViewContext, viewGpuContext: ViewGpuContext | undefined, linesContent: FastDomNode<HTMLElement>) {\n\t\tsuper(context);\n\n\t\tconst conf = this._context.configuration;\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\t\tthis._viewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\n\t\tthis._linesContent = linesContent;\n\t\tthis._textRangeRestingSpot = document.createElement('div');\n\t\tthis._visibleLines = new VisibleLinesCollection(this._context, {\n\t\t\tcreateLine: () => new ViewLine(viewGpuContext, this._viewLineOptions),\n\t\t});\n\t\tthis.domNode = this._visibleLines.domNode;\n\n\t\tPartFingerprints.write(this.domNode, PartFingerprint.ViewLines);\n\t\tthis.domNode.setClassName(`view-lines ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\t// --- width & height\n\t\tthis._maxLineWidth = 0;\n\t\tthis._asyncUpdateLineWidths = new RunOnceScheduler(() => {\n\t\t\tthis._updateLineWidthsSlow();\n\t\t}, 200);\n\t\tthis._asyncCheckMonospaceFontAssumptions = new RunOnceScheduler(() => {\n\t\t\tthis._checkMonospaceFontAssumptions();\n\t\t}, 2000);\n\n\t\tthis._lastRenderedData = new LastRenderedData();\n\n\t\tthis._horizontalRevealRequest = null;\n\n\t\t// sticky scroll widget\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._asyncUpdateLineWidths.dispose();\n\t\tthis._asyncCheckMonospaceFontAssumptions.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic getDomNode(): FastDomNode<HTMLElement> {\n\t\treturn this.domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tthis._visibleLines.onConfigurationChanged(e);\n\t\tif (e.hasChanged(EditorOption.wrappingInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\n\t\t// sticky scroll\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\tthis._onOptionsMaybeChanged();\n\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\treturn true;\n\t}\n\tprivate _onOptionsMaybeChanged(): boolean {\n\t\tconst conf = this._context.configuration;\n\n\t\tconst newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\t\tif (!this._viewLineOptions.equals(newViewLineOptions)) {\n\t\t\tthis._viewLineOptions = newViewLineOptions;\n\n\t\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tline.onOptionsChanged(this._viewLineOptions);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tlet r = false;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tr = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;\n\t\t}\n\t\treturn r;\n\t}\n\tpublic override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tthis._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();\n\t\t}\n\t\treturn true;\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tconst shouldRender = this._visibleLines.onFlushed(e, this._viewLineOptions.useGpu);\n\t\tthis._maxLineWidth = 0;\n\t\treturn shouldRender;\n\t}\n\tpublic override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._visibleLines.onLinesChanged(e);\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn this._visibleLines.onLinesDeleted(e);\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn this._visibleLines.onLinesInserted(e);\n\t}\n\tpublic override onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean {\n\t\t// Using the future viewport here in order to handle multiple\n\t\t// incoming reveal range requests that might all desire to be animated\n\t\tconst desiredScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(), e.source, e.minimalReveal, e.range, e.selections, e.verticalType);\n\n\t\tif (desiredScrollTop === -1) {\n\t\t\t// marker to abort the reveal range request\n\t\t\treturn false;\n\t\t}\n\n\t\t// validate the new desired scroll top\n\t\tlet newScrollPosition = this._context.viewLayout.validateScrollPosition({ scrollTop: desiredScrollTop });\n\n\t\tif (e.revealHorizontal) {\n\t\t\tif (e.range && e.range.startLineNumber !== e.range.endLineNumber) {\n\t\t\t\t// Two or more lines? => scroll to base (That's how you see most of the two lines)\n\t\t\t\tnewScrollPosition = {\n\t\t\t\t\tscrollTop: newScrollPosition.scrollTop,\n\t\t\t\t\tscrollLeft: 0\n\t\t\t\t};\n\t\t\t} else if (e.range) {\n\t\t\t\t// We don't necessarily know the horizontal offset of this range since the line might not be in the view...\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealRangeRequest(e.minimalReveal, e.range.startLineNumber, e.range.startColumn, e.range.endColumn, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t} else if (e.selections && e.selections.length > 0) {\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealSelectionsRequest(e.minimalReveal, e.selections, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\n\t\tconst scrollTopDelta = Math.abs(this._context.viewLayout.getCurrentScrollTop() - newScrollPosition.scrollTop);\n\t\tconst scrollType = (scrollTopDelta <= this._lineHeight ? ScrollType.Immediate : e.scrollType);\n\t\tthis._context.viewModel.viewLayout.setScrollPosition(newScrollPosition, scrollType);\n\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tif (this._horizontalRevealRequest && e.scrollLeftChanged) {\n\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls horizontally.\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\t\tif (this._horizontalRevealRequest && e.scrollTopChanged) {\n\t\t\tconst min = Math.min(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tconst max = Math.max(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tif (e.scrollTop < min || e.scrollTop > max) {\n\t\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls vertically.\n\t\t\t\tthis._horizontalRevealRequest = null;\n\t\t\t}\n\t\t}\n\t\tthis.domNode.setWidth(e.scrollWidth);\n\t\treturn this._visibleLines.onScrollChanged(e) || e.scrollTopChanged || e.scrollLeftChanged;\n\t}\n\n\tpublic override onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._visibleLines.onTokensChanged(e);\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\treturn this._visibleLines.onZonesChanged(e);\n\t}\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._onOptionsMaybeChanged();\n\t}\n\n\t// ---- end view event handlers\n\n\t// ----------- HELPERS FOR OTHERS\n\n\tpublic getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position | null {\n\t\tconst viewLineDomNode = this._getViewLineDomNode(spanNode);\n\t\tif (viewLineDomNode === null) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\t\tconst lineNumber = this._getLineNumberFor(viewLineDomNode);\n\n\t\tif (lineNumber === -1) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < 1 || lineNumber > this._context.viewModel.getLineCount()) {\n\t\t\t// lineNumber is outside range\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this._context.viewModel.getLineMaxColumn(lineNumber) === 1) {\n\t\t\t// Line is empty\n\t\t\treturn new Position(lineNumber, 1);\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn null;\n\t\t}\n\n\t\tlet column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(spanNode, offset);\n\t\tconst minColumn = this._context.viewModel.getLineMinColumn(lineNumber);\n\t\tif (column < minColumn) {\n\t\t\tcolumn = minColumn;\n\t\t}\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tprivate _getViewLineDomNode(node: HTMLElement | null): HTMLElement | null {\n\t\twhile (node && node.nodeType === 1) {\n\t\t\tif (node.className === ViewLine.CLASS_NAME) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * @returns the line number of this view line dom node.\n\t */\n\tprivate _getLineNumberFor(domNode: HTMLElement): number {\n\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (domNode === line.getDomNode()) {\n\t\t\t\treturn lineNumber;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tpublic getLineWidth(lineNumber: number): number {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst context = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getWidth(context);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(context);\n\n\t\treturn result;\n\t}\n\n\tpublic linesVisibleRangesForRange(_range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tconst originalEndLineNumber = _range.endLineNumber;\n\t\tconst range = Range.intersectRanges(_range, this._lastRenderedData.getCurrentVisibleRange());\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst visibleRanges: LineVisibleRanges[] = [];\n\t\tlet visibleRangesLen = 0;\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\n\t\tlet nextLineModelLineNumber: number = 0;\n\t\tif (includeNewLines) {\n\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n\n\t\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\n\t\t\tconst continuesInNextLine = lineNumber !== originalEndLineNumber;\n\t\t\tconst endColumn = continuesInNextLine ? this._context.viewModel.getLineMaxColumn(lineNumber) : range.endColumn;\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tconst visibleRangesForLine = visibleLine.getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\n\t\t\tif (!visibleRangesForLine) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (includeNewLines && lineNumber < originalEndLineNumber) {\n\t\t\t\tconst currentLineModelLineNumber = nextLineModelLineNumber;\n\t\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;\n\n\t\t\t\tif (currentLineModelLineNumber !== nextLineModelLineNumber) {\n\t\t\t\t\tconst floatHorizontalRange = visibleRangesForLine.ranges[visibleRangesForLine.ranges.length - 1];\n\t\t\t\t\tfloatHorizontalRange.width += this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\tif (this._context.viewModel.getTextDirection(currentLineModelLineNumber) === TextDirection.RTL) {\n\t\t\t\t\t\tfloatHorizontalRange.left -= this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisibleRanges[visibleRangesLen++] = new LineVisibleRanges(visibleRangesForLine.outsideRenderedLine, lineNumber, HorizontalRange.from(visibleRangesForLine.ranges), continuesInNextLine);\n\t\t}\n\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\tif (visibleRangesLen === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visibleRanges;\n\t}\n\n\tprivate _visibleRangesForLineRange(lineNumber: number, startColumn: number, endColumn: number): VisibleRanges | null {\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\treturn result;\n\t}\n\n\tprivate _lineIsRenderedRTL(lineNumber: number): boolean {\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn false;\n\t\t}\n\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\treturn visibleLine.isRenderedRTL();\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\tconst visibleRanges = this._visibleRangesForLineRange(position.lineNumber, position.column, position.column);\n\t\tif (!visibleRanges) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new HorizontalPosition(visibleRanges.outsideRenderedLine, visibleRanges.ranges[0].left);\n\t}\n\n\t/**\n\t * Updates the max line width if it is fast to compute.\n\t * Returns true if all lines were taken into account.\n\t * Returns false if some lines need to be reevaluated (in a slow fashion).\n\t */\n\tprivate _updateLineWidthsFast(): boolean {\n\t\treturn this._updateLineWidths(true);\n\t}\n\n\tprivate _updateLineWidthsSlow(): void {\n\t\tthis._updateLineWidths(false);\n\t}\n\n\t/**\n\t * Update the line widths using DOM layout information after someone else\n\t * has caused a synchronous layout.\n\t */\n\tprivate _updateLineWidthsSlowIfDomDidLayout(domReadingContext: DomReadingContext): void {\n\t\tif (!domReadingContext.didDomLayout) {\n\t\t\t// only proceed if we just did a layout\n\t\t\treturn;\n\t\t}\n\t\tif (!this._asyncUpdateLineWidths.isScheduled()) {\n\t\t\t// reading widths is not scheduled => widths are up-to-date\n\t\t\treturn;\n\t\t}\n\t\tthis._asyncUpdateLineWidths.cancel();\n\t\tthis._updateLineWidthsSlow();\n\t}\n\n\tprivate _updateLineWidths(fast: boolean): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\n\t\tlet localMaxLineWidth = 1;\n\t\tlet allWidthsComputed = true;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\n\t\t\tif (fast && !visibleLine.getWidthIsFast()) {\n\t\t\t\t// Cannot compute width in a fast way for this line\n\t\t\t\tallWidthsComputed = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlocalMaxLineWidth = Math.max(localMaxLineWidth, visibleLine.getWidth(null));\n\t\t}\n\n\t\tif (allWidthsComputed && rendStartLineNumber === 1 && rendEndLineNumber === this._context.viewModel.getLineCount()) {\n\t\t\t// we know the max line width for all the lines\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tthis._ensureMaxLineWidth(localMaxLineWidth);\n\n\t\treturn allWidthsComputed;\n\t}\n\n\tprivate _checkMonospaceFontAssumptions(): void {\n\t\t// Problems with monospace assumptions are more apparent for longer lines,\n\t\t// as small rounding errors start to sum up, so we will select the longest\n\t\t// line for a closer inspection\n\t\tlet longestLineNumber = -1;\n\t\tlet longestWidth = -1;\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\tconst lineWidth = visibleLine.getWidth(null);\n\t\t\t\tif (lineWidth > longestWidth) {\n\t\t\t\t\tlongestWidth = lineWidth;\n\t\t\t\t\tlongestLineNumber = lineNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (longestLineNumber === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._visibleLines.getVisibleLine(longestLineNumber).monospaceAssumptionsAreValid()) {\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tvisibleLine.onMonospaceAssumptionsInvalidated();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic prepareRender(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic render(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic renderText(viewportData: ViewportData): void {\n\t\t// (1) render lines - ensures lines are in the DOM\n\t\tthis._visibleLines.renderLines(viewportData);\n\t\tthis._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);\n\t\tthis.domNode.setWidth(this._context.viewLayout.getScrollWidth());\n\t\tthis.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(), 1000000));\n\n\t\t// (2) compute horizontal scroll position:\n\t\t// - this must happen after the lines are in the DOM since it might need a line that rendered just now\n\t\t// - it might change `scrollWidth` and `scrollLeft`\n\t\tif (this._horizontalRevealRequest) {\n\n\t\t\tconst horizontalRevealRequest = this._horizontalRevealRequest;\n\n\t\t\t// Check that we have the line that contains the horizontal range in the viewport\n\t\t\tif (viewportData.startLineNumber <= horizontalRevealRequest.minLineNumber && horizontalRevealRequest.maxLineNumber <= viewportData.endLineNumber) {\n\n\t\t\t\tthis._horizontalRevealRequest = null;\n\n\t\t\t\t// allow `visibleRangesForRange2` to work\n\t\t\t\tthis.onDidRender();\n\n\t\t\t\t// compute new scroll position\n\t\t\t\tconst newScrollLeft = this._computeScrollLeftToReveal(horizontalRevealRequest);\n\n\t\t\t\tif (newScrollLeft) {\n\t\t\t\t\tif (!this._isViewportWrapping && !newScrollLeft.hasRTL) {\n\t\t\t\t\t\t// ensure `scrollWidth` is large enough\n\t\t\t\t\t\tthis._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);\n\t\t\t\t\t}\n\t\t\t\t\t// set `scrollLeft`\n\t\t\t\t\tthis._context.viewModel.viewLayout.setScrollPosition({\n\t\t\t\t\t\tscrollLeft: newScrollLeft.scrollLeft\n\t\t\t\t\t}, horizontalRevealRequest.scrollType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)\n\t\tif (!this._updateLineWidthsFast()) {\n\t\t\t// Computing the width of some lines would be slow => delay it\n\t\t\tthis._asyncUpdateLineWidths.schedule();\n\t\t} else {\n\t\t\tthis._asyncUpdateLineWidths.cancel();\n\t\t}\n\n\t\tif (platform.isLinux && !this._asyncCheckMonospaceFontAssumptions.isScheduled()) {\n\t\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\t\tthis._asyncCheckMonospaceFontAssumptions.schedule();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (3) handle scrolling\n\t\tthis._linesContent.setLayerHinting(this._canUseLayerHinting);\n\t\tthis._linesContent.setContain('strict');\n\t\tconst adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta;\n\t\tthis._linesContent.setTop(-adjustedScrollTop);\n\t\tthis._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft());\n\t}\n\n\t// --- width\n\n\tprivate _ensureMaxLineWidth(lineWidth: number): void {\n\t\tconst iLineWidth = Math.ceil(lineWidth);\n\t\tif (this._maxLineWidth < iLineWidth) {\n\t\t\tthis._maxLineWidth = iLineWidth;\n\t\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\t}\n\t}\n\n\tprivate _computeScrollTopToRevealRange(viewport: Viewport, source: string | null | undefined, minimalReveal: boolean, range: Range | null, selections: Selection[] | null, verticalType: viewEvents.VerticalRevealType): number {\n\t\tconst viewportStartY = viewport.top;\n\t\tconst viewportHeight = viewport.height;\n\t\tconst viewportEndY = viewportStartY + viewportHeight;\n\t\tlet boxIsSingleRange: boolean;\n\t\tlet boxStartY: number;\n\t\tlet boxEndY: number;\n\n\t\tif (selections && selections.length > 0) {\n\t\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\t\tconst selection = selections[i];\n\t\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t\t}\n\t\t\tboxIsSingleRange = false;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(minLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(maxLineNumber) + this._lineHeight;\n\t\t} else if (range) {\n\t\t\tboxIsSingleRange = true;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst shouldIgnoreScrollOff = (source === 'mouse' || minimalReveal) && this._cursorSurroundingLinesStyle === 'default';\n\n\t\tlet paddingTop: number = 0;\n\t\tlet paddingBottom: number = 0;\n\n\t\tif (!shouldIgnoreScrollOff) {\n\t\t\tconst maxLinesInViewport = (viewportHeight / this._lineHeight);\n\t\t\tconst surroundingLines = Math.max(this._cursorSurroundingLines, this._stickyScrollEnabled ? this._maxNumberStickyLines : 0);\n\t\t\tconst context = Math.min(maxLinesInViewport / 2, surroundingLines);\n\t\t\tpaddingTop = context * this._lineHeight;\n\t\t\tpaddingBottom = Math.max(0, (context - 1)) * this._lineHeight;\n\t\t} else {\n\t\t\tif (!minimalReveal) {\n\t\t\t\t// Reveal one more line above (this case is hit when dragging)\n\t\t\t\tpaddingTop = this._lineHeight;\n\t\t\t}\n\t\t}\n\t\tif (!minimalReveal) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.Simple || verticalType === viewEvents.VerticalRevealType.Bottom) {\n\t\t\t\t// Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom\n\t\t\t\tpaddingBottom += this._lineHeight;\n\t\t\t}\n\t\t}\n\n\t\tboxStartY -= paddingTop;\n\t\tboxEndY += paddingBottom;\n\t\tlet newScrollTop: number;\n\n\t\tif (boxEndY - boxStartY > viewportHeight) {\n\t\t\t// the box is larger than the viewport ... scroll to its top\n\t\t\tif (!boxIsSingleRange) {\n\t\t\t\t// do not reveal multiple cursors if there are more than fit the viewport\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tnewScrollTop = boxStartY;\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.NearTop || verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// We want a gap that is 20% of the viewport, but with a minimum of 5 lines\n\t\t\t\tconst desiredGapAbove = Math.max(5 * this._lineHeight, viewportHeight * 0.2);\n\t\t\t\t// Try to scroll just above the box with the desired gap\n\t\t\t\tconst desiredScrollTop = boxStartY - desiredGapAbove;\n\t\t\t\t// But ensure that the box is not pushed out of viewport\n\t\t\t\tconst minScrollTop = boxEndY - viewportHeight;\n\t\t\t\tnewScrollTop = Math.max(minScrollTop, desiredScrollTop);\n\t\t\t}\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.Center || verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// Box is outside the viewport... center it\n\t\t\t\tconst boxMiddleY = (boxStartY + boxEndY) / 2;\n\t\t\t\tnewScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);\n\t\t\t}\n\t\t} else {\n\t\t\tnewScrollTop = this._computeMinimumScrolling(viewportStartY, viewportEndY, boxStartY, boxEndY, verticalType === viewEvents.VerticalRevealType.Top, verticalType === viewEvents.VerticalRevealType.Bottom);\n\t\t}\n\n\t\treturn newScrollTop;\n\t}\n\n\tprivate _computeScrollLeftToReveal(horizontalRevealRequest: HorizontalRevealRequest): { scrollLeft: number; maxHorizontalOffset: number; hasRTL: boolean } | null {\n\n\t\tconst viewport = this._context.viewLayout.getCurrentViewport();\n\t\tconst layoutInfo = this._context.configuration.options.get(EditorOption.layoutInfo);\n\t\tconst viewportStartX = viewport.left;\n\t\tconst viewportEndX = viewportStartX + viewport.width - layoutInfo.verticalScrollbarWidth;\n\n\t\tlet boxStartX = Constants.MAX_SAFE_SMALL_INTEGER;\n\t\tlet boxEndX = 0;\n\t\tlet hasRTL = false;\n\t\tif (horizontalRevealRequest.type === 'range') {\n\t\t\thasRTL = this._lineIsRenderedRTL(horizontalRevealRequest.lineNumber);\n\t\t\tconst visibleRanges = this._visibleRangesForLineRange(horizontalRevealRequest.lineNumber, horizontalRevealRequest.startColumn, horizontalRevealRequest.endColumn);\n\t\t\tif (!visibleRanges) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const selection of horizontalRevealRequest.selections) {\n\t\t\t\tif (selection.startLineNumber !== selection.endLineNumber) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst visibleRanges = this._visibleRangesForLineRange(selection.startLineNumber, selection.startColumn, selection.endColumn);\n\t\t\t\thasRTL ||= this._lineIsRenderedRTL(selection.startLineNumber);\n\t\t\t\tif (!visibleRanges) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!horizontalRevealRequest.minimalReveal) {\n\t\t\tboxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\n\t\t\tboxEndX += this._revealHorizontalRightPadding;\n\t\t}\n\n\t\tif (horizontalRevealRequest.type === 'selections' && boxEndX - boxStartX > viewport.width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);\n\t\treturn {\n\t\t\tscrollLeft: newScrollLeft,\n\t\t\tmaxHorizontalOffset: boxEndX,\n\t\t\thasRTL\n\t\t};\n\t}\n\n\tprivate _computeMinimumScrolling(viewportStart: number, viewportEnd: number, boxStart: number, boxEnd: number, revealAtStart?: boolean, revealAtEnd?: boolean): number {\n\t\tviewportStart = viewportStart | 0;\n\t\tviewportEnd = viewportEnd | 0;\n\t\tboxStart = boxStart | 0;\n\t\tboxEnd = boxEnd | 0;\n\t\trevealAtStart = !!revealAtStart;\n\t\trevealAtEnd = !!revealAtEnd;\n\n\t\tconst viewportLength = viewportEnd - viewportStart;\n\t\tconst boxLength = boxEnd - boxStart;\n\n\t\tif (boxLength < viewportLength) {\n\t\t\t// The box would fit in the viewport\n\n\t\t\tif (revealAtStart) {\n\t\t\t\treturn boxStart;\n\t\t\t}\n\n\t\t\tif (revealAtEnd) {\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\n\t\t\tif (boxStart < viewportStart) {\n\t\t\t\t// The box is above the viewport\n\t\t\t\treturn boxStart;\n\t\t\t} else if (boxEnd > viewportEnd) {\n\t\t\t\t// The box is below the viewport\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\t\t} else {\n\t\t\t// The box would not fit in the viewport\n\t\t\t// Reveal the beginning of the box\n\t\t\treturn boxStart;\n\t\t}\n\n\t\treturn viewportStart;\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 { FastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport { Constants } from '../../../../base/common/uint.js';\nimport './viewLines.css';\nimport { applyFontInfo } from '../../config/domFontInfo.js';\nimport { HorizontalPosition, HorizontalRange, IViewLines, LineVisibleRanges, VisibleRanges } from '../../view/renderingContext.js';\nimport { VisibleLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { DomReadingContext } from './domReadingContext.js';\nimport { ViewLine } from './viewLine.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { ScrollType } from '../../../common/editorCommon.js';\nimport * as viewEvents from '../../../common/viewEvents.js';\nimport { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js';\nimport { Viewport } from '../../../common/viewModel.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ViewLineOptions } from './viewLineOptions.js';\nimport { ViewGpuContext } from '../../gpu/viewGpuContext.js';\nimport { TextDirection } from '../../../common/model.js';\n\nclass LastRenderedData {\n\n\tprivate _currentVisibleRange: Range;\n\n\tconstructor() {\n\t\tthis._currentVisibleRange = new Range(1, 1, 1, 1);\n\t}\n\n\tpublic getCurrentVisibleRange(): Range {\n\t\treturn this._currentVisibleRange;\n\t}\n\n\tpublic setCurrentVisibleRange(currentVisibleRange: Range): void {\n\t\tthis._currentVisibleRange = currentVisibleRange;\n\t}\n}\n\nclass HorizontalRevealRangeRequest {\n\tpublic readonly type = 'range';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly startColumn: number,\n\t\tpublic readonly endColumn: number,\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tthis.minLineNumber = lineNumber;\n\t\tthis.maxLineNumber = lineNumber;\n\t}\n}\n\nclass HorizontalRevealSelectionsRequest {\n\tpublic readonly type = 'selections';\n\tpublic readonly minLineNumber: number;\n\tpublic readonly maxLineNumber: number;\n\n\tconstructor(\n\t\tpublic readonly minimalReveal: boolean,\n\t\tpublic readonly selections: Selection[],\n\t\tpublic readonly startScrollTop: number,\n\t\tpublic readonly stopScrollTop: number,\n\t\tpublic readonly scrollType: ScrollType\n\t) {\n\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t}\n\t\tthis.minLineNumber = minLineNumber;\n\t\tthis.maxLineNumber = maxLineNumber;\n\t}\n}\n\ntype HorizontalRevealRequest = HorizontalRevealRangeRequest | HorizontalRevealSelectionsRequest;\n\n/**\n * The view lines part is responsible for rendering the actual content of a\n * file.\n */\nexport class ViewLines extends ViewPart implements IViewLines {\n\t/**\n\t * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\n\t */\n\tprivate static readonly HORIZONTAL_EXTRA_PX = 30;\n\n\tprivate readonly _linesContent: FastDomNode<HTMLElement>;\n\tprivate readonly _textRangeRestingSpot: HTMLElement;\n\tprivate readonly _visibleLines: VisibleLinesCollection<ViewLine>;\n\tprivate readonly domNode: FastDomNode<HTMLElement>;\n\n\t// --- config\n\tprivate _lineHeight: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\tprivate _isViewportWrapping: boolean;\n\tprivate _revealHorizontalRightPadding: number;\n\tprivate _cursorSurroundingLines: number;\n\tprivate _cursorSurroundingLinesStyle: 'default' | 'all';\n\tprivate _canUseLayerHinting: boolean;\n\tprivate _viewLineOptions: ViewLineOptions;\n\n\t// --- width\n\tprivate _maxLineWidth: number;\n\tprivate readonly _asyncUpdateLineWidths: RunOnceScheduler;\n\tprivate readonly _asyncCheckMonospaceFontAssumptions: RunOnceScheduler;\n\n\tprivate _horizontalRevealRequest: HorizontalRevealRequest | null;\n\tprivate readonly _lastRenderedData: LastRenderedData;\n\n\t// Sticky Scroll\n\tprivate _stickyScrollEnabled: boolean;\n\tprivate _maxNumberStickyLines: number;\n\n\tconstructor(context: ViewContext, viewGpuContext: ViewGpuContext | undefined, linesContent: FastDomNode<HTMLElement>) {\n\t\tsuper(context);\n\n\t\tconst conf = this._context.configuration;\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\t\tthis._viewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\n\t\tthis._linesContent = linesContent;\n\t\tthis._textRangeRestingSpot = document.createElement('div');\n\t\tthis._visibleLines = new VisibleLinesCollection(this._context, {\n\t\t\tcreateLine: () => new ViewLine(viewGpuContext, this._viewLineOptions),\n\t\t});\n\t\tthis.domNode = this._visibleLines.domNode;\n\n\t\tPartFingerprints.write(this.domNode, PartFingerprint.ViewLines);\n\t\tthis.domNode.setClassName(`view-lines ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\t// --- width & height\n\t\tthis._maxLineWidth = 0;\n\t\tthis._asyncUpdateLineWidths = new RunOnceScheduler(() => {\n\t\t\tthis._updateLineWidthsSlow();\n\t\t}, 200);\n\t\tthis._asyncCheckMonospaceFontAssumptions = new RunOnceScheduler(() => {\n\t\t\tthis._checkMonospaceFontAssumptions();\n\t\t}, 2000);\n\n\t\tthis._lastRenderedData = new LastRenderedData();\n\n\t\tthis._horizontalRevealRequest = null;\n\n\t\t// sticky scroll widget\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._asyncUpdateLineWidths.dispose();\n\t\tthis._asyncCheckMonospaceFontAssumptions.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic getDomNode(): FastDomNode<HTMLElement> {\n\t\treturn this.domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tthis._visibleLines.onConfigurationChanged(e);\n\t\tif (e.hasChanged(EditorOption.wrappingInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tconst options = this._context.configuration.options;\n\t\tconst fontInfo = options.get(EditorOption.fontInfo);\n\t\tconst wrappingInfo = options.get(EditorOption.wrappingInfo);\n\n\t\tthis._lineHeight = options.get(EditorOption.lineHeight);\n\t\tthis._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = options.get(EditorOption.revealHorizontalRightPadding);\n\t\tthis._cursorSurroundingLines = options.get(EditorOption.cursorSurroundingLines);\n\t\tthis._cursorSurroundingLinesStyle = options.get(EditorOption.cursorSurroundingLinesStyle);\n\t\tthis._canUseLayerHinting = !options.get(EditorOption.disableLayerHinting);\n\n\t\t// sticky scroll\n\t\tthis._stickyScrollEnabled = options.get(EditorOption.stickyScroll).enabled;\n\t\tthis._maxNumberStickyLines = options.get(EditorOption.stickyScroll).maxLineCount;\n\n\t\tapplyFontInfo(this.domNode, fontInfo);\n\n\t\tthis._onOptionsMaybeChanged();\n\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\treturn true;\n\t}\n\tprivate _onOptionsMaybeChanged(): boolean {\n\t\tconst conf = this._context.configuration;\n\n\t\tconst newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\t\tif (!this._viewLineOptions.equals(newViewLineOptions)) {\n\t\t\tthis._viewLineOptions = newViewLineOptions;\n\n\t\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tline.onOptionsChanged(this._viewLineOptions);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\tpublic override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tlet r = false;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tr = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;\n\t\t}\n\t\treturn r;\n\t}\n\tpublic override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tthis._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();\n\t\t}\n\t\treturn true;\n\t}\n\tpublic override onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tconst shouldRender = this._visibleLines.onFlushed(e, this._viewLineOptions.useGpu);\n\t\tthis._maxLineWidth = 0;\n\t\treturn shouldRender;\n\t}\n\tpublic override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._visibleLines.onLinesChanged(e);\n\t}\n\tpublic override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn this._visibleLines.onLinesDeleted(e);\n\t}\n\tpublic override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn this._visibleLines.onLinesInserted(e);\n\t}\n\tpublic override onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean {\n\t\t// Using the future viewport here in order to handle multiple\n\t\t// incoming reveal range requests that might all desire to be animated\n\t\tconst desiredScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(), e.source, e.minimalReveal, e.range, e.selections, e.verticalType);\n\n\t\tif (desiredScrollTop === -1) {\n\t\t\t// marker to abort the reveal range request\n\t\t\treturn false;\n\t\t}\n\n\t\t// validate the new desired scroll top\n\t\tlet newScrollPosition = this._context.viewLayout.validateScrollPosition({ scrollTop: desiredScrollTop });\n\n\t\tif (e.revealHorizontal) {\n\t\t\tif (e.range && e.range.startLineNumber !== e.range.endLineNumber) {\n\t\t\t\t// Two or more lines? => scroll to base (That's how you see most of the two lines)\n\t\t\t\tnewScrollPosition = {\n\t\t\t\t\tscrollTop: newScrollPosition.scrollTop,\n\t\t\t\t\tscrollLeft: 0\n\t\t\t\t};\n\t\t\t} else if (e.range) {\n\t\t\t\t// We don't necessarily know the horizontal offset of this range since the line might not be in the view...\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealRangeRequest(e.minimalReveal, e.range.startLineNumber, e.range.startColumn, e.range.endColumn, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t} else if (e.selections && e.selections.length > 0) {\n\t\t\t\tthis._horizontalRevealRequest = new HorizontalRevealSelectionsRequest(e.minimalReveal, e.selections, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\n\t\tconst scrollTopDelta = Math.abs(this._context.viewLayout.getCurrentScrollTop() - newScrollPosition.scrollTop);\n\t\tconst scrollType = (scrollTopDelta <= this._lineHeight ? ScrollType.Immediate : e.scrollType);\n\t\tthis._context.viewModel.viewLayout.setScrollPosition(newScrollPosition, scrollType);\n\n\t\treturn true;\n\t}\n\tpublic override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tif (this._horizontalRevealRequest && e.scrollLeftChanged) {\n\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls horizontally.\n\t\t\tthis._horizontalRevealRequest = null;\n\t\t}\n\t\tif (this._horizontalRevealRequest && e.scrollTopChanged) {\n\t\t\tconst min = Math.min(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tconst max = Math.max(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n\t\t\tif (e.scrollTop < min || e.scrollTop > max) {\n\t\t\t\t// cancel any outstanding horizontal reveal request if someone else scrolls vertically.\n\t\t\t\tthis._horizontalRevealRequest = null;\n\t\t\t}\n\t\t}\n\t\tthis.domNode.setWidth(e.scrollWidth);\n\t\treturn this._visibleLines.onScrollChanged(e) || e.scrollTopChanged || e.scrollLeftChanged;\n\t}\n\n\tpublic override onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._visibleLines.onTokensChanged(e);\n\t}\n\tpublic override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\treturn this._visibleLines.onZonesChanged(e);\n\t}\n\tpublic override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._onOptionsMaybeChanged();\n\t}\n\n\t// ---- end view event handlers\n\n\t// ----------- HELPERS FOR OTHERS\n\n\tpublic getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position | null {\n\t\tconst viewLineDomNode = this._getViewLineDomNode(spanNode);\n\t\tif (viewLineDomNode === null) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\t\tconst lineNumber = this._getLineNumberFor(viewLineDomNode);\n\n\t\tif (lineNumber === -1) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < 1 || lineNumber > this._context.viewModel.getLineCount()) {\n\t\t\t// lineNumber is outside range\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this._context.viewModel.getLineMaxColumn(lineNumber) === 1) {\n\t\t\t// Line is empty\n\t\t\treturn new Position(lineNumber, 1);\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn null;\n\t\t}\n\n\t\tlet column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(spanNode, offset);\n\t\tconst minColumn = this._context.viewModel.getLineMinColumn(lineNumber);\n\t\tif (column < minColumn) {\n\t\t\tcolumn = minColumn;\n\t\t}\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tprivate _getViewLineDomNode(node: HTMLElement | null): HTMLElement | null {\n\t\twhile (node && node.nodeType === 1) {\n\t\t\tif (node.className === ViewLine.CLASS_NAME) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * @returns the line number of this view line dom node.\n\t */\n\tprivate _getLineNumberFor(domNode: HTMLElement): number {\n\t\tconst startLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst endLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (domNode === line.getDomNode()) {\n\t\t\t\treturn lineNumber;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tpublic getLineWidth(lineNumber: number): number {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst context = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getWidth(context);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(context);\n\n\t\treturn result;\n\t}\n\n\tpublic linesVisibleRangesForRange(_range: Range, includeNewLines: boolean): LineVisibleRanges[] | null {\n\t\tconst originalEndLineNumber = _range.endLineNumber;\n\t\tconst range = Range.intersectRanges(_range, this._lastRenderedData.getCurrentVisibleRange());\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst visibleRanges: LineVisibleRanges[] = [];\n\t\tlet visibleRangesLen = 0;\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\n\t\tlet nextLineModelLineNumber: number = 0;\n\t\tif (includeNewLines) {\n\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\n\t\t}\n\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n\n\t\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\n\t\t\tconst continuesInNextLine = lineNumber !== originalEndLineNumber;\n\t\t\tconst endColumn = continuesInNextLine ? this._context.viewModel.getLineMaxColumn(lineNumber) : range.endColumn;\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tconst visibleRangesForLine = visibleLine.getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\n\t\t\tif (!visibleRangesForLine) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (includeNewLines && lineNumber < originalEndLineNumber) {\n\t\t\t\tconst currentLineModelLineNumber = nextLineModelLineNumber;\n\t\t\t\tnextLineModelLineNumber = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;\n\n\t\t\t\tif (currentLineModelLineNumber !== nextLineModelLineNumber) {\n\t\t\t\t\tconst floatHorizontalRange = visibleRangesForLine.ranges[visibleRangesForLine.ranges.length - 1];\n\t\t\t\t\tfloatHorizontalRange.width += this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\tif (this._context.viewModel.getTextDirection(currentLineModelLineNumber) === TextDirection.RTL) {\n\t\t\t\t\t\tfloatHorizontalRange.left -= this._typicalHalfwidthCharacterWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisibleRanges[visibleRangesLen++] = new LineVisibleRanges(visibleRangesForLine.outsideRenderedLine, lineNumber, HorizontalRange.from(visibleRangesForLine.ranges), continuesInNextLine);\n\t\t}\n\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\tif (visibleRangesLen === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visibleRanges;\n\t}\n\n\tprivate _visibleRangesForLineRange(lineNumber: number, startColumn: number, endColumn: number): VisibleRanges | null {\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\t\tconst result = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n\t\tthis._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n\n\t\treturn result;\n\t}\n\n\tprivate _lineIsRenderedRTL(lineNumber: number): boolean {\n\t\tif (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n\t\t\treturn false;\n\t\t}\n\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\treturn visibleLine.isRenderedRTL();\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalPosition | null {\n\t\tconst visibleRanges = this._visibleRangesForLineRange(position.lineNumber, position.column, position.column);\n\t\tif (!visibleRanges) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new HorizontalPosition(visibleRanges.outsideRenderedLine, visibleRanges.ranges[0].left);\n\t}\n\n\t/**\n\t * Updates the max line width if it is fast to compute.\n\t * Returns true if all lines were taken into account.\n\t * Returns false if some lines need to be reevaluated (in a slow fashion).\n\t */\n\tprivate _updateLineWidthsFast(): boolean {\n\t\treturn this._updateLineWidths(true);\n\t}\n\n\tprivate _updateLineWidthsSlow(): void {\n\t\tthis._updateLineWidths(false);\n\t}\n\n\t/**\n\t * Update the line widths using DOM layout information after someone else\n\t * has caused a synchronous layout.\n\t */\n\tprivate _updateLineWidthsSlowIfDomDidLayout(domReadingContext: DomReadingContext): void {\n\t\tif (!domReadingContext.didDomLayout) {\n\t\t\t// only proceed if we just did a layout\n\t\t\treturn;\n\t\t}\n\t\tif (!this._asyncUpdateLineWidths.isScheduled()) {\n\t\t\t// reading widths is not scheduled => widths are up-to-date\n\t\t\treturn;\n\t\t}\n\t\tthis._asyncUpdateLineWidths.cancel();\n\t\tthis._updateLineWidthsSlow();\n\t}\n\n\tprivate _updateLineWidths(fast: boolean): boolean {\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\n\t\tlet localMaxLineWidth = 1;\n\t\tlet allWidthsComputed = true;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\n\t\t\tif (fast && !visibleLine.getWidthIsFast()) {\n\t\t\t\t// Cannot compute width in a fast way for this line\n\t\t\t\tallWidthsComputed = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlocalMaxLineWidth = Math.max(localMaxLineWidth, visibleLine.getWidth(null));\n\t\t}\n\n\t\tif (allWidthsComputed && rendStartLineNumber === 1 && rendEndLineNumber === this._context.viewModel.getLineCount()) {\n\t\t\t// we know the max line width for all the lines\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tthis._ensureMaxLineWidth(localMaxLineWidth);\n\n\t\treturn allWidthsComputed;\n\t}\n\n\tprivate _checkMonospaceFontAssumptions(): void {\n\t\t// Problems with monospace assumptions are more apparent for longer lines,\n\t\t// as small rounding errors start to sum up, so we will select the longest\n\t\t// line for a closer inspection\n\t\tlet longestLineNumber = -1;\n\t\tlet longestWidth = -1;\n\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\tconst lineWidth = visibleLine.getWidth(null);\n\t\t\t\tif (lineWidth > longestWidth) {\n\t\t\t\t\tlongestWidth = lineWidth;\n\t\t\t\t\tlongestLineNumber = lineNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (longestLineNumber === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._visibleLines.getVisibleLine(longestLineNumber).monospaceAssumptionsAreValid()) {\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tvisibleLine.onMonospaceAssumptionsInvalidated();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic prepareRender(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic render(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic renderText(viewportData: ViewportData): void {\n\t\t// (1) render lines - ensures lines are in the DOM\n\t\tthis._visibleLines.renderLines(viewportData);\n\t\tthis._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);\n\t\tthis.domNode.setWidth(this._context.viewLayout.getScrollWidth());\n\t\tthis.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(), 1000000));\n\n\t\t// (2) compute horizontal scroll position:\n\t\t// - this must happen after the lines are in the DOM since it might need a line that rendered just now\n\t\t// - it might change `scrollWidth` and `scrollLeft`\n\t\tif (this._horizontalRevealRequest) {\n\n\t\t\tconst horizontalRevealRequest = this._horizontalRevealRequest;\n\n\t\t\t// Check that we have the line that contains the horizontal range in the viewport\n\t\t\tif (viewportData.startLineNumber <= horizontalRevealRequest.minLineNumber && horizontalRevealRequest.maxLineNumber <= viewportData.endLineNumber) {\n\n\t\t\t\tthis._horizontalRevealRequest = null;\n\n\t\t\t\t// allow `visibleRangesForRange2` to work\n\t\t\t\tthis.onDidRender();\n\n\t\t\t\t// compute new scroll position\n\t\t\t\tconst newScrollLeft = this._computeScrollLeftToReveal(horizontalRevealRequest);\n\n\t\t\t\tif (newScrollLeft) {\n\t\t\t\t\tif (!this._isViewportWrapping && !newScrollLeft.hasRTL) {\n\t\t\t\t\t\t// ensure `scrollWidth` is large enough\n\t\t\t\t\t\tthis._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);\n\t\t\t\t\t}\n\t\t\t\t\t// set `scrollLeft`\n\t\t\t\t\tthis._context.viewModel.viewLayout.setScrollPosition({\n\t\t\t\t\t\tscrollLeft: newScrollLeft.scrollLeft\n\t\t\t\t\t}, horizontalRevealRequest.scrollType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)\n\t\tif (!this._updateLineWidthsFast()) {\n\t\t\t// Computing the width of some lines would be slow => delay it\n\t\t\tthis._asyncUpdateLineWidths.schedule();\n\t\t} else {\n\t\t\tthis._asyncUpdateLineWidths.cancel();\n\t\t}\n\n\t\tif (platform.isLinux && !this._asyncCheckMonospaceFontAssumptions.isScheduled()) {\n\t\t\tconst rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tconst rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tconst visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tif (visibleLine.needsMonospaceFontCheck()) {\n\t\t\t\t\tthis._asyncCheckMonospaceFontAssumptions.schedule();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (3) handle scrolling\n\t\tthis._linesContent.setLayerHinting(this._canUseLayerHinting);\n\t\tthis._linesContent.setContain('strict');\n\t\tconst adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta;\n\t\tthis._linesContent.setTop(-adjustedScrollTop);\n\t\tthis._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft());\n\t}\n\n\t// --- width\n\n\tprivate _ensureMaxLineWidth(lineWidth: number): void {\n\t\tconst iLineWidth = Math.ceil(lineWidth);\n\t\tif (this._maxLineWidth < iLineWidth) {\n\t\t\tthis._maxLineWidth = iLineWidth;\n\t\t\tthis._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n\t\t}\n\t}\n\n\tprivate _computeScrollTopToRevealRange(viewport: Viewport, source: string | null | undefined, minimalReveal: boolean, range: Range | null, selections: Selection[] | null, verticalType: viewEvents.VerticalRevealType): number {\n\t\tconst viewportStartY = viewport.top;\n\t\tconst viewportHeight = viewport.height;\n\t\tconst viewportEndY = viewportStartY + viewportHeight;\n\t\tlet boxIsSingleRange: boolean;\n\t\tlet boxStartY: number;\n\t\tlet boxEndY: number;\n\n\t\tif (selections && selections.length > 0) {\n\t\t\tlet minLineNumber = selections[0].startLineNumber;\n\t\t\tlet maxLineNumber = selections[0].endLineNumber;\n\t\t\tfor (let i = 1, len = selections.length; i < len; i++) {\n\t\t\t\tconst selection = selections[i];\n\t\t\t\tminLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n\t\t\t\tmaxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n\t\t\t}\n\t\t\tboxIsSingleRange = false;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(minLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(maxLineNumber) + this._lineHeight;\n\t\t} else if (range) {\n\t\t\tboxIsSingleRange = true;\n\t\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);\n\t\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst shouldIgnoreScrollOff = (source === 'mouse' || minimalReveal) && this._cursorSurroundingLinesStyle === 'default';\n\n\t\tlet paddingTop: number = 0;\n\t\tlet paddingBottom: number = 0;\n\n\t\tif (!shouldIgnoreScrollOff) {\n\t\t\tconst maxLinesInViewport = (viewportHeight / this._lineHeight);\n\t\t\tconst surroundingLines = Math.max(this._cursorSurroundingLines, this._stickyScrollEnabled ? this._maxNumberStickyLines : 0);\n\t\t\tconst context = Math.min(maxLinesInViewport / 2, surroundingLines);\n\t\t\tpaddingTop = context * this._lineHeight;\n\t\t\tpaddingBottom = Math.max(0, (context - 1)) * this._lineHeight;\n\t\t} else {\n\t\t\tif (!minimalReveal) {\n\t\t\t\t// Reveal one more line above (this case is hit when dragging)\n\t\t\t\tpaddingTop = this._lineHeight;\n\t\t\t}\n\t\t}\n\t\tif (!minimalReveal) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.Simple || verticalType === viewEvents.VerticalRevealType.Bottom) {\n\t\t\t\t// Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom\n\t\t\t\tpaddingBottom += this._lineHeight;\n\t\t\t}\n\t\t}\n\n\t\tboxStartY -= paddingTop;\n\t\tboxEndY += paddingBottom;\n\t\tlet newScrollTop: number;\n\n\t\tif (boxEndY - boxStartY > viewportHeight) {\n\t\t\t// the box is larger than the viewport ... scroll to its top\n\t\t\tif (!boxIsSingleRange) {\n\t\t\t\t// do not reveal multiple cursors if there are more than fit the viewport\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tnewScrollTop = boxStartY;\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.NearTop || verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.NearTopIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// We want a gap that is 20% of the viewport, but with a minimum of 5 lines\n\t\t\t\tconst desiredGapAbove = Math.max(5 * this._lineHeight, viewportHeight * 0.2);\n\t\t\t\t// Try to scroll just above the box with the desired gap\n\t\t\t\tconst desiredScrollTop = boxStartY - desiredGapAbove;\n\t\t\t\t// But ensure that the box is not pushed out of viewport\n\t\t\t\tconst minScrollTop = boxEndY - viewportHeight;\n\t\t\t\tnewScrollTop = Math.max(minScrollTop, desiredScrollTop);\n\t\t\t}\n\t\t} else if (verticalType === viewEvents.VerticalRevealType.Center || verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// Box is outside the viewport... center it\n\t\t\t\tconst boxMiddleY = (boxStartY + boxEndY) / 2;\n\t\t\t\tnewScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);\n\t\t\t}\n\t\t} else {\n\t\t\tnewScrollTop = this._computeMinimumScrolling(viewportStartY, viewportEndY, boxStartY, boxEndY, verticalType === viewEvents.VerticalRevealType.Top, verticalType === viewEvents.VerticalRevealType.Bottom);\n\t\t}\n\n\t\treturn newScrollTop;\n\t}\n\n\tprivate _computeScrollLeftToReveal(horizontalRevealRequest: HorizontalRevealRequest): { scrollLeft: number; maxHorizontalOffset: number; hasRTL: boolean } | null {\n\n\t\tconst viewport = this._context.viewLayout.getCurrentViewport();\n\t\tconst layoutInfo = this._context.configuration.options.get(EditorOption.layoutInfo);\n\t\tconst viewportStartX = viewport.left;\n\t\tconst viewportEndX = viewportStartX + viewport.width - layoutInfo.verticalScrollbarWidth;\n\n\t\tlet boxStartX = Constants.MAX_SAFE_SMALL_INTEGER;\n\t\tlet boxEndX = 0;\n\t\tlet hasRTL = false;\n\t\tif (horizontalRevealRequest.type === 'range') {\n\t\t\thasRTL = this._lineIsRenderedRTL(horizontalRevealRequest.lineNumber);\n\t\t\tconst visibleRanges = this._visibleRangesForLineRange(horizontalRevealRequest.lineNumber, horizontalRevealRequest.startColumn, horizontalRevealRequest.endColumn);\n\t\t\tif (!visibleRanges) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const selection of horizontalRevealRequest.selections) {\n\t\t\t\tif (selection.startLineNumber !== selection.endLineNumber) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst visibleRanges = this._visibleRangesForLineRange(selection.startLineNumber, selection.startColumn, selection.endColumn);\n\t\t\t\thasRTL ||= this._lineIsRenderedRTL(selection.startLineNumber);\n\t\t\t\tif (!visibleRanges) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tfor (const visibleRange of visibleRanges.ranges) {\n\t\t\t\t\tboxStartX = Math.min(boxStartX, Math.round(visibleRange.left));\n\t\t\t\t\tboxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!horizontalRevealRequest.minimalReveal) {\n\t\t\tboxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\n\t\t\tboxEndX += this._revealHorizontalRightPadding;\n\t\t}\n\n\t\tif (horizontalRevealRequest.type === 'selections' && boxEndX - boxStartX > viewport.width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);\n\t\treturn {\n\t\t\tscrollLeft: newScrollLeft,\n\t\t\tmaxHorizontalOffset: boxEndX,\n\t\t\thasRTL\n\t\t};\n\t}\n\n\tprivate _computeMinimumScrolling(viewportStart: number, viewportEnd: number, boxStart: number, boxEnd: number, revealAtStart?: boolean, revealAtEnd?: boolean): number {\n\t\tviewportStart = viewportStart | 0;\n\t\tviewportEnd = viewportEnd | 0;\n\t\tboxStart = boxStart | 0;\n\t\tboxEnd = boxEnd | 0;\n\t\trevealAtStart = !!revealAtStart;\n\t\trevealAtEnd = !!revealAtEnd;\n\n\t\tconst viewportLength = viewportEnd - viewportStart;\n\t\tconst boxLength = boxEnd - boxStart;\n\n\t\tif (boxLength < viewportLength) {\n\t\t\t// The box would fit in the viewport\n\n\t\t\tif (revealAtStart) {\n\t\t\t\treturn boxStart;\n\t\t\t}\n\n\t\t\tif (revealAtEnd) {\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\n\t\t\tif (boxStart < viewportStart) {\n\t\t\t\t// The box is above the viewport\n\t\t\t\treturn boxStart;\n\t\t\t} else if (boxEnd > viewportEnd) {\n\t\t\t\t// The box is below the viewport\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\t\t} else {\n\t\t\t// The box would not fit in the viewport\n\t\t\t// Reveal the beginning of the box\n\t\t\treturn boxStart;\n\t\t}\n\n\t\treturn viewportStart;\n\t}\n}\n"]}
@@ -69,13 +69,6 @@ export class WhitespaceOverlay extends DynamicViewOverlay {
69
69
  this._renderResult = null;
70
70
  return;
71
71
  }
72
- const startLineNumber = ctx.visibleRange.startLineNumber;
73
- const endLineNumber = ctx.visibleRange.endLineNumber;
74
- const lineCount = endLineNumber - startLineNumber + 1;
75
- const needed = new Array(lineCount);
76
- for (let i = 0; i < lineCount; i++) {
77
- needed[i] = true;
78
- }
79
72
  this._renderResult = [];
80
73
  for (let lineNumber = ctx.viewportData.startLineNumber; lineNumber <= ctx.viewportData.endLineNumber; lineNumber++) {
81
74
  const lineIndex = lineNumber - ctx.viewportData.startLineNumber;