dockview-vue 6.2.2 → 6.4.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/README.md +1 -0
- package/dist/dockview-vue.cjs.js +55 -1
- package/dist/dockview-vue.es.js +55 -1
- package/dist/dockview-vue.umd.js +55 -1
- package/dist/styles/dockview.css +117 -1
- package/dist/types/dockview/types.d.ts +1 -0
- package/dist/types/utils.d.ts +10 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ Please see the website: https://dockview.dev
|
|
|
26
26
|
- Support for split-views, grid-views and 'dockable' views
|
|
27
27
|
- Themeable and customizable
|
|
28
28
|
- Tab and Group docking / Drag n' Drop
|
|
29
|
+
- Touch & mobile support
|
|
29
30
|
- Popout Windows
|
|
30
31
|
- Floating Groups
|
|
31
32
|
- Edge Groups
|
package/dist/dockview-vue.cjs.js
CHANGED
|
@@ -225,6 +225,32 @@ class VueTabGroupChipRenderer extends AbstractVueRenderer {
|
|
|
225
225
|
this._renderDisposable?.dispose();
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
|
+
class VueGroupDragGhostRenderer extends AbstractVueRenderer {
|
|
229
|
+
_renderDisposable;
|
|
230
|
+
constructor(component, parent) {
|
|
231
|
+
super(component, parent);
|
|
232
|
+
this.element.style.height = "";
|
|
233
|
+
this.element.style.width = "";
|
|
234
|
+
this.element.style.display = "inline-flex";
|
|
235
|
+
}
|
|
236
|
+
init(params) {
|
|
237
|
+
this._renderDisposable?.dispose();
|
|
238
|
+
this._renderDisposable = mountVueComponent(
|
|
239
|
+
this.component,
|
|
240
|
+
this.parent,
|
|
241
|
+
{
|
|
242
|
+
params: {
|
|
243
|
+
group: params.group,
|
|
244
|
+
api: params.api
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
this.element
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
dispose() {
|
|
251
|
+
this._renderDisposable?.dispose();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
228
254
|
class VuePart {
|
|
229
255
|
constructor(element, vueComponent, parent, props) {
|
|
230
256
|
this.element = element;
|
|
@@ -263,12 +289,14 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
263
289
|
disableFloatingGroups: { type: Boolean },
|
|
264
290
|
floatingGroupBounds: {},
|
|
265
291
|
popoutUrl: {},
|
|
292
|
+
nonce: { type: [String, Function] },
|
|
266
293
|
defaultRenderer: {},
|
|
267
294
|
defaultHeaderPosition: {},
|
|
268
295
|
debug: { type: Boolean },
|
|
269
296
|
dndEdges: { type: [Boolean, Object] },
|
|
270
297
|
rootOverlayModel: {},
|
|
271
298
|
disableDnd: { type: Boolean },
|
|
299
|
+
dndStrategy: {},
|
|
272
300
|
locked: { type: Boolean },
|
|
273
301
|
className: {},
|
|
274
302
|
noPanelsOverlay: {},
|
|
@@ -278,6 +306,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
278
306
|
getTabContextMenuItems: { type: Function },
|
|
279
307
|
getTabGroupChipContextMenuItems: { type: Function },
|
|
280
308
|
createTabGroupChipComponent: { type: Function },
|
|
309
|
+
createGroupDragGhostComponent: { type: Function },
|
|
281
310
|
tabGroupColors: {},
|
|
282
311
|
tabGroupAccent: {},
|
|
283
312
|
watermarkComponent: {},
|
|
@@ -285,7 +314,8 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
285
314
|
rightHeaderActionsComponent: {},
|
|
286
315
|
leftHeaderActionsComponent: {},
|
|
287
316
|
prefixHeaderActionsComponent: {},
|
|
288
|
-
tabGroupChipComponent: {}
|
|
317
|
+
tabGroupChipComponent: {},
|
|
318
|
+
groupDragGhostComponent: {}
|
|
289
319
|
},
|
|
290
320
|
emits: ["ready", "didDrop", "willDrop"],
|
|
291
321
|
setup(__props, { emit: __emit }) {
|
|
@@ -325,6 +355,22 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
325
355
|
}
|
|
326
356
|
}
|
|
327
357
|
);
|
|
358
|
+
vue.watch(
|
|
359
|
+
() => props.groupDragGhostComponent,
|
|
360
|
+
(newValue) => {
|
|
361
|
+
if (instance.value) {
|
|
362
|
+
instance.value.updateOptions({
|
|
363
|
+
createGroupDragGhostComponent: newValue ? () => {
|
|
364
|
+
const component = findComponent(inst, newValue);
|
|
365
|
+
return new VueGroupDragGhostRenderer(
|
|
366
|
+
component,
|
|
367
|
+
inst
|
|
368
|
+
);
|
|
369
|
+
} : void 0
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
);
|
|
328
374
|
vue.watch(
|
|
329
375
|
() => props.defaultTabComponent,
|
|
330
376
|
(newValue) => {
|
|
@@ -478,6 +524,13 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
478
524
|
return new VueTabGroupChipRenderer(component, inst);
|
|
479
525
|
};
|
|
480
526
|
}
|
|
527
|
+
if (props.groupDragGhostComponent) {
|
|
528
|
+
const ghostComponentName = props.groupDragGhostComponent;
|
|
529
|
+
coreOptions.createGroupDragGhostComponent = () => {
|
|
530
|
+
const component = findComponent(inst, ghostComponentName);
|
|
531
|
+
return new VueGroupDragGhostRenderer(component, inst);
|
|
532
|
+
};
|
|
533
|
+
}
|
|
481
534
|
const api = dockviewCore.createDockview(el.value, {
|
|
482
535
|
...coreOptions,
|
|
483
536
|
...frameworkOptions
|
|
@@ -796,6 +849,7 @@ exports.GridviewVue = _sfc_main$1;
|
|
|
796
849
|
exports.PaneviewVue = _sfc_main;
|
|
797
850
|
exports.SplitviewVue = _sfc_main$2;
|
|
798
851
|
exports.VueContextMenuItemRenderer = VueContextMenuItemRenderer;
|
|
852
|
+
exports.VueGroupDragGhostRenderer = VueGroupDragGhostRenderer;
|
|
799
853
|
exports.VueHeaderActionsRenderer = VueHeaderActionsRenderer;
|
|
800
854
|
exports.VuePart = VuePart;
|
|
801
855
|
exports.VueRenderer = VueRenderer;
|
package/dist/dockview-vue.es.js
CHANGED
|
@@ -224,6 +224,32 @@ class VueTabGroupChipRenderer extends AbstractVueRenderer {
|
|
|
224
224
|
this._renderDisposable?.dispose();
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
|
+
class VueGroupDragGhostRenderer extends AbstractVueRenderer {
|
|
228
|
+
_renderDisposable;
|
|
229
|
+
constructor(component, parent) {
|
|
230
|
+
super(component, parent);
|
|
231
|
+
this.element.style.height = "";
|
|
232
|
+
this.element.style.width = "";
|
|
233
|
+
this.element.style.display = "inline-flex";
|
|
234
|
+
}
|
|
235
|
+
init(params) {
|
|
236
|
+
this._renderDisposable?.dispose();
|
|
237
|
+
this._renderDisposable = mountVueComponent(
|
|
238
|
+
this.component,
|
|
239
|
+
this.parent,
|
|
240
|
+
{
|
|
241
|
+
params: {
|
|
242
|
+
group: params.group,
|
|
243
|
+
api: params.api
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
this.element
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
dispose() {
|
|
250
|
+
this._renderDisposable?.dispose();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
227
253
|
class VuePart {
|
|
228
254
|
constructor(element, vueComponent, parent, props) {
|
|
229
255
|
this.element = element;
|
|
@@ -262,12 +288,14 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
262
288
|
disableFloatingGroups: { type: Boolean },
|
|
263
289
|
floatingGroupBounds: {},
|
|
264
290
|
popoutUrl: {},
|
|
291
|
+
nonce: { type: [String, Function] },
|
|
265
292
|
defaultRenderer: {},
|
|
266
293
|
defaultHeaderPosition: {},
|
|
267
294
|
debug: { type: Boolean },
|
|
268
295
|
dndEdges: { type: [Boolean, Object] },
|
|
269
296
|
rootOverlayModel: {},
|
|
270
297
|
disableDnd: { type: Boolean },
|
|
298
|
+
dndStrategy: {},
|
|
271
299
|
locked: { type: Boolean },
|
|
272
300
|
className: {},
|
|
273
301
|
noPanelsOverlay: {},
|
|
@@ -277,6 +305,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
277
305
|
getTabContextMenuItems: { type: Function },
|
|
278
306
|
getTabGroupChipContextMenuItems: { type: Function },
|
|
279
307
|
createTabGroupChipComponent: { type: Function },
|
|
308
|
+
createGroupDragGhostComponent: { type: Function },
|
|
280
309
|
tabGroupColors: {},
|
|
281
310
|
tabGroupAccent: {},
|
|
282
311
|
watermarkComponent: {},
|
|
@@ -284,7 +313,8 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
284
313
|
rightHeaderActionsComponent: {},
|
|
285
314
|
leftHeaderActionsComponent: {},
|
|
286
315
|
prefixHeaderActionsComponent: {},
|
|
287
|
-
tabGroupChipComponent: {}
|
|
316
|
+
tabGroupChipComponent: {},
|
|
317
|
+
groupDragGhostComponent: {}
|
|
288
318
|
},
|
|
289
319
|
emits: ["ready", "didDrop", "willDrop"],
|
|
290
320
|
setup(__props, { emit: __emit }) {
|
|
@@ -324,6 +354,22 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
324
354
|
}
|
|
325
355
|
}
|
|
326
356
|
);
|
|
357
|
+
watch(
|
|
358
|
+
() => props.groupDragGhostComponent,
|
|
359
|
+
(newValue) => {
|
|
360
|
+
if (instance.value) {
|
|
361
|
+
instance.value.updateOptions({
|
|
362
|
+
createGroupDragGhostComponent: newValue ? () => {
|
|
363
|
+
const component = findComponent(inst, newValue);
|
|
364
|
+
return new VueGroupDragGhostRenderer(
|
|
365
|
+
component,
|
|
366
|
+
inst
|
|
367
|
+
);
|
|
368
|
+
} : void 0
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
);
|
|
327
373
|
watch(
|
|
328
374
|
() => props.defaultTabComponent,
|
|
329
375
|
(newValue) => {
|
|
@@ -477,6 +523,13 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
477
523
|
return new VueTabGroupChipRenderer(component, inst);
|
|
478
524
|
};
|
|
479
525
|
}
|
|
526
|
+
if (props.groupDragGhostComponent) {
|
|
527
|
+
const ghostComponentName = props.groupDragGhostComponent;
|
|
528
|
+
coreOptions.createGroupDragGhostComponent = () => {
|
|
529
|
+
const component = findComponent(inst, ghostComponentName);
|
|
530
|
+
return new VueGroupDragGhostRenderer(component, inst);
|
|
531
|
+
};
|
|
532
|
+
}
|
|
480
533
|
const api = createDockview(el.value, {
|
|
481
534
|
...coreOptions,
|
|
482
535
|
...frameworkOptions
|
|
@@ -796,6 +849,7 @@ export {
|
|
|
796
849
|
_sfc_main as PaneviewVue,
|
|
797
850
|
_sfc_main$2 as SplitviewVue,
|
|
798
851
|
VueContextMenuItemRenderer,
|
|
852
|
+
VueGroupDragGhostRenderer,
|
|
799
853
|
VueHeaderActionsRenderer,
|
|
800
854
|
VuePart,
|
|
801
855
|
VueRenderer,
|
package/dist/dockview-vue.umd.js
CHANGED
|
@@ -225,6 +225,32 @@
|
|
|
225
225
|
this._renderDisposable?.dispose();
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
|
+
class VueGroupDragGhostRenderer extends AbstractVueRenderer {
|
|
229
|
+
_renderDisposable;
|
|
230
|
+
constructor(component, parent) {
|
|
231
|
+
super(component, parent);
|
|
232
|
+
this.element.style.height = "";
|
|
233
|
+
this.element.style.width = "";
|
|
234
|
+
this.element.style.display = "inline-flex";
|
|
235
|
+
}
|
|
236
|
+
init(params) {
|
|
237
|
+
this._renderDisposable?.dispose();
|
|
238
|
+
this._renderDisposable = mountVueComponent(
|
|
239
|
+
this.component,
|
|
240
|
+
this.parent,
|
|
241
|
+
{
|
|
242
|
+
params: {
|
|
243
|
+
group: params.group,
|
|
244
|
+
api: params.api
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
this.element
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
dispose() {
|
|
251
|
+
this._renderDisposable?.dispose();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
228
254
|
class VuePart {
|
|
229
255
|
constructor(element, vueComponent, parent, props) {
|
|
230
256
|
this.element = element;
|
|
@@ -263,12 +289,14 @@
|
|
|
263
289
|
disableFloatingGroups: { type: Boolean },
|
|
264
290
|
floatingGroupBounds: {},
|
|
265
291
|
popoutUrl: {},
|
|
292
|
+
nonce: { type: [String, Function] },
|
|
266
293
|
defaultRenderer: {},
|
|
267
294
|
defaultHeaderPosition: {},
|
|
268
295
|
debug: { type: Boolean },
|
|
269
296
|
dndEdges: { type: [Boolean, Object] },
|
|
270
297
|
rootOverlayModel: {},
|
|
271
298
|
disableDnd: { type: Boolean },
|
|
299
|
+
dndStrategy: {},
|
|
272
300
|
locked: { type: Boolean },
|
|
273
301
|
className: {},
|
|
274
302
|
noPanelsOverlay: {},
|
|
@@ -278,6 +306,7 @@
|
|
|
278
306
|
getTabContextMenuItems: { type: Function },
|
|
279
307
|
getTabGroupChipContextMenuItems: { type: Function },
|
|
280
308
|
createTabGroupChipComponent: { type: Function },
|
|
309
|
+
createGroupDragGhostComponent: { type: Function },
|
|
281
310
|
tabGroupColors: {},
|
|
282
311
|
tabGroupAccent: {},
|
|
283
312
|
watermarkComponent: {},
|
|
@@ -285,7 +314,8 @@
|
|
|
285
314
|
rightHeaderActionsComponent: {},
|
|
286
315
|
leftHeaderActionsComponent: {},
|
|
287
316
|
prefixHeaderActionsComponent: {},
|
|
288
|
-
tabGroupChipComponent: {}
|
|
317
|
+
tabGroupChipComponent: {},
|
|
318
|
+
groupDragGhostComponent: {}
|
|
289
319
|
},
|
|
290
320
|
emits: ["ready", "didDrop", "willDrop"],
|
|
291
321
|
setup(__props, { emit: __emit }) {
|
|
@@ -325,6 +355,22 @@
|
|
|
325
355
|
}
|
|
326
356
|
}
|
|
327
357
|
);
|
|
358
|
+
vue.watch(
|
|
359
|
+
() => props.groupDragGhostComponent,
|
|
360
|
+
(newValue) => {
|
|
361
|
+
if (instance.value) {
|
|
362
|
+
instance.value.updateOptions({
|
|
363
|
+
createGroupDragGhostComponent: newValue ? () => {
|
|
364
|
+
const component = findComponent(inst, newValue);
|
|
365
|
+
return new VueGroupDragGhostRenderer(
|
|
366
|
+
component,
|
|
367
|
+
inst
|
|
368
|
+
);
|
|
369
|
+
} : void 0
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
);
|
|
328
374
|
vue.watch(
|
|
329
375
|
() => props.defaultTabComponent,
|
|
330
376
|
(newValue) => {
|
|
@@ -478,6 +524,13 @@
|
|
|
478
524
|
return new VueTabGroupChipRenderer(component, inst);
|
|
479
525
|
};
|
|
480
526
|
}
|
|
527
|
+
if (props.groupDragGhostComponent) {
|
|
528
|
+
const ghostComponentName = props.groupDragGhostComponent;
|
|
529
|
+
coreOptions.createGroupDragGhostComponent = () => {
|
|
530
|
+
const component = findComponent(inst, ghostComponentName);
|
|
531
|
+
return new VueGroupDragGhostRenderer(component, inst);
|
|
532
|
+
};
|
|
533
|
+
}
|
|
481
534
|
const api = dockviewCore.createDockview(el.value, {
|
|
482
535
|
...coreOptions,
|
|
483
536
|
...frameworkOptions
|
|
@@ -796,6 +849,7 @@
|
|
|
796
849
|
exports2.PaneviewVue = _sfc_main;
|
|
797
850
|
exports2.SplitviewVue = _sfc_main$2;
|
|
798
851
|
exports2.VueContextMenuItemRenderer = VueContextMenuItemRenderer;
|
|
852
|
+
exports2.VueGroupDragGhostRenderer = VueGroupDragGhostRenderer;
|
|
799
853
|
exports2.VueHeaderActionsRenderer = VueHeaderActionsRenderer;
|
|
800
854
|
exports2.VuePart = VuePart;
|
|
801
855
|
exports2.VueRenderer = VueRenderer;
|
package/dist/styles/dockview.css
CHANGED
|
@@ -2344,6 +2344,16 @@
|
|
|
2344
2344
|
/* Enhanced GPU acceleration during drag */
|
|
2345
2345
|
will-change: transform, opacity;
|
|
2346
2346
|
}
|
|
2347
|
+
.dv-resize-container .dv-resize-handle-top,
|
|
2348
|
+
.dv-resize-container .dv-resize-handle-bottom,
|
|
2349
|
+
.dv-resize-container .dv-resize-handle-left,
|
|
2350
|
+
.dv-resize-container .dv-resize-handle-right,
|
|
2351
|
+
.dv-resize-container .dv-resize-handle-topleft,
|
|
2352
|
+
.dv-resize-container .dv-resize-handle-topright,
|
|
2353
|
+
.dv-resize-container .dv-resize-handle-bottomleft,
|
|
2354
|
+
.dv-resize-container .dv-resize-handle-bottomright {
|
|
2355
|
+
touch-action: none;
|
|
2356
|
+
}
|
|
2347
2357
|
.dv-resize-container .dv-resize-handle-top {
|
|
2348
2358
|
height: 4px;
|
|
2349
2359
|
width: calc(100% - 8px);
|
|
@@ -2416,6 +2426,55 @@
|
|
|
2416
2426
|
position: absolute;
|
|
2417
2427
|
cursor: se-resize;
|
|
2418
2428
|
}
|
|
2429
|
+
@media (pointer: coarse) {
|
|
2430
|
+
.dv-resize-container .dv-resize-handle-top,
|
|
2431
|
+
.dv-resize-container .dv-resize-handle-bottom {
|
|
2432
|
+
height: 16px;
|
|
2433
|
+
width: calc(100% - 48px);
|
|
2434
|
+
left: 24px;
|
|
2435
|
+
}
|
|
2436
|
+
.dv-resize-container .dv-resize-handle-top {
|
|
2437
|
+
top: -10px;
|
|
2438
|
+
}
|
|
2439
|
+
.dv-resize-container .dv-resize-handle-bottom {
|
|
2440
|
+
bottom: -10px;
|
|
2441
|
+
}
|
|
2442
|
+
.dv-resize-container .dv-resize-handle-left,
|
|
2443
|
+
.dv-resize-container .dv-resize-handle-right {
|
|
2444
|
+
width: 16px;
|
|
2445
|
+
height: calc(100% - 48px);
|
|
2446
|
+
top: 24px;
|
|
2447
|
+
}
|
|
2448
|
+
.dv-resize-container .dv-resize-handle-left {
|
|
2449
|
+
left: -10px;
|
|
2450
|
+
}
|
|
2451
|
+
.dv-resize-container .dv-resize-handle-right {
|
|
2452
|
+
right: -10px;
|
|
2453
|
+
}
|
|
2454
|
+
.dv-resize-container .dv-resize-handle-topleft,
|
|
2455
|
+
.dv-resize-container .dv-resize-handle-topright,
|
|
2456
|
+
.dv-resize-container .dv-resize-handle-bottomleft,
|
|
2457
|
+
.dv-resize-container .dv-resize-handle-bottomright {
|
|
2458
|
+
height: 24px;
|
|
2459
|
+
width: 24px;
|
|
2460
|
+
}
|
|
2461
|
+
.dv-resize-container .dv-resize-handle-topleft {
|
|
2462
|
+
top: -12px;
|
|
2463
|
+
left: -12px;
|
|
2464
|
+
}
|
|
2465
|
+
.dv-resize-container .dv-resize-handle-topright {
|
|
2466
|
+
top: -12px;
|
|
2467
|
+
right: -12px;
|
|
2468
|
+
}
|
|
2469
|
+
.dv-resize-container .dv-resize-handle-bottomleft {
|
|
2470
|
+
bottom: -12px;
|
|
2471
|
+
left: -12px;
|
|
2472
|
+
}
|
|
2473
|
+
.dv-resize-container .dv-resize-handle-bottomright {
|
|
2474
|
+
bottom: -12px;
|
|
2475
|
+
right: -12px;
|
|
2476
|
+
}
|
|
2477
|
+
}
|
|
2419
2478
|
.dv-render-overlay {
|
|
2420
2479
|
--dv-overlay-z-index: var(--dv-overlay-z-index, 999);
|
|
2421
2480
|
position: absolute;
|
|
@@ -2633,6 +2692,25 @@
|
|
|
2633
2692
|
transition-duration: var(--dv-active-sash-transition-duration, 0.1s);
|
|
2634
2693
|
transition-delay: var(--dv-active-sash-transition-delay, 0.5s);
|
|
2635
2694
|
}
|
|
2695
|
+
@media (pointer: coarse) {
|
|
2696
|
+
.dv-split-view-container .dv-sash-container > .dv-sash:not(.dv-disabled)::before {
|
|
2697
|
+
content: "";
|
|
2698
|
+
position: absolute;
|
|
2699
|
+
background: transparent;
|
|
2700
|
+
}
|
|
2701
|
+
.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {
|
|
2702
|
+
top: 0;
|
|
2703
|
+
bottom: 0;
|
|
2704
|
+
left: -10px;
|
|
2705
|
+
right: -10px;
|
|
2706
|
+
}
|
|
2707
|
+
.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {
|
|
2708
|
+
left: 0;
|
|
2709
|
+
right: 0;
|
|
2710
|
+
top: -10px;
|
|
2711
|
+
bottom: -10px;
|
|
2712
|
+
}
|
|
2713
|
+
}
|
|
2636
2714
|
.dv-split-view-container .dv-view-container {
|
|
2637
2715
|
position: relative;
|
|
2638
2716
|
height: 100%;
|
|
@@ -2704,6 +2782,11 @@
|
|
|
2704
2782
|
.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action {
|
|
2705
2783
|
visibility: visible;
|
|
2706
2784
|
}
|
|
2785
|
+
@media (hover: none) {
|
|
2786
|
+
.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action {
|
|
2787
|
+
visibility: visible;
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2707
2790
|
.dv-tab .dv-default-tab {
|
|
2708
2791
|
position: relative;
|
|
2709
2792
|
height: 100%;
|
|
@@ -2728,6 +2811,11 @@
|
|
|
2728
2811
|
border-radius: 2px;
|
|
2729
2812
|
background-color: var(--dv-icon-hover-background-color);
|
|
2730
2813
|
}
|
|
2814
|
+
@media (pointer: coarse) {
|
|
2815
|
+
.dv-tab .dv-default-tab .dv-default-tab-action {
|
|
2816
|
+
padding: 8px;
|
|
2817
|
+
}
|
|
2818
|
+
}
|
|
2731
2819
|
.dv-tabs-overflow-dropdown-default {
|
|
2732
2820
|
height: 100%;
|
|
2733
2821
|
color: var(--dv-activegroup-hiddenpanel-tab-color);
|
|
@@ -2748,6 +2836,7 @@
|
|
|
2748
2836
|
border-radius: 2px;
|
|
2749
2837
|
background-color: var(--dv-icon-hover-background-color);
|
|
2750
2838
|
}
|
|
2839
|
+
@charset "UTF-8";
|
|
2751
2840
|
.dv-tabs-container {
|
|
2752
2841
|
display: flex;
|
|
2753
2842
|
position: relative;
|
|
@@ -2757,12 +2846,29 @@
|
|
|
2757
2846
|
/* GPU optimizations for smooth scrolling */
|
|
2758
2847
|
will-change: scroll-position;
|
|
2759
2848
|
transform: translate3d(0, 0, 0);
|
|
2849
|
+
/**
|
|
2850
|
+
* Stop scroll-chaining at the tab strip so that wheel / trackpad
|
|
2851
|
+
* overscroll past the strip's edges doesn't trigger the browser's
|
|
2852
|
+
* swipe-to-go-back-or-forward gesture (and doesn't scroll the page
|
|
2853
|
+
* either). `contain` keeps the native bounce visuals; `none` would
|
|
2854
|
+
* also disable them.
|
|
2855
|
+
*/
|
|
2856
|
+
overscroll-behavior: contain;
|
|
2857
|
+
/**
|
|
2858
|
+
* Empty space between tabs (and the scrollbar lane) keeps pan-x so a
|
|
2859
|
+
* flick on those areas produces native momentum scroll. The tab and
|
|
2860
|
+
* chip elements themselves opt out (`touch-action: none`) so the
|
|
2861
|
+
* pointer drag source owns the gesture from pointerdown — a flick on
|
|
2862
|
+
* a tab or chip always becomes a drag, regardless of direction.
|
|
2863
|
+
*/
|
|
2864
|
+
touch-action: pan-x;
|
|
2760
2865
|
}
|
|
2761
2866
|
.dv-tabs-container.dv-tabs-container-vertical {
|
|
2762
2867
|
width: 100%;
|
|
2763
2868
|
height: fit-content;
|
|
2764
2869
|
max-height: 100%;
|
|
2765
2870
|
writing-mode: vertical-rl;
|
|
2871
|
+
touch-action: pan-y;
|
|
2766
2872
|
}
|
|
2767
2873
|
.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before, .dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {
|
|
2768
2874
|
content: " ";
|
|
@@ -2802,7 +2908,10 @@
|
|
|
2802
2908
|
}
|
|
2803
2909
|
|
|
2804
2910
|
.dv-tab {
|
|
2805
|
-
|
|
2911
|
+
user-select: none;
|
|
2912
|
+
-webkit-user-select: none;
|
|
2913
|
+
-moz-user-select: none;
|
|
2914
|
+
-ms-user-select: none;
|
|
2806
2915
|
outline: none;
|
|
2807
2916
|
padding: 0.25rem 0.5rem;
|
|
2808
2917
|
cursor: pointer;
|
|
@@ -2810,6 +2919,7 @@
|
|
|
2810
2919
|
box-sizing: border-box;
|
|
2811
2920
|
font-size: var(--dv-tab-font-size);
|
|
2812
2921
|
margin: var(--dv-tab-margin);
|
|
2922
|
+
touch-action: none;
|
|
2813
2923
|
}
|
|
2814
2924
|
.dv-tab.dv-tab--shifting {
|
|
2815
2925
|
will-change: transform, margin-left, margin-right, margin-top, margin-bottom;
|
|
@@ -2860,6 +2970,7 @@
|
|
|
2860
2970
|
white-space: nowrap;
|
|
2861
2971
|
box-sizing: border-box;
|
|
2862
2972
|
line-height: 1;
|
|
2973
|
+
touch-action: none;
|
|
2863
2974
|
background-color: var(--dv-tab-group-color);
|
|
2864
2975
|
color: white;
|
|
2865
2976
|
}
|
|
@@ -3037,6 +3148,11 @@
|
|
|
3037
3148
|
.dv-tabs-and-actions-container .dv-void-container {
|
|
3038
3149
|
display: flex;
|
|
3039
3150
|
flex-grow: 1;
|
|
3151
|
+
user-select: none;
|
|
3152
|
+
-webkit-user-select: none;
|
|
3153
|
+
-moz-user-select: none;
|
|
3154
|
+
-ms-user-select: none;
|
|
3155
|
+
touch-action: none;
|
|
3040
3156
|
}
|
|
3041
3157
|
.dv-tabs-and-actions-container .dv-void-container.dv-draggable {
|
|
3042
3158
|
cursor: grab;
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DockviewApi, DockviewGroupPanel, IContentRenderer, IGroupHeaderProps, IHeaderActionsRenderer, ITabGroupChipRenderer, ITabGroup, ITabRenderer, IWatermarkRenderer, IContextMenuItemRenderer, IContextMenuItemComponentProps, PanelUpdateEvent, Parameters, TabPartInitParameters, WatermarkRendererInitParameters } from 'dockview-core';
|
|
1
|
+
import type { DockviewApi, DockviewGroupPanel, IContentRenderer, IDockviewGroupPanel, IGroupDragGhostRenderer, IGroupHeaderProps, IHeaderActionsRenderer, ITabGroupChipRenderer, ITabGroup, ITabRenderer, IWatermarkRenderer, IContextMenuItemRenderer, IContextMenuItemComponentProps, PanelUpdateEvent, Parameters, TabPartInitParameters, WatermarkRendererInitParameters } from 'dockview-core';
|
|
2
2
|
import { type ComponentOptionsBase, type DefineComponent, type ComponentInternalInstance } from 'vue';
|
|
3
3
|
export type ComponentInterface = ComponentOptionsBase<any, any, any, any, any, any, any, any>;
|
|
4
4
|
export type VueComponent<T = any> = DefineComponent<T>;
|
|
@@ -64,6 +64,15 @@ export declare class VueTabGroupChipRenderer extends AbstractVueRenderer impleme
|
|
|
64
64
|
}): void;
|
|
65
65
|
dispose(): void;
|
|
66
66
|
}
|
|
67
|
+
export declare class VueGroupDragGhostRenderer extends AbstractVueRenderer implements IGroupDragGhostRenderer {
|
|
68
|
+
private _renderDisposable;
|
|
69
|
+
constructor(component: VueComponent, parent: ComponentInternalInstance);
|
|
70
|
+
init(params: {
|
|
71
|
+
group: IDockviewGroupPanel;
|
|
72
|
+
api: DockviewApi;
|
|
73
|
+
}): void;
|
|
74
|
+
dispose(): void;
|
|
75
|
+
}
|
|
67
76
|
export declare class VuePart<T extends Record<string, any> = any> {
|
|
68
77
|
private readonly element;
|
|
69
78
|
private readonly vueComponent;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dockview-vue",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0",
|
|
4
4
|
"description": "Vue 3 docking layout manager — tabs, groups, grids, splitviews, drag and drop, floating panels",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"splitview",
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"drag-and-drop",
|
|
21
21
|
"drag",
|
|
22
22
|
"drop",
|
|
23
|
+
"touch",
|
|
24
|
+
"mobile",
|
|
23
25
|
"typescript",
|
|
24
26
|
"zero-dependency",
|
|
25
27
|
"ide-layout",
|
|
@@ -67,7 +69,7 @@
|
|
|
67
69
|
"format:check": "prettier --check 'src/**/*.{ts,tsx,js,jsx,vue}'"
|
|
68
70
|
},
|
|
69
71
|
"dependencies": {
|
|
70
|
-
"dockview-core": "^6.
|
|
72
|
+
"dockview-core": "^6.4.0"
|
|
71
73
|
},
|
|
72
74
|
"peerDependencies": {
|
|
73
75
|
"vue": "^3.4.0"
|