monaco-editor-core 0.56.0-dev-20251125 → 0.56.0-dev-20251217

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 (336) 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 +30 -4
  18. package/esm/vs/base/browser/dom.js +1 -4
  19. package/esm/vs/base/browser/dom.js.map +1 -1
  20. package/esm/vs/base/browser/markdownRenderer.js +25 -11
  21. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  22. package/esm/vs/base/browser/ui/button/button.js +15 -8
  23. package/esm/vs/base/browser/ui/button/button.js.map +1 -1
  24. package/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css +3 -8
  25. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  26. package/esm/vs/base/browser/ui/list/list.css +1 -0
  27. package/esm/vs/base/browser/ui/toolbar/toolbar.js +3 -0
  28. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  29. package/esm/vs/base/common/codiconsLibrary.js +11 -2
  30. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  31. package/esm/vs/base/common/defaultAccount.js +6 -0
  32. package/esm/vs/base/common/defaultAccount.js.map +1 -0
  33. package/esm/vs/base/common/equals.js +73 -24
  34. package/esm/vs/base/common/equals.js.map +1 -1
  35. package/esm/vs/base/common/event.js +14 -4
  36. package/esm/vs/base/common/event.js.map +1 -1
  37. package/esm/vs/base/common/iterator.js.map +1 -1
  38. package/esm/vs/base/common/keybindings.js +0 -8
  39. package/esm/vs/base/common/keybindings.js.map +1 -1
  40. package/esm/vs/base/common/lifecycle.js +2 -2
  41. package/esm/vs/base/common/lifecycle.js.map +1 -1
  42. package/esm/vs/base/common/marshallingIds.js.map +1 -1
  43. package/esm/vs/base/common/observableInternal/index.js +1 -1
  44. package/esm/vs/base/common/observableInternal/index.js.map +1 -1
  45. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -1
  46. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
  47. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +16 -0
  48. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
  49. package/esm/vs/base/common/observableInternal/utils/utils.js +11 -0
  50. package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
  51. package/esm/vs/base/common/product.js.map +1 -1
  52. package/esm/vs/base/common/strings.js +3 -1
  53. package/esm/vs/base/common/strings.js.map +1 -1
  54. package/esm/vs/editor/browser/controller/dragScrolling.js +2 -1
  55. package/esm/vs/editor/browser/controller/dragScrolling.js.map +1 -1
  56. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +73 -2
  57. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
  58. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +7 -51
  59. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
  60. package/esm/vs/editor/browser/controller/editContext/screenReaderUtils.js.map +1 -1
  61. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +7 -20
  62. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
  63. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js +14 -44
  64. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js.map +1 -1
  65. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js +19 -0
  66. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js.map +1 -0
  67. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js +14 -1
  68. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js.map +1 -1
  69. package/esm/vs/editor/browser/controller/mouseHandler.js +5 -2
  70. package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
  71. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  72. package/esm/vs/editor/browser/observableCodeEditor.js +32 -15
  73. package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
  74. package/esm/vs/editor/browser/view.js +11 -2
  75. package/esm/vs/editor/browser/view.js.map +1 -1
  76. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +5 -2
  77. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
  78. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +10 -0
  79. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  80. package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
  81. package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +48 -0
  82. package/esm/vs/editor/common/config/fontInfo.js +1 -1
  83. package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
  84. package/esm/vs/editor/common/core/edits/edit.js +19 -0
  85. package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
  86. package/esm/vs/editor/common/core/edits/stringEdit.js +13 -0
  87. package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
  88. package/esm/vs/editor/common/core/edits/textEdit.js +0 -3
  89. package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
  90. package/esm/vs/editor/common/core/text/positionToOffsetImpl.js +24 -10
  91. package/esm/vs/editor/common/core/text/positionToOffsetImpl.js.map +1 -1
  92. package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
  93. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  94. package/esm/vs/editor/common/cursor/cursorWordOperations.js +6 -3
  95. package/esm/vs/editor/common/cursor/cursorWordOperations.js.map +1 -1
  96. package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js +2 -2
  97. package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js.map +1 -1
  98. package/esm/vs/editor/common/languages/nullTokenize.js +1 -1
  99. package/esm/vs/editor/common/languages/nullTokenize.js.map +1 -1
  100. package/esm/vs/editor/common/languages/supports/tokenization.js +3 -0
  101. package/esm/vs/editor/common/languages/supports/tokenization.js.map +1 -1
  102. package/esm/vs/editor/common/languages.js +2 -1
  103. package/esm/vs/editor/common/languages.js.map +1 -1
  104. package/esm/vs/editor/common/model/decorationProvider.js +21 -1
  105. package/esm/vs/editor/common/model/decorationProvider.js.map +1 -1
  106. package/esm/vs/editor/common/model/textModel.js +49 -30
  107. package/esm/vs/editor/common/model/textModel.js.map +1 -1
  108. package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js +6 -3
  109. package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js.map +1 -1
  110. package/esm/vs/editor/common/model/tokens/annotations.js +177 -0
  111. package/esm/vs/editor/common/model/tokens/annotations.js.map +1 -0
  112. package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js +131 -0
  113. package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js.map +1 -0
  114. package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js +9 -0
  115. package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js.map +1 -1
  116. package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js +9 -0
  117. package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js.map +1 -1
  118. package/esm/vs/editor/common/textModelEditSource.js +2 -0
  119. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  120. package/esm/vs/editor/common/textModelEvents.js.map +1 -1
  121. package/esm/vs/editor/common/viewLayout/lineDecorations.js.map +1 -1
  122. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +1 -1
  123. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
  124. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +54 -36
  125. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
  126. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +14 -1
  127. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
  128. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
  129. package/esm/vs/editor/contrib/hover/browser/hover.css +1 -1
  130. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +1 -1
  131. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
  132. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  133. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +1 -0
  134. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
  135. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js +1 -0
  136. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js.map +1 -1
  137. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +33 -4
  138. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
  139. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -12
  140. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js.map +1 -1
  141. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -1
  142. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
  143. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  144. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
  145. package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js +2 -1
  146. package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js.map +1 -1
  147. package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js +8 -0
  148. package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js.map +1 -0
  149. package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js +198 -0
  150. package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js.map +1 -0
  151. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js +40 -0
  152. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js.map +1 -0
  153. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +128 -70
  154. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  155. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +59 -11
  156. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
  157. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +152 -95
  158. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
  159. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +113 -54
  160. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
  161. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +317 -75
  162. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -1
  163. package/esm/vs/editor/contrib/inlineCompletions/browser/telemetry.js.map +1 -1
  164. package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js +20 -0
  165. package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js.map +1 -1
  166. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +59 -42
  167. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  168. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +29 -8
  169. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
  170. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +78 -46
  171. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  172. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +9 -4
  173. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
  174. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +11 -4
  175. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
  176. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +81 -41
  177. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  178. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js +48 -0
  179. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
  180. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +18 -15
  181. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
  182. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js +3 -4
  183. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js.map +1 -1
  184. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +6 -7
  185. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
  186. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js +4 -5
  187. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js.map +1 -1
  188. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +4 -3
  189. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
  190. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js +8 -8
  191. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js.map +1 -1
  192. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js +9 -7
  193. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js.map +1 -1
  194. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +203 -41
  195. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js.map +1 -1
  196. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js +189 -0
  197. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js.map +1 -0
  198. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +85 -102
  199. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
  200. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +75 -32
  201. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -1
  202. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js +121 -0
  203. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js.map +1 -0
  204. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js +2 -1
  205. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
  206. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +22 -20
  207. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js.map +1 -1
  208. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +15 -5
  209. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
  210. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +39 -6
  211. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +10 -5
  212. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -1
  213. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  214. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  215. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
  216. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
  217. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  218. package/esm/vs/editor/contrib/links/browser/links.js +10 -10
  219. package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
  220. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
  221. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  222. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  223. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  224. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  225. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +11 -11
  226. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  227. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  228. package/esm/vs/editor/contrib/rename/browser/rename.js +19 -15
  229. package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
  230. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  231. package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +3 -2
  232. package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js.map +1 -1
  233. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  234. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
  235. package/esm/vs/editor/contrib/snippet/browser/snippetParser.js +33 -0
  236. package/esm/vs/editor/contrib/snippet/browser/snippetParser.js.map +1 -1
  237. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  238. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  239. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +12 -4
  240. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
  241. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -0
  242. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
  243. package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -8
  244. package/esm/vs/editor/contrib/suggest/browser/suggest.js.map +1 -1
  245. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +39 -28
  246. package/esm/vs/editor/contrib/suggest/browser/suggestController.js.map +1 -1
  247. package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +1 -0
  248. package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js.map +1 -1
  249. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +22 -18
  250. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js.map +1 -1
  251. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +28 -6
  252. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
  253. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  254. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  255. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  256. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  257. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  258. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  259. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
  260. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  261. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  262. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
  263. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +19 -2
  264. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js.map +1 -1
  265. package/esm/vs/editor/editor.api.d.ts +34 -3
  266. package/esm/vs/editor/standalone/browser/standaloneLanguages.js +2 -2
  267. package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
  268. package/esm/vs/editor/standalone/browser/standaloneServices.js +11 -1
  269. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  270. package/esm/vs/editor/standalone/common/monarch/monarchLexer.js +1 -1
  271. package/esm/vs/editor/standalone/common/monarch/monarchLexer.js.map +1 -1
  272. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
  273. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  274. package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
  275. package/esm/vs/platform/actionWidget/browser/actionWidget.css +11 -8
  276. package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
  277. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
  278. package/esm/vs/platform/actions/browser/toolbar.js +2 -2
  279. package/esm/vs/platform/actions/common/actions.js +11 -5
  280. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  281. package/esm/vs/platform/actions/common/menuService.js +2 -2
  282. package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
  283. package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
  284. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  285. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  286. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  287. package/esm/vs/platform/{product/common/productService.js → defaultAccount/common/defaultAccount.js} +2 -2
  288. package/esm/vs/platform/defaultAccount/common/defaultAccount.js.map +1 -0
  289. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  290. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  291. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  292. package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
  293. package/esm/vs/platform/instantiation/common/instantiationService.js +1 -8
  294. package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
  295. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
  296. package/esm/vs/platform/list/browser/listService.js +27 -27
  297. package/esm/vs/platform/log/common/log.js +1 -1
  298. package/esm/vs/platform/log/common/log.js.map +1 -1
  299. package/esm/vs/platform/markers/common/markerService.js +6 -6
  300. package/esm/vs/platform/markers/common/markerService.js.map +1 -1
  301. package/esm/vs/platform/markers/common/markers.js +6 -6
  302. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
  303. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  304. package/esm/vs/platform/quickinput/browser/media/quickInput.css +7 -3
  305. package/esm/vs/platform/quickinput/browser/quickInput.js +19 -11
  306. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  307. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  308. package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
  309. package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
  310. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  311. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  312. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  313. package/esm/vs/platform/theme/common/colors/baseColors.js +18 -17
  314. package/esm/vs/platform/theme/common/colors/baseColors.js.map +1 -1
  315. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  316. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  317. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  318. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  319. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  320. package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
  321. package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
  322. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  323. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  324. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  325. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  326. package/esm/vs/platform/undoRedo/common/undoRedoService.js +21 -21
  327. package/esm/vs/platform/undoRedo/common/undoRedoService.js.map +1 -1
  328. package/esm/vs/platform/window/common/window.js +1 -1
  329. package/esm/vs/platform/window/common/window.js.map +1 -1
  330. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  331. package/monaco.d.ts +34 -3
  332. package/package.json +2 -2
  333. package/version.txt +1 -1
  334. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +0 -16
  335. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +0 -1
  336. package/esm/vs/platform/product/common/productService.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts","vs/editor/browser/controller/editContext/native/nativeEditContext.ts"],"names":[],"mappings":"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","file":"nativeEditContext.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 './nativeEditContext.css';\nimport { isFirefox } from '../../../../../base/browser/browser.js';\nimport { addDisposableListener, getActiveElement, getWindow, getWindowId } from '../../../../../base/browser/dom.js';\nimport { FastDomNode } from '../../../../../base/browser/fastDomNode.js';\nimport { StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js';\nimport { KeyCode } from '../../../../../base/common/keyCodes.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { EndOfLinePreference, IModelDeltaDecoration } from '../../../../common/model.js';\nimport { ViewConfigurationChangedEvent, ViewCursorStateChangedEvent, ViewDecorationsChangedEvent, ViewFlushedEvent, ViewLinesChangedEvent, ViewLinesDeletedEvent, ViewLinesInsertedEvent, ViewScrollChangedEvent, ViewZonesChangedEvent } from '../../../../common/viewEvents.js';\nimport { ViewContext } from '../../../../common/viewModel/viewContext.js';\nimport { RestrictedRenderingContext, RenderingContext, HorizontalPosition } from '../../../view/renderingContext.js';\nimport { ViewController } from '../../../view/viewController.js';\nimport { ClipboardEventUtils, ClipboardStoredMetadata, getDataToCopy, InMemoryClipboardMetadataManager } from '../clipboardUtils.js';\nimport { AbstractEditContext } from '../editContext.js';\nimport { editContextAddDisposableListener, FocusTracker, ITypeData } from './nativeEditContextUtils.js';\nimport { ScreenReaderSupport } from './screenReaderSupport.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { Selection } from '../../../../common/core/selection.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { IVisibleRangeProvider } from '../textArea/textAreaEditContext.js';\nimport { PositionOffsetTransformer } from '../../../../common/core/text/positionToOffset.js';\nimport { EditContext } from './editContextFactory.js';\nimport { NativeEditContextRegistry } from './nativeEditContextRegistry.js';\nimport { IEditorAriaOptions } from '../../../editorBrowser.js';\nimport { isHighSurrogate, isLowSurrogate } from '../../../../../base/common/strings.js';\nimport { IME } from '../../../../../base/common/ime.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { ILogService, LogLevel } from '../../../../../platform/log/common/log.js';\nimport { generateUuid } from '../../../../../base/common/uuid.js';\nimport { inputLatency } from '../../../../../base/browser/performance.js';\n\n// Corresponds to classes in nativeEditContext.css\nenum CompositionClassName {\n\tNONE = 'edit-context-composition-none',\n\tSECONDARY = 'edit-context-composition-secondary',\n\tPRIMARY = 'edit-context-composition-primary',\n}\n\ninterface ITextUpdateEvent {\n\ttext: string;\n\tselectionStart: number;\n\tselectionEnd: number;\n\tupdateRangeStart: number;\n\tupdateRangeEnd: number;\n}\n\nexport class NativeEditContext extends AbstractEditContext {\n\n\t// Text area used to handle paste events\n\tpublic readonly domNode: FastDomNode<HTMLDivElement>;\n\tprivate readonly _imeTextArea: FastDomNode<HTMLTextAreaElement>;\n\tprivate readonly _editContext: EditContext;\n\tprivate readonly _screenReaderSupport: ScreenReaderSupport;\n\tprivate _previousEditContextSelection: OffsetRange = new OffsetRange(0, 0);\n\tprivate _editContextPrimarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\t// Overflow guard container\n\tprivate readonly _parent: HTMLElement;\n\tprivate _decorations: string[] = [];\n\tprivate _primarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\n\tprivate _targetWindowId: number = -1;\n\tprivate _scrollTop: number = 0;\n\tprivate _scrollLeft: number = 0;\n\n\tprivate readonly _focusTracker: FocusTracker;\n\n\tconstructor(\n\t\townerID: string,\n\t\tcontext: ViewContext,\n\t\toverflowGuardContainer: FastDomNode<HTMLElement>,\n\t\tprivate readonly _viewController: ViewController,\n\t\tprivate readonly _visibleRangeProvider: IVisibleRangeProvider,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ILogService private readonly logService: ILogService\n\t) {\n\t\tsuper(context);\n\n\t\tthis.domNode = new FastDomNode(document.createElement('div'));\n\t\tthis.domNode.setClassName(`native-edit-context`);\n\t\tthis._imeTextArea = new FastDomNode(document.createElement('textarea'));\n\t\tthis._imeTextArea.setClassName(`ime-text-area`);\n\t\tthis._imeTextArea.setAttribute('readonly', 'true');\n\t\tthis._imeTextArea.setAttribute('tabindex', '-1');\n\t\tthis._imeTextArea.setAttribute('aria-hidden', 'true');\n\t\tthis.domNode.setAttribute('autocorrect', 'off');\n\t\tthis.domNode.setAttribute('autocapitalize', 'off');\n\t\tthis.domNode.setAttribute('autocomplete', 'off');\n\t\tthis.domNode.setAttribute('spellcheck', 'false');\n\n\t\tthis._updateDomAttributes();\n\n\t\toverflowGuardContainer.appendChild(this.domNode);\n\t\toverflowGuardContainer.appendChild(this._imeTextArea);\n\t\tthis._parent = overflowGuardContainer.domNode;\n\n\t\tthis._focusTracker = this._register(new FocusTracker(logService, this.domNode.domNode, (newFocusValue: boolean) => {\n\t\t\tlogService.trace('NativeEditContext#handleFocusChange : ', newFocusValue);\n\t\t\tthis._screenReaderSupport.handleFocusChange(newFocusValue);\n\t\t\tthis._context.viewModel.setHasFocus(newFocusValue);\n\t\t}));\n\n\t\tconst window = getWindow(this.domNode.domNode);\n\t\tthis._editContext = EditContext.create(window);\n\t\tthis.setEditContextOnDomNode();\n\n\t\tthis._screenReaderSupport = this._register(instantiationService.createInstance(ScreenReaderSupport, this.domNode, context, this._viewController));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'copy', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#copy');\n\t\t\tthis._ensureClipboardGetsEditorSelection(e);\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'cut', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#cut');\n\t\t\t// Pretend here we touched the text area, as the `cut` event will most likely\n\t\t\t// result in a `selectionchange` event which we want to ignore\n\t\t\tthis._screenReaderSupport.onWillCut();\n\t\t\tthis._ensureClipboardGetsEditorSelection(e);\n\t\t\tthis.logService.trace('NativeEditContext#cut (before viewController.cut)');\n\t\t\tthis._viewController.cut();\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'selectionchange', () => {\n\t\t\tinputLatency.onSelectionChange();\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'beforeinput', async (e) => {\n\t\t\tinputLatency.onBeforeInput();\n\t\t\tif (e.inputType === 'insertParagraph' || e.inputType === 'insertLineBreak') {\n\t\t\t\tthis._onType(this._viewController, { text: '\\n', replacePrevCharCnt: 0, replaceNextCharCnt: 0, positionDelta: 0 });\n\t\t\t}\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'paste', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#paste');\n\t\t\te.preventDefault();\n\t\t\tif (!e.clipboardData) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet [text, metadata] = ClipboardEventUtils.getTextData(e.clipboardData);\n\t\t\tthis.logService.trace('NativeEditContext#paste with id : ', metadata?.id, ' with text.length: ', text.length);\n\t\t\tif (!text) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\t\t\tlet pasteOnNewLine = false;\n\t\t\tlet multicursorText: string[] | null = null;\n\t\t\tlet mode: string | null = null;\n\t\t\tif (metadata) {\n\t\t\t\tconst options = this._context.configuration.options;\n\t\t\t\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\t\t\t\tpasteOnNewLine = emptySelectionClipboard && !!metadata.isFromEmptySelection;\n\t\t\t\tmulticursorText = typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null;\n\t\t\t\tmode = metadata.mode;\n\t\t\t}\n\t\t\tthis.logService.trace('NativeEditContext#paste (before viewController.paste)');\n\t\t\tthis._viewController.paste(text, pasteOnNewLine, multicursorText, mode);\n\t\t}));\n\n\t\t// Edit context events\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textformatupdate', (e) => this._handleTextFormatUpdate(e)));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'characterboundsupdate', (e) => this._updateCharacterBounds(e)));\n\t\tlet highSurrogateCharacter: string | undefined;\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textupdate', (e) => {\n\t\t\tinputLatency.onInput();\n\t\t\tconst text = e.text;\n\t\t\tif (text.length === 1) {\n\t\t\t\tconst charCode = text.charCodeAt(0);\n\t\t\t\tif (isHighSurrogate(charCode)) {\n\t\t\t\t\thighSurrogateCharacter = text;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isLowSurrogate(charCode) && highSurrogateCharacter) {\n\t\t\t\t\tconst textUpdateEvent: ITextUpdateEvent = {\n\t\t\t\t\t\ttext: highSurrogateCharacter + text,\n\t\t\t\t\t\tselectionEnd: e.selectionEnd,\n\t\t\t\t\t\tselectionStart: e.selectionStart,\n\t\t\t\t\t\tupdateRangeStart: e.updateRangeStart - 1,\n\t\t\t\t\t\tupdateRangeEnd: e.updateRangeEnd - 1\n\t\t\t\t\t};\n\t\t\t\t\thighSurrogateCharacter = undefined;\n\t\t\t\t\tthis._emitTypeEvent(this._viewController, textUpdateEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._emitTypeEvent(this._viewController, e);\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionstart', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires onDidCompositionStart() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionStart();\n\t\t\t// Emits ViewCompositionStartEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionStart();\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionend', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires compositionEnd() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionEnd();\n\t\t\t// Emits ViewCompositionEndEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionEnd();\n\t\t}));\n\t\tlet reenableTracking: boolean = false;\n\t\tthis._register(IME.onDidChange(() => {\n\t\t\tif (IME.enabled && reenableTracking) {\n\t\t\t\tthis._focusTracker.resume();\n\t\t\t\tthis.domNode.focus();\n\t\t\t\treenableTracking = false;\n\t\t\t}\n\t\t\tif (!IME.enabled && this.isFocused()) {\n\t\t\t\tthis._focusTracker.pause();\n\t\t\t\tthis._imeTextArea.focus();\n\t\t\t\treenableTracking = true;\n\t\t\t}\n\t\t}));\n\t\tthis._register(NativeEditContextRegistry.register(ownerID, this));\n\t}\n\n\t// --- Public methods ---\n\n\tpublic override dispose(): void {\n\t\t// Force blue the dom node so can write in pane with no native edit context after disposal\n\t\tthis.domNode.domNode.editContext = undefined;\n\t\tthis.domNode.domNode.blur();\n\t\tthis.domNode.domNode.remove();\n\t\tthis._imeTextArea.domNode.remove();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setAriaOptions(options: IEditorAriaOptions): void {\n\t\tthis._screenReaderSupport.setAriaOptions(options);\n\t}\n\n\t/* Last rendered data needed for correct hit-testing and determining the mouse position.\n\t * Without this, the selection will blink as incorrect mouse position is calculated */\n\tpublic getLastRenderData(): Position | null {\n\t\treturn this._primarySelection.getPosition();\n\t}\n\n\tpublic override prepareRender(ctx: RenderingContext): void {\n\t\tthis._screenReaderSupport.prepareRender(ctx);\n\t\tthis._updateSelectionAndControlBoundsData(ctx);\n\t}\n\n\tpublic override onDidRender(): void {\n\t\tthis._updateSelectionAndControlBoundsAfterRender();\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._screenReaderSupport.render(ctx);\n\t}\n\n\tpublic override onCursorStateChanged(e: ViewCursorStateChangedEvent): boolean {\n\t\tthis._primarySelection = e.modelSelections[0] ?? new Selection(1, 1, 1, 1);\n\t\tthis._screenReaderSupport.onCursorStateChanged(e);\n\t\tthis._updateEditContext();\n\t\treturn true;\n\t}\n\n\tpublic override onConfigurationChanged(e: ViewConfigurationChangedEvent): boolean {\n\t\tthis._screenReaderSupport.onConfigurationChanged(e);\n\t\tthis._updateDomAttributes();\n\t\treturn true;\n\t}\n\n\tpublic override onDecorationsChanged(e: ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;\n\t}\n\n\tpublic override onFlushed(e: ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic override onLinesChanged(e: ViewLinesChangedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.fromLineNumber + e.count - 1);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesDeleted(e: ViewLinesDeletedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesInserted(e: ViewLinesInsertedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tprivate _updateEditContextOnLineChange(fromLineNumber: number, toLineNumber: number): void {\n\t\tif (this._editContextPrimarySelection.endLineNumber < fromLineNumber || this._editContextPrimarySelection.startLineNumber > toLineNumber) {\n\t\t\treturn;\n\t\t}\n\t\tthis._updateEditContext();\n\t}\n\n\tpublic override onScrollChanged(e: ViewScrollChangedEvent): boolean {\n\t\tthis._scrollLeft = e.scrollLeft;\n\t\tthis._scrollTop = e.scrollTop;\n\t\treturn true;\n\t}\n\n\tpublic override onZonesChanged(e: ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onWillPaste(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillPaste');\n\t\tthis._onWillPaste();\n\t}\n\n\tprivate _onWillPaste(): void {\n\t\tthis._screenReaderSupport.onWillPaste();\n\t}\n\n\tpublic onWillCopy(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillCopy');\n\t\tthis.logService.trace('NativeEditContext#isFocused : ', this.domNode.domNode === getActiveElement());\n\t}\n\n\tpublic writeScreenReaderContent(): void {\n\t\tthis._screenReaderSupport.writeScreenReaderContent();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this._focusTracker.isFocused;\n\t}\n\n\tpublic focus(): void {\n\t\tthis._focusTracker.focus();\n\n\t\t// If the editor is off DOM, focus cannot be really set, so let's double check that we have managed to set the focus\n\t\tthis.refreshFocusState();\n\t}\n\n\tpublic refreshFocusState(): void {\n\t\tthis._focusTracker.refreshFocusState();\n\t}\n\n\t// TODO: added as a workaround fix for https://github.com/microsoft/vscode/issues/229825\n\t// When this issue will be fixed the following should be removed.\n\tpublic setEditContextOnDomNode(): void {\n\t\tconst targetWindow = getWindow(this.domNode.domNode);\n\t\tconst targetWindowId = getWindowId(targetWindow);\n\t\tif (this._targetWindowId !== targetWindowId) {\n\t\t\tthis.domNode.domNode.editContext = this._editContext;\n\t\t\tthis._targetWindowId = targetWindowId;\n\t\t}\n\t}\n\n\t// --- Private methods ---\n\n\tprivate _onKeyUp(e: KeyboardEvent) {\n\t\tinputLatency.onKeyUp();\n\t\tthis._viewController.emitKeyUp(new StandardKeyboardEvent(e));\n\t}\n\n\tprivate _onKeyDown(e: KeyboardEvent) {\n\t\tinputLatency.onKeyDown();\n\t\tconst standardKeyboardEvent = new StandardKeyboardEvent(e);\n\t\t// When the IME is visible, the keys, like arrow-left and arrow-right, should be used to navigate in the IME, and should not be propagated further\n\t\tif (standardKeyboardEvent.keyCode === KeyCode.KEY_IN_COMPOSITION) {\n\t\t\tstandardKeyboardEvent.stopPropagation();\n\t\t}\n\t\tthis._viewController.emitKeyDown(standardKeyboardEvent);\n\t}\n\n\tprivate _updateDomAttributes(): void {\n\t\tconst options = this._context.configuration.options;\n\t\tthis.domNode.domNode.setAttribute('tabindex', String(options.get(EditorOption.tabIndex)));\n\t}\n\n\tprivate _updateEditContext(): void {\n\t\tconst editContextState = this._getNewEditContextState();\n\t\tif (!editContextState) {\n\t\t\treturn;\n\t\t}\n\t\tthis._editContext.updateText(0, Number.MAX_SAFE_INTEGER, editContextState.text ?? ' ');\n\t\tthis._editContext.updateSelection(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t\tthis._editContextPrimarySelection = editContextState.editContextPrimarySelection;\n\t\tthis._previousEditContextSelection = new OffsetRange(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t}\n\n\tprivate _emitTypeEvent(viewController: ViewController, e: ITextUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionEndOffset = this._previousEditContextSelection.endExclusive;\n\t\tconst selectionStartOffset = this._previousEditContextSelection.start;\n\t\tthis._previousEditContextSelection = new OffsetRange(e.selectionStart, e.selectionEnd);\n\n\t\tlet replaceNextCharCnt = 0;\n\t\tlet replacePrevCharCnt = 0;\n\t\tif (e.updateRangeEnd > selectionEndOffset) {\n\t\t\treplaceNextCharCnt = e.updateRangeEnd - selectionEndOffset;\n\t\t}\n\t\tif (e.updateRangeStart < selectionStartOffset) {\n\t\t\treplacePrevCharCnt = selectionStartOffset - e.updateRangeStart;\n\t\t}\n\t\tlet text = '';\n\t\tif (selectionStartOffset < e.updateRangeStart) {\n\t\t\ttext += this._editContext.text.substring(selectionStartOffset, e.updateRangeStart);\n\t\t}\n\t\ttext += e.text;\n\t\tif (selectionEndOffset > e.updateRangeEnd) {\n\t\t\ttext += this._editContext.text.substring(e.updateRangeEnd, selectionEndOffset);\n\t\t}\n\t\tlet positionDelta = 0;\n\t\tif (e.selectionStart === e.selectionEnd && selectionStartOffset === selectionEndOffset) {\n\t\t\tpositionDelta = e.selectionStart - (e.updateRangeStart + e.text.length);\n\t\t}\n\t\tconst typeInput: ITypeData = {\n\t\t\ttext,\n\t\t\treplacePrevCharCnt,\n\t\t\treplaceNextCharCnt,\n\t\t\tpositionDelta\n\t\t};\n\t\tthis._onType(viewController, typeInput);\n\t}\n\n\tprivate _onType(viewController: ViewController, typeInput: ITypeData): void {\n\t\tif (typeInput.replacePrevCharCnt || typeInput.replaceNextCharCnt || typeInput.positionDelta) {\n\t\t\tviewController.compositionType(typeInput.text, typeInput.replacePrevCharCnt, typeInput.replaceNextCharCnt, typeInput.positionDelta);\n\t\t} else {\n\t\t\tviewController.type(typeInput.text);\n\t\t}\n\t}\n\n\tprivate _getNewEditContextState(): { text: string; selectionStartOffset: number; selectionEndOffset: number; editContextPrimarySelection: Selection } | undefined {\n\t\tconst editContextPrimarySelection = this._primarySelection;\n\t\tconst model = this._context.viewModel.model;\n\t\tif (!model.isValidRange(editContextPrimarySelection)) {\n\t\t\treturn;\n\t\t}\n\t\tconst primarySelectionStartLine = editContextPrimarySelection.startLineNumber;\n\t\tconst primarySelectionEndLine = editContextPrimarySelection.endLineNumber;\n\t\tconst endColumnOfEndLineNumber = model.getLineMaxColumn(primarySelectionEndLine);\n\t\tconst rangeOfText = new Range(primarySelectionStartLine, 1, primarySelectionEndLine, endColumnOfEndLineNumber);\n\t\tconst text = model.getValueInRange(rangeOfText, EndOfLinePreference.TextDefined);\n\t\tconst selectionStartOffset = editContextPrimarySelection.startColumn - 1;\n\t\tconst selectionEndOffset = text.length + editContextPrimarySelection.endColumn - endColumnOfEndLineNumber;\n\t\treturn {\n\t\t\ttext,\n\t\t\tselectionStartOffset,\n\t\t\tselectionEndOffset,\n\t\t\teditContextPrimarySelection\n\t\t};\n\t}\n\n\tprivate _editContextStartPosition(): Position {\n\t\treturn new Position(this._editContextPrimarySelection.startLineNumber, 1);\n\t}\n\n\tprivate _handleTextFormatUpdate(e: TextFormatUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst formats = e.getTextFormats();\n\t\tconst editContextStartPosition = this._editContextStartPosition();\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\t\tformats.forEach(f => {\n\t\t\tconst textModel = this._context.viewModel.model;\n\t\t\tconst offsetOfEditContextText = textModel.getOffsetAt(editContextStartPosition);\n\t\t\tconst startPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeStart);\n\t\t\tconst endPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeEnd);\n\t\t\tconst decorationRange = Range.fromPositions(startPositionOfDecoration, endPositionOfDecoration);\n\t\t\tconst thickness = f.underlineThickness.toLowerCase();\n\t\t\tlet decorationClassName: string = CompositionClassName.NONE;\n\t\t\tswitch (thickness) {\n\t\t\t\tcase 'thin':\n\t\t\t\t\tdecorationClassName = CompositionClassName.SECONDARY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'thick':\n\t\t\t\t\tdecorationClassName = CompositionClassName.PRIMARY;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdecorations.push({\n\t\t\t\trange: decorationRange,\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'textFormatDecoration',\n\t\t\t\t\tinlineClassName: decorationClassName,\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._decorations = this._context.viewModel.model.deltaDecorations(this._decorations, decorations);\n\t}\n\n\tprivate _linesVisibleRanges: HorizontalPosition | null = null;\n\tprivate _updateSelectionAndControlBoundsData(ctx: RenderingContext): void {\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tconst linesVisibleRanges = ctx.visibleRangeForPosition(viewSelection.getStartPosition());\n\t\t\tthis._linesVisibleRanges = linesVisibleRanges;\n\t\t} else {\n\t\t\tthis._linesVisibleRanges = null;\n\t\t}\n\t}\n\n\tprivate _updateSelectionAndControlBoundsAfterRender() {\n\t\tconst options = this._context.configuration.options;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tconst verticalOffsetStart = this._context.viewLayout.getVerticalOffsetForLineNumber(viewSelection.startLineNumber);\n\t\tconst verticalOffsetEnd = this._context.viewLayout.getVerticalOffsetAfterLineNumber(viewSelection.endLineNumber);\n\n\t\t// Make sure this doesn't force an extra layout (i.e. don't call it before rendering finished)\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\t\tconst top = parentBounds.top + verticalOffsetStart - this._scrollTop;\n\t\tconst height = verticalOffsetEnd - verticalOffsetStart;\n\t\tlet left = parentBounds.left + contentLeft - this._scrollLeft;\n\t\tlet width: number;\n\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tif (this._linesVisibleRanges) {\n\t\t\t\tleft += this._linesVisibleRanges.left;\n\t\t\t}\n\t\t\twidth = 0;\n\t\t} else {\n\t\t\twidth = parentBounds.width - contentLeft;\n\t\t}\n\n\t\tconst selectionBounds = new DOMRect(left, top, width, height);\n\t\tthis._editContext.updateSelectionBounds(selectionBounds);\n\t\tthis._editContext.updateControlBounds(selectionBounds);\n\t}\n\n\tprivate _updateCharacterBounds(e: CharacterBoundsUpdateEvent): void {\n\t\tconst options = this._context.configuration.options;\n\t\tconst typicalHalfWidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\n\t\tconst characterBounds: DOMRect[] = [];\n\t\tconst offsetTransformer = new PositionOffsetTransformer(this._editContext.text);\n\t\tfor (let offset = e.rangeStart; offset < e.rangeEnd; offset++) {\n\t\t\tconst editContextStartPosition = offsetTransformer.getPosition(offset);\n\t\t\tconst textStartLineOffsetWithinEditor = this._editContextPrimarySelection.startLineNumber - 1;\n\t\t\tconst characterStartPosition = new Position(textStartLineOffsetWithinEditor + editContextStartPosition.lineNumber, editContextStartPosition.column);\n\t\t\tconst characterEndPosition = characterStartPosition.delta(0, 1);\n\t\t\tconst characterModelRange = Range.fromPositions(characterStartPosition, characterEndPosition);\n\t\t\tconst characterViewRange = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(characterModelRange);\n\t\t\tconst characterLinesVisibleRanges = this._visibleRangeProvider.linesVisibleRangesForRange(characterViewRange, true) ?? [];\n\t\t\tconst lineNumber = characterViewRange.startLineNumber;\n\t\t\tconst characterVerticalOffset = this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n\t\t\tconst top = parentBounds.top + characterVerticalOffset - this._scrollTop;\n\n\t\t\tlet left = 0;\n\t\t\tlet width = typicalHalfWidthCharacterWidth;\n\t\t\tif (characterLinesVisibleRanges.length > 0) {\n\t\t\t\tfor (const visibleRange of characterLinesVisibleRanges[0].ranges) {\n\t\t\t\t\tleft = visibleRange.left;\n\t\t\t\t\twidth = visibleRange.width;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lineHeight = this._context.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t\t\tcharacterBounds.push(new DOMRect(parentBounds.left + contentLeft + left - this._scrollLeft, top, width, lineHeight));\n\t\t}\n\t\tthis._editContext.updateCharacterBounds(e.rangeStart, characterBounds);\n\t}\n\n\tprivate _ensureClipboardGetsEditorSelection(e: ClipboardEvent): void {\n\t\tconst options = this._context.configuration.options;\n\t\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\t\tconst copyWithSyntaxHighlighting = options.get(EditorOption.copyWithSyntaxHighlighting);\n\t\tconst selections = this._context.viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\t\tconst dataToCopy = getDataToCopy(this._context.viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\t\tlet id = undefined;\n\t\tif (this.logService.getLevel() === LogLevel.Trace) {\n\t\t\tid = generateUuid();\n\t\t}\n\t\tconst storedMetadata: ClipboardStoredMetadata = {\n\t\t\tversion: 1,\n\t\t\tid,\n\t\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\t\tmulticursorText: dataToCopy.multicursorText,\n\t\t\tmode: dataToCopy.mode\n\t\t};\n\t\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t\t(isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text),\n\t\t\tstoredMetadata\n\t\t);\n\t\te.preventDefault();\n\t\tif (e.clipboardData) {\n\t\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, storedMetadata);\n\t\t}\n\t\tthis.logService.trace('NativeEditContext#_ensureClipboardGetsEditorSelectios with id : ', id, ' with text.length: ', dataToCopy.text.length);\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 './nativeEditContext.css';\nimport { isFirefox } from '../../../../../base/browser/browser.js';\nimport { addDisposableListener, getActiveElement, getWindow, getWindowId } from '../../../../../base/browser/dom.js';\nimport { FastDomNode } from '../../../../../base/browser/fastDomNode.js';\nimport { StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js';\nimport { KeyCode } from '../../../../../base/common/keyCodes.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { EndOfLinePreference, IModelDeltaDecoration } from '../../../../common/model.js';\nimport { ViewConfigurationChangedEvent, ViewCursorStateChangedEvent, ViewDecorationsChangedEvent, ViewFlushedEvent, ViewLinesChangedEvent, ViewLinesDeletedEvent, ViewLinesInsertedEvent, ViewScrollChangedEvent, ViewZonesChangedEvent } from '../../../../common/viewEvents.js';\nimport { ViewContext } from '../../../../common/viewModel/viewContext.js';\nimport { RestrictedRenderingContext, RenderingContext, HorizontalPosition } from '../../../view/renderingContext.js';\nimport { ViewController } from '../../../view/viewController.js';\nimport { ClipboardEventUtils, ClipboardStoredMetadata, getDataToCopy, InMemoryClipboardMetadataManager } from '../clipboardUtils.js';\nimport { AbstractEditContext } from '../editContext.js';\nimport { editContextAddDisposableListener, FocusTracker, ITypeData } from './nativeEditContextUtils.js';\nimport { ScreenReaderSupport } from './screenReaderSupport.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { Selection } from '../../../../common/core/selection.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { IVisibleRangeProvider } from '../textArea/textAreaEditContext.js';\nimport { PositionOffsetTransformer } from '../../../../common/core/text/positionToOffset.js';\nimport { EditContext } from './editContextFactory.js';\nimport { NativeEditContextRegistry } from './nativeEditContextRegistry.js';\nimport { IEditorAriaOptions } from '../../../editorBrowser.js';\nimport { isHighSurrogate, isLowSurrogate } from '../../../../../base/common/strings.js';\nimport { IME } from '../../../../../base/common/ime.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { ILogService, LogLevel } from '../../../../../platform/log/common/log.js';\nimport { generateUuid } from '../../../../../base/common/uuid.js';\nimport { inputLatency } from '../../../../../base/browser/performance.js';\n\n// Corresponds to classes in nativeEditContext.css\nenum CompositionClassName {\n\tNONE = 'edit-context-composition-none',\n\tSECONDARY = 'edit-context-composition-secondary',\n\tPRIMARY = 'edit-context-composition-primary',\n}\n\ninterface ITextUpdateEvent {\n\ttext: string;\n\tselectionStart: number;\n\tselectionEnd: number;\n\tupdateRangeStart: number;\n\tupdateRangeEnd: number;\n}\n\nexport class NativeEditContext extends AbstractEditContext {\n\n\t// Text area used to handle paste events\n\tpublic readonly domNode: FastDomNode<HTMLDivElement>;\n\tprivate readonly _imeTextArea: FastDomNode<HTMLTextAreaElement>;\n\tprivate readonly _editContext: EditContext;\n\tprivate readonly _screenReaderSupport: ScreenReaderSupport;\n\tprivate _previousEditContextSelection: OffsetRange = new OffsetRange(0, 0);\n\tprivate _editContextPrimarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\t// Overflow guard container\n\tprivate readonly _parent: HTMLElement;\n\tprivate _decorations: string[] = [];\n\tprivate _primarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\n\tprivate _targetWindowId: number = -1;\n\tprivate _scrollTop: number = 0;\n\tprivate _scrollLeft: number = 0;\n\n\tprivate readonly _focusTracker: FocusTracker;\n\n\tconstructor(\n\t\townerID: string,\n\t\tcontext: ViewContext,\n\t\toverflowGuardContainer: FastDomNode<HTMLElement>,\n\t\tprivate readonly _viewController: ViewController,\n\t\tprivate readonly _visibleRangeProvider: IVisibleRangeProvider,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ILogService private readonly logService: ILogService\n\t) {\n\t\tsuper(context);\n\n\t\tthis.domNode = new FastDomNode(document.createElement('div'));\n\t\tthis.domNode.setClassName(`native-edit-context`);\n\t\tthis._imeTextArea = new FastDomNode(document.createElement('textarea'));\n\t\tthis._imeTextArea.setClassName(`ime-text-area`);\n\t\tthis._imeTextArea.setAttribute('readonly', 'true');\n\t\tthis._imeTextArea.setAttribute('tabindex', '-1');\n\t\tthis._imeTextArea.setAttribute('aria-hidden', 'true');\n\t\tthis.domNode.setAttribute('autocorrect', 'off');\n\t\tthis.domNode.setAttribute('autocapitalize', 'off');\n\t\tthis.domNode.setAttribute('autocomplete', 'off');\n\t\tthis.domNode.setAttribute('spellcheck', 'false');\n\n\t\tthis._updateDomAttributes();\n\n\t\toverflowGuardContainer.appendChild(this.domNode);\n\t\toverflowGuardContainer.appendChild(this._imeTextArea);\n\t\tthis._parent = overflowGuardContainer.domNode;\n\n\t\tthis._focusTracker = this._register(new FocusTracker(logService, this.domNode.domNode, (newFocusValue: boolean) => {\n\t\t\tlogService.trace('NativeEditContext#handleFocusChange : ', newFocusValue);\n\t\t\tthis._screenReaderSupport.handleFocusChange(newFocusValue);\n\t\t\tthis._context.viewModel.setHasFocus(newFocusValue);\n\t\t}));\n\n\t\tconst window = getWindow(this.domNode.domNode);\n\t\tthis._editContext = EditContext.create(window);\n\t\tthis.setEditContextOnDomNode();\n\n\t\tthis._screenReaderSupport = this._register(instantiationService.createInstance(ScreenReaderSupport, this.domNode, context, this._viewController));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'copy', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#copy');\n\t\t\tthis._ensureClipboardGetsEditorSelection(e);\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'cut', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#cut');\n\t\t\t// Pretend here we touched the text area, as the `cut` event will most likely\n\t\t\t// result in a `selectionchange` event which we want to ignore\n\t\t\tthis._screenReaderSupport.onWillCut();\n\t\t\tthis._ensureClipboardGetsEditorSelection(e);\n\t\t\tthis.logService.trace('NativeEditContext#cut (before viewController.cut)');\n\t\t\tthis._viewController.cut();\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'selectionchange', () => {\n\t\t\tinputLatency.onSelectionChange();\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'beforeinput', async (e) => {\n\t\t\tinputLatency.onBeforeInput();\n\t\t\tif (e.inputType === 'insertParagraph' || e.inputType === 'insertLineBreak') {\n\t\t\t\tthis._onType(this._viewController, { text: '\\n', replacePrevCharCnt: 0, replaceNextCharCnt: 0, positionDelta: 0 });\n\t\t\t}\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'paste', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#paste');\n\t\t\te.preventDefault();\n\t\t\tif (!e.clipboardData) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet [text, metadata] = ClipboardEventUtils.getTextData(e.clipboardData);\n\t\t\tthis.logService.trace('NativeEditContext#paste with id : ', metadata?.id, ' with text.length: ', text.length);\n\t\t\tif (!text) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\t\t\tlet pasteOnNewLine = false;\n\t\t\tlet multicursorText: string[] | null = null;\n\t\t\tlet mode: string | null = null;\n\t\t\tif (metadata) {\n\t\t\t\tconst options = this._context.configuration.options;\n\t\t\t\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\t\t\t\tpasteOnNewLine = emptySelectionClipboard && !!metadata.isFromEmptySelection;\n\t\t\t\tmulticursorText = typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null;\n\t\t\t\tmode = metadata.mode;\n\t\t\t}\n\t\t\tthis.logService.trace('NativeEditContext#paste (before viewController.paste)');\n\t\t\tthis._viewController.paste(text, pasteOnNewLine, multicursorText, mode);\n\t\t}));\n\n\t\t// Edit context events\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textformatupdate', (e) => this._handleTextFormatUpdate(e)));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'characterboundsupdate', (e) => this._updateCharacterBounds(e)));\n\t\tlet highSurrogateCharacter: string | undefined;\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textupdate', (e) => {\n\t\t\tinputLatency.onInput();\n\t\t\tconst text = e.text;\n\t\t\tif (text.length === 1) {\n\t\t\t\tconst charCode = text.charCodeAt(0);\n\t\t\t\tif (isHighSurrogate(charCode)) {\n\t\t\t\t\thighSurrogateCharacter = text;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isLowSurrogate(charCode) && highSurrogateCharacter) {\n\t\t\t\t\tconst textUpdateEvent: ITextUpdateEvent = {\n\t\t\t\t\t\ttext: highSurrogateCharacter + text,\n\t\t\t\t\t\tselectionEnd: e.selectionEnd,\n\t\t\t\t\t\tselectionStart: e.selectionStart,\n\t\t\t\t\t\tupdateRangeStart: e.updateRangeStart - 1,\n\t\t\t\t\t\tupdateRangeEnd: e.updateRangeEnd - 1\n\t\t\t\t\t};\n\t\t\t\t\thighSurrogateCharacter = undefined;\n\t\t\t\t\tthis._emitTypeEvent(this._viewController, textUpdateEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._emitTypeEvent(this._viewController, e);\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionstart', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires onDidCompositionStart() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionStart();\n\t\t\t// Emits ViewCompositionStartEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionStart();\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionend', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires compositionEnd() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionEnd();\n\t\t\t// Emits ViewCompositionEndEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionEnd();\n\t\t}));\n\t\tlet reenableTracking: boolean = false;\n\t\tthis._register(IME.onDidChange(() => {\n\t\t\tif (IME.enabled && reenableTracking) {\n\t\t\t\tthis._focusTracker.resume();\n\t\t\t\tthis.domNode.focus();\n\t\t\t\treenableTracking = false;\n\t\t\t}\n\t\t\tif (!IME.enabled && this.isFocused()) {\n\t\t\t\tthis._focusTracker.pause();\n\t\t\t\tthis._imeTextArea.focus();\n\t\t\t\treenableTracking = true;\n\t\t\t}\n\t\t}));\n\t\tthis._register(NativeEditContextRegistry.register(ownerID, this));\n\t}\n\n\t// --- Public methods ---\n\n\tpublic override dispose(): void {\n\t\t// Force blue the dom node so can write in pane with no native edit context after disposal\n\t\tthis.domNode.domNode.editContext = undefined;\n\t\tthis.domNode.domNode.blur();\n\t\tthis.domNode.domNode.remove();\n\t\tthis._imeTextArea.domNode.remove();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setAriaOptions(options: IEditorAriaOptions): void {\n\t\tthis._screenReaderSupport.setAriaOptions(options);\n\t}\n\n\t/* Last rendered data needed for correct hit-testing and determining the mouse position.\n\t * Without this, the selection will blink as incorrect mouse position is calculated */\n\tpublic getLastRenderData(): Position | null {\n\t\treturn this._primarySelection.getPosition();\n\t}\n\n\tpublic override prepareRender(ctx: RenderingContext): void {\n\t\tthis._screenReaderSupport.prepareRender(ctx);\n\t\tthis._updateSelectionAndControlBoundsData(ctx);\n\t}\n\n\tpublic override onDidRender(): void {\n\t\tthis._updateSelectionAndControlBoundsAfterRender();\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._screenReaderSupport.render(ctx);\n\t}\n\n\tpublic override onCursorStateChanged(e: ViewCursorStateChangedEvent): boolean {\n\t\tthis._primarySelection = e.modelSelections[0] ?? new Selection(1, 1, 1, 1);\n\t\tthis._screenReaderSupport.onCursorStateChanged(e);\n\t\tthis._updateEditContext();\n\t\treturn true;\n\t}\n\n\tpublic override onConfigurationChanged(e: ViewConfigurationChangedEvent): boolean {\n\t\tthis._screenReaderSupport.onConfigurationChanged(e);\n\t\tthis._updateDomAttributes();\n\t\treturn true;\n\t}\n\n\tpublic override onDecorationsChanged(e: ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;\n\t}\n\n\tpublic override onFlushed(e: ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic override onLinesChanged(e: ViewLinesChangedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.fromLineNumber + e.count - 1);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesDeleted(e: ViewLinesDeletedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesInserted(e: ViewLinesInsertedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tprivate _updateEditContextOnLineChange(fromLineNumber: number, toLineNumber: number): void {\n\t\tif (this._editContextPrimarySelection.endLineNumber < fromLineNumber || this._editContextPrimarySelection.startLineNumber > toLineNumber) {\n\t\t\treturn;\n\t\t}\n\t\tthis._updateEditContext();\n\t}\n\n\tpublic override onScrollChanged(e: ViewScrollChangedEvent): boolean {\n\t\tthis._scrollLeft = e.scrollLeft;\n\t\tthis._scrollTop = e.scrollTop;\n\t\treturn true;\n\t}\n\n\tpublic override onZonesChanged(e: ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onWillPaste(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillPaste');\n\t\tthis._onWillPaste();\n\t}\n\n\tprivate _onWillPaste(): void {\n\t\tthis._screenReaderSupport.onWillPaste();\n\t}\n\n\tpublic onWillCopy(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillCopy');\n\t\tthis.logService.trace('NativeEditContext#isFocused : ', this.domNode.domNode === getActiveElement());\n\t}\n\n\tpublic writeScreenReaderContent(): void {\n\t\tthis._screenReaderSupport.writeScreenReaderContent();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this._focusTracker.isFocused;\n\t}\n\n\tpublic focus(): void {\n\t\tthis._focusTracker.focus();\n\n\t\t// If the editor is off DOM, focus cannot be really set, so let's double check that we have managed to set the focus\n\t\tthis.refreshFocusState();\n\t}\n\n\tpublic refreshFocusState(): void {\n\t\tthis._focusTracker.refreshFocusState();\n\t}\n\n\t// TODO: added as a workaround fix for https://github.com/microsoft/vscode/issues/229825\n\t// When this issue will be fixed the following should be removed.\n\tpublic setEditContextOnDomNode(): void {\n\t\tconst targetWindow = getWindow(this.domNode.domNode);\n\t\tconst targetWindowId = getWindowId(targetWindow);\n\t\tif (this._targetWindowId !== targetWindowId) {\n\t\t\tthis.domNode.domNode.editContext = this._editContext;\n\t\t\tthis._targetWindowId = targetWindowId;\n\t\t}\n\t}\n\n\t// --- Private methods ---\n\n\tprivate _onKeyUp(e: KeyboardEvent) {\n\t\tinputLatency.onKeyUp();\n\t\tthis._viewController.emitKeyUp(new StandardKeyboardEvent(e));\n\t}\n\n\tprivate _onKeyDown(e: KeyboardEvent) {\n\t\tinputLatency.onKeyDown();\n\t\tconst standardKeyboardEvent = new StandardKeyboardEvent(e);\n\t\t// When the IME is visible, the keys, like arrow-left and arrow-right, should be used to navigate in the IME, and should not be propagated further\n\t\tif (standardKeyboardEvent.keyCode === KeyCode.KEY_IN_COMPOSITION) {\n\t\t\tstandardKeyboardEvent.stopPropagation();\n\t\t}\n\t\tthis._viewController.emitKeyDown(standardKeyboardEvent);\n\t}\n\n\tprivate _updateDomAttributes(): void {\n\t\tconst options = this._context.configuration.options;\n\t\tthis.domNode.domNode.setAttribute('tabindex', String(options.get(EditorOption.tabIndex)));\n\t}\n\n\tprivate _updateEditContext(): void {\n\t\tconst editContextState = this._getNewEditContextState();\n\t\tif (!editContextState) {\n\t\t\treturn;\n\t\t}\n\t\tthis._editContext.updateText(0, Number.MAX_SAFE_INTEGER, editContextState.text ?? ' ');\n\t\tthis._editContext.updateSelection(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t\tthis._editContextPrimarySelection = editContextState.editContextPrimarySelection;\n\t\tthis._previousEditContextSelection = new OffsetRange(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t}\n\n\tprivate _emitTypeEvent(viewController: ViewController, e: ITextUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionEndOffset = this._previousEditContextSelection.endExclusive;\n\t\tconst selectionStartOffset = this._previousEditContextSelection.start;\n\t\tthis._previousEditContextSelection = new OffsetRange(e.selectionStart, e.selectionEnd);\n\n\t\tlet replaceNextCharCnt = 0;\n\t\tlet replacePrevCharCnt = 0;\n\t\tif (e.updateRangeEnd > selectionEndOffset) {\n\t\t\treplaceNextCharCnt = e.updateRangeEnd - selectionEndOffset;\n\t\t}\n\t\tif (e.updateRangeStart < selectionStartOffset) {\n\t\t\treplacePrevCharCnt = selectionStartOffset - e.updateRangeStart;\n\t\t}\n\t\tlet text = '';\n\t\tif (selectionStartOffset < e.updateRangeStart) {\n\t\t\ttext += this._editContext.text.substring(selectionStartOffset, e.updateRangeStart);\n\t\t}\n\t\ttext += e.text;\n\t\tif (selectionEndOffset > e.updateRangeEnd) {\n\t\t\ttext += this._editContext.text.substring(e.updateRangeEnd, selectionEndOffset);\n\t\t}\n\t\tlet positionDelta = 0;\n\t\tif (e.selectionStart === e.selectionEnd && selectionStartOffset === selectionEndOffset) {\n\t\t\tpositionDelta = e.selectionStart - (e.updateRangeStart + e.text.length);\n\t\t}\n\t\tconst typeInput: ITypeData = {\n\t\t\ttext,\n\t\t\treplacePrevCharCnt,\n\t\t\treplaceNextCharCnt,\n\t\t\tpositionDelta\n\t\t};\n\t\tthis._onType(viewController, typeInput);\n\t}\n\n\tprivate _onType(viewController: ViewController, typeInput: ITypeData): void {\n\t\tif (typeInput.replacePrevCharCnt || typeInput.replaceNextCharCnt || typeInput.positionDelta) {\n\t\t\tviewController.compositionType(typeInput.text, typeInput.replacePrevCharCnt, typeInput.replaceNextCharCnt, typeInput.positionDelta);\n\t\t} else {\n\t\t\tviewController.type(typeInput.text);\n\t\t}\n\t}\n\n\tprivate _getNewEditContextState(): { text: string; selectionStartOffset: number; selectionEndOffset: number; editContextPrimarySelection: Selection } | undefined {\n\t\tconst editContextPrimarySelection = this._primarySelection;\n\t\tconst model = this._context.viewModel.model;\n\t\tif (!model.isValidRange(editContextPrimarySelection)) {\n\t\t\treturn;\n\t\t}\n\t\tconst primarySelectionStartLine = editContextPrimarySelection.startLineNumber;\n\t\tconst primarySelectionEndLine = editContextPrimarySelection.endLineNumber;\n\t\tconst endColumnOfEndLineNumber = model.getLineMaxColumn(primarySelectionEndLine);\n\t\tconst rangeOfText = new Range(primarySelectionStartLine, 1, primarySelectionEndLine, endColumnOfEndLineNumber);\n\t\tconst text = model.getValueInRange(rangeOfText, EndOfLinePreference.TextDefined);\n\t\tconst selectionStartOffset = editContextPrimarySelection.startColumn - 1;\n\t\tconst selectionEndOffset = text.length + editContextPrimarySelection.endColumn - endColumnOfEndLineNumber;\n\t\treturn {\n\t\t\ttext,\n\t\t\tselectionStartOffset,\n\t\t\tselectionEndOffset,\n\t\t\teditContextPrimarySelection\n\t\t};\n\t}\n\n\tprivate _editContextStartPosition(): Position {\n\t\treturn new Position(this._editContextPrimarySelection.startLineNumber, 1);\n\t}\n\n\tprivate _handleTextFormatUpdate(e: TextFormatUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst formats = e.getTextFormats();\n\t\tconst editContextStartPosition = this._editContextStartPosition();\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\t\tformats.forEach(f => {\n\t\t\tconst textModel = this._context.viewModel.model;\n\t\t\tconst offsetOfEditContextText = textModel.getOffsetAt(editContextStartPosition);\n\t\t\tconst startPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeStart);\n\t\t\tconst endPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeEnd);\n\t\t\tconst decorationRange = Range.fromPositions(startPositionOfDecoration, endPositionOfDecoration);\n\t\t\tconst thickness = f.underlineThickness.toLowerCase();\n\t\t\tlet decorationClassName: string = CompositionClassName.NONE;\n\t\t\tswitch (thickness) {\n\t\t\t\tcase 'thin':\n\t\t\t\t\tdecorationClassName = CompositionClassName.SECONDARY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'thick':\n\t\t\t\t\tdecorationClassName = CompositionClassName.PRIMARY;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdecorations.push({\n\t\t\t\trange: decorationRange,\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'textFormatDecoration',\n\t\t\t\t\tinlineClassName: decorationClassName,\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._decorations = this._context.viewModel.model.deltaDecorations(this._decorations, decorations);\n\t}\n\n\tprivate _linesVisibleRanges: HorizontalPosition | null = null;\n\tprivate _updateSelectionAndControlBoundsData(ctx: RenderingContext): void {\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tconst linesVisibleRanges = ctx.visibleRangeForPosition(viewSelection.getStartPosition());\n\t\t\tthis._linesVisibleRanges = linesVisibleRanges;\n\t\t} else {\n\t\t\tthis._linesVisibleRanges = null;\n\t\t}\n\t}\n\n\tprivate _updateSelectionAndControlBoundsAfterRender() {\n\t\tconst options = this._context.configuration.options;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tconst verticalOffsetStart = this._context.viewLayout.getVerticalOffsetForLineNumber(viewSelection.startLineNumber);\n\t\tconst verticalOffsetEnd = this._context.viewLayout.getVerticalOffsetAfterLineNumber(viewSelection.endLineNumber);\n\n\t\t// Make sure this doesn't force an extra layout (i.e. don't call it before rendering finished)\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\t\tconst top = parentBounds.top + verticalOffsetStart - this._scrollTop;\n\t\tconst height = verticalOffsetEnd - verticalOffsetStart;\n\t\tlet left = parentBounds.left + contentLeft - this._scrollLeft;\n\t\tlet width: number;\n\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tif (this._linesVisibleRanges) {\n\t\t\t\tleft += this._linesVisibleRanges.left;\n\t\t\t}\n\t\t\twidth = 0;\n\t\t} else {\n\t\t\twidth = parentBounds.width - contentLeft;\n\t\t}\n\n\t\tconst selectionBounds = new DOMRect(left, top, width, height);\n\t\tthis._editContext.updateSelectionBounds(selectionBounds);\n\t\tthis._editContext.updateControlBounds(selectionBounds);\n\t}\n\n\tprivate _updateCharacterBounds(e: CharacterBoundsUpdateEvent): void {\n\t\tconst options = this._context.configuration.options;\n\t\tconst typicalHalfWidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\n\t\tconst characterBounds: DOMRect[] = [];\n\t\tconst offsetTransformer = new PositionOffsetTransformer(this._editContext.text);\n\t\tfor (let offset = e.rangeStart; offset < e.rangeEnd; offset++) {\n\t\t\tconst editContextStartPosition = offsetTransformer.getPosition(offset);\n\t\t\tconst textStartLineOffsetWithinEditor = this._editContextPrimarySelection.startLineNumber - 1;\n\t\t\tconst characterStartPosition = new Position(textStartLineOffsetWithinEditor + editContextStartPosition.lineNumber, editContextStartPosition.column);\n\t\t\tconst characterEndPosition = characterStartPosition.delta(0, 1);\n\t\t\tconst characterModelRange = Range.fromPositions(characterStartPosition, characterEndPosition);\n\t\t\tconst characterViewRange = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(characterModelRange);\n\t\t\tconst characterLinesVisibleRanges = this._visibleRangeProvider.linesVisibleRangesForRange(characterViewRange, true) ?? [];\n\t\t\tconst lineNumber = characterViewRange.startLineNumber;\n\t\t\tconst characterVerticalOffset = this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n\t\t\tconst top = parentBounds.top + characterVerticalOffset - this._scrollTop;\n\n\t\t\tlet left = 0;\n\t\t\tlet width = typicalHalfWidthCharacterWidth;\n\t\t\tif (characterLinesVisibleRanges.length > 0) {\n\t\t\t\tfor (const visibleRange of characterLinesVisibleRanges[0].ranges) {\n\t\t\t\t\tleft = visibleRange.left;\n\t\t\t\t\twidth = visibleRange.width;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lineHeight = this._context.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t\t\tcharacterBounds.push(new DOMRect(parentBounds.left + contentLeft + left - this._scrollLeft, top, width, lineHeight));\n\t\t}\n\t\tthis._editContext.updateCharacterBounds(e.rangeStart, characterBounds);\n\t}\n\n\tprivate _ensureClipboardGetsEditorSelection(e: ClipboardEvent): void {\n\t\tconst options = this._context.configuration.options;\n\t\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\t\tconst copyWithSyntaxHighlighting = options.get(EditorOption.copyWithSyntaxHighlighting);\n\t\tconst selections = this._context.viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\t\tconst dataToCopy = getDataToCopy(this._context.viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\t\tlet id = undefined;\n\t\tif (this.logService.getLevel() === LogLevel.Trace) {\n\t\t\tid = generateUuid();\n\t\t}\n\t\tconst storedMetadata: ClipboardStoredMetadata = {\n\t\t\tversion: 1,\n\t\t\tid,\n\t\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\t\tmulticursorText: dataToCopy.multicursorText,\n\t\t\tmode: dataToCopy.mode\n\t\t};\n\t\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t\t(isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text),\n\t\t\tstoredMetadata\n\t\t);\n\t\te.preventDefault();\n\t\tif (e.clipboardData) {\n\t\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, storedMetadata);\n\t\t}\n\t\tthis.logService.trace('NativeEditContext#_ensureClipboardGetsEditorSelectios with id : ', id, ' with text.length: ', dataToCopy.text.length);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts","vs/editor/browser/controller/editContext/native/nativeEditContext.ts"],"names":[],"mappings":"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","file":"nativeEditContext.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 './nativeEditContext.css';\nimport { isFirefox } from '../../../../../base/browser/browser.js';\nimport { addDisposableListener, getActiveElement, getWindow, getWindowId } from '../../../../../base/browser/dom.js';\nimport { FastDomNode } from '../../../../../base/browser/fastDomNode.js';\nimport { StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js';\nimport { KeyCode } from '../../../../../base/common/keyCodes.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { EndOfLinePreference, IModelDeltaDecoration } from '../../../../common/model.js';\nimport { ViewConfigurationChangedEvent, ViewCursorStateChangedEvent, ViewDecorationsChangedEvent, ViewFlushedEvent, ViewLinesChangedEvent, ViewLinesDeletedEvent, ViewLinesInsertedEvent, ViewScrollChangedEvent, ViewZonesChangedEvent } from '../../../../common/viewEvents.js';\nimport { ViewContext } from '../../../../common/viewModel/viewContext.js';\nimport { RestrictedRenderingContext, RenderingContext, HorizontalPosition } from '../../../view/renderingContext.js';\nimport { ViewController } from '../../../view/viewController.js';\nimport { ensureClipboardGetsEditorSelection, computePasteData } from '../clipboardUtils.js';\nimport { AbstractEditContext } from '../editContext.js';\nimport { editContextAddDisposableListener, FocusTracker, ITypeData } from './nativeEditContextUtils.js';\nimport { ScreenReaderSupport } from './screenReaderSupport.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { Selection } from '../../../../common/core/selection.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { IVisibleRangeProvider } from '../textArea/textAreaEditContext.js';\nimport { PositionOffsetTransformer } from '../../../../common/core/text/positionToOffset.js';\nimport { EditContext } from './editContextFactory.js';\nimport { NativeEditContextRegistry } from './nativeEditContextRegistry.js';\nimport { IEditorAriaOptions } from '../../../editorBrowser.js';\nimport { isHighSurrogate, isLowSurrogate } from '../../../../../base/common/strings.js';\nimport { IME } from '../../../../../base/common/ime.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { ILogService } from '../../../../../platform/log/common/log.js';\nimport { inputLatency } from '../../../../../base/browser/performance.js';\n\n// Corresponds to classes in nativeEditContext.css\nenum CompositionClassName {\n\tNONE = 'edit-context-composition-none',\n\tSECONDARY = 'edit-context-composition-secondary',\n\tPRIMARY = 'edit-context-composition-primary',\n}\n\ninterface ITextUpdateEvent {\n\ttext: string;\n\tselectionStart: number;\n\tselectionEnd: number;\n\tupdateRangeStart: number;\n\tupdateRangeEnd: number;\n}\n\nexport class NativeEditContext extends AbstractEditContext {\n\n\t// Text area used to handle paste events\n\tpublic readonly domNode: FastDomNode<HTMLDivElement>;\n\tprivate readonly _imeTextArea: FastDomNode<HTMLTextAreaElement>;\n\tprivate readonly _editContext: EditContext;\n\tprivate readonly _screenReaderSupport: ScreenReaderSupport;\n\tprivate _previousEditContextSelection: OffsetRange = new OffsetRange(0, 0);\n\tprivate _editContextPrimarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\t// Overflow guard container\n\tprivate readonly _parent: HTMLElement;\n\tprivate _decorations: string[] = [];\n\tprivate _primarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\n\tprivate _targetWindowId: number = -1;\n\tprivate _scrollTop: number = 0;\n\tprivate _scrollLeft: number = 0;\n\n\tprivate readonly _focusTracker: FocusTracker;\n\n\tconstructor(\n\t\townerID: string,\n\t\tcontext: ViewContext,\n\t\toverflowGuardContainer: FastDomNode<HTMLElement>,\n\t\tprivate readonly _viewController: ViewController,\n\t\tprivate readonly _visibleRangeProvider: IVisibleRangeProvider,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ILogService private readonly logService: ILogService\n\t) {\n\t\tsuper(context);\n\n\t\tthis.domNode = new FastDomNode(document.createElement('div'));\n\t\tthis.domNode.setClassName(`native-edit-context`);\n\t\tthis._imeTextArea = new FastDomNode(document.createElement('textarea'));\n\t\tthis._imeTextArea.setClassName(`ime-text-area`);\n\t\tthis._imeTextArea.setAttribute('readonly', 'true');\n\t\tthis._imeTextArea.setAttribute('tabindex', '-1');\n\t\tthis._imeTextArea.setAttribute('aria-hidden', 'true');\n\t\tthis.domNode.setAttribute('autocorrect', 'off');\n\t\tthis.domNode.setAttribute('autocapitalize', 'off');\n\t\tthis.domNode.setAttribute('autocomplete', 'off');\n\t\tthis.domNode.setAttribute('spellcheck', 'false');\n\n\t\tthis._updateDomAttributes();\n\n\t\toverflowGuardContainer.appendChild(this.domNode);\n\t\toverflowGuardContainer.appendChild(this._imeTextArea);\n\t\tthis._parent = overflowGuardContainer.domNode;\n\n\t\tthis._focusTracker = this._register(new FocusTracker(logService, this.domNode.domNode, (newFocusValue: boolean) => {\n\t\t\tlogService.trace('NativeEditContext#handleFocusChange : ', newFocusValue);\n\t\t\tthis._screenReaderSupport.handleFocusChange(newFocusValue);\n\t\t\tthis._context.viewModel.setHasFocus(newFocusValue);\n\t\t}));\n\n\t\tconst window = getWindow(this.domNode.domNode);\n\t\tthis._editContext = EditContext.create(window);\n\t\tthis.setEditContextOnDomNode();\n\n\t\tthis._screenReaderSupport = this._register(instantiationService.createInstance(ScreenReaderSupport, this.domNode, context, this._viewController));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'copy', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#copy');\n\t\t\tensureClipboardGetsEditorSelection(e, this._context, this.logService, isFirefox);\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'cut', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#cut');\n\t\t\t// Pretend here we touched the text area, as the `cut` event will most likely\n\t\t\t// result in a `selectionchange` event which we want to ignore\n\t\t\tthis._screenReaderSupport.onWillCut();\n\t\t\tensureClipboardGetsEditorSelection(e, this._context, this.logService, isFirefox);\n\t\t\tthis.logService.trace('NativeEditContext#cut (before viewController.cut)');\n\t\t\tthis._viewController.cut();\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'selectionchange', () => {\n\t\t\tinputLatency.onSelectionChange();\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'beforeinput', async (e) => {\n\t\t\tinputLatency.onBeforeInput();\n\t\t\tif (e.inputType === 'insertParagraph' || e.inputType === 'insertLineBreak') {\n\t\t\t\tthis._onType(this._viewController, { text: '\\n', replacePrevCharCnt: 0, replaceNextCharCnt: 0, positionDelta: 0 });\n\t\t\t}\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'paste', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#paste');\n\t\t\tconst pasteData = computePasteData(e, this._context, this.logService);\n\t\t\tif (!pasteData) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.logService.trace('NativeEditContext#paste (before viewController.paste)');\n\t\t\tthis._viewController.paste(pasteData.text, pasteData.pasteOnNewLine, pasteData.multicursorText, pasteData.mode);\n\t\t}));\n\n\t\t// Edit context events\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textformatupdate', (e) => this._handleTextFormatUpdate(e)));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'characterboundsupdate', (e) => this._updateCharacterBounds(e)));\n\t\tlet highSurrogateCharacter: string | undefined;\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textupdate', (e) => {\n\t\t\tinputLatency.onInput();\n\t\t\tconst text = e.text;\n\t\t\tif (text.length === 1) {\n\t\t\t\tconst charCode = text.charCodeAt(0);\n\t\t\t\tif (isHighSurrogate(charCode)) {\n\t\t\t\t\thighSurrogateCharacter = text;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isLowSurrogate(charCode) && highSurrogateCharacter) {\n\t\t\t\t\tconst textUpdateEvent: ITextUpdateEvent = {\n\t\t\t\t\t\ttext: highSurrogateCharacter + text,\n\t\t\t\t\t\tselectionEnd: e.selectionEnd,\n\t\t\t\t\t\tselectionStart: e.selectionStart,\n\t\t\t\t\t\tupdateRangeStart: e.updateRangeStart - 1,\n\t\t\t\t\t\tupdateRangeEnd: e.updateRangeEnd - 1\n\t\t\t\t\t};\n\t\t\t\t\thighSurrogateCharacter = undefined;\n\t\t\t\t\tthis._emitTypeEvent(this._viewController, textUpdateEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._emitTypeEvent(this._viewController, e);\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionstart', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires onDidCompositionStart() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionStart();\n\t\t\t// Emits ViewCompositionStartEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionStart();\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionend', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires compositionEnd() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionEnd();\n\t\t\t// Emits ViewCompositionEndEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionEnd();\n\t\t}));\n\t\tlet reenableTracking: boolean = false;\n\t\tthis._register(IME.onDidChange(() => {\n\t\t\tif (IME.enabled && reenableTracking) {\n\t\t\t\tthis._focusTracker.resume();\n\t\t\t\tthis.domNode.focus();\n\t\t\t\treenableTracking = false;\n\t\t\t}\n\t\t\tif (!IME.enabled && this.isFocused()) {\n\t\t\t\tthis._focusTracker.pause();\n\t\t\t\tthis._imeTextArea.focus();\n\t\t\t\treenableTracking = true;\n\t\t\t}\n\t\t}));\n\t\tthis._register(NativeEditContextRegistry.register(ownerID, this));\n\t}\n\n\t// --- Public methods ---\n\n\tpublic override dispose(): void {\n\t\t// Force blue the dom node so can write in pane with no native edit context after disposal\n\t\tthis.domNode.domNode.editContext = undefined;\n\t\tthis.domNode.domNode.blur();\n\t\tthis.domNode.domNode.remove();\n\t\tthis._imeTextArea.domNode.remove();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setAriaOptions(options: IEditorAriaOptions): void {\n\t\tthis._screenReaderSupport.setAriaOptions(options);\n\t}\n\n\t/* Last rendered data needed for correct hit-testing and determining the mouse position.\n\t * Without this, the selection will blink as incorrect mouse position is calculated */\n\tpublic getLastRenderData(): Position | null {\n\t\treturn this._primarySelection.getPosition();\n\t}\n\n\tpublic override prepareRender(ctx: RenderingContext): void {\n\t\tthis._screenReaderSupport.prepareRender(ctx);\n\t\tthis._updateSelectionAndControlBoundsData(ctx);\n\t}\n\n\tpublic override onDidRender(): void {\n\t\tthis._updateSelectionAndControlBoundsAfterRender();\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._screenReaderSupport.render(ctx);\n\t}\n\n\tpublic override onCursorStateChanged(e: ViewCursorStateChangedEvent): boolean {\n\t\tthis._primarySelection = e.modelSelections[0] ?? new Selection(1, 1, 1, 1);\n\t\tthis._screenReaderSupport.onCursorStateChanged(e);\n\t\tthis._updateEditContext();\n\t\treturn true;\n\t}\n\n\tpublic override onConfigurationChanged(e: ViewConfigurationChangedEvent): boolean {\n\t\tthis._screenReaderSupport.onConfigurationChanged(e);\n\t\tthis._updateDomAttributes();\n\t\treturn true;\n\t}\n\n\tpublic override onDecorationsChanged(e: ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;\n\t}\n\n\tpublic override onFlushed(e: ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic override onLinesChanged(e: ViewLinesChangedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.fromLineNumber + e.count - 1);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesDeleted(e: ViewLinesDeletedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesInserted(e: ViewLinesInsertedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tprivate _updateEditContextOnLineChange(fromLineNumber: number, toLineNumber: number): void {\n\t\tif (this._editContextPrimarySelection.endLineNumber < fromLineNumber || this._editContextPrimarySelection.startLineNumber > toLineNumber) {\n\t\t\treturn;\n\t\t}\n\t\tthis._updateEditContext();\n\t}\n\n\tpublic override onScrollChanged(e: ViewScrollChangedEvent): boolean {\n\t\tthis._scrollLeft = e.scrollLeft;\n\t\tthis._scrollTop = e.scrollTop;\n\t\treturn true;\n\t}\n\n\tpublic override onZonesChanged(e: ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onWillPaste(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillPaste');\n\t\tthis._onWillPaste();\n\t}\n\n\tprivate _onWillPaste(): void {\n\t\tthis._screenReaderSupport.onWillPaste();\n\t}\n\n\tpublic onWillCopy(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillCopy');\n\t\tthis.logService.trace('NativeEditContext#isFocused : ', this.domNode.domNode === getActiveElement());\n\t}\n\n\tpublic writeScreenReaderContent(): void {\n\t\tthis._screenReaderSupport.writeScreenReaderContent();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this._focusTracker.isFocused;\n\t}\n\n\tpublic focus(): void {\n\t\tthis._focusTracker.focus();\n\n\t\t// If the editor is off DOM, focus cannot be really set, so let's double check that we have managed to set the focus\n\t\tthis.refreshFocusState();\n\t}\n\n\tpublic refreshFocusState(): void {\n\t\tthis._focusTracker.refreshFocusState();\n\t}\n\n\t// TODO: added as a workaround fix for https://github.com/microsoft/vscode/issues/229825\n\t// When this issue will be fixed the following should be removed.\n\tpublic setEditContextOnDomNode(): void {\n\t\tconst targetWindow = getWindow(this.domNode.domNode);\n\t\tconst targetWindowId = getWindowId(targetWindow);\n\t\tif (this._targetWindowId !== targetWindowId) {\n\t\t\tthis.domNode.domNode.editContext = this._editContext;\n\t\t\tthis._targetWindowId = targetWindowId;\n\t\t}\n\t}\n\n\t// --- Private methods ---\n\n\tprivate _onKeyUp(e: KeyboardEvent) {\n\t\tinputLatency.onKeyUp();\n\t\tthis._viewController.emitKeyUp(new StandardKeyboardEvent(e));\n\t}\n\n\tprivate _onKeyDown(e: KeyboardEvent) {\n\t\tinputLatency.onKeyDown();\n\t\tconst standardKeyboardEvent = new StandardKeyboardEvent(e);\n\t\t// When the IME is visible, the keys, like arrow-left and arrow-right, should be used to navigate in the IME, and should not be propagated further\n\t\tif (standardKeyboardEvent.keyCode === KeyCode.KEY_IN_COMPOSITION) {\n\t\t\tstandardKeyboardEvent.stopPropagation();\n\t\t}\n\t\tthis._viewController.emitKeyDown(standardKeyboardEvent);\n\t}\n\n\tprivate _updateDomAttributes(): void {\n\t\tconst options = this._context.configuration.options;\n\t\tthis.domNode.domNode.setAttribute('tabindex', String(options.get(EditorOption.tabIndex)));\n\t}\n\n\tprivate _updateEditContext(): void {\n\t\tconst editContextState = this._getNewEditContextState();\n\t\tif (!editContextState) {\n\t\t\treturn;\n\t\t}\n\t\tthis._editContext.updateText(0, Number.MAX_SAFE_INTEGER, editContextState.text ?? ' ');\n\t\tthis._editContext.updateSelection(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t\tthis._editContextPrimarySelection = editContextState.editContextPrimarySelection;\n\t\tthis._previousEditContextSelection = new OffsetRange(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t}\n\n\tprivate _emitTypeEvent(viewController: ViewController, e: ITextUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionEndOffset = this._previousEditContextSelection.endExclusive;\n\t\tconst selectionStartOffset = this._previousEditContextSelection.start;\n\t\tthis._previousEditContextSelection = new OffsetRange(e.selectionStart, e.selectionEnd);\n\n\t\tlet replaceNextCharCnt = 0;\n\t\tlet replacePrevCharCnt = 0;\n\t\tif (e.updateRangeEnd > selectionEndOffset) {\n\t\t\treplaceNextCharCnt = e.updateRangeEnd - selectionEndOffset;\n\t\t}\n\t\tif (e.updateRangeStart < selectionStartOffset) {\n\t\t\treplacePrevCharCnt = selectionStartOffset - e.updateRangeStart;\n\t\t}\n\t\tlet text = '';\n\t\tif (selectionStartOffset < e.updateRangeStart) {\n\t\t\ttext += this._editContext.text.substring(selectionStartOffset, e.updateRangeStart);\n\t\t}\n\t\ttext += e.text;\n\t\tif (selectionEndOffset > e.updateRangeEnd) {\n\t\t\ttext += this._editContext.text.substring(e.updateRangeEnd, selectionEndOffset);\n\t\t}\n\t\tlet positionDelta = 0;\n\t\tif (e.selectionStart === e.selectionEnd && selectionStartOffset === selectionEndOffset) {\n\t\t\tpositionDelta = e.selectionStart - (e.updateRangeStart + e.text.length);\n\t\t}\n\t\tconst typeInput: ITypeData = {\n\t\t\ttext,\n\t\t\treplacePrevCharCnt,\n\t\t\treplaceNextCharCnt,\n\t\t\tpositionDelta\n\t\t};\n\t\tthis._onType(viewController, typeInput);\n\t}\n\n\tprivate _onType(viewController: ViewController, typeInput: ITypeData): void {\n\t\tif (typeInput.replacePrevCharCnt || typeInput.replaceNextCharCnt || typeInput.positionDelta) {\n\t\t\tviewController.compositionType(typeInput.text, typeInput.replacePrevCharCnt, typeInput.replaceNextCharCnt, typeInput.positionDelta);\n\t\t} else {\n\t\t\tviewController.type(typeInput.text);\n\t\t}\n\t}\n\n\tprivate _getNewEditContextState(): { text: string; selectionStartOffset: number; selectionEndOffset: number; editContextPrimarySelection: Selection } | undefined {\n\t\tconst editContextPrimarySelection = this._primarySelection;\n\t\tconst model = this._context.viewModel.model;\n\t\tif (!model.isValidRange(editContextPrimarySelection)) {\n\t\t\treturn;\n\t\t}\n\t\tconst primarySelectionStartLine = editContextPrimarySelection.startLineNumber;\n\t\tconst primarySelectionEndLine = editContextPrimarySelection.endLineNumber;\n\t\tconst endColumnOfEndLineNumber = model.getLineMaxColumn(primarySelectionEndLine);\n\t\tconst rangeOfText = new Range(primarySelectionStartLine, 1, primarySelectionEndLine, endColumnOfEndLineNumber);\n\t\tconst text = model.getValueInRange(rangeOfText, EndOfLinePreference.TextDefined);\n\t\tconst selectionStartOffset = editContextPrimarySelection.startColumn - 1;\n\t\tconst selectionEndOffset = text.length + editContextPrimarySelection.endColumn - endColumnOfEndLineNumber;\n\t\treturn {\n\t\t\ttext,\n\t\t\tselectionStartOffset,\n\t\t\tselectionEndOffset,\n\t\t\teditContextPrimarySelection\n\t\t};\n\t}\n\n\tprivate _editContextStartPosition(): Position {\n\t\treturn new Position(this._editContextPrimarySelection.startLineNumber, 1);\n\t}\n\n\tprivate _handleTextFormatUpdate(e: TextFormatUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst formats = e.getTextFormats();\n\t\tconst editContextStartPosition = this._editContextStartPosition();\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\t\tformats.forEach(f => {\n\t\t\tconst textModel = this._context.viewModel.model;\n\t\t\tconst offsetOfEditContextText = textModel.getOffsetAt(editContextStartPosition);\n\t\t\tconst startPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeStart);\n\t\t\tconst endPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeEnd);\n\t\t\tconst decorationRange = Range.fromPositions(startPositionOfDecoration, endPositionOfDecoration);\n\t\t\tconst thickness = f.underlineThickness.toLowerCase();\n\t\t\tlet decorationClassName: string = CompositionClassName.NONE;\n\t\t\tswitch (thickness) {\n\t\t\t\tcase 'thin':\n\t\t\t\t\tdecorationClassName = CompositionClassName.SECONDARY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'thick':\n\t\t\t\t\tdecorationClassName = CompositionClassName.PRIMARY;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdecorations.push({\n\t\t\t\trange: decorationRange,\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'textFormatDecoration',\n\t\t\t\t\tinlineClassName: decorationClassName,\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._decorations = this._context.viewModel.model.deltaDecorations(this._decorations, decorations);\n\t}\n\n\tprivate _linesVisibleRanges: HorizontalPosition | null = null;\n\tprivate _updateSelectionAndControlBoundsData(ctx: RenderingContext): void {\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tconst linesVisibleRanges = ctx.visibleRangeForPosition(viewSelection.getStartPosition());\n\t\t\tthis._linesVisibleRanges = linesVisibleRanges;\n\t\t} else {\n\t\t\tthis._linesVisibleRanges = null;\n\t\t}\n\t}\n\n\tprivate _updateSelectionAndControlBoundsAfterRender() {\n\t\tconst options = this._context.configuration.options;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tconst verticalOffsetStart = this._context.viewLayout.getVerticalOffsetForLineNumber(viewSelection.startLineNumber);\n\t\tconst verticalOffsetEnd = this._context.viewLayout.getVerticalOffsetAfterLineNumber(viewSelection.endLineNumber);\n\n\t\t// Make sure this doesn't force an extra layout (i.e. don't call it before rendering finished)\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\t\tconst top = parentBounds.top + verticalOffsetStart - this._scrollTop;\n\t\tconst height = verticalOffsetEnd - verticalOffsetStart;\n\t\tlet left = parentBounds.left + contentLeft - this._scrollLeft;\n\t\tlet width: number;\n\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tif (this._linesVisibleRanges) {\n\t\t\t\tleft += this._linesVisibleRanges.left;\n\t\t\t}\n\t\t\twidth = 0;\n\t\t} else {\n\t\t\twidth = parentBounds.width - contentLeft;\n\t\t}\n\n\t\tconst selectionBounds = new DOMRect(left, top, width, height);\n\t\tthis._editContext.updateSelectionBounds(selectionBounds);\n\t\tthis._editContext.updateControlBounds(selectionBounds);\n\t}\n\n\tprivate _updateCharacterBounds(e: CharacterBoundsUpdateEvent): void {\n\t\tconst options = this._context.configuration.options;\n\t\tconst typicalHalfWidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\n\t\tconst characterBounds: DOMRect[] = [];\n\t\tconst offsetTransformer = new PositionOffsetTransformer(this._editContext.text);\n\t\tfor (let offset = e.rangeStart; offset < e.rangeEnd; offset++) {\n\t\t\tconst editContextStartPosition = offsetTransformer.getPosition(offset);\n\t\t\tconst textStartLineOffsetWithinEditor = this._editContextPrimarySelection.startLineNumber - 1;\n\t\t\tconst characterStartPosition = new Position(textStartLineOffsetWithinEditor + editContextStartPosition.lineNumber, editContextStartPosition.column);\n\t\t\tconst characterEndPosition = characterStartPosition.delta(0, 1);\n\t\t\tconst characterModelRange = Range.fromPositions(characterStartPosition, characterEndPosition);\n\t\t\tconst characterViewRange = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(characterModelRange);\n\t\t\tconst characterLinesVisibleRanges = this._visibleRangeProvider.linesVisibleRangesForRange(characterViewRange, true) ?? [];\n\t\t\tconst lineNumber = characterViewRange.startLineNumber;\n\t\t\tconst characterVerticalOffset = this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n\t\t\tconst top = parentBounds.top + characterVerticalOffset - this._scrollTop;\n\n\t\t\tlet left = 0;\n\t\t\tlet width = typicalHalfWidthCharacterWidth;\n\t\t\tif (characterLinesVisibleRanges.length > 0) {\n\t\t\t\tfor (const visibleRange of characterLinesVisibleRanges[0].ranges) {\n\t\t\t\t\tleft = visibleRange.left;\n\t\t\t\t\twidth = visibleRange.width;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lineHeight = this._context.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t\t\tcharacterBounds.push(new DOMRect(parentBounds.left + contentLeft + left - this._scrollLeft, top, width, lineHeight));\n\t\t}\n\t\tthis._editContext.updateCharacterBounds(e.rangeStart, characterBounds);\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 './nativeEditContext.css';\nimport { isFirefox } from '../../../../../base/browser/browser.js';\nimport { addDisposableListener, getActiveElement, getWindow, getWindowId } from '../../../../../base/browser/dom.js';\nimport { FastDomNode } from '../../../../../base/browser/fastDomNode.js';\nimport { StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js';\nimport { KeyCode } from '../../../../../base/common/keyCodes.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { EndOfLinePreference, IModelDeltaDecoration } from '../../../../common/model.js';\nimport { ViewConfigurationChangedEvent, ViewCursorStateChangedEvent, ViewDecorationsChangedEvent, ViewFlushedEvent, ViewLinesChangedEvent, ViewLinesDeletedEvent, ViewLinesInsertedEvent, ViewScrollChangedEvent, ViewZonesChangedEvent } from '../../../../common/viewEvents.js';\nimport { ViewContext } from '../../../../common/viewModel/viewContext.js';\nimport { RestrictedRenderingContext, RenderingContext, HorizontalPosition } from '../../../view/renderingContext.js';\nimport { ViewController } from '../../../view/viewController.js';\nimport { ensureClipboardGetsEditorSelection, computePasteData } from '../clipboardUtils.js';\nimport { AbstractEditContext } from '../editContext.js';\nimport { editContextAddDisposableListener, FocusTracker, ITypeData } from './nativeEditContextUtils.js';\nimport { ScreenReaderSupport } from './screenReaderSupport.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { Selection } from '../../../../common/core/selection.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { IVisibleRangeProvider } from '../textArea/textAreaEditContext.js';\nimport { PositionOffsetTransformer } from '../../../../common/core/text/positionToOffset.js';\nimport { EditContext } from './editContextFactory.js';\nimport { NativeEditContextRegistry } from './nativeEditContextRegistry.js';\nimport { IEditorAriaOptions } from '../../../editorBrowser.js';\nimport { isHighSurrogate, isLowSurrogate } from '../../../../../base/common/strings.js';\nimport { IME } from '../../../../../base/common/ime.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { ILogService } from '../../../../../platform/log/common/log.js';\nimport { inputLatency } from '../../../../../base/browser/performance.js';\n\n// Corresponds to classes in nativeEditContext.css\nenum CompositionClassName {\n\tNONE = 'edit-context-composition-none',\n\tSECONDARY = 'edit-context-composition-secondary',\n\tPRIMARY = 'edit-context-composition-primary',\n}\n\ninterface ITextUpdateEvent {\n\ttext: string;\n\tselectionStart: number;\n\tselectionEnd: number;\n\tupdateRangeStart: number;\n\tupdateRangeEnd: number;\n}\n\nexport class NativeEditContext extends AbstractEditContext {\n\n\t// Text area used to handle paste events\n\tpublic readonly domNode: FastDomNode<HTMLDivElement>;\n\tprivate readonly _imeTextArea: FastDomNode<HTMLTextAreaElement>;\n\tprivate readonly _editContext: EditContext;\n\tprivate readonly _screenReaderSupport: ScreenReaderSupport;\n\tprivate _previousEditContextSelection: OffsetRange = new OffsetRange(0, 0);\n\tprivate _editContextPrimarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\t// Overflow guard container\n\tprivate readonly _parent: HTMLElement;\n\tprivate _decorations: string[] = [];\n\tprivate _primarySelection: Selection = new Selection(1, 1, 1, 1);\n\n\n\tprivate _targetWindowId: number = -1;\n\tprivate _scrollTop: number = 0;\n\tprivate _scrollLeft: number = 0;\n\n\tprivate readonly _focusTracker: FocusTracker;\n\n\tconstructor(\n\t\townerID: string,\n\t\tcontext: ViewContext,\n\t\toverflowGuardContainer: FastDomNode<HTMLElement>,\n\t\tprivate readonly _viewController: ViewController,\n\t\tprivate readonly _visibleRangeProvider: IVisibleRangeProvider,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ILogService private readonly logService: ILogService\n\t) {\n\t\tsuper(context);\n\n\t\tthis.domNode = new FastDomNode(document.createElement('div'));\n\t\tthis.domNode.setClassName(`native-edit-context`);\n\t\tthis._imeTextArea = new FastDomNode(document.createElement('textarea'));\n\t\tthis._imeTextArea.setClassName(`ime-text-area`);\n\t\tthis._imeTextArea.setAttribute('readonly', 'true');\n\t\tthis._imeTextArea.setAttribute('tabindex', '-1');\n\t\tthis._imeTextArea.setAttribute('aria-hidden', 'true');\n\t\tthis.domNode.setAttribute('autocorrect', 'off');\n\t\tthis.domNode.setAttribute('autocapitalize', 'off');\n\t\tthis.domNode.setAttribute('autocomplete', 'off');\n\t\tthis.domNode.setAttribute('spellcheck', 'false');\n\n\t\tthis._updateDomAttributes();\n\n\t\toverflowGuardContainer.appendChild(this.domNode);\n\t\toverflowGuardContainer.appendChild(this._imeTextArea);\n\t\tthis._parent = overflowGuardContainer.domNode;\n\n\t\tthis._focusTracker = this._register(new FocusTracker(logService, this.domNode.domNode, (newFocusValue: boolean) => {\n\t\t\tlogService.trace('NativeEditContext#handleFocusChange : ', newFocusValue);\n\t\t\tthis._screenReaderSupport.handleFocusChange(newFocusValue);\n\t\t\tthis._context.viewModel.setHasFocus(newFocusValue);\n\t\t}));\n\n\t\tconst window = getWindow(this.domNode.domNode);\n\t\tthis._editContext = EditContext.create(window);\n\t\tthis.setEditContextOnDomNode();\n\n\t\tthis._screenReaderSupport = this._register(instantiationService.createInstance(ScreenReaderSupport, this.domNode, context, this._viewController));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'copy', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#copy');\n\t\t\tensureClipboardGetsEditorSelection(e, this._context, this.logService, isFirefox);\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'cut', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#cut');\n\t\t\t// Pretend here we touched the text area, as the `cut` event will most likely\n\t\t\t// result in a `selectionchange` event which we want to ignore\n\t\t\tthis._screenReaderSupport.onWillCut();\n\t\t\tensureClipboardGetsEditorSelection(e, this._context, this.logService, isFirefox);\n\t\t\tthis.logService.trace('NativeEditContext#cut (before viewController.cut)');\n\t\t\tthis._viewController.cut();\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'selectionchange', () => {\n\t\t\tinputLatency.onSelectionChange();\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keyup', (e) => this._onKeyUp(e)));\n\t\tthis._register(addDisposableListener(this._imeTextArea.domNode, 'keydown', async (e) => this._onKeyDown(e)));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'beforeinput', async (e) => {\n\t\t\tinputLatency.onBeforeInput();\n\t\t\tif (e.inputType === 'insertParagraph' || e.inputType === 'insertLineBreak') {\n\t\t\t\tthis._onType(this._viewController, { text: '\\n', replacePrevCharCnt: 0, replaceNextCharCnt: 0, positionDelta: 0 });\n\t\t\t}\n\t\t}));\n\t\tthis._register(addDisposableListener(this.domNode.domNode, 'paste', (e) => {\n\t\t\tthis.logService.trace('NativeEditContext#paste');\n\t\t\tconst pasteData = computePasteData(e, this._context, this.logService);\n\t\t\tif (!pasteData) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.logService.trace('NativeEditContext#paste (before viewController.paste)');\n\t\t\tthis._viewController.paste(pasteData.text, pasteData.pasteOnNewLine, pasteData.multicursorText, pasteData.mode);\n\t\t}));\n\n\t\t// Edit context events\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textformatupdate', (e) => this._handleTextFormatUpdate(e)));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'characterboundsupdate', (e) => this._updateCharacterBounds(e)));\n\t\tlet highSurrogateCharacter: string | undefined;\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'textupdate', (e) => {\n\t\t\tinputLatency.onInput();\n\t\t\tconst text = e.text;\n\t\t\tif (text.length === 1) {\n\t\t\t\tconst charCode = text.charCodeAt(0);\n\t\t\t\tif (isHighSurrogate(charCode)) {\n\t\t\t\t\thighSurrogateCharacter = text;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isLowSurrogate(charCode) && highSurrogateCharacter) {\n\t\t\t\t\tconst textUpdateEvent: ITextUpdateEvent = {\n\t\t\t\t\t\ttext: highSurrogateCharacter + text,\n\t\t\t\t\t\tselectionEnd: e.selectionEnd,\n\t\t\t\t\t\tselectionStart: e.selectionStart,\n\t\t\t\t\t\tupdateRangeStart: e.updateRangeStart - 1,\n\t\t\t\t\t\tupdateRangeEnd: e.updateRangeEnd - 1\n\t\t\t\t\t};\n\t\t\t\t\thighSurrogateCharacter = undefined;\n\t\t\t\t\tthis._emitTypeEvent(this._viewController, textUpdateEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._emitTypeEvent(this._viewController, e);\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionstart', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires onDidCompositionStart() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionStart();\n\t\t\t// Emits ViewCompositionStartEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionStart();\n\t\t}));\n\t\tthis._register(editContextAddDisposableListener(this._editContext, 'compositionend', (e) => {\n\t\t\tthis._updateEditContext();\n\t\t\t// Utlimately fires compositionEnd() on the editor to notify for example suggest model of composition state\n\t\t\t// Updates the composition state of the cursor controller which determines behavior of typing with interceptors\n\t\t\tthis._viewController.compositionEnd();\n\t\t\t// Emits ViewCompositionEndEvent which can be depended on by ViewEventHandlers\n\t\t\tthis._context.viewModel.onCompositionEnd();\n\t\t}));\n\t\tlet reenableTracking: boolean = false;\n\t\tthis._register(IME.onDidChange(() => {\n\t\t\tif (IME.enabled && reenableTracking) {\n\t\t\t\tthis._focusTracker.resume();\n\t\t\t\tthis.domNode.focus();\n\t\t\t\treenableTracking = false;\n\t\t\t}\n\t\t\tif (!IME.enabled && this.isFocused()) {\n\t\t\t\tthis._focusTracker.pause();\n\t\t\t\tthis._imeTextArea.focus();\n\t\t\t\treenableTracking = true;\n\t\t\t}\n\t\t}));\n\t\tthis._register(NativeEditContextRegistry.register(ownerID, this));\n\t}\n\n\t// --- Public methods ---\n\n\tpublic override dispose(): void {\n\t\t// Force blue the dom node so can write in pane with no native edit context after disposal\n\t\tthis.domNode.domNode.editContext = undefined;\n\t\tthis.domNode.domNode.blur();\n\t\tthis.domNode.domNode.remove();\n\t\tthis._imeTextArea.domNode.remove();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setAriaOptions(options: IEditorAriaOptions): void {\n\t\tthis._screenReaderSupport.setAriaOptions(options);\n\t}\n\n\t/* Last rendered data needed for correct hit-testing and determining the mouse position.\n\t * Without this, the selection will blink as incorrect mouse position is calculated */\n\tpublic getLastRenderData(): Position | null {\n\t\treturn this._primarySelection.getPosition();\n\t}\n\n\tpublic override prepareRender(ctx: RenderingContext): void {\n\t\tthis._screenReaderSupport.prepareRender(ctx);\n\t\tthis._updateSelectionAndControlBoundsData(ctx);\n\t}\n\n\tpublic override onDidRender(): void {\n\t\tthis._updateSelectionAndControlBoundsAfterRender();\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._screenReaderSupport.render(ctx);\n\t}\n\n\tpublic override onCursorStateChanged(e: ViewCursorStateChangedEvent): boolean {\n\t\tthis._primarySelection = e.modelSelections[0] ?? new Selection(1, 1, 1, 1);\n\t\tthis._screenReaderSupport.onCursorStateChanged(e);\n\t\tthis._updateEditContext();\n\t\treturn true;\n\t}\n\n\tpublic override onConfigurationChanged(e: ViewConfigurationChangedEvent): boolean {\n\t\tthis._screenReaderSupport.onConfigurationChanged(e);\n\t\tthis._updateDomAttributes();\n\t\treturn true;\n\t}\n\n\tpublic override onDecorationsChanged(e: ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;\n\t}\n\n\tpublic override onFlushed(e: ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic override onLinesChanged(e: ViewLinesChangedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.fromLineNumber + e.count - 1);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesDeleted(e: ViewLinesDeletedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tpublic override onLinesInserted(e: ViewLinesInsertedEvent): boolean {\n\t\tthis._updateEditContextOnLineChange(e.fromLineNumber, e.toLineNumber);\n\t\treturn true;\n\t}\n\n\tprivate _updateEditContextOnLineChange(fromLineNumber: number, toLineNumber: number): void {\n\t\tif (this._editContextPrimarySelection.endLineNumber < fromLineNumber || this._editContextPrimarySelection.startLineNumber > toLineNumber) {\n\t\t\treturn;\n\t\t}\n\t\tthis._updateEditContext();\n\t}\n\n\tpublic override onScrollChanged(e: ViewScrollChangedEvent): boolean {\n\t\tthis._scrollLeft = e.scrollLeft;\n\t\tthis._scrollTop = e.scrollTop;\n\t\treturn true;\n\t}\n\n\tpublic override onZonesChanged(e: ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onWillPaste(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillPaste');\n\t\tthis._onWillPaste();\n\t}\n\n\tprivate _onWillPaste(): void {\n\t\tthis._screenReaderSupport.onWillPaste();\n\t}\n\n\tpublic onWillCopy(): void {\n\t\tthis.logService.trace('NativeEditContext#onWillCopy');\n\t\tthis.logService.trace('NativeEditContext#isFocused : ', this.domNode.domNode === getActiveElement());\n\t}\n\n\tpublic writeScreenReaderContent(): void {\n\t\tthis._screenReaderSupport.writeScreenReaderContent();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this._focusTracker.isFocused;\n\t}\n\n\tpublic focus(): void {\n\t\tthis._focusTracker.focus();\n\n\t\t// If the editor is off DOM, focus cannot be really set, so let's double check that we have managed to set the focus\n\t\tthis.refreshFocusState();\n\t}\n\n\tpublic refreshFocusState(): void {\n\t\tthis._focusTracker.refreshFocusState();\n\t}\n\n\t// TODO: added as a workaround fix for https://github.com/microsoft/vscode/issues/229825\n\t// When this issue will be fixed the following should be removed.\n\tpublic setEditContextOnDomNode(): void {\n\t\tconst targetWindow = getWindow(this.domNode.domNode);\n\t\tconst targetWindowId = getWindowId(targetWindow);\n\t\tif (this._targetWindowId !== targetWindowId) {\n\t\t\tthis.domNode.domNode.editContext = this._editContext;\n\t\t\tthis._targetWindowId = targetWindowId;\n\t\t}\n\t}\n\n\t// --- Private methods ---\n\n\tprivate _onKeyUp(e: KeyboardEvent) {\n\t\tinputLatency.onKeyUp();\n\t\tthis._viewController.emitKeyUp(new StandardKeyboardEvent(e));\n\t}\n\n\tprivate _onKeyDown(e: KeyboardEvent) {\n\t\tinputLatency.onKeyDown();\n\t\tconst standardKeyboardEvent = new StandardKeyboardEvent(e);\n\t\t// When the IME is visible, the keys, like arrow-left and arrow-right, should be used to navigate in the IME, and should not be propagated further\n\t\tif (standardKeyboardEvent.keyCode === KeyCode.KEY_IN_COMPOSITION) {\n\t\t\tstandardKeyboardEvent.stopPropagation();\n\t\t}\n\t\tthis._viewController.emitKeyDown(standardKeyboardEvent);\n\t}\n\n\tprivate _updateDomAttributes(): void {\n\t\tconst options = this._context.configuration.options;\n\t\tthis.domNode.domNode.setAttribute('tabindex', String(options.get(EditorOption.tabIndex)));\n\t}\n\n\tprivate _updateEditContext(): void {\n\t\tconst editContextState = this._getNewEditContextState();\n\t\tif (!editContextState) {\n\t\t\treturn;\n\t\t}\n\t\tthis._editContext.updateText(0, Number.MAX_SAFE_INTEGER, editContextState.text ?? ' ');\n\t\tthis._editContext.updateSelection(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t\tthis._editContextPrimarySelection = editContextState.editContextPrimarySelection;\n\t\tthis._previousEditContextSelection = new OffsetRange(editContextState.selectionStartOffset, editContextState.selectionEndOffset);\n\t}\n\n\tprivate _emitTypeEvent(viewController: ViewController, e: ITextUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionEndOffset = this._previousEditContextSelection.endExclusive;\n\t\tconst selectionStartOffset = this._previousEditContextSelection.start;\n\t\tthis._previousEditContextSelection = new OffsetRange(e.selectionStart, e.selectionEnd);\n\n\t\tlet replaceNextCharCnt = 0;\n\t\tlet replacePrevCharCnt = 0;\n\t\tif (e.updateRangeEnd > selectionEndOffset) {\n\t\t\treplaceNextCharCnt = e.updateRangeEnd - selectionEndOffset;\n\t\t}\n\t\tif (e.updateRangeStart < selectionStartOffset) {\n\t\t\treplacePrevCharCnt = selectionStartOffset - e.updateRangeStart;\n\t\t}\n\t\tlet text = '';\n\t\tif (selectionStartOffset < e.updateRangeStart) {\n\t\t\ttext += this._editContext.text.substring(selectionStartOffset, e.updateRangeStart);\n\t\t}\n\t\ttext += e.text;\n\t\tif (selectionEndOffset > e.updateRangeEnd) {\n\t\t\ttext += this._editContext.text.substring(e.updateRangeEnd, selectionEndOffset);\n\t\t}\n\t\tlet positionDelta = 0;\n\t\tif (e.selectionStart === e.selectionEnd && selectionStartOffset === selectionEndOffset) {\n\t\t\tpositionDelta = e.selectionStart - (e.updateRangeStart + e.text.length);\n\t\t}\n\t\tconst typeInput: ITypeData = {\n\t\t\ttext,\n\t\t\treplacePrevCharCnt,\n\t\t\treplaceNextCharCnt,\n\t\t\tpositionDelta\n\t\t};\n\t\tthis._onType(viewController, typeInput);\n\t}\n\n\tprivate _onType(viewController: ViewController, typeInput: ITypeData): void {\n\t\tif (typeInput.replacePrevCharCnt || typeInput.replaceNextCharCnt || typeInput.positionDelta) {\n\t\t\tviewController.compositionType(typeInput.text, typeInput.replacePrevCharCnt, typeInput.replaceNextCharCnt, typeInput.positionDelta);\n\t\t} else {\n\t\t\tviewController.type(typeInput.text);\n\t\t}\n\t}\n\n\tprivate _getNewEditContextState(): { text: string; selectionStartOffset: number; selectionEndOffset: number; editContextPrimarySelection: Selection } | undefined {\n\t\tconst editContextPrimarySelection = this._primarySelection;\n\t\tconst model = this._context.viewModel.model;\n\t\tif (!model.isValidRange(editContextPrimarySelection)) {\n\t\t\treturn;\n\t\t}\n\t\tconst primarySelectionStartLine = editContextPrimarySelection.startLineNumber;\n\t\tconst primarySelectionEndLine = editContextPrimarySelection.endLineNumber;\n\t\tconst endColumnOfEndLineNumber = model.getLineMaxColumn(primarySelectionEndLine);\n\t\tconst rangeOfText = new Range(primarySelectionStartLine, 1, primarySelectionEndLine, endColumnOfEndLineNumber);\n\t\tconst text = model.getValueInRange(rangeOfText, EndOfLinePreference.TextDefined);\n\t\tconst selectionStartOffset = editContextPrimarySelection.startColumn - 1;\n\t\tconst selectionEndOffset = text.length + editContextPrimarySelection.endColumn - endColumnOfEndLineNumber;\n\t\treturn {\n\t\t\ttext,\n\t\t\tselectionStartOffset,\n\t\t\tselectionEndOffset,\n\t\t\teditContextPrimarySelection\n\t\t};\n\t}\n\n\tprivate _editContextStartPosition(): Position {\n\t\treturn new Position(this._editContextPrimarySelection.startLineNumber, 1);\n\t}\n\n\tprivate _handleTextFormatUpdate(e: TextFormatUpdateEvent): void {\n\t\tif (!this._editContext) {\n\t\t\treturn;\n\t\t}\n\t\tconst formats = e.getTextFormats();\n\t\tconst editContextStartPosition = this._editContextStartPosition();\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\t\tformats.forEach(f => {\n\t\t\tconst textModel = this._context.viewModel.model;\n\t\t\tconst offsetOfEditContextText = textModel.getOffsetAt(editContextStartPosition);\n\t\t\tconst startPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeStart);\n\t\t\tconst endPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeEnd);\n\t\t\tconst decorationRange = Range.fromPositions(startPositionOfDecoration, endPositionOfDecoration);\n\t\t\tconst thickness = f.underlineThickness.toLowerCase();\n\t\t\tlet decorationClassName: string = CompositionClassName.NONE;\n\t\t\tswitch (thickness) {\n\t\t\t\tcase 'thin':\n\t\t\t\t\tdecorationClassName = CompositionClassName.SECONDARY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'thick':\n\t\t\t\t\tdecorationClassName = CompositionClassName.PRIMARY;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdecorations.push({\n\t\t\t\trange: decorationRange,\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'textFormatDecoration',\n\t\t\t\t\tinlineClassName: decorationClassName,\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._decorations = this._context.viewModel.model.deltaDecorations(this._decorations, decorations);\n\t}\n\n\tprivate _linesVisibleRanges: HorizontalPosition | null = null;\n\tprivate _updateSelectionAndControlBoundsData(ctx: RenderingContext): void {\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tconst linesVisibleRanges = ctx.visibleRangeForPosition(viewSelection.getStartPosition());\n\t\t\tthis._linesVisibleRanges = linesVisibleRanges;\n\t\t} else {\n\t\t\tthis._linesVisibleRanges = null;\n\t\t}\n\t}\n\n\tprivate _updateSelectionAndControlBoundsAfterRender() {\n\t\tconst options = this._context.configuration.options;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\n\t\tconst viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);\n\t\tconst verticalOffsetStart = this._context.viewLayout.getVerticalOffsetForLineNumber(viewSelection.startLineNumber);\n\t\tconst verticalOffsetEnd = this._context.viewLayout.getVerticalOffsetAfterLineNumber(viewSelection.endLineNumber);\n\n\t\t// Make sure this doesn't force an extra layout (i.e. don't call it before rendering finished)\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\t\tconst top = parentBounds.top + verticalOffsetStart - this._scrollTop;\n\t\tconst height = verticalOffsetEnd - verticalOffsetStart;\n\t\tlet left = parentBounds.left + contentLeft - this._scrollLeft;\n\t\tlet width: number;\n\n\t\tif (this._primarySelection.isEmpty()) {\n\t\t\tif (this._linesVisibleRanges) {\n\t\t\t\tleft += this._linesVisibleRanges.left;\n\t\t\t}\n\t\t\twidth = 0;\n\t\t} else {\n\t\t\twidth = parentBounds.width - contentLeft;\n\t\t}\n\n\t\tconst selectionBounds = new DOMRect(left, top, width, height);\n\t\tthis._editContext.updateSelectionBounds(selectionBounds);\n\t\tthis._editContext.updateControlBounds(selectionBounds);\n\t}\n\n\tprivate _updateCharacterBounds(e: CharacterBoundsUpdateEvent): void {\n\t\tconst options = this._context.configuration.options;\n\t\tconst typicalHalfWidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\tconst contentLeft = options.get(EditorOption.layoutInfo).contentLeft;\n\t\tconst parentBounds = this._parent.getBoundingClientRect();\n\n\t\tconst characterBounds: DOMRect[] = [];\n\t\tconst offsetTransformer = new PositionOffsetTransformer(this._editContext.text);\n\t\tfor (let offset = e.rangeStart; offset < e.rangeEnd; offset++) {\n\t\t\tconst editContextStartPosition = offsetTransformer.getPosition(offset);\n\t\t\tconst textStartLineOffsetWithinEditor = this._editContextPrimarySelection.startLineNumber - 1;\n\t\t\tconst characterStartPosition = new Position(textStartLineOffsetWithinEditor + editContextStartPosition.lineNumber, editContextStartPosition.column);\n\t\t\tconst characterEndPosition = characterStartPosition.delta(0, 1);\n\t\t\tconst characterModelRange = Range.fromPositions(characterStartPosition, characterEndPosition);\n\t\t\tconst characterViewRange = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(characterModelRange);\n\t\t\tconst characterLinesVisibleRanges = this._visibleRangeProvider.linesVisibleRangesForRange(characterViewRange, true) ?? [];\n\t\t\tconst lineNumber = characterViewRange.startLineNumber;\n\t\t\tconst characterVerticalOffset = this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n\t\t\tconst top = parentBounds.top + characterVerticalOffset - this._scrollTop;\n\n\t\t\tlet left = 0;\n\t\t\tlet width = typicalHalfWidthCharacterWidth;\n\t\t\tif (characterLinesVisibleRanges.length > 0) {\n\t\t\t\tfor (const visibleRange of characterLinesVisibleRanges[0].ranges) {\n\t\t\t\t\tleft = visibleRange.left;\n\t\t\t\t\twidth = visibleRange.width;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lineHeight = this._context.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t\t\tcharacterBounds.push(new DOMRect(parentBounds.left + contentLeft + left - this._scrollLeft, top, width, lineHeight));\n\t\t}\n\t\tthis._editContext.updateCharacterBounds(e.rangeStart, characterBounds);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/editor/browser/controller/editContext/screenReaderUtils.ts"],"names":[],"mappings":"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","file":"screenReaderUtils.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 { EndOfLinePreference } from '../../../common/model.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Selection, SelectionDirection } from '../../../common/core/selection.js';\nimport { EditorOption, IComputedEditorOptions } from '../../../common/config/editorOptions.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nimport { AccessibilitySupport } from '../../../../platform/accessibility/common/accessibility.js';\nimport * as nls from '../../../../nls.js';\nimport { ISimpleModel } from '../../../common/viewModel/screenReaderSimpleModel.js';\n\nexport interface IPagedScreenReaderStrategy<T> {\n}\n\nexport interface ISimpleScreenReaderContentState {\n\tvalue: string;\n\n\t/** the offset where selection starts inside `value` */\n\tselectionStart: number;\n\n\t/** the offset where selection ends inside `value` */\n\tselectionEnd: number;\n\n\t/** the editor range in the view coordinate system that matches the selection inside `value` */\n\tselection: Range;\n\n\t/** the position of the start of the `value` in the editor */\n\tstartPositionWithinEditor: Position;\n\n\t/** the visible line count (wrapped, not necessarily matching \\n characters) for the text in `value` before `selectionStart` */\n\tnewlineCountBeforeSelection: number;\n}\n\nexport class SimplePagedScreenReaderStrategy implements IPagedScreenReaderStrategy<ISimpleScreenReaderContentState> {\n\tprivate _getPageOfLine(lineNumber: number, linesPerPage: number): number {\n\t\treturn Math.floor((lineNumber - 1) / linesPerPage);\n\t}\n\n\tprivate _getRangeForPage(page: number, linesPerPage: number): Range {\n\t\tconst offset = page * linesPerPage;\n\t\tconst startLineNumber = offset + 1;\n\t\tconst endLineNumber = offset + linesPerPage;\n\t\treturn new Range(startLineNumber, 1, endLineNumber + 1, 1);\n\t}\n\n\tpublic fromEditorSelection(model: ISimpleModel, selection: Selection, linesPerPage: number, trimLongText: boolean): ISimpleScreenReaderContentState {\n\t\t// Chromium handles very poorly text even of a few thousand chars\n\t\t// Cut text to avoid stalling the entire UI\n\t\tconst LIMIT_CHARS = 500;\n\n\t\tconst selectionStartPage = this._getPageOfLine(selection.startLineNumber, linesPerPage);\n\t\tconst selectionStartPageRange = this._getRangeForPage(selectionStartPage, linesPerPage);\n\n\t\tconst selectionEndPage = this._getPageOfLine(selection.endLineNumber, linesPerPage);\n\t\tconst selectionEndPageRange = this._getRangeForPage(selectionEndPage, linesPerPage);\n\n\t\tlet pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn))!;\n\t\tif (trimLongText && model.getValueLengthInRange(pretextRange, EndOfLinePreference.LF) > LIMIT_CHARS) {\n\t\t\tconst pretextStart = model.modifyPosition(pretextRange.getEndPosition(), -LIMIT_CHARS);\n\t\t\tpretextRange = Range.fromPositions(pretextStart, pretextRange.getEndPosition());\n\t\t}\n\t\tconst pretext = model.getValueInRange(pretextRange, EndOfLinePreference.LF);\n\n\t\tconst lastLine = model.getLineCount();\n\t\tconst lastLineMaxColumn = model.getLineMaxColumn(lastLine);\n\t\tlet posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn))!;\n\t\tif (trimLongText && model.getValueLengthInRange(posttextRange, EndOfLinePreference.LF) > LIMIT_CHARS) {\n\t\t\tconst posttextEnd = model.modifyPosition(posttextRange.getStartPosition(), LIMIT_CHARS);\n\t\t\tposttextRange = Range.fromPositions(posttextRange.getStartPosition(), posttextEnd);\n\t\t}\n\t\tconst posttext = model.getValueInRange(posttextRange, EndOfLinePreference.LF);\n\n\n\t\tlet text: string;\n\t\tif (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) {\n\t\t\t// take full selection\n\t\t\ttext = model.getValueInRange(selection, EndOfLinePreference.LF);\n\t\t} else {\n\t\t\tconst selectionRange1 = selectionStartPageRange.intersectRanges(selection)!;\n\t\t\tconst selectionRange2 = selectionEndPageRange.intersectRanges(selection)!;\n\t\t\ttext = (\n\t\t\t\tmodel.getValueInRange(selectionRange1, EndOfLinePreference.LF)\n\t\t\t\t+ String.fromCharCode(8230)\n\t\t\t\t+ model.getValueInRange(selectionRange2, EndOfLinePreference.LF)\n\t\t\t);\n\t\t}\n\t\tif (trimLongText && text.length > 2 * LIMIT_CHARS) {\n\t\t\ttext = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length);\n\t\t}\n\n\t\tlet selectionStart: number;\n\t\tlet selectionEnd: number;\n\t\tif (selection.getDirection() === SelectionDirection.LTR) {\n\t\t\tselectionStart = pretext.length;\n\t\t\tselectionEnd = pretext.length + text.length;\n\t\t} else {\n\t\t\tselectionEnd = pretext.length;\n\t\t\tselectionStart = pretext.length + text.length;\n\t\t}\n\t\treturn {\n\t\t\tvalue: pretext + text + posttext,\n\t\t\tselection: selection,\n\t\t\tselectionStart,\n\t\t\tselectionEnd,\n\t\t\tstartPositionWithinEditor: pretextRange.getStartPosition(),\n\t\t\tnewlineCountBeforeSelection: pretextRange.endLineNumber - pretextRange.startLineNumber,\n\t\t};\n\t}\n}\n\nexport function ariaLabelForScreenReaderContent(options: IComputedEditorOptions, keybindingService: IKeybindingService) {\n\tconst accessibilitySupport = options.get(EditorOption.accessibilitySupport);\n\tif (accessibilitySupport === AccessibilitySupport.Disabled) {\n\n\t\tconst toggleKeybindingLabel = keybindingService.lookupKeybinding('editor.action.toggleScreenReaderAccessibilityMode')?.getAriaLabel();\n\t\tconst runCommandKeybindingLabel = keybindingService.lookupKeybinding('workbench.action.showCommands')?.getAriaLabel();\n\t\tconst keybindingEditorKeybindingLabel = keybindingService.lookupKeybinding('workbench.action.openGlobalKeybindings')?.getAriaLabel();\n\t\tconst editorNotAccessibleMessage = nls.localize('accessibilityModeOff', \"The editor is not accessible at this time.\");\n\t\tif (toggleKeybindingLabel) {\n\t\t\treturn nls.localize('accessibilityOffAriaLabel', \"{0} To enable screen reader optimized mode, use {1}\", editorNotAccessibleMessage, toggleKeybindingLabel);\n\t\t} else if (runCommandKeybindingLabel) {\n\t\t\treturn nls.localize('accessibilityOffAriaLabelNoKb', \"{0} To enable screen reader optimized mode, open the quick pick with {1} and run the command Toggle Screen Reader Accessibility Mode, which is currently not triggerable via keyboard.\", editorNotAccessibleMessage, runCommandKeybindingLabel);\n\t\t} else if (keybindingEditorKeybindingLabel) {\n\t\t\treturn nls.localize('accessibilityOffAriaLabelNoKbs', \"{0} Please assign a keybinding for the command Toggle Screen Reader Accessibility Mode by accessing the keybindings editor with {1} and run it.\", editorNotAccessibleMessage, keybindingEditorKeybindingLabel);\n\t\t} else {\n\t\t\t// SOS\n\t\t\treturn editorNotAccessibleMessage;\n\t\t}\n\t}\n\treturn options.get(EditorOption.ariaLabel);\n}\n\nexport function newlinecount(text: string): number {\n\tlet result = 0;\n\tlet startIndex = -1;\n\tdo {\n\t\tstartIndex = text.indexOf('\\n', startIndex + 1);\n\t\tif (startIndex === -1) {\n\t\t\tbreak;\n\t\t}\n\t\tresult++;\n\t} while (true);\n\treturn result;\n}\n"]}
1
+ {"version":3,"sources":["vs/editor/browser/controller/editContext/screenReaderUtils.ts"],"names":[],"mappings":"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","file":"screenReaderUtils.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 { EndOfLinePreference } from '../../../common/model.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Selection, SelectionDirection } from '../../../common/core/selection.js';\nimport { EditorOption, IComputedEditorOptions } from '../../../common/config/editorOptions.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nimport { AccessibilitySupport } from '../../../../platform/accessibility/common/accessibility.js';\nimport * as nls from '../../../../nls.js';\nimport { ISimpleModel } from '../../../common/viewModel/screenReaderSimpleModel.js';\n\nexport interface IPagedScreenReaderStrategy<T> {\n}\n\nexport interface ISimpleScreenReaderContentState {\n\tvalue: string;\n\n\t/** the offset where selection starts inside `value` */\n\tselectionStart: number;\n\n\t/** the offset where selection ends inside `value` */\n\tselectionEnd: number;\n\n\t/** the editor range in the view coordinate system that matches the selection inside `value` */\n\tselection: Selection;\n\n\t/** the position of the start of the `value` in the editor */\n\tstartPositionWithinEditor: Position;\n\n\t/** the visible line count (wrapped, not necessarily matching \\n characters) for the text in `value` before `selectionStart` */\n\tnewlineCountBeforeSelection: number;\n}\n\nexport class SimplePagedScreenReaderStrategy implements IPagedScreenReaderStrategy<ISimpleScreenReaderContentState> {\n\tprivate _getPageOfLine(lineNumber: number, linesPerPage: number): number {\n\t\treturn Math.floor((lineNumber - 1) / linesPerPage);\n\t}\n\n\tprivate _getRangeForPage(page: number, linesPerPage: number): Range {\n\t\tconst offset = page * linesPerPage;\n\t\tconst startLineNumber = offset + 1;\n\t\tconst endLineNumber = offset + linesPerPage;\n\t\treturn new Range(startLineNumber, 1, endLineNumber + 1, 1);\n\t}\n\n\tpublic fromEditorSelection(model: ISimpleModel, selection: Selection, linesPerPage: number, trimLongText: boolean): ISimpleScreenReaderContentState {\n\t\t// Chromium handles very poorly text even of a few thousand chars\n\t\t// Cut text to avoid stalling the entire UI\n\t\tconst LIMIT_CHARS = 500;\n\n\t\tconst selectionStartPage = this._getPageOfLine(selection.startLineNumber, linesPerPage);\n\t\tconst selectionStartPageRange = this._getRangeForPage(selectionStartPage, linesPerPage);\n\n\t\tconst selectionEndPage = this._getPageOfLine(selection.endLineNumber, linesPerPage);\n\t\tconst selectionEndPageRange = this._getRangeForPage(selectionEndPage, linesPerPage);\n\n\t\tlet pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn))!;\n\t\tif (trimLongText && model.getValueLengthInRange(pretextRange, EndOfLinePreference.LF) > LIMIT_CHARS) {\n\t\t\tconst pretextStart = model.modifyPosition(pretextRange.getEndPosition(), -LIMIT_CHARS);\n\t\t\tpretextRange = Range.fromPositions(pretextStart, pretextRange.getEndPosition());\n\t\t}\n\t\tconst pretext = model.getValueInRange(pretextRange, EndOfLinePreference.LF);\n\n\t\tconst lastLine = model.getLineCount();\n\t\tconst lastLineMaxColumn = model.getLineMaxColumn(lastLine);\n\t\tlet posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn))!;\n\t\tif (trimLongText && model.getValueLengthInRange(posttextRange, EndOfLinePreference.LF) > LIMIT_CHARS) {\n\t\t\tconst posttextEnd = model.modifyPosition(posttextRange.getStartPosition(), LIMIT_CHARS);\n\t\t\tposttextRange = Range.fromPositions(posttextRange.getStartPosition(), posttextEnd);\n\t\t}\n\t\tconst posttext = model.getValueInRange(posttextRange, EndOfLinePreference.LF);\n\n\n\t\tlet text: string;\n\t\tif (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) {\n\t\t\t// take full selection\n\t\t\ttext = model.getValueInRange(selection, EndOfLinePreference.LF);\n\t\t} else {\n\t\t\tconst selectionRange1 = selectionStartPageRange.intersectRanges(selection)!;\n\t\t\tconst selectionRange2 = selectionEndPageRange.intersectRanges(selection)!;\n\t\t\ttext = (\n\t\t\t\tmodel.getValueInRange(selectionRange1, EndOfLinePreference.LF)\n\t\t\t\t+ String.fromCharCode(8230)\n\t\t\t\t+ model.getValueInRange(selectionRange2, EndOfLinePreference.LF)\n\t\t\t);\n\t\t}\n\t\tif (trimLongText && text.length > 2 * LIMIT_CHARS) {\n\t\t\ttext = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length);\n\t\t}\n\n\t\tlet selectionStart: number;\n\t\tlet selectionEnd: number;\n\t\tif (selection.getDirection() === SelectionDirection.LTR) {\n\t\t\tselectionStart = pretext.length;\n\t\t\tselectionEnd = pretext.length + text.length;\n\t\t} else {\n\t\t\tselectionEnd = pretext.length;\n\t\t\tselectionStart = pretext.length + text.length;\n\t\t}\n\t\treturn {\n\t\t\tvalue: pretext + text + posttext,\n\t\t\tselection: selection,\n\t\t\tselectionStart,\n\t\t\tselectionEnd,\n\t\t\tstartPositionWithinEditor: pretextRange.getStartPosition(),\n\t\t\tnewlineCountBeforeSelection: pretextRange.endLineNumber - pretextRange.startLineNumber,\n\t\t};\n\t}\n}\n\nexport function ariaLabelForScreenReaderContent(options: IComputedEditorOptions, keybindingService: IKeybindingService) {\n\tconst accessibilitySupport = options.get(EditorOption.accessibilitySupport);\n\tif (accessibilitySupport === AccessibilitySupport.Disabled) {\n\n\t\tconst toggleKeybindingLabel = keybindingService.lookupKeybinding('editor.action.toggleScreenReaderAccessibilityMode')?.getAriaLabel();\n\t\tconst runCommandKeybindingLabel = keybindingService.lookupKeybinding('workbench.action.showCommands')?.getAriaLabel();\n\t\tconst keybindingEditorKeybindingLabel = keybindingService.lookupKeybinding('workbench.action.openGlobalKeybindings')?.getAriaLabel();\n\t\tconst editorNotAccessibleMessage = nls.localize('accessibilityModeOff', \"The editor is not accessible at this time.\");\n\t\tif (toggleKeybindingLabel) {\n\t\t\treturn nls.localize('accessibilityOffAriaLabel', \"{0} To enable screen reader optimized mode, use {1}\", editorNotAccessibleMessage, toggleKeybindingLabel);\n\t\t} else if (runCommandKeybindingLabel) {\n\t\t\treturn nls.localize('accessibilityOffAriaLabelNoKb', \"{0} To enable screen reader optimized mode, open the quick pick with {1} and run the command Toggle Screen Reader Accessibility Mode, which is currently not triggerable via keyboard.\", editorNotAccessibleMessage, runCommandKeybindingLabel);\n\t\t} else if (keybindingEditorKeybindingLabel) {\n\t\t\treturn nls.localize('accessibilityOffAriaLabelNoKbs', \"{0} Please assign a keybinding for the command Toggle Screen Reader Accessibility Mode by accessing the keybindings editor with {1} and run it.\", editorNotAccessibleMessage, keybindingEditorKeybindingLabel);\n\t\t} else {\n\t\t\t// SOS\n\t\t\treturn editorNotAccessibleMessage;\n\t\t}\n\t}\n\treturn options.get(EditorOption.ariaLabel);\n}\n\nexport function newlinecount(text: string): number {\n\tlet result = 0;\n\tlet startIndex = -1;\n\tdo {\n\t\tstartIndex = text.indexOf('\\n', startIndex + 1);\n\t\tif (startIndex === -1) {\n\t\t\tbreak;\n\t\t}\n\t\tresult++;\n\t} while (true);\n\treturn result;\n}\n"]}
@@ -34,9 +34,9 @@ import { IInstantiationService } from '../../../../../platform/instantiation/com
34
34
  import { AbstractEditContext } from '../editContext.js';
35
35
  import { TextAreaInput, TextAreaWrapper } from './textAreaEditContextInput.js';
36
36
  import { ariaLabelForScreenReaderContent, newlinecount, SimplePagedScreenReaderStrategy } from '../screenReaderUtils.js';
37
- import { getDataToCopy } from '../clipboardUtils.js';
38
37
  import { _debugComposition, TextAreaState } from './textAreaEditContextState.js';
39
38
  import { getMapForWordSeparators } from '../../../../common/core/wordCharacterClassifier.js';
39
+ import { TextAreaEditContextRegistry } from './textAreaEditContextRegistry.js';
40
40
  class VisibleTextAreaData {
41
41
  constructor(_context, modelLineNumber, distanceToModelLineStart, widthOfHiddenLineTextBefore, distanceToModelLineEnd) {
42
42
  this._context = _context;
@@ -93,7 +93,7 @@ class VisibleTextAreaData {
93
93
  }
94
94
  const canUseZeroSizeTextarea = (browser.isFirefox);
95
95
  let TextAreaEditContext = class TextAreaEditContext extends AbstractEditContext {
96
- constructor(context, overflowGuardContainer, viewController, visibleRangeProvider, _keybindingService, _instantiationService) {
96
+ constructor(ownerID, context, overflowGuardContainer, viewController, visibleRangeProvider, _keybindingService, _instantiationService) {
97
97
  super(context);
98
98
  this._keybindingService = _keybindingService;
99
99
  this._instantiationService = _instantiationService;
@@ -110,8 +110,6 @@ let TextAreaEditContext = class TextAreaEditContext extends AbstractEditContext
110
110
  this._contentWidth = layoutInfo.contentWidth;
111
111
  this._contentHeight = layoutInfo.height;
112
112
  this._fontInfo = options.get(59 /* EditorOption.fontInfo */);
113
- this._emptySelectionClipboard = options.get(45 /* EditorOption.emptySelectionClipboard */);
114
- this._copyWithSyntaxHighlighting = options.get(31 /* EditorOption.copyWithSyntaxHighlighting */);
115
113
  this._visibleTextArea = null;
116
114
  this._selections = [new Selection(1, 1, 1, 1)];
117
115
  this._modelSelections = [new Selection(1, 1, 1, 1)];
@@ -141,9 +139,7 @@ let TextAreaEditContext = class TextAreaEditContext extends AbstractEditContext
141
139
  overflowGuardContainer.appendChild(this.textAreaCover);
142
140
  const simplePagedScreenReaderStrategy = new SimplePagedScreenReaderStrategy();
143
141
  const textAreaInputHost = {
144
- getDataToCopy: () => {
145
- return getDataToCopy(this._context.viewModel, this._modelSelections, this._emptySelectionClipboard, this._copyWithSyntaxHighlighting);
146
- },
142
+ context: this._context,
147
143
  getScreenReaderContent: () => {
148
144
  if (this._accessibilitySupport === 1 /* AccessibilitySupport.Disabled */) {
149
145
  // We know for a fact that a screen reader is not attached
@@ -214,15 +210,7 @@ let TextAreaEditContext = class TextAreaEditContext extends AbstractEditContext
214
210
  this._viewController.emitKeyUp(e);
215
211
  }));
216
212
  this._register(this._textAreaInput.onPaste((e) => {
217
- let pasteOnNewLine = false;
218
- let multicursorText = null;
219
- let mode = null;
220
- if (e.metadata) {
221
- pasteOnNewLine = (this._emptySelectionClipboard && !!e.metadata.isFromEmptySelection);
222
- multicursorText = (typeof e.metadata.multicursorText !== 'undefined' ? e.metadata.multicursorText : null);
223
- mode = e.metadata.mode;
224
- }
225
- this._viewController.paste(e.text, pasteOnNewLine, multicursorText, mode);
213
+ this._viewController.paste(e.text, e.pasteOnNewLine, e.multicursorText, e.mode);
226
214
  }));
227
215
  this._register(this._textAreaInput.onCut(() => {
228
216
  this._viewController.cut();
@@ -331,6 +319,7 @@ let TextAreaEditContext = class TextAreaEditContext extends AbstractEditContext
331
319
  this._register(IME.onDidChange(() => {
332
320
  this._ensureReadOnlyAttribute();
333
321
  }));
322
+ this._register(TextAreaEditContextRegistry.register(ownerID, this));
334
323
  }
335
324
  get domNode() {
336
325
  return this.textArea;
@@ -444,8 +433,6 @@ let TextAreaEditContext = class TextAreaEditContext extends AbstractEditContext
444
433
  this._contentWidth = layoutInfo.contentWidth;
445
434
  this._contentHeight = layoutInfo.height;
446
435
  this._fontInfo = options.get(59 /* EditorOption.fontInfo */);
447
- this._emptySelectionClipboard = options.get(45 /* EditorOption.emptySelectionClipboard */);
448
- this._copyWithSyntaxHighlighting = options.get(31 /* EditorOption.copyWithSyntaxHighlighting */);
449
436
  this.textArea.setAttribute('wrap', this._textAreaWrapping && !this._visibleTextArea ? 'on' : 'off');
450
437
  const { tabSize } = this._context.viewModel.model.getOptions();
451
438
  this.textArea.domNode.style.tabSize = `${tabSize * this._fontInfo.spaceWidth}px`;
@@ -700,8 +687,8 @@ let TextAreaEditContext = class TextAreaEditContext extends AbstractEditContext
700
687
  }
701
688
  };
702
689
  TextAreaEditContext = __decorate([
703
- __param(4, IKeybindingService),
704
- __param(5, IInstantiationService)
690
+ __param(5, IKeybindingService),
691
+ __param(6, IInstantiationService)
705
692
  ], TextAreaEditContext);
706
693
  export { TextAreaEditContext };
707
694
  function measureText(targetDocument, text, fontInfo, tabSize) {