dockview-core 6.6.0 → 7.0.2
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/README.md +8 -1
- package/dist/cjs/api/component.api.d.ts +42 -21
- package/dist/cjs/api/component.api.js +111 -20
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +23 -8
- package/dist/cjs/api/dockviewGroupPanelApi.js +23 -0
- package/dist/cjs/api/dockviewPanelApi.d.ts +4 -3
- package/dist/cjs/api/dockviewPanelApi.js +8 -0
- package/dist/cjs/dnd/droptarget.d.ts +8 -0
- package/dist/cjs/dnd/droptarget.js +28 -0
- package/dist/cjs/dockview/accessibilityMessages.d.ts +32 -0
- package/dist/cjs/dockview/accessibilityMessages.js +51 -0
- package/dist/cjs/dockview/allModules.d.ts +8 -0
- package/dist/cjs/dockview/allModules.js +25 -0
- package/dist/cjs/dockview/components/panel/content.d.ts +2 -0
- package/dist/cjs/dockview/components/panel/content.js +35 -4
- package/dist/cjs/dockview/components/tab/tab.js +33 -5
- package/dist/cjs/dockview/components/titlebar/floatingTitleBar.d.ts +35 -0
- package/dist/cjs/dockview/components/titlebar/floatingTitleBar.js +95 -0
- package/dist/cjs/dockview/components/titlebar/groupDragSource.d.ts +52 -0
- package/dist/cjs/dockview/components/titlebar/groupDragSource.js +218 -0
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.d.ts +2 -1
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.js +31 -24
- package/dist/cjs/dockview/components/titlebar/tabGroups.js +1 -0
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +12 -0
- package/dist/cjs/dockview/components/titlebar/tabs.js +105 -2
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +4 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +13 -3
- package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +1 -4
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +31 -155
- package/dist/cjs/dockview/dockviewComponent.d.ts +299 -44
- package/dist/cjs/dockview/dockviewComponent.js +1787 -993
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +33 -2
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +39 -3
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +0 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +36 -14
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +133 -101
- package/dist/cjs/dockview/dockviewPanel.d.ts +2 -2
- package/dist/cjs/dockview/edgeGroupService.d.ts +38 -0
- package/dist/cjs/dockview/edgeGroupService.js +128 -0
- package/dist/cjs/dockview/floatingGroupService.d.ts +37 -0
- package/dist/cjs/dockview/floatingGroupService.js +231 -0
- package/dist/cjs/dockview/headerActionsService.d.ts +32 -0
- package/dist/cjs/dockview/headerActionsService.js +149 -0
- package/dist/cjs/dockview/liveRegionService.d.ts +53 -0
- package/dist/cjs/dockview/liveRegionService.js +185 -0
- package/dist/cjs/dockview/moduleContracts.d.ts +119 -0
- package/dist/cjs/dockview/moduleContracts.js +2 -0
- package/dist/cjs/dockview/modules.d.ts +110 -0
- package/dist/cjs/dockview/modules.js +304 -0
- package/dist/cjs/dockview/options.d.ts +159 -6
- package/dist/cjs/dockview/options.js +8 -1
- package/dist/cjs/dockview/popoutWindowService.d.ts +95 -0
- package/dist/cjs/dockview/popoutWindowService.js +261 -0
- package/dist/cjs/dockview/rootDropTargetService.d.ts +35 -0
- package/dist/cjs/dockview/rootDropTargetService.js +87 -0
- package/dist/cjs/dockview/watermarkService.d.ts +30 -0
- package/dist/cjs/dockview/watermarkService.js +61 -0
- package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -1
- package/dist/cjs/gridview/baseComponentGridview.js +3 -2
- package/dist/cjs/gridview/gridviewComponent.d.ts +3 -3
- package/dist/cjs/gridview/gridviewPanel.d.ts +1 -1
- package/dist/cjs/index.d.ts +11 -4
- package/dist/cjs/index.js +14 -1
- package/dist/cjs/overlay/overlay.d.ts +43 -1
- package/dist/cjs/overlay/overlay.js +57 -8
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/cjs/paneview/draggablePaneviewPanel.js +4 -4
- package/dist/cjs/paneview/paneviewComponent.d.ts +3 -3
- package/dist/cjs/paneview/paneviewComponent.js +5 -5
- package/dist/dockview-core.js +3199 -1251
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.js.map +1 -1
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.min.noStyle.js.map +1 -1
- package/dist/dockview-core.noStyle.js +3198 -1250
- package/dist/esm/api/component.api.d.ts +42 -21
- package/dist/esm/api/component.api.js +63 -18
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +23 -8
- package/dist/esm/api/dockviewGroupPanelApi.js +19 -0
- package/dist/esm/api/dockviewPanelApi.d.ts +4 -3
- package/dist/esm/api/dockviewPanelApi.js +7 -0
- package/dist/esm/dnd/droptarget.d.ts +8 -0
- package/dist/esm/dnd/droptarget.js +28 -0
- package/dist/esm/dockview/accessibilityMessages.d.ts +32 -0
- package/dist/esm/dockview/accessibilityMessages.js +30 -0
- package/dist/esm/dockview/allModules.d.ts +8 -0
- package/dist/esm/dockview/allModules.js +22 -0
- package/dist/esm/dockview/components/panel/content.d.ts +2 -0
- package/dist/esm/dockview/components/panel/content.js +36 -5
- package/dist/esm/dockview/components/tab/tab.js +33 -5
- package/dist/esm/dockview/components/titlebar/floatingTitleBar.d.ts +35 -0
- package/dist/esm/dockview/components/titlebar/floatingTitleBar.js +65 -0
- package/dist/esm/dockview/components/titlebar/groupDragSource.d.ts +52 -0
- package/dist/esm/dockview/components/titlebar/groupDragSource.js +178 -0
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.d.ts +2 -1
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.js +31 -24
- package/dist/esm/dockview/components/titlebar/tabGroups.js +1 -0
- package/dist/esm/dockview/components/titlebar/tabs.d.ts +12 -0
- package/dist/esm/dockview/components/titlebar/tabs.js +102 -2
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +4 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +8 -2
- package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +1 -4
- package/dist/esm/dockview/components/titlebar/voidContainer.js +33 -145
- package/dist/esm/dockview/dockviewComponent.d.ts +299 -44
- package/dist/esm/dockview/dockviewComponent.js +1421 -717
- package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +33 -2
- package/dist/esm/dockview/dockviewFloatingGroupPanel.js +35 -3
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +0 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +36 -14
- package/dist/esm/dockview/dockviewGroupPanelModel.js +109 -93
- package/dist/esm/dockview/dockviewPanel.d.ts +2 -2
- package/dist/esm/dockview/edgeGroupService.d.ts +38 -0
- package/dist/esm/dockview/edgeGroupService.js +63 -0
- package/dist/esm/dockview/floatingGroupService.d.ts +37 -0
- package/dist/esm/dockview/floatingGroupService.js +150 -0
- package/dist/esm/dockview/headerActionsService.d.ts +32 -0
- package/dist/esm/dockview/headerActionsService.js +86 -0
- package/dist/esm/dockview/liveRegionService.d.ts +53 -0
- package/dist/esm/dockview/liveRegionService.js +159 -0
- package/dist/esm/dockview/moduleContracts.d.ts +119 -0
- package/dist/esm/dockview/moduleContracts.js +1 -0
- package/dist/esm/dockview/modules.d.ts +110 -0
- package/dist/esm/dockview/modules.js +170 -0
- package/dist/esm/dockview/options.d.ts +159 -6
- package/dist/esm/dockview/options.js +8 -1
- package/dist/esm/dockview/popoutWindowService.d.ts +95 -0
- package/dist/esm/dockview/popoutWindowService.js +175 -0
- package/dist/esm/dockview/rootDropTargetService.d.ts +35 -0
- package/dist/esm/dockview/rootDropTargetService.js +82 -0
- package/dist/esm/dockview/watermarkService.d.ts +30 -0
- package/dist/esm/dockview/watermarkService.js +56 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +1 -1
- package/dist/esm/gridview/baseComponentGridview.js +2 -2
- package/dist/esm/gridview/gridviewComponent.d.ts +3 -3
- package/dist/esm/gridview/gridviewPanel.d.ts +1 -1
- package/dist/esm/index.d.ts +11 -4
- package/dist/esm/index.js +4 -0
- package/dist/esm/overlay/overlay.d.ts +43 -1
- package/dist/esm/overlay/overlay.js +53 -8
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/esm/paneview/draggablePaneviewPanel.js +4 -4
- package/dist/esm/paneview/paneviewComponent.d.ts +3 -3
- package/dist/esm/paneview/paneviewComponent.js +5 -5
- package/dist/package/main.cjs.js +3234 -1286
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +3189 -1252
- package/dist/styles/dockview.css +275 -13
- package/package.json +10 -1
- package/dist/cjs/dockview/contextMenu.d.ts +0 -10
- package/dist/cjs/dockview/contextMenu.js +0 -313
- package/dist/esm/dockview/contextMenu.d.ts +0 -10
- package/dist/esm/dockview/contextMenu.js +0 -228
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { DockviewComponent } from './dockviewComponent';
|
|
2
|
-
import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
3
|
-
import { IDockviewPanel } from './dockviewPanel';
|
|
4
|
-
import { ITabGroup } from './tabGroup';
|
|
5
|
-
export declare class ContextMenuController {
|
|
6
|
-
private readonly accessor;
|
|
7
|
-
constructor(accessor: DockviewComponent);
|
|
8
|
-
show(panel: IDockviewPanel, group: DockviewGroupPanel, event: MouseEvent): void;
|
|
9
|
-
showForChip(tabGroup: ITabGroup, group: DockviewGroupPanel, event: MouseEvent): void;
|
|
10
|
-
}
|
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __values = (this && this.__values) || function(o) {
|
|
3
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
-
if (m) return m.call(o);
|
|
5
|
-
if (o && typeof o.length === "number") return {
|
|
6
|
-
next: function () {
|
|
7
|
-
if (o && i >= o.length) o = void 0;
|
|
8
|
-
return { value: o && o[i++], done: !o };
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
-
};
|
|
13
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
-
if (!m) return o;
|
|
16
|
-
var i = m.call(o), r, ar = [], e;
|
|
17
|
-
try {
|
|
18
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
-
}
|
|
20
|
-
catch (error) { e = { error: error }; }
|
|
21
|
-
finally {
|
|
22
|
-
try {
|
|
23
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
-
}
|
|
25
|
-
finally { if (e) throw e.error; }
|
|
26
|
-
}
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
30
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
31
|
-
if (ar || !(i in from)) {
|
|
32
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
33
|
-
ar[i] = from[i];
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.ContextMenuController = void 0;
|
|
40
|
-
var dom_1 = require("../dom");
|
|
41
|
-
function popoverZIndexFor(target) {
|
|
42
|
-
if (!(target instanceof HTMLElement)) {
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
// Floating overlays live in the shell as siblings of the popover anchor
|
|
46
|
-
// and the AriaLevelTracker sets their inline z-index. Without this, a
|
|
47
|
-
// popover opened from inside a floating group would render behind it
|
|
48
|
-
// because they share the shell stacking context.
|
|
49
|
-
var relativeParent = (0, dom_1.findRelativeZIndexParent)(target);
|
|
50
|
-
return (relativeParent === null || relativeParent === void 0 ? void 0 : relativeParent.style.zIndex)
|
|
51
|
-
? "calc(".concat(relativeParent.style.zIndex, " * 2)")
|
|
52
|
-
: undefined;
|
|
53
|
-
}
|
|
54
|
-
var _nextId = 0;
|
|
55
|
-
var nextContextMenuItemId = function () { return "dv-ctx-menu-item-".concat(_nextId++); };
|
|
56
|
-
function isItemConfig(item) {
|
|
57
|
-
return typeof item === 'object';
|
|
58
|
-
}
|
|
59
|
-
function buildItem(label, close, action, disabled) {
|
|
60
|
-
var el = document.createElement('div');
|
|
61
|
-
el.className = 'dv-context-menu-item';
|
|
62
|
-
el.setAttribute('role', 'menuitem');
|
|
63
|
-
if (disabled) {
|
|
64
|
-
el.classList.add('dv-context-menu-item--disabled');
|
|
65
|
-
el.setAttribute('aria-disabled', 'true');
|
|
66
|
-
}
|
|
67
|
-
el.textContent = label;
|
|
68
|
-
if (!disabled) {
|
|
69
|
-
el.addEventListener('click', function () {
|
|
70
|
-
action();
|
|
71
|
-
close();
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return el;
|
|
75
|
-
}
|
|
76
|
-
function buildSeparator() {
|
|
77
|
-
var el = document.createElement('div');
|
|
78
|
-
el.className = 'dv-context-menu-separator';
|
|
79
|
-
el.setAttribute('role', 'separator');
|
|
80
|
-
return el;
|
|
81
|
-
}
|
|
82
|
-
function isCoarsePrimaryInput() {
|
|
83
|
-
if (typeof window === 'undefined' || !window.matchMedia) {
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
var coarse = window.matchMedia('(pointer: coarse)').matches;
|
|
87
|
-
var fine = window.matchMedia('(pointer: fine)').matches;
|
|
88
|
-
return coarse && !fine;
|
|
89
|
-
}
|
|
90
|
-
function buildRenameInput(tabGroup) {
|
|
91
|
-
var wrapper = document.createElement('div');
|
|
92
|
-
wrapper.className = 'dv-context-menu-rename';
|
|
93
|
-
var input = document.createElement('input');
|
|
94
|
-
input.className = 'dv-context-menu-rename-input';
|
|
95
|
-
input.type = 'text';
|
|
96
|
-
input.placeholder = 'Name This Group';
|
|
97
|
-
input.value = tabGroup.label;
|
|
98
|
-
input.addEventListener('input', function () {
|
|
99
|
-
tabGroup.setLabel(input.value);
|
|
100
|
-
});
|
|
101
|
-
input.addEventListener('keydown', function (e) {
|
|
102
|
-
if (e.key !== 'Escape' && e.key !== 'Enter') {
|
|
103
|
-
e.stopPropagation();
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
input.addEventListener('click', function (e) {
|
|
107
|
-
e.stopPropagation();
|
|
108
|
-
});
|
|
109
|
-
wrapper.appendChild(input);
|
|
110
|
-
// Skip auto-focus on touch-primary devices: focusing the input pops the
|
|
111
|
-
// on-screen keyboard, which fires `window resize`, which `PopupService`
|
|
112
|
-
// listens to and uses to dismiss the popover — so the menu opens, the
|
|
113
|
-
// keyboard appears, and the menu immediately closes before the user can
|
|
114
|
-
// type. The user can still tap the input to focus it intentionally.
|
|
115
|
-
if (!isCoarsePrimaryInput()) {
|
|
116
|
-
requestAnimationFrame(function () {
|
|
117
|
-
input.focus();
|
|
118
|
-
input.select();
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
return wrapper;
|
|
122
|
-
}
|
|
123
|
-
function buildColorPicker(tabGroup, palette) {
|
|
124
|
-
var e_1, _a;
|
|
125
|
-
var wrapper = document.createElement('div');
|
|
126
|
-
wrapper.className = 'dv-context-menu-color-picker';
|
|
127
|
-
if (!palette.enabled) {
|
|
128
|
-
// Opt-out: render no swatches. Returning a wrapper rather than null
|
|
129
|
-
// keeps the call site simple; the wrapper is empty and visually inert.
|
|
130
|
-
return wrapper;
|
|
131
|
-
}
|
|
132
|
-
var _loop_1 = function (entry) {
|
|
133
|
-
var swatch = document.createElement('div');
|
|
134
|
-
swatch.className = 'dv-context-menu-color-swatch';
|
|
135
|
-
// Use a CSS custom property rather than setting `backgroundColor`
|
|
136
|
-
// directly: the IDL setter validates the value against a color
|
|
137
|
-
// grammar and rejects `var(...)` references in some environments
|
|
138
|
-
// (notably jsdom; some browsers have historically had similar
|
|
139
|
-
// quirks). The matching SCSS rule reads the var at use time.
|
|
140
|
-
swatch.style.setProperty('--dv-tab-group-color', entry.value);
|
|
141
|
-
if (entry.label) {
|
|
142
|
-
swatch.title = entry.label;
|
|
143
|
-
}
|
|
144
|
-
if (tabGroup.color === entry.id) {
|
|
145
|
-
swatch.classList.add('dv-context-menu-color-swatch--selected');
|
|
146
|
-
}
|
|
147
|
-
swatch.addEventListener('click', function () {
|
|
148
|
-
tabGroup.setColor(entry.id);
|
|
149
|
-
});
|
|
150
|
-
wrapper.appendChild(swatch);
|
|
151
|
-
};
|
|
152
|
-
try {
|
|
153
|
-
for (var _b = __values(palette.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
154
|
-
var entry = _c.value;
|
|
155
|
-
_loop_1(entry);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
159
|
-
finally {
|
|
160
|
-
try {
|
|
161
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
162
|
-
}
|
|
163
|
-
finally { if (e_1) throw e_1.error; }
|
|
164
|
-
}
|
|
165
|
-
return wrapper;
|
|
166
|
-
}
|
|
167
|
-
var ContextMenuController = /** @class */ (function () {
|
|
168
|
-
function ContextMenuController(accessor) {
|
|
169
|
-
this.accessor = accessor;
|
|
170
|
-
}
|
|
171
|
-
ContextMenuController.prototype.show = function (panel, group, event) {
|
|
172
|
-
var e_2, _a;
|
|
173
|
-
var _b, _c;
|
|
174
|
-
if (!this.accessor.options.getTabContextMenuItems) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
var items = this.accessor.options.getTabContextMenuItems({
|
|
178
|
-
panel: panel,
|
|
179
|
-
group: group,
|
|
180
|
-
api: this.accessor.api,
|
|
181
|
-
event: event,
|
|
182
|
-
});
|
|
183
|
-
if (items.length === 0) {
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
event.preventDefault();
|
|
187
|
-
var popupService = this.accessor.getPopupServiceForGroup(group);
|
|
188
|
-
var close = function () { return popupService.close(); };
|
|
189
|
-
var menuEl = document.createElement('div');
|
|
190
|
-
menuEl.className = 'dv-context-menu';
|
|
191
|
-
menuEl.setAttribute('role', 'menu');
|
|
192
|
-
var _loop_2 = function (item) {
|
|
193
|
-
if (item === 'separator') {
|
|
194
|
-
menuEl.appendChild(buildSeparator());
|
|
195
|
-
}
|
|
196
|
-
else if (item === 'close') {
|
|
197
|
-
menuEl.appendChild(buildItem('Close', close, function () { return panel.api.close(); }));
|
|
198
|
-
}
|
|
199
|
-
else if (item === 'closeOthers') {
|
|
200
|
-
menuEl.appendChild(buildItem('Close Others', close, function () {
|
|
201
|
-
group.panels
|
|
202
|
-
.filter(function (p) { return p !== panel; })
|
|
203
|
-
.forEach(function (p) { return p.api.close(); });
|
|
204
|
-
}));
|
|
205
|
-
}
|
|
206
|
-
else if (item === 'closeAll') {
|
|
207
|
-
menuEl.appendChild(buildItem('Close All', close, function () {
|
|
208
|
-
__spreadArray([], __read(group.panels), false).forEach(function (p) { return p.api.close(); });
|
|
209
|
-
}));
|
|
210
|
-
}
|
|
211
|
-
else if (isItemConfig(item) && item.element) {
|
|
212
|
-
menuEl.appendChild(item.element);
|
|
213
|
-
}
|
|
214
|
-
else if (isItemConfig(item) && item.component) {
|
|
215
|
-
var renderer = (_c = (_b = this_1.accessor.options).createContextMenuItemComponent) === null || _c === void 0 ? void 0 : _c.call(_b, {
|
|
216
|
-
id: nextContextMenuItemId(),
|
|
217
|
-
component: item.component,
|
|
218
|
-
});
|
|
219
|
-
if (renderer) {
|
|
220
|
-
renderer.init({
|
|
221
|
-
panel: panel,
|
|
222
|
-
group: group,
|
|
223
|
-
api: this_1.accessor.api,
|
|
224
|
-
close: close,
|
|
225
|
-
componentProps: item.componentProps,
|
|
226
|
-
});
|
|
227
|
-
menuEl.appendChild(renderer.element);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
else if (isItemConfig(item) && item.label) {
|
|
231
|
-
menuEl.appendChild(buildItem(item.label, close, function () { var _a; return (_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item); }, item.disabled));
|
|
232
|
-
}
|
|
233
|
-
};
|
|
234
|
-
var this_1 = this;
|
|
235
|
-
try {
|
|
236
|
-
for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
|
|
237
|
-
var item = items_1_1.value;
|
|
238
|
-
_loop_2(item);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
242
|
-
finally {
|
|
243
|
-
try {
|
|
244
|
-
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
|
|
245
|
-
}
|
|
246
|
-
finally { if (e_2) throw e_2.error; }
|
|
247
|
-
}
|
|
248
|
-
popupService.openPopover(menuEl, {
|
|
249
|
-
x: event.clientX,
|
|
250
|
-
y: event.clientY,
|
|
251
|
-
zIndex: popoverZIndexFor(event.target),
|
|
252
|
-
});
|
|
253
|
-
};
|
|
254
|
-
ContextMenuController.prototype.showForChip = function (tabGroup, group, event) {
|
|
255
|
-
var e_3, _a;
|
|
256
|
-
if (!this.accessor.options.getTabGroupChipContextMenuItems) {
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
var items = this.accessor.options.getTabGroupChipContextMenuItems({
|
|
260
|
-
tabGroup: tabGroup,
|
|
261
|
-
group: group,
|
|
262
|
-
api: this.accessor.api,
|
|
263
|
-
event: event,
|
|
264
|
-
});
|
|
265
|
-
if (items.length === 0) {
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
event.preventDefault();
|
|
269
|
-
var popupService = this.accessor.getPopupServiceForGroup(group);
|
|
270
|
-
var close = function () { return popupService.close(); };
|
|
271
|
-
var menuEl = document.createElement('div');
|
|
272
|
-
menuEl.className = 'dv-context-menu';
|
|
273
|
-
menuEl.setAttribute('role', 'menu');
|
|
274
|
-
var _loop_3 = function (item) {
|
|
275
|
-
if (item === 'separator') {
|
|
276
|
-
menuEl.appendChild(buildSeparator());
|
|
277
|
-
}
|
|
278
|
-
else if (item === 'rename') {
|
|
279
|
-
menuEl.appendChild(buildRenameInput(tabGroup));
|
|
280
|
-
}
|
|
281
|
-
else if (item === 'colorPicker') {
|
|
282
|
-
menuEl.appendChild(buildColorPicker(tabGroup, this_2.accessor.tabGroupColorPalette));
|
|
283
|
-
}
|
|
284
|
-
else if (isItemConfig(item) && item.element) {
|
|
285
|
-
menuEl.appendChild(item.element);
|
|
286
|
-
}
|
|
287
|
-
else if (isItemConfig(item) && item.label) {
|
|
288
|
-
menuEl.appendChild(buildItem(item.label, close, function () { var _a; return (_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item); }, item.disabled));
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
var this_2 = this;
|
|
292
|
-
try {
|
|
293
|
-
for (var items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
|
|
294
|
-
var item = items_2_1.value;
|
|
295
|
-
_loop_3(item);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
299
|
-
finally {
|
|
300
|
-
try {
|
|
301
|
-
if (items_2_1 && !items_2_1.done && (_a = items_2.return)) _a.call(items_2);
|
|
302
|
-
}
|
|
303
|
-
finally { if (e_3) throw e_3.error; }
|
|
304
|
-
}
|
|
305
|
-
popupService.openPopover(menuEl, {
|
|
306
|
-
x: event.clientX,
|
|
307
|
-
y: event.clientY,
|
|
308
|
-
zIndex: popoverZIndexFor(event.target),
|
|
309
|
-
});
|
|
310
|
-
};
|
|
311
|
-
return ContextMenuController;
|
|
312
|
-
}());
|
|
313
|
-
exports.ContextMenuController = ContextMenuController;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { DockviewComponent } from './dockviewComponent';
|
|
2
|
-
import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
3
|
-
import { IDockviewPanel } from './dockviewPanel';
|
|
4
|
-
import { ITabGroup } from './tabGroup';
|
|
5
|
-
export declare class ContextMenuController {
|
|
6
|
-
private readonly accessor;
|
|
7
|
-
constructor(accessor: DockviewComponent);
|
|
8
|
-
show(panel: IDockviewPanel, group: DockviewGroupPanel, event: MouseEvent): void;
|
|
9
|
-
showForChip(tabGroup: ITabGroup, group: DockviewGroupPanel, event: MouseEvent): void;
|
|
10
|
-
}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import { findRelativeZIndexParent } from '../dom';
|
|
2
|
-
function popoverZIndexFor(target) {
|
|
3
|
-
if (!(target instanceof HTMLElement)) {
|
|
4
|
-
return undefined;
|
|
5
|
-
}
|
|
6
|
-
// Floating overlays live in the shell as siblings of the popover anchor
|
|
7
|
-
// and the AriaLevelTracker sets their inline z-index. Without this, a
|
|
8
|
-
// popover opened from inside a floating group would render behind it
|
|
9
|
-
// because they share the shell stacking context.
|
|
10
|
-
const relativeParent = findRelativeZIndexParent(target);
|
|
11
|
-
return (relativeParent === null || relativeParent === void 0 ? void 0 : relativeParent.style.zIndex)
|
|
12
|
-
? `calc(${relativeParent.style.zIndex} * 2)`
|
|
13
|
-
: undefined;
|
|
14
|
-
}
|
|
15
|
-
let _nextId = 0;
|
|
16
|
-
const nextContextMenuItemId = () => `dv-ctx-menu-item-${_nextId++}`;
|
|
17
|
-
function isItemConfig(item) {
|
|
18
|
-
return typeof item === 'object';
|
|
19
|
-
}
|
|
20
|
-
function buildItem(label, close, action, disabled) {
|
|
21
|
-
const el = document.createElement('div');
|
|
22
|
-
el.className = 'dv-context-menu-item';
|
|
23
|
-
el.setAttribute('role', 'menuitem');
|
|
24
|
-
if (disabled) {
|
|
25
|
-
el.classList.add('dv-context-menu-item--disabled');
|
|
26
|
-
el.setAttribute('aria-disabled', 'true');
|
|
27
|
-
}
|
|
28
|
-
el.textContent = label;
|
|
29
|
-
if (!disabled) {
|
|
30
|
-
el.addEventListener('click', () => {
|
|
31
|
-
action();
|
|
32
|
-
close();
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return el;
|
|
36
|
-
}
|
|
37
|
-
function buildSeparator() {
|
|
38
|
-
const el = document.createElement('div');
|
|
39
|
-
el.className = 'dv-context-menu-separator';
|
|
40
|
-
el.setAttribute('role', 'separator');
|
|
41
|
-
return el;
|
|
42
|
-
}
|
|
43
|
-
function isCoarsePrimaryInput() {
|
|
44
|
-
if (typeof window === 'undefined' || !window.matchMedia) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
const coarse = window.matchMedia('(pointer: coarse)').matches;
|
|
48
|
-
const fine = window.matchMedia('(pointer: fine)').matches;
|
|
49
|
-
return coarse && !fine;
|
|
50
|
-
}
|
|
51
|
-
function buildRenameInput(tabGroup) {
|
|
52
|
-
const wrapper = document.createElement('div');
|
|
53
|
-
wrapper.className = 'dv-context-menu-rename';
|
|
54
|
-
const input = document.createElement('input');
|
|
55
|
-
input.className = 'dv-context-menu-rename-input';
|
|
56
|
-
input.type = 'text';
|
|
57
|
-
input.placeholder = 'Name This Group';
|
|
58
|
-
input.value = tabGroup.label;
|
|
59
|
-
input.addEventListener('input', () => {
|
|
60
|
-
tabGroup.setLabel(input.value);
|
|
61
|
-
});
|
|
62
|
-
input.addEventListener('keydown', (e) => {
|
|
63
|
-
if (e.key !== 'Escape' && e.key !== 'Enter') {
|
|
64
|
-
e.stopPropagation();
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
input.addEventListener('click', (e) => {
|
|
68
|
-
e.stopPropagation();
|
|
69
|
-
});
|
|
70
|
-
wrapper.appendChild(input);
|
|
71
|
-
// Skip auto-focus on touch-primary devices: focusing the input pops the
|
|
72
|
-
// on-screen keyboard, which fires `window resize`, which `PopupService`
|
|
73
|
-
// listens to and uses to dismiss the popover — so the menu opens, the
|
|
74
|
-
// keyboard appears, and the menu immediately closes before the user can
|
|
75
|
-
// type. The user can still tap the input to focus it intentionally.
|
|
76
|
-
if (!isCoarsePrimaryInput()) {
|
|
77
|
-
requestAnimationFrame(() => {
|
|
78
|
-
input.focus();
|
|
79
|
-
input.select();
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
return wrapper;
|
|
83
|
-
}
|
|
84
|
-
function buildColorPicker(tabGroup, palette) {
|
|
85
|
-
const wrapper = document.createElement('div');
|
|
86
|
-
wrapper.className = 'dv-context-menu-color-picker';
|
|
87
|
-
if (!palette.enabled) {
|
|
88
|
-
// Opt-out: render no swatches. Returning a wrapper rather than null
|
|
89
|
-
// keeps the call site simple; the wrapper is empty and visually inert.
|
|
90
|
-
return wrapper;
|
|
91
|
-
}
|
|
92
|
-
for (const entry of palette.entries()) {
|
|
93
|
-
const swatch = document.createElement('div');
|
|
94
|
-
swatch.className = 'dv-context-menu-color-swatch';
|
|
95
|
-
// Use a CSS custom property rather than setting `backgroundColor`
|
|
96
|
-
// directly: the IDL setter validates the value against a color
|
|
97
|
-
// grammar and rejects `var(...)` references in some environments
|
|
98
|
-
// (notably jsdom; some browsers have historically had similar
|
|
99
|
-
// quirks). The matching SCSS rule reads the var at use time.
|
|
100
|
-
swatch.style.setProperty('--dv-tab-group-color', entry.value);
|
|
101
|
-
if (entry.label) {
|
|
102
|
-
swatch.title = entry.label;
|
|
103
|
-
}
|
|
104
|
-
if (tabGroup.color === entry.id) {
|
|
105
|
-
swatch.classList.add('dv-context-menu-color-swatch--selected');
|
|
106
|
-
}
|
|
107
|
-
swatch.addEventListener('click', () => {
|
|
108
|
-
tabGroup.setColor(entry.id);
|
|
109
|
-
});
|
|
110
|
-
wrapper.appendChild(swatch);
|
|
111
|
-
}
|
|
112
|
-
return wrapper;
|
|
113
|
-
}
|
|
114
|
-
export class ContextMenuController {
|
|
115
|
-
constructor(accessor) {
|
|
116
|
-
this.accessor = accessor;
|
|
117
|
-
}
|
|
118
|
-
show(panel, group, event) {
|
|
119
|
-
var _a, _b;
|
|
120
|
-
if (!this.accessor.options.getTabContextMenuItems) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
const items = this.accessor.options.getTabContextMenuItems({
|
|
124
|
-
panel,
|
|
125
|
-
group,
|
|
126
|
-
api: this.accessor.api,
|
|
127
|
-
event,
|
|
128
|
-
});
|
|
129
|
-
if (items.length === 0) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
event.preventDefault();
|
|
133
|
-
const popupService = this.accessor.getPopupServiceForGroup(group);
|
|
134
|
-
const close = () => popupService.close();
|
|
135
|
-
const menuEl = document.createElement('div');
|
|
136
|
-
menuEl.className = 'dv-context-menu';
|
|
137
|
-
menuEl.setAttribute('role', 'menu');
|
|
138
|
-
for (const item of items) {
|
|
139
|
-
if (item === 'separator') {
|
|
140
|
-
menuEl.appendChild(buildSeparator());
|
|
141
|
-
}
|
|
142
|
-
else if (item === 'close') {
|
|
143
|
-
menuEl.appendChild(buildItem('Close', close, () => panel.api.close()));
|
|
144
|
-
}
|
|
145
|
-
else if (item === 'closeOthers') {
|
|
146
|
-
menuEl.appendChild(buildItem('Close Others', close, () => {
|
|
147
|
-
group.panels
|
|
148
|
-
.filter((p) => p !== panel)
|
|
149
|
-
.forEach((p) => p.api.close());
|
|
150
|
-
}));
|
|
151
|
-
}
|
|
152
|
-
else if (item === 'closeAll') {
|
|
153
|
-
menuEl.appendChild(buildItem('Close All', close, () => {
|
|
154
|
-
[...group.panels].forEach((p) => p.api.close());
|
|
155
|
-
}));
|
|
156
|
-
}
|
|
157
|
-
else if (isItemConfig(item) && item.element) {
|
|
158
|
-
menuEl.appendChild(item.element);
|
|
159
|
-
}
|
|
160
|
-
else if (isItemConfig(item) && item.component) {
|
|
161
|
-
const renderer = (_b = (_a = this.accessor.options).createContextMenuItemComponent) === null || _b === void 0 ? void 0 : _b.call(_a, {
|
|
162
|
-
id: nextContextMenuItemId(),
|
|
163
|
-
component: item.component,
|
|
164
|
-
});
|
|
165
|
-
if (renderer) {
|
|
166
|
-
renderer.init({
|
|
167
|
-
panel,
|
|
168
|
-
group,
|
|
169
|
-
api: this.accessor.api,
|
|
170
|
-
close,
|
|
171
|
-
componentProps: item.componentProps,
|
|
172
|
-
});
|
|
173
|
-
menuEl.appendChild(renderer.element);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else if (isItemConfig(item) && item.label) {
|
|
177
|
-
menuEl.appendChild(buildItem(item.label, close, () => { var _a; return (_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item); }, item.disabled));
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
popupService.openPopover(menuEl, {
|
|
181
|
-
x: event.clientX,
|
|
182
|
-
y: event.clientY,
|
|
183
|
-
zIndex: popoverZIndexFor(event.target),
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
showForChip(tabGroup, group, event) {
|
|
187
|
-
if (!this.accessor.options.getTabGroupChipContextMenuItems) {
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
const items = this.accessor.options.getTabGroupChipContextMenuItems({
|
|
191
|
-
tabGroup,
|
|
192
|
-
group,
|
|
193
|
-
api: this.accessor.api,
|
|
194
|
-
event,
|
|
195
|
-
});
|
|
196
|
-
if (items.length === 0) {
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
event.preventDefault();
|
|
200
|
-
const popupService = this.accessor.getPopupServiceForGroup(group);
|
|
201
|
-
const close = () => popupService.close();
|
|
202
|
-
const menuEl = document.createElement('div');
|
|
203
|
-
menuEl.className = 'dv-context-menu';
|
|
204
|
-
menuEl.setAttribute('role', 'menu');
|
|
205
|
-
for (const item of items) {
|
|
206
|
-
if (item === 'separator') {
|
|
207
|
-
menuEl.appendChild(buildSeparator());
|
|
208
|
-
}
|
|
209
|
-
else if (item === 'rename') {
|
|
210
|
-
menuEl.appendChild(buildRenameInput(tabGroup));
|
|
211
|
-
}
|
|
212
|
-
else if (item === 'colorPicker') {
|
|
213
|
-
menuEl.appendChild(buildColorPicker(tabGroup, this.accessor.tabGroupColorPalette));
|
|
214
|
-
}
|
|
215
|
-
else if (isItemConfig(item) && item.element) {
|
|
216
|
-
menuEl.appendChild(item.element);
|
|
217
|
-
}
|
|
218
|
-
else if (isItemConfig(item) && item.label) {
|
|
219
|
-
menuEl.appendChild(buildItem(item.label, close, () => { var _a; return (_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item); }, item.disabled));
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
popupService.openPopover(menuEl, {
|
|
223
|
-
x: event.clientX,
|
|
224
|
-
y: event.clientY,
|
|
225
|
-
zIndex: popoverZIndexFor(event.target),
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
}
|