UNPKG

dockview

Version:

Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support

339 lines 14.5 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PaneviewComponent = exports.PaneFramework = void 0; var component_api_1 = require("../api/component.api"); var componentFactory_1 = require("../panel/componentFactory"); var events_1 = require("../events"); var lifecycle_1 = require("../lifecycle"); var splitview_1 = require("../splitview/core/splitview"); var paneview_1 = require("./paneview"); var draggablePaneviewPanel_1 = require("./draggablePaneviewPanel"); var defaultPaneviewHeader_1 = require("./defaultPaneviewHeader"); var PaneFramework = /** @class */ (function (_super) { __extends(PaneFramework, _super); function PaneFramework(options) { var _this = _super.call(this, options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd) || this; _this.options = options; return _this; } PaneFramework.prototype.getBodyComponent = function () { return this.options.body; }; PaneFramework.prototype.getHeaderComponent = function () { return this.options.header; }; return PaneFramework; }(draggablePaneviewPanel_1.DraggablePaneviewPanel)); exports.PaneFramework = PaneFramework; var PaneviewComponent = /** @class */ (function (_super) { __extends(PaneviewComponent, _super); function PaneviewComponent(element, options) { var _this = _super.call(this) || this; _this.element = element; _this._disposable = new lifecycle_1.MutableDisposable(); _this._onDidLayoutChange = new events_1.Emitter(); _this.onDidLayoutChange = _this._onDidLayoutChange.event; _this._onDidDrop = new events_1.Emitter(); _this.onDidDrop = _this._onDidDrop.event; _this._options = options; if (!options.components) { options.components = {}; } if (!options.frameworkComponents) { options.frameworkComponents = {}; } _this.paneview = new paneview_1.Paneview(_this.element, { // only allow paneview in the vertical orientation for now orientation: splitview_1.Orientation.VERTICAL, }); _this.addDisposables(_this._disposable); return _this; } Object.defineProperty(PaneviewComponent.prototype, "onDidAddView", { get: function () { return this._paneview.onDidAddView; }, enumerable: false, configurable: true }); Object.defineProperty(PaneviewComponent.prototype, "onDidRemoveView", { get: function () { return this._paneview.onDidRemoveView; }, enumerable: false, configurable: true }); Object.defineProperty(PaneviewComponent.prototype, "paneview", { get: function () { return this._paneview; }, set: function (value) { var _this = this; this._paneview = value; this._disposable.value = new lifecycle_1.CompositeDisposable(this.paneview.onDidChange(function () { _this._onDidLayoutChange.fire(undefined); })); }, enumerable: false, configurable: true }); Object.defineProperty(PaneviewComponent.prototype, "minimumSize", { get: function () { return this.paneview.minimumSize; }, enumerable: false, configurable: true }); Object.defineProperty(PaneviewComponent.prototype, "maximumSize", { get: function () { return this.paneview.maximumSize; }, enumerable: false, configurable: true }); Object.defineProperty(PaneviewComponent.prototype, "height", { get: function () { return this.paneview.orientation === splitview_1.Orientation.HORIZONTAL ? this.paneview.orthogonalSize : this.paneview.size; }, enumerable: false, configurable: true }); Object.defineProperty(PaneviewComponent.prototype, "width", { get: function () { return this.paneview.orientation === splitview_1.Orientation.HORIZONTAL ? this.paneview.size : this.paneview.orthogonalSize; }, enumerable: false, configurable: true }); Object.defineProperty(PaneviewComponent.prototype, "options", { get: function () { return this._options; }, enumerable: false, configurable: true }); PaneviewComponent.prototype.focus = function () { // }; PaneviewComponent.prototype.updateOptions = function (options) { this._options = __assign(__assign({}, this.options), options); }; PaneviewComponent.prototype.addPanel = function (options) { var _this = this; var body = (0, componentFactory_1.createComponent)(options.id, options.component, this.options.components || {}, this.options.frameworkComponents || {}, this.options.frameworkWrapper ? { createComponent: this.options.frameworkWrapper.body.createComponent, } : undefined); var header; if (options.headerComponent) { header = (0, componentFactory_1.createComponent)(options.id, options.headerComponent, this.options.headerComponents || {}, this.options.headerframeworkComponents, this.options.frameworkWrapper ? { createComponent: this.options.frameworkWrapper.header .createComponent, } : undefined); } else { header = new defaultPaneviewHeader_1.DefaultHeader(); } var view = new PaneFramework({ id: options.id, component: options.component, headerComponent: options.headerComponent, header: header, body: body, orientation: splitview_1.Orientation.VERTICAL, isExpanded: !!options.isExpanded, disableDnd: !!this.options.disableDnd, }); var disposable = new lifecycle_1.CompositeDisposable(view.onDidDrop(function (event) { _this._onDidDrop.fire(event); })); var size = typeof options.size === 'number' ? options.size : splitview_1.Sizing.Distribute; var index = typeof options.index === 'number' ? options.index : undefined; view.init({ params: options.params || {}, minimumBodySize: options.minimumBodySize, maximumBodySize: options.maximumBodySize, isExpanded: options.isExpanded, title: options.title, containerApi: new component_api_1.PaneviewApi(this), }); this.paneview.addPane(view, size, index); view.orientation = this.paneview.orientation; return disposable; }; PaneviewComponent.prototype.getPanels = function () { return this.paneview.getPanes(); }; PaneviewComponent.prototype.removePanel = function (panel) { var views = this.getPanels(); var index = views.findIndex(function (_) { return _ === panel; }); this.paneview.removePane(index); }; PaneviewComponent.prototype.movePanel = function (from, to) { this.paneview.moveView(from, to); }; PaneviewComponent.prototype.getPanel = function (id) { return this.getPanels().find(function (view) { return view.id === id; }); }; PaneviewComponent.prototype.layout = function (width, height) { var _a = __read(this.paneview.orientation === splitview_1.Orientation.HORIZONTAL ? [width, height] : [height, width], 2), size = _a[0], orthogonalSize = _a[1]; this.paneview.layout(size, orthogonalSize); }; /** * Resize the layout to fit the parent container */ PaneviewComponent.prototype.resizeToFit = function () { if (!this.element.parentElement) { return; } var _a = this.element.parentElement.getBoundingClientRect(), width = _a.width, height = _a.height; this.layout(width, height); }; PaneviewComponent.prototype.toJSON = function () { var _this = this; var maximum = function (value) { return value === Number.MAX_SAFE_INTEGER || value === Number.POSITIVE_INFINITY ? undefined : value; }; var minimum = function (value) { return (value <= 0 ? undefined : value); }; var views = this.paneview .getPanes() .map(function (view, i) { var size = _this.paneview.getViewSize(i); return { size: size, data: view.toJSON(), minimumSize: minimum(view.minimumBodySize), maximumSize: maximum(view.maximumBodySize), expanded: view.isExpanded(), }; }); return { views: views, size: this.paneview.size, }; }; PaneviewComponent.prototype.fromJSON = function (serializedPaneview, deferComponentLayout) { var _this = this; var views = serializedPaneview.views, size = serializedPaneview.size; var queue = []; this.paneview.dispose(); this.paneview = new paneview_1.Paneview(this.element, { orientation: splitview_1.Orientation.VERTICAL, descriptor: { size: size, views: views.map(function (view) { var data = view.data; var body = (0, componentFactory_1.createComponent)(data.id, data.component, _this.options.components || {}, _this.options.frameworkComponents || {}, _this.options.frameworkWrapper ? { createComponent: _this.options.frameworkWrapper.body .createComponent, } : undefined); var header; if (data.headerComponent) { header = (0, componentFactory_1.createComponent)(data.id, data.headerComponent, _this.options.headerComponents || {}, _this.options.headerframeworkComponents || {}, _this.options.frameworkWrapper ? { createComponent: _this.options.frameworkWrapper.header .createComponent, } : undefined); } else { header = new defaultPaneviewHeader_1.DefaultHeader(); } var panel = new PaneFramework({ id: data.id, component: data.component, headerComponent: data.headerComponent, header: header, body: body, orientation: splitview_1.Orientation.VERTICAL, isExpanded: !!view.expanded, disableDnd: !!_this.options.disableDnd, }); panel.onDidDrop(function (event) { _this._onDidDrop.fire(event); }); queue.push(function () { panel.init({ params: data.params || {}, minimumBodySize: view.minimumSize, maximumBodySize: view.maximumSize, title: data.title, isExpanded: !!view.expanded, containerApi: new component_api_1.PaneviewApi(_this), }); panel.orientation = _this.paneview.orientation; }); return { size: view.size, view: panel }; }), }, }); this.layout(this.width, this.height); if (deferComponentLayout) { setTimeout(function () { queue.forEach(function (f) { return f(); }); }, 0); } else { queue.forEach(function (f) { return f(); }); } }; return PaneviewComponent; }(lifecycle_1.CompositeDisposable)); exports.PaneviewComponent = PaneviewComponent; //# sourceMappingURL=paneviewComponent.js.map