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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/esm/nls.keys.json +1 -1
  2. package/esm/nls.messages.cs.js +2 -2
  3. package/esm/nls.messages.de.js +2 -2
  4. package/esm/nls.messages.es.js +2 -2
  5. package/esm/nls.messages.fr.js +2 -2
  6. package/esm/nls.messages.it.js +2 -2
  7. package/esm/nls.messages.ja.js +2 -2
  8. package/esm/nls.messages.js +1 -1
  9. package/esm/nls.messages.json +1 -1
  10. package/esm/nls.messages.ko.js +2 -2
  11. package/esm/nls.messages.pl.js +2 -2
  12. package/esm/nls.messages.pt-br.js +2 -2
  13. package/esm/nls.messages.ru.js +2 -2
  14. package/esm/nls.messages.tr.js +2 -2
  15. package/esm/nls.messages.zh-cn.js +2 -2
  16. package/esm/nls.messages.zh-tw.js +2 -2
  17. package/esm/nls.metadata.json +27 -8
  18. package/esm/vs/base/browser/dom.js +31 -34
  19. package/esm/vs/base/browser/dom.js.map +1 -1
  20. package/esm/vs/base/browser/dompurify/dompurify.js +0 -1
  21. package/esm/vs/base/browser/keyboardEvent.js +3 -3
  22. package/esm/vs/base/browser/keyboardEvent.js.map +1 -1
  23. package/esm/vs/base/browser/markdownRenderer.js +5 -2
  24. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  25. package/esm/vs/base/browser/pixelRatio.js +5 -5
  26. package/esm/vs/base/browser/pixelRatio.js.map +1 -1
  27. package/esm/vs/base/browser/trustedTypes.js +1 -1
  28. package/esm/vs/base/browser/trustedTypes.js.map +1 -1
  29. package/esm/vs/base/browser/ui/actionbar/actionbar.js +3 -0
  30. package/esm/vs/base/browser/ui/actionbar/actionbar.js.map +1 -1
  31. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  32. package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +7 -0
  33. package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js.map +1 -1
  34. package/esm/vs/base/browser/ui/hover/hoverWidget.css +0 -13
  35. package/esm/vs/base/browser/ui/inputbox/inputBox.js +7 -0
  36. package/esm/vs/base/browser/ui/inputbox/inputBox.js.map +1 -1
  37. package/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.css +4 -2
  38. package/esm/vs/base/browser/ui/list/listView.js +7 -2
  39. package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
  40. package/esm/vs/base/browser/ui/selectBox/selectBox.js +4 -0
  41. package/esm/vs/base/browser/ui/selectBox/selectBox.js.map +1 -1
  42. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.css +12 -32
  43. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js +8 -18
  44. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js.map +1 -1
  45. package/esm/vs/base/browser/ui/toolbar/toolbar.js +41 -14
  46. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  47. package/esm/vs/base/browser/ui/tree/abstractTree.js +11 -0
  48. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  49. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +1 -0
  50. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  51. package/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js.map +1 -1
  52. package/esm/vs/base/browser/ui/tree/dataTree.js.map +1 -1
  53. package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
  54. package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
  55. package/esm/vs/base/browser/ui/tree/objectTreeModel.js.map +1 -1
  56. package/esm/vs/base/browser/ui/tree/tree.js.map +1 -1
  57. package/esm/vs/base/common/arrays.js +10 -0
  58. package/esm/vs/base/common/arrays.js.map +1 -1
  59. package/esm/vs/base/common/async.js +34 -0
  60. package/esm/vs/base/common/async.js.map +1 -1
  61. package/esm/vs/base/common/buffer.js +1 -1
  62. package/esm/vs/base/common/buffer.js.map +1 -1
  63. package/esm/vs/base/common/cancellation.js.map +1 -1
  64. package/esm/vs/base/common/codiconsLibrary.js +3 -0
  65. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  66. package/esm/vs/base/common/collections.js.map +1 -1
  67. package/esm/vs/base/common/equals.js.map +1 -1
  68. package/esm/vs/base/common/event.js +32 -15
  69. package/esm/vs/base/common/event.js.map +1 -1
  70. package/esm/vs/base/common/filters.js +22 -3
  71. package/esm/vs/base/common/filters.js.map +1 -1
  72. package/esm/vs/base/common/hotReload.js +2 -2
  73. package/esm/vs/base/common/hotReload.js.map +1 -1
  74. package/esm/vs/base/common/iterator.js +1 -1
  75. package/esm/vs/base/common/iterator.js.map +1 -1
  76. package/esm/vs/base/common/keyCodes.js +7 -6
  77. package/esm/vs/base/common/keyCodes.js.map +1 -1
  78. package/esm/vs/base/common/linkedList.js.map +1 -1
  79. package/esm/vs/base/common/map.js.map +1 -1
  80. package/esm/vs/base/common/marked/marked.js +0 -1
  81. package/esm/vs/base/common/network.js +26 -1
  82. package/esm/vs/base/common/network.js.map +1 -1
  83. package/esm/vs/base/common/normalization.js +19 -6
  84. package/esm/vs/base/common/normalization.js.map +1 -1
  85. package/esm/vs/base/common/observableInternal/debugLocation.js +1 -2
  86. package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
  87. package/esm/vs/base/common/observableInternal/debugName.js +0 -1
  88. package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
  89. package/esm/vs/base/common/observableInternal/index.js +4 -4
  90. package/esm/vs/base/common/observableInternal/index.js.map +1 -1
  91. package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js +38 -10
  92. package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js.map +1 -1
  93. package/esm/vs/base/common/observableInternal/observables/baseObservable.js +3 -3
  94. package/esm/vs/base/common/observableInternal/observables/baseObservable.js.map +1 -1
  95. package/esm/vs/base/common/observableInternal/utils/utils.js +46 -5
  96. package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
  97. package/esm/vs/base/common/path.js +1 -0
  98. package/esm/vs/base/common/path.js.map +1 -1
  99. package/esm/vs/base/common/strings.js +27 -19
  100. package/esm/vs/base/common/strings.js.map +1 -1
  101. package/esm/vs/editor/browser/config/elementSizeObserver.js +5 -5
  102. package/esm/vs/editor/browser/config/elementSizeObserver.js.map +1 -1
  103. package/esm/vs/editor/browser/config/fontMeasurements.js.map +1 -1
  104. package/esm/vs/editor/browser/config/migrateOptions.js +6 -0
  105. package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
  106. package/esm/vs/editor/browser/config/tabFocus.js +4 -2
  107. package/esm/vs/editor/browser/config/tabFocus.js.map +1 -1
  108. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +8 -0
  109. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
  110. package/esm/vs/editor/browser/coreCommands.js +1 -2
  111. package/esm/vs/editor/browser/coreCommands.js.map +1 -1
  112. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  113. package/esm/vs/editor/browser/observableCodeEditor.js +32 -1
  114. package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
  115. package/esm/vs/editor/browser/services/contribution.js +9 -0
  116. package/esm/vs/editor/browser/services/contribution.js.map +1 -0
  117. package/esm/vs/editor/browser/services/editorWorkerService.js +27 -14
  118. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  119. package/esm/vs/editor/browser/services/openerService.js +5 -1
  120. package/esm/vs/editor/browser/services/openerService.js.map +1 -1
  121. package/esm/vs/editor/browser/view/domLineBreaksComputer.js +1 -1
  122. package/esm/vs/editor/browser/view/domLineBreaksComputer.js.map +1 -1
  123. package/esm/vs/editor/browser/view/renderingContext.js +1 -1
  124. package/esm/vs/editor/browser/view/renderingContext.js.map +1 -1
  125. package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js +10 -3
  126. package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js.map +1 -1
  127. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +3 -4
  128. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js.map +1 -1
  129. package/esm/vs/editor/browser/viewParts/minimap/minimap.js +1 -1
  130. package/esm/vs/editor/browser/viewParts/minimap/minimap.js.map +1 -1
  131. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +1 -1
  132. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js.map +1 -1
  133. package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js +4 -2
  134. package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js.map +1 -1
  135. package/esm/vs/editor/browser/viewParts/rulers/rulers.js +1 -3
  136. package/esm/vs/editor/browser/viewParts/rulers/rulers.js.map +1 -1
  137. package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js +1 -1
  138. package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js.map +1 -1
  139. package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js +2 -1
  140. package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js.map +1 -1
  141. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +6 -18
  142. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js.map +1 -1
  143. package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js +0 -7
  144. package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js.map +1 -1
  145. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +7 -2
  146. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  147. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +1 -0
  148. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js.map +1 -1
  149. package/esm/vs/editor/common/commands/replaceCommand.js +2 -2
  150. package/esm/vs/editor/common/commands/replaceCommand.js.map +1 -1
  151. package/esm/vs/editor/common/config/editorOptions.js +374 -360
  152. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  153. package/esm/vs/editor/common/core/2d/rect.js +7 -0
  154. package/esm/vs/editor/common/core/2d/rect.js.map +1 -1
  155. package/esm/vs/editor/common/core/2d/size.js +20 -0
  156. package/esm/vs/editor/common/core/2d/size.js.map +1 -0
  157. package/esm/vs/editor/common/core/editorColorRegistry.js +69 -68
  158. package/esm/vs/editor/common/core/editorColorRegistry.js.map +1 -1
  159. package/esm/vs/editor/common/core/ranges/offsetRange.js +9 -0
  160. package/esm/vs/editor/common/core/ranges/offsetRange.js.map +1 -1
  161. package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
  162. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  163. package/esm/vs/editor/common/editorContextKeys.js +47 -47
  164. package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
  165. package/esm/vs/editor/common/languages.js +56 -56
  166. package/esm/vs/editor/common/languages.js.map +1 -1
  167. package/esm/vs/editor/common/model/editStack.js +1 -1
  168. package/esm/vs/editor/common/services/languagesAssociations.js +6 -8
  169. package/esm/vs/editor/common/services/languagesAssociations.js.map +1 -1
  170. package/esm/vs/editor/common/standaloneStrings.js +11 -10
  171. package/esm/vs/editor/common/standaloneStrings.js.map +1 -1
  172. package/esm/vs/editor/common/textModelEditSource.js +1 -1
  173. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  174. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
  175. package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
  176. package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
  177. package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
  178. package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
  179. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +17 -17
  180. package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
  181. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
  182. package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
  183. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
  184. package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
  185. package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
  186. package/esm/vs/editor/contrib/codelens/browser/codelens.js.map +1 -1
  187. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
  188. package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
  189. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
  190. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
  191. package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
  192. package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
  193. package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
  194. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
  195. package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
  196. package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js +14 -0
  197. package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js.map +1 -1
  198. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
  199. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +9 -9
  200. package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
  201. package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
  202. package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
  203. package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
  204. package/esm/vs/editor/contrib/find/browser/findController.js +17 -17
  205. package/esm/vs/editor/contrib/find/browser/findController.js.map +1 -1
  206. package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
  207. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
  208. package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
  209. package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
  210. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
  211. package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
  212. package/esm/vs/editor/contrib/format/browser/format.js +21 -6
  213. package/esm/vs/editor/contrib/format/browser/format.js.map +1 -1
  214. package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
  215. package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
  216. package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
  217. package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
  218. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  219. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
  220. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
  221. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
  222. package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
  223. package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
  224. package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
  225. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js +5 -10
  226. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js.map +1 -1
  227. package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js +11 -6
  228. package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js.map +1 -1
  229. package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
  230. package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
  231. package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
  232. package/esm/vs/editor/contrib/hover/browser/hoverUtils.js +24 -0
  233. package/esm/vs/editor/contrib/hover/browser/hoverUtils.js.map +1 -1
  234. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +9 -9
  235. package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
  236. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  237. package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
  238. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +8 -8
  239. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +20 -20
  240. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +12 -12
  241. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +18 -16
  242. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
  243. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  244. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
  245. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +42 -37
  246. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  247. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +3 -3
  248. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +1 -1
  249. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +8 -8
  250. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
  251. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +54 -43
  252. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  253. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +12 -12
  254. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
  255. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +74 -48
  256. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  257. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +8 -36
  258. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
  259. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js +10 -11
  260. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js.map +1 -1
  261. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +105 -119
  262. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  263. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
  264. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +8 -36
  265. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
  266. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js +95 -0
  267. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js.map +1 -0
  268. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +17 -9
  269. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
  270. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +415 -0
  271. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -0
  272. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +253 -0
  273. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -0
  274. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
  275. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js +103 -0
  276. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js.map +1 -0
  277. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js +32 -0
  278. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js.map +1 -0
  279. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +44 -11
  280. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
  281. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +181 -0
  282. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -0
  283. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  284. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  285. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -31
  286. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
  287. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  288. package/esm/vs/editor/contrib/links/browser/links.js +10 -10
  289. package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
  290. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
  291. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  292. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  293. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  294. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  295. package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +2 -2
  296. package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js.map +1 -1
  297. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +18 -13
  298. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js.map +1 -1
  299. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  300. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  301. package/esm/vs/editor/contrib/rename/browser/rename.js +12 -12
  302. package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
  303. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  304. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  305. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
  306. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  307. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  308. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -1
  309. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
  310. package/esm/vs/editor/contrib/suggest/browser/suggest.js +8 -8
  311. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +10 -10
  312. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
  313. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
  314. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  315. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  316. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  317. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  318. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  319. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  320. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +29 -29
  321. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
  322. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  323. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  324. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +4 -4
  325. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js.map +1 -1
  326. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +1 -1
  327. package/esm/vs/editor/editor.all.js +1 -0
  328. package/esm/vs/editor/editor.all.js.map +1 -1
  329. package/esm/vs/editor/editor.api.d.ts +9 -5
  330. package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js +22 -2
  331. package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js.map +1 -1
  332. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js +39 -0
  333. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js.map +1 -0
  334. package/esm/vs/editor/standalone/browser/standaloneEditor.js +2 -1
  335. package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
  336. package/esm/vs/editor/standalone/browser/standaloneServices.js +3 -21
  337. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  338. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js +4 -4
  339. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
  340. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
  341. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  342. package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
  343. package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
  344. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +7 -9
  345. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js.map +1 -1
  346. package/esm/vs/platform/actions/browser/toolbar.js +2 -2
  347. package/esm/vs/platform/actions/common/actions.js +2 -0
  348. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  349. package/esm/vs/platform/actions/common/menuService.js +2 -2
  350. package/esm/vs/platform/configuration/common/configuration.js +5 -4
  351. package/esm/vs/platform/configuration/common/configuration.js.map +1 -1
  352. package/esm/vs/platform/configuration/common/configurationModels.js +21 -10
  353. package/esm/vs/platform/configuration/common/configurationModels.js.map +1 -1
  354. package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
  355. package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
  356. package/esm/vs/platform/configuration/common/configurations.js.map +1 -1
  357. package/esm/vs/platform/contextkey/browser/contextKeyService.js +3 -3
  358. package/esm/vs/platform/contextkey/browser/contextKeyService.js.map +1 -1
  359. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  360. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  361. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  362. package/esm/vs/platform/contextview/browser/contextViewService.js.map +1 -1
  363. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  364. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  365. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  366. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
  367. package/esm/vs/platform/list/browser/listService.js +27 -27
  368. package/esm/vs/platform/list/browser/listService.js.map +1 -1
  369. package/esm/vs/platform/markers/common/markerService.js +2 -2
  370. package/esm/vs/platform/markers/common/markers.js +6 -6
  371. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +11 -32
  372. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
  373. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  374. package/esm/vs/platform/quickinput/browser/media/quickInput.css +9 -3
  375. package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
  376. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  377. package/esm/vs/platform/quickinput/browser/quickInputController.js +35 -14
  378. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  379. package/esm/vs/platform/quickinput/browser/quickInputList.js +4 -1
  380. package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
  381. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  382. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  383. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js +71 -40
  384. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
  385. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js +21 -8
  386. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js.map +1 -1
  387. package/esm/vs/platform/telemetry/common/gdprTypings.js.map +1 -1
  388. package/esm/vs/platform/telemetry/common/telemetry.js.map +1 -1
  389. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  390. package/esm/vs/platform/theme/common/colors/baseColors.js +17 -17
  391. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  392. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  393. package/esm/vs/platform/theme/common/colors/editorColors.js.map +1 -1
  394. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  395. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  396. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  397. package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
  398. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  399. package/esm/vs/platform/theme/common/colors/miscColors.js.map +1 -1
  400. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  401. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  402. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  403. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  404. package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js +12 -0
  405. package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js.map +1 -0
  406. package/esm/vs/platform/webWorker/browser/webWorkerService.js +7 -0
  407. package/esm/vs/platform/webWorker/browser/webWorkerService.js.map +1 -0
  408. package/esm/vs/{base/browser/webWorkerFactory.js → platform/webWorker/browser/webWorkerServiceImpl.js} +47 -66
  409. package/esm/vs/platform/webWorker/browser/webWorkerServiceImpl.js.map +1 -0
  410. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  411. package/monaco.d.ts +9 -5
  412. package/package.json +2 -2
  413. package/version.txt +1 -1
  414. package/esm/vs/base/browser/webWorkerFactory.js.map +0 -1
  415. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.js +0 -82
  416. 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/contrib/stickyScroll/browser/stickyScrollWidget.ts","vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts"],"names":[],"mappings":"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","file":"stickyScrollWidget.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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOridinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOridinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts","vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts"],"names":[],"mappings":"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","file":"stickyScrollWidget.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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOrdinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOrdinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\n\t}\n}\n"]}
@@ -21,14 +21,14 @@ import { ILanguageFeaturesService } from '../../../common/services/languageFeatu
21
21
  import { historyNavigationVisible } from '../../../../platform/history/browser/contextScopedHistoryWidget.js';
22
22
  export const Context = {
23
23
  Visible: historyNavigationVisible,
24
- HasFocusedSuggestion: new RawContextKey('suggestWidgetHasFocusedSuggestion', false, localize(1455, "Whether any suggestion is focused")),
25
- DetailsVisible: new RawContextKey('suggestWidgetDetailsVisible', false, localize(1456, "Whether suggestion details are visible")),
26
- MultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false, localize(1457, "Whether there are multiple suggestions to pick from")),
27
- MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true, localize(1458, "Whether inserting the current suggestion yields in a change or has everything already been typed")),
28
- AcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true, localize(1459, "Whether suggestions are inserted when pressing Enter")),
29
- HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false, localize(1460, "Whether the current suggestion has insert and replace behaviour")),
30
- InsertMode: new RawContextKey('suggestionInsertMode', undefined, { type: 'string', description: localize(1461, "Whether the default behaviour is to insert or replace") }),
31
- CanResolve: new RawContextKey('suggestionCanResolve', false, localize(1462, "Whether the current suggestion supports to resolve further details")),
24
+ HasFocusedSuggestion: new RawContextKey('suggestWidgetHasFocusedSuggestion', false, localize(1462, "Whether any suggestion is focused")),
25
+ DetailsVisible: new RawContextKey('suggestWidgetDetailsVisible', false, localize(1463, "Whether suggestion details are visible")),
26
+ MultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false, localize(1464, "Whether there are multiple suggestions to pick from")),
27
+ MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true, localize(1465, "Whether inserting the current suggestion yields in a change or has everything already been typed")),
28
+ AcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true, localize(1466, "Whether suggestions are inserted when pressing Enter")),
29
+ HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false, localize(1467, "Whether the current suggestion has insert and replace behaviour")),
30
+ InsertMode: new RawContextKey('suggestionInsertMode', undefined, { type: 'string', description: localize(1468, "Whether the default behaviour is to insert or replace") }),
31
+ CanResolve: new RawContextKey('suggestionCanResolve', false, localize(1469, "Whether the current suggestion supports to resolve further details")),
32
32
  };
33
33
  export const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');
34
34
  export class CompletionItem {
@@ -482,7 +482,7 @@ let SuggestController = class SuggestController {
482
482
  }
483
483
  _alertCompletionItem(item) {
484
484
  if (isNonEmptyArray(item.completion.additionalTextEdits)) {
485
- const msg = nls.localize(1463, "Accepting '{0}' made {1} additional edits", item.textLabel, item.completion.additionalTextEdits.length);
485
+ const msg = nls.localize(1470, "Accepting '{0}' made {1} additional edits", item.textLabel, item.completion.additionalTextEdits.length);
486
486
  alert(msg);
487
487
  }
488
488
  }
@@ -669,7 +669,7 @@ export class TriggerSuggestAction extends EditorAction {
669
669
  constructor() {
670
670
  super({
671
671
  id: TriggerSuggestAction.id,
672
- label: nls.localize2(1471, "Trigger Suggest"),
672
+ label: nls.localize2(1478, "Trigger Suggest"),
673
673
  precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCompletionItemProvider, SuggestContext.Visible.toNegated()),
674
674
  kbOpts: {
675
675
  kbExpr: EditorContextKeys.textInputFocus,
@@ -717,19 +717,19 @@ registerEditorCommand(new SuggestCommand({
717
717
  }],
718
718
  menuOpts: [{
719
719
  menuId: suggestWidgetStatusbarMenu,
720
- title: nls.localize(1464, "Insert"),
720
+ title: nls.localize(1471, "Insert"),
721
721
  group: 'left',
722
722
  order: 1,
723
723
  when: SuggestContext.HasInsertAndReplaceRange.toNegated()
724
724
  }, {
725
725
  menuId: suggestWidgetStatusbarMenu,
726
- title: nls.localize(1465, "Insert"),
726
+ title: nls.localize(1472, "Insert"),
727
727
  group: 'left',
728
728
  order: 1,
729
729
  when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('insert'))
730
730
  }, {
731
731
  menuId: suggestWidgetStatusbarMenu,
732
- title: nls.localize(1466, "Replace"),
732
+ title: nls.localize(1473, "Replace"),
733
733
  group: 'left',
734
734
  order: 1,
735
735
  when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('replace'))
@@ -752,13 +752,13 @@ registerEditorCommand(new SuggestCommand({
752
752
  group: 'left',
753
753
  order: 2,
754
754
  when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('insert')),
755
- title: nls.localize(1467, "Replace")
755
+ title: nls.localize(1474, "Replace")
756
756
  }, {
757
757
  menuId: suggestWidgetStatusbarMenu,
758
758
  group: 'left',
759
759
  order: 2,
760
760
  when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('replace')),
761
- title: nls.localize(1468, "Insert")
761
+ title: nls.localize(1475, "Insert")
762
762
  }]
763
763
  }));
764
764
  // continue to support the old command
@@ -866,13 +866,13 @@ registerEditorCommand(new SuggestCommand({
866
866
  group: 'right',
867
867
  order: 1,
868
868
  when: ContextKeyExpr.and(SuggestContext.DetailsVisible, SuggestContext.CanResolve),
869
- title: nls.localize(1469, "Show Less")
869
+ title: nls.localize(1476, "Show Less")
870
870
  }, {
871
871
  menuId: suggestWidgetStatusbarMenu,
872
872
  group: 'right',
873
873
  order: 1,
874
874
  when: ContextKeyExpr.and(SuggestContext.DetailsVisible.toNegated(), SuggestContext.CanResolve),
875
- title: nls.localize(1470, "Show More")
875
+ title: nls.localize(1477, "Show More")
876
876
  }]
877
877
  }));
878
878
  registerEditorCommand(new SuggestCommand({
@@ -931,7 +931,7 @@ registerEditorAction(class extends EditorAction {
931
931
  constructor() {
932
932
  super({
933
933
  id: 'editor.action.resetSuggestSize',
934
- label: nls.localize2(1472, "Reset Suggest Widget Size"),
934
+ label: nls.localize2(1479, "Reset Suggest Widget Size"),
935
935
  precondition: undefined
936
936
  });
937
937
  }
@@ -42,15 +42,15 @@ import { isWindows } from '../../../../base/common/platform.js';
42
42
  /**
43
43
  * Suggest widget colors
44
44
  */
45
- registerColor('editorSuggestWidget.background', editorWidgetBackground, nls.localize(1473, 'Background color of the suggest widget.'));
46
- registerColor('editorSuggestWidget.border', editorWidgetBorder, nls.localize(1474, 'Border color of the suggest widget.'));
47
- export const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', editorForeground, nls.localize(1475, 'Foreground color of the suggest widget.'));
48
- registerColor('editorSuggestWidget.selectedForeground', quickInputListFocusForeground, nls.localize(1476, 'Foreground color of the selected entry in the suggest widget.'));
49
- registerColor('editorSuggestWidget.selectedIconForeground', quickInputListFocusIconForeground, nls.localize(1477, 'Icon foreground color of the selected entry in the suggest widget.'));
50
- export const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', quickInputListFocusBackground, nls.localize(1478, 'Background color of the selected entry in the suggest widget.'));
51
- registerColor('editorSuggestWidget.highlightForeground', listHighlightForeground, nls.localize(1479, 'Color of the match highlights in the suggest widget.'));
52
- registerColor('editorSuggestWidget.focusHighlightForeground', listFocusHighlightForeground, nls.localize(1480, 'Color of the match highlights in the suggest widget when an item is focused.'));
53
- registerColor('editorSuggestWidgetStatus.foreground', transparent(editorSuggestWidgetForeground, .5), nls.localize(1481, 'Foreground color of the suggest widget status.'));
45
+ registerColor('editorSuggestWidget.background', editorWidgetBackground, nls.localize(1480, 'Background color of the suggest widget.'));
46
+ registerColor('editorSuggestWidget.border', editorWidgetBorder, nls.localize(1481, 'Border color of the suggest widget.'));
47
+ export const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', editorForeground, nls.localize(1482, 'Foreground color of the suggest widget.'));
48
+ registerColor('editorSuggestWidget.selectedForeground', quickInputListFocusForeground, nls.localize(1483, 'Foreground color of the selected entry in the suggest widget.'));
49
+ registerColor('editorSuggestWidget.selectedIconForeground', quickInputListFocusIconForeground, nls.localize(1484, 'Icon foreground color of the selected entry in the suggest widget.'));
50
+ export const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', quickInputListFocusBackground, nls.localize(1485, 'Background color of the selected entry in the suggest widget.'));
51
+ registerColor('editorSuggestWidget.highlightForeground', listHighlightForeground, nls.localize(1486, 'Color of the match highlights in the suggest widget.'));
52
+ registerColor('editorSuggestWidget.focusHighlightForeground', listFocusHighlightForeground, nls.localize(1487, 'Color of the match highlights in the suggest widget when an item is focused.'));
53
+ registerColor('editorSuggestWidgetStatus.foreground', transparent(editorSuggestWidgetForeground, .5), nls.localize(1488, 'Foreground color of the suggest widget status.'));
54
54
  class PersistedWidgetSize {
55
55
  constructor(_service, editor) {
56
56
  this._service = _service;
@@ -78,8 +78,8 @@ class PersistedWidgetSize {
78
78
  }
79
79
  let SuggestWidget = class SuggestWidget {
80
80
  static { SuggestWidget_1 = this; }
81
- static { this.LOADING_MESSAGE = nls.localize(1482, "Loading..."); }
82
- static { this.NO_SUGGESTIONS_MESSAGE = nls.localize(1483, "No suggestions."); }
81
+ static { this.LOADING_MESSAGE = nls.localize(1489, "Loading..."); }
82
+ static { this.NO_SUGGESTIONS_MESSAGE = nls.localize(1490, "No suggestions."); }
83
83
  constructor(editor, _storageService, _contextKeyService, _themeService, instantiationService) {
84
84
  this.editor = editor;
85
85
  this._storageService = _storageService;
@@ -166,7 +166,7 @@ let SuggestWidget = class SuggestWidget {
166
166
  multipleSelectionSupport: false,
167
167
  accessibilityProvider: {
168
168
  getRole: () => isWindows ? 'listitem' : 'option',
169
- getWidgetAriaLabel: () => nls.localize(1484, "Suggest"),
169
+ getWidgetAriaLabel: () => nls.localize(1491, "Suggest"),
170
170
  getWidgetRole: () => 'listbox',
171
171
  getAriaLabel: (item) => {
172
172
  let label = item.textLabel;
@@ -174,24 +174,24 @@ let SuggestWidget = class SuggestWidget {
174
174
  if (typeof item.completion.label !== 'string') {
175
175
  const { detail, description } = item.completion.label;
176
176
  if (detail && description) {
177
- label = nls.localize(1485, '{0} {1}, {2}, {3}', label, detail, description, kindLabel);
177
+ label = nls.localize(1492, '{0} {1}, {2}, {3}', label, detail, description, kindLabel);
178
178
  }
179
179
  else if (detail) {
180
- label = nls.localize(1486, '{0} {1}, {2}', label, detail, kindLabel);
180
+ label = nls.localize(1493, '{0} {1}, {2}', label, detail, kindLabel);
181
181
  }
182
182
  else if (description) {
183
- label = nls.localize(1487, '{0}, {1}, {2}', label, description, kindLabel);
183
+ label = nls.localize(1494, '{0}, {1}, {2}', label, description, kindLabel);
184
184
  }
185
185
  }
186
186
  else {
187
- label = nls.localize(1488, '{0}, {1}', label, kindLabel);
187
+ label = nls.localize(1495, '{0}, {1}', label, kindLabel);
188
188
  }
189
189
  if (!item.isResolved || !this._isDetailsVisible()) {
190
190
  return label;
191
191
  }
192
192
  const { documentation, detail } = item.completion;
193
193
  const docs = strings.format('{0}{1}', detail || '', documentation ? (typeof documentation === 'string' ? documentation : documentation.value) : '');
194
- return nls.localize(1489, "{0}, docs: {1}", label, docs);
194
+ return nls.localize(1496, "{0}, docs: {1}", label, docs);
195
195
  },
196
196
  }
197
197
  });
@@ -48,7 +48,7 @@ let SuggestDetailsWidget = class SuggestDetailsWidget {
48
48
  this._disposables.add(this._scrollbar);
49
49
  this._header = dom.append(this._body, dom.$('.header'));
50
50
  this._close = dom.append(this._header, dom.$('span' + ThemeIcon.asCSSSelector(Codicon.close)));
51
- this._close.title = nls.localize(1490, "Close");
51
+ this._close.title = nls.localize(1497, "Close");
52
52
  this._close.role = 'button';
53
53
  this._close.tabIndex = -1;
54
54
  this._type = dom.append(this._header, dom.$('p.type'));
@@ -94,7 +94,7 @@ let SuggestDetailsWidget = class SuggestDetailsWidget {
94
94
  };
95
95
  }
96
96
  renderLoading() {
97
- this._type.textContent = nls.localize(1491, "Loading...");
97
+ this._type.textContent = nls.localize(1498, "Loading...");
98
98
  this._docs.textContent = '';
99
99
  this.domNode.classList.remove('no-docs', 'no-type');
100
100
  this.layout(this.size.width, this.getLayoutInfo().lineHeight * 2);
@@ -28,7 +28,7 @@ import { FileKind } from '../../../../platform/files/common/files.js';
28
28
  import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js';
29
29
  import { IThemeService } from '../../../../platform/theme/common/themeService.js';
30
30
  import { canExpandCompletionItem } from './suggestWidgetDetails.js';
31
- const suggestMoreInfoIcon = registerIcon('suggest-more-info', Codicon.chevronRight, nls.localize(1492, 'Icon for more information in the suggest widget.'));
31
+ const suggestMoreInfoIcon = registerIcon('suggest-more-info', Codicon.chevronRight, nls.localize(1499, 'Icon for more information in the suggest widget.'));
32
32
  const _completionItemColor = new class ColorExtractor {
33
33
  static { this._regexRelaxed = /(#([\da-fA-F]{3}){1,2}|(rgb|hsl)a\(\s*(\d{1,3}%?\s*,\s*){3}(1|0?\.\d+)\)|(rgb|hsl)\(\s*\d{1,3}%?(\s*,\s*\d{1,3}%?){2}\s*\))/; }
34
34
  static { this._regexStrict = new RegExp(`^${ColorExtractor._regexRelaxed.source}$`, 'i'); }
@@ -84,7 +84,7 @@ let ItemRenderer = class ItemRenderer {
84
84
  const qualifierLabel = append(left, $('span.qualifier-label'));
85
85
  const detailsLabel = append(right, $('span.details-label'));
86
86
  const readMore = append(right, $('span.readMore' + ThemeIcon.asCSSSelector(suggestMoreInfoIcon)));
87
- readMore.title = nls.localize(1493, "Read More");
87
+ readMore.title = nls.localize(1500, "Read More");
88
88
  const configureFont = () => {
89
89
  const options = this._editor.getOptions();
90
90
  const fontInfo = options.get(59 /* EditorOption.fontInfo */);
@@ -16,7 +16,7 @@ import { IContextKeyService, RawContextKey } from '../../../../platform/contextk
16
16
  import { localize } from '../../../../nls.js';
17
17
  let WordContextKey = class WordContextKey {
18
18
  static { WordContextKey_1 = this; }
19
- static { this.AtEnd = new RawContextKey('atEndOfWord', false, { type: 'boolean', description: localize(1494, "A context key that is true when at the end of a word. Note that this is only defined when tab-completions are enabled") }); }
19
+ static { this.AtEnd = new RawContextKey('atEndOfWord', false, { type: 'boolean', description: localize(1501, "A context key that is true when at the end of a word. Note that this is only defined when tab-completions are enabled") }); }
20
20
  constructor(_editor, contextKeyService) {
21
21
  this._editor = _editor;
22
22
  this._enabled = false;