src/vs/workbench/browser/parts/editor/editorPart.ts/EditorPart/setupDragAndDropSupport
class EditorPart:	private setupDragAndDropSupport(parent: HTMLElement, container: HTMLElement): void {

		// Editor drop target
		this._register(this.createEditorDropTarget(container, Object.create(null)));

		// No drop in the editor
		const overlay = document.createElement('div');
		overlay.classList.add('drop-block-overlay');
		parent.appendChild(overlay);

		// Hide the block if a mouse down event occurs #99065
		this._register(addDisposableGenericMouseDownListner(overlay, () => overlay.classList.remove('visible')));

		this._register(CompositeDragAndDropObserver.INSTANCE.registerTarget(this.element, {
			onDragStart: e => overlay.classList.add('visible'),
			onDragEnd: e => overlay.classList.remove('visible')
		}));

		let panelOpenerTimeout: any;
		this._register(CompositeDragAndDropObserver.INSTANCE.registerTarget(overlay, {
			onDragOver: e => {
				EventHelper.stop(e.eventData, true);
				if (e.eventData.dataTransfer) {
					e.eventData.dataTransfer.dropEffect = 'none';
				}

				if (!this.layoutService.isVisible(Parts.PANEL_PART)) {
					const boundingRect = overlay.getBoundingClientRect();

					let openPanel = false;
					const proximity = 100;
					switch (this.layoutService.getPanelPosition()) {
						case Position.BOTTOM:
							if (e.eventData.clientY > boundingRect.bottom - proximity) {
								openPanel = true;
							}
							break;
						case Position.LEFT:
							if (e.eventData.clientX < boundingRect.left + proximity) {
								openPanel = true;
							}
							break;
						case Position.RIGHT:
							if (e.eventData.clientX > boundingRect.right - proximity) {
								openPanel = true;
							}
							break;
					}

					if (!panelOpenerTimeout && openPanel) {
						panelOpenerTimeout = setTimeout(() => this.layoutService.setPanelHidden(false), 200);
					} else if (panelOpenerTimeout && !openPanel) {
						clearTimeout(panelOpenerTimeout);
						panelOpenerTimeout = undefined;
					}
				}
			},
			onDragLeave: () => {
				if (panelOpenerTimeout) {
					clearTimeout(panelOpenerTimeout);
					panelOpenerTimeout = undefined;
				}
			},
			onDragEnd: () => {
				if (panelOpenerTimeout) {
					clearTimeout(panelOpenerTimeout);
					panelOpenerTimeout = undefined;
				}
			},
			onDrop: () => {
				if (panelOpenerTimeout) {
					clearTimeout(panelOpenerTimeout);
					panelOpenerTimeout = undefined;
				}
			}
		}));
	}