dockview 1.12.0 → 1.13.0
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/dist/cjs/dockview/defaultTab.d.ts +1 -1
- package/dist/cjs/dockview/dockview.d.ts +12 -40
- package/dist/cjs/dockview/dockview.js +102 -112
- package/dist/cjs/dockview/headerActionsRenderer.d.ts +3 -13
- package/dist/cjs/dockview/headerActionsRenderer.js +4 -14
- package/dist/cjs/dockview/reactContentPart.d.ts +2 -3
- package/dist/cjs/dockview/reactHeaderPart.d.ts +1 -2
- package/dist/cjs/dockview/reactWatermarkPart.d.ts +1 -6
- package/dist/cjs/dockview/reactWatermarkPart.js +0 -5
- package/dist/cjs/gridview/gridview.d.ts +2 -2
- package/dist/cjs/index.d.ts +0 -2
- package/dist/cjs/paneview/paneview.d.ts +3 -3
- package/dist/cjs/splitview/splitview.d.ts +2 -2
- package/dist/cjs/types.d.ts +0 -4
- package/dist/dockview.amd.js +2072 -2054
- package/dist/dockview.amd.js.map +1 -1
- package/dist/dockview.amd.min.js +2 -2
- package/dist/dockview.amd.min.js.map +1 -1
- package/dist/dockview.amd.min.noStyle.js +2 -2
- package/dist/dockview.amd.min.noStyle.js.map +1 -1
- package/dist/dockview.amd.noStyle.js +2072 -2054
- package/dist/dockview.amd.noStyle.js.map +1 -1
- package/dist/dockview.cjs.js +2072 -2054
- package/dist/dockview.cjs.js.map +1 -1
- package/dist/dockview.esm.js +2071 -2055
- package/dist/dockview.esm.js.map +1 -1
- package/dist/dockview.esm.min.js +2 -2
- package/dist/dockview.esm.min.js.map +1 -1
- package/dist/dockview.js +2072 -2054
- package/dist/dockview.js.map +1 -1
- package/dist/dockview.min.js +2 -2
- package/dist/dockview.min.js.map +1 -1
- package/dist/dockview.min.noStyle.js +2 -2
- package/dist/dockview.min.noStyle.js.map +1 -1
- package/dist/dockview.noStyle.js +2072 -2054
- package/dist/dockview.noStyle.js.map +1 -1
- package/dist/esm/dockview/defaultTab.d.ts +1 -1
- package/dist/esm/dockview/dockview.d.ts +12 -40
- package/dist/esm/dockview/dockview.js +93 -114
- package/dist/esm/dockview/headerActionsRenderer.d.ts +3 -13
- package/dist/esm/dockview/headerActionsRenderer.js +4 -10
- package/dist/esm/dockview/reactContentPart.d.ts +2 -3
- package/dist/esm/dockview/reactHeaderPart.d.ts +1 -2
- package/dist/esm/dockview/reactWatermarkPart.d.ts +1 -6
- package/dist/esm/dockview/reactWatermarkPart.js +0 -5
- package/dist/esm/gridview/gridview.d.ts +2 -2
- package/dist/esm/index.d.ts +0 -2
- package/dist/esm/paneview/paneview.d.ts +3 -3
- package/dist/esm/splitview/splitview.d.ts +2 -2
- package/dist/esm/types.d.ts +0 -4
- package/package.json +3 -3
package/dist/dockview.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* dockview
|
|
3
|
-
* @version 1.
|
|
3
|
+
* @version 1.13.0
|
|
4
4
|
* @link https://github.com/mathuo/dockview
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
@@ -2472,6 +2472,261 @@
|
|
|
2472
2472
|
}
|
|
2473
2473
|
}
|
|
2474
2474
|
|
|
2475
|
+
class Resizable extends CompositeDisposable {
|
|
2476
|
+
get element() {
|
|
2477
|
+
return this._element;
|
|
2478
|
+
}
|
|
2479
|
+
get disableResizing() {
|
|
2480
|
+
return this._disableResizing;
|
|
2481
|
+
}
|
|
2482
|
+
set disableResizing(value) {
|
|
2483
|
+
this._disableResizing = value;
|
|
2484
|
+
}
|
|
2485
|
+
constructor(parentElement, disableResizing = false) {
|
|
2486
|
+
super();
|
|
2487
|
+
this._disableResizing = disableResizing;
|
|
2488
|
+
this._element = parentElement;
|
|
2489
|
+
this.addDisposables(watchElementResize(this._element, (entry) => {
|
|
2490
|
+
if (this.isDisposed) {
|
|
2491
|
+
/**
|
|
2492
|
+
* resize is delayed through requestAnimationFrame so there is a small chance
|
|
2493
|
+
* the component has already been disposed of
|
|
2494
|
+
*/
|
|
2495
|
+
return;
|
|
2496
|
+
}
|
|
2497
|
+
if (this.disableResizing) {
|
|
2498
|
+
return;
|
|
2499
|
+
}
|
|
2500
|
+
if (!this._element.offsetParent) {
|
|
2501
|
+
/**
|
|
2502
|
+
* offsetParent === null is equivalent to display: none being set on the element or one
|
|
2503
|
+
* of it's parents. In the display: none case the size will become (0, 0) which we do
|
|
2504
|
+
* not want to propagate.
|
|
2505
|
+
*
|
|
2506
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
|
|
2507
|
+
*
|
|
2508
|
+
* You could use checkVisibility() but at the time of writing it's not supported across
|
|
2509
|
+
* all Browsers
|
|
2510
|
+
*
|
|
2511
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility
|
|
2512
|
+
*/
|
|
2513
|
+
return;
|
|
2514
|
+
}
|
|
2515
|
+
if (!isInDocument(this._element)) {
|
|
2516
|
+
/**
|
|
2517
|
+
* since the event is dispatched through requestAnimationFrame there is a small chance
|
|
2518
|
+
* the component is no longer attached to the DOM, if that is the case the dimensions
|
|
2519
|
+
* are mostly likely all zero and meaningless. we should skip this case.
|
|
2520
|
+
*/
|
|
2521
|
+
return;
|
|
2522
|
+
}
|
|
2523
|
+
const { width, height } = entry.contentRect;
|
|
2524
|
+
this.layout(width, height);
|
|
2525
|
+
}));
|
|
2526
|
+
}
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
const nextLayoutId$1 = sequentialNumberGenerator();
|
|
2530
|
+
function toTarget(direction) {
|
|
2531
|
+
switch (direction) {
|
|
2532
|
+
case 'left':
|
|
2533
|
+
return 'left';
|
|
2534
|
+
case 'right':
|
|
2535
|
+
return 'right';
|
|
2536
|
+
case 'above':
|
|
2537
|
+
return 'top';
|
|
2538
|
+
case 'below':
|
|
2539
|
+
return 'bottom';
|
|
2540
|
+
case 'within':
|
|
2541
|
+
default:
|
|
2542
|
+
return 'center';
|
|
2543
|
+
}
|
|
2544
|
+
}
|
|
2545
|
+
class BaseGrid extends Resizable {
|
|
2546
|
+
get id() {
|
|
2547
|
+
return this._id;
|
|
2548
|
+
}
|
|
2549
|
+
get size() {
|
|
2550
|
+
return this._groups.size;
|
|
2551
|
+
}
|
|
2552
|
+
get groups() {
|
|
2553
|
+
return Array.from(this._groups.values()).map((_) => _.value);
|
|
2554
|
+
}
|
|
2555
|
+
get width() {
|
|
2556
|
+
return this.gridview.width;
|
|
2557
|
+
}
|
|
2558
|
+
get height() {
|
|
2559
|
+
return this.gridview.height;
|
|
2560
|
+
}
|
|
2561
|
+
get minimumHeight() {
|
|
2562
|
+
return this.gridview.minimumHeight;
|
|
2563
|
+
}
|
|
2564
|
+
get maximumHeight() {
|
|
2565
|
+
return this.gridview.maximumHeight;
|
|
2566
|
+
}
|
|
2567
|
+
get minimumWidth() {
|
|
2568
|
+
return this.gridview.minimumWidth;
|
|
2569
|
+
}
|
|
2570
|
+
get maximumWidth() {
|
|
2571
|
+
return this.gridview.maximumWidth;
|
|
2572
|
+
}
|
|
2573
|
+
get activeGroup() {
|
|
2574
|
+
return this._activeGroup;
|
|
2575
|
+
}
|
|
2576
|
+
get locked() {
|
|
2577
|
+
return this.gridview.locked;
|
|
2578
|
+
}
|
|
2579
|
+
set locked(value) {
|
|
2580
|
+
this.gridview.locked = value;
|
|
2581
|
+
}
|
|
2582
|
+
constructor(options) {
|
|
2583
|
+
super(document.createElement('div'), options.disableAutoResizing);
|
|
2584
|
+
this._id = nextLayoutId$1.next();
|
|
2585
|
+
this._groups = new Map();
|
|
2586
|
+
this._onDidLayoutChange = new Emitter();
|
|
2587
|
+
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
2588
|
+
this._onDidRemove = new Emitter();
|
|
2589
|
+
this.onDidRemove = this._onDidRemove.event;
|
|
2590
|
+
this._onDidAdd = new Emitter();
|
|
2591
|
+
this.onDidAdd = this._onDidAdd.event;
|
|
2592
|
+
this._onDidActiveChange = new Emitter();
|
|
2593
|
+
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
2594
|
+
this._bufferOnDidLayoutChange = new TickDelayedEvent();
|
|
2595
|
+
this.element.style.height = '100%';
|
|
2596
|
+
this.element.style.width = '100%';
|
|
2597
|
+
options.parentElement.appendChild(this.element);
|
|
2598
|
+
this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
|
|
2599
|
+
this.gridview.locked = !!options.locked;
|
|
2600
|
+
this.element.appendChild(this.gridview.element);
|
|
2601
|
+
this.layout(0, 0, true); // set some elements height/widths
|
|
2602
|
+
this.addDisposables(Disposable.from(() => {
|
|
2603
|
+
var _a;
|
|
2604
|
+
(_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
|
|
2605
|
+
}), this.gridview.onDidChange(() => {
|
|
2606
|
+
this._bufferOnDidLayoutChange.fire();
|
|
2607
|
+
}), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
|
|
2608
|
+
this._bufferOnDidLayoutChange.fire();
|
|
2609
|
+
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
2610
|
+
this._onDidLayoutChange.fire();
|
|
2611
|
+
}), this._bufferOnDidLayoutChange);
|
|
2612
|
+
}
|
|
2613
|
+
setVisible(panel, visible) {
|
|
2614
|
+
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
|
2615
|
+
this._onDidLayoutChange.fire();
|
|
2616
|
+
}
|
|
2617
|
+
isVisible(panel) {
|
|
2618
|
+
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
2619
|
+
}
|
|
2620
|
+
maximizeGroup(panel) {
|
|
2621
|
+
this.gridview.maximizeView(panel);
|
|
2622
|
+
this.doSetGroupActive(panel);
|
|
2623
|
+
}
|
|
2624
|
+
isMaximizedGroup(panel) {
|
|
2625
|
+
return this.gridview.maximizedView() === panel;
|
|
2626
|
+
}
|
|
2627
|
+
exitMaximizedGroup() {
|
|
2628
|
+
this.gridview.exitMaximizedView();
|
|
2629
|
+
}
|
|
2630
|
+
hasMaximizedGroup() {
|
|
2631
|
+
return this.gridview.hasMaximizedView();
|
|
2632
|
+
}
|
|
2633
|
+
get onDidMaximizedGroupChange() {
|
|
2634
|
+
return this.gridview.onDidMaximizedNodeChange;
|
|
2635
|
+
}
|
|
2636
|
+
doAddGroup(group, location = [0], size) {
|
|
2637
|
+
this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
|
|
2638
|
+
this._onDidAdd.fire(group);
|
|
2639
|
+
}
|
|
2640
|
+
doRemoveGroup(group, options) {
|
|
2641
|
+
if (!this._groups.has(group.id)) {
|
|
2642
|
+
throw new Error('invalid operation');
|
|
2643
|
+
}
|
|
2644
|
+
const item = this._groups.get(group.id);
|
|
2645
|
+
const view = this.gridview.remove(group, exports.Sizing.Distribute);
|
|
2646
|
+
if (item && !(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
2647
|
+
item.disposable.dispose();
|
|
2648
|
+
item.value.dispose();
|
|
2649
|
+
this._groups.delete(group.id);
|
|
2650
|
+
this._onDidRemove.fire(group);
|
|
2651
|
+
}
|
|
2652
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
2653
|
+
const groups = Array.from(this._groups.values());
|
|
2654
|
+
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
2655
|
+
}
|
|
2656
|
+
return view;
|
|
2657
|
+
}
|
|
2658
|
+
getPanel(id) {
|
|
2659
|
+
var _a;
|
|
2660
|
+
return (_a = this._groups.get(id)) === null || _a === void 0 ? void 0 : _a.value;
|
|
2661
|
+
}
|
|
2662
|
+
doSetGroupActive(group) {
|
|
2663
|
+
if (this._activeGroup === group) {
|
|
2664
|
+
return;
|
|
2665
|
+
}
|
|
2666
|
+
if (this._activeGroup) {
|
|
2667
|
+
this._activeGroup.setActive(false);
|
|
2668
|
+
}
|
|
2669
|
+
if (group) {
|
|
2670
|
+
group.setActive(true);
|
|
2671
|
+
}
|
|
2672
|
+
this._activeGroup = group;
|
|
2673
|
+
this._onDidActiveChange.fire(group);
|
|
2674
|
+
}
|
|
2675
|
+
removeGroup(group) {
|
|
2676
|
+
this.doRemoveGroup(group);
|
|
2677
|
+
}
|
|
2678
|
+
moveToNext(options) {
|
|
2679
|
+
var _a;
|
|
2680
|
+
if (!options) {
|
|
2681
|
+
options = {};
|
|
2682
|
+
}
|
|
2683
|
+
if (!options.group) {
|
|
2684
|
+
if (!this.activeGroup) {
|
|
2685
|
+
return;
|
|
2686
|
+
}
|
|
2687
|
+
options.group = this.activeGroup;
|
|
2688
|
+
}
|
|
2689
|
+
const location = getGridLocation(options.group.element);
|
|
2690
|
+
const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
2691
|
+
this.doSetGroupActive(next);
|
|
2692
|
+
}
|
|
2693
|
+
moveToPrevious(options) {
|
|
2694
|
+
var _a;
|
|
2695
|
+
if (!options) {
|
|
2696
|
+
options = {};
|
|
2697
|
+
}
|
|
2698
|
+
if (!options.group) {
|
|
2699
|
+
if (!this.activeGroup) {
|
|
2700
|
+
return;
|
|
2701
|
+
}
|
|
2702
|
+
options.group = this.activeGroup;
|
|
2703
|
+
}
|
|
2704
|
+
const location = getGridLocation(options.group.element);
|
|
2705
|
+
const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
2706
|
+
this.doSetGroupActive(next);
|
|
2707
|
+
}
|
|
2708
|
+
layout(width, height, forceResize) {
|
|
2709
|
+
const different = forceResize !== null && forceResize !== void 0 ? forceResize : (width !== this.width || height !== this.height);
|
|
2710
|
+
if (!different) {
|
|
2711
|
+
return;
|
|
2712
|
+
}
|
|
2713
|
+
this.gridview.element.style.height = `${height}px`;
|
|
2714
|
+
this.gridview.element.style.width = `${width}px`;
|
|
2715
|
+
this.gridview.layout(width, height);
|
|
2716
|
+
}
|
|
2717
|
+
dispose() {
|
|
2718
|
+
this._onDidActiveChange.dispose();
|
|
2719
|
+
this._onDidAdd.dispose();
|
|
2720
|
+
this._onDidRemove.dispose();
|
|
2721
|
+
this._onDidLayoutChange.dispose();
|
|
2722
|
+
for (const group of this.groups) {
|
|
2723
|
+
group.dispose();
|
|
2724
|
+
}
|
|
2725
|
+
this.gridview.dispose();
|
|
2726
|
+
super.dispose();
|
|
2727
|
+
}
|
|
2728
|
+
}
|
|
2729
|
+
|
|
2475
2730
|
class SplitviewApi {
|
|
2476
2731
|
/**
|
|
2477
2732
|
* The minimum size the component can reach where size is measured in the direction of orientation provided.
|
|
@@ -3014,6 +3269,9 @@
|
|
|
3014
3269
|
get onWillDragPanel() {
|
|
3015
3270
|
return this.component.onWillDragPanel;
|
|
3016
3271
|
}
|
|
3272
|
+
get onUnhandledDragOverEvent() {
|
|
3273
|
+
return this.component.onUnhandledDragOverEvent;
|
|
3274
|
+
}
|
|
3017
3275
|
/**
|
|
3018
3276
|
* All panel objects.
|
|
3019
3277
|
*/
|
|
@@ -3151,6 +3409,67 @@
|
|
|
3151
3409
|
}
|
|
3152
3410
|
}
|
|
3153
3411
|
|
|
3412
|
+
class DragHandler extends CompositeDisposable {
|
|
3413
|
+
constructor(el) {
|
|
3414
|
+
super();
|
|
3415
|
+
this.el = el;
|
|
3416
|
+
this.dataDisposable = new MutableDisposable();
|
|
3417
|
+
this.pointerEventsDisposable = new MutableDisposable();
|
|
3418
|
+
this._onDragStart = new Emitter();
|
|
3419
|
+
this.onDragStart = this._onDragStart.event;
|
|
3420
|
+
this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
|
|
3421
|
+
this.configure();
|
|
3422
|
+
}
|
|
3423
|
+
isCancelled(_event) {
|
|
3424
|
+
return false;
|
|
3425
|
+
}
|
|
3426
|
+
configure() {
|
|
3427
|
+
this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
|
|
3428
|
+
if (event.defaultPrevented || this.isCancelled(event)) {
|
|
3429
|
+
event.preventDefault();
|
|
3430
|
+
return;
|
|
3431
|
+
}
|
|
3432
|
+
const iframes = [
|
|
3433
|
+
...getElementsByTagName('iframe'),
|
|
3434
|
+
...getElementsByTagName('webview'),
|
|
3435
|
+
];
|
|
3436
|
+
this.pointerEventsDisposable.value = {
|
|
3437
|
+
dispose: () => {
|
|
3438
|
+
for (const iframe of iframes) {
|
|
3439
|
+
iframe.style.pointerEvents = 'auto';
|
|
3440
|
+
}
|
|
3441
|
+
},
|
|
3442
|
+
};
|
|
3443
|
+
for (const iframe of iframes) {
|
|
3444
|
+
iframe.style.pointerEvents = 'none';
|
|
3445
|
+
}
|
|
3446
|
+
this.el.classList.add('dv-dragged');
|
|
3447
|
+
setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
|
|
3448
|
+
this.dataDisposable.value = this.getData(event);
|
|
3449
|
+
this._onDragStart.fire(event);
|
|
3450
|
+
if (event.dataTransfer) {
|
|
3451
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
3452
|
+
const hasData = event.dataTransfer.items.length > 0;
|
|
3453
|
+
if (!hasData) {
|
|
3454
|
+
/**
|
|
3455
|
+
* Although this is not used by dockview many third party dnd libraries will check
|
|
3456
|
+
* dataTransfer.types to determine valid drag events.
|
|
3457
|
+
*
|
|
3458
|
+
* For example: in react-dnd if dataTransfer.types is not set then the dragStart event will be cancelled
|
|
3459
|
+
* through .preventDefault(). Since this is applied globally to all drag events this would break dockviews
|
|
3460
|
+
* dnd logic. You can see the code at
|
|
3461
|
+
* https://github.com/react-dnd/react-dnd/blob/main/packages/backend-html5/src/HTML5BackendImpl.ts#L542
|
|
3462
|
+
*/
|
|
3463
|
+
event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3466
|
+
}), addDisposableListener(this.el, 'dragend', () => {
|
|
3467
|
+
this.pointerEventsDisposable.dispose();
|
|
3468
|
+
this.dataDisposable.dispose();
|
|
3469
|
+
}));
|
|
3470
|
+
}
|
|
3471
|
+
}
|
|
3472
|
+
|
|
3154
3473
|
class DragAndDropObserver extends CompositeDisposable {
|
|
3155
3474
|
constructor(element, callbacks) {
|
|
3156
3475
|
super();
|
|
@@ -3295,6 +3614,10 @@
|
|
|
3295
3614
|
this.removeDropTarget();
|
|
3296
3615
|
return;
|
|
3297
3616
|
}
|
|
3617
|
+
if (!this.options.canDisplayOverlay(e, quadrant)) {
|
|
3618
|
+
this.removeDropTarget();
|
|
3619
|
+
return;
|
|
3620
|
+
}
|
|
3298
3621
|
const willShowOverlayEvent = new WillShowOverlayEvent({
|
|
3299
3622
|
nativeEvent: e,
|
|
3300
3623
|
position: quadrant,
|
|
@@ -3308,16 +3631,6 @@
|
|
|
3308
3631
|
this.removeDropTarget();
|
|
3309
3632
|
return;
|
|
3310
3633
|
}
|
|
3311
|
-
if (typeof this.options.canDisplayOverlay === 'boolean') {
|
|
3312
|
-
if (!this.options.canDisplayOverlay) {
|
|
3313
|
-
this.removeDropTarget();
|
|
3314
|
-
return;
|
|
3315
|
-
}
|
|
3316
|
-
}
|
|
3317
|
-
else if (!this.options.canDisplayOverlay(e, quadrant)) {
|
|
3318
|
-
this.removeDropTarget();
|
|
3319
|
-
return;
|
|
3320
|
-
}
|
|
3321
3634
|
this.markAsUsed(e);
|
|
3322
3635
|
if (!this.targetElement) {
|
|
3323
3636
|
this.targetElement = document.createElement('div');
|
|
@@ -3508,2023 +3821,1758 @@
|
|
|
3508
3821
|
return 'center';
|
|
3509
3822
|
}
|
|
3510
3823
|
|
|
3511
|
-
class
|
|
3512
|
-
|
|
3513
|
-
return this._element;
|
|
3514
|
-
}
|
|
3515
|
-
constructor(accessor, group) {
|
|
3824
|
+
class WillFocusEvent extends DockviewEvent {
|
|
3825
|
+
constructor() {
|
|
3516
3826
|
super();
|
|
3517
|
-
this.accessor = accessor;
|
|
3518
|
-
this.group = group;
|
|
3519
|
-
this.disposable = new MutableDisposable();
|
|
3520
|
-
this._onDidFocus = new Emitter();
|
|
3521
|
-
this.onDidFocus = this._onDidFocus.event;
|
|
3522
|
-
this._onDidBlur = new Emitter();
|
|
3523
|
-
this.onDidBlur = this._onDidBlur.event;
|
|
3524
|
-
this._element = document.createElement('div');
|
|
3525
|
-
this._element.className = 'content-container';
|
|
3526
|
-
this._element.tabIndex = -1;
|
|
3527
|
-
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
3528
|
-
this.dropTarget = new Droptarget(this.element, {
|
|
3529
|
-
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
3530
|
-
canDisplayOverlay: (event, position) => {
|
|
3531
|
-
if (this.group.locked === 'no-drop-target' ||
|
|
3532
|
-
(this.group.locked && position === 'center')) {
|
|
3533
|
-
return false;
|
|
3534
|
-
}
|
|
3535
|
-
const data = getPanelData();
|
|
3536
|
-
if (!data &&
|
|
3537
|
-
event.shiftKey &&
|
|
3538
|
-
this.group.location.type !== 'floating') {
|
|
3539
|
-
return false;
|
|
3540
|
-
}
|
|
3541
|
-
if (data && data.viewId === this.accessor.id) {
|
|
3542
|
-
if (data.groupId === this.group.id) {
|
|
3543
|
-
if (position === 'center') {
|
|
3544
|
-
// don't allow to drop on self for center position
|
|
3545
|
-
return false;
|
|
3546
|
-
}
|
|
3547
|
-
if (data.panelId === null) {
|
|
3548
|
-
// don't allow group move to drop anywhere on self
|
|
3549
|
-
return false;
|
|
3550
|
-
}
|
|
3551
|
-
}
|
|
3552
|
-
const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
|
|
3553
|
-
data.groupId === this.group.id;
|
|
3554
|
-
return !groupHasOnePanelAndIsActiveDragElement;
|
|
3555
|
-
}
|
|
3556
|
-
return this.group.canDisplayOverlay(event, position, 'content');
|
|
3557
|
-
},
|
|
3558
|
-
});
|
|
3559
|
-
this.addDisposables(this.dropTarget);
|
|
3560
3827
|
}
|
|
3561
|
-
|
|
3562
|
-
|
|
3828
|
+
}
|
|
3829
|
+
/**
|
|
3830
|
+
* A core api implementation that should be used across all panel-like objects
|
|
3831
|
+
*/
|
|
3832
|
+
class PanelApiImpl extends CompositeDisposable {
|
|
3833
|
+
get isFocused() {
|
|
3834
|
+
return this._isFocused;
|
|
3563
3835
|
}
|
|
3564
|
-
|
|
3565
|
-
this.
|
|
3836
|
+
get isActive() {
|
|
3837
|
+
return this._isActive;
|
|
3566
3838
|
}
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
(this.panel && this.group.isPanelActive(this.panel));
|
|
3570
|
-
if (this.panel &&
|
|
3571
|
-
this.panel.view.content.element.parentElement === this._element) {
|
|
3572
|
-
/**
|
|
3573
|
-
* If the currently attached panel is mounted directly to the content then remove it
|
|
3574
|
-
*/
|
|
3575
|
-
this._element.removeChild(this.panel.view.content.element);
|
|
3576
|
-
}
|
|
3577
|
-
this.panel = panel;
|
|
3578
|
-
let container;
|
|
3579
|
-
switch (panel.api.renderer) {
|
|
3580
|
-
case 'onlyWhenVisible':
|
|
3581
|
-
this.group.renderContainer.detatch(panel);
|
|
3582
|
-
if (this.panel) {
|
|
3583
|
-
if (doRender) {
|
|
3584
|
-
this._element.appendChild(this.panel.view.content.element);
|
|
3585
|
-
}
|
|
3586
|
-
}
|
|
3587
|
-
container = this._element;
|
|
3588
|
-
break;
|
|
3589
|
-
case 'always':
|
|
3590
|
-
if (panel.view.content.element.parentElement === this._element) {
|
|
3591
|
-
this._element.removeChild(panel.view.content.element);
|
|
3592
|
-
}
|
|
3593
|
-
container = this.group.renderContainer.attach({
|
|
3594
|
-
panel,
|
|
3595
|
-
referenceContainer: this,
|
|
3596
|
-
});
|
|
3597
|
-
break;
|
|
3598
|
-
}
|
|
3599
|
-
if (doRender) {
|
|
3600
|
-
const _onDidFocus = panel.view.content.onDidFocus;
|
|
3601
|
-
const _onDidBlur = panel.view.content.onDidBlur;
|
|
3602
|
-
const focusTracker = trackFocus(container);
|
|
3603
|
-
const disposable = new CompositeDisposable();
|
|
3604
|
-
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
3605
|
-
if (_onDidFocus) {
|
|
3606
|
-
disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
|
|
3607
|
-
}
|
|
3608
|
-
if (_onDidBlur) {
|
|
3609
|
-
disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
|
|
3610
|
-
}
|
|
3611
|
-
this.disposable.value = disposable;
|
|
3612
|
-
}
|
|
3839
|
+
get isVisible() {
|
|
3840
|
+
return this._isVisible;
|
|
3613
3841
|
}
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
return;
|
|
3617
|
-
}
|
|
3618
|
-
this.renderPanel(panel);
|
|
3842
|
+
get width() {
|
|
3843
|
+
return this._width;
|
|
3619
3844
|
}
|
|
3620
|
-
|
|
3621
|
-
|
|
3845
|
+
get height() {
|
|
3846
|
+
return this._height;
|
|
3622
3847
|
}
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
this.
|
|
3848
|
+
constructor(id, component) {
|
|
3849
|
+
super();
|
|
3850
|
+
this.id = id;
|
|
3851
|
+
this.component = component;
|
|
3852
|
+
this._isFocused = false;
|
|
3853
|
+
this._isActive = false;
|
|
3854
|
+
this._isVisible = true;
|
|
3855
|
+
this._width = 0;
|
|
3856
|
+
this._height = 0;
|
|
3857
|
+
this._parameters = {};
|
|
3858
|
+
this.panelUpdatesDisposable = new MutableDisposable();
|
|
3859
|
+
this._onDidDimensionChange = new Emitter();
|
|
3860
|
+
this.onDidDimensionsChange = this._onDidDimensionChange.event;
|
|
3861
|
+
this._onDidChangeFocus = new Emitter();
|
|
3862
|
+
this.onDidFocusChange = this._onDidChangeFocus.event;
|
|
3863
|
+
//
|
|
3864
|
+
this._onWillFocus = new Emitter();
|
|
3865
|
+
this.onWillFocus = this._onWillFocus.event;
|
|
3866
|
+
//
|
|
3867
|
+
this._onDidVisibilityChange = new Emitter();
|
|
3868
|
+
this.onDidVisibilityChange = this._onDidVisibilityChange.event;
|
|
3869
|
+
this._onWillVisibilityChange = new Emitter();
|
|
3870
|
+
this.onWillVisibilityChange = this._onWillVisibilityChange.event;
|
|
3871
|
+
this._onDidActiveChange = new Emitter();
|
|
3872
|
+
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
3873
|
+
this._onActiveChange = new Emitter();
|
|
3874
|
+
this.onActiveChange = this._onActiveChange.event;
|
|
3875
|
+
this._onDidParametersChange = new Emitter();
|
|
3876
|
+
this.onDidParametersChange = this._onDidParametersChange.event;
|
|
3877
|
+
this.addDisposables(this.onDidFocusChange((event) => {
|
|
3878
|
+
this._isFocused = event.isFocused;
|
|
3879
|
+
}), this.onDidActiveChange((event) => {
|
|
3880
|
+
this._isActive = event.isActive;
|
|
3881
|
+
}), this.onDidVisibilityChange((event) => {
|
|
3882
|
+
this._isVisible = event.isVisible;
|
|
3883
|
+
}), this.onDidDimensionsChange((event) => {
|
|
3884
|
+
this._width = event.width;
|
|
3885
|
+
this._height = event.height;
|
|
3886
|
+
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onWillFocus, this._onActiveChange, this._onWillFocus, this._onWillVisibilityChange, this._onDidParametersChange);
|
|
3631
3887
|
}
|
|
3632
|
-
|
|
3633
|
-
this.
|
|
3634
|
-
|
|
3888
|
+
getParameters() {
|
|
3889
|
+
return this._parameters;
|
|
3890
|
+
}
|
|
3891
|
+
initialize(panel) {
|
|
3892
|
+
this.panelUpdatesDisposable.value = this._onDidParametersChange.event((parameters) => {
|
|
3893
|
+
this._parameters = parameters;
|
|
3894
|
+
panel.update({
|
|
3895
|
+
params: parameters,
|
|
3896
|
+
});
|
|
3897
|
+
});
|
|
3898
|
+
}
|
|
3899
|
+
setVisible(isVisible) {
|
|
3900
|
+
this._onWillVisibilityChange.fire({ isVisible });
|
|
3901
|
+
}
|
|
3902
|
+
setActive() {
|
|
3903
|
+
this._onActiveChange.fire();
|
|
3904
|
+
}
|
|
3905
|
+
updateParameters(parameters) {
|
|
3906
|
+
this._onDidParametersChange.fire(parameters);
|
|
3635
3907
|
}
|
|
3636
3908
|
}
|
|
3637
3909
|
|
|
3638
|
-
class
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
this.
|
|
3643
|
-
this.
|
|
3644
|
-
|
|
3645
|
-
this.
|
|
3646
|
-
|
|
3647
|
-
|
|
3910
|
+
class SplitviewPanelApiImpl extends PanelApiImpl {
|
|
3911
|
+
//
|
|
3912
|
+
constructor(id, component) {
|
|
3913
|
+
super(id, component);
|
|
3914
|
+
this._onDidConstraintsChangeInternal = new Emitter();
|
|
3915
|
+
this.onDidConstraintsChangeInternal = this._onDidConstraintsChangeInternal.event;
|
|
3916
|
+
//
|
|
3917
|
+
this._onDidConstraintsChange = new Emitter({
|
|
3918
|
+
replay: true,
|
|
3919
|
+
});
|
|
3920
|
+
this.onDidConstraintsChange = this._onDidConstraintsChange.event;
|
|
3921
|
+
//
|
|
3922
|
+
this._onDidSizeChange = new Emitter();
|
|
3923
|
+
this.onDidSizeChange = this._onDidSizeChange.event;
|
|
3924
|
+
this.addDisposables(this._onDidConstraintsChangeInternal, this._onDidConstraintsChange, this._onDidSizeChange);
|
|
3648
3925
|
}
|
|
3649
|
-
|
|
3650
|
-
|
|
3926
|
+
setConstraints(value) {
|
|
3927
|
+
this._onDidConstraintsChangeInternal.fire(value);
|
|
3651
3928
|
}
|
|
3652
|
-
|
|
3653
|
-
this.
|
|
3654
|
-
if (event.defaultPrevented || this.isCancelled(event)) {
|
|
3655
|
-
event.preventDefault();
|
|
3656
|
-
return;
|
|
3657
|
-
}
|
|
3658
|
-
const iframes = [
|
|
3659
|
-
...getElementsByTagName('iframe'),
|
|
3660
|
-
...getElementsByTagName('webview'),
|
|
3661
|
-
];
|
|
3662
|
-
this.pointerEventsDisposable.value = {
|
|
3663
|
-
dispose: () => {
|
|
3664
|
-
for (const iframe of iframes) {
|
|
3665
|
-
iframe.style.pointerEvents = 'auto';
|
|
3666
|
-
}
|
|
3667
|
-
},
|
|
3668
|
-
};
|
|
3669
|
-
for (const iframe of iframes) {
|
|
3670
|
-
iframe.style.pointerEvents = 'none';
|
|
3671
|
-
}
|
|
3672
|
-
this.el.classList.add('dv-dragged');
|
|
3673
|
-
setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
|
|
3674
|
-
this.dataDisposable.value = this.getData(event);
|
|
3675
|
-
this._onDragStart.fire(event);
|
|
3676
|
-
if (event.dataTransfer) {
|
|
3677
|
-
event.dataTransfer.effectAllowed = 'move';
|
|
3678
|
-
const hasData = event.dataTransfer.items.length > 0;
|
|
3679
|
-
if (!hasData) {
|
|
3680
|
-
/**
|
|
3681
|
-
* Although this is not used by dockview many third party dnd libraries will check
|
|
3682
|
-
* dataTransfer.types to determine valid drag events.
|
|
3683
|
-
*
|
|
3684
|
-
* For example: in react-dnd if dataTransfer.types is not set then the dragStart event will be cancelled
|
|
3685
|
-
* through .preventDefault(). Since this is applied globally to all drag events this would break dockviews
|
|
3686
|
-
* dnd logic. You can see the code at
|
|
3687
|
-
* https://github.com/react-dnd/react-dnd/blob/main/packages/backend-html5/src/HTML5BackendImpl.ts#L542
|
|
3688
|
-
*/
|
|
3689
|
-
event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
|
|
3690
|
-
}
|
|
3691
|
-
}
|
|
3692
|
-
}), addDisposableListener(this.el, 'dragend', () => {
|
|
3693
|
-
this.pointerEventsDisposable.dispose();
|
|
3694
|
-
this.dataDisposable.dispose();
|
|
3695
|
-
}));
|
|
3929
|
+
setSize(event) {
|
|
3930
|
+
this._onDidSizeChange.fire(event);
|
|
3696
3931
|
}
|
|
3697
3932
|
}
|
|
3698
3933
|
|
|
3699
|
-
class
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
this.accessor = accessor;
|
|
3703
|
-
this.group = group;
|
|
3704
|
-
this.panel = panel;
|
|
3705
|
-
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
3934
|
+
class PaneviewPanelApiImpl extends SplitviewPanelApiImpl {
|
|
3935
|
+
set pane(pane) {
|
|
3936
|
+
this._pane = pane;
|
|
3706
3937
|
}
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
};
|
|
3938
|
+
constructor(id, component) {
|
|
3939
|
+
super(id, component);
|
|
3940
|
+
this._onDidExpansionChange = new Emitter({
|
|
3941
|
+
replay: true,
|
|
3942
|
+
});
|
|
3943
|
+
this.onDidExpansionChange = this._onDidExpansionChange.event;
|
|
3944
|
+
this._onMouseEnter = new Emitter({});
|
|
3945
|
+
this.onMouseEnter = this._onMouseEnter.event;
|
|
3946
|
+
this._onMouseLeave = new Emitter({});
|
|
3947
|
+
this.onMouseLeave = this._onMouseLeave.event;
|
|
3948
|
+
this.addDisposables(this._onDidExpansionChange, this._onMouseEnter, this._onMouseLeave);
|
|
3949
|
+
}
|
|
3950
|
+
setExpanded(isExpanded) {
|
|
3951
|
+
var _a;
|
|
3952
|
+
(_a = this._pane) === null || _a === void 0 ? void 0 : _a.setExpanded(isExpanded);
|
|
3953
|
+
}
|
|
3954
|
+
get isExpanded() {
|
|
3955
|
+
var _a;
|
|
3956
|
+
return !!((_a = this._pane) === null || _a === void 0 ? void 0 : _a.isExpanded());
|
|
3714
3957
|
}
|
|
3715
3958
|
}
|
|
3716
|
-
|
|
3959
|
+
|
|
3960
|
+
class BasePanelView extends CompositeDisposable {
|
|
3717
3961
|
get element() {
|
|
3718
3962
|
return this._element;
|
|
3719
3963
|
}
|
|
3720
|
-
|
|
3964
|
+
get width() {
|
|
3965
|
+
return this._width;
|
|
3966
|
+
}
|
|
3967
|
+
get height() {
|
|
3968
|
+
return this._height;
|
|
3969
|
+
}
|
|
3970
|
+
get params() {
|
|
3971
|
+
var _a;
|
|
3972
|
+
return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
|
|
3973
|
+
}
|
|
3974
|
+
constructor(id, component, api) {
|
|
3721
3975
|
super();
|
|
3722
|
-
this.
|
|
3723
|
-
this.
|
|
3724
|
-
this.
|
|
3725
|
-
this.
|
|
3726
|
-
this.
|
|
3727
|
-
this.onChanged = this._onChanged.event;
|
|
3728
|
-
this._onDropped = new Emitter();
|
|
3729
|
-
this.onDrop = this._onDropped.event;
|
|
3730
|
-
this._onDragStart = new Emitter();
|
|
3731
|
-
this.onDragStart = this._onDragStart.event;
|
|
3976
|
+
this.id = id;
|
|
3977
|
+
this.component = component;
|
|
3978
|
+
this.api = api;
|
|
3979
|
+
this._height = 0;
|
|
3980
|
+
this._width = 0;
|
|
3732
3981
|
this._element = document.createElement('div');
|
|
3733
|
-
this._element.
|
|
3734
|
-
this._element.
|
|
3735
|
-
this._element.
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
|
|
3741
|
-
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
this.
|
|
3757
|
-
|
|
3758
|
-
this.
|
|
3759
|
-
|
|
3760
|
-
if (event.defaultPrevented) {
|
|
3761
|
-
return;
|
|
3982
|
+
this._element.tabIndex = -1;
|
|
3983
|
+
this._element.style.outline = 'none';
|
|
3984
|
+
this._element.style.height = '100%';
|
|
3985
|
+
this._element.style.width = '100%';
|
|
3986
|
+
this._element.style.overflow = 'hidden';
|
|
3987
|
+
const focusTracker = trackFocus(this._element);
|
|
3988
|
+
this.addDisposables(this.api, focusTracker.onDidFocus(() => {
|
|
3989
|
+
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
3990
|
+
}), focusTracker.onDidBlur(() => {
|
|
3991
|
+
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
3992
|
+
}), focusTracker);
|
|
3993
|
+
}
|
|
3994
|
+
focus() {
|
|
3995
|
+
const event = new WillFocusEvent();
|
|
3996
|
+
this.api._onWillFocus.fire(event);
|
|
3997
|
+
if (event.defaultPrevented) {
|
|
3998
|
+
return;
|
|
3999
|
+
}
|
|
4000
|
+
this._element.focus();
|
|
4001
|
+
}
|
|
4002
|
+
layout(width, height) {
|
|
4003
|
+
this._width = width;
|
|
4004
|
+
this._height = height;
|
|
4005
|
+
this.api._onDidDimensionChange.fire({ width, height });
|
|
4006
|
+
if (this.part) {
|
|
4007
|
+
if (this._params) {
|
|
4008
|
+
this.part.update(this._params.params);
|
|
3762
4009
|
}
|
|
3763
|
-
|
|
3764
|
-
}), this.dropTarget.onDrop((event) => {
|
|
3765
|
-
this._onDropped.fire(event);
|
|
3766
|
-
}), this.dropTarget);
|
|
4010
|
+
}
|
|
3767
4011
|
}
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
4012
|
+
init(parameters) {
|
|
4013
|
+
this._params = parameters;
|
|
4014
|
+
this.part = this.getComponent();
|
|
3771
4015
|
}
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
4016
|
+
update(event) {
|
|
4017
|
+
var _a, _b;
|
|
4018
|
+
// merge the new parameters with the existing parameters
|
|
4019
|
+
this._params = Object.assign(Object.assign({}, this._params), { params: Object.assign(Object.assign({}, (_a = this._params) === null || _a === void 0 ? void 0 : _a.params), event.params) });
|
|
4020
|
+
/**
|
|
4021
|
+
* delete new keys that have a value of undefined,
|
|
4022
|
+
* allow values of null
|
|
4023
|
+
*/
|
|
4024
|
+
for (const key of Object.keys(event.params)) {
|
|
4025
|
+
if (event.params[key] === undefined) {
|
|
4026
|
+
delete this._params.params[key];
|
|
4027
|
+
}
|
|
3775
4028
|
}
|
|
3776
|
-
|
|
3777
|
-
this.
|
|
4029
|
+
// update the view with the updated props
|
|
4030
|
+
(_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
|
|
4031
|
+
}
|
|
4032
|
+
toJSON() {
|
|
4033
|
+
var _a, _b;
|
|
4034
|
+
const params = (_b = (_a = this._params) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {};
|
|
4035
|
+
return {
|
|
4036
|
+
id: this.id,
|
|
4037
|
+
component: this.component,
|
|
4038
|
+
params: Object.keys(params).length > 0 ? params : undefined,
|
|
4039
|
+
};
|
|
3778
4040
|
}
|
|
3779
4041
|
dispose() {
|
|
4042
|
+
var _a;
|
|
4043
|
+
this.api.dispose();
|
|
4044
|
+
(_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
3780
4045
|
super.dispose();
|
|
3781
4046
|
}
|
|
3782
4047
|
}
|
|
3783
4048
|
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
document.body.appendChild(ghostElement);
|
|
3788
|
-
dataTransfer.setDragImage(ghostElement, 0, 0);
|
|
3789
|
-
setTimeout(() => {
|
|
3790
|
-
removeClasses(ghostElement, 'dv-dragged');
|
|
3791
|
-
ghostElement.remove();
|
|
3792
|
-
}, 0);
|
|
3793
|
-
}
|
|
3794
|
-
|
|
3795
|
-
class GroupDragHandler extends DragHandler {
|
|
3796
|
-
constructor(element, accessor, group) {
|
|
3797
|
-
super(element);
|
|
3798
|
-
this.accessor = accessor;
|
|
3799
|
-
this.group = group;
|
|
3800
|
-
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
3801
|
-
this.addDisposables(addDisposableListener(element, 'mousedown', (e) => {
|
|
3802
|
-
if (e.shiftKey) {
|
|
3803
|
-
/**
|
|
3804
|
-
* You cannot call e.preventDefault() because that will prevent drag events from firing
|
|
3805
|
-
* but we also need to stop any group overlay drag events from occuring
|
|
3806
|
-
* Use a custom event marker that can be checked by the overlay drag events
|
|
3807
|
-
*/
|
|
3808
|
-
quasiPreventDefault(e);
|
|
3809
|
-
}
|
|
3810
|
-
}, true));
|
|
4049
|
+
class PaneviewPanel extends BasePanelView {
|
|
4050
|
+
set orientation(value) {
|
|
4051
|
+
this._orientation = value;
|
|
3811
4052
|
}
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
return true;
|
|
3815
|
-
}
|
|
3816
|
-
return false;
|
|
4053
|
+
get orientation() {
|
|
4054
|
+
return this._orientation;
|
|
3817
4055
|
}
|
|
3818
|
-
|
|
3819
|
-
const
|
|
3820
|
-
|
|
3821
|
-
const
|
|
3822
|
-
|
|
3823
|
-
const color = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-color');
|
|
3824
|
-
if (dataTransfer) {
|
|
3825
|
-
const ghostElement = document.createElement('div');
|
|
3826
|
-
ghostElement.style.backgroundColor = bgColor;
|
|
3827
|
-
ghostElement.style.color = color;
|
|
3828
|
-
ghostElement.style.padding = '2px 8px';
|
|
3829
|
-
ghostElement.style.height = '24px';
|
|
3830
|
-
ghostElement.style.fontSize = '11px';
|
|
3831
|
-
ghostElement.style.lineHeight = '20px';
|
|
3832
|
-
ghostElement.style.borderRadius = '12px';
|
|
3833
|
-
ghostElement.style.position = 'absolute';
|
|
3834
|
-
ghostElement.textContent = `Multiple Panels (${this.group.size})`;
|
|
3835
|
-
addGhostImage(dataTransfer, ghostElement);
|
|
3836
|
-
}
|
|
3837
|
-
return {
|
|
3838
|
-
dispose: () => {
|
|
3839
|
-
this.panelTransfer.clearData(PanelTransfer.prototype);
|
|
3840
|
-
},
|
|
3841
|
-
};
|
|
4056
|
+
get minimumSize() {
|
|
4057
|
+
const headerSize = this.headerSize;
|
|
4058
|
+
const expanded = this.isExpanded();
|
|
4059
|
+
const minimumBodySize = expanded ? this._minimumBodySize : 0;
|
|
4060
|
+
return headerSize + minimumBodySize;
|
|
3842
4061
|
}
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
return
|
|
4062
|
+
get maximumSize() {
|
|
4063
|
+
const headerSize = this.headerSize;
|
|
4064
|
+
const expanded = this.isExpanded();
|
|
4065
|
+
const maximumBodySize = expanded ? this._maximumBodySize : 0;
|
|
4066
|
+
return headerSize + maximumBodySize;
|
|
3848
4067
|
}
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
this.accessor = accessor;
|
|
3852
|
-
this.group = group;
|
|
3853
|
-
this._onDrop = new Emitter();
|
|
3854
|
-
this.onDrop = this._onDrop.event;
|
|
3855
|
-
this._onDragStart = new Emitter();
|
|
3856
|
-
this.onDragStart = this._onDragStart.event;
|
|
3857
|
-
this._element = document.createElement('div');
|
|
3858
|
-
this._element.className = 'void-container';
|
|
3859
|
-
this._element.tabIndex = 0;
|
|
3860
|
-
this._element.draggable = true;
|
|
3861
|
-
this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'click', () => {
|
|
3862
|
-
this.accessor.doSetGroupActive(this.group);
|
|
3863
|
-
}));
|
|
3864
|
-
const handler = new GroupDragHandler(this._element, accessor, group);
|
|
3865
|
-
this.dropTraget = new Droptarget(this._element, {
|
|
3866
|
-
acceptedTargetZones: ['center'],
|
|
3867
|
-
canDisplayOverlay: (event, position) => {
|
|
3868
|
-
var _a;
|
|
3869
|
-
const data = getPanelData();
|
|
3870
|
-
if (data && this.accessor.id === data.viewId) {
|
|
3871
|
-
if (data.panelId === null &&
|
|
3872
|
-
data.groupId === this.group.id) {
|
|
3873
|
-
// don't allow group move to drop on self
|
|
3874
|
-
return false;
|
|
3875
|
-
}
|
|
3876
|
-
// don't show the overlay if the tab being dragged is the last panel of this group
|
|
3877
|
-
return ((_a = last(this.group.panels)) === null || _a === void 0 ? void 0 : _a.id) !== data.panelId;
|
|
3878
|
-
}
|
|
3879
|
-
return group.model.canDisplayOverlay(event, position, 'header_space');
|
|
3880
|
-
},
|
|
3881
|
-
});
|
|
3882
|
-
this.onWillShowOverlay = this.dropTraget.onWillShowOverlay;
|
|
3883
|
-
this.addDisposables(handler, handler.onDragStart((event) => {
|
|
3884
|
-
this._onDragStart.fire(event);
|
|
3885
|
-
}), this.dropTraget.onDrop((event) => {
|
|
3886
|
-
this._onDrop.fire(event);
|
|
3887
|
-
}), this.dropTraget);
|
|
4068
|
+
get size() {
|
|
4069
|
+
return this._size;
|
|
3888
4070
|
}
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
class TabsContainer extends CompositeDisposable {
|
|
3892
|
-
get panels() {
|
|
3893
|
-
return this.tabs.map((_) => _.value.panel.id);
|
|
4071
|
+
get orthogonalSize() {
|
|
4072
|
+
return this._orthogonalSize;
|
|
3894
4073
|
}
|
|
3895
|
-
|
|
3896
|
-
|
|
4074
|
+
set orthogonalSize(size) {
|
|
4075
|
+
this._orthogonalSize = size;
|
|
3897
4076
|
}
|
|
3898
|
-
get
|
|
3899
|
-
return this.
|
|
4077
|
+
get minimumBodySize() {
|
|
4078
|
+
return this._minimumBodySize;
|
|
3900
4079
|
}
|
|
3901
|
-
set
|
|
3902
|
-
this.
|
|
3903
|
-
this.element.style.display = value ? 'none' : '';
|
|
4080
|
+
set minimumBodySize(value) {
|
|
4081
|
+
this._minimumBodySize = typeof value === 'number' ? value : 0;
|
|
3904
4082
|
}
|
|
3905
|
-
|
|
3906
|
-
|
|
3907
|
-
this.element.style.display = '';
|
|
3908
|
-
}
|
|
4083
|
+
get maximumBodySize() {
|
|
4084
|
+
return this._maximumBodySize;
|
|
3909
4085
|
}
|
|
3910
|
-
|
|
3911
|
-
this.
|
|
4086
|
+
set maximumBodySize(value) {
|
|
4087
|
+
this._maximumBodySize =
|
|
4088
|
+
typeof value === 'number' ? value : Number.POSITIVE_INFINITY;
|
|
3912
4089
|
}
|
|
3913
|
-
|
|
3914
|
-
|
|
4090
|
+
get headerVisible() {
|
|
4091
|
+
return this._headerVisible;
|
|
4092
|
+
}
|
|
4093
|
+
set headerVisible(value) {
|
|
4094
|
+
this._headerVisible = value;
|
|
4095
|
+
this.header.style.display = value ? '' : 'none';
|
|
4096
|
+
}
|
|
4097
|
+
constructor(id, component, headerComponent, orientation, isExpanded, isHeaderVisible) {
|
|
4098
|
+
super(id, component, new PaneviewPanelApiImpl(id, component));
|
|
4099
|
+
this.headerComponent = headerComponent;
|
|
4100
|
+
this._onDidChangeExpansionState = new Emitter({ replay: true });
|
|
4101
|
+
this.onDidChangeExpansionState = this._onDidChangeExpansionState.event;
|
|
4102
|
+
this._onDidChange = new Emitter();
|
|
4103
|
+
this.onDidChange = this._onDidChange.event;
|
|
4104
|
+
this.headerSize = 22;
|
|
4105
|
+
this._orthogonalSize = 0;
|
|
4106
|
+
this._size = 0;
|
|
4107
|
+
this._minimumBodySize = 100;
|
|
4108
|
+
this._maximumBodySize = Number.POSITIVE_INFINITY;
|
|
4109
|
+
this._isExpanded = false;
|
|
4110
|
+
this.expandedSize = 0;
|
|
4111
|
+
this.api.pane = this; // TODO cannot use 'this' before 'super'
|
|
4112
|
+
this.api.initialize(this);
|
|
4113
|
+
this._isExpanded = isExpanded;
|
|
4114
|
+
this._headerVisible = isHeaderVisible;
|
|
4115
|
+
this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
|
|
4116
|
+
this._orientation = orientation;
|
|
4117
|
+
this.element.classList.add('pane');
|
|
4118
|
+
this.addDisposables(this.api.onWillVisibilityChange((event) => {
|
|
4119
|
+
const { isVisible } = event;
|
|
4120
|
+
const { accessor } = this._params;
|
|
4121
|
+
accessor.setVisible(this, isVisible);
|
|
4122
|
+
}), this.api.onDidSizeChange((event) => {
|
|
4123
|
+
this._onDidChange.fire({ size: event.size });
|
|
4124
|
+
}), addDisposableListener(this.element, 'mouseenter', (ev) => {
|
|
4125
|
+
this.api._onMouseEnter.fire(ev);
|
|
4126
|
+
}), addDisposableListener(this.element, 'mouseleave', (ev) => {
|
|
4127
|
+
this.api._onMouseLeave.fire(ev);
|
|
4128
|
+
}));
|
|
4129
|
+
this.addDisposables(this._onDidChangeExpansionState, this.onDidChangeExpansionState((isPanelExpanded) => {
|
|
4130
|
+
this.api._onDidExpansionChange.fire({
|
|
4131
|
+
isExpanded: isPanelExpanded,
|
|
4132
|
+
});
|
|
4133
|
+
}), this.api.onDidFocusChange((e) => {
|
|
4134
|
+
if (!this.header) {
|
|
4135
|
+
return;
|
|
4136
|
+
}
|
|
4137
|
+
if (e.isFocused) {
|
|
4138
|
+
addClasses(this.header, 'focused');
|
|
4139
|
+
}
|
|
4140
|
+
else {
|
|
4141
|
+
removeClasses(this.header, 'focused');
|
|
4142
|
+
}
|
|
4143
|
+
}));
|
|
4144
|
+
this.renderOnce();
|
|
4145
|
+
}
|
|
4146
|
+
setVisible(isVisible) {
|
|
4147
|
+
this.api._onDidVisibilityChange.fire({ isVisible });
|
|
4148
|
+
}
|
|
4149
|
+
setActive(isActive) {
|
|
4150
|
+
this.api._onDidActiveChange.fire({ isActive });
|
|
4151
|
+
}
|
|
4152
|
+
isExpanded() {
|
|
4153
|
+
return this._isExpanded;
|
|
4154
|
+
}
|
|
4155
|
+
setExpanded(expanded) {
|
|
4156
|
+
if (this._isExpanded === expanded) {
|
|
3915
4157
|
return;
|
|
3916
4158
|
}
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
this.
|
|
4159
|
+
this._isExpanded = expanded;
|
|
4160
|
+
if (expanded) {
|
|
4161
|
+
if (this.animationTimer) {
|
|
4162
|
+
clearTimeout(this.animationTimer);
|
|
4163
|
+
}
|
|
4164
|
+
if (this.body) {
|
|
4165
|
+
this.element.appendChild(this.body);
|
|
4166
|
+
}
|
|
3920
4167
|
}
|
|
3921
|
-
|
|
3922
|
-
this.
|
|
3923
|
-
|
|
4168
|
+
else {
|
|
4169
|
+
this.animationTimer = setTimeout(() => {
|
|
4170
|
+
var _a;
|
|
4171
|
+
(_a = this.body) === null || _a === void 0 ? void 0 : _a.remove();
|
|
4172
|
+
}, 200);
|
|
3924
4173
|
}
|
|
4174
|
+
this._onDidChange.fire(expanded ? { size: this.width } : {});
|
|
4175
|
+
this._onDidChangeExpansionState.fire(expanded);
|
|
3925
4176
|
}
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
if (element) {
|
|
3935
|
-
this.leftActionsContainer.appendChild(element);
|
|
3936
|
-
this.leftActions = element;
|
|
4177
|
+
layout(size, orthogonalSize) {
|
|
4178
|
+
this._size = size;
|
|
4179
|
+
this._orthogonalSize = orthogonalSize;
|
|
4180
|
+
const [width, height] = this.orientation === exports.Orientation.HORIZONTAL
|
|
4181
|
+
? [size, orthogonalSize]
|
|
4182
|
+
: [orthogonalSize, size];
|
|
4183
|
+
if (this.isExpanded()) {
|
|
4184
|
+
this.expandedSize = width;
|
|
3937
4185
|
}
|
|
4186
|
+
super.layout(width, height);
|
|
3938
4187
|
}
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
|
|
4188
|
+
init(parameters) {
|
|
4189
|
+
var _a, _b;
|
|
4190
|
+
super.init(parameters);
|
|
4191
|
+
if (typeof parameters.minimumBodySize === 'number') {
|
|
4192
|
+
this.minimumBodySize = parameters.minimumBodySize;
|
|
3942
4193
|
}
|
|
3943
|
-
if (
|
|
3944
|
-
this.
|
|
3945
|
-
this.preActions = undefined;
|
|
4194
|
+
if (typeof parameters.maximumBodySize === 'number') {
|
|
4195
|
+
this.maximumBodySize = parameters.maximumBodySize;
|
|
3946
4196
|
}
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
4197
|
+
this.bodyPart = this.getBodyComponent();
|
|
4198
|
+
this.headerPart = this.getHeaderComponent();
|
|
4199
|
+
this.bodyPart.init(Object.assign(Object.assign({}, parameters), { api: this.api }));
|
|
4200
|
+
this.headerPart.init(Object.assign(Object.assign({}, parameters), { api: this.api }));
|
|
4201
|
+
(_a = this.body) === null || _a === void 0 ? void 0 : _a.append(this.bodyPart.element);
|
|
4202
|
+
(_b = this.header) === null || _b === void 0 ? void 0 : _b.append(this.headerPart.element);
|
|
4203
|
+
if (typeof parameters.isExpanded === 'boolean') {
|
|
4204
|
+
this.setExpanded(parameters.isExpanded);
|
|
3950
4205
|
}
|
|
3951
4206
|
}
|
|
3952
|
-
|
|
3953
|
-
|
|
4207
|
+
toJSON() {
|
|
4208
|
+
const params = this._params;
|
|
4209
|
+
return Object.assign(Object.assign({}, super.toJSON()), { headerComponent: this.headerComponent, title: params.title });
|
|
3954
4210
|
}
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
4211
|
+
renderOnce() {
|
|
4212
|
+
this.header = document.createElement('div');
|
|
4213
|
+
this.header.tabIndex = 0;
|
|
4214
|
+
this.header.className = 'pane-header';
|
|
4215
|
+
this.header.style.height = `${this.headerSize}px`;
|
|
4216
|
+
this.header.style.lineHeight = `${this.headerSize}px`;
|
|
4217
|
+
this.header.style.minHeight = `${this.headerSize}px`;
|
|
4218
|
+
this.header.style.maxHeight = `${this.headerSize}px`;
|
|
4219
|
+
this.element.appendChild(this.header);
|
|
4220
|
+
this.body = document.createElement('div');
|
|
4221
|
+
this.body.className = 'pane-body';
|
|
4222
|
+
this.element.appendChild(this.body);
|
|
3958
4223
|
}
|
|
3959
|
-
|
|
3960
|
-
|
|
4224
|
+
// TODO slightly hacky by-pass of the component to create a body and header component
|
|
4225
|
+
getComponent() {
|
|
4226
|
+
return {
|
|
4227
|
+
update: (params) => {
|
|
4228
|
+
var _a, _b;
|
|
4229
|
+
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.update({ params });
|
|
4230
|
+
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.update({ params });
|
|
4231
|
+
},
|
|
4232
|
+
dispose: () => {
|
|
4233
|
+
var _a, _b;
|
|
4234
|
+
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
4235
|
+
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
4236
|
+
},
|
|
4237
|
+
};
|
|
3961
4238
|
}
|
|
3962
|
-
|
|
3963
|
-
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
class DraggablePaneviewPanel extends PaneviewPanel {
|
|
4242
|
+
constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
|
|
4243
|
+
super(id, component, headerComponent, orientation, isExpanded, true);
|
|
3964
4244
|
this.accessor = accessor;
|
|
3965
|
-
this.
|
|
3966
|
-
this.
|
|
3967
|
-
|
|
3968
|
-
|
|
3969
|
-
this._onDrop = new Emitter();
|
|
3970
|
-
this.onDrop = this._onDrop.event;
|
|
3971
|
-
this._onTabDragStart = new Emitter();
|
|
3972
|
-
this.onTabDragStart = this._onTabDragStart.event;
|
|
3973
|
-
this._onGroupDragStart = new Emitter();
|
|
3974
|
-
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
3975
|
-
this._onWillShowOverlay = new Emitter();
|
|
3976
|
-
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
3977
|
-
this._element = document.createElement('div');
|
|
3978
|
-
this._element.className = 'tabs-and-actions-container';
|
|
3979
|
-
toggleClass(this._element, 'dv-full-width-single-tab', this.accessor.options.singleTabMode === 'fullwidth');
|
|
3980
|
-
this.rightActionsContainer = document.createElement('div');
|
|
3981
|
-
this.rightActionsContainer.className = 'right-actions-container';
|
|
3982
|
-
this.leftActionsContainer = document.createElement('div');
|
|
3983
|
-
this.leftActionsContainer.className = 'left-actions-container';
|
|
3984
|
-
this.preActionsContainer = document.createElement('div');
|
|
3985
|
-
this.preActionsContainer.className = 'pre-actions-container';
|
|
3986
|
-
this.tabContainer = document.createElement('div');
|
|
3987
|
-
this.tabContainer.className = 'tabs-container';
|
|
3988
|
-
this.voidContainer = new VoidContainer(this.accessor, this.group);
|
|
3989
|
-
this._element.appendChild(this.preActionsContainer);
|
|
3990
|
-
this._element.appendChild(this.tabContainer);
|
|
3991
|
-
this._element.appendChild(this.leftActionsContainer);
|
|
3992
|
-
this._element.appendChild(this.voidContainer.element);
|
|
3993
|
-
this._element.appendChild(this.rightActionsContainer);
|
|
3994
|
-
this.addDisposables(this.accessor.onDidAddPanel((e) => {
|
|
3995
|
-
if (e.api.group === this.group) {
|
|
3996
|
-
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
3997
|
-
}
|
|
3998
|
-
}), this.accessor.onDidRemovePanel((e) => {
|
|
3999
|
-
if (e.api.group === this.group) {
|
|
4000
|
-
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
4001
|
-
}
|
|
4002
|
-
}), this._onWillShowOverlay, this._onDrop, this._onTabDragStart, this._onGroupDragStart, this.voidContainer, this.voidContainer.onDragStart((event) => {
|
|
4003
|
-
this._onGroupDragStart.fire({
|
|
4004
|
-
nativeEvent: event,
|
|
4005
|
-
group: this.group,
|
|
4006
|
-
});
|
|
4007
|
-
}), this.voidContainer.onDrop((event) => {
|
|
4008
|
-
this._onDrop.fire({
|
|
4009
|
-
event: event.nativeEvent,
|
|
4010
|
-
index: this.tabs.length,
|
|
4011
|
-
});
|
|
4012
|
-
}), this.voidContainer.onWillShowOverlay((event) => {
|
|
4013
|
-
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4014
|
-
kind: 'header_space',
|
|
4015
|
-
panel: this.group.activePanel,
|
|
4016
|
-
api: this.accessor.api,
|
|
4017
|
-
group: this.group,
|
|
4018
|
-
getData: getPanelData,
|
|
4019
|
-
}));
|
|
4020
|
-
}), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
|
|
4021
|
-
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4022
|
-
if (isFloatingGroupsEnabled &&
|
|
4023
|
-
event.shiftKey &&
|
|
4024
|
-
this.group.api.location.type !== 'floating') {
|
|
4025
|
-
event.preventDefault();
|
|
4026
|
-
const { top, left } = this.element.getBoundingClientRect();
|
|
4027
|
-
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4028
|
-
this.accessor.addFloatingGroup(this.group, {
|
|
4029
|
-
x: left - rootLeft + 20,
|
|
4030
|
-
y: top - rootTop + 20,
|
|
4031
|
-
}, { inDragMode: true });
|
|
4032
|
-
}
|
|
4033
|
-
}), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
|
|
4034
|
-
if (event.defaultPrevented) {
|
|
4035
|
-
return;
|
|
4036
|
-
}
|
|
4037
|
-
const isLeftClick = event.button === 0;
|
|
4038
|
-
if (isLeftClick) {
|
|
4039
|
-
this.accessor.doSetGroupActive(this.group);
|
|
4040
|
-
}
|
|
4041
|
-
}));
|
|
4042
|
-
}
|
|
4043
|
-
setActive(_isGroupActive) {
|
|
4044
|
-
// noop
|
|
4045
|
-
}
|
|
4046
|
-
addTab(tab, index = this.tabs.length) {
|
|
4047
|
-
if (index < 0 || index > this.tabs.length) {
|
|
4048
|
-
throw new Error('invalid location');
|
|
4049
|
-
}
|
|
4050
|
-
this.tabContainer.insertBefore(tab.value.element, this.tabContainer.children[index]);
|
|
4051
|
-
this.tabs = [
|
|
4052
|
-
...this.tabs.slice(0, index),
|
|
4053
|
-
tab,
|
|
4054
|
-
...this.tabs.slice(index),
|
|
4055
|
-
];
|
|
4056
|
-
if (this.selectedIndex < 0) {
|
|
4057
|
-
this.selectedIndex = index;
|
|
4245
|
+
this._onDidDrop = new Emitter();
|
|
4246
|
+
this.onDidDrop = this._onDidDrop.event;
|
|
4247
|
+
if (!disableDnd) {
|
|
4248
|
+
this.initDragFeatures();
|
|
4058
4249
|
}
|
|
4059
4250
|
}
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
const tabToRemove = this.tabs.splice(index, 1)[0];
|
|
4063
|
-
const { value, disposable } = tabToRemove;
|
|
4064
|
-
disposable.dispose();
|
|
4065
|
-
value.dispose();
|
|
4066
|
-
value.element.remove();
|
|
4067
|
-
}
|
|
4068
|
-
setActivePanel(panel) {
|
|
4069
|
-
this.tabs.forEach((tab) => {
|
|
4070
|
-
const isActivePanel = panel.id === tab.value.panel.id;
|
|
4071
|
-
tab.value.setActive(isActivePanel);
|
|
4072
|
-
});
|
|
4073
|
-
}
|
|
4074
|
-
openPanel(panel, index = this.tabs.length) {
|
|
4075
|
-
var _a;
|
|
4076
|
-
if (this.tabs.find((tab) => tab.value.panel.id === panel.id)) {
|
|
4251
|
+
initDragFeatures() {
|
|
4252
|
+
if (!this.header) {
|
|
4077
4253
|
return;
|
|
4078
4254
|
}
|
|
4079
|
-
const
|
|
4080
|
-
|
|
4081
|
-
|
|
4082
|
-
|
|
4083
|
-
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
if (isFloatingGroupsEnabled &&
|
|
4091
|
-
!isFloatingWithOnePanel &&
|
|
4092
|
-
event.shiftKey) {
|
|
4093
|
-
event.preventDefault();
|
|
4094
|
-
const panel = this.accessor.getGroupPanel(tab.panel.id);
|
|
4095
|
-
const { top, left } = tab.element.getBoundingClientRect();
|
|
4096
|
-
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4097
|
-
this.accessor.addFloatingGroup(panel, {
|
|
4098
|
-
x: left - rootLeft,
|
|
4099
|
-
y: top - rootTop,
|
|
4100
|
-
}, { inDragMode: true });
|
|
4101
|
-
return;
|
|
4102
|
-
}
|
|
4103
|
-
const isLeftClick = event.button === 0;
|
|
4104
|
-
if (!isLeftClick || event.defaultPrevented) {
|
|
4105
|
-
return;
|
|
4106
|
-
}
|
|
4107
|
-
if (this.group.activePanel !== panel) {
|
|
4108
|
-
this.group.model.openPanel(panel);
|
|
4255
|
+
const id = this.id;
|
|
4256
|
+
const accessorId = this.accessor.id;
|
|
4257
|
+
this.header.draggable = true;
|
|
4258
|
+
this.handler = new (class PaneDragHandler extends DragHandler {
|
|
4259
|
+
getData() {
|
|
4260
|
+
LocalSelectionTransfer.getInstance().setData([new PaneTransfer(accessorId, id)], PaneTransfer.prototype);
|
|
4261
|
+
return {
|
|
4262
|
+
dispose: () => {
|
|
4263
|
+
LocalSelectionTransfer.getInstance().clearData(PaneTransfer.prototype);
|
|
4264
|
+
},
|
|
4265
|
+
};
|
|
4109
4266
|
}
|
|
4110
|
-
})
|
|
4111
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
|
|
4130
|
-
dispose() {
|
|
4131
|
-
super.dispose();
|
|
4132
|
-
for (const { value, disposable } of this.tabs) {
|
|
4133
|
-
disposable.dispose();
|
|
4134
|
-
value.dispose();
|
|
4135
|
-
}
|
|
4136
|
-
this.tabs = [];
|
|
4137
|
-
}
|
|
4138
|
-
}
|
|
4139
|
-
|
|
4140
|
-
class DockviewDidDropEvent extends DockviewEvent {
|
|
4141
|
-
get nativeEvent() {
|
|
4142
|
-
return this.options.nativeEvent;
|
|
4143
|
-
}
|
|
4144
|
-
get position() {
|
|
4145
|
-
return this.options.position;
|
|
4146
|
-
}
|
|
4147
|
-
get panel() {
|
|
4148
|
-
return this.options.panel;
|
|
4149
|
-
}
|
|
4150
|
-
get group() {
|
|
4151
|
-
return this.options.group;
|
|
4152
|
-
}
|
|
4153
|
-
get api() {
|
|
4154
|
-
return this.options.api;
|
|
4155
|
-
}
|
|
4156
|
-
constructor(options) {
|
|
4157
|
-
super();
|
|
4158
|
-
this.options = options;
|
|
4159
|
-
}
|
|
4160
|
-
getData() {
|
|
4161
|
-
return this.options.getData();
|
|
4162
|
-
}
|
|
4163
|
-
}
|
|
4164
|
-
class DockviewWillDropEvent extends DockviewDidDropEvent {
|
|
4165
|
-
get kind() {
|
|
4166
|
-
return this._kind;
|
|
4167
|
-
}
|
|
4168
|
-
constructor(options) {
|
|
4169
|
-
super(options);
|
|
4170
|
-
this._kind = options.kind;
|
|
4171
|
-
}
|
|
4172
|
-
}
|
|
4173
|
-
class WillShowOverlayLocationEvent {
|
|
4174
|
-
get kind() {
|
|
4175
|
-
return this.options.kind;
|
|
4176
|
-
}
|
|
4177
|
-
get nativeEvent() {
|
|
4178
|
-
return this.event.nativeEvent;
|
|
4179
|
-
}
|
|
4180
|
-
get position() {
|
|
4181
|
-
return this.event.position;
|
|
4182
|
-
}
|
|
4183
|
-
get defaultPrevented() {
|
|
4184
|
-
return this.event.defaultPrevented;
|
|
4185
|
-
}
|
|
4186
|
-
get panel() {
|
|
4187
|
-
return this.options.panel;
|
|
4188
|
-
}
|
|
4189
|
-
get api() {
|
|
4190
|
-
return this.options.api;
|
|
4191
|
-
}
|
|
4192
|
-
get group() {
|
|
4193
|
-
return this.options.group;
|
|
4194
|
-
}
|
|
4195
|
-
preventDefault() {
|
|
4196
|
-
this.event.preventDefault();
|
|
4197
|
-
}
|
|
4198
|
-
getData() {
|
|
4199
|
-
return this.options.getData();
|
|
4200
|
-
}
|
|
4201
|
-
constructor(event, options) {
|
|
4202
|
-
this.event = event;
|
|
4203
|
-
this.options = options;
|
|
4204
|
-
}
|
|
4205
|
-
}
|
|
4206
|
-
class DockviewGroupPanelModel extends CompositeDisposable {
|
|
4207
|
-
get element() {
|
|
4208
|
-
throw new Error('not supported');
|
|
4209
|
-
}
|
|
4210
|
-
get activePanel() {
|
|
4211
|
-
return this._activePanel;
|
|
4212
|
-
}
|
|
4213
|
-
get locked() {
|
|
4214
|
-
return this._locked;
|
|
4215
|
-
}
|
|
4216
|
-
set locked(value) {
|
|
4217
|
-
this._locked = value;
|
|
4218
|
-
toggleClass(this.container, 'locked-groupview', value === 'no-drop-target' || value);
|
|
4219
|
-
}
|
|
4220
|
-
get isActive() {
|
|
4221
|
-
return this._isGroupActive;
|
|
4222
|
-
}
|
|
4223
|
-
get panels() {
|
|
4224
|
-
return this._panels;
|
|
4225
|
-
}
|
|
4226
|
-
get size() {
|
|
4227
|
-
return this._panels.length;
|
|
4228
|
-
}
|
|
4229
|
-
get isEmpty() {
|
|
4230
|
-
return this._panels.length === 0;
|
|
4231
|
-
}
|
|
4232
|
-
get hasWatermark() {
|
|
4233
|
-
return !!(this.watermark && this.container.contains(this.watermark.element));
|
|
4234
|
-
}
|
|
4235
|
-
get header() {
|
|
4236
|
-
return this.tabsContainer;
|
|
4237
|
-
}
|
|
4238
|
-
get isContentFocused() {
|
|
4239
|
-
if (!document.activeElement) {
|
|
4240
|
-
return false;
|
|
4241
|
-
}
|
|
4242
|
-
return isAncestor(document.activeElement, this.contentContainer.element);
|
|
4243
|
-
}
|
|
4244
|
-
get location() {
|
|
4245
|
-
return this._location;
|
|
4246
|
-
}
|
|
4247
|
-
set location(value) {
|
|
4248
|
-
this._location = value;
|
|
4249
|
-
toggleClass(this.container, 'dv-groupview-floating', false);
|
|
4250
|
-
toggleClass(this.container, 'dv-groupview-popout', false);
|
|
4251
|
-
switch (value.type) {
|
|
4252
|
-
case 'grid':
|
|
4253
|
-
this.contentContainer.dropTarget.setTargetZones([
|
|
4254
|
-
'top',
|
|
4255
|
-
'bottom',
|
|
4256
|
-
'left',
|
|
4257
|
-
'right',
|
|
4258
|
-
'center',
|
|
4259
|
-
]);
|
|
4260
|
-
break;
|
|
4261
|
-
case 'floating':
|
|
4262
|
-
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4263
|
-
this.contentContainer.dropTarget.setTargetZones(value
|
|
4264
|
-
? ['center']
|
|
4265
|
-
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
4266
|
-
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
4267
|
-
break;
|
|
4268
|
-
case 'popout':
|
|
4269
|
-
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4270
|
-
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
4271
|
-
break;
|
|
4272
|
-
}
|
|
4273
|
-
this.groupPanel.api._onDidLocationChange.fire({
|
|
4274
|
-
location: this.location,
|
|
4275
|
-
});
|
|
4276
|
-
}
|
|
4277
|
-
constructor(container, accessor, id, options, groupPanel) {
|
|
4278
|
-
var _a;
|
|
4279
|
-
super();
|
|
4280
|
-
this.container = container;
|
|
4281
|
-
this.accessor = accessor;
|
|
4282
|
-
this.id = id;
|
|
4283
|
-
this.options = options;
|
|
4284
|
-
this.groupPanel = groupPanel;
|
|
4285
|
-
this._isGroupActive = false;
|
|
4286
|
-
this._locked = false;
|
|
4287
|
-
this._location = { type: 'grid' };
|
|
4288
|
-
this.mostRecentlyUsed = [];
|
|
4289
|
-
this._onDidChange = new Emitter();
|
|
4290
|
-
this.onDidChange = this._onDidChange.event;
|
|
4291
|
-
this._width = 0;
|
|
4292
|
-
this._height = 0;
|
|
4293
|
-
this._panels = [];
|
|
4294
|
-
this._panelDisposables = new Map();
|
|
4295
|
-
this._onMove = new Emitter();
|
|
4296
|
-
this.onMove = this._onMove.event;
|
|
4297
|
-
this._onDidDrop = new Emitter();
|
|
4298
|
-
this.onDidDrop = this._onDidDrop.event;
|
|
4299
|
-
this._onWillDrop = new Emitter();
|
|
4300
|
-
this.onWillDrop = this._onWillDrop.event;
|
|
4301
|
-
this._onWillShowOverlay = new Emitter();
|
|
4302
|
-
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
4303
|
-
this._onTabDragStart = new Emitter();
|
|
4304
|
-
this.onTabDragStart = this._onTabDragStart.event;
|
|
4305
|
-
this._onGroupDragStart = new Emitter();
|
|
4306
|
-
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
4307
|
-
this._onDidAddPanel = new Emitter();
|
|
4308
|
-
this.onDidAddPanel = this._onDidAddPanel.event;
|
|
4309
|
-
this._onDidPanelTitleChange = new Emitter();
|
|
4310
|
-
this.onDidPanelTitleChange = this._onDidPanelTitleChange.event;
|
|
4311
|
-
this._onDidPanelParametersChange = new Emitter();
|
|
4312
|
-
this.onDidPanelParametersChange = this._onDidPanelParametersChange.event;
|
|
4313
|
-
this._onDidRemovePanel = new Emitter();
|
|
4314
|
-
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
4315
|
-
this._onDidActivePanelChange = new Emitter();
|
|
4316
|
-
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
4317
|
-
this._overwriteRenderContainer = null;
|
|
4318
|
-
toggleClass(this.container, 'groupview', true);
|
|
4319
|
-
this._api = new DockviewApi(this.accessor);
|
|
4320
|
-
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
4321
|
-
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
4322
|
-
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
4323
|
-
this.header.hidden = !!options.hideHeader;
|
|
4324
|
-
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
4325
|
-
this.addDisposables(this._onTabDragStart, this._onGroupDragStart, this._onWillShowOverlay, this.tabsContainer.onTabDragStart((event) => {
|
|
4326
|
-
this._onTabDragStart.fire(event);
|
|
4327
|
-
}), this.tabsContainer.onGroupDragStart((event) => {
|
|
4328
|
-
this._onGroupDragStart.fire(event);
|
|
4329
|
-
}), this.tabsContainer.onDrop((event) => {
|
|
4330
|
-
this.handleDropEvent('header', event.event, 'center', event.index);
|
|
4331
|
-
}), this.contentContainer.onDidFocus(() => {
|
|
4332
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4333
|
-
}), this.contentContainer.onDidBlur(() => {
|
|
4334
|
-
// noop
|
|
4335
|
-
}), this.contentContainer.dropTarget.onDrop((event) => {
|
|
4336
|
-
this.handleDropEvent('content', event.nativeEvent, event.position);
|
|
4337
|
-
}), this.tabsContainer.onWillShowOverlay((event) => {
|
|
4338
|
-
this._onWillShowOverlay.fire(event);
|
|
4339
|
-
}), this.contentContainer.dropTarget.onWillShowOverlay((event) => {
|
|
4340
|
-
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4341
|
-
kind: 'content',
|
|
4342
|
-
panel: this.activePanel,
|
|
4343
|
-
api: this._api,
|
|
4344
|
-
group: this.groupPanel,
|
|
4345
|
-
getData: getPanelData,
|
|
4346
|
-
}));
|
|
4347
|
-
}), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
4348
|
-
}
|
|
4349
|
-
focusContent() {
|
|
4350
|
-
this.contentContainer.element.focus();
|
|
4351
|
-
}
|
|
4352
|
-
set renderContainer(value) {
|
|
4353
|
-
this.panels.forEach((panel) => {
|
|
4354
|
-
this.renderContainer.detatch(panel);
|
|
4355
|
-
});
|
|
4356
|
-
this._overwriteRenderContainer = value;
|
|
4357
|
-
this.panels.forEach((panel) => {
|
|
4358
|
-
this.rerender(panel);
|
|
4359
|
-
});
|
|
4360
|
-
}
|
|
4361
|
-
get renderContainer() {
|
|
4362
|
-
var _a;
|
|
4363
|
-
return ((_a = this._overwriteRenderContainer) !== null && _a !== void 0 ? _a : this.accessor.overlayRenderContainer);
|
|
4364
|
-
}
|
|
4365
|
-
initialize() {
|
|
4366
|
-
if (this.options.panels) {
|
|
4367
|
-
this.options.panels.forEach((panel) => {
|
|
4368
|
-
this.doAddPanel(panel);
|
|
4369
|
-
});
|
|
4370
|
-
}
|
|
4371
|
-
if (this.options.activePanel) {
|
|
4372
|
-
this.openPanel(this.options.activePanel);
|
|
4373
|
-
}
|
|
4374
|
-
// must be run after the constructor otherwise this.parent may not be
|
|
4375
|
-
// correctly initialized
|
|
4376
|
-
this.setActive(this.isActive, true);
|
|
4377
|
-
this.updateContainer();
|
|
4378
|
-
if (this.accessor.options.createRightHeaderActionsElement) {
|
|
4379
|
-
this._rightHeaderActions =
|
|
4380
|
-
this.accessor.options.createRightHeaderActionsElement(this.groupPanel);
|
|
4381
|
-
this.addDisposables(this._rightHeaderActions);
|
|
4382
|
-
this._rightHeaderActions.init({
|
|
4383
|
-
containerApi: this._api,
|
|
4384
|
-
api: this.groupPanel.api,
|
|
4385
|
-
});
|
|
4386
|
-
this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
|
|
4387
|
-
}
|
|
4388
|
-
if (this.accessor.options.createLeftHeaderActionsElement) {
|
|
4389
|
-
this._leftHeaderActions =
|
|
4390
|
-
this.accessor.options.createLeftHeaderActionsElement(this.groupPanel);
|
|
4391
|
-
this.addDisposables(this._leftHeaderActions);
|
|
4392
|
-
this._leftHeaderActions.init({
|
|
4393
|
-
containerApi: this._api,
|
|
4394
|
-
api: this.groupPanel.api,
|
|
4395
|
-
});
|
|
4396
|
-
this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
|
|
4397
|
-
}
|
|
4398
|
-
if (this.accessor.options.createPrefixHeaderActionsElement) {
|
|
4399
|
-
this._prefixHeaderActions =
|
|
4400
|
-
this.accessor.options.createPrefixHeaderActionsElement(this.groupPanel);
|
|
4401
|
-
this.addDisposables(this._prefixHeaderActions);
|
|
4402
|
-
this._prefixHeaderActions.init({
|
|
4403
|
-
containerApi: this._api,
|
|
4404
|
-
api: this.groupPanel.api,
|
|
4405
|
-
});
|
|
4406
|
-
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
4407
|
-
}
|
|
4408
|
-
}
|
|
4409
|
-
rerender(panel) {
|
|
4410
|
-
this.contentContainer.renderPanel(panel, { asActive: false });
|
|
4411
|
-
}
|
|
4412
|
-
indexOf(panel) {
|
|
4413
|
-
return this.tabsContainer.indexOf(panel.id);
|
|
4414
|
-
}
|
|
4415
|
-
toJSON() {
|
|
4416
|
-
var _a;
|
|
4417
|
-
const result = {
|
|
4418
|
-
views: this.tabsContainer.panels,
|
|
4419
|
-
activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
|
|
4420
|
-
id: this.id,
|
|
4421
|
-
};
|
|
4422
|
-
if (this.locked !== false) {
|
|
4423
|
-
result.locked = this.locked;
|
|
4424
|
-
}
|
|
4425
|
-
if (this.header.hidden) {
|
|
4426
|
-
result.hideHeader = true;
|
|
4427
|
-
}
|
|
4428
|
-
return result;
|
|
4429
|
-
}
|
|
4430
|
-
moveToNext(options) {
|
|
4431
|
-
if (!options) {
|
|
4432
|
-
options = {};
|
|
4433
|
-
}
|
|
4434
|
-
if (!options.panel) {
|
|
4435
|
-
options.panel = this.activePanel;
|
|
4436
|
-
}
|
|
4437
|
-
const index = options.panel ? this.panels.indexOf(options.panel) : -1;
|
|
4438
|
-
let normalizedIndex;
|
|
4439
|
-
if (index < this.panels.length - 1) {
|
|
4440
|
-
normalizedIndex = index + 1;
|
|
4441
|
-
}
|
|
4442
|
-
else if (!options.suppressRoll) {
|
|
4443
|
-
normalizedIndex = 0;
|
|
4444
|
-
}
|
|
4445
|
-
else {
|
|
4446
|
-
return;
|
|
4447
|
-
}
|
|
4448
|
-
this.openPanel(this.panels[normalizedIndex]);
|
|
4449
|
-
}
|
|
4450
|
-
moveToPrevious(options) {
|
|
4451
|
-
if (!options) {
|
|
4452
|
-
options = {};
|
|
4453
|
-
}
|
|
4454
|
-
if (!options.panel) {
|
|
4455
|
-
options.panel = this.activePanel;
|
|
4456
|
-
}
|
|
4457
|
-
if (!options.panel) {
|
|
4458
|
-
return;
|
|
4459
|
-
}
|
|
4460
|
-
const index = this.panels.indexOf(options.panel);
|
|
4461
|
-
let normalizedIndex;
|
|
4462
|
-
if (index > 0) {
|
|
4463
|
-
normalizedIndex = index - 1;
|
|
4464
|
-
}
|
|
4465
|
-
else if (!options.suppressRoll) {
|
|
4466
|
-
normalizedIndex = this.panels.length - 1;
|
|
4467
|
-
}
|
|
4468
|
-
else {
|
|
4469
|
-
return;
|
|
4470
|
-
}
|
|
4471
|
-
this.openPanel(this.panels[normalizedIndex]);
|
|
4472
|
-
}
|
|
4473
|
-
containsPanel(panel) {
|
|
4474
|
-
return this.panels.includes(panel);
|
|
4475
|
-
}
|
|
4476
|
-
init(_params) {
|
|
4477
|
-
//noop
|
|
4478
|
-
}
|
|
4479
|
-
update(_params) {
|
|
4480
|
-
//noop
|
|
4481
|
-
}
|
|
4482
|
-
focus() {
|
|
4483
|
-
var _a;
|
|
4484
|
-
(_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
|
|
4485
|
-
}
|
|
4486
|
-
openPanel(panel, options = {}) {
|
|
4487
|
-
/**
|
|
4488
|
-
* set the panel group
|
|
4489
|
-
* add the panel
|
|
4490
|
-
* check if group active
|
|
4491
|
-
* check if panel active
|
|
4492
|
-
*/
|
|
4493
|
-
if (typeof options.index !== 'number' ||
|
|
4494
|
-
options.index > this.panels.length) {
|
|
4495
|
-
options.index = this.panels.length;
|
|
4496
|
-
}
|
|
4497
|
-
const skipSetActive = !!options.skipSetActive;
|
|
4498
|
-
// ensure the group is updated before we fire any events
|
|
4499
|
-
panel.updateParentGroup(this.groupPanel, {
|
|
4500
|
-
skipSetActive: options.skipSetActive,
|
|
4501
|
-
});
|
|
4502
|
-
this.doAddPanel(panel, options.index, {
|
|
4503
|
-
skipSetActive: skipSetActive,
|
|
4504
|
-
});
|
|
4505
|
-
if (this._activePanel === panel) {
|
|
4506
|
-
this.contentContainer.renderPanel(panel, { asActive: true });
|
|
4507
|
-
return;
|
|
4508
|
-
}
|
|
4509
|
-
if (!skipSetActive) {
|
|
4510
|
-
this.doSetActivePanel(panel);
|
|
4511
|
-
}
|
|
4512
|
-
if (!options.skipSetGroupActive) {
|
|
4513
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4514
|
-
}
|
|
4515
|
-
if (!options.skipSetActive) {
|
|
4516
|
-
this.updateContainer();
|
|
4517
|
-
}
|
|
4518
|
-
}
|
|
4519
|
-
removePanel(groupItemOrId, options = {
|
|
4520
|
-
skipSetActive: false,
|
|
4521
|
-
}) {
|
|
4522
|
-
const id = typeof groupItemOrId === 'string'
|
|
4523
|
-
? groupItemOrId
|
|
4524
|
-
: groupItemOrId.id;
|
|
4525
|
-
const panelToRemove = this._panels.find((panel) => panel.id === id);
|
|
4526
|
-
if (!panelToRemove) {
|
|
4527
|
-
throw new Error('invalid operation');
|
|
4528
|
-
}
|
|
4529
|
-
return this._removePanel(panelToRemove, options);
|
|
4530
|
-
}
|
|
4531
|
-
closeAllPanels() {
|
|
4532
|
-
if (this.panels.length > 0) {
|
|
4533
|
-
// take a copy since we will be edting the array as we iterate through
|
|
4534
|
-
const arrPanelCpy = [...this.panels];
|
|
4535
|
-
for (const panel of arrPanelCpy) {
|
|
4536
|
-
this.doClose(panel);
|
|
4537
|
-
}
|
|
4538
|
-
}
|
|
4539
|
-
else {
|
|
4540
|
-
this.accessor.removeGroup(this.groupPanel);
|
|
4541
|
-
}
|
|
4542
|
-
}
|
|
4543
|
-
closePanel(panel) {
|
|
4544
|
-
this.doClose(panel);
|
|
4545
|
-
}
|
|
4546
|
-
doClose(panel) {
|
|
4547
|
-
this.accessor.removePanel(panel);
|
|
4548
|
-
}
|
|
4549
|
-
isPanelActive(panel) {
|
|
4550
|
-
return this._activePanel === panel;
|
|
4551
|
-
}
|
|
4552
|
-
updateActions(element) {
|
|
4553
|
-
this.tabsContainer.setRightActionsElement(element);
|
|
4554
|
-
}
|
|
4555
|
-
setActive(isGroupActive, force = false) {
|
|
4556
|
-
if (!force && this.isActive === isGroupActive) {
|
|
4557
|
-
return;
|
|
4558
|
-
}
|
|
4559
|
-
this._isGroupActive = isGroupActive;
|
|
4560
|
-
toggleClass(this.container, 'active-group', isGroupActive);
|
|
4561
|
-
toggleClass(this.container, 'inactive-group', !isGroupActive);
|
|
4562
|
-
this.tabsContainer.setActive(this.isActive);
|
|
4563
|
-
if (!this._activePanel && this.panels.length > 0) {
|
|
4564
|
-
this.doSetActivePanel(this.panels[0]);
|
|
4565
|
-
}
|
|
4566
|
-
this.updateContainer();
|
|
4567
|
-
}
|
|
4568
|
-
layout(width, height) {
|
|
4569
|
-
var _a;
|
|
4570
|
-
this._width = width;
|
|
4571
|
-
this._height = height;
|
|
4572
|
-
this.contentContainer.layout(this._width, this._height);
|
|
4573
|
-
if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
|
|
4574
|
-
this._activePanel.layout(this._width, this._height);
|
|
4575
|
-
}
|
|
4576
|
-
}
|
|
4577
|
-
_removePanel(panel, options) {
|
|
4578
|
-
const isActivePanel = this._activePanel === panel;
|
|
4579
|
-
this.doRemovePanel(panel);
|
|
4580
|
-
if (isActivePanel && this.panels.length > 0) {
|
|
4581
|
-
const nextPanel = this.mostRecentlyUsed[0];
|
|
4582
|
-
this.openPanel(nextPanel, {
|
|
4583
|
-
skipSetActive: options.skipSetActive,
|
|
4584
|
-
skipSetGroupActive: options.skipSetActiveGroup,
|
|
4585
|
-
});
|
|
4586
|
-
}
|
|
4587
|
-
if (this._activePanel && this.panels.length === 0) {
|
|
4588
|
-
this.doSetActivePanel(undefined);
|
|
4589
|
-
}
|
|
4590
|
-
if (!options.skipSetActive) {
|
|
4591
|
-
this.updateContainer();
|
|
4592
|
-
}
|
|
4593
|
-
return panel;
|
|
4594
|
-
}
|
|
4595
|
-
doRemovePanel(panel) {
|
|
4596
|
-
const index = this.panels.indexOf(panel);
|
|
4597
|
-
if (this._activePanel === panel) {
|
|
4598
|
-
this.contentContainer.closePanel();
|
|
4599
|
-
}
|
|
4600
|
-
this.tabsContainer.delete(panel.id);
|
|
4601
|
-
this._panels.splice(index, 1);
|
|
4602
|
-
if (this.mostRecentlyUsed.includes(panel)) {
|
|
4603
|
-
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
4604
|
-
}
|
|
4605
|
-
const disposable = this._panelDisposables.get(panel.id);
|
|
4606
|
-
if (disposable) {
|
|
4607
|
-
disposable.dispose();
|
|
4608
|
-
this._panelDisposables.delete(panel.id);
|
|
4609
|
-
}
|
|
4610
|
-
this._onDidRemovePanel.fire({ panel });
|
|
4611
|
-
}
|
|
4612
|
-
doAddPanel(panel, index = this.panels.length, options = { skipSetActive: false }) {
|
|
4613
|
-
const existingPanel = this._panels.indexOf(panel);
|
|
4614
|
-
const hasExistingPanel = existingPanel > -1;
|
|
4615
|
-
this.tabsContainer.show();
|
|
4616
|
-
this.contentContainer.show();
|
|
4617
|
-
this.tabsContainer.openPanel(panel, index);
|
|
4618
|
-
if (!options.skipSetActive) {
|
|
4619
|
-
this.contentContainer.openPanel(panel);
|
|
4620
|
-
}
|
|
4621
|
-
if (hasExistingPanel) {
|
|
4622
|
-
// TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
|
|
4623
|
-
return;
|
|
4624
|
-
}
|
|
4625
|
-
this.updateMru(panel);
|
|
4626
|
-
this.panels.splice(index, 0, panel);
|
|
4627
|
-
this._panelDisposables.set(panel.id, new CompositeDisposable(panel.api.onDidTitleChange((event) => this._onDidPanelTitleChange.fire(event)), panel.api.onDidParametersChange((event) => this._onDidPanelParametersChange.fire(event))));
|
|
4628
|
-
this._onDidAddPanel.fire({ panel });
|
|
4629
|
-
}
|
|
4630
|
-
doSetActivePanel(panel) {
|
|
4631
|
-
if (this._activePanel === panel) {
|
|
4632
|
-
return;
|
|
4633
|
-
}
|
|
4634
|
-
this._activePanel = panel;
|
|
4635
|
-
if (panel) {
|
|
4636
|
-
this.tabsContainer.setActivePanel(panel);
|
|
4637
|
-
panel.layout(this._width, this._height);
|
|
4638
|
-
this.updateMru(panel);
|
|
4639
|
-
this._onDidActivePanelChange.fire({
|
|
4640
|
-
panel,
|
|
4641
|
-
});
|
|
4642
|
-
}
|
|
4643
|
-
}
|
|
4644
|
-
updateMru(panel) {
|
|
4645
|
-
if (this.mostRecentlyUsed.includes(panel)) {
|
|
4646
|
-
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
4647
|
-
}
|
|
4648
|
-
this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
|
|
4649
|
-
}
|
|
4650
|
-
updateContainer() {
|
|
4651
|
-
var _a, _b;
|
|
4652
|
-
toggleClass(this.container, 'empty', this.isEmpty);
|
|
4653
|
-
this.panels.forEach((panel) => panel.runEvents());
|
|
4654
|
-
if (this.isEmpty && !this.watermark) {
|
|
4655
|
-
const watermark = this.accessor.createWatermarkComponent();
|
|
4656
|
-
watermark.init({
|
|
4657
|
-
containerApi: this._api,
|
|
4658
|
-
group: this.groupPanel,
|
|
4659
|
-
});
|
|
4660
|
-
this.watermark = watermark;
|
|
4661
|
-
addDisposableListener(this.watermark.element, 'click', () => {
|
|
4662
|
-
if (!this.isActive) {
|
|
4663
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4267
|
+
})(this.header);
|
|
4268
|
+
this.target = new Droptarget(this.element, {
|
|
4269
|
+
acceptedTargetZones: ['top', 'bottom'],
|
|
4270
|
+
overlayModel: {
|
|
4271
|
+
activationSize: { type: 'percentage', value: 50 },
|
|
4272
|
+
},
|
|
4273
|
+
canDisplayOverlay: (event) => {
|
|
4274
|
+
const data = getPaneData();
|
|
4275
|
+
if (data) {
|
|
4276
|
+
if (data.paneId !== this.id &&
|
|
4277
|
+
data.viewId === this.accessor.id) {
|
|
4278
|
+
return true;
|
|
4279
|
+
}
|
|
4280
|
+
}
|
|
4281
|
+
if (this.accessor.options.showDndOverlay) {
|
|
4282
|
+
return this.accessor.options.showDndOverlay({
|
|
4283
|
+
nativeEvent: event,
|
|
4284
|
+
getData: getPaneData,
|
|
4285
|
+
panel: this,
|
|
4286
|
+
});
|
|
4664
4287
|
}
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
this.watermark.element.remove();
|
|
4672
|
-
(_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
4673
|
-
this.watermark = undefined;
|
|
4674
|
-
this.tabsContainer.show();
|
|
4675
|
-
}
|
|
4676
|
-
}
|
|
4677
|
-
canDisplayOverlay(event, position, target) {
|
|
4678
|
-
// custom overlay handler
|
|
4679
|
-
if (this.accessor.options.showDndOverlay) {
|
|
4680
|
-
return this.accessor.options.showDndOverlay({
|
|
4681
|
-
nativeEvent: event,
|
|
4682
|
-
target,
|
|
4683
|
-
group: this.accessor.getPanel(this.id),
|
|
4684
|
-
position,
|
|
4685
|
-
getData: getPanelData,
|
|
4686
|
-
});
|
|
4687
|
-
}
|
|
4688
|
-
return false;
|
|
4288
|
+
return false;
|
|
4289
|
+
},
|
|
4290
|
+
});
|
|
4291
|
+
this.addDisposables(this._onDidDrop, this.handler, this.target, this.target.onDrop((event) => {
|
|
4292
|
+
this.onDrop(event);
|
|
4293
|
+
}));
|
|
4689
4294
|
}
|
|
4690
|
-
|
|
4691
|
-
|
|
4295
|
+
onDrop(event) {
|
|
4296
|
+
const data = getPaneData();
|
|
4297
|
+
if (!data || data.viewId !== this.accessor.id) {
|
|
4298
|
+
// if there is no local drag event for this panel
|
|
4299
|
+
// or if the drag event was creating by another Paneview instance
|
|
4300
|
+
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, api: new PaneviewApi(this.accessor), getData: getPaneData }));
|
|
4692
4301
|
return;
|
|
4693
4302
|
}
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
}
|
|
4701
|
-
}
|
|
4702
|
-
const panel = typeof index === 'number' ? this.panels[index] : undefined;
|
|
4703
|
-
const willDropEvent = new DockviewWillDropEvent({
|
|
4704
|
-
nativeEvent: event,
|
|
4705
|
-
position,
|
|
4706
|
-
panel,
|
|
4707
|
-
getData: () => getPanelData(),
|
|
4708
|
-
kind: getKind(),
|
|
4709
|
-
group: this.groupPanel,
|
|
4710
|
-
api: this._api,
|
|
4711
|
-
});
|
|
4712
|
-
this._onWillDrop.fire(willDropEvent);
|
|
4713
|
-
if (willDropEvent.defaultPrevented) {
|
|
4303
|
+
const containerApi = this._params
|
|
4304
|
+
.containerApi;
|
|
4305
|
+
const panelId = data.paneId;
|
|
4306
|
+
const existingPanel = containerApi.getPanel(panelId);
|
|
4307
|
+
if (!existingPanel) {
|
|
4308
|
+
// if the panel doesn't exist
|
|
4309
|
+
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: getPaneData, api: new PaneviewApi(this.accessor) }));
|
|
4714
4310
|
return;
|
|
4715
4311
|
}
|
|
4716
|
-
const
|
|
4717
|
-
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
this._onMove.fire({
|
|
4722
|
-
target: position,
|
|
4723
|
-
groupId: groupId,
|
|
4724
|
-
index,
|
|
4725
|
-
});
|
|
4726
|
-
return;
|
|
4727
|
-
}
|
|
4728
|
-
const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
|
|
4729
|
-
if (fromSameGroup && this.tabsContainer.size === 1) {
|
|
4730
|
-
return;
|
|
4731
|
-
}
|
|
4732
|
-
const { groupId, panelId } = data;
|
|
4733
|
-
const isSameGroup = this.id === groupId;
|
|
4734
|
-
if (isSameGroup && !position) {
|
|
4735
|
-
const oldIndex = this.tabsContainer.indexOf(panelId);
|
|
4736
|
-
if (oldIndex === index) {
|
|
4737
|
-
return;
|
|
4738
|
-
}
|
|
4739
|
-
}
|
|
4740
|
-
this._onMove.fire({
|
|
4741
|
-
target: position,
|
|
4742
|
-
groupId: data.groupId,
|
|
4743
|
-
itemId: data.panelId,
|
|
4744
|
-
index,
|
|
4745
|
-
});
|
|
4746
|
-
}
|
|
4747
|
-
else {
|
|
4748
|
-
this._onDidDrop.fire(new DockviewDidDropEvent({
|
|
4749
|
-
nativeEvent: event,
|
|
4750
|
-
position,
|
|
4751
|
-
panel,
|
|
4752
|
-
getData: () => getPanelData(),
|
|
4753
|
-
group: this.groupPanel,
|
|
4754
|
-
api: this._api,
|
|
4755
|
-
}));
|
|
4312
|
+
const allPanels = containerApi.panels;
|
|
4313
|
+
const fromIndex = allPanels.indexOf(existingPanel);
|
|
4314
|
+
let toIndex = containerApi.panels.indexOf(this);
|
|
4315
|
+
if (event.position === 'left' || event.position === 'top') {
|
|
4316
|
+
toIndex = Math.max(0, toIndex - 1);
|
|
4756
4317
|
}
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
(_c = (_b = this.watermark) === null || _b === void 0 ? void 0 : _b.dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
4763
|
-
this.watermark = undefined;
|
|
4764
|
-
for (const panel of this.panels) {
|
|
4765
|
-
panel.dispose();
|
|
4318
|
+
if (event.position === 'right' || event.position === 'bottom') {
|
|
4319
|
+
if (fromIndex > toIndex) {
|
|
4320
|
+
toIndex++;
|
|
4321
|
+
}
|
|
4322
|
+
toIndex = Math.min(allPanels.length - 1, toIndex);
|
|
4766
4323
|
}
|
|
4767
|
-
|
|
4768
|
-
this.contentContainer.dispose();
|
|
4324
|
+
containerApi.movePanel(fromIndex, toIndex);
|
|
4769
4325
|
}
|
|
4770
4326
|
}
|
|
4771
4327
|
|
|
4772
|
-
class
|
|
4328
|
+
class ContentContainer extends CompositeDisposable {
|
|
4773
4329
|
get element() {
|
|
4774
4330
|
return this._element;
|
|
4775
4331
|
}
|
|
4776
|
-
|
|
4777
|
-
|
|
4332
|
+
constructor(accessor, group) {
|
|
4333
|
+
super();
|
|
4334
|
+
this.accessor = accessor;
|
|
4335
|
+
this.group = group;
|
|
4336
|
+
this.disposable = new MutableDisposable();
|
|
4337
|
+
this._onDidFocus = new Emitter();
|
|
4338
|
+
this.onDidFocus = this._onDidFocus.event;
|
|
4339
|
+
this._onDidBlur = new Emitter();
|
|
4340
|
+
this.onDidBlur = this._onDidBlur.event;
|
|
4341
|
+
this._element = document.createElement('div');
|
|
4342
|
+
this._element.className = 'content-container';
|
|
4343
|
+
this._element.tabIndex = -1;
|
|
4344
|
+
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
4345
|
+
this.dropTarget = new Droptarget(this.element, {
|
|
4346
|
+
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
4347
|
+
canDisplayOverlay: (event, position) => {
|
|
4348
|
+
if (this.group.locked === 'no-drop-target' ||
|
|
4349
|
+
(this.group.locked && position === 'center')) {
|
|
4350
|
+
return false;
|
|
4351
|
+
}
|
|
4352
|
+
const data = getPanelData();
|
|
4353
|
+
if (!data &&
|
|
4354
|
+
event.shiftKey &&
|
|
4355
|
+
this.group.location.type !== 'floating') {
|
|
4356
|
+
return false;
|
|
4357
|
+
}
|
|
4358
|
+
if (data && data.viewId === this.accessor.id) {
|
|
4359
|
+
if (data.groupId === this.group.id) {
|
|
4360
|
+
if (position === 'center') {
|
|
4361
|
+
// don't allow to drop on self for center position
|
|
4362
|
+
return false;
|
|
4363
|
+
}
|
|
4364
|
+
if (data.panelId === null) {
|
|
4365
|
+
// don't allow group move to drop anywhere on self
|
|
4366
|
+
return false;
|
|
4367
|
+
}
|
|
4368
|
+
}
|
|
4369
|
+
const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
|
|
4370
|
+
data.groupId === this.group.id;
|
|
4371
|
+
return !groupHasOnePanelAndIsActiveDragElement;
|
|
4372
|
+
}
|
|
4373
|
+
return this.group.canDisplayOverlay(event, position, 'content');
|
|
4374
|
+
},
|
|
4375
|
+
});
|
|
4376
|
+
this.addDisposables(this.dropTarget);
|
|
4778
4377
|
}
|
|
4779
|
-
|
|
4780
|
-
this.
|
|
4378
|
+
show() {
|
|
4379
|
+
this.element.style.display = '';
|
|
4781
4380
|
}
|
|
4782
|
-
|
|
4783
|
-
|
|
4784
|
-
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4808
|
-
|
|
4809
|
-
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
|
|
4819
|
-
|
|
4820
|
-
|
|
4821
|
-
this.
|
|
4822
|
-
}
|
|
4381
|
+
hide() {
|
|
4382
|
+
this.element.style.display = 'none';
|
|
4383
|
+
}
|
|
4384
|
+
renderPanel(panel, options = { asActive: true }) {
|
|
4385
|
+
const doRender = options.asActive ||
|
|
4386
|
+
(this.panel && this.group.isPanelActive(this.panel));
|
|
4387
|
+
if (this.panel &&
|
|
4388
|
+
this.panel.view.content.element.parentElement === this._element) {
|
|
4389
|
+
/**
|
|
4390
|
+
* If the currently attached panel is mounted directly to the content then remove it
|
|
4391
|
+
*/
|
|
4392
|
+
this._element.removeChild(this.panel.view.content.element);
|
|
4393
|
+
}
|
|
4394
|
+
this.panel = panel;
|
|
4395
|
+
let container;
|
|
4396
|
+
switch (panel.api.renderer) {
|
|
4397
|
+
case 'onlyWhenVisible':
|
|
4398
|
+
this.group.renderContainer.detatch(panel);
|
|
4399
|
+
if (this.panel) {
|
|
4400
|
+
if (doRender) {
|
|
4401
|
+
this._element.appendChild(this.panel.view.content.element);
|
|
4402
|
+
}
|
|
4403
|
+
}
|
|
4404
|
+
container = this._element;
|
|
4405
|
+
break;
|
|
4406
|
+
case 'always':
|
|
4407
|
+
if (panel.view.content.element.parentElement === this._element) {
|
|
4408
|
+
this._element.removeChild(panel.view.content.element);
|
|
4409
|
+
}
|
|
4410
|
+
container = this.group.renderContainer.attach({
|
|
4411
|
+
panel,
|
|
4412
|
+
referenceContainer: this,
|
|
4413
|
+
});
|
|
4414
|
+
break;
|
|
4415
|
+
}
|
|
4416
|
+
if (doRender) {
|
|
4417
|
+
const focusTracker = trackFocus(container);
|
|
4418
|
+
const disposable = new CompositeDisposable();
|
|
4419
|
+
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
4420
|
+
this.disposable.value = disposable;
|
|
4421
|
+
}
|
|
4823
4422
|
}
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
case 'left':
|
|
4830
|
-
return 'left';
|
|
4831
|
-
case 'right':
|
|
4832
|
-
return 'right';
|
|
4833
|
-
case 'above':
|
|
4834
|
-
return 'top';
|
|
4835
|
-
case 'below':
|
|
4836
|
-
return 'bottom';
|
|
4837
|
-
case 'within':
|
|
4838
|
-
default:
|
|
4839
|
-
return 'center';
|
|
4423
|
+
openPanel(panel) {
|
|
4424
|
+
if (this.panel === panel) {
|
|
4425
|
+
return;
|
|
4426
|
+
}
|
|
4427
|
+
this.renderPanel(panel);
|
|
4840
4428
|
}
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
get id() {
|
|
4844
|
-
return this._id;
|
|
4429
|
+
layout(_width, _height) {
|
|
4430
|
+
// noop
|
|
4845
4431
|
}
|
|
4846
|
-
|
|
4847
|
-
|
|
4432
|
+
closePanel() {
|
|
4433
|
+
var _a;
|
|
4434
|
+
if (this.panel) {
|
|
4435
|
+
if (this.panel.api.renderer === 'onlyWhenVisible') {
|
|
4436
|
+
(_a = this.panel.view.content.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.panel.view.content.element);
|
|
4437
|
+
}
|
|
4438
|
+
}
|
|
4439
|
+
this.panel = undefined;
|
|
4848
4440
|
}
|
|
4849
|
-
|
|
4850
|
-
|
|
4441
|
+
dispose() {
|
|
4442
|
+
this.disposable.dispose();
|
|
4443
|
+
super.dispose();
|
|
4851
4444
|
}
|
|
4852
|
-
|
|
4853
|
-
|
|
4445
|
+
}
|
|
4446
|
+
|
|
4447
|
+
class TabDragHandler extends DragHandler {
|
|
4448
|
+
constructor(element, accessor, group, panel) {
|
|
4449
|
+
super(element);
|
|
4450
|
+
this.accessor = accessor;
|
|
4451
|
+
this.group = group;
|
|
4452
|
+
this.panel = panel;
|
|
4453
|
+
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
4854
4454
|
}
|
|
4855
|
-
|
|
4856
|
-
|
|
4455
|
+
getData(event) {
|
|
4456
|
+
this.panelTransfer.setData([new PanelTransfer(this.accessor.id, this.group.id, this.panel.id)], PanelTransfer.prototype);
|
|
4457
|
+
return {
|
|
4458
|
+
dispose: () => {
|
|
4459
|
+
this.panelTransfer.clearData(PanelTransfer.prototype);
|
|
4460
|
+
},
|
|
4461
|
+
};
|
|
4857
4462
|
}
|
|
4858
|
-
|
|
4859
|
-
|
|
4463
|
+
}
|
|
4464
|
+
class Tab extends CompositeDisposable {
|
|
4465
|
+
get element() {
|
|
4466
|
+
return this._element;
|
|
4860
4467
|
}
|
|
4861
|
-
|
|
4862
|
-
|
|
4468
|
+
constructor(panel, accessor, group) {
|
|
4469
|
+
super();
|
|
4470
|
+
this.panel = panel;
|
|
4471
|
+
this.accessor = accessor;
|
|
4472
|
+
this.group = group;
|
|
4473
|
+
this.content = undefined;
|
|
4474
|
+
this._onChanged = new Emitter();
|
|
4475
|
+
this.onChanged = this._onChanged.event;
|
|
4476
|
+
this._onDropped = new Emitter();
|
|
4477
|
+
this.onDrop = this._onDropped.event;
|
|
4478
|
+
this._onDragStart = new Emitter();
|
|
4479
|
+
this.onDragStart = this._onDragStart.event;
|
|
4480
|
+
this._element = document.createElement('div');
|
|
4481
|
+
this._element.className = 'tab';
|
|
4482
|
+
this._element.tabIndex = 0;
|
|
4483
|
+
this._element.draggable = true;
|
|
4484
|
+
toggleClass(this.element, 'inactive-tab', true);
|
|
4485
|
+
const dragHandler = new TabDragHandler(this._element, this.accessor, this.group, this.panel);
|
|
4486
|
+
this.dropTarget = new Droptarget(this._element, {
|
|
4487
|
+
acceptedTargetZones: ['center'],
|
|
4488
|
+
canDisplayOverlay: (event, position) => {
|
|
4489
|
+
if (this.group.locked) {
|
|
4490
|
+
return false;
|
|
4491
|
+
}
|
|
4492
|
+
const data = getPanelData();
|
|
4493
|
+
if (data && this.accessor.id === data.viewId) {
|
|
4494
|
+
if (data.panelId === null &&
|
|
4495
|
+
data.groupId === this.group.id) {
|
|
4496
|
+
// don't allow group move to drop on self
|
|
4497
|
+
return false;
|
|
4498
|
+
}
|
|
4499
|
+
return this.panel.id !== data.panelId;
|
|
4500
|
+
}
|
|
4501
|
+
return this.group.model.canDisplayOverlay(event, position, 'tab');
|
|
4502
|
+
},
|
|
4503
|
+
});
|
|
4504
|
+
this.onWillShowOverlay = this.dropTarget.onWillShowOverlay;
|
|
4505
|
+
this.addDisposables(this._onChanged, this._onDropped, this._onDragStart, dragHandler.onDragStart((event) => {
|
|
4506
|
+
this._onDragStart.fire(event);
|
|
4507
|
+
}), dragHandler, addDisposableListener(this._element, 'mousedown', (event) => {
|
|
4508
|
+
if (event.defaultPrevented) {
|
|
4509
|
+
return;
|
|
4510
|
+
}
|
|
4511
|
+
this._onChanged.fire(event);
|
|
4512
|
+
}), this.dropTarget.onDrop((event) => {
|
|
4513
|
+
this._onDropped.fire(event);
|
|
4514
|
+
}), this.dropTarget);
|
|
4863
4515
|
}
|
|
4864
|
-
|
|
4865
|
-
|
|
4516
|
+
setActive(isActive) {
|
|
4517
|
+
toggleClass(this.element, 'active-tab', isActive);
|
|
4518
|
+
toggleClass(this.element, 'inactive-tab', !isActive);
|
|
4866
4519
|
}
|
|
4867
|
-
|
|
4868
|
-
|
|
4520
|
+
setContent(part) {
|
|
4521
|
+
if (this.content) {
|
|
4522
|
+
this._element.removeChild(this.content.element);
|
|
4523
|
+
}
|
|
4524
|
+
this.content = part;
|
|
4525
|
+
this._element.appendChild(this.content.element);
|
|
4869
4526
|
}
|
|
4870
|
-
|
|
4871
|
-
|
|
4527
|
+
dispose() {
|
|
4528
|
+
super.dispose();
|
|
4872
4529
|
}
|
|
4873
|
-
|
|
4874
|
-
|
|
4530
|
+
}
|
|
4531
|
+
|
|
4532
|
+
function addGhostImage(dataTransfer, ghostElement) {
|
|
4533
|
+
// class dockview provides to force ghost image to be drawn on a different layer and prevent weird rendering issues
|
|
4534
|
+
addClasses(ghostElement, 'dv-dragged');
|
|
4535
|
+
document.body.appendChild(ghostElement);
|
|
4536
|
+
dataTransfer.setDragImage(ghostElement, 0, 0);
|
|
4537
|
+
setTimeout(() => {
|
|
4538
|
+
removeClasses(ghostElement, 'dv-dragged');
|
|
4539
|
+
ghostElement.remove();
|
|
4540
|
+
}, 0);
|
|
4541
|
+
}
|
|
4542
|
+
|
|
4543
|
+
class GroupDragHandler extends DragHandler {
|
|
4544
|
+
constructor(element, accessor, group) {
|
|
4545
|
+
super(element);
|
|
4546
|
+
this.accessor = accessor;
|
|
4547
|
+
this.group = group;
|
|
4548
|
+
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
4549
|
+
this.addDisposables(addDisposableListener(element, 'mousedown', (e) => {
|
|
4550
|
+
if (e.shiftKey) {
|
|
4551
|
+
/**
|
|
4552
|
+
* You cannot call e.preventDefault() because that will prevent drag events from firing
|
|
4553
|
+
* but we also need to stop any group overlay drag events from occuring
|
|
4554
|
+
* Use a custom event marker that can be checked by the overlay drag events
|
|
4555
|
+
*/
|
|
4556
|
+
quasiPreventDefault(e);
|
|
4557
|
+
}
|
|
4558
|
+
}, true));
|
|
4875
4559
|
}
|
|
4876
|
-
|
|
4877
|
-
this.
|
|
4560
|
+
isCancelled(_event) {
|
|
4561
|
+
if (this.group.api.location.type === 'floating' && !_event.shiftKey) {
|
|
4562
|
+
return true;
|
|
4563
|
+
}
|
|
4564
|
+
return false;
|
|
4878
4565
|
}
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
this.
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
}
|
|
4903
|
-
this._bufferOnDidLayoutChange.fire();
|
|
4904
|
-
}), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
|
|
4905
|
-
this._bufferOnDidLayoutChange.fire();
|
|
4906
|
-
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
4907
|
-
this._onDidLayoutChange.fire();
|
|
4908
|
-
}), this._bufferOnDidLayoutChange);
|
|
4566
|
+
getData(dragEvent) {
|
|
4567
|
+
const dataTransfer = dragEvent.dataTransfer;
|
|
4568
|
+
this.panelTransfer.setData([new PanelTransfer(this.accessor.id, this.group.id, null)], PanelTransfer.prototype);
|
|
4569
|
+
const style = window.getComputedStyle(this.el);
|
|
4570
|
+
const bgColor = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-background-color');
|
|
4571
|
+
const color = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-color');
|
|
4572
|
+
if (dataTransfer) {
|
|
4573
|
+
const ghostElement = document.createElement('div');
|
|
4574
|
+
ghostElement.style.backgroundColor = bgColor;
|
|
4575
|
+
ghostElement.style.color = color;
|
|
4576
|
+
ghostElement.style.padding = '2px 8px';
|
|
4577
|
+
ghostElement.style.height = '24px';
|
|
4578
|
+
ghostElement.style.fontSize = '11px';
|
|
4579
|
+
ghostElement.style.lineHeight = '20px';
|
|
4580
|
+
ghostElement.style.borderRadius = '12px';
|
|
4581
|
+
ghostElement.style.position = 'absolute';
|
|
4582
|
+
ghostElement.textContent = `Multiple Panels (${this.group.size})`;
|
|
4583
|
+
addGhostImage(dataTransfer, ghostElement);
|
|
4584
|
+
}
|
|
4585
|
+
return {
|
|
4586
|
+
dispose: () => {
|
|
4587
|
+
this.panelTransfer.clearData(PanelTransfer.prototype);
|
|
4588
|
+
},
|
|
4589
|
+
};
|
|
4909
4590
|
}
|
|
4910
|
-
|
|
4911
|
-
|
|
4912
|
-
|
|
4591
|
+
}
|
|
4592
|
+
|
|
4593
|
+
class VoidContainer extends CompositeDisposable {
|
|
4594
|
+
get element() {
|
|
4595
|
+
return this._element;
|
|
4913
4596
|
}
|
|
4914
|
-
|
|
4915
|
-
|
|
4597
|
+
constructor(accessor, group) {
|
|
4598
|
+
super();
|
|
4599
|
+
this.accessor = accessor;
|
|
4600
|
+
this.group = group;
|
|
4601
|
+
this._onDrop = new Emitter();
|
|
4602
|
+
this.onDrop = this._onDrop.event;
|
|
4603
|
+
this._onDragStart = new Emitter();
|
|
4604
|
+
this.onDragStart = this._onDragStart.event;
|
|
4605
|
+
this._element = document.createElement('div');
|
|
4606
|
+
this._element.className = 'void-container';
|
|
4607
|
+
this._element.tabIndex = 0;
|
|
4608
|
+
this._element.draggable = true;
|
|
4609
|
+
this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'click', () => {
|
|
4610
|
+
this.accessor.doSetGroupActive(this.group);
|
|
4611
|
+
}));
|
|
4612
|
+
const handler = new GroupDragHandler(this._element, accessor, group);
|
|
4613
|
+
this.dropTraget = new Droptarget(this._element, {
|
|
4614
|
+
acceptedTargetZones: ['center'],
|
|
4615
|
+
canDisplayOverlay: (event, position) => {
|
|
4616
|
+
var _a;
|
|
4617
|
+
const data = getPanelData();
|
|
4618
|
+
if (data && this.accessor.id === data.viewId) {
|
|
4619
|
+
if (data.panelId === null &&
|
|
4620
|
+
data.groupId === this.group.id) {
|
|
4621
|
+
// don't allow group move to drop on self
|
|
4622
|
+
return false;
|
|
4623
|
+
}
|
|
4624
|
+
// don't show the overlay if the tab being dragged is the last panel of this group
|
|
4625
|
+
return ((_a = last(this.group.panels)) === null || _a === void 0 ? void 0 : _a.id) !== data.panelId;
|
|
4626
|
+
}
|
|
4627
|
+
return group.model.canDisplayOverlay(event, position, 'header_space');
|
|
4628
|
+
},
|
|
4629
|
+
});
|
|
4630
|
+
this.onWillShowOverlay = this.dropTraget.onWillShowOverlay;
|
|
4631
|
+
this.addDisposables(handler, handler.onDragStart((event) => {
|
|
4632
|
+
this._onDragStart.fire(event);
|
|
4633
|
+
}), this.dropTraget.onDrop((event) => {
|
|
4634
|
+
this._onDrop.fire(event);
|
|
4635
|
+
}), this.dropTraget);
|
|
4916
4636
|
}
|
|
4917
|
-
|
|
4918
|
-
|
|
4919
|
-
|
|
4637
|
+
}
|
|
4638
|
+
|
|
4639
|
+
class TabsContainer extends CompositeDisposable {
|
|
4640
|
+
get panels() {
|
|
4641
|
+
return this.tabs.map((_) => _.value.panel.id);
|
|
4920
4642
|
}
|
|
4921
|
-
|
|
4922
|
-
return this.
|
|
4643
|
+
get size() {
|
|
4644
|
+
return this.tabs.length;
|
|
4923
4645
|
}
|
|
4924
|
-
|
|
4925
|
-
this.
|
|
4646
|
+
get hidden() {
|
|
4647
|
+
return this._hidden;
|
|
4926
4648
|
}
|
|
4927
|
-
|
|
4928
|
-
|
|
4649
|
+
set hidden(value) {
|
|
4650
|
+
this._hidden = value;
|
|
4651
|
+
this.element.style.display = value ? 'none' : '';
|
|
4929
4652
|
}
|
|
4930
|
-
|
|
4931
|
-
|
|
4653
|
+
show() {
|
|
4654
|
+
if (!this.hidden) {
|
|
4655
|
+
this.element.style.display = '';
|
|
4656
|
+
}
|
|
4932
4657
|
}
|
|
4933
|
-
|
|
4934
|
-
this.
|
|
4935
|
-
this._onDidAdd.fire(group);
|
|
4658
|
+
hide() {
|
|
4659
|
+
this._element.style.display = 'none';
|
|
4936
4660
|
}
|
|
4937
|
-
|
|
4938
|
-
if (
|
|
4939
|
-
|
|
4661
|
+
setRightActionsElement(element) {
|
|
4662
|
+
if (this.rightActions === element) {
|
|
4663
|
+
return;
|
|
4940
4664
|
}
|
|
4941
|
-
|
|
4942
|
-
|
|
4943
|
-
|
|
4944
|
-
item.disposable.dispose();
|
|
4945
|
-
item.value.dispose();
|
|
4946
|
-
this._groups.delete(group.id);
|
|
4947
|
-
this._onDidRemove.fire(group);
|
|
4665
|
+
if (this.rightActions) {
|
|
4666
|
+
this.rightActions.remove();
|
|
4667
|
+
this.rightActions = undefined;
|
|
4948
4668
|
}
|
|
4949
|
-
if (
|
|
4950
|
-
|
|
4951
|
-
this.
|
|
4669
|
+
if (element) {
|
|
4670
|
+
this.rightActionsContainer.appendChild(element);
|
|
4671
|
+
this.rightActions = element;
|
|
4952
4672
|
}
|
|
4953
|
-
return view;
|
|
4954
4673
|
}
|
|
4955
|
-
|
|
4956
|
-
|
|
4957
|
-
|
|
4674
|
+
setLeftActionsElement(element) {
|
|
4675
|
+
if (this.leftActions === element) {
|
|
4676
|
+
return;
|
|
4677
|
+
}
|
|
4678
|
+
if (this.leftActions) {
|
|
4679
|
+
this.leftActions.remove();
|
|
4680
|
+
this.leftActions = undefined;
|
|
4681
|
+
}
|
|
4682
|
+
if (element) {
|
|
4683
|
+
this.leftActionsContainer.appendChild(element);
|
|
4684
|
+
this.leftActions = element;
|
|
4685
|
+
}
|
|
4958
4686
|
}
|
|
4959
|
-
|
|
4960
|
-
if (this.
|
|
4687
|
+
setPrefixActionsElement(element) {
|
|
4688
|
+
if (this.preActions === element) {
|
|
4961
4689
|
return;
|
|
4962
4690
|
}
|
|
4963
|
-
if (this.
|
|
4964
|
-
this.
|
|
4691
|
+
if (this.preActions) {
|
|
4692
|
+
this.preActions.remove();
|
|
4693
|
+
this.preActions = undefined;
|
|
4965
4694
|
}
|
|
4966
|
-
if (
|
|
4967
|
-
|
|
4695
|
+
if (element) {
|
|
4696
|
+
this.preActionsContainer.appendChild(element);
|
|
4697
|
+
this.preActions = element;
|
|
4968
4698
|
}
|
|
4969
|
-
this._activeGroup = group;
|
|
4970
|
-
this._onDidActiveChange.fire(group);
|
|
4971
4699
|
}
|
|
4972
|
-
|
|
4973
|
-
this.
|
|
4700
|
+
get element() {
|
|
4701
|
+
return this._element;
|
|
4974
4702
|
}
|
|
4975
|
-
|
|
4703
|
+
isActive(tab) {
|
|
4704
|
+
return (this.selectedIndex > -1 &&
|
|
4705
|
+
this.tabs[this.selectedIndex].value === tab);
|
|
4706
|
+
}
|
|
4707
|
+
indexOf(id) {
|
|
4708
|
+
return this.tabs.findIndex((tab) => tab.value.panel.id === id);
|
|
4709
|
+
}
|
|
4710
|
+
constructor(accessor, group) {
|
|
4711
|
+
super();
|
|
4712
|
+
this.accessor = accessor;
|
|
4713
|
+
this.group = group;
|
|
4714
|
+
this.tabs = [];
|
|
4715
|
+
this.selectedIndex = -1;
|
|
4716
|
+
this._hidden = false;
|
|
4717
|
+
this._onDrop = new Emitter();
|
|
4718
|
+
this.onDrop = this._onDrop.event;
|
|
4719
|
+
this._onTabDragStart = new Emitter();
|
|
4720
|
+
this.onTabDragStart = this._onTabDragStart.event;
|
|
4721
|
+
this._onGroupDragStart = new Emitter();
|
|
4722
|
+
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
4723
|
+
this._onWillShowOverlay = new Emitter();
|
|
4724
|
+
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
4725
|
+
this._element = document.createElement('div');
|
|
4726
|
+
this._element.className = 'tabs-and-actions-container';
|
|
4727
|
+
toggleClass(this._element, 'dv-full-width-single-tab', this.accessor.options.singleTabMode === 'fullwidth');
|
|
4728
|
+
this.rightActionsContainer = document.createElement('div');
|
|
4729
|
+
this.rightActionsContainer.className = 'right-actions-container';
|
|
4730
|
+
this.leftActionsContainer = document.createElement('div');
|
|
4731
|
+
this.leftActionsContainer.className = 'left-actions-container';
|
|
4732
|
+
this.preActionsContainer = document.createElement('div');
|
|
4733
|
+
this.preActionsContainer.className = 'pre-actions-container';
|
|
4734
|
+
this.tabContainer = document.createElement('div');
|
|
4735
|
+
this.tabContainer.className = 'tabs-container';
|
|
4736
|
+
this.voidContainer = new VoidContainer(this.accessor, this.group);
|
|
4737
|
+
this._element.appendChild(this.preActionsContainer);
|
|
4738
|
+
this._element.appendChild(this.tabContainer);
|
|
4739
|
+
this._element.appendChild(this.leftActionsContainer);
|
|
4740
|
+
this._element.appendChild(this.voidContainer.element);
|
|
4741
|
+
this._element.appendChild(this.rightActionsContainer);
|
|
4742
|
+
this.addDisposables(this.accessor.onDidAddPanel((e) => {
|
|
4743
|
+
if (e.api.group === this.group) {
|
|
4744
|
+
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
4745
|
+
}
|
|
4746
|
+
}), this.accessor.onDidRemovePanel((e) => {
|
|
4747
|
+
if (e.api.group === this.group) {
|
|
4748
|
+
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
4749
|
+
}
|
|
4750
|
+
}), this._onWillShowOverlay, this._onDrop, this._onTabDragStart, this._onGroupDragStart, this.voidContainer, this.voidContainer.onDragStart((event) => {
|
|
4751
|
+
this._onGroupDragStart.fire({
|
|
4752
|
+
nativeEvent: event,
|
|
4753
|
+
group: this.group,
|
|
4754
|
+
});
|
|
4755
|
+
}), this.voidContainer.onDrop((event) => {
|
|
4756
|
+
this._onDrop.fire({
|
|
4757
|
+
event: event.nativeEvent,
|
|
4758
|
+
index: this.tabs.length,
|
|
4759
|
+
});
|
|
4760
|
+
}), this.voidContainer.onWillShowOverlay((event) => {
|
|
4761
|
+
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4762
|
+
kind: 'header_space',
|
|
4763
|
+
panel: this.group.activePanel,
|
|
4764
|
+
api: this.accessor.api,
|
|
4765
|
+
group: this.group,
|
|
4766
|
+
getData: getPanelData,
|
|
4767
|
+
}));
|
|
4768
|
+
}), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
|
|
4769
|
+
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4770
|
+
if (isFloatingGroupsEnabled &&
|
|
4771
|
+
event.shiftKey &&
|
|
4772
|
+
this.group.api.location.type !== 'floating') {
|
|
4773
|
+
event.preventDefault();
|
|
4774
|
+
const { top, left } = this.element.getBoundingClientRect();
|
|
4775
|
+
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4776
|
+
this.accessor.addFloatingGroup(this.group, {
|
|
4777
|
+
x: left - rootLeft + 20,
|
|
4778
|
+
y: top - rootTop + 20,
|
|
4779
|
+
}, { inDragMode: true });
|
|
4780
|
+
}
|
|
4781
|
+
}), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
|
|
4782
|
+
if (event.defaultPrevented) {
|
|
4783
|
+
return;
|
|
4784
|
+
}
|
|
4785
|
+
const isLeftClick = event.button === 0;
|
|
4786
|
+
if (isLeftClick) {
|
|
4787
|
+
this.accessor.doSetGroupActive(this.group);
|
|
4788
|
+
}
|
|
4789
|
+
}));
|
|
4790
|
+
}
|
|
4791
|
+
setActive(_isGroupActive) {
|
|
4792
|
+
// noop
|
|
4793
|
+
}
|
|
4794
|
+
addTab(tab, index = this.tabs.length) {
|
|
4795
|
+
if (index < 0 || index > this.tabs.length) {
|
|
4796
|
+
throw new Error('invalid location');
|
|
4797
|
+
}
|
|
4798
|
+
this.tabContainer.insertBefore(tab.value.element, this.tabContainer.children[index]);
|
|
4799
|
+
this.tabs = [
|
|
4800
|
+
...this.tabs.slice(0, index),
|
|
4801
|
+
tab,
|
|
4802
|
+
...this.tabs.slice(index),
|
|
4803
|
+
];
|
|
4804
|
+
if (this.selectedIndex < 0) {
|
|
4805
|
+
this.selectedIndex = index;
|
|
4806
|
+
}
|
|
4807
|
+
}
|
|
4808
|
+
delete(id) {
|
|
4809
|
+
const index = this.tabs.findIndex((tab) => tab.value.panel.id === id);
|
|
4810
|
+
const tabToRemove = this.tabs.splice(index, 1)[0];
|
|
4811
|
+
const { value, disposable } = tabToRemove;
|
|
4812
|
+
disposable.dispose();
|
|
4813
|
+
value.dispose();
|
|
4814
|
+
value.element.remove();
|
|
4815
|
+
}
|
|
4816
|
+
setActivePanel(panel) {
|
|
4817
|
+
this.tabs.forEach((tab) => {
|
|
4818
|
+
const isActivePanel = panel.id === tab.value.panel.id;
|
|
4819
|
+
tab.value.setActive(isActivePanel);
|
|
4820
|
+
});
|
|
4821
|
+
}
|
|
4822
|
+
openPanel(panel, index = this.tabs.length) {
|
|
4976
4823
|
var _a;
|
|
4977
|
-
if (
|
|
4978
|
-
|
|
4824
|
+
if (this.tabs.find((tab) => tab.value.panel.id === panel.id)) {
|
|
4825
|
+
return;
|
|
4979
4826
|
}
|
|
4980
|
-
|
|
4981
|
-
|
|
4827
|
+
const tab = new Tab(panel, this.accessor, this.group);
|
|
4828
|
+
if (!((_a = panel.view) === null || _a === void 0 ? void 0 : _a.tab)) {
|
|
4829
|
+
throw new Error('invalid header component');
|
|
4830
|
+
}
|
|
4831
|
+
tab.setContent(panel.view.tab);
|
|
4832
|
+
const disposable = new CompositeDisposable(tab.onDragStart((event) => {
|
|
4833
|
+
this._onTabDragStart.fire({ nativeEvent: event, panel });
|
|
4834
|
+
}), tab.onChanged((event) => {
|
|
4835
|
+
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4836
|
+
const isFloatingWithOnePanel = this.group.api.location.type === 'floating' &&
|
|
4837
|
+
this.size === 1;
|
|
4838
|
+
if (isFloatingGroupsEnabled &&
|
|
4839
|
+
!isFloatingWithOnePanel &&
|
|
4840
|
+
event.shiftKey) {
|
|
4841
|
+
event.preventDefault();
|
|
4842
|
+
const panel = this.accessor.getGroupPanel(tab.panel.id);
|
|
4843
|
+
const { top, left } = tab.element.getBoundingClientRect();
|
|
4844
|
+
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4845
|
+
this.accessor.addFloatingGroup(panel, {
|
|
4846
|
+
x: left - rootLeft,
|
|
4847
|
+
y: top - rootTop,
|
|
4848
|
+
}, { inDragMode: true });
|
|
4982
4849
|
return;
|
|
4983
4850
|
}
|
|
4984
|
-
|
|
4985
|
-
|
|
4986
|
-
const location = getGridLocation(options.group.element);
|
|
4987
|
-
const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
4988
|
-
this.doSetGroupActive(next);
|
|
4989
|
-
}
|
|
4990
|
-
moveToPrevious(options) {
|
|
4991
|
-
var _a;
|
|
4992
|
-
if (!options) {
|
|
4993
|
-
options = {};
|
|
4994
|
-
}
|
|
4995
|
-
if (!options.group) {
|
|
4996
|
-
if (!this.activeGroup) {
|
|
4851
|
+
const isLeftClick = event.button === 0;
|
|
4852
|
+
if (!isLeftClick || event.defaultPrevented) {
|
|
4997
4853
|
return;
|
|
4998
4854
|
}
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
4855
|
+
if (this.group.activePanel !== panel) {
|
|
4856
|
+
this.group.model.openPanel(panel);
|
|
4857
|
+
}
|
|
4858
|
+
}), tab.onDrop((event) => {
|
|
4859
|
+
this._onDrop.fire({
|
|
4860
|
+
event: event.nativeEvent,
|
|
4861
|
+
index: this.tabs.findIndex((x) => x.value === tab),
|
|
4862
|
+
});
|
|
4863
|
+
}), tab.onWillShowOverlay((event) => {
|
|
4864
|
+
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4865
|
+
kind: 'tab',
|
|
4866
|
+
panel: this.group.activePanel,
|
|
4867
|
+
api: this.accessor.api,
|
|
4868
|
+
group: this.group,
|
|
4869
|
+
getData: getPanelData,
|
|
4870
|
+
}));
|
|
4871
|
+
}));
|
|
4872
|
+
const value = { value: tab, disposable };
|
|
4873
|
+
this.addTab(value, index);
|
|
5004
4874
|
}
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
if (!different) {
|
|
5008
|
-
return;
|
|
5009
|
-
}
|
|
5010
|
-
this.gridview.element.style.height = `${height}px`;
|
|
5011
|
-
this.gridview.element.style.width = `${width}px`;
|
|
5012
|
-
this.gridview.layout(width, height);
|
|
4875
|
+
closePanel(panel) {
|
|
4876
|
+
this.delete(panel.id);
|
|
5013
4877
|
}
|
|
5014
4878
|
dispose() {
|
|
5015
|
-
this._onDidActiveChange.dispose();
|
|
5016
|
-
this._onDidAdd.dispose();
|
|
5017
|
-
this._onDidRemove.dispose();
|
|
5018
|
-
this._onDidLayoutChange.dispose();
|
|
5019
|
-
for (const group of this.groups) {
|
|
5020
|
-
group.dispose();
|
|
5021
|
-
}
|
|
5022
|
-
this.gridview.dispose();
|
|
5023
4879
|
super.dispose();
|
|
4880
|
+
for (const { value, disposable } of this.tabs) {
|
|
4881
|
+
disposable.dispose();
|
|
4882
|
+
value.dispose();
|
|
4883
|
+
}
|
|
4884
|
+
this.tabs = [];
|
|
5024
4885
|
}
|
|
5025
4886
|
}
|
|
5026
4887
|
|
|
5027
|
-
class
|
|
5028
|
-
|
|
5029
|
-
|
|
4888
|
+
class DockviewUnhandledDragOverEvent {
|
|
4889
|
+
get isAccepted() {
|
|
4890
|
+
return this._isAccepted;
|
|
4891
|
+
}
|
|
4892
|
+
constructor(nativeEvent, target, position, getData, group) {
|
|
4893
|
+
this.nativeEvent = nativeEvent;
|
|
4894
|
+
this.target = target;
|
|
4895
|
+
this.position = position;
|
|
4896
|
+
this.getData = getData;
|
|
4897
|
+
this.group = group;
|
|
4898
|
+
this._isAccepted = false;
|
|
4899
|
+
}
|
|
4900
|
+
accept() {
|
|
4901
|
+
this._isAccepted = true;
|
|
5030
4902
|
}
|
|
5031
4903
|
}
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
4904
|
+
const PROPERTY_KEYS = (() => {
|
|
4905
|
+
/**
|
|
4906
|
+
* by readong the keys from an empty value object TypeScript will error
|
|
4907
|
+
* when we add or remove new properties to `DockviewOptions`
|
|
4908
|
+
*/
|
|
4909
|
+
const properties = {
|
|
4910
|
+
disableAutoResizing: undefined,
|
|
4911
|
+
hideBorders: undefined,
|
|
4912
|
+
singleTabMode: undefined,
|
|
4913
|
+
disableFloatingGroups: undefined,
|
|
4914
|
+
floatingGroupBounds: undefined,
|
|
4915
|
+
popoutUrl: undefined,
|
|
4916
|
+
defaultRenderer: undefined,
|
|
4917
|
+
debug: undefined,
|
|
4918
|
+
rootOverlayModel: undefined,
|
|
4919
|
+
locked: undefined,
|
|
4920
|
+
disableDnd: undefined,
|
|
4921
|
+
};
|
|
4922
|
+
return Object.keys(properties);
|
|
4923
|
+
})();
|
|
4924
|
+
function isPanelOptionsWithPanel(data) {
|
|
4925
|
+
if (data.referencePanel) {
|
|
4926
|
+
return true;
|
|
5038
4927
|
}
|
|
5039
|
-
|
|
5040
|
-
|
|
4928
|
+
return false;
|
|
4929
|
+
}
|
|
4930
|
+
function isPanelOptionsWithGroup(data) {
|
|
4931
|
+
if (data.referenceGroup) {
|
|
4932
|
+
return true;
|
|
5041
4933
|
}
|
|
5042
|
-
|
|
5043
|
-
|
|
4934
|
+
return false;
|
|
4935
|
+
}
|
|
4936
|
+
function isGroupOptionsWithPanel(data) {
|
|
4937
|
+
if (data.referencePanel) {
|
|
4938
|
+
return true;
|
|
5044
4939
|
}
|
|
5045
|
-
|
|
5046
|
-
|
|
4940
|
+
return false;
|
|
4941
|
+
}
|
|
4942
|
+
function isGroupOptionsWithGroup(data) {
|
|
4943
|
+
if (data.referenceGroup) {
|
|
4944
|
+
return true;
|
|
5047
4945
|
}
|
|
5048
|
-
|
|
5049
|
-
|
|
4946
|
+
return false;
|
|
4947
|
+
}
|
|
4948
|
+
|
|
4949
|
+
class DockviewDidDropEvent extends DockviewEvent {
|
|
4950
|
+
get nativeEvent() {
|
|
4951
|
+
return this.options.nativeEvent;
|
|
5050
4952
|
}
|
|
5051
|
-
|
|
4953
|
+
get position() {
|
|
4954
|
+
return this.options.position;
|
|
4955
|
+
}
|
|
4956
|
+
get panel() {
|
|
4957
|
+
return this.options.panel;
|
|
4958
|
+
}
|
|
4959
|
+
get group() {
|
|
4960
|
+
return this.options.group;
|
|
4961
|
+
}
|
|
4962
|
+
get api() {
|
|
4963
|
+
return this.options.api;
|
|
4964
|
+
}
|
|
4965
|
+
constructor(options) {
|
|
5052
4966
|
super();
|
|
5053
|
-
this.
|
|
5054
|
-
this.component = component;
|
|
5055
|
-
this._isFocused = false;
|
|
5056
|
-
this._isActive = false;
|
|
5057
|
-
this._isVisible = true;
|
|
5058
|
-
this._width = 0;
|
|
5059
|
-
this._height = 0;
|
|
5060
|
-
this._parameters = {};
|
|
5061
|
-
this.panelUpdatesDisposable = new MutableDisposable();
|
|
5062
|
-
this._onDidDimensionChange = new Emitter();
|
|
5063
|
-
this.onDidDimensionsChange = this._onDidDimensionChange.event;
|
|
5064
|
-
this._onDidChangeFocus = new Emitter();
|
|
5065
|
-
this.onDidFocusChange = this._onDidChangeFocus.event;
|
|
5066
|
-
//
|
|
5067
|
-
this._onWillFocus = new Emitter();
|
|
5068
|
-
this.onWillFocus = this._onWillFocus.event;
|
|
5069
|
-
//
|
|
5070
|
-
this._onDidVisibilityChange = new Emitter();
|
|
5071
|
-
this.onDidVisibilityChange = this._onDidVisibilityChange.event;
|
|
5072
|
-
this._onWillVisibilityChange = new Emitter();
|
|
5073
|
-
this.onWillVisibilityChange = this._onWillVisibilityChange.event;
|
|
5074
|
-
this._onDidActiveChange = new Emitter();
|
|
5075
|
-
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
5076
|
-
this._onActiveChange = new Emitter();
|
|
5077
|
-
this.onActiveChange = this._onActiveChange.event;
|
|
5078
|
-
this._onDidParametersChange = new Emitter();
|
|
5079
|
-
this.onDidParametersChange = this._onDidParametersChange.event;
|
|
5080
|
-
this.addDisposables(this.onDidFocusChange((event) => {
|
|
5081
|
-
this._isFocused = event.isFocused;
|
|
5082
|
-
}), this.onDidActiveChange((event) => {
|
|
5083
|
-
this._isActive = event.isActive;
|
|
5084
|
-
}), this.onDidVisibilityChange((event) => {
|
|
5085
|
-
this._isVisible = event.isVisible;
|
|
5086
|
-
}), this.onDidDimensionsChange((event) => {
|
|
5087
|
-
this._width = event.width;
|
|
5088
|
-
this._height = event.height;
|
|
5089
|
-
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onWillFocus, this._onActiveChange, this._onWillFocus, this._onWillVisibilityChange, this._onDidParametersChange);
|
|
4967
|
+
this.options = options;
|
|
5090
4968
|
}
|
|
5091
|
-
|
|
5092
|
-
return this.
|
|
4969
|
+
getData() {
|
|
4970
|
+
return this.options.getData();
|
|
5093
4971
|
}
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
params: parameters,
|
|
5099
|
-
});
|
|
5100
|
-
});
|
|
4972
|
+
}
|
|
4973
|
+
class DockviewWillDropEvent extends DockviewDidDropEvent {
|
|
4974
|
+
get kind() {
|
|
4975
|
+
return this._kind;
|
|
5101
4976
|
}
|
|
5102
|
-
|
|
5103
|
-
|
|
4977
|
+
constructor(options) {
|
|
4978
|
+
super(options);
|
|
4979
|
+
this._kind = options.kind;
|
|
5104
4980
|
}
|
|
5105
|
-
|
|
5106
|
-
|
|
4981
|
+
}
|
|
4982
|
+
class WillShowOverlayLocationEvent {
|
|
4983
|
+
get kind() {
|
|
4984
|
+
return this.options.kind;
|
|
5107
4985
|
}
|
|
5108
|
-
|
|
5109
|
-
this.
|
|
4986
|
+
get nativeEvent() {
|
|
4987
|
+
return this.event.nativeEvent;
|
|
4988
|
+
}
|
|
4989
|
+
get position() {
|
|
4990
|
+
return this.event.position;
|
|
4991
|
+
}
|
|
4992
|
+
get defaultPrevented() {
|
|
4993
|
+
return this.event.defaultPrevented;
|
|
4994
|
+
}
|
|
4995
|
+
get panel() {
|
|
4996
|
+
return this.options.panel;
|
|
4997
|
+
}
|
|
4998
|
+
get api() {
|
|
4999
|
+
return this.options.api;
|
|
5000
|
+
}
|
|
5001
|
+
get group() {
|
|
5002
|
+
return this.options.group;
|
|
5003
|
+
}
|
|
5004
|
+
preventDefault() {
|
|
5005
|
+
this.event.preventDefault();
|
|
5006
|
+
}
|
|
5007
|
+
getData() {
|
|
5008
|
+
return this.options.getData();
|
|
5009
|
+
}
|
|
5010
|
+
constructor(event, options) {
|
|
5011
|
+
this.event = event;
|
|
5012
|
+
this.options = options;
|
|
5110
5013
|
}
|
|
5111
5014
|
}
|
|
5112
|
-
|
|
5113
|
-
|
|
5114
|
-
|
|
5115
|
-
constructor(id, component) {
|
|
5116
|
-
super(id, component);
|
|
5117
|
-
this._onDidConstraintsChangeInternal = new Emitter();
|
|
5118
|
-
this.onDidConstraintsChangeInternal = this._onDidConstraintsChangeInternal.event;
|
|
5119
|
-
//
|
|
5120
|
-
this._onDidConstraintsChange = new Emitter({
|
|
5121
|
-
replay: true,
|
|
5122
|
-
});
|
|
5123
|
-
this.onDidConstraintsChange = this._onDidConstraintsChange.event;
|
|
5124
|
-
//
|
|
5125
|
-
this._onDidSizeChange = new Emitter();
|
|
5126
|
-
this.onDidSizeChange = this._onDidSizeChange.event;
|
|
5127
|
-
this.addDisposables(this._onDidConstraintsChangeInternal, this._onDidConstraintsChange, this._onDidSizeChange);
|
|
5015
|
+
class DockviewGroupPanelModel extends CompositeDisposable {
|
|
5016
|
+
get element() {
|
|
5017
|
+
throw new Error('not supported');
|
|
5128
5018
|
}
|
|
5129
|
-
|
|
5130
|
-
this.
|
|
5019
|
+
get activePanel() {
|
|
5020
|
+
return this._activePanel;
|
|
5021
|
+
}
|
|
5022
|
+
get locked() {
|
|
5023
|
+
return this._locked;
|
|
5024
|
+
}
|
|
5025
|
+
set locked(value) {
|
|
5026
|
+
this._locked = value;
|
|
5027
|
+
toggleClass(this.container, 'locked-groupview', value === 'no-drop-target' || value);
|
|
5028
|
+
}
|
|
5029
|
+
get isActive() {
|
|
5030
|
+
return this._isGroupActive;
|
|
5131
5031
|
}
|
|
5132
|
-
|
|
5133
|
-
this.
|
|
5032
|
+
get panels() {
|
|
5033
|
+
return this._panels;
|
|
5134
5034
|
}
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
class PaneviewPanelApiImpl extends SplitviewPanelApiImpl {
|
|
5138
|
-
set pane(pane) {
|
|
5139
|
-
this._pane = pane;
|
|
5035
|
+
get size() {
|
|
5036
|
+
return this._panels.length;
|
|
5140
5037
|
}
|
|
5141
|
-
|
|
5142
|
-
|
|
5143
|
-
this._onDidExpansionChange = new Emitter({
|
|
5144
|
-
replay: true,
|
|
5145
|
-
});
|
|
5146
|
-
this.onDidExpansionChange = this._onDidExpansionChange.event;
|
|
5147
|
-
this._onMouseEnter = new Emitter({});
|
|
5148
|
-
this.onMouseEnter = this._onMouseEnter.event;
|
|
5149
|
-
this._onMouseLeave = new Emitter({});
|
|
5150
|
-
this.onMouseLeave = this._onMouseLeave.event;
|
|
5151
|
-
this.addDisposables(this._onDidExpansionChange, this._onMouseEnter, this._onMouseLeave);
|
|
5038
|
+
get isEmpty() {
|
|
5039
|
+
return this._panels.length === 0;
|
|
5152
5040
|
}
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
(_a = this._pane) === null || _a === void 0 ? void 0 : _a.setExpanded(isExpanded);
|
|
5041
|
+
get hasWatermark() {
|
|
5042
|
+
return !!(this.watermark && this.container.contains(this.watermark.element));
|
|
5156
5043
|
}
|
|
5157
|
-
get
|
|
5158
|
-
|
|
5159
|
-
return !!((_a = this._pane) === null || _a === void 0 ? void 0 : _a.isExpanded());
|
|
5044
|
+
get header() {
|
|
5045
|
+
return this.tabsContainer;
|
|
5160
5046
|
}
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
return this.
|
|
5047
|
+
get isContentFocused() {
|
|
5048
|
+
if (!document.activeElement) {
|
|
5049
|
+
return false;
|
|
5050
|
+
}
|
|
5051
|
+
return isAncestor(document.activeElement, this.contentContainer.element);
|
|
5166
5052
|
}
|
|
5167
|
-
get
|
|
5168
|
-
return this.
|
|
5053
|
+
get location() {
|
|
5054
|
+
return this._location;
|
|
5169
5055
|
}
|
|
5170
|
-
|
|
5171
|
-
|
|
5056
|
+
set location(value) {
|
|
5057
|
+
this._location = value;
|
|
5058
|
+
toggleClass(this.container, 'dv-groupview-floating', false);
|
|
5059
|
+
toggleClass(this.container, 'dv-groupview-popout', false);
|
|
5060
|
+
switch (value.type) {
|
|
5061
|
+
case 'grid':
|
|
5062
|
+
this.contentContainer.dropTarget.setTargetZones([
|
|
5063
|
+
'top',
|
|
5064
|
+
'bottom',
|
|
5065
|
+
'left',
|
|
5066
|
+
'right',
|
|
5067
|
+
'center',
|
|
5068
|
+
]);
|
|
5069
|
+
break;
|
|
5070
|
+
case 'floating':
|
|
5071
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
5072
|
+
this.contentContainer.dropTarget.setTargetZones(value
|
|
5073
|
+
? ['center']
|
|
5074
|
+
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
5075
|
+
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
5076
|
+
break;
|
|
5077
|
+
case 'popout':
|
|
5078
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
5079
|
+
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
5080
|
+
break;
|
|
5081
|
+
}
|
|
5082
|
+
this.groupPanel.api._onDidLocationChange.fire({
|
|
5083
|
+
location: this.location,
|
|
5084
|
+
});
|
|
5172
5085
|
}
|
|
5173
|
-
|
|
5086
|
+
constructor(container, accessor, id, options, groupPanel) {
|
|
5174
5087
|
var _a;
|
|
5175
|
-
return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
|
|
5176
|
-
}
|
|
5177
|
-
constructor(id, component, api) {
|
|
5178
5088
|
super();
|
|
5089
|
+
this.container = container;
|
|
5090
|
+
this.accessor = accessor;
|
|
5179
5091
|
this.id = id;
|
|
5180
|
-
this.
|
|
5181
|
-
this.
|
|
5182
|
-
this.
|
|
5092
|
+
this.options = options;
|
|
5093
|
+
this.groupPanel = groupPanel;
|
|
5094
|
+
this._isGroupActive = false;
|
|
5095
|
+
this._locked = false;
|
|
5096
|
+
this._location = { type: 'grid' };
|
|
5097
|
+
this.mostRecentlyUsed = [];
|
|
5098
|
+
this._onDidChange = new Emitter();
|
|
5099
|
+
this.onDidChange = this._onDidChange.event;
|
|
5183
5100
|
this._width = 0;
|
|
5184
|
-
this.
|
|
5185
|
-
this.
|
|
5186
|
-
this.
|
|
5187
|
-
this.
|
|
5188
|
-
this.
|
|
5189
|
-
this.
|
|
5190
|
-
|
|
5191
|
-
this.
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5101
|
+
this._height = 0;
|
|
5102
|
+
this._panels = [];
|
|
5103
|
+
this._panelDisposables = new Map();
|
|
5104
|
+
this._onMove = new Emitter();
|
|
5105
|
+
this.onMove = this._onMove.event;
|
|
5106
|
+
this._onDidDrop = new Emitter();
|
|
5107
|
+
this.onDidDrop = this._onDidDrop.event;
|
|
5108
|
+
this._onWillDrop = new Emitter();
|
|
5109
|
+
this.onWillDrop = this._onWillDrop.event;
|
|
5110
|
+
this._onWillShowOverlay = new Emitter();
|
|
5111
|
+
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
5112
|
+
this._onTabDragStart = new Emitter();
|
|
5113
|
+
this.onTabDragStart = this._onTabDragStart.event;
|
|
5114
|
+
this._onGroupDragStart = new Emitter();
|
|
5115
|
+
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
5116
|
+
this._onDidAddPanel = new Emitter();
|
|
5117
|
+
this.onDidAddPanel = this._onDidAddPanel.event;
|
|
5118
|
+
this._onDidPanelTitleChange = new Emitter();
|
|
5119
|
+
this.onDidPanelTitleChange = this._onDidPanelTitleChange.event;
|
|
5120
|
+
this._onDidPanelParametersChange = new Emitter();
|
|
5121
|
+
this.onDidPanelParametersChange = this._onDidPanelParametersChange.event;
|
|
5122
|
+
this._onDidRemovePanel = new Emitter();
|
|
5123
|
+
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
5124
|
+
this._onDidActivePanelChange = new Emitter();
|
|
5125
|
+
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
5126
|
+
this._onUnhandledDragOverEvent = new Emitter();
|
|
5127
|
+
this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
|
|
5128
|
+
this._overwriteRenderContainer = null;
|
|
5129
|
+
toggleClass(this.container, 'groupview', true);
|
|
5130
|
+
this._api = new DockviewApi(this.accessor);
|
|
5131
|
+
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
5132
|
+
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
5133
|
+
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
5134
|
+
this.header.hidden = !!options.hideHeader;
|
|
5135
|
+
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
5136
|
+
this.addDisposables(this._onTabDragStart, this._onGroupDragStart, this._onWillShowOverlay, this.tabsContainer.onTabDragStart((event) => {
|
|
5137
|
+
this._onTabDragStart.fire(event);
|
|
5138
|
+
}), this.tabsContainer.onGroupDragStart((event) => {
|
|
5139
|
+
this._onGroupDragStart.fire(event);
|
|
5140
|
+
}), this.tabsContainer.onDrop((event) => {
|
|
5141
|
+
this.handleDropEvent('header', event.event, 'center', event.index);
|
|
5142
|
+
}), this.contentContainer.onDidFocus(() => {
|
|
5143
|
+
this.accessor.doSetGroupActive(this.groupPanel);
|
|
5144
|
+
}), this.contentContainer.onDidBlur(() => {
|
|
5145
|
+
// noop
|
|
5146
|
+
}), this.contentContainer.dropTarget.onDrop((event) => {
|
|
5147
|
+
this.handleDropEvent('content', event.nativeEvent, event.position);
|
|
5148
|
+
}), this.tabsContainer.onWillShowOverlay((event) => {
|
|
5149
|
+
this._onWillShowOverlay.fire(event);
|
|
5150
|
+
}), this.contentContainer.dropTarget.onWillShowOverlay((event) => {
|
|
5151
|
+
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
5152
|
+
kind: 'content',
|
|
5153
|
+
panel: this.activePanel,
|
|
5154
|
+
api: this._api,
|
|
5155
|
+
group: this.groupPanel,
|
|
5156
|
+
getData: getPanelData,
|
|
5157
|
+
}));
|
|
5158
|
+
}), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this._onUnhandledDragOverEvent);
|
|
5196
5159
|
}
|
|
5197
|
-
|
|
5198
|
-
|
|
5199
|
-
this.api._onWillFocus.fire(event);
|
|
5200
|
-
if (event.defaultPrevented) {
|
|
5201
|
-
return;
|
|
5202
|
-
}
|
|
5203
|
-
this._element.focus();
|
|
5160
|
+
focusContent() {
|
|
5161
|
+
this.contentContainer.element.focus();
|
|
5204
5162
|
}
|
|
5205
|
-
|
|
5206
|
-
this.
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
}
|
|
5163
|
+
set renderContainer(value) {
|
|
5164
|
+
this.panels.forEach((panel) => {
|
|
5165
|
+
this.renderContainer.detatch(panel);
|
|
5166
|
+
});
|
|
5167
|
+
this._overwriteRenderContainer = value;
|
|
5168
|
+
this.panels.forEach((panel) => {
|
|
5169
|
+
this.rerender(panel);
|
|
5170
|
+
});
|
|
5214
5171
|
}
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
this.
|
|
5172
|
+
get renderContainer() {
|
|
5173
|
+
var _a;
|
|
5174
|
+
return ((_a = this._overwriteRenderContainer) !== null && _a !== void 0 ? _a : this.accessor.overlayRenderContainer);
|
|
5218
5175
|
}
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
* delete new keys that have a value of undefined,
|
|
5225
|
-
* allow values of null
|
|
5226
|
-
*/
|
|
5227
|
-
for (const key of Object.keys(event.params)) {
|
|
5228
|
-
if (event.params[key] === undefined) {
|
|
5229
|
-
delete this._params.params[key];
|
|
5230
|
-
}
|
|
5176
|
+
initialize() {
|
|
5177
|
+
if (this.options.panels) {
|
|
5178
|
+
this.options.panels.forEach((panel) => {
|
|
5179
|
+
this.doAddPanel(panel);
|
|
5180
|
+
});
|
|
5231
5181
|
}
|
|
5232
|
-
|
|
5233
|
-
|
|
5182
|
+
if (this.options.activePanel) {
|
|
5183
|
+
this.openPanel(this.options.activePanel);
|
|
5184
|
+
}
|
|
5185
|
+
// must be run after the constructor otherwise this.parent may not be
|
|
5186
|
+
// correctly initialized
|
|
5187
|
+
this.setActive(this.isActive, true);
|
|
5188
|
+
this.updateContainer();
|
|
5189
|
+
if (this.accessor.options.createRightHeaderActionComponent) {
|
|
5190
|
+
this._rightHeaderActions =
|
|
5191
|
+
this.accessor.options.createRightHeaderActionComponent(this.groupPanel);
|
|
5192
|
+
this.addDisposables(this._rightHeaderActions);
|
|
5193
|
+
this._rightHeaderActions.init({
|
|
5194
|
+
containerApi: this._api,
|
|
5195
|
+
api: this.groupPanel.api,
|
|
5196
|
+
group: this.groupPanel,
|
|
5197
|
+
});
|
|
5198
|
+
this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
|
|
5199
|
+
}
|
|
5200
|
+
if (this.accessor.options.createLeftHeaderActionComponent) {
|
|
5201
|
+
this._leftHeaderActions =
|
|
5202
|
+
this.accessor.options.createLeftHeaderActionComponent(this.groupPanel);
|
|
5203
|
+
this.addDisposables(this._leftHeaderActions);
|
|
5204
|
+
this._leftHeaderActions.init({
|
|
5205
|
+
containerApi: this._api,
|
|
5206
|
+
api: this.groupPanel.api,
|
|
5207
|
+
group: this.groupPanel,
|
|
5208
|
+
});
|
|
5209
|
+
this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
|
|
5210
|
+
}
|
|
5211
|
+
if (this.accessor.options.createPrefixHeaderActionComponent) {
|
|
5212
|
+
this._prefixHeaderActions =
|
|
5213
|
+
this.accessor.options.createPrefixHeaderActionComponent(this.groupPanel);
|
|
5214
|
+
this.addDisposables(this._prefixHeaderActions);
|
|
5215
|
+
this._prefixHeaderActions.init({
|
|
5216
|
+
containerApi: this._api,
|
|
5217
|
+
api: this.groupPanel.api,
|
|
5218
|
+
group: this.groupPanel,
|
|
5219
|
+
});
|
|
5220
|
+
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
5221
|
+
}
|
|
5222
|
+
}
|
|
5223
|
+
rerender(panel) {
|
|
5224
|
+
this.contentContainer.renderPanel(panel, { asActive: false });
|
|
5225
|
+
}
|
|
5226
|
+
indexOf(panel) {
|
|
5227
|
+
return this.tabsContainer.indexOf(panel.id);
|
|
5234
5228
|
}
|
|
5235
5229
|
toJSON() {
|
|
5236
|
-
var _a
|
|
5237
|
-
const
|
|
5238
|
-
|
|
5230
|
+
var _a;
|
|
5231
|
+
const result = {
|
|
5232
|
+
views: this.tabsContainer.panels,
|
|
5233
|
+
activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
|
|
5239
5234
|
id: this.id,
|
|
5240
|
-
component: this.component,
|
|
5241
|
-
params: Object.keys(params).length > 0 ? params : undefined,
|
|
5242
5235
|
};
|
|
5236
|
+
if (this.locked !== false) {
|
|
5237
|
+
result.locked = this.locked;
|
|
5238
|
+
}
|
|
5239
|
+
if (this.header.hidden) {
|
|
5240
|
+
result.hideHeader = true;
|
|
5241
|
+
}
|
|
5242
|
+
return result;
|
|
5243
5243
|
}
|
|
5244
|
-
|
|
5245
|
-
|
|
5246
|
-
|
|
5247
|
-
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
5244
|
+
moveToNext(options) {
|
|
5245
|
+
if (!options) {
|
|
5246
|
+
options = {};
|
|
5247
|
+
}
|
|
5248
|
+
if (!options.panel) {
|
|
5249
|
+
options.panel = this.activePanel;
|
|
5250
|
+
}
|
|
5251
|
+
const index = options.panel ? this.panels.indexOf(options.panel) : -1;
|
|
5252
|
+
let normalizedIndex;
|
|
5253
|
+
if (index < this.panels.length - 1) {
|
|
5254
|
+
normalizedIndex = index + 1;
|
|
5255
|
+
}
|
|
5256
|
+
else if (!options.suppressRoll) {
|
|
5257
|
+
normalizedIndex = 0;
|
|
5258
|
+
}
|
|
5259
|
+
else {
|
|
5260
|
+
return;
|
|
5261
|
+
}
|
|
5262
|
+
this.openPanel(this.panels[normalizedIndex]);
|
|
5255
5263
|
}
|
|
5256
|
-
|
|
5257
|
-
|
|
5264
|
+
moveToPrevious(options) {
|
|
5265
|
+
if (!options) {
|
|
5266
|
+
options = {};
|
|
5267
|
+
}
|
|
5268
|
+
if (!options.panel) {
|
|
5269
|
+
options.panel = this.activePanel;
|
|
5270
|
+
}
|
|
5271
|
+
if (!options.panel) {
|
|
5272
|
+
return;
|
|
5273
|
+
}
|
|
5274
|
+
const index = this.panels.indexOf(options.panel);
|
|
5275
|
+
let normalizedIndex;
|
|
5276
|
+
if (index > 0) {
|
|
5277
|
+
normalizedIndex = index - 1;
|
|
5278
|
+
}
|
|
5279
|
+
else if (!options.suppressRoll) {
|
|
5280
|
+
normalizedIndex = this.panels.length - 1;
|
|
5281
|
+
}
|
|
5282
|
+
else {
|
|
5283
|
+
return;
|
|
5284
|
+
}
|
|
5285
|
+
this.openPanel(this.panels[normalizedIndex]);
|
|
5258
5286
|
}
|
|
5259
|
-
|
|
5260
|
-
|
|
5261
|
-
const expanded = this.isExpanded();
|
|
5262
|
-
const minimumBodySize = expanded ? this._minimumBodySize : 0;
|
|
5263
|
-
return headerSize + minimumBodySize;
|
|
5287
|
+
containsPanel(panel) {
|
|
5288
|
+
return this.panels.includes(panel);
|
|
5264
5289
|
}
|
|
5265
|
-
|
|
5266
|
-
|
|
5267
|
-
const expanded = this.isExpanded();
|
|
5268
|
-
const maximumBodySize = expanded ? this._maximumBodySize : 0;
|
|
5269
|
-
return headerSize + maximumBodySize;
|
|
5290
|
+
init(_params) {
|
|
5291
|
+
//noop
|
|
5270
5292
|
}
|
|
5271
|
-
|
|
5272
|
-
|
|
5293
|
+
update(_params) {
|
|
5294
|
+
//noop
|
|
5273
5295
|
}
|
|
5274
|
-
|
|
5275
|
-
|
|
5296
|
+
focus() {
|
|
5297
|
+
var _a;
|
|
5298
|
+
(_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
|
|
5276
5299
|
}
|
|
5277
|
-
|
|
5278
|
-
|
|
5300
|
+
openPanel(panel, options = {}) {
|
|
5301
|
+
/**
|
|
5302
|
+
* set the panel group
|
|
5303
|
+
* add the panel
|
|
5304
|
+
* check if group active
|
|
5305
|
+
* check if panel active
|
|
5306
|
+
*/
|
|
5307
|
+
if (typeof options.index !== 'number' ||
|
|
5308
|
+
options.index > this.panels.length) {
|
|
5309
|
+
options.index = this.panels.length;
|
|
5310
|
+
}
|
|
5311
|
+
const skipSetActive = !!options.skipSetActive;
|
|
5312
|
+
// ensure the group is updated before we fire any events
|
|
5313
|
+
panel.updateParentGroup(this.groupPanel, {
|
|
5314
|
+
skipSetActive: options.skipSetActive,
|
|
5315
|
+
});
|
|
5316
|
+
this.doAddPanel(panel, options.index, {
|
|
5317
|
+
skipSetActive: skipSetActive,
|
|
5318
|
+
});
|
|
5319
|
+
if (this._activePanel === panel) {
|
|
5320
|
+
this.contentContainer.renderPanel(panel, { asActive: true });
|
|
5321
|
+
return;
|
|
5322
|
+
}
|
|
5323
|
+
if (!skipSetActive) {
|
|
5324
|
+
this.doSetActivePanel(panel);
|
|
5325
|
+
}
|
|
5326
|
+
if (!options.skipSetGroupActive) {
|
|
5327
|
+
this.accessor.doSetGroupActive(this.groupPanel);
|
|
5328
|
+
}
|
|
5329
|
+
if (!options.skipSetActive) {
|
|
5330
|
+
this.updateContainer();
|
|
5331
|
+
}
|
|
5279
5332
|
}
|
|
5280
|
-
|
|
5281
|
-
|
|
5333
|
+
removePanel(groupItemOrId, options = {
|
|
5334
|
+
skipSetActive: false,
|
|
5335
|
+
}) {
|
|
5336
|
+
const id = typeof groupItemOrId === 'string'
|
|
5337
|
+
? groupItemOrId
|
|
5338
|
+
: groupItemOrId.id;
|
|
5339
|
+
const panelToRemove = this._panels.find((panel) => panel.id === id);
|
|
5340
|
+
if (!panelToRemove) {
|
|
5341
|
+
throw new Error('invalid operation');
|
|
5342
|
+
}
|
|
5343
|
+
return this._removePanel(panelToRemove, options);
|
|
5282
5344
|
}
|
|
5283
|
-
|
|
5284
|
-
this.
|
|
5345
|
+
closeAllPanels() {
|
|
5346
|
+
if (this.panels.length > 0) {
|
|
5347
|
+
// take a copy since we will be edting the array as we iterate through
|
|
5348
|
+
const arrPanelCpy = [...this.panels];
|
|
5349
|
+
for (const panel of arrPanelCpy) {
|
|
5350
|
+
this.doClose(panel);
|
|
5351
|
+
}
|
|
5352
|
+
}
|
|
5353
|
+
else {
|
|
5354
|
+
this.accessor.removeGroup(this.groupPanel);
|
|
5355
|
+
}
|
|
5285
5356
|
}
|
|
5286
|
-
|
|
5287
|
-
|
|
5357
|
+
closePanel(panel) {
|
|
5358
|
+
this.doClose(panel);
|
|
5288
5359
|
}
|
|
5289
|
-
|
|
5290
|
-
this.
|
|
5291
|
-
typeof value === 'number' ? value : Number.POSITIVE_INFINITY;
|
|
5360
|
+
doClose(panel) {
|
|
5361
|
+
this.accessor.removePanel(panel);
|
|
5292
5362
|
}
|
|
5293
|
-
|
|
5294
|
-
return this.
|
|
5363
|
+
isPanelActive(panel) {
|
|
5364
|
+
return this._activePanel === panel;
|
|
5295
5365
|
}
|
|
5296
|
-
|
|
5297
|
-
this.
|
|
5298
|
-
this.header.style.display = value ? '' : 'none';
|
|
5366
|
+
updateActions(element) {
|
|
5367
|
+
this.tabsContainer.setRightActionsElement(element);
|
|
5299
5368
|
}
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
this.
|
|
5305
|
-
this.
|
|
5306
|
-
this.
|
|
5307
|
-
this.
|
|
5308
|
-
this.
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
this.
|
|
5312
|
-
this._isExpanded = false;
|
|
5313
|
-
this.expandedSize = 0;
|
|
5314
|
-
this.api.pane = this; // TODO cannot use 'this' before 'super'
|
|
5315
|
-
this.api.initialize(this);
|
|
5316
|
-
this._isExpanded = isExpanded;
|
|
5317
|
-
this._headerVisible = isHeaderVisible;
|
|
5318
|
-
this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
|
|
5319
|
-
this._orientation = orientation;
|
|
5320
|
-
this.element.classList.add('pane');
|
|
5321
|
-
this.addDisposables(this.api.onWillVisibilityChange((event) => {
|
|
5322
|
-
const { isVisible } = event;
|
|
5323
|
-
const { accessor } = this._params;
|
|
5324
|
-
accessor.setVisible(this, isVisible);
|
|
5325
|
-
}), this.api.onDidSizeChange((event) => {
|
|
5326
|
-
this._onDidChange.fire({ size: event.size });
|
|
5327
|
-
}), addDisposableListener(this.element, 'mouseenter', (ev) => {
|
|
5328
|
-
this.api._onMouseEnter.fire(ev);
|
|
5329
|
-
}), addDisposableListener(this.element, 'mouseleave', (ev) => {
|
|
5330
|
-
this.api._onMouseLeave.fire(ev);
|
|
5331
|
-
}));
|
|
5332
|
-
this.addDisposables(this._onDidChangeExpansionState, this.onDidChangeExpansionState((isPanelExpanded) => {
|
|
5333
|
-
this.api._onDidExpansionChange.fire({
|
|
5334
|
-
isExpanded: isPanelExpanded,
|
|
5335
|
-
});
|
|
5336
|
-
}), this.api.onDidFocusChange((e) => {
|
|
5337
|
-
if (!this.header) {
|
|
5338
|
-
return;
|
|
5339
|
-
}
|
|
5340
|
-
if (e.isFocused) {
|
|
5341
|
-
addClasses(this.header, 'focused');
|
|
5342
|
-
}
|
|
5343
|
-
else {
|
|
5344
|
-
removeClasses(this.header, 'focused');
|
|
5345
|
-
}
|
|
5346
|
-
}));
|
|
5347
|
-
this.renderOnce();
|
|
5369
|
+
setActive(isGroupActive, force = false) {
|
|
5370
|
+
if (!force && this.isActive === isGroupActive) {
|
|
5371
|
+
return;
|
|
5372
|
+
}
|
|
5373
|
+
this._isGroupActive = isGroupActive;
|
|
5374
|
+
toggleClass(this.container, 'active-group', isGroupActive);
|
|
5375
|
+
toggleClass(this.container, 'inactive-group', !isGroupActive);
|
|
5376
|
+
this.tabsContainer.setActive(this.isActive);
|
|
5377
|
+
if (!this._activePanel && this.panels.length > 0) {
|
|
5378
|
+
this.doSetActivePanel(this.panels[0]);
|
|
5379
|
+
}
|
|
5380
|
+
this.updateContainer();
|
|
5348
5381
|
}
|
|
5349
|
-
|
|
5350
|
-
|
|
5382
|
+
layout(width, height) {
|
|
5383
|
+
var _a;
|
|
5384
|
+
this._width = width;
|
|
5385
|
+
this._height = height;
|
|
5386
|
+
this.contentContainer.layout(this._width, this._height);
|
|
5387
|
+
if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
|
|
5388
|
+
this._activePanel.layout(this._width, this._height);
|
|
5389
|
+
}
|
|
5351
5390
|
}
|
|
5352
|
-
|
|
5353
|
-
this.
|
|
5391
|
+
_removePanel(panel, options) {
|
|
5392
|
+
const isActivePanel = this._activePanel === panel;
|
|
5393
|
+
this.doRemovePanel(panel);
|
|
5394
|
+
if (isActivePanel && this.panels.length > 0) {
|
|
5395
|
+
const nextPanel = this.mostRecentlyUsed[0];
|
|
5396
|
+
this.openPanel(nextPanel, {
|
|
5397
|
+
skipSetActive: options.skipSetActive,
|
|
5398
|
+
skipSetGroupActive: options.skipSetActiveGroup,
|
|
5399
|
+
});
|
|
5400
|
+
}
|
|
5401
|
+
if (this._activePanel && this.panels.length === 0) {
|
|
5402
|
+
this.doSetActivePanel(undefined);
|
|
5403
|
+
}
|
|
5404
|
+
if (!options.skipSetActive) {
|
|
5405
|
+
this.updateContainer();
|
|
5406
|
+
}
|
|
5407
|
+
return panel;
|
|
5354
5408
|
}
|
|
5355
|
-
|
|
5356
|
-
|
|
5409
|
+
doRemovePanel(panel) {
|
|
5410
|
+
const index = this.panels.indexOf(panel);
|
|
5411
|
+
if (this._activePanel === panel) {
|
|
5412
|
+
this.contentContainer.closePanel();
|
|
5413
|
+
}
|
|
5414
|
+
this.tabsContainer.delete(panel.id);
|
|
5415
|
+
this._panels.splice(index, 1);
|
|
5416
|
+
if (this.mostRecentlyUsed.includes(panel)) {
|
|
5417
|
+
const index = this.mostRecentlyUsed.indexOf(panel);
|
|
5418
|
+
this.mostRecentlyUsed.splice(index, 1);
|
|
5419
|
+
}
|
|
5420
|
+
const disposable = this._panelDisposables.get(panel.id);
|
|
5421
|
+
if (disposable) {
|
|
5422
|
+
disposable.dispose();
|
|
5423
|
+
this._panelDisposables.delete(panel.id);
|
|
5424
|
+
}
|
|
5425
|
+
this._onDidRemovePanel.fire({ panel });
|
|
5357
5426
|
}
|
|
5358
|
-
|
|
5359
|
-
|
|
5427
|
+
doAddPanel(panel, index = this.panels.length, options = { skipSetActive: false }) {
|
|
5428
|
+
const existingPanel = this._panels.indexOf(panel);
|
|
5429
|
+
const hasExistingPanel = existingPanel > -1;
|
|
5430
|
+
this.tabsContainer.show();
|
|
5431
|
+
this.contentContainer.show();
|
|
5432
|
+
this.tabsContainer.openPanel(panel, index);
|
|
5433
|
+
if (!options.skipSetActive) {
|
|
5434
|
+
this.contentContainer.openPanel(panel);
|
|
5435
|
+
}
|
|
5436
|
+
if (hasExistingPanel) {
|
|
5437
|
+
// TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
|
|
5360
5438
|
return;
|
|
5361
5439
|
}
|
|
5362
|
-
this.
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5369
|
-
|
|
5440
|
+
this.updateMru(panel);
|
|
5441
|
+
this.panels.splice(index, 0, panel);
|
|
5442
|
+
this._panelDisposables.set(panel.id, new CompositeDisposable(panel.api.onDidTitleChange((event) => this._onDidPanelTitleChange.fire(event)), panel.api.onDidParametersChange((event) => this._onDidPanelParametersChange.fire(event))));
|
|
5443
|
+
this._onDidAddPanel.fire({ panel });
|
|
5444
|
+
}
|
|
5445
|
+
doSetActivePanel(panel) {
|
|
5446
|
+
if (this._activePanel === panel) {
|
|
5447
|
+
return;
|
|
5370
5448
|
}
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
|
|
5374
|
-
|
|
5375
|
-
|
|
5449
|
+
this._activePanel = panel;
|
|
5450
|
+
if (panel) {
|
|
5451
|
+
this.tabsContainer.setActivePanel(panel);
|
|
5452
|
+
panel.layout(this._width, this._height);
|
|
5453
|
+
this.updateMru(panel);
|
|
5454
|
+
this._onDidActivePanelChange.fire({
|
|
5455
|
+
panel,
|
|
5456
|
+
});
|
|
5376
5457
|
}
|
|
5377
|
-
this._onDidChange.fire(expanded ? { size: this.width } : {});
|
|
5378
|
-
this._onDidChangeExpansionState.fire(expanded);
|
|
5379
5458
|
}
|
|
5380
|
-
|
|
5381
|
-
this.
|
|
5382
|
-
|
|
5383
|
-
const [width, height] = this.orientation === exports.Orientation.HORIZONTAL
|
|
5384
|
-
? [size, orthogonalSize]
|
|
5385
|
-
: [orthogonalSize, size];
|
|
5386
|
-
if (this.isExpanded()) {
|
|
5387
|
-
this.expandedSize = width;
|
|
5459
|
+
updateMru(panel) {
|
|
5460
|
+
if (this.mostRecentlyUsed.includes(panel)) {
|
|
5461
|
+
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
5388
5462
|
}
|
|
5389
|
-
|
|
5463
|
+
this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
|
|
5390
5464
|
}
|
|
5391
|
-
|
|
5465
|
+
updateContainer() {
|
|
5392
5466
|
var _a, _b;
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5467
|
+
toggleClass(this.container, 'empty', this.isEmpty);
|
|
5468
|
+
this.panels.forEach((panel) => panel.runEvents());
|
|
5469
|
+
if (this.isEmpty && !this.watermark) {
|
|
5470
|
+
const watermark = this.accessor.createWatermarkComponent();
|
|
5471
|
+
watermark.init({
|
|
5472
|
+
containerApi: this._api,
|
|
5473
|
+
group: this.groupPanel,
|
|
5474
|
+
});
|
|
5475
|
+
this.watermark = watermark;
|
|
5476
|
+
addDisposableListener(this.watermark.element, 'click', () => {
|
|
5477
|
+
if (!this.isActive) {
|
|
5478
|
+
this.accessor.doSetGroupActive(this.groupPanel);
|
|
5479
|
+
}
|
|
5480
|
+
});
|
|
5481
|
+
this.tabsContainer.hide();
|
|
5482
|
+
this.contentContainer.element.appendChild(this.watermark.element);
|
|
5483
|
+
this.watermark.updateParentGroup(this.groupPanel, true);
|
|
5399
5484
|
}
|
|
5400
|
-
this.
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
(_b = this.header) === null || _b === void 0 ? void 0 : _b.append(this.headerPart.element);
|
|
5406
|
-
if (typeof parameters.isExpanded === 'boolean') {
|
|
5407
|
-
this.setExpanded(parameters.isExpanded);
|
|
5485
|
+
if (!this.isEmpty && this.watermark) {
|
|
5486
|
+
this.watermark.element.remove();
|
|
5487
|
+
(_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
5488
|
+
this.watermark = undefined;
|
|
5489
|
+
this.tabsContainer.show();
|
|
5408
5490
|
}
|
|
5409
5491
|
}
|
|
5410
|
-
|
|
5411
|
-
const
|
|
5412
|
-
|
|
5413
|
-
|
|
5414
|
-
renderOnce() {
|
|
5415
|
-
this.header = document.createElement('div');
|
|
5416
|
-
this.header.tabIndex = 0;
|
|
5417
|
-
this.header.className = 'pane-header';
|
|
5418
|
-
this.header.style.height = `${this.headerSize}px`;
|
|
5419
|
-
this.header.style.lineHeight = `${this.headerSize}px`;
|
|
5420
|
-
this.header.style.minHeight = `${this.headerSize}px`;
|
|
5421
|
-
this.header.style.maxHeight = `${this.headerSize}px`;
|
|
5422
|
-
this.element.appendChild(this.header);
|
|
5423
|
-
this.body = document.createElement('div');
|
|
5424
|
-
this.body.className = 'pane-body';
|
|
5425
|
-
this.element.appendChild(this.body);
|
|
5426
|
-
}
|
|
5427
|
-
// TODO slightly hacky by-pass of the component to create a body and header component
|
|
5428
|
-
getComponent() {
|
|
5429
|
-
return {
|
|
5430
|
-
update: (params) => {
|
|
5431
|
-
var _a, _b;
|
|
5432
|
-
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.update({ params });
|
|
5433
|
-
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.update({ params });
|
|
5434
|
-
},
|
|
5435
|
-
dispose: () => {
|
|
5436
|
-
var _a, _b;
|
|
5437
|
-
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
5438
|
-
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
5439
|
-
},
|
|
5440
|
-
};
|
|
5441
|
-
}
|
|
5442
|
-
}
|
|
5443
|
-
|
|
5444
|
-
class DraggablePaneviewPanel extends PaneviewPanel {
|
|
5445
|
-
constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
|
|
5446
|
-
super(id, component, headerComponent, orientation, isExpanded, true);
|
|
5447
|
-
this.accessor = accessor;
|
|
5448
|
-
this._onDidDrop = new Emitter();
|
|
5449
|
-
this.onDidDrop = this._onDidDrop.event;
|
|
5450
|
-
if (!disableDnd) {
|
|
5451
|
-
this.initDragFeatures();
|
|
5452
|
-
}
|
|
5492
|
+
canDisplayOverlay(event, position, target) {
|
|
5493
|
+
const firedEvent = new DockviewUnhandledDragOverEvent(event, target, position, getPanelData, this.accessor.getPanel(this.id));
|
|
5494
|
+
this._onUnhandledDragOverEvent.fire(firedEvent);
|
|
5495
|
+
return firedEvent.isAccepted;
|
|
5453
5496
|
}
|
|
5454
|
-
|
|
5455
|
-
if (
|
|
5497
|
+
handleDropEvent(type, event, position, index) {
|
|
5498
|
+
if (this.locked === 'no-drop-target') {
|
|
5456
5499
|
return;
|
|
5457
5500
|
}
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5463
|
-
|
|
5464
|
-
return {
|
|
5465
|
-
dispose: () => {
|
|
5466
|
-
LocalSelectionTransfer.getInstance().clearData(PaneTransfer.prototype);
|
|
5467
|
-
},
|
|
5468
|
-
};
|
|
5501
|
+
function getKind() {
|
|
5502
|
+
switch (type) {
|
|
5503
|
+
case 'header':
|
|
5504
|
+
return typeof index === 'number' ? 'tab' : 'header_space';
|
|
5505
|
+
case 'content':
|
|
5506
|
+
return 'content';
|
|
5469
5507
|
}
|
|
5470
|
-
}
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5478
|
-
|
|
5479
|
-
|
|
5480
|
-
data.viewId === this.accessor.id) {
|
|
5481
|
-
return true;
|
|
5482
|
-
}
|
|
5483
|
-
}
|
|
5484
|
-
if (this.accessor.options.showDndOverlay) {
|
|
5485
|
-
return this.accessor.options.showDndOverlay({
|
|
5486
|
-
nativeEvent: event,
|
|
5487
|
-
getData: getPaneData,
|
|
5488
|
-
panel: this,
|
|
5489
|
-
});
|
|
5490
|
-
}
|
|
5491
|
-
return false;
|
|
5492
|
-
},
|
|
5508
|
+
}
|
|
5509
|
+
const panel = typeof index === 'number' ? this.panels[index] : undefined;
|
|
5510
|
+
const willDropEvent = new DockviewWillDropEvent({
|
|
5511
|
+
nativeEvent: event,
|
|
5512
|
+
position,
|
|
5513
|
+
panel,
|
|
5514
|
+
getData: () => getPanelData(),
|
|
5515
|
+
kind: getKind(),
|
|
5516
|
+
group: this.groupPanel,
|
|
5517
|
+
api: this._api,
|
|
5493
5518
|
});
|
|
5494
|
-
this.
|
|
5495
|
-
|
|
5496
|
-
}));
|
|
5497
|
-
}
|
|
5498
|
-
onDrop(event) {
|
|
5499
|
-
const data = getPaneData();
|
|
5500
|
-
if (!data || data.viewId !== this.accessor.id) {
|
|
5501
|
-
// if there is no local drag event for this panel
|
|
5502
|
-
// or if the drag event was creating by another Paneview instance
|
|
5503
|
-
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, api: new PaneviewApi(this.accessor), getData: getPaneData }));
|
|
5519
|
+
this._onWillDrop.fire(willDropEvent);
|
|
5520
|
+
if (willDropEvent.defaultPrevented) {
|
|
5504
5521
|
return;
|
|
5505
5522
|
}
|
|
5506
|
-
const
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5513
|
-
|
|
5523
|
+
const data = getPanelData();
|
|
5524
|
+
if (data && data.viewId === this.accessor.id) {
|
|
5525
|
+
if (data.panelId === null) {
|
|
5526
|
+
// this is a group move dnd event
|
|
5527
|
+
const { groupId } = data;
|
|
5528
|
+
this._onMove.fire({
|
|
5529
|
+
target: position,
|
|
5530
|
+
groupId: groupId,
|
|
5531
|
+
index,
|
|
5532
|
+
});
|
|
5533
|
+
return;
|
|
5534
|
+
}
|
|
5535
|
+
const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
|
|
5536
|
+
if (fromSameGroup && this.tabsContainer.size === 1) {
|
|
5537
|
+
return;
|
|
5538
|
+
}
|
|
5539
|
+
const { groupId, panelId } = data;
|
|
5540
|
+
const isSameGroup = this.id === groupId;
|
|
5541
|
+
if (isSameGroup && !position) {
|
|
5542
|
+
const oldIndex = this.tabsContainer.indexOf(panelId);
|
|
5543
|
+
if (oldIndex === index) {
|
|
5544
|
+
return;
|
|
5545
|
+
}
|
|
5546
|
+
}
|
|
5547
|
+
this._onMove.fire({
|
|
5548
|
+
target: position,
|
|
5549
|
+
groupId: data.groupId,
|
|
5550
|
+
itemId: data.panelId,
|
|
5551
|
+
index,
|
|
5552
|
+
});
|
|
5514
5553
|
}
|
|
5515
|
-
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
|
|
5554
|
+
else {
|
|
5555
|
+
this._onDidDrop.fire(new DockviewDidDropEvent({
|
|
5556
|
+
nativeEvent: event,
|
|
5557
|
+
position,
|
|
5558
|
+
panel,
|
|
5559
|
+
getData: () => getPanelData(),
|
|
5560
|
+
group: this.groupPanel,
|
|
5561
|
+
api: this._api,
|
|
5562
|
+
}));
|
|
5520
5563
|
}
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
|
|
5564
|
+
}
|
|
5565
|
+
dispose() {
|
|
5566
|
+
var _a, _b, _c;
|
|
5567
|
+
super.dispose();
|
|
5568
|
+
(_a = this.watermark) === null || _a === void 0 ? void 0 : _a.element.remove();
|
|
5569
|
+
(_c = (_b = this.watermark) === null || _b === void 0 ? void 0 : _b.dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
5570
|
+
this.watermark = undefined;
|
|
5571
|
+
for (const panel of this.panels) {
|
|
5572
|
+
panel.dispose();
|
|
5526
5573
|
}
|
|
5527
|
-
|
|
5574
|
+
this.tabsContainer.dispose();
|
|
5575
|
+
this.contentContainer.dispose();
|
|
5528
5576
|
}
|
|
5529
5577
|
}
|
|
5530
5578
|
|
|
@@ -5711,9 +5759,12 @@
|
|
|
5711
5759
|
constructor(id, accessor) {
|
|
5712
5760
|
super(id, '__dockviewgroup__');
|
|
5713
5761
|
this.accessor = accessor;
|
|
5762
|
+
this._mutableDisposable = new MutableDisposable();
|
|
5714
5763
|
this._onDidLocationChange = new Emitter();
|
|
5715
5764
|
this.onDidLocationChange = this._onDidLocationChange.event;
|
|
5716
|
-
this.
|
|
5765
|
+
this._onDidActivePanelChange = new Emitter();
|
|
5766
|
+
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
5767
|
+
this.addDisposables(this._onDidLocationChange, this._onDidActivePanelChange, this._mutableDisposable);
|
|
5717
5768
|
}
|
|
5718
5769
|
close() {
|
|
5719
5770
|
if (!this._group) {
|
|
@@ -5771,6 +5822,19 @@
|
|
|
5771
5822
|
}
|
|
5772
5823
|
initialize(group) {
|
|
5773
5824
|
this._group = group;
|
|
5825
|
+
/**
|
|
5826
|
+
* TODO: Annoying initialization order caveat
|
|
5827
|
+
*
|
|
5828
|
+
* Due to the order on initialization we know that the model isn't defined until later in the same stack-frame of setup.
|
|
5829
|
+
* By queuing a microtask we can ensure the setup is completed within the same stack-frame, but after everything else has
|
|
5830
|
+
* finished ensuring the `model` is defined.
|
|
5831
|
+
*/
|
|
5832
|
+
queueMicrotask(() => {
|
|
5833
|
+
this._mutableDisposable.value =
|
|
5834
|
+
this._group.model.onDidActivePanelChange((event) => {
|
|
5835
|
+
this._onDidActivePanelChange.fire(event);
|
|
5836
|
+
});
|
|
5837
|
+
});
|
|
5774
5838
|
}
|
|
5775
5839
|
}
|
|
5776
5840
|
|
|
@@ -5831,31 +5895,6 @@
|
|
|
5831
5895
|
}
|
|
5832
5896
|
}
|
|
5833
5897
|
|
|
5834
|
-
function isPanelOptionsWithPanel(data) {
|
|
5835
|
-
if (data.referencePanel) {
|
|
5836
|
-
return true;
|
|
5837
|
-
}
|
|
5838
|
-
return false;
|
|
5839
|
-
}
|
|
5840
|
-
function isPanelOptionsWithGroup(data) {
|
|
5841
|
-
if (data.referenceGroup) {
|
|
5842
|
-
return true;
|
|
5843
|
-
}
|
|
5844
|
-
return false;
|
|
5845
|
-
}
|
|
5846
|
-
function isGroupOptionsWithPanel(data) {
|
|
5847
|
-
if (data.referencePanel) {
|
|
5848
|
-
return true;
|
|
5849
|
-
}
|
|
5850
|
-
return false;
|
|
5851
|
-
}
|
|
5852
|
-
function isGroupOptionsWithGroup(data) {
|
|
5853
|
-
if (data.referenceGroup) {
|
|
5854
|
-
return true;
|
|
5855
|
-
}
|
|
5856
|
-
return false;
|
|
5857
|
-
}
|
|
5858
|
-
|
|
5859
5898
|
class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
5860
5899
|
get location() {
|
|
5861
5900
|
return this.group.api.location;
|
|
@@ -6223,7 +6262,7 @@
|
|
|
6223
6262
|
this._tab = this.createTabComponent(this.id, tabComponent);
|
|
6224
6263
|
}
|
|
6225
6264
|
init(params) {
|
|
6226
|
-
this.content.init(
|
|
6265
|
+
this.content.init(params);
|
|
6227
6266
|
this.tab.init(params);
|
|
6228
6267
|
}
|
|
6229
6268
|
updateParentGroup(_group, _isPanelVisible) {
|
|
@@ -6244,20 +6283,29 @@
|
|
|
6244
6283
|
(_d = (_c = this.tab).dispose) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
6245
6284
|
}
|
|
6246
6285
|
createContentComponent(id, componentName) {
|
|
6247
|
-
|
|
6248
|
-
|
|
6286
|
+
return this.accessor.options.createComponent({
|
|
6287
|
+
id,
|
|
6288
|
+
name: componentName,
|
|
6289
|
+
});
|
|
6249
6290
|
}
|
|
6250
6291
|
createTabComponent(id, componentName) {
|
|
6251
|
-
|
|
6252
|
-
if (
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6292
|
+
const name = componentName !== null && componentName !== void 0 ? componentName : this.accessor.options.defaultTabComponent;
|
|
6293
|
+
if (name) {
|
|
6294
|
+
if (this.accessor.options.createTabComponent) {
|
|
6295
|
+
const component = this.accessor.options.createTabComponent({
|
|
6296
|
+
id,
|
|
6297
|
+
name,
|
|
6298
|
+
});
|
|
6299
|
+
if (component) {
|
|
6300
|
+
return component;
|
|
6301
|
+
}
|
|
6302
|
+
else {
|
|
6303
|
+
return new DefaultTab();
|
|
6304
|
+
}
|
|
6305
|
+
}
|
|
6306
|
+
console.warn(`dockview: tabComponent '${componentName}' was not found. falling back to the default tab.`);
|
|
6260
6307
|
}
|
|
6308
|
+
return new DefaultTab();
|
|
6261
6309
|
}
|
|
6262
6310
|
}
|
|
6263
6311
|
|
|
@@ -6994,11 +7042,13 @@
|
|
|
6994
7042
|
return this._api;
|
|
6995
7043
|
}
|
|
6996
7044
|
constructor(options) {
|
|
6997
|
-
var _a
|
|
7045
|
+
var _a;
|
|
6998
7046
|
super({
|
|
6999
7047
|
proportionalLayout: true,
|
|
7000
|
-
orientation:
|
|
7001
|
-
styles: options.
|
|
7048
|
+
orientation: exports.Orientation.HORIZONTAL,
|
|
7049
|
+
styles: options.hideBorders
|
|
7050
|
+
? { separatorBorder: 'transparent' }
|
|
7051
|
+
: undefined,
|
|
7002
7052
|
parentElement: options.parentElement,
|
|
7003
7053
|
disableAutoResizing: options.disableAutoResizing,
|
|
7004
7054
|
locked: options.locked,
|
|
@@ -7016,6 +7066,8 @@
|
|
|
7016
7066
|
this.onWillDrop = this._onWillDrop.event;
|
|
7017
7067
|
this._onWillShowOverlay = new Emitter();
|
|
7018
7068
|
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
7069
|
+
this._onUnhandledDragOverEvent = new Emitter();
|
|
7070
|
+
this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
|
|
7019
7071
|
this._onDidRemovePanel = new Emitter();
|
|
7020
7072
|
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
7021
7073
|
this._onDidAddPanel = new Emitter();
|
|
@@ -7041,7 +7093,7 @@
|
|
|
7041
7093
|
this.overlayRenderContainer = new OverlayRenderContainer(gready);
|
|
7042
7094
|
toggleClass(this.gridview.element, 'dv-dockview', true);
|
|
7043
7095
|
toggleClass(this.element, 'dv-debug', !!options.debug);
|
|
7044
|
-
this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this.onDidAdd((event) => {
|
|
7096
|
+
this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this.onDidAdd((event) => {
|
|
7045
7097
|
if (!this._moving) {
|
|
7046
7098
|
this._onDidAddGroup.fire(event);
|
|
7047
7099
|
}
|
|
@@ -7068,22 +7120,6 @@
|
|
|
7068
7120
|
}
|
|
7069
7121
|
}));
|
|
7070
7122
|
this._options = options;
|
|
7071
|
-
if (!this.options.components) {
|
|
7072
|
-
this.options.components = {};
|
|
7073
|
-
}
|
|
7074
|
-
if (!this.options.frameworkComponents) {
|
|
7075
|
-
this.options.frameworkComponents = {};
|
|
7076
|
-
}
|
|
7077
|
-
if (!this.options.frameworkTabComponents) {
|
|
7078
|
-
this.options.frameworkTabComponents = {};
|
|
7079
|
-
}
|
|
7080
|
-
if (!this.options.tabComponents) {
|
|
7081
|
-
this.options.tabComponents = {};
|
|
7082
|
-
}
|
|
7083
|
-
if (!this.options.watermarkComponent &&
|
|
7084
|
-
!this.options.watermarkFrameworkComponent) {
|
|
7085
|
-
this.options.watermarkComponent = Watermark;
|
|
7086
|
-
}
|
|
7087
7123
|
this._rootDropTarget = new Droptarget(this.element, {
|
|
7088
7124
|
canDisplayOverlay: (event, position) => {
|
|
7089
7125
|
const data = getPanelData();
|
|
@@ -7098,26 +7134,20 @@
|
|
|
7098
7134
|
}
|
|
7099
7135
|
return true;
|
|
7100
7136
|
}
|
|
7101
|
-
if (this.
|
|
7102
|
-
|
|
7103
|
-
|
|
7104
|
-
|
|
7105
|
-
|
|
7106
|
-
|
|
7107
|
-
|
|
7108
|
-
return false;
|
|
7109
|
-
}
|
|
7110
|
-
return this.options.showDndOverlay({
|
|
7111
|
-
nativeEvent: event,
|
|
7112
|
-
position: position,
|
|
7113
|
-
target: 'edge',
|
|
7114
|
-
getData: getPanelData,
|
|
7115
|
-
});
|
|
7137
|
+
if (position === 'center' && this.gridview.length !== 0) {
|
|
7138
|
+
/**
|
|
7139
|
+
* for external events only show the four-corner drag overlays, disable
|
|
7140
|
+
* the center position so that external drag events can fall through to the group
|
|
7141
|
+
* and panel drop target handlers
|
|
7142
|
+
*/
|
|
7143
|
+
return false;
|
|
7116
7144
|
}
|
|
7117
|
-
|
|
7145
|
+
const firedEvent = new DockviewUnhandledDragOverEvent(event, 'edge', position, getPanelData);
|
|
7146
|
+
this._onUnhandledDragOverEvent.fire(firedEvent);
|
|
7147
|
+
return firedEvent.isAccepted;
|
|
7118
7148
|
},
|
|
7119
7149
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
7120
|
-
overlayModel: (
|
|
7150
|
+
overlayModel: (_a = this.options.rootOverlayModel) !== null && _a !== void 0 ? _a : DEFAULT_ROOT_OVERLAY_MODEL,
|
|
7121
7151
|
});
|
|
7122
7152
|
this.addDisposables(this._rootDropTarget, this._rootDropTarget.onWillShowOverlay((event) => {
|
|
7123
7153
|
if (this.gridview.length > 0 && event.position === 'center') {
|
|
@@ -7341,7 +7371,7 @@
|
|
|
7341
7371
|
skipDispose: true,
|
|
7342
7372
|
skipSetActiveGroup: true,
|
|
7343
7373
|
}));
|
|
7344
|
-
group.model.openPanel(item, { skipSetGroupActive: true });
|
|
7374
|
+
this.movingLock(() => group.model.openPanel(item, { skipSetGroupActive: true }));
|
|
7345
7375
|
}
|
|
7346
7376
|
else {
|
|
7347
7377
|
group = item;
|
|
@@ -7414,7 +7444,7 @@
|
|
|
7414
7444
|
// this is either a resize or a move
|
|
7415
7445
|
// to inform the panels .layout(...) the group with it's current size
|
|
7416
7446
|
// don't care about resize since the above watcher handles that
|
|
7417
|
-
group.layout(group.
|
|
7447
|
+
group.layout(group.width, group.height);
|
|
7418
7448
|
}), overlay.onDidChangeEnd(() => {
|
|
7419
7449
|
this._bufferOnDidLayoutChange.fire();
|
|
7420
7450
|
}), group.onDidChange((event) => {
|
|
@@ -7469,16 +7499,11 @@
|
|
|
7469
7499
|
}
|
|
7470
7500
|
updateOptions(options) {
|
|
7471
7501
|
var _a, _b;
|
|
7472
|
-
const
|
|
7473
|
-
this.gridview.orientation !== options.orientation;
|
|
7474
|
-
const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
|
|
7502
|
+
const changed_floatingGroupBounds = 'floatingGroupBounds' in options &&
|
|
7475
7503
|
options.floatingGroupBounds !== this.options.floatingGroupBounds;
|
|
7476
|
-
const changed_rootOverlayOptions =
|
|
7504
|
+
const changed_rootOverlayOptions = 'rootOverlayModel' in options &&
|
|
7477
7505
|
options.rootOverlayModel !== this.options.rootOverlayModel;
|
|
7478
7506
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
7479
|
-
if (changed_orientation) {
|
|
7480
|
-
this.gridview.orientation = options.orientation;
|
|
7481
|
-
}
|
|
7482
7507
|
if (changed_floatingGroupBounds) {
|
|
7483
7508
|
for (const group of this._floatingGroups) {
|
|
7484
7509
|
switch (this.options.floatingGroupBounds) {
|
|
@@ -7766,7 +7791,7 @@
|
|
|
7766
7791
|
? this.getGroupPanel(options.position.referencePanel)
|
|
7767
7792
|
: options.position.referencePanel;
|
|
7768
7793
|
if (!referencePanel) {
|
|
7769
|
-
throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
|
|
7794
|
+
throw new Error(`referencePanel '${options.position.referencePanel}' does not exist`);
|
|
7770
7795
|
}
|
|
7771
7796
|
referenceGroup = this.findGroup(referencePanel);
|
|
7772
7797
|
}
|
|
@@ -7776,14 +7801,19 @@
|
|
|
7776
7801
|
? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
|
|
7777
7802
|
: options.position.referenceGroup;
|
|
7778
7803
|
if (!referenceGroup) {
|
|
7779
|
-
throw new Error(`
|
|
7804
|
+
throw new Error(`referenceGroup '${options.position.referenceGroup}' does not exist`);
|
|
7780
7805
|
}
|
|
7781
7806
|
}
|
|
7782
7807
|
else {
|
|
7783
7808
|
const group = this.orthogonalize(directionToPosition(options.position.direction));
|
|
7784
7809
|
const panel = this.createPanel(options, group);
|
|
7785
|
-
group.model.openPanel(panel
|
|
7786
|
-
|
|
7810
|
+
group.model.openPanel(panel, {
|
|
7811
|
+
skipSetActive: options.inactive,
|
|
7812
|
+
skipSetGroupActive: options.inactive,
|
|
7813
|
+
});
|
|
7814
|
+
if (!options.inactive) {
|
|
7815
|
+
this.doSetGroupAndPanelActive(group);
|
|
7816
|
+
}
|
|
7787
7817
|
return panel;
|
|
7788
7818
|
}
|
|
7789
7819
|
}
|
|
@@ -7806,43 +7836,64 @@
|
|
|
7806
7836
|
skipActiveGroup: true,
|
|
7807
7837
|
});
|
|
7808
7838
|
panel = this.createPanel(options, group);
|
|
7809
|
-
group.model.openPanel(panel
|
|
7839
|
+
group.model.openPanel(panel, {
|
|
7840
|
+
skipSetActive: options.inactive,
|
|
7841
|
+
skipSetGroupActive: options.inactive,
|
|
7842
|
+
});
|
|
7810
7843
|
}
|
|
7811
7844
|
else if (referenceGroup.api.location.type === 'floating' ||
|
|
7812
7845
|
target === 'center') {
|
|
7813
7846
|
panel = this.createPanel(options, referenceGroup);
|
|
7814
|
-
referenceGroup.model.openPanel(panel
|
|
7815
|
-
|
|
7847
|
+
referenceGroup.model.openPanel(panel, {
|
|
7848
|
+
skipSetActive: options.inactive,
|
|
7849
|
+
skipSetGroupActive: options.inactive,
|
|
7850
|
+
});
|
|
7851
|
+
if (!options.inactive) {
|
|
7852
|
+
this.doSetGroupAndPanelActive(referenceGroup);
|
|
7853
|
+
}
|
|
7816
7854
|
}
|
|
7817
7855
|
else {
|
|
7818
7856
|
const location = getGridLocation(referenceGroup.element);
|
|
7819
7857
|
const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
|
|
7820
7858
|
const group = this.createGroupAtLocation(relativeLocation);
|
|
7821
7859
|
panel = this.createPanel(options, group);
|
|
7822
|
-
group.model.openPanel(panel
|
|
7823
|
-
|
|
7860
|
+
group.model.openPanel(panel, {
|
|
7861
|
+
skipSetActive: options.inactive,
|
|
7862
|
+
skipSetGroupActive: options.inactive,
|
|
7863
|
+
});
|
|
7864
|
+
if (!options.inactive) {
|
|
7865
|
+
this.doSetGroupAndPanelActive(group);
|
|
7866
|
+
}
|
|
7824
7867
|
}
|
|
7825
7868
|
}
|
|
7826
7869
|
else if (options.floating) {
|
|
7827
7870
|
const group = this.createGroup();
|
|
7828
7871
|
this._onDidAddGroup.fire(group);
|
|
7829
|
-
const
|
|
7872
|
+
const coordinates = typeof options.floating === 'object' &&
|
|
7830
7873
|
options.floating !== null
|
|
7831
7874
|
? options.floating
|
|
7832
7875
|
: {};
|
|
7833
|
-
this.addFloatingGroup(group,
|
|
7876
|
+
this.addFloatingGroup(group, coordinates, {
|
|
7834
7877
|
inDragMode: false,
|
|
7835
7878
|
skipRemoveGroup: true,
|
|
7836
7879
|
skipActiveGroup: true,
|
|
7837
7880
|
});
|
|
7838
7881
|
panel = this.createPanel(options, group);
|
|
7839
|
-
group.model.openPanel(panel
|
|
7882
|
+
group.model.openPanel(panel, {
|
|
7883
|
+
skipSetActive: options.inactive,
|
|
7884
|
+
skipSetGroupActive: options.inactive,
|
|
7885
|
+
});
|
|
7840
7886
|
}
|
|
7841
7887
|
else {
|
|
7842
7888
|
const group = this.createGroupAtLocation();
|
|
7843
7889
|
panel = this.createPanel(options, group);
|
|
7844
|
-
group.model.openPanel(panel
|
|
7845
|
-
|
|
7890
|
+
group.model.openPanel(panel, {
|
|
7891
|
+
skipSetActive: options.inactive,
|
|
7892
|
+
skipSetGroupActive: options.inactive,
|
|
7893
|
+
});
|
|
7894
|
+
if (!options.inactive) {
|
|
7895
|
+
this.doSetGroupAndPanelActive(group);
|
|
7896
|
+
}
|
|
7846
7897
|
}
|
|
7847
7898
|
return panel;
|
|
7848
7899
|
}
|
|
@@ -7866,12 +7917,10 @@
|
|
|
7866
7917
|
}
|
|
7867
7918
|
}
|
|
7868
7919
|
createWatermarkComponent() {
|
|
7869
|
-
|
|
7870
|
-
|
|
7871
|
-
|
|
7872
|
-
|
|
7873
|
-
? { 'watermark-name': this.options.watermarkFrameworkComponent }
|
|
7874
|
-
: {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
|
|
7920
|
+
if (this.options.createWatermarkComponent) {
|
|
7921
|
+
return this.options.createWatermarkComponent();
|
|
7922
|
+
}
|
|
7923
|
+
return new Watermark();
|
|
7875
7924
|
}
|
|
7876
7925
|
updateWatermark() {
|
|
7877
7926
|
var _a, _b;
|
|
@@ -8252,6 +8301,8 @@
|
|
|
8252
8301
|
return;
|
|
8253
8302
|
}
|
|
8254
8303
|
this._onWillShowOverlay.fire(event);
|
|
8304
|
+
}), view.model.onUnhandledDragOverEvent((event) => {
|
|
8305
|
+
this._onUnhandledDragOverEvent.fire(event);
|
|
8255
8306
|
}), view.model.onDidAddPanel((event) => {
|
|
8256
8307
|
if (this._moving) {
|
|
8257
8308
|
return;
|
|
@@ -9497,11 +9548,6 @@
|
|
|
9497
9548
|
this.part = new ReactPart(this.element, this.reactPortalStore, this.component, {
|
|
9498
9549
|
group: parameters.group,
|
|
9499
9550
|
containerApi: parameters.containerApi,
|
|
9500
|
-
close: () => {
|
|
9501
|
-
if (parameters.group) {
|
|
9502
|
-
parameters.containerApi.removeGroup(parameters.group);
|
|
9503
|
-
}
|
|
9504
|
-
},
|
|
9505
9551
|
});
|
|
9506
9552
|
}
|
|
9507
9553
|
focus() {
|
|
@@ -9533,9 +9579,6 @@
|
|
|
9533
9579
|
get part() {
|
|
9534
9580
|
return this._part;
|
|
9535
9581
|
}
|
|
9536
|
-
get group() {
|
|
9537
|
-
return this._group;
|
|
9538
|
-
}
|
|
9539
9582
|
constructor(component, reactPortalStore, _group) {
|
|
9540
9583
|
this.component = component;
|
|
9541
9584
|
this.reactPortalStore = reactPortalStore;
|
|
@@ -9546,9 +9589,6 @@
|
|
|
9546
9589
|
this._element.style.height = '100%';
|
|
9547
9590
|
this._element.style.width = '100%';
|
|
9548
9591
|
}
|
|
9549
|
-
focus() {
|
|
9550
|
-
// TODO
|
|
9551
|
-
}
|
|
9552
9592
|
init(parameters) {
|
|
9553
9593
|
this.mutableDisposable.value = new CompositeDisposable(this._group.model.onDidAddPanel(() => {
|
|
9554
9594
|
this.updatePanels();
|
|
@@ -9568,15 +9608,15 @@
|
|
|
9568
9608
|
group: this._group,
|
|
9569
9609
|
});
|
|
9570
9610
|
}
|
|
9571
|
-
update(event) {
|
|
9572
|
-
var _a;
|
|
9573
|
-
(_a = this._part) === null || _a === void 0 ? void 0 : _a.update(event.params);
|
|
9574
|
-
}
|
|
9575
9611
|
dispose() {
|
|
9576
9612
|
var _a;
|
|
9577
9613
|
this.mutableDisposable.dispose();
|
|
9578
9614
|
(_a = this._part) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
9579
9615
|
}
|
|
9616
|
+
update(event) {
|
|
9617
|
+
var _a;
|
|
9618
|
+
(_a = this._part) === null || _a === void 0 ? void 0 : _a.update(event.params);
|
|
9619
|
+
}
|
|
9580
9620
|
updatePanels() {
|
|
9581
9621
|
this.update({ params: { panels: this._group.model.panels } });
|
|
9582
9622
|
}
|
|
@@ -9604,72 +9644,72 @@
|
|
|
9604
9644
|
: undefined;
|
|
9605
9645
|
}
|
|
9606
9646
|
const DEFAULT_REACT_TAB = 'props.defaultTabComponent';
|
|
9647
|
+
function extractCoreOptions(props) {
|
|
9648
|
+
const coreOptions = PROPERTY_KEYS.reduce((obj, key) => {
|
|
9649
|
+
if (key in props) {
|
|
9650
|
+
obj[key] = props[key];
|
|
9651
|
+
}
|
|
9652
|
+
return obj;
|
|
9653
|
+
}, {});
|
|
9654
|
+
return coreOptions;
|
|
9655
|
+
}
|
|
9607
9656
|
const DockviewReact = React.forwardRef((props, ref) => {
|
|
9608
9657
|
const domRef = React.useRef(null);
|
|
9609
9658
|
const dockviewRef = React.useRef();
|
|
9610
9659
|
const [portals, addPortal] = usePortalsLifecycle();
|
|
9611
9660
|
React.useImperativeHandle(ref, () => domRef.current, []);
|
|
9661
|
+
const prevProps = React.useRef({});
|
|
9662
|
+
React.useEffect(() => {
|
|
9663
|
+
const changes = {};
|
|
9664
|
+
PROPERTY_KEYS.forEach((propKey) => {
|
|
9665
|
+
const key = propKey;
|
|
9666
|
+
const propValue = props[key];
|
|
9667
|
+
if (key in props && propValue !== prevProps.current[key]) {
|
|
9668
|
+
changes[key] = propValue;
|
|
9669
|
+
}
|
|
9670
|
+
});
|
|
9671
|
+
if (dockviewRef.current) {
|
|
9672
|
+
dockviewRef.current.updateOptions(changes);
|
|
9673
|
+
}
|
|
9674
|
+
prevProps.current = props;
|
|
9675
|
+
}, PROPERTY_KEYS.map((key) => props[key]));
|
|
9612
9676
|
React.useEffect(() => {
|
|
9613
9677
|
var _a;
|
|
9614
9678
|
if (!domRef.current) {
|
|
9615
|
-
return
|
|
9616
|
-
// noop
|
|
9617
|
-
};
|
|
9679
|
+
return;
|
|
9618
9680
|
}
|
|
9619
|
-
const factory = {
|
|
9620
|
-
content: {
|
|
9621
|
-
createComponent: (_id, componentId, component) => {
|
|
9622
|
-
return new ReactPanelContentPart(componentId, component, {
|
|
9623
|
-
addPortal,
|
|
9624
|
-
});
|
|
9625
|
-
},
|
|
9626
|
-
},
|
|
9627
|
-
tab: {
|
|
9628
|
-
createComponent: (_id, componentId, component) => {
|
|
9629
|
-
return new ReactPanelHeaderPart(componentId, component, {
|
|
9630
|
-
addPortal,
|
|
9631
|
-
});
|
|
9632
|
-
},
|
|
9633
|
-
},
|
|
9634
|
-
watermark: {
|
|
9635
|
-
createComponent: (_id, componentId, component) => {
|
|
9636
|
-
return new ReactWatermarkPart(componentId, component, {
|
|
9637
|
-
addPortal,
|
|
9638
|
-
});
|
|
9639
|
-
},
|
|
9640
|
-
},
|
|
9641
|
-
};
|
|
9642
9681
|
const frameworkTabComponents = (_a = props.tabComponents) !== null && _a !== void 0 ? _a : {};
|
|
9643
9682
|
if (props.defaultTabComponent) {
|
|
9644
9683
|
frameworkTabComponents[DEFAULT_REACT_TAB] =
|
|
9645
9684
|
props.defaultTabComponent;
|
|
9646
9685
|
}
|
|
9647
|
-
const
|
|
9686
|
+
const frameworkOptions = {
|
|
9687
|
+
createLeftHeaderActionComponent: createGroupControlElement(props.leftHeaderActionsComponent, { addPortal }),
|
|
9688
|
+
createRightHeaderActionComponent: createGroupControlElement(props.rightHeaderActionsComponent, { addPortal }),
|
|
9689
|
+
createPrefixHeaderActionComponent: createGroupControlElement(props.prefixHeaderActionsComponent, { addPortal }),
|
|
9690
|
+
createComponent: (options) => {
|
|
9691
|
+
return new ReactPanelContentPart(options.id, props.components[options.name], {
|
|
9692
|
+
addPortal,
|
|
9693
|
+
});
|
|
9694
|
+
},
|
|
9695
|
+
createTabComponent(options) {
|
|
9696
|
+
return new ReactPanelHeaderPart(options.id, frameworkTabComponents[options.name], {
|
|
9697
|
+
addPortal,
|
|
9698
|
+
});
|
|
9699
|
+
},
|
|
9700
|
+
createWatermarkComponent: props.watermarkComponent
|
|
9701
|
+
? () => {
|
|
9702
|
+
return new ReactWatermarkPart('watermark', props.watermarkComponent, {
|
|
9703
|
+
addPortal,
|
|
9704
|
+
});
|
|
9705
|
+
}
|
|
9706
|
+
: undefined,
|
|
9648
9707
|
parentElement: domRef.current,
|
|
9649
|
-
frameworkComponentFactory: factory,
|
|
9650
|
-
frameworkComponents: props.components,
|
|
9651
|
-
disableAutoResizing: props.disableAutoResizing,
|
|
9652
|
-
frameworkTabComponents,
|
|
9653
|
-
watermarkFrameworkComponent: props.watermarkComponent,
|
|
9654
9708
|
defaultTabComponent: props.defaultTabComponent
|
|
9655
9709
|
? DEFAULT_REACT_TAB
|
|
9656
9710
|
: undefined,
|
|
9657
|
-
|
|
9658
|
-
|
|
9659
|
-
: undefined,
|
|
9660
|
-
showDndOverlay: props.showDndOverlay,
|
|
9661
|
-
createLeftHeaderActionsElement: createGroupControlElement(props.leftHeaderActionsComponent, { addPortal }),
|
|
9662
|
-
createRightHeaderActionsElement: createGroupControlElement(props.rightHeaderActionsComponent, { addPortal }),
|
|
9663
|
-
createPrefixHeaderActionsElement: createGroupControlElement(props.prefixHeaderActionsComponent, { addPortal }),
|
|
9664
|
-
singleTabMode: props.singleTabMode,
|
|
9665
|
-
disableFloatingGroups: props.disableFloatingGroups,
|
|
9666
|
-
floatingGroupBounds: props.floatingGroupBounds,
|
|
9667
|
-
defaultRenderer: props.defaultRenderer,
|
|
9668
|
-
debug: props.debug,
|
|
9669
|
-
rootOverlayModel: props.rootOverlayModel,
|
|
9670
|
-
locked: props.locked,
|
|
9671
|
-
disableDnd: props.disableDnd,
|
|
9672
|
-
});
|
|
9711
|
+
};
|
|
9712
|
+
const dockview = new DockviewComponent(Object.assign(Object.assign({}, extractCoreOptions(props)), frameworkOptions));
|
|
9673
9713
|
const { clientWidth, clientHeight } = domRef.current;
|
|
9674
9714
|
dockview.layout(clientWidth, clientHeight);
|
|
9675
9715
|
if (props.onReady) {
|
|
@@ -9680,20 +9720,6 @@
|
|
|
9680
9720
|
dockview.dispose();
|
|
9681
9721
|
};
|
|
9682
9722
|
}, []);
|
|
9683
|
-
React.useEffect(() => {
|
|
9684
|
-
if (!dockviewRef.current) {
|
|
9685
|
-
return;
|
|
9686
|
-
}
|
|
9687
|
-
dockviewRef.current.locked = !!props.locked;
|
|
9688
|
-
}, [props.locked]);
|
|
9689
|
-
React.useEffect(() => {
|
|
9690
|
-
if (!dockviewRef.current) {
|
|
9691
|
-
return;
|
|
9692
|
-
}
|
|
9693
|
-
dockviewRef.current.updateOptions({
|
|
9694
|
-
disableDnd: props.disableDnd,
|
|
9695
|
-
});
|
|
9696
|
-
}, [props.disableDnd]);
|
|
9697
9723
|
React.useEffect(() => {
|
|
9698
9724
|
if (!dockviewRef.current) {
|
|
9699
9725
|
return () => {
|
|
@@ -9715,63 +9741,43 @@
|
|
|
9715
9741
|
// noop
|
|
9716
9742
|
};
|
|
9717
9743
|
}
|
|
9718
|
-
const disposable = dockviewRef.current.
|
|
9719
|
-
|
|
9720
|
-
|
|
9744
|
+
const disposable = dockviewRef.current.onUnhandledDragOverEvent((event) => {
|
|
9745
|
+
var _a;
|
|
9746
|
+
if ((_a = props.showDndOverlay) === null || _a === void 0 ? void 0 : _a.call(props, event)) {
|
|
9747
|
+
event.accept();
|
|
9721
9748
|
}
|
|
9722
9749
|
});
|
|
9723
9750
|
return () => {
|
|
9724
9751
|
disposable.dispose();
|
|
9725
9752
|
};
|
|
9726
|
-
}, [props.onWillDrop]);
|
|
9727
|
-
React.useEffect(() => {
|
|
9728
|
-
if (!dockviewRef.current) {
|
|
9729
|
-
return;
|
|
9730
|
-
}
|
|
9731
|
-
dockviewRef.current.updateOptions({
|
|
9732
|
-
frameworkComponents: props.components,
|
|
9733
|
-
});
|
|
9734
|
-
}, [props.components]);
|
|
9735
|
-
React.useEffect(() => {
|
|
9736
|
-
if (!dockviewRef.current) {
|
|
9737
|
-
return;
|
|
9738
|
-
}
|
|
9739
|
-
dockviewRef.current.updateOptions({
|
|
9740
|
-
floatingGroupBounds: props.floatingGroupBounds,
|
|
9741
|
-
});
|
|
9742
|
-
}, [props.floatingGroupBounds]);
|
|
9743
|
-
React.useEffect(() => {
|
|
9744
|
-
if (!dockviewRef.current) {
|
|
9745
|
-
return;
|
|
9746
|
-
}
|
|
9747
|
-
dockviewRef.current.updateOptions({
|
|
9748
|
-
watermarkFrameworkComponent: props.watermarkComponent,
|
|
9749
|
-
});
|
|
9750
|
-
}, [props.watermarkComponent]);
|
|
9751
|
-
React.useEffect(() => {
|
|
9752
|
-
if (!dockviewRef.current) {
|
|
9753
|
-
return;
|
|
9754
|
-
}
|
|
9755
|
-
dockviewRef.current.updateOptions({
|
|
9756
|
-
showDndOverlay: props.showDndOverlay,
|
|
9757
|
-
});
|
|
9758
9753
|
}, [props.showDndOverlay]);
|
|
9759
9754
|
React.useEffect(() => {
|
|
9760
9755
|
if (!dockviewRef.current) {
|
|
9761
|
-
return
|
|
9756
|
+
return () => {
|
|
9757
|
+
// noop
|
|
9758
|
+
};
|
|
9762
9759
|
}
|
|
9763
|
-
dockviewRef.current.
|
|
9764
|
-
|
|
9760
|
+
const disposable = dockviewRef.current.onWillDrop((event) => {
|
|
9761
|
+
if (props.onWillDrop) {
|
|
9762
|
+
props.onWillDrop(event);
|
|
9763
|
+
}
|
|
9765
9764
|
});
|
|
9766
|
-
|
|
9765
|
+
return () => {
|
|
9766
|
+
disposable.dispose();
|
|
9767
|
+
};
|
|
9768
|
+
}, [props.onWillDrop]);
|
|
9767
9769
|
React.useEffect(() => {
|
|
9768
9770
|
if (!dockviewRef.current) {
|
|
9769
9771
|
return;
|
|
9770
9772
|
}
|
|
9771
9773
|
dockviewRef.current.updateOptions({
|
|
9772
|
-
|
|
9774
|
+
createComponent: (options) => {
|
|
9775
|
+
return new ReactPanelContentPart(options.id, props.components[options.name], {
|
|
9776
|
+
addPortal,
|
|
9777
|
+
});
|
|
9778
|
+
},
|
|
9773
9779
|
});
|
|
9774
|
-
}, [props.
|
|
9780
|
+
}, [props.components]);
|
|
9775
9781
|
React.useEffect(() => {
|
|
9776
9782
|
var _a;
|
|
9777
9783
|
if (!dockviewRef.current) {
|
|
@@ -9786,39 +9792,49 @@
|
|
|
9786
9792
|
defaultTabComponent: props.defaultTabComponent
|
|
9787
9793
|
? DEFAULT_REACT_TAB
|
|
9788
9794
|
: undefined,
|
|
9789
|
-
|
|
9795
|
+
createTabComponent(options) {
|
|
9796
|
+
return new ReactPanelHeaderPart(options.id, frameworkTabComponents[options.name], {
|
|
9797
|
+
addPortal,
|
|
9798
|
+
});
|
|
9799
|
+
},
|
|
9790
9800
|
});
|
|
9791
|
-
}, [props.defaultTabComponent]);
|
|
9801
|
+
}, [props.tabComponents, props.defaultTabComponent]);
|
|
9792
9802
|
React.useEffect(() => {
|
|
9793
9803
|
if (!dockviewRef.current) {
|
|
9794
9804
|
return;
|
|
9795
9805
|
}
|
|
9796
9806
|
dockviewRef.current.updateOptions({
|
|
9797
|
-
|
|
9807
|
+
createWatermarkComponent: props.watermarkComponent
|
|
9808
|
+
? () => {
|
|
9809
|
+
return new ReactWatermarkPart('watermark', props.watermarkComponent, {
|
|
9810
|
+
addPortal,
|
|
9811
|
+
});
|
|
9812
|
+
}
|
|
9813
|
+
: undefined,
|
|
9798
9814
|
});
|
|
9799
|
-
}, [props.
|
|
9815
|
+
}, [props.watermarkComponent]);
|
|
9800
9816
|
React.useEffect(() => {
|
|
9801
9817
|
if (!dockviewRef.current) {
|
|
9802
9818
|
return;
|
|
9803
9819
|
}
|
|
9804
9820
|
dockviewRef.current.updateOptions({
|
|
9805
|
-
|
|
9821
|
+
createRightHeaderActionComponent: createGroupControlElement(props.rightHeaderActionsComponent, { addPortal }),
|
|
9806
9822
|
});
|
|
9807
|
-
}, [props.
|
|
9823
|
+
}, [props.rightHeaderActionsComponent]);
|
|
9808
9824
|
React.useEffect(() => {
|
|
9809
9825
|
if (!dockviewRef.current) {
|
|
9810
9826
|
return;
|
|
9811
9827
|
}
|
|
9812
9828
|
dockviewRef.current.updateOptions({
|
|
9813
|
-
|
|
9829
|
+
createLeftHeaderActionComponent: createGroupControlElement(props.leftHeaderActionsComponent, { addPortal }),
|
|
9814
9830
|
});
|
|
9815
|
-
}, [props.
|
|
9831
|
+
}, [props.leftHeaderActionsComponent]);
|
|
9816
9832
|
React.useEffect(() => {
|
|
9817
9833
|
if (!dockviewRef.current) {
|
|
9818
9834
|
return;
|
|
9819
9835
|
}
|
|
9820
9836
|
dockviewRef.current.updateOptions({
|
|
9821
|
-
|
|
9837
|
+
createPrefixHeaderActionComponent: createGroupControlElement(props.prefixHeaderActionsComponent, { addPortal }),
|
|
9822
9838
|
});
|
|
9823
9839
|
}, [props.prefixHeaderActionsComponent]);
|
|
9824
9840
|
return (React.createElement("div", { className: props.className, style: { height: '100%', width: '100%' }, ref: domRef }, portals));
|
|
@@ -10158,6 +10174,7 @@
|
|
|
10158
10174
|
exports.DockviewMutableDisposable = MutableDisposable;
|
|
10159
10175
|
exports.DockviewPanel = DockviewPanel;
|
|
10160
10176
|
exports.DockviewReact = DockviewReact;
|
|
10177
|
+
exports.DockviewUnhandledDragOverEvent = DockviewUnhandledDragOverEvent;
|
|
10161
10178
|
exports.DockviewWillDropEvent = DockviewWillDropEvent;
|
|
10162
10179
|
exports.DraggablePaneviewPanel = DraggablePaneviewPanel;
|
|
10163
10180
|
exports.Gridview = Gridview;
|
|
@@ -10166,6 +10183,7 @@
|
|
|
10166
10183
|
exports.GridviewPanel = GridviewPanel;
|
|
10167
10184
|
exports.GridviewReact = GridviewReact;
|
|
10168
10185
|
exports.LocalSelectionTransfer = LocalSelectionTransfer;
|
|
10186
|
+
exports.PROPERTY_KEYS = PROPERTY_KEYS;
|
|
10169
10187
|
exports.PaneFramework = PaneFramework;
|
|
10170
10188
|
exports.PaneTransfer = PaneTransfer;
|
|
10171
10189
|
exports.PanelTransfer = PanelTransfer;
|