monaco-editor-core 0.57.0 → 0.58.0-dev-20261104

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 (508) 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 +38 -6
  18. package/esm/vs/base/browser/browser.js +8 -0
  19. package/esm/vs/base/browser/browser.js.map +1 -1
  20. package/esm/vs/base/browser/contextmenu.js +8 -1
  21. package/esm/vs/base/browser/contextmenu.js.map +1 -1
  22. package/esm/vs/base/browser/dom.js +34 -5
  23. package/esm/vs/base/browser/dom.js.map +1 -1
  24. package/esm/vs/base/browser/dompurify/dompurify.js +2457 -2640
  25. package/esm/vs/base/browser/markdownRenderer.js +48 -21
  26. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  27. package/esm/vs/base/browser/pixelRatio.js +3 -2
  28. package/esm/vs/base/browser/pixelRatio.js.map +1 -1
  29. package/esm/vs/base/browser/ui/actionbar/actionViewItems.js +5 -2
  30. package/esm/vs/base/browser/ui/actionbar/actionViewItems.js.map +1 -1
  31. package/esm/vs/base/browser/ui/actionbar/actionbar.js +7 -2
  32. package/esm/vs/base/browser/ui/actionbar/actionbar.js.map +1 -1
  33. package/esm/vs/base/browser/ui/animations/animations.js +68 -40
  34. package/esm/vs/base/browser/ui/animations/animations.js.map +1 -1
  35. package/esm/vs/base/browser/ui/button/button.js +7 -0
  36. package/esm/vs/base/browser/ui/button/button.js.map +1 -1
  37. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  38. package/esm/vs/base/browser/ui/contextview/contextview.css +15 -0
  39. package/esm/vs/base/browser/ui/contextview/contextview.js +266 -40
  40. package/esm/vs/base/browser/ui/contextview/contextview.js.map +1 -1
  41. package/esm/vs/base/browser/ui/contextview/windowControlsOverlay.js +72 -0
  42. package/esm/vs/base/browser/ui/contextview/windowControlsOverlay.js.map +1 -0
  43. package/esm/vs/base/browser/ui/dialog/dialog.css +5 -0
  44. package/esm/vs/base/browser/ui/dropdown/dropdown.js +2 -1
  45. package/esm/vs/base/browser/ui/dropdown/dropdown.js.map +1 -1
  46. package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +1 -0
  47. package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js.map +1 -1
  48. package/esm/vs/base/browser/ui/hover/hover.js.map +1 -1
  49. package/esm/vs/base/browser/ui/list/listView.js +87 -15
  50. package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
  51. package/esm/vs/base/browser/ui/list/listWidget.js +37 -15
  52. package/esm/vs/base/browser/ui/list/listWidget.js.map +1 -1
  53. package/esm/vs/base/browser/ui/menu/menu.js +189 -52
  54. package/esm/vs/base/browser/ui/menu/menu.js.map +1 -1
  55. package/esm/vs/base/browser/ui/radio/radio.css +11 -0
  56. package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js +2 -1
  57. package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js.map +1 -1
  58. package/esm/vs/base/browser/ui/selectBox/selectBox.js.map +1 -1
  59. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js +14 -8
  60. package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js.map +1 -1
  61. package/esm/vs/base/browser/ui/splitview/splitview.js +11 -7
  62. package/esm/vs/base/browser/ui/splitview/splitview.js.map +1 -1
  63. package/esm/vs/base/browser/ui/toggle/switch.css +16 -7
  64. package/esm/vs/base/browser/ui/toggle/switch.js +9 -6
  65. package/esm/vs/base/browser/ui/toggle/switch.js.map +1 -1
  66. package/esm/vs/base/browser/ui/toolbar/toolbar.css +1 -2
  67. package/esm/vs/base/browser/ui/toolbar/toolbar.js +85 -38
  68. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  69. package/esm/vs/base/browser/ui/tree/abstractTree.js +48 -9
  70. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  71. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +10 -1
  72. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  73. package/esm/vs/base/browser/ui/tree/objectTree.js +3 -0
  74. package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
  75. package/esm/vs/base/browser/ui/tree/tree.js.map +1 -1
  76. package/esm/vs/base/common/actions.js +8 -2
  77. package/esm/vs/base/common/actions.js.map +1 -1
  78. package/esm/vs/base/common/arrays.js +4 -4
  79. package/esm/vs/base/common/arrays.js.map +1 -1
  80. package/esm/vs/base/common/async.js +12 -8
  81. package/esm/vs/base/common/async.js.map +1 -1
  82. package/esm/vs/base/common/cancellation.js +25 -0
  83. package/esm/vs/base/common/cancellation.js.map +1 -1
  84. package/esm/vs/base/common/codicons.js +2 -0
  85. package/esm/vs/base/common/codicons.js.map +1 -1
  86. package/esm/vs/base/common/codiconsLibrary.js +2 -0
  87. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  88. package/esm/vs/base/common/color.js +1 -1
  89. package/esm/vs/base/common/color.js.map +1 -1
  90. package/esm/vs/base/common/diff/diff.js +60 -1
  91. package/esm/vs/base/common/diff/diff.js.map +1 -1
  92. package/esm/vs/base/common/event.js +1 -1
  93. package/esm/vs/base/common/event.js.map +1 -1
  94. package/esm/vs/base/common/glob.js +1 -0
  95. package/esm/vs/base/common/glob.js.map +1 -1
  96. package/esm/vs/base/common/htmlContent.js +74 -12
  97. package/esm/vs/base/common/htmlContent.js.map +1 -1
  98. package/esm/vs/base/common/json.js +19 -0
  99. package/esm/vs/base/common/json.js.map +1 -0
  100. package/esm/vs/base/common/network.js +16 -0
  101. package/esm/vs/base/common/network.js.map +1 -1
  102. package/esm/vs/base/common/resources.js +14 -2
  103. package/esm/vs/base/common/resources.js.map +1 -1
  104. package/esm/vs/base/common/strings.js +1 -1
  105. package/esm/vs/base/common/strings.js.map +1 -1
  106. package/esm/vs/base/common/uri.js +2 -2
  107. package/esm/vs/base/common/uri.js.map +1 -1
  108. package/esm/vs/editor/browser/config/editorConfiguration.js +1 -1
  109. package/esm/vs/editor/browser/config/fontMeasurements.js +19 -6
  110. package/esm/vs/editor/browser/config/fontMeasurements.js.map +1 -1
  111. package/esm/vs/editor/browser/controller/dragScrolling.js +3 -3
  112. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +11 -5
  113. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
  114. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +8 -38
  115. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
  116. package/esm/vs/editor/browser/controller/editContext/native/screenReaderContentRich.js +3 -3
  117. package/esm/vs/editor/browser/controller/editContext/native/screenReaderSupport.js +6 -6
  118. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +12 -10
  119. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
  120. package/esm/vs/editor/browser/controller/mouseHandler.js +7 -7
  121. package/esm/vs/editor/browser/controller/mouseTarget.js +3 -3
  122. package/esm/vs/editor/browser/coreCommands.js +2 -2
  123. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  124. package/esm/vs/editor/browser/editorMarkdownSanitizer.js +19 -0
  125. package/esm/vs/editor/browser/editorMarkdownSanitizer.js.map +1 -0
  126. package/esm/vs/editor/browser/gpu/rectangleRenderer.js +1 -1
  127. package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -1
  128. package/esm/vs/editor/browser/observableCodeEditor.js +1 -1
  129. package/esm/vs/editor/browser/services/editorWorkerService.js +3 -2
  130. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  131. package/esm/vs/editor/browser/services/openerService.js +6 -2
  132. package/esm/vs/editor/browser/services/openerService.js.map +1 -1
  133. package/esm/vs/editor/browser/view/domLineBreaksComputer.js +34 -11
  134. package/esm/vs/editor/browser/view/domLineBreaksComputer.js.map +1 -1
  135. package/esm/vs/editor/browser/view/viewController.js +7 -7
  136. package/esm/vs/editor/browser/view/viewController.js.map +1 -1
  137. package/esm/vs/editor/browser/view/viewLayer.js +1 -1
  138. package/esm/vs/editor/browser/view/viewOverlays.js +4 -4
  139. package/esm/vs/editor/browser/view.js +5 -5
  140. package/esm/vs/editor/browser/viewParts/blockDecorations/blockDecorations.js +1 -1
  141. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +11 -3
  142. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
  143. package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js +6 -6
  144. package/esm/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.js +12 -12
  145. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +9 -2
  146. package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js.map +1 -1
  147. package/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.js +2 -2
  148. package/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.js +2 -2
  149. package/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.js +2 -2
  150. package/esm/vs/editor/browser/viewParts/margin/margin.js +2 -2
  151. package/esm/vs/editor/browser/viewParts/minimap/minimap.js +6 -6
  152. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +9 -2
  153. package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js.map +1 -1
  154. package/esm/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.js +5 -5
  155. package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js +3 -3
  156. package/esm/vs/editor/browser/viewParts/rulers/rulers.js +2 -2
  157. package/esm/vs/editor/browser/viewParts/rulersGpu/rulersGpu.js +1 -1
  158. package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js +3 -3
  159. package/esm/vs/editor/browser/viewParts/selections/selections.js +2 -2
  160. package/esm/vs/editor/browser/viewParts/viewCursors/viewCursor.js +2 -2
  161. package/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.js +6 -6
  162. package/esm/vs/editor/browser/viewParts/viewLines/viewLineOptions.js +5 -5
  163. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +11 -11
  164. package/esm/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.js +1 -1
  165. package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js +2 -2
  166. package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js +4 -4
  167. package/esm/vs/editor/browser/viewParts/wordWrapIndicator/wordWrapIndicator.js +2 -2
  168. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +22 -21
  169. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  170. package/esm/vs/editor/browser/widget/diffEditor/commands.js +12 -12
  171. package/esm/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js +18 -18
  172. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -1
  173. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js +3 -3
  174. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js +10 -10
  175. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js.map +1 -1
  176. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js +2 -2
  177. package/esm/vs/editor/browser/widget/diffEditor/diffEditor.contribution.js +4 -4
  178. package/esm/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.js +21 -3
  179. package/esm/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.js.map +1 -1
  180. package/esm/vs/editor/browser/widget/diffEditor/features/gutterFeature.js +1 -1
  181. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +10 -10
  182. package/esm/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js +2 -2
  183. package/esm/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.js +1 -1
  184. package/esm/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.js +2 -2
  185. package/esm/vs/editor/browser/widget/diffEditor/registrations.contribution.js +5 -5
  186. package/esm/vs/editor/browser/widget/multiDiffEditor/colors.js +3 -3
  187. package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollLayout.js +2 -2
  188. package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollLayout.js.map +1 -1
  189. package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollView.js +21 -2
  190. package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollView.js.map +1 -1
  191. package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +2 -2
  192. package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +11 -3
  193. package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
  194. package/esm/vs/editor/browser/widget/multiDiffEditor/virtualizedItemManager.js +1 -0
  195. package/esm/vs/editor/browser/widget/multiDiffEditor/virtualizedItemManager.js.map +1 -1
  196. package/esm/vs/editor/common/commands/columnSelectionPasteCommand.js +64 -0
  197. package/esm/vs/editor/common/commands/columnSelectionPasteCommand.js.map +1 -0
  198. package/esm/vs/editor/common/config/editorConfigurationSchema.js +68 -58
  199. package/esm/vs/editor/common/config/editorConfigurationSchema.js.map +1 -1
  200. package/esm/vs/editor/common/config/editorOptions.js +560 -500
  201. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  202. package/esm/vs/editor/common/core/editorColorRegistry.js +71 -71
  203. package/esm/vs/editor/common/core/edits/textEdit.js +16 -0
  204. package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
  205. package/esm/vs/editor/common/cursor/cursor.js +20 -10
  206. package/esm/vs/editor/common/cursor/cursor.js.map +1 -1
  207. package/esm/vs/editor/common/cursor/cursorTypeEditOperations.js +67 -14
  208. package/esm/vs/editor/common/cursor/cursorTypeEditOperations.js.map +1 -1
  209. package/esm/vs/editor/common/cursor/cursorTypeOperations.js +2 -2
  210. package/esm/vs/editor/common/cursor/cursorTypeOperations.js.map +1 -1
  211. package/esm/vs/editor/common/cursorCommon.js +22 -21
  212. package/esm/vs/editor/common/cursorCommon.js.map +1 -1
  213. package/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js +21 -8
  214. package/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js.map +1 -1
  215. package/esm/vs/editor/common/diff/documentDiffProvider.js.map +1 -1
  216. package/esm/vs/editor/common/diff/externalLinesDiffComputer.js +38 -26
  217. package/esm/vs/editor/common/diff/externalLinesDiffComputer.js.map +1 -1
  218. package/esm/vs/editor/common/diff/rangeMapping.js +11 -1
  219. package/esm/vs/editor/common/diff/rangeMapping.js.map +1 -1
  220. package/esm/vs/editor/common/diff/verifyLinesDiff.js +28 -0
  221. package/esm/vs/editor/common/diff/verifyLinesDiff.js.map +1 -0
  222. package/esm/vs/editor/common/editorContextKeys.js +53 -53
  223. package/esm/vs/editor/common/languages/languageConfiguration.js +8 -0
  224. package/esm/vs/editor/common/languages/languageConfiguration.js.map +1 -1
  225. package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
  226. package/esm/vs/editor/common/languages.js +56 -56
  227. package/esm/vs/editor/common/model/editStack.js +1 -1
  228. package/esm/vs/editor/common/services/editorWebWorker.js +27 -6
  229. package/esm/vs/editor/common/services/editorWebWorker.js.map +1 -1
  230. package/esm/vs/editor/common/services/editorWorker.js.map +1 -1
  231. package/esm/vs/editor/common/services/languageService.js +6 -4
  232. package/esm/vs/editor/common/services/languageService.js.map +1 -1
  233. package/esm/vs/editor/common/services/markerDecorationsService.js +21 -2
  234. package/esm/vs/editor/common/services/markerDecorationsService.js.map +1 -1
  235. package/esm/vs/editor/common/standalone/standaloneEnums.js +100 -97
  236. package/esm/vs/editor/common/standalone/standaloneEnums.js.map +1 -1
  237. package/esm/vs/editor/common/standaloneStrings.js +11 -11
  238. package/esm/vs/editor/common/textModelEditSource.js +9 -0
  239. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  240. package/esm/vs/editor/common/viewLayout/viewLayout.js +16 -16
  241. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
  242. package/esm/vs/editor/common/viewModel/monospaceLineBreaksComputer.js +1 -1
  243. package/esm/vs/editor/common/viewModel/viewModelImpl.js +19 -19
  244. package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
  245. package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
  246. package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +9 -9
  247. package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
  248. package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
  249. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +23 -20
  250. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
  251. package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
  252. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
  253. package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
  254. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
  255. package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
  256. package/esm/vs/editor/contrib/codeAction/browser/codeActionModel.js +1 -1
  257. package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
  258. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
  259. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +25 -10
  260. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
  261. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
  262. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
  263. package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerContribution.js +1 -1
  264. package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +3 -3
  265. package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
  266. package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerParticipant.js +1 -1
  267. package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
  268. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +17 -17
  269. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js.map +1 -1
  270. package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
  271. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
  272. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +39 -39
  273. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
  274. package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
  275. package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
  276. package/esm/vs/editor/contrib/dropOrPasteInto/browser/pasteEditSession.js +19 -0
  277. package/esm/vs/editor/contrib/dropOrPasteInto/browser/pasteEditSession.js.map +1 -0
  278. package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +26 -18
  279. package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js.map +1 -1
  280. package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
  281. package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js.map +1 -1
  282. package/esm/vs/editor/contrib/find/browser/findController.js +18 -18
  283. package/esm/vs/editor/contrib/find/browser/findController.js.map +1 -1
  284. package/esm/vs/editor/contrib/find/browser/findModel.js +6 -6
  285. package/esm/vs/editor/contrib/find/browser/findWidget.js +40 -40
  286. package/esm/vs/editor/contrib/find/browser/findWidget.js.map +1 -1
  287. package/esm/vs/editor/contrib/folding/browser/folding.js +23 -23
  288. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
  289. package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
  290. package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
  291. package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
  292. package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
  293. package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
  294. package/esm/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.js +3 -3
  295. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +2 -2
  296. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +4 -4
  297. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js.map +1 -1
  298. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
  299. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
  300. package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
  301. package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
  302. package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
  303. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js +9 -3
  304. package/esm/vs/editor/contrib/hover/browser/contentHoverController.js.map +1 -1
  305. package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js +2 -2
  306. package/esm/vs/editor/contrib/hover/browser/glyphHoverWidget.js +2 -1
  307. package/esm/vs/editor/contrib/hover/browser/glyphHoverWidget.js.map +1 -1
  308. package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
  309. package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
  310. package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
  311. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +10 -8
  312. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
  313. package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +6 -6
  314. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  315. package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
  316. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +5 -5
  317. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +9 -9
  318. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.js +3 -3
  319. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.js.map +1 -1
  320. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +21 -21
  321. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -13
  322. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -7
  323. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  324. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +6 -5
  325. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js.map +1 -1
  326. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +1 -1
  327. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +2 -2
  328. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +7 -7
  329. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
  330. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -1
  331. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +3 -3
  332. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
  333. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  334. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  335. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
  336. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +5 -4
  337. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js.map +1 -1
  338. package/esm/vs/editor/contrib/links/browser/links.js +16 -15
  339. package/esm/vs/editor/contrib/links/browser/links.js.map +1 -1
  340. package/esm/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.js +1 -1
  341. package/esm/vs/editor/contrib/message/browser/messageController.js +16 -12
  342. package/esm/vs/editor/contrib/message/browser/messageController.js.map +1 -1
  343. package/esm/vs/editor/contrib/middleScroll/browser/middleScrollController.js +1 -1
  344. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +91 -55
  345. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js.map +1 -1
  346. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  347. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsModel.js +3 -3
  348. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsModel.js.map +1 -1
  349. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +6 -4
  350. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js.map +1 -1
  351. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  352. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  353. package/esm/vs/editor/contrib/placeholderText/browser/placeholderTextContribution.js +1 -1
  354. package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +1 -1
  355. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +12 -12
  356. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  357. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +3 -3
  358. package/esm/vs/editor/contrib/rename/browser/rename.js +11 -11
  359. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  360. package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +6 -6
  361. package/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +23 -13
  362. package/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js.map +1 -1
  363. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +5 -5
  364. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +5 -5
  365. package/esm/vs/editor/contrib/snippet/browser/snippetSession.js +2 -2
  366. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  367. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  368. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +10 -8
  369. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
  370. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.js +1 -1
  371. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.js +2 -2
  372. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +6 -6
  373. package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -9
  374. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +15 -15
  375. package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +2 -2
  376. package/esm/vs/editor/contrib/suggest/browser/suggestModel.js +11 -11
  377. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +27 -27
  378. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +8 -6
  379. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
  380. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +5 -5
  381. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +3 -3
  382. package/esm/vs/editor/contrib/suggest/browser/wordDistance.js +1 -1
  383. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  384. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  385. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  386. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  387. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +27 -27
  388. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +9 -9
  389. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  390. package/esm/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.js +1 -1
  391. package/esm/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.js.map +1 -1
  392. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +50 -14
  393. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js.map +1 -1
  394. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +6 -6
  395. package/esm/vs/editor/editor.api.d.ts +133 -98
  396. package/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js +1 -1
  397. package/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js +5 -3
  398. package/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js.map +1 -1
  399. package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js +15 -1
  400. package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
  401. package/esm/vs/nls.js.map +1 -1
  402. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +72 -66
  403. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js.map +1 -1
  404. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  405. package/esm/vs/platform/actionWidget/browser/actionList.js +434 -136
  406. package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
  407. package/esm/vs/platform/actionWidget/browser/actionWidget.css +74 -4
  408. package/esm/vs/platform/actionWidget/browser/actionWidget.js +24 -26
  409. package/esm/vs/platform/actionWidget/browser/actionWidget.js.map +1 -1
  410. package/esm/vs/platform/actionWidget/browser/actionWidgetMotion.js +16 -0
  411. package/esm/vs/platform/actionWidget/browser/actionWidgetMotion.js.map +1 -0
  412. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +15 -17
  413. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js.map +1 -1
  414. package/esm/vs/platform/actions/browser/toolbar.js +25 -12
  415. package/esm/vs/platform/actions/browser/toolbar.js.map +1 -1
  416. package/esm/vs/platform/actions/common/actions.js +4 -2
  417. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  418. package/esm/vs/platform/actions/common/menuService.js +15 -8
  419. package/esm/vs/platform/actions/common/menuService.js.map +1 -1
  420. package/esm/vs/platform/configuration/common/configuration.js +3 -1
  421. package/esm/vs/platform/configuration/common/configuration.js.map +1 -1
  422. package/esm/vs/platform/configuration/common/configurationModels.js +16 -11
  423. package/esm/vs/platform/configuration/common/configurationModels.js.map +1 -1
  424. package/esm/vs/platform/configuration/common/configurationRegistry.js +29 -27
  425. package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
  426. package/esm/vs/platform/configuration/common/configurations.js +13 -1
  427. package/esm/vs/platform/configuration/common/configurations.js.map +1 -1
  428. package/esm/vs/platform/contextkey/browser/contextKeyService.js +2 -2
  429. package/esm/vs/platform/contextkey/browser/contextKeyService.js.map +1 -1
  430. package/esm/vs/platform/contextkey/common/contextkey.js +28 -14
  431. package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
  432. package/esm/vs/platform/contextkey/common/contextkeys.js +10 -10
  433. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  434. package/esm/vs/platform/contextview/browser/contextMenuHandler.js +17 -4
  435. package/esm/vs/platform/contextview/browser/contextMenuHandler.js.map +1 -1
  436. package/esm/vs/platform/contextview/browser/contextMenuService.js +1 -1
  437. package/esm/vs/platform/contextview/browser/contextMenuService.js.map +1 -1
  438. package/esm/vs/platform/contextview/browser/contextView.js.map +1 -1
  439. package/esm/vs/platform/contextview/browser/contextViewService.js +7 -2
  440. package/esm/vs/platform/contextview/browser/contextViewService.js.map +1 -1
  441. package/esm/vs/platform/editor/common/editor.js +17 -0
  442. package/esm/vs/platform/editor/common/editor.js.map +1 -1
  443. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  444. package/esm/vs/platform/hover/browser/hoverService.js +6 -3
  445. package/esm/vs/platform/hover/browser/hoverService.js.map +1 -1
  446. package/esm/vs/platform/hover/browser/hoverWidget.js +38 -6
  447. package/esm/vs/platform/hover/browser/hoverWidget.js.map +1 -1
  448. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +32 -5
  449. package/esm/vs/platform/hover/browser/updatableHoverWidget.js.map +1 -1
  450. package/esm/vs/platform/instantiation/common/instantiationService.js +1 -1
  451. package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
  452. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +5 -5
  453. package/esm/vs/platform/keybinding/common/keybindingResolver.js +1 -1
  454. package/esm/vs/platform/keybinding/common/keybindingResolver.js.map +1 -1
  455. package/esm/vs/platform/list/browser/listService.js +27 -27
  456. package/esm/vs/platform/markers/common/markerService.js +11 -8
  457. package/esm/vs/platform/markers/common/markerService.js.map +1 -1
  458. package/esm/vs/platform/markers/common/markers.js +6 -6
  459. package/esm/vs/platform/markers/common/markers.js.map +1 -1
  460. package/esm/vs/platform/notification/common/notification.js.map +1 -1
  461. package/esm/vs/platform/notification/common/notificationMessage.js +37 -0
  462. package/esm/vs/platform/notification/common/notificationMessage.js.map +1 -0
  463. package/esm/vs/platform/opener/common/opener.js.map +1 -1
  464. package/esm/vs/platform/progress/common/progress.js.map +1 -1
  465. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
  466. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  467. package/esm/vs/platform/quickinput/browser/media/quickInput.css +33 -2
  468. package/esm/vs/platform/quickinput/browser/quickAccess.js +7 -4
  469. package/esm/vs/platform/quickinput/browser/quickAccess.js.map +1 -1
  470. package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
  471. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  472. package/esm/vs/platform/quickinput/browser/quickInputController.js +65 -15
  473. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  474. package/esm/vs/platform/quickinput/browser/quickInputList.js +96 -90
  475. package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
  476. package/esm/vs/platform/quickinput/browser/quickInputService.js +5 -7
  477. package/esm/vs/platform/quickinput/browser/quickInputService.js.map +1 -1
  478. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  479. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  480. package/esm/vs/platform/quickinput/browser/tree/quickTree.js +1 -1
  481. package/esm/vs/platform/quickinput/common/quickAccess.js.map +1 -1
  482. package/esm/vs/platform/quickinput/common/quickInput.js.map +1 -1
  483. package/esm/vs/platform/storage/common/storage.js.map +1 -1
  484. package/esm/vs/platform/theme/common/colorRegistry.js +1 -0
  485. package/esm/vs/platform/theme/common/colorRegistry.js.map +1 -1
  486. package/esm/vs/platform/theme/common/colorUtils.js +11 -3
  487. package/esm/vs/platform/theme/common/colorUtils.js.map +1 -1
  488. package/esm/vs/platform/theme/common/colors/baseColors.js +19 -19
  489. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -9
  490. package/esm/vs/platform/theme/common/colors/chartsColors.js.map +1 -1
  491. package/esm/vs/platform/theme/common/colors/confettiColors.js +14 -0
  492. package/esm/vs/platform/theme/common/colors/confettiColors.js.map +1 -0
  493. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  494. package/esm/vs/platform/theme/common/colors/inputColors.js +48 -48
  495. package/esm/vs/platform/theme/common/colors/inputColors.js.map +1 -1
  496. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  497. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  498. package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
  499. package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
  500. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  501. package/esm/vs/platform/theme/common/colors/quickpickColors.js +10 -10
  502. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  503. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  504. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  505. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  506. package/monaco.d.ts +133 -98
  507. package/package.json +3 -3
  508. package/version.txt +1 -1
@@ -1,6 +1,7 @@
1
1
  import { isWindows } from '../../../../base/common/platform.js';
2
2
  import { Mimes } from '../../../../base/common/mime.js';
3
3
  import { generateUuid } from '../../../../base/common/uuid.js';
4
+ import { getPathForFile } from '../../../../platform/dnd/browser/dnd.js';
4
5
  import { toExternalVSDataTransfer } from '../../dataTransfer.js';
5
6
  export function generateDataToCopyAndStoreInMemory(viewModel, id, isFirefox) {
6
7
  const { dataToCopy, metadata } = generateDataToCopy(viewModel);
@@ -22,12 +23,14 @@ function generateDataToCopy(viewModel) {
22
23
  version: 1,
23
24
  id: generateUuid(),
24
25
  isFromEmptySelection: dataToCopy.isFromEmptySelection,
26
+ isBlock: dataToCopy.isBlock,
25
27
  multicursorText: dataToCopy.multicursorText,
26
28
  mode: dataToCopy.mode
27
29
  };
28
30
  return { dataToCopy, metadata };
29
31
  }
30
32
  function getDataToCopy(viewModel, modelSelections, emptySelectionClipboard, copyWithSyntaxHighlighting) {
33
+ const isBlock = viewModel.getCursorColumnSelectData().isReal;
31
34
  const { sourceRanges, sourceText } = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);
32
35
  const newLineCharacter = viewModel.model.getEOL();
33
36
  const isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());
@@ -44,6 +47,7 @@ function getDataToCopy(viewModel, modelSelections, emptySelectionClipboard, copy
44
47
  }
45
48
  const dataToCopy = {
46
49
  isFromEmptySelection,
50
+ isBlock,
47
51
  sourceRanges,
48
52
  multicursorText,
49
53
  text,
@@ -79,7 +83,7 @@ export const CopyOptions = {
79
83
  electronBugWorkaroundCopyEventHasFired: false
80
84
  };
81
85
  const ClipboardEventUtils = {
82
- getTextData(clipboardData) {
86
+ getTextData(clipboardData, getFilePath) {
83
87
  const text = clipboardData.getData(Mimes.text);
84
88
  let metadata = null;
85
89
  const rawmetadata = clipboardData.getData('vscode-editor-data');
@@ -95,9 +99,11 @@ const ClipboardEventUtils = {
95
99
  }
96
100
  }
97
101
  if (text.length === 0 && metadata === null && clipboardData.files.length > 0) {
98
- // no textual data pasted, generate text from file names
102
+ // No textual data pasted. This is what Chromium does when files copied in a file manager are pasted:
103
+ // it only exposes the files and withholds the text (which on Linux contains their full paths).
104
+ // Generate text from the file paths, or from the file names when the paths are not available (e.g. web).
99
105
  const files = Array.prototype.slice.call(clipboardData.files, 0);
100
- return [files.map(file => file.name).join('\n'), null];
106
+ return [files.map(file => getFilePath(file) || file.name).join('\n'), null];
101
107
  }
102
108
  return [text, metadata];
103
109
  },
@@ -142,9 +148,9 @@ export function createClipboardCopyEvent(e, isCut, context, logService, isFirefo
142
148
  /**
143
149
  * Creates an IClipboardPasteEvent from a DOM ClipboardEvent.
144
150
  */
145
- export function createClipboardPasteEvent(e) {
151
+ export function createClipboardPasteEvent(e, getFilePath = getPathForFile) {
146
152
  let handled = false;
147
- let [text, metadata] = e.clipboardData ? ClipboardEventUtils.getTextData(e.clipboardData) : ['', null];
153
+ let [text, metadata] = e.clipboardData ? ClipboardEventUtils.getTextData(e.clipboardData, getFilePath) : ['', null];
148
154
  metadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);
149
155
  return {
150
156
  clipboardData: createReadableClipboardData(e.clipboardData),
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/editContext/clipboardUtils.ts","vs/editor/browser/controller/editContext/clipboardUtils.ts"],"names":[],"mappings":"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","file":"clipboardUtils.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 *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ILogService } from '../../../../platform/log/common/log.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { generateUuid } from '../../../../base/common/uuid.js';\nimport { VSDataTransfer } from '../../../../base/common/dataTransfer.js';\nimport { toExternalVSDataTransfer } from '../../dataTransfer.js';\n\nexport function generateDataToCopyAndStoreInMemory(viewModel: IViewModel, id: string | undefined, isFirefox: boolean): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst { dataToCopy, metadata } = generateDataToCopy(viewModel);\n\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\treturn { dataToCopy, metadata };\n}\n\nfunction storeMetadataInMemory(textToCopy: string, metadata: ClipboardStoredMetadata, isFirefox: boolean): void {\n\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t(isFirefox ? textToCopy.replace(/\\r\\n/g, '\\n') : textToCopy),\n\t\tmetadata\n\t);\n}\n\nfunction generateDataToCopy(viewModel: IViewModel): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst emptySelectionClipboard = viewModel.getEditorOption(EditorOption.emptySelectionClipboard);\n\tconst copyWithSyntaxHighlighting = viewModel.getEditorOption(EditorOption.copyWithSyntaxHighlighting);\n\tconst selections = viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\tconst dataToCopy = getDataToCopy(viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\tconst metadata: ClipboardStoredMetadata = {\n\t\tversion: 1,\n\t\tid: generateUuid(),\n\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\tmulticursorText: dataToCopy.multicursorText,\n\t\tmode: dataToCopy.mode\n\t};\n\treturn { dataToCopy, metadata };\n}\n\nfunction getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst { sourceRanges, sourceText } = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(sourceText) ? sourceText : null);\n\tconst text = (Array.isArray(sourceText) ? sourceText.join(newLineCharacter) : sourceText);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && sourceText.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tsourceRanges,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tsourceRanges: Range[];\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false,\n\telectronBugWorkaroundCopyEventHasFired: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nconst ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: IReadableClipboardData | DataTransfer): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// no textual data pasted, generate text from file names\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: IWritableClipboardData, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n\n/**\n * Readable clipboard data for paste operations.\n */\nexport interface IReadableClipboardData {\n\t/**\n\t * All MIME types present in the clipboard.\n\t */\n\ttypes: string[];\n\n\t/**\n\t * Files from the clipboard (for paste operations).\n\t */\n\treadonly files: readonly File[];\n\n\t/**\n\t * Get data for a specific MIME type.\n\t */\n\tgetData(type: string): string;\n}\n\n/**\n * Writable clipboard data for copy/cut operations.\n */\nexport interface IWritableClipboardData {\n\t/**\n\t * Set data for a specific MIME type.\n\t */\n\tsetData(type: string, value: string): void;\n}\n\n/**\n * Event data for clipboard copy/cut events.\n */\nexport interface IClipboardCopyEvent {\n\t/**\n\t * Whether this is a cut operation.\n\t */\n\treadonly isCut: boolean;\n\n\t/**\n\t * The clipboard data to write to.\n\t */\n\treadonly clipboardData: IWritableClipboardData;\n\n\t/**\n\t * The data to be copied to the clipboard.\n\t */\n\treadonly dataToCopy: ClipboardDataToCopy;\n\n\t/**\n\t * Ensure that the clipboard gets the editor data.\n\t */\n\tensureClipboardGetsEditorData(): void;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Event data for clipboard paste events.\n */\nexport interface IClipboardPasteEvent {\n\t/**\n\t * The clipboard data being pasted.\n\t */\n\treadonly clipboardData: IReadableClipboardData;\n\n\t/**\n\t * The metadata stored alongside the clipboard data, if any.\n\t */\n\treadonly metadata: ClipboardStoredMetadata | null;\n\n\t/**\n\t * The text content being pasted.\n\t */\n\treadonly text: string;\n\n\t/**\n\t * The underlying DOM event, if available.\n\t * @deprecated Use clipboardData instead. This is provided for backward compatibility.\n\t */\n\treadonly browserEvent: ClipboardEvent | undefined;\n\n\ttoExternalVSDataTransfer(): VSDataTransfer | undefined;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Creates an IClipboardCopyEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardCopyEvent(e: ClipboardEvent, isCut: boolean, context: ViewContext, logService: ILogService, isFirefox: boolean): IClipboardCopyEvent {\n\tconst { dataToCopy, metadata } = generateDataToCopy(context.viewModel);\n\tlet handled = false;\n\treturn {\n\t\tisCut,\n\t\tclipboardData: {\n\t\t\tsetData: (type: string, value: string) => {\n\t\t\t\te.clipboardData?.setData(type, value);\n\t\t\t},\n\t\t},\n\t\tdataToCopy,\n\t\tensureClipboardGetsEditorData: (): void => {\n\t\t\te.preventDefault();\n\t\t\tif (e.clipboardData) {\n\t\t\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, metadata);\n\t\t\t}\n\t\t\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\t\t\tlogService.trace('ensureClipboardGetsEditorSelection with id : ', metadata.id, ' with text.length: ', dataToCopy.text.length);\n\t\t},\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\n/**\n * Creates an IClipboardPasteEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardPasteEvent(e: ClipboardEvent): IClipboardPasteEvent {\n\tlet handled = false;\n\tlet [text, metadata] = e.clipboardData ? ClipboardEventUtils.getTextData(e.clipboardData) : ['', null];\n\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\treturn {\n\t\tclipboardData: createReadableClipboardData(e.clipboardData),\n\t\tmetadata,\n\t\ttext,\n\t\ttoExternalVSDataTransfer: () => e.clipboardData ? toExternalVSDataTransfer(e.clipboardData) : undefined,\n\t\tbrowserEvent: e,\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\nexport function createReadableClipboardData(dataTransfer: DataTransfer | undefined | null): IReadableClipboardData {\n\treturn {\n\t\ttypes: Array.from(dataTransfer?.types ?? []),\n\t\tfiles: Array.prototype.slice.call(dataTransfer?.files ?? [], 0),\n\t\tgetData: (type: string) => dataTransfer?.getData(type) ?? '',\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 *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ILogService } from '../../../../platform/log/common/log.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { generateUuid } from '../../../../base/common/uuid.js';\nimport { VSDataTransfer } from '../../../../base/common/dataTransfer.js';\nimport { toExternalVSDataTransfer } from '../../dataTransfer.js';\n\nexport function generateDataToCopyAndStoreInMemory(viewModel: IViewModel, id: string | undefined, isFirefox: boolean): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst { dataToCopy, metadata } = generateDataToCopy(viewModel);\n\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\treturn { dataToCopy, metadata };\n}\n\nfunction storeMetadataInMemory(textToCopy: string, metadata: ClipboardStoredMetadata, isFirefox: boolean): void {\n\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t(isFirefox ? textToCopy.replace(/\\r\\n/g, '\\n') : textToCopy),\n\t\tmetadata\n\t);\n}\n\nfunction generateDataToCopy(viewModel: IViewModel): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst emptySelectionClipboard = viewModel.getEditorOption(EditorOption.emptySelectionClipboard);\n\tconst copyWithSyntaxHighlighting = viewModel.getEditorOption(EditorOption.copyWithSyntaxHighlighting);\n\tconst selections = viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\tconst dataToCopy = getDataToCopy(viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\tconst metadata: ClipboardStoredMetadata = {\n\t\tversion: 1,\n\t\tid: generateUuid(),\n\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\tmulticursorText: dataToCopy.multicursorText,\n\t\tmode: dataToCopy.mode\n\t};\n\treturn { dataToCopy, metadata };\n}\n\nfunction getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst { sourceRanges, sourceText } = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(sourceText) ? sourceText : null);\n\tconst text = (Array.isArray(sourceText) ? sourceText.join(newLineCharacter) : sourceText);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && sourceText.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tsourceRanges,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tsourceRanges: Range[];\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false,\n\telectronBugWorkaroundCopyEventHasFired: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nconst ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: IReadableClipboardData | DataTransfer): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// no textual data pasted, generate text from file names\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: IWritableClipboardData, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n\n/**\n * Readable clipboard data for paste operations.\n */\nexport interface IReadableClipboardData {\n\t/**\n\t * All MIME types present in the clipboard.\n\t */\n\ttypes: string[];\n\n\t/**\n\t * Files from the clipboard (for paste operations).\n\t */\n\treadonly files: readonly File[];\n\n\t/**\n\t * Get data for a specific MIME type.\n\t */\n\tgetData(type: string): string;\n}\n\n/**\n * Writable clipboard data for copy/cut operations.\n */\nexport interface IWritableClipboardData {\n\t/**\n\t * Set data for a specific MIME type.\n\t */\n\tsetData(type: string, value: string): void;\n}\n\n/**\n * Event data for clipboard copy/cut events.\n */\nexport interface IClipboardCopyEvent {\n\t/**\n\t * Whether this is a cut operation.\n\t */\n\treadonly isCut: boolean;\n\n\t/**\n\t * The clipboard data to write to.\n\t */\n\treadonly clipboardData: IWritableClipboardData;\n\n\t/**\n\t * The data to be copied to the clipboard.\n\t */\n\treadonly dataToCopy: ClipboardDataToCopy;\n\n\t/**\n\t * Ensure that the clipboard gets the editor data.\n\t */\n\tensureClipboardGetsEditorData(): void;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Event data for clipboard paste events.\n */\nexport interface IClipboardPasteEvent {\n\t/**\n\t * The clipboard data being pasted.\n\t */\n\treadonly clipboardData: IReadableClipboardData;\n\n\t/**\n\t * The metadata stored alongside the clipboard data, if any.\n\t */\n\treadonly metadata: ClipboardStoredMetadata | null;\n\n\t/**\n\t * The text content being pasted.\n\t */\n\treadonly text: string;\n\n\t/**\n\t * The underlying DOM event, if available.\n\t * @deprecated Use clipboardData instead. This is provided for backward compatibility.\n\t */\n\treadonly browserEvent: ClipboardEvent | undefined;\n\n\ttoExternalVSDataTransfer(): VSDataTransfer | undefined;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Creates an IClipboardCopyEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardCopyEvent(e: ClipboardEvent, isCut: boolean, context: ViewContext, logService: ILogService, isFirefox: boolean): IClipboardCopyEvent {\n\tconst { dataToCopy, metadata } = generateDataToCopy(context.viewModel);\n\tlet handled = false;\n\treturn {\n\t\tisCut,\n\t\tclipboardData: {\n\t\t\tsetData: (type: string, value: string) => {\n\t\t\t\te.clipboardData?.setData(type, value);\n\t\t\t},\n\t\t},\n\t\tdataToCopy,\n\t\tensureClipboardGetsEditorData: (): void => {\n\t\t\te.preventDefault();\n\t\t\tif (e.clipboardData) {\n\t\t\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, metadata);\n\t\t\t}\n\t\t\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\t\t\tlogService.trace('ensureClipboardGetsEditorSelection with id : ', metadata.id, ' with text.length: ', dataToCopy.text.length);\n\t\t},\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\n/**\n * Creates an IClipboardPasteEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardPasteEvent(e: ClipboardEvent): IClipboardPasteEvent {\n\tlet handled = false;\n\tlet [text, metadata] = e.clipboardData ? ClipboardEventUtils.getTextData(e.clipboardData) : ['', null];\n\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\treturn {\n\t\tclipboardData: createReadableClipboardData(e.clipboardData),\n\t\tmetadata,\n\t\ttext,\n\t\ttoExternalVSDataTransfer: () => e.clipboardData ? toExternalVSDataTransfer(e.clipboardData) : undefined,\n\t\tbrowserEvent: e,\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\nexport function createReadableClipboardData(dataTransfer: DataTransfer | undefined | null): IReadableClipboardData {\n\treturn {\n\t\ttypes: Array.from(dataTransfer?.types ?? []),\n\t\tfiles: Array.prototype.slice.call(dataTransfer?.files ?? [], 0),\n\t\tgetData: (type: string) => dataTransfer?.getData(type) ?? '',\n\t};\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/editContext/clipboardUtils.ts","vs/editor/browser/controller/editContext/clipboardUtils.ts"],"names":[],"mappings":"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","file":"clipboardUtils.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 *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ILogService } from '../../../../platform/log/common/log.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { generateUuid } from '../../../../base/common/uuid.js';\nimport { VSDataTransfer } from '../../../../base/common/dataTransfer.js';\nimport { getPathForFile } from '../../../../platform/dnd/browser/dnd.js';\nimport { toExternalVSDataTransfer } from '../../dataTransfer.js';\n\nexport function generateDataToCopyAndStoreInMemory(viewModel: IViewModel, id: string | undefined, isFirefox: boolean): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst { dataToCopy, metadata } = generateDataToCopy(viewModel);\n\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\treturn { dataToCopy, metadata };\n}\n\nfunction storeMetadataInMemory(textToCopy: string, metadata: ClipboardStoredMetadata, isFirefox: boolean): void {\n\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t(isFirefox ? textToCopy.replace(/\\r\\n/g, '\\n') : textToCopy),\n\t\tmetadata\n\t);\n}\n\nfunction generateDataToCopy(viewModel: IViewModel): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst emptySelectionClipboard = viewModel.getEditorOption(EditorOption.emptySelectionClipboard);\n\tconst copyWithSyntaxHighlighting = viewModel.getEditorOption(EditorOption.copyWithSyntaxHighlighting);\n\tconst selections = viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\tconst dataToCopy = getDataToCopy(viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\tconst metadata: ClipboardStoredMetadata = {\n\t\tversion: 1,\n\t\tid: generateUuid(),\n\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\tisBlock: dataToCopy.isBlock,\n\t\tmulticursorText: dataToCopy.multicursorText,\n\t\tmode: dataToCopy.mode\n\t};\n\treturn { dataToCopy, metadata };\n}\n\nfunction getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst isBlock = viewModel.getCursorColumnSelectData().isReal;\n\tconst { sourceRanges, sourceText } = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(sourceText) ? sourceText : null);\n\tconst text = (Array.isArray(sourceText) ? sourceText.join(newLineCharacter) : sourceText);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && sourceText.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tisBlock,\n\t\tsourceRanges,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tisBlock: boolean;\n\tsourceRanges: Range[];\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tisBlock: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false,\n\telectronBugWorkaroundCopyEventHasFired: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nconst ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: IReadableClipboardData | DataTransfer, getFilePath: (file: File) => string | undefined): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// No textual data pasted. This is what Chromium does when files copied in a file manager are pasted:\n\t\t\t// it only exposes the files and withholds the text (which on Linux contains their full paths).\n\t\t\t// Generate text from the file paths, or from the file names when the paths are not available (e.g. web).\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => getFilePath(file) || file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: IWritableClipboardData, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n\n/**\n * Readable clipboard data for paste operations.\n */\nexport interface IReadableClipboardData {\n\t/**\n\t * All MIME types present in the clipboard.\n\t */\n\ttypes: string[];\n\n\t/**\n\t * Files from the clipboard (for paste operations).\n\t */\n\treadonly files: readonly File[];\n\n\t/**\n\t * Get data for a specific MIME type.\n\t */\n\tgetData(type: string): string;\n}\n\n/**\n * Writable clipboard data for copy/cut operations.\n */\nexport interface IWritableClipboardData {\n\t/**\n\t * Set data for a specific MIME type.\n\t */\n\tsetData(type: string, value: string): void;\n}\n\n/**\n * Event data for clipboard copy/cut events.\n */\nexport interface IClipboardCopyEvent {\n\t/**\n\t * Whether this is a cut operation.\n\t */\n\treadonly isCut: boolean;\n\n\t/**\n\t * The clipboard data to write to.\n\t */\n\treadonly clipboardData: IWritableClipboardData;\n\n\t/**\n\t * The data to be copied to the clipboard.\n\t */\n\treadonly dataToCopy: ClipboardDataToCopy;\n\n\t/**\n\t * Ensure that the clipboard gets the editor data.\n\t */\n\tensureClipboardGetsEditorData(): void;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Event data for clipboard paste events.\n */\nexport interface IClipboardPasteEvent {\n\t/**\n\t * The clipboard data being pasted.\n\t */\n\treadonly clipboardData: IReadableClipboardData;\n\n\t/**\n\t * The metadata stored alongside the clipboard data, if any.\n\t */\n\treadonly metadata: ClipboardStoredMetadata | null;\n\n\t/**\n\t * The text content being pasted.\n\t */\n\treadonly text: string;\n\n\t/**\n\t * The underlying DOM event, if available.\n\t * @deprecated Use clipboardData instead. This is provided for backward compatibility.\n\t */\n\treadonly browserEvent: ClipboardEvent | undefined;\n\n\ttoExternalVSDataTransfer(): VSDataTransfer | undefined;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Creates an IClipboardCopyEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardCopyEvent(e: ClipboardEvent, isCut: boolean, context: ViewContext, logService: ILogService, isFirefox: boolean): IClipboardCopyEvent {\n\tconst { dataToCopy, metadata } = generateDataToCopy(context.viewModel);\n\tlet handled = false;\n\treturn {\n\t\tisCut,\n\t\tclipboardData: {\n\t\t\tsetData: (type: string, value: string) => {\n\t\t\t\te.clipboardData?.setData(type, value);\n\t\t\t},\n\t\t},\n\t\tdataToCopy,\n\t\tensureClipboardGetsEditorData: (): void => {\n\t\t\te.preventDefault();\n\t\t\tif (e.clipboardData) {\n\t\t\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, metadata);\n\t\t\t}\n\t\t\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\t\t\tlogService.trace('ensureClipboardGetsEditorSelection with id : ', metadata.id, ' with text.length: ', dataToCopy.text.length);\n\t\t},\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\n/**\n * Creates an IClipboardPasteEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardPasteEvent(e: ClipboardEvent, getFilePath: (file: File) => string | undefined = getPathForFile): IClipboardPasteEvent {\n\tlet handled = false;\n\tlet [text, metadata] = e.clipboardData ? ClipboardEventUtils.getTextData(e.clipboardData, getFilePath) : ['', null];\n\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\treturn {\n\t\tclipboardData: createReadableClipboardData(e.clipboardData),\n\t\tmetadata,\n\t\ttext,\n\t\ttoExternalVSDataTransfer: () => e.clipboardData ? toExternalVSDataTransfer(e.clipboardData) : undefined,\n\t\tbrowserEvent: e,\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\nexport function createReadableClipboardData(dataTransfer: DataTransfer | undefined | null): IReadableClipboardData {\n\treturn {\n\t\ttypes: Array.from(dataTransfer?.types ?? []),\n\t\tfiles: Array.prototype.slice.call(dataTransfer?.files ?? [], 0),\n\t\tgetData: (type: string) => dataTransfer?.getData(type) ?? '',\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 *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ILogService } from '../../../../platform/log/common/log.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { generateUuid } from '../../../../base/common/uuid.js';\nimport { VSDataTransfer } from '../../../../base/common/dataTransfer.js';\nimport { getPathForFile } from '../../../../platform/dnd/browser/dnd.js';\nimport { toExternalVSDataTransfer } from '../../dataTransfer.js';\n\nexport function generateDataToCopyAndStoreInMemory(viewModel: IViewModel, id: string | undefined, isFirefox: boolean): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst { dataToCopy, metadata } = generateDataToCopy(viewModel);\n\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\treturn { dataToCopy, metadata };\n}\n\nfunction storeMetadataInMemory(textToCopy: string, metadata: ClipboardStoredMetadata, isFirefox: boolean): void {\n\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t(isFirefox ? textToCopy.replace(/\\r\\n/g, '\\n') : textToCopy),\n\t\tmetadata\n\t);\n}\n\nfunction generateDataToCopy(viewModel: IViewModel): { dataToCopy: ClipboardDataToCopy; metadata: ClipboardStoredMetadata } {\n\tconst emptySelectionClipboard = viewModel.getEditorOption(EditorOption.emptySelectionClipboard);\n\tconst copyWithSyntaxHighlighting = viewModel.getEditorOption(EditorOption.copyWithSyntaxHighlighting);\n\tconst selections = viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\tconst dataToCopy = getDataToCopy(viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\tconst metadata: ClipboardStoredMetadata = {\n\t\tversion: 1,\n\t\tid: generateUuid(),\n\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\tisBlock: dataToCopy.isBlock,\n\t\tmulticursorText: dataToCopy.multicursorText,\n\t\tmode: dataToCopy.mode\n\t};\n\treturn { dataToCopy, metadata };\n}\n\nfunction getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst isBlock = viewModel.getCursorColumnSelectData().isReal;\n\tconst { sourceRanges, sourceText } = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(sourceText) ? sourceText : null);\n\tconst text = (Array.isArray(sourceText) ? sourceText.join(newLineCharacter) : sourceText);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && sourceText.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tisBlock,\n\t\tsourceRanges,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tisBlock: boolean;\n\tsourceRanges: Range[];\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tisBlock: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false,\n\telectronBugWorkaroundCopyEventHasFired: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nconst ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: IReadableClipboardData | DataTransfer, getFilePath: (file: File) => string | undefined): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// No textual data pasted. This is what Chromium does when files copied in a file manager are pasted:\n\t\t\t// it only exposes the files and withholds the text (which on Linux contains their full paths).\n\t\t\t// Generate text from the file paths, or from the file names when the paths are not available (e.g. web).\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => getFilePath(file) || file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: IWritableClipboardData, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n\n/**\n * Readable clipboard data for paste operations.\n */\nexport interface IReadableClipboardData {\n\t/**\n\t * All MIME types present in the clipboard.\n\t */\n\ttypes: string[];\n\n\t/**\n\t * Files from the clipboard (for paste operations).\n\t */\n\treadonly files: readonly File[];\n\n\t/**\n\t * Get data for a specific MIME type.\n\t */\n\tgetData(type: string): string;\n}\n\n/**\n * Writable clipboard data for copy/cut operations.\n */\nexport interface IWritableClipboardData {\n\t/**\n\t * Set data for a specific MIME type.\n\t */\n\tsetData(type: string, value: string): void;\n}\n\n/**\n * Event data for clipboard copy/cut events.\n */\nexport interface IClipboardCopyEvent {\n\t/**\n\t * Whether this is a cut operation.\n\t */\n\treadonly isCut: boolean;\n\n\t/**\n\t * The clipboard data to write to.\n\t */\n\treadonly clipboardData: IWritableClipboardData;\n\n\t/**\n\t * The data to be copied to the clipboard.\n\t */\n\treadonly dataToCopy: ClipboardDataToCopy;\n\n\t/**\n\t * Ensure that the clipboard gets the editor data.\n\t */\n\tensureClipboardGetsEditorData(): void;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Event data for clipboard paste events.\n */\nexport interface IClipboardPasteEvent {\n\t/**\n\t * The clipboard data being pasted.\n\t */\n\treadonly clipboardData: IReadableClipboardData;\n\n\t/**\n\t * The metadata stored alongside the clipboard data, if any.\n\t */\n\treadonly metadata: ClipboardStoredMetadata | null;\n\n\t/**\n\t * The text content being pasted.\n\t */\n\treadonly text: string;\n\n\t/**\n\t * The underlying DOM event, if available.\n\t * @deprecated Use clipboardData instead. This is provided for backward compatibility.\n\t */\n\treadonly browserEvent: ClipboardEvent | undefined;\n\n\ttoExternalVSDataTransfer(): VSDataTransfer | undefined;\n\n\t/**\n\t * Signal that the event has been handled and default processing should be skipped.\n\t */\n\tsetHandled(): void;\n\n\t/**\n\t * Whether the event has been marked as handled.\n\t */\n\treadonly isHandled: boolean;\n}\n\n/**\n * Creates an IClipboardCopyEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardCopyEvent(e: ClipboardEvent, isCut: boolean, context: ViewContext, logService: ILogService, isFirefox: boolean): IClipboardCopyEvent {\n\tconst { dataToCopy, metadata } = generateDataToCopy(context.viewModel);\n\tlet handled = false;\n\treturn {\n\t\tisCut,\n\t\tclipboardData: {\n\t\t\tsetData: (type: string, value: string) => {\n\t\t\t\te.clipboardData?.setData(type, value);\n\t\t\t},\n\t\t},\n\t\tdataToCopy,\n\t\tensureClipboardGetsEditorData: (): void => {\n\t\t\te.preventDefault();\n\t\t\tif (e.clipboardData) {\n\t\t\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, metadata);\n\t\t\t}\n\t\t\tstoreMetadataInMemory(dataToCopy.text, metadata, isFirefox);\n\t\t\tlogService.trace('ensureClipboardGetsEditorSelection with id : ', metadata.id, ' with text.length: ', dataToCopy.text.length);\n\t\t},\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\n/**\n * Creates an IClipboardPasteEvent from a DOM ClipboardEvent.\n */\nexport function createClipboardPasteEvent(e: ClipboardEvent, getFilePath: (file: File) => string | undefined = getPathForFile): IClipboardPasteEvent {\n\tlet handled = false;\n\tlet [text, metadata] = e.clipboardData ? ClipboardEventUtils.getTextData(e.clipboardData, getFilePath) : ['', null];\n\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\treturn {\n\t\tclipboardData: createReadableClipboardData(e.clipboardData),\n\t\tmetadata,\n\t\ttext,\n\t\ttoExternalVSDataTransfer: () => e.clipboardData ? toExternalVSDataTransfer(e.clipboardData) : undefined,\n\t\tbrowserEvent: e,\n\t\tsetHandled: () => {\n\t\t\thandled = true;\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\tget isHandled() { return handled; },\n\t};\n}\n\nexport function createReadableClipboardData(dataTransfer: DataTransfer | undefined | null): IReadableClipboardData {\n\treturn {\n\t\ttypes: Array.from(dataTransfer?.types ?? []),\n\t\tfiles: Array.prototype.slice.call(dataTransfer?.files ?? [], 0),\n\t\tgetData: (type: string) => dataTransfer?.getData(type) ?? '',\n\t};\n}\n"]}
@@ -48,16 +48,6 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
48
48
  this._previousEditContextSelection = new OffsetRange(0, 0);
49
49
  this._previousEditContextText = '';
50
50
  this._editContextPrimarySelection = new Selection(1, 1, 1, 1);
51
- /**
52
- * Marks the native EditContext as needing a refresh of its text / selection.
53
- *
54
- * We defer the actual update until render time so that a single large edit
55
- * (e.g. "Transform to Uppercase" over a many-MB selection) does not
56
- * synchronously hand a huge string to the native EditContext from inside
57
- * the model's content-change / view's cursor-state event handlers — which
58
- * used to freeze the editor for seconds. See issue #262473.
59
- */
60
- this._editContextNeedsRefresh = false;
61
51
  this._parentBounds = null;
62
52
  this._decorations = [];
63
53
  this._primarySelection = new Selection(1, 1, 1, 1);
@@ -147,18 +137,20 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
147
137
  if (!pasteEvent.text) {
148
138
  return;
149
139
  }
140
+ let isBlock = false;
150
141
  let pasteOnNewLine = false;
151
142
  let multicursorText = null;
152
143
  let mode = null;
153
144
  if (pasteEvent.metadata) {
154
145
  const options = this._context.configuration.options;
155
146
  const emptySelectionClipboard = options.get(45 /* EditorOption.emptySelectionClipboard */);
147
+ isBlock = !!pasteEvent.metadata.isBlock;
156
148
  pasteOnNewLine = emptySelectionClipboard && !!pasteEvent.metadata.isFromEmptySelection;
157
149
  multicursorText = typeof pasteEvent.metadata.multicursorText !== 'undefined' ? pasteEvent.metadata.multicursorText : null;
158
150
  mode = pasteEvent.metadata.mode;
159
151
  }
160
152
  this.logService.trace('NativeEditContext#paste (before viewController.paste)');
161
- this._viewController.paste(pasteEvent.text, pasteOnNewLine, multicursorText, mode);
153
+ this._viewController.paste(pasteEvent.text, pasteOnNewLine, multicursorText, mode, isBlock);
162
154
  }));
163
155
  // Edit context events
164
156
  this._register(editContextAddDisposableListener(this._editContext, 'textformatupdate', (e) => this._handleTextFormatUpdate(e)));
@@ -228,14 +220,7 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
228
220
  }
229
221
  }
230
222
  if (doChange) {
231
- // Defer updating the native EditContext to render time. Running the update
232
- // synchronously here can freeze the editor for large selections (see #262473),
233
- // because `_updateEditContext` reads the whole primary-selection text out of
234
- // the model and hands a megabyte-scale string to the native EditContext for
235
- // each content-change event fired during a bulk edit (e.g. Transform to
236
- // Upper/Lowercase over a multi-MB file).
237
- this._editContextNeedsRefresh = true;
238
- this.setShouldRender();
223
+ this._updateEditContext();
239
224
  }
240
225
  }));
241
226
  }
@@ -263,15 +248,6 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
263
248
  this._parentBounds = this._parent.getBoundingClientRect();
264
249
  }
265
250
  prepareRender(ctx) {
266
- if (this._editContextNeedsRefresh) {
267
- // Flush any deferred EditContext update that was scheduled from a
268
- // model content change or a view cursor-state change. Doing this
269
- // here (rather than synchronously from the event handlers) avoids
270
- // freezing the UI while a megabyte-scale selection is written into
271
- // the native EditContext — see #262473. `_updateEditContext` also
272
- // clears the flag.
273
- this._updateEditContext();
274
- }
275
251
  this._screenReaderSupport.prepareRender(ctx);
276
252
  this._updateSelectionAndControlBoundsData(ctx);
277
253
  }
@@ -282,11 +258,7 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
282
258
  onCursorStateChanged(e) {
283
259
  this._primarySelection = e.modelSelections[0] ?? new Selection(1, 1, 1, 1);
284
260
  this._screenReaderSupport.onCursorStateChanged(e);
285
- // Defer pushing the updated text/selection into the native EditContext
286
- // to render time; running it synchronously in the cursor-state event
287
- // handler can freeze the UI when the primary selection covers a very
288
- // large range (see #262473).
289
- this._editContextNeedsRefresh = true;
261
+ this._updateEditContext();
290
262
  return true;
291
263
  }
292
264
  onConfigurationChanged(e) {
@@ -369,11 +341,9 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
369
341
  }
370
342
  _updateDomAttributes() {
371
343
  const options = this._context.configuration.options;
372
- this.domNode.domNode.setAttribute('tabindex', String(options.get(140 /* EditorOption.tabIndex */)));
344
+ this.domNode.domNode.setAttribute('tabindex', String(options.get(143 /* EditorOption.tabIndex */)));
373
345
  }
374
346
  _updateEditContext() {
375
- // Any direct update satisfies a pending deferred update (see #262473).
376
- this._editContextNeedsRefresh = false;
377
347
  const editContextState = this._getNewEditContextState();
378
348
  if (!editContextState) {
379
349
  return;
@@ -501,7 +471,7 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
501
471
  }
502
472
  _updateSelectionAndControlBounds() {
503
473
  const options = this._context.configuration.options;
504
- const contentLeft = options.get(166 /* EditorOption.layoutInfo */).contentLeft;
474
+ const contentLeft = options.get(169 /* EditorOption.layoutInfo */).contentLeft;
505
475
  const viewSelection = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(this._primarySelection);
506
476
  const verticalOffsetStart = this._context.viewLayout.getVerticalOffsetForLineNumber(viewSelection.startLineNumber);
507
477
  const verticalOffsetEnd = this._context.viewLayout.getVerticalOffsetAfterLineNumber(viewSelection.endLineNumber);
@@ -528,7 +498,7 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
528
498
  _updateCharacterBounds(e) {
529
499
  const options = this._context.configuration.options;
530
500
  const typicalHalfWidthCharacterWidth = options.get(59 /* EditorOption.fontInfo */).typicalHalfwidthCharacterWidth;
531
- const contentLeft = options.get(166 /* EditorOption.layoutInfo */).contentLeft;
501
+ const contentLeft = options.get(169 /* EditorOption.layoutInfo */).contentLeft;
532
502
  const parentBounds = this._parentBounds;
533
503
  const characterBounds = [];
534
504
  const offsetTransformer = new PositionOffsetTransformer(this._editContext.text);