UNPKG

dockview-core

Version:

Zero dependency layout manager supporting tabs, groups, grids and splitviews for vanilla TypeScript

88 lines (87 loc) 4.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RootDropTargetModule = exports.RootDropTargetService = void 0; var events_1 = require("../events"); var backend_1 = require("../dnd/backend"); var dataTransfer_1 = require("../dnd/dataTransfer"); var modules_1 = require("./modules"); var DEFAULT_ROOT_OVERLAY_MODEL = { activationSize: { type: 'pixels', value: 10 }, size: { type: 'pixels', value: 20 }, }; var RootDropTargetService = /** @class */ (function () { function RootDropTargetService(host) { var canDisplayOverlay = function (event, position) { var data = (0, dataTransfer_1.getPanelData)(); if (data) { if (data.viewId !== host.id) { return false; } if (position === 'center') { // center drop target only allowed if no panels in primary // grid; floating panels are allowed return host.isGridEmpty(); } return true; } if (position === 'center' && !host.isGridEmpty()) { // for external events only show the four-corner drag overlays, // disable center so external drag events can fall through to // the group and panel drop target handlers return false; } return host.dispatchUnhandledDragOver(event, position); }; var overlayModel = typeof host.options.dndEdges === 'object' && host.options.dndEdges !== null ? host.options.dndEdges : DEFAULT_ROOT_OVERLAY_MODEL; this._html5Target = backend_1.html5Backend.createDropTarget(host.element, { className: 'dv-drop-target-edge', canDisplayOverlay: canDisplayOverlay, acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'], overlayModel: overlayModel, getOverrideTarget: function () { return host.rootDropTargetOverrideTarget(); }, }); this._pointerTarget = backend_1.pointerBackend.createDropTarget(host.element, { className: 'dv-drop-target-edge', canDisplayOverlay: canDisplayOverlay, acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'], overlayModel: overlayModel, getOverrideTarget: function () { return host.rootDropTargetOverrideTarget(); }, }); this.onWillShowOverlay = events_1.Event.any(this._html5Target.onWillShowOverlay, this._pointerTarget.onWillShowOverlay); this.onDrop = events_1.Event.any(this._html5Target.onDrop, this._pointerTarget.onDrop); // Apply initial-state options now that the targets exist; setOptions // handles dndEdges (disable + overlay model) and late changes. this.setOptions(host.options); } RootDropTargetService.prototype.setOptions = function (options) { if ('dndEdges' in options) { var disabled = typeof options.dndEdges === 'boolean' && options.dndEdges === false; this._html5Target.disabled = disabled; this._pointerTarget.disabled = disabled; if (typeof options.dndEdges === 'object' && options.dndEdges !== null) { this._html5Target.setOverlayModel(options.dndEdges); this._pointerTarget.setOverlayModel(options.dndEdges); } else { this._html5Target.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL); this._pointerTarget.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL); } } }; RootDropTargetService.prototype.dispose = function () { this._html5Target.dispose(); this._pointerTarget.dispose(); }; return RootDropTargetService; }()); exports.RootDropTargetService = RootDropTargetService; exports.RootDropTargetModule = (0, modules_1.defineModule)({ name: 'RootDropTarget', serviceKey: 'rootDropTargetService', create: function (host) { return new RootDropTargetService(host); }, });