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.
- package/esm/nls.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +38 -6
- package/esm/vs/base/browser/browser.js +8 -0
- package/esm/vs/base/browser/browser.js.map +1 -1
- package/esm/vs/base/browser/contextmenu.js +8 -1
- package/esm/vs/base/browser/contextmenu.js.map +1 -1
- package/esm/vs/base/browser/dom.js +34 -5
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/dompurify/dompurify.js +2457 -2640
- package/esm/vs/base/browser/markdownRenderer.js +48 -21
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/pixelRatio.js +3 -2
- package/esm/vs/base/browser/pixelRatio.js.map +1 -1
- package/esm/vs/base/browser/ui/actionbar/actionViewItems.js +5 -2
- package/esm/vs/base/browser/ui/actionbar/actionViewItems.js.map +1 -1
- package/esm/vs/base/browser/ui/actionbar/actionbar.js +7 -2
- package/esm/vs/base/browser/ui/actionbar/actionbar.js.map +1 -1
- package/esm/vs/base/browser/ui/animations/animations.js +68 -40
- package/esm/vs/base/browser/ui/animations/animations.js.map +1 -1
- package/esm/vs/base/browser/ui/button/button.js +7 -0
- package/esm/vs/base/browser/ui/button/button.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/contextview/contextview.css +15 -0
- package/esm/vs/base/browser/ui/contextview/contextview.js +266 -40
- package/esm/vs/base/browser/ui/contextview/contextview.js.map +1 -1
- package/esm/vs/base/browser/ui/contextview/windowControlsOverlay.js +72 -0
- package/esm/vs/base/browser/ui/contextview/windowControlsOverlay.js.map +1 -0
- package/esm/vs/base/browser/ui/dialog/dialog.css +5 -0
- package/esm/vs/base/browser/ui/dropdown/dropdown.js +2 -1
- package/esm/vs/base/browser/ui/dropdown/dropdown.js.map +1 -1
- package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +1 -0
- package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js.map +1 -1
- package/esm/vs/base/browser/ui/hover/hover.js.map +1 -1
- package/esm/vs/base/browser/ui/list/listView.js +87 -15
- package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
- package/esm/vs/base/browser/ui/list/listWidget.js +37 -15
- package/esm/vs/base/browser/ui/list/listWidget.js.map +1 -1
- package/esm/vs/base/browser/ui/menu/menu.js +189 -52
- package/esm/vs/base/browser/ui/menu/menu.js.map +1 -1
- package/esm/vs/base/browser/ui/radio/radio.css +11 -0
- package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js +2 -1
- package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js.map +1 -1
- package/esm/vs/base/browser/ui/selectBox/selectBox.js.map +1 -1
- package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js +14 -8
- package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js.map +1 -1
- package/esm/vs/base/browser/ui/splitview/splitview.js +11 -7
- package/esm/vs/base/browser/ui/splitview/splitview.js.map +1 -1
- package/esm/vs/base/browser/ui/toggle/switch.css +16 -7
- package/esm/vs/base/browser/ui/toggle/switch.js +9 -6
- package/esm/vs/base/browser/ui/toggle/switch.js.map +1 -1
- package/esm/vs/base/browser/ui/toolbar/toolbar.css +1 -2
- package/esm/vs/base/browser/ui/toolbar/toolbar.js +85 -38
- package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/abstractTree.js +48 -9
- package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js +10 -1
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/objectTree.js +3 -0
- package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/tree.js.map +1 -1
- package/esm/vs/base/common/actions.js +8 -2
- package/esm/vs/base/common/actions.js.map +1 -1
- package/esm/vs/base/common/arrays.js +4 -4
- package/esm/vs/base/common/arrays.js.map +1 -1
- package/esm/vs/base/common/async.js +12 -8
- package/esm/vs/base/common/async.js.map +1 -1
- package/esm/vs/base/common/cancellation.js +25 -0
- package/esm/vs/base/common/cancellation.js.map +1 -1
- package/esm/vs/base/common/codicons.js +2 -0
- package/esm/vs/base/common/codicons.js.map +1 -1
- package/esm/vs/base/common/codiconsLibrary.js +2 -0
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/color.js +1 -1
- package/esm/vs/base/common/color.js.map +1 -1
- package/esm/vs/base/common/diff/diff.js +60 -1
- package/esm/vs/base/common/diff/diff.js.map +1 -1
- package/esm/vs/base/common/event.js +1 -1
- package/esm/vs/base/common/event.js.map +1 -1
- package/esm/vs/base/common/glob.js +1 -0
- package/esm/vs/base/common/glob.js.map +1 -1
- package/esm/vs/base/common/htmlContent.js +74 -12
- package/esm/vs/base/common/htmlContent.js.map +1 -1
- package/esm/vs/base/common/json.js +19 -0
- package/esm/vs/base/common/json.js.map +1 -0
- package/esm/vs/base/common/network.js +16 -0
- package/esm/vs/base/common/network.js.map +1 -1
- package/esm/vs/base/common/resources.js +14 -2
- package/esm/vs/base/common/resources.js.map +1 -1
- package/esm/vs/base/common/strings.js +1 -1
- package/esm/vs/base/common/strings.js.map +1 -1
- package/esm/vs/base/common/uri.js +2 -2
- package/esm/vs/base/common/uri.js.map +1 -1
- package/esm/vs/editor/browser/config/editorConfiguration.js +1 -1
- package/esm/vs/editor/browser/config/fontMeasurements.js +19 -6
- package/esm/vs/editor/browser/config/fontMeasurements.js.map +1 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js +3 -3
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +11 -5
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +8 -38
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/screenReaderContentRich.js +3 -3
- package/esm/vs/editor/browser/controller/editContext/native/screenReaderSupport.js +6 -6
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +12 -10
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js +7 -7
- package/esm/vs/editor/browser/controller/mouseTarget.js +3 -3
- package/esm/vs/editor/browser/coreCommands.js +2 -2
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/editorMarkdownSanitizer.js +19 -0
- package/esm/vs/editor/browser/editorMarkdownSanitizer.js.map +1 -0
- package/esm/vs/editor/browser/gpu/rectangleRenderer.js +1 -1
- package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +1 -1
- package/esm/vs/editor/browser/services/editorWorkerService.js +3 -2
- package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
- package/esm/vs/editor/browser/services/openerService.js +6 -2
- package/esm/vs/editor/browser/services/openerService.js.map +1 -1
- package/esm/vs/editor/browser/view/domLineBreaksComputer.js +34 -11
- package/esm/vs/editor/browser/view/domLineBreaksComputer.js.map +1 -1
- package/esm/vs/editor/browser/view/viewController.js +7 -7
- package/esm/vs/editor/browser/view/viewController.js.map +1 -1
- package/esm/vs/editor/browser/view/viewLayer.js +1 -1
- package/esm/vs/editor/browser/view/viewOverlays.js +4 -4
- package/esm/vs/editor/browser/view.js +5 -5
- package/esm/vs/editor/browser/viewParts/blockDecorations/blockDecorations.js +1 -1
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +11 -3
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js +6 -6
- package/esm/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.js +12 -12
- package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +9 -2
- package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.js +2 -2
- package/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.js +2 -2
- package/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.js +2 -2
- package/esm/vs/editor/browser/viewParts/margin/margin.js +2 -2
- package/esm/vs/editor/browser/viewParts/minimap/minimap.js +6 -6
- package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +9 -2
- package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.js +5 -5
- package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js +3 -3
- package/esm/vs/editor/browser/viewParts/rulers/rulers.js +2 -2
- package/esm/vs/editor/browser/viewParts/rulersGpu/rulersGpu.js +1 -1
- package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js +3 -3
- package/esm/vs/editor/browser/viewParts/selections/selections.js +2 -2
- package/esm/vs/editor/browser/viewParts/viewCursors/viewCursor.js +2 -2
- package/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.js +6 -6
- package/esm/vs/editor/browser/viewParts/viewLines/viewLineOptions.js +5 -5
- package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +11 -11
- package/esm/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.js +1 -1
- package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js +2 -2
- package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js +4 -4
- package/esm/vs/editor/browser/viewParts/wordWrapIndicator/wordWrapIndicator.js +2 -2
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +22 -21
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/commands.js +12 -12
- package/esm/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js +18 -18
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js +3 -3
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js +10 -10
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js +2 -2
- package/esm/vs/editor/browser/widget/diffEditor/diffEditor.contribution.js +4 -4
- package/esm/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.js +21 -3
- package/esm/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/gutterFeature.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +10 -10
- package/esm/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js +2 -2
- package/esm/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.js +2 -2
- package/esm/vs/editor/browser/widget/diffEditor/registrations.contribution.js +5 -5
- package/esm/vs/editor/browser/widget/multiDiffEditor/colors.js +3 -3
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollLayout.js +2 -2
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollLayout.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollView.js +21 -2
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollView.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +2 -2
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +11 -3
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/virtualizedItemManager.js +1 -0
- package/esm/vs/editor/browser/widget/multiDiffEditor/virtualizedItemManager.js.map +1 -1
- package/esm/vs/editor/common/commands/columnSelectionPasteCommand.js +64 -0
- package/esm/vs/editor/common/commands/columnSelectionPasteCommand.js.map +1 -0
- package/esm/vs/editor/common/config/editorConfigurationSchema.js +68 -58
- package/esm/vs/editor/common/config/editorConfigurationSchema.js.map +1 -1
- package/esm/vs/editor/common/config/editorOptions.js +560 -500
- package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
- package/esm/vs/editor/common/core/editorColorRegistry.js +71 -71
- package/esm/vs/editor/common/core/edits/textEdit.js +16 -0
- package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursor.js +20 -10
- package/esm/vs/editor/common/cursor/cursor.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorTypeEditOperations.js +67 -14
- package/esm/vs/editor/common/cursor/cursorTypeEditOperations.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorTypeOperations.js +2 -2
- package/esm/vs/editor/common/cursor/cursorTypeOperations.js.map +1 -1
- package/esm/vs/editor/common/cursorCommon.js +22 -21
- package/esm/vs/editor/common/cursorCommon.js.map +1 -1
- package/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js +21 -8
- package/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js.map +1 -1
- package/esm/vs/editor/common/diff/documentDiffProvider.js.map +1 -1
- package/esm/vs/editor/common/diff/externalLinesDiffComputer.js +38 -26
- package/esm/vs/editor/common/diff/externalLinesDiffComputer.js.map +1 -1
- package/esm/vs/editor/common/diff/rangeMapping.js +11 -1
- package/esm/vs/editor/common/diff/rangeMapping.js.map +1 -1
- package/esm/vs/editor/common/diff/verifyLinesDiff.js +28 -0
- package/esm/vs/editor/common/diff/verifyLinesDiff.js.map +1 -0
- package/esm/vs/editor/common/editorContextKeys.js +53 -53
- package/esm/vs/editor/common/languages/languageConfiguration.js +8 -0
- package/esm/vs/editor/common/languages/languageConfiguration.js.map +1 -1
- package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
- package/esm/vs/editor/common/languages.js +56 -56
- package/esm/vs/editor/common/model/editStack.js +1 -1
- package/esm/vs/editor/common/services/editorWebWorker.js +27 -6
- package/esm/vs/editor/common/services/editorWebWorker.js.map +1 -1
- package/esm/vs/editor/common/services/editorWorker.js.map +1 -1
- package/esm/vs/editor/common/services/languageService.js +6 -4
- package/esm/vs/editor/common/services/languageService.js.map +1 -1
- package/esm/vs/editor/common/services/markerDecorationsService.js +21 -2
- package/esm/vs/editor/common/services/markerDecorationsService.js.map +1 -1
- package/esm/vs/editor/common/standalone/standaloneEnums.js +100 -97
- package/esm/vs/editor/common/standalone/standaloneEnums.js.map +1 -1
- package/esm/vs/editor/common/standaloneStrings.js +11 -11
- package/esm/vs/editor/common/textModelEditSource.js +9 -0
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLayout.js +16 -16
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
- package/esm/vs/editor/common/viewModel/monospaceLineBreaksComputer.js +1 -1
- package/esm/vs/editor/common/viewModel/viewModelImpl.js +19 -19
- package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
- package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
- package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +9 -9
- package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
- package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +23 -20
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
- package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
- package/esm/vs/editor/contrib/codeAction/browser/codeActionModel.js +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +25 -10
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerContribution.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +3 -3
- package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
- package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerParticipant.js +1 -1
- package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +17 -17
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js.map +1 -1
- package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +39 -39
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/pasteEditSession.js +19 -0
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/pasteEditSession.js.map +1 -0
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +26 -18
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js.map +1 -1
- package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
- package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js.map +1 -1
- package/esm/vs/editor/contrib/find/browser/findController.js +18 -18
- package/esm/vs/editor/contrib/find/browser/findController.js.map +1 -1
- package/esm/vs/editor/contrib/find/browser/findModel.js +6 -6
- package/esm/vs/editor/contrib/find/browser/findWidget.js +40 -40
- package/esm/vs/editor/contrib/find/browser/findWidget.js.map +1 -1
- package/esm/vs/editor/contrib/folding/browser/folding.js +23 -23
- package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
- package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
- package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
- package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
- package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
- package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +2 -2
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +4 -4
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js.map +1 -1
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
- package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
- package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
- package/esm/vs/editor/contrib/hover/browser/contentHoverController.js +9 -3
- package/esm/vs/editor/contrib/hover/browser/contentHoverController.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/glyphHoverWidget.js +2 -1
- package/esm/vs/editor/contrib/hover/browser/glyphHoverWidget.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
- package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +10 -8
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +6 -6
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +5 -5
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +9 -9
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.js +3 -3
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +21 -21
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -13
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +6 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +7 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +3 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
- package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
- package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +5 -4
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js.map +1 -1
- package/esm/vs/editor/contrib/links/browser/links.js +16 -15
- package/esm/vs/editor/contrib/links/browser/links.js.map +1 -1
- package/esm/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.js +1 -1
- package/esm/vs/editor/contrib/message/browser/messageController.js +16 -12
- package/esm/vs/editor/contrib/message/browser/messageController.js.map +1 -1
- package/esm/vs/editor/contrib/middleScroll/browser/middleScrollController.js +1 -1
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +91 -55
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js.map +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsModel.js +3 -3
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsModel.js.map +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +6 -4
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js.map +1 -1
- package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
- package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
- package/esm/vs/editor/contrib/placeholderText/browser/placeholderTextContribution.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +12 -12
- package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
- package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +3 -3
- package/esm/vs/editor/contrib/rename/browser/rename.js +11 -11
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +6 -6
- package/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +23 -13
- package/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js.map +1 -1
- package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +5 -5
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +5 -5
- package/esm/vs/editor/contrib/snippet/browser/snippetSession.js +2 -2
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +10 -8
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.js +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.js +2 -2
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +6 -6
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -9
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +15 -15
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/suggestModel.js +11 -11
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +27 -27
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +8 -6
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +5 -5
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +3 -3
- package/esm/vs/editor/contrib/suggest/browser/wordDistance.js +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
- package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
- package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +27 -27
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.js +1 -1
- package/esm/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.js.map +1 -1
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +50 -14
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js.map +1 -1
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +6 -6
- package/esm/vs/editor/editor.api.d.ts +133 -98
- package/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js +1 -1
- package/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js +5 -3
- package/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js +15 -1
- package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
- package/esm/vs/nls.js.map +1 -1
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +72 -66
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js.map +1 -1
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +434 -136
- package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
- package/esm/vs/platform/actionWidget/browser/actionWidget.css +74 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +24 -26
- package/esm/vs/platform/actionWidget/browser/actionWidget.js.map +1 -1
- package/esm/vs/platform/actionWidget/browser/actionWidgetMotion.js +16 -0
- package/esm/vs/platform/actionWidget/browser/actionWidgetMotion.js.map +1 -0
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +15 -17
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js.map +1 -1
- package/esm/vs/platform/actions/browser/toolbar.js +25 -12
- package/esm/vs/platform/actions/browser/toolbar.js.map +1 -1
- package/esm/vs/platform/actions/common/actions.js +4 -2
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/actions/common/menuService.js +15 -8
- package/esm/vs/platform/actions/common/menuService.js.map +1 -1
- package/esm/vs/platform/configuration/common/configuration.js +3 -1
- package/esm/vs/platform/configuration/common/configuration.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurationModels.js +16 -11
- package/esm/vs/platform/configuration/common/configurationModels.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurationRegistry.js +29 -27
- package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurations.js +13 -1
- package/esm/vs/platform/configuration/common/configurations.js.map +1 -1
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +2 -2
- package/esm/vs/platform/contextkey/browser/contextKeyService.js.map +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +28 -14
- package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
- package/esm/vs/platform/contextkey/common/contextkeys.js +10 -10
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/contextview/browser/contextMenuHandler.js +17 -4
- package/esm/vs/platform/contextview/browser/contextMenuHandler.js.map +1 -1
- package/esm/vs/platform/contextview/browser/contextMenuService.js +1 -1
- package/esm/vs/platform/contextview/browser/contextMenuService.js.map +1 -1
- package/esm/vs/platform/contextview/browser/contextView.js.map +1 -1
- package/esm/vs/platform/contextview/browser/contextViewService.js +7 -2
- package/esm/vs/platform/contextview/browser/contextViewService.js.map +1 -1
- package/esm/vs/platform/editor/common/editor.js +17 -0
- package/esm/vs/platform/editor/common/editor.js.map +1 -1
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverService.js +6 -3
- package/esm/vs/platform/hover/browser/hoverService.js.map +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +38 -6
- package/esm/vs/platform/hover/browser/hoverWidget.js.map +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +32 -5
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +5 -5
- package/esm/vs/platform/keybinding/common/keybindingResolver.js +1 -1
- package/esm/vs/platform/keybinding/common/keybindingResolver.js.map +1 -1
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/markers/common/markerService.js +11 -8
- package/esm/vs/platform/markers/common/markerService.js.map +1 -1
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/markers/common/markers.js.map +1 -1
- package/esm/vs/platform/notification/common/notification.js.map +1 -1
- package/esm/vs/platform/notification/common/notificationMessage.js +37 -0
- package/esm/vs/platform/notification/common/notificationMessage.js.map +1 -0
- package/esm/vs/platform/opener/common/opener.js.map +1 -1
- package/esm/vs/platform/progress/common/progress.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/media/quickInput.css +33 -2
- package/esm/vs/platform/quickinput/browser/quickAccess.js +7 -4
- package/esm/vs/platform/quickinput/browser/quickAccess.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +65 -15
- package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputList.js +96 -90
- package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputService.js +5 -7
- package/esm/vs/platform/quickinput/browser/quickInputService.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickTree.js +1 -1
- package/esm/vs/platform/quickinput/common/quickAccess.js.map +1 -1
- package/esm/vs/platform/quickinput/common/quickInput.js.map +1 -1
- package/esm/vs/platform/storage/common/storage.js.map +1 -1
- package/esm/vs/platform/theme/common/colorRegistry.js +1 -0
- package/esm/vs/platform/theme/common/colorRegistry.js.map +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +11 -3
- package/esm/vs/platform/theme/common/colorUtils.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/baseColors.js +19 -19
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -9
- package/esm/vs/platform/theme/common/colors/chartsColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/confettiColors.js +14 -0
- package/esm/vs/platform/theme/common/colors/confettiColors.js.map +1 -0
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +48 -48
- package/esm/vs/platform/theme/common/colors/inputColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
- package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +10 -10
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/monaco.d.ts +133 -98
- package/package.json +3 -3
- 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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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);
|