dockview-core 3.2.0 → 4.0.1

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.
Files changed (110) hide show
  1. package/dist/cjs/api/component.api.d.ts +0 -2
  2. package/dist/cjs/api/component.api.js +0 -10
  3. package/dist/cjs/dnd/abstractDragHandler.js +4 -2
  4. package/dist/cjs/dnd/dropTargetAnchorContainer.d.ts +16 -0
  5. package/dist/cjs/dnd/dropTargetAnchorContainer.js +105 -0
  6. package/dist/cjs/dnd/droptarget.d.ts +16 -0
  7. package/dist/cjs/dnd/droptarget.js +138 -14
  8. package/dist/cjs/dnd/ghost.d.ts +4 -1
  9. package/dist/cjs/dnd/ghost.js +3 -2
  10. package/dist/cjs/dnd/groupDragHandler.js +3 -1
  11. package/dist/cjs/dockview/components/panel/content.js +10 -13
  12. package/dist/cjs/dockview/components/popupService.d.ts +13 -0
  13. package/dist/cjs/dockview/components/popupService.js +76 -0
  14. package/dist/cjs/dockview/components/tab/tab.js +17 -7
  15. package/dist/cjs/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
  16. package/dist/cjs/dockview/components/titlebar/tabOverflowControl.js +20 -0
  17. package/dist/cjs/dockview/components/titlebar/tabs.d.ts +45 -0
  18. package/dist/cjs/dockview/components/titlebar/tabs.js +288 -0
  19. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +8 -9
  20. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +108 -152
  21. package/dist/cjs/dockview/components/titlebar/voidContainer.js +2 -9
  22. package/dist/cjs/dockview/dockviewComponent.d.ts +10 -3
  23. package/dist/cjs/dockview/dockviewComponent.js +71 -30
  24. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +4 -0
  25. package/dist/cjs/dockview/dockviewGroupPanelModel.js +31 -0
  26. package/dist/cjs/dockview/dockviewPanelModel.d.ts +5 -3
  27. package/dist/cjs/dockview/dockviewPanelModel.js +25 -4
  28. package/dist/cjs/dockview/framework.d.ts +4 -1
  29. package/dist/cjs/dockview/options.d.ts +8 -5
  30. package/dist/cjs/dockview/options.js +3 -1
  31. package/dist/cjs/dockview/theme.d.ts +31 -0
  32. package/dist/cjs/dockview/theme.js +42 -0
  33. package/dist/cjs/dockview/types.d.ts +5 -1
  34. package/dist/cjs/dom.d.ts +1 -0
  35. package/dist/cjs/dom.js +15 -1
  36. package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -0
  37. package/dist/cjs/index.d.ts +1 -0
  38. package/dist/cjs/index.js +1 -0
  39. package/dist/cjs/paneview/paneviewComponent.js +1 -0
  40. package/dist/cjs/scrollbar.d.ts +12 -0
  41. package/dist/cjs/scrollbar.js +106 -0
  42. package/dist/cjs/splitview/splitview.js +1 -0
  43. package/dist/cjs/splitview/splitviewComponent.js +1 -0
  44. package/dist/dockview-core.amd.js +930 -293
  45. package/dist/dockview-core.amd.js.map +1 -1
  46. package/dist/dockview-core.amd.min.js +2 -2
  47. package/dist/dockview-core.amd.min.js.map +1 -1
  48. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  49. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  50. package/dist/dockview-core.amd.noStyle.js +929 -292
  51. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  52. package/dist/dockview-core.cjs.js +930 -293
  53. package/dist/dockview-core.cjs.js.map +1 -1
  54. package/dist/dockview-core.esm.js +923 -294
  55. package/dist/dockview-core.esm.js.map +1 -1
  56. package/dist/dockview-core.esm.min.js +2 -2
  57. package/dist/dockview-core.esm.min.js.map +1 -1
  58. package/dist/dockview-core.js +930 -293
  59. package/dist/dockview-core.js.map +1 -1
  60. package/dist/dockview-core.min.js +2 -2
  61. package/dist/dockview-core.min.js.map +1 -1
  62. package/dist/dockview-core.min.noStyle.js +2 -2
  63. package/dist/dockview-core.min.noStyle.js.map +1 -1
  64. package/dist/dockview-core.noStyle.js +929 -292
  65. package/dist/dockview-core.noStyle.js.map +1 -1
  66. package/dist/esm/api/component.api.d.ts +0 -2
  67. package/dist/esm/api/component.api.js +0 -6
  68. package/dist/esm/dnd/abstractDragHandler.js +4 -2
  69. package/dist/esm/dnd/dropTargetAnchorContainer.d.ts +16 -0
  70. package/dist/esm/dnd/dropTargetAnchorContainer.js +74 -0
  71. package/dist/esm/dnd/droptarget.d.ts +16 -0
  72. package/dist/esm/dnd/droptarget.js +134 -14
  73. package/dist/esm/dnd/ghost.d.ts +4 -1
  74. package/dist/esm/dnd/ghost.js +3 -2
  75. package/dist/esm/dnd/groupDragHandler.js +3 -1
  76. package/dist/esm/dockview/components/panel/content.js +10 -13
  77. package/dist/esm/dockview/components/popupService.d.ts +13 -0
  78. package/dist/esm/dockview/components/popupService.js +53 -0
  79. package/dist/esm/dockview/components/tab/tab.js +15 -7
  80. package/dist/esm/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
  81. package/dist/esm/dockview/components/titlebar/tabOverflowControl.js +16 -0
  82. package/dist/esm/dockview/components/titlebar/tabs.d.ts +45 -0
  83. package/dist/esm/dockview/components/titlebar/tabs.js +183 -0
  84. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +8 -9
  85. package/dist/esm/dockview/components/titlebar/tabsContainer.js +133 -162
  86. package/dist/esm/dockview/components/titlebar/voidContainer.js +2 -9
  87. package/dist/esm/dockview/dockviewComponent.d.ts +10 -3
  88. package/dist/esm/dockview/dockviewComponent.js +69 -24
  89. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +4 -0
  90. package/dist/esm/dockview/dockviewGroupPanelModel.js +27 -0
  91. package/dist/esm/dockview/dockviewPanelModel.d.ts +5 -3
  92. package/dist/esm/dockview/dockviewPanelModel.js +14 -4
  93. package/dist/esm/dockview/framework.d.ts +4 -1
  94. package/dist/esm/dockview/options.d.ts +8 -5
  95. package/dist/esm/dockview/options.js +3 -1
  96. package/dist/esm/dockview/theme.d.ts +31 -0
  97. package/dist/esm/dockview/theme.js +39 -0
  98. package/dist/esm/dockview/types.d.ts +5 -1
  99. package/dist/esm/dom.d.ts +1 -0
  100. package/dist/esm/dom.js +13 -0
  101. package/dist/esm/gridview/baseComponentGridview.d.ts +3 -0
  102. package/dist/esm/index.d.ts +1 -0
  103. package/dist/esm/index.js +1 -0
  104. package/dist/esm/paneview/paneviewComponent.js +1 -0
  105. package/dist/esm/scrollbar.d.ts +12 -0
  106. package/dist/esm/scrollbar.js +80 -0
  107. package/dist/esm/splitview/splitview.js +1 -0
  108. package/dist/esm/splitview/splitviewComponent.js +1 -0
  109. package/dist/styles/dockview.css +423 -69
  110. package/package.json +1 -1
@@ -13,6 +13,7 @@ import { DockviewDndOverlayEvent } from './options';
13
13
  import { OverlayRenderContainer } from '../overlay/overlayRenderContainer';
14
14
  import { TitleEvent } from '../api/dockviewPanelApi';
15
15
  import { Contraints } from '../gridview/gridviewPanel';
16
+ import { DropTargetAnchorContainer } from '../dnd/dropTargetAnchorContainer';
16
17
  interface GroupMoveEvent {
17
18
  groupId: string;
18
19
  itemId?: string;
@@ -160,6 +161,7 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
160
161
  private _location;
161
162
  private mostRecentlyUsed;
162
163
  private _overwriteRenderContainer;
164
+ private _overwriteDropTargetContainer;
163
165
  private readonly _onDidChange;
164
166
  readonly onDidChange: Event<IViewSize | undefined>;
165
167
  private _width;
@@ -208,6 +210,8 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
208
210
  focusContent(): void;
209
211
  set renderContainer(value: OverlayRenderContainer | null);
210
212
  get renderContainer(): OverlayRenderContainer;
213
+ set dropTargetContainer(value: DropTargetAnchorContainer | null);
214
+ get dropTargetContainer(): DropTargetAnchorContainer | null;
211
215
  initialize(): void;
212
216
  rerender(panel: IDockviewPanel): void;
213
217
  indexOf(panel: IDockviewPanel): number;
@@ -203,6 +203,7 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
203
203
  _this._location = { type: 'grid' };
204
204
  _this.mostRecentlyUsed = [];
205
205
  _this._overwriteRenderContainer = null;
206
+ _this._overwriteDropTargetContainer = null;
206
207
  _this._onDidChange = new events_1.Emitter();
207
208
  _this.onDidChange = _this._onDidChange.event;
208
209
  _this._width = 0;
@@ -400,6 +401,17 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
400
401
  enumerable: false,
401
402
  configurable: true
402
403
  });
404
+ Object.defineProperty(DockviewGroupPanelModel.prototype, "dropTargetContainer", {
405
+ get: function () {
406
+ var _a;
407
+ return ((_a = this._overwriteDropTargetContainer) !== null && _a !== void 0 ? _a : this.accessor.rootDropTargetContainer);
408
+ },
409
+ set: function (value) {
410
+ this._overwriteDropTargetContainer = value;
411
+ },
412
+ enumerable: false,
413
+ configurable: true
414
+ });
403
415
  DockviewGroupPanelModel.prototype.initialize = function () {
404
416
  var _this = this;
405
417
  if (this.options.panels) {
@@ -771,6 +783,25 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
771
783
  }
772
784
  var data = (0, dataTransfer_1.getPanelData)();
773
785
  if (data && data.viewId === this.accessor.id) {
786
+ if (type === 'content') {
787
+ if (data.groupId === this.id) {
788
+ // don't allow to drop on self for center position
789
+ if (position === 'center') {
790
+ return;
791
+ }
792
+ if (data.panelId === null) {
793
+ // don't allow group move to drop anywhere on self
794
+ return;
795
+ }
796
+ }
797
+ }
798
+ if (type === 'header') {
799
+ if (data.groupId === this.id) {
800
+ if (data.panelId === null) {
801
+ return;
802
+ }
803
+ }
804
+ }
774
805
  if (data.panelId === null) {
775
806
  // this is a group move dnd event
776
807
  var groupId_1 = data.groupId;
@@ -1,8 +1,8 @@
1
1
  import { GroupPanelPartInitParameters, IContentRenderer, ITabRenderer } from './types';
2
- import { DockviewGroupPanel } from './dockviewGroupPanel';
3
2
  import { IDisposable } from '../lifecycle';
4
3
  import { IDockviewComponent } from './dockviewComponent';
5
4
  import { PanelUpdateEvent } from '../panel/types';
5
+ import { TabLocation } from './framework';
6
6
  export interface IDockviewPanelModel extends IDisposable {
7
7
  readonly contentComponent: string;
8
8
  readonly tabComponent?: string;
@@ -11,7 +11,7 @@ export interface IDockviewPanelModel extends IDisposable {
11
11
  update(event: PanelUpdateEvent): void;
12
12
  layout(width: number, height: number): void;
13
13
  init(params: GroupPanelPartInitParameters): void;
14
- updateParentGroup(group: DockviewGroupPanel, isPanelVisible: boolean): void;
14
+ createTabRenderer(tabLocation: TabLocation): ITabRenderer;
15
15
  }
16
16
  export declare class DockviewPanelModel implements IDockviewPanelModel {
17
17
  private readonly accessor;
@@ -20,11 +20,13 @@ export declare class DockviewPanelModel implements IDockviewPanelModel {
20
20
  readonly tabComponent?: string | undefined;
21
21
  private readonly _content;
22
22
  private readonly _tab;
23
+ private _params;
24
+ private _updateEvent;
23
25
  get content(): IContentRenderer;
24
26
  get tab(): ITabRenderer;
25
27
  constructor(accessor: IDockviewComponent, id: string, contentComponent: string, tabComponent?: string | undefined);
28
+ createTabRenderer(tabLocation: TabLocation): ITabRenderer;
26
29
  init(params: GroupPanelPartInitParameters): void;
27
- updateParentGroup(_group: DockviewGroupPanel, _isPanelVisible: boolean): void;
28
30
  layout(width: number, height: number): void;
29
31
  update(event: PanelUpdateEvent): void;
30
32
  dispose(): void;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  exports.DockviewPanelModel = void 0;
4
15
  var defaultTab_1 = require("./components/tab/defaultTab");
@@ -25,12 +36,21 @@ var DockviewPanelModel = /** @class */ (function () {
25
36
  enumerable: false,
26
37
  configurable: true
27
38
  });
39
+ DockviewPanelModel.prototype.createTabRenderer = function (tabLocation) {
40
+ var _a;
41
+ var cmp = this.createTabComponent(this.id, this.tabComponent);
42
+ if (this._params) {
43
+ cmp.init(__assign(__assign({}, this._params), { tabLocation: tabLocation }));
44
+ }
45
+ if (this._updateEvent) {
46
+ (_a = cmp.update) === null || _a === void 0 ? void 0 : _a.call(cmp, this._updateEvent);
47
+ }
48
+ return cmp;
49
+ };
28
50
  DockviewPanelModel.prototype.init = function (params) {
51
+ this._params = params;
29
52
  this.content.init(params);
30
- this.tab.init(params);
31
- };
32
- DockviewPanelModel.prototype.updateParentGroup = function (_group, _isPanelVisible) {
33
- // noop
53
+ this.tab.init(__assign(__assign({}, params), { tabLocation: 'header' }));
34
54
  };
35
55
  DockviewPanelModel.prototype.layout = function (width, height) {
36
56
  var _a, _b;
@@ -38,6 +58,7 @@ var DockviewPanelModel = /** @class */ (function () {
38
58
  };
39
59
  DockviewPanelModel.prototype.update = function (event) {
40
60
  var _a, _b, _c, _d;
61
+ this._updateEvent = event;
41
62
  (_b = (_a = this.content).update) === null || _b === void 0 ? void 0 : _b.call(_a, event);
42
63
  (_d = (_c = this.tab).update) === null || _d === void 0 ? void 0 : _d.call(_c, event);
43
64
  };
@@ -10,9 +10,12 @@ export interface IGroupPanelBaseProps<T extends {
10
10
  api: DockviewPanelApi;
11
11
  containerApi: DockviewApi;
12
12
  }
13
+ export type TabLocation = 'header' | 'headerOverflow';
13
14
  export type IDockviewPanelHeaderProps<T extends {
14
15
  [index: string]: any;
15
- } = any> = IGroupPanelBaseProps<T>;
16
+ } = any> = IGroupPanelBaseProps<T> & {
17
+ tabLocation: TabLocation;
18
+ };
16
19
  export type IDockviewPanelProps<T extends {
17
20
  [index: string]: any;
18
21
  } = any> = IGroupPanelBaseProps<T>;
@@ -14,6 +14,7 @@ import { IGroupHeaderProps } from './framework';
14
14
  import { FloatingGroupOptions } from './dockviewComponent';
15
15
  import { Contraints } from '../gridview/gridviewPanel';
16
16
  import { AcceptableEvent, IAcceptableEvent } from '../events';
17
+ import { DockviewTheme } from './theme';
17
18
  export interface IHeaderActionsRenderer extends IDisposable {
18
19
  readonly element: HTMLElement;
19
20
  init(params: IGroupHeaderProps): void;
@@ -43,18 +44,20 @@ export interface DockviewOptions {
43
44
  popoutUrl?: string;
44
45
  defaultRenderer?: DockviewPanelRenderer;
45
46
  debug?: boolean;
47
+ dndEdges?: false | DroptargetOverlayModel;
48
+ /**
49
+ * @deprecated use `dndEdges` instead. To be removed in a future version.
50
+ * */
46
51
  rootOverlayModel?: DroptargetOverlayModel;
47
- locked?: boolean;
48
52
  disableDnd?: boolean;
53
+ locked?: boolean;
49
54
  className?: string;
50
- /**
51
- * Pixel gap between groups
52
- */
53
- gap?: number;
54
55
  /**
55
56
  * Define the behaviour of the dock when there are no panels to display. Defaults to `watermark`.
56
57
  */
57
58
  noPanelsOverlay?: 'emptyGroup' | 'watermark';
59
+ theme?: DockviewTheme;
60
+ disableTabsOverflowList?: boolean;
58
61
  }
59
62
  export interface DockviewDndOverlayEvent extends IAcceptableEvent {
60
63
  nativeEvent: DragEvent;
@@ -48,9 +48,11 @@ exports.PROPERTY_KEYS_DOCKVIEW = (function () {
48
48
  rootOverlayModel: undefined,
49
49
  locked: undefined,
50
50
  disableDnd: undefined,
51
- gap: undefined,
52
51
  className: undefined,
53
52
  noPanelsOverlay: undefined,
53
+ dndEdges: undefined,
54
+ theme: undefined,
55
+ disableTabsOverflowList: undefined,
54
56
  };
55
57
  return Object.keys(properties);
56
58
  })();
@@ -0,0 +1,31 @@
1
+ export interface DockviewTheme {
2
+ /**
3
+ * The name of the theme
4
+ */
5
+ name: string;
6
+ /**
7
+ * The class name to apply to the theme containing the CSS variables settings.
8
+ */
9
+ className: string;
10
+ /**
11
+ * The gap between the groups
12
+ */
13
+ gap?: number;
14
+ /**
15
+ * The mouting position of the overlay shown when dragging a panel. `absolute`
16
+ * will mount the overlay to root of the dockview component whereas `relative` will mount the overlay to the group container.
17
+ */
18
+ dndOverlayMounting?: 'absolute' | 'relative';
19
+ /**
20
+ * When dragging a panel, the overlay can either encompass the panel contents or the entire group including the tab header space.
21
+ */
22
+ dndPanelOverlay?: 'content' | 'group';
23
+ }
24
+ export declare const themeDark: DockviewTheme;
25
+ export declare const themeLight: DockviewTheme;
26
+ export declare const themeVisualStudio: DockviewTheme;
27
+ export declare const themeAbyss: DockviewTheme;
28
+ export declare const themeDracula: DockviewTheme;
29
+ export declare const themeReplit: DockviewTheme;
30
+ export declare const themeAbyssSpaced: DockviewTheme;
31
+ export declare const themeLightSpaced: DockviewTheme;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.themeLightSpaced = exports.themeAbyssSpaced = exports.themeReplit = exports.themeDracula = exports.themeAbyss = exports.themeVisualStudio = exports.themeLight = exports.themeDark = void 0;
4
+ exports.themeDark = {
5
+ name: 'dark',
6
+ className: 'dockview-theme-dark',
7
+ };
8
+ exports.themeLight = {
9
+ name: 'light',
10
+ className: 'dockview-theme-light',
11
+ };
12
+ exports.themeVisualStudio = {
13
+ name: 'visualStudio',
14
+ className: 'dockview-theme-vs',
15
+ };
16
+ exports.themeAbyss = {
17
+ name: 'abyss',
18
+ className: 'dockview-theme-abyss',
19
+ };
20
+ exports.themeDracula = {
21
+ name: 'dracula',
22
+ className: 'dockview-theme-dracula',
23
+ };
24
+ exports.themeReplit = {
25
+ name: 'replit',
26
+ className: 'dockview-theme-replit',
27
+ gap: 10,
28
+ };
29
+ exports.themeAbyssSpaced = {
30
+ name: 'abyssSpaced',
31
+ className: 'dockview-theme-abyss-spaced',
32
+ gap: 10,
33
+ dndOverlayMounting: 'absolute',
34
+ dndPanelOverlay: 'group',
35
+ };
36
+ exports.themeLightSpaced = {
37
+ name: 'lightSpaced',
38
+ className: 'dockview-theme-light-spaced',
39
+ gap: 10,
40
+ dndOverlayMounting: 'absolute',
41
+ dndPanelOverlay: 'group',
42
+ };
@@ -4,6 +4,7 @@ import { DockviewApi } from '../api/component.api';
4
4
  import { Optional } from '../types';
5
5
  import { IDockviewGroupPanel } from './dockviewGroupPanel';
6
6
  import { DockviewPanelRenderer } from '../overlay/overlayRenderContainer';
7
+ import { TabLocation } from './framework';
7
8
  export interface HeaderPartInitParameters {
8
9
  title: string;
9
10
  }
@@ -20,9 +21,12 @@ export interface IWatermarkRenderer extends Optional<Omit<IPanel, 'id' | 'init'>
20
21
  readonly element: HTMLElement;
21
22
  init: (params: WatermarkRendererInitParameters) => void;
22
23
  }
24
+ export interface TabPartInitParameters extends GroupPanelPartInitParameters {
25
+ tabLocation: TabLocation;
26
+ }
23
27
  export interface ITabRenderer extends Optional<Omit<IPanel, 'id'>, RendererMethodOptionalList> {
24
28
  readonly element: HTMLElement;
25
- init(parameters: GroupPanelPartInitParameters): void;
29
+ init(parameters: TabPartInitParameters): void;
26
30
  }
27
31
  export interface IContentRenderer extends Optional<Omit<IPanel, 'id'>, RendererMethodOptionalList> {
28
32
  readonly element: HTMLElement;
package/dist/cjs/dom.d.ts CHANGED
@@ -47,3 +47,4 @@ export declare class Classnames {
47
47
  constructor(element: HTMLElement);
48
48
  setClassNames(classNames: string): void;
49
49
  }
50
+ export declare function isChildEntirelyVisibleWithinParent(child: HTMLElement, parent: HTMLElement): boolean;
package/dist/cjs/dom.js CHANGED
@@ -51,7 +51,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
51
51
  return to.concat(ar || Array.prototype.slice.call(from));
52
52
  };
53
53
  Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.Classnames = exports.getDockviewTheme = exports.disableIframePointEvents = exports.addTestId = exports.isInDocument = exports.getDomNodePagePosition = exports.addStyles = exports.quasiDefaultPrevented = exports.quasiPreventDefault = exports.trackFocus = exports.getElementsByTagName = exports.isAncestor = exports.toggleClass = exports.addClasses = exports.removeClasses = exports.watchElementResize = exports.OverflowObserver = void 0;
54
+ exports.isChildEntirelyVisibleWithinParent = exports.Classnames = exports.getDockviewTheme = exports.disableIframePointEvents = exports.addTestId = exports.isInDocument = exports.getDomNodePagePosition = exports.addStyles = exports.quasiDefaultPrevented = exports.quasiPreventDefault = exports.trackFocus = exports.getElementsByTagName = exports.isAncestor = exports.toggleClass = exports.addClasses = exports.removeClasses = exports.watchElementResize = exports.OverflowObserver = void 0;
55
55
  var events_1 = require("./events");
56
56
  var lifecycle_1 = require("./lifecycle");
57
57
  var OverflowObserver = /** @class */ (function (_super) {
@@ -423,3 +423,17 @@ var Classnames = /** @class */ (function () {
423
423
  return Classnames;
424
424
  }());
425
425
  exports.Classnames = Classnames;
426
+ function isChildEntirelyVisibleWithinParent(child, parent) {
427
+ //
428
+ var childPosition = getDomNodePagePosition(child);
429
+ var parentPosition = getDomNodePagePosition(parent);
430
+ if (childPosition.left < parentPosition.left) {
431
+ return false;
432
+ }
433
+ if (childPosition.left + childPosition.width >
434
+ parentPosition.left + parentPosition.width) {
435
+ return false;
436
+ }
437
+ return true;
438
+ }
439
+ exports.isChildEntirelyVisibleWithinParent = isChildEntirelyVisibleWithinParent;
@@ -6,6 +6,9 @@ import { ISplitviewStyles, Orientation } from '../splitview/splitview';
6
6
  import { IPanel } from '../panel/types';
7
7
  import { MovementOptions2 } from '../dockview/options';
8
8
  import { Resizable } from '../resizable';
9
+ /**
10
+ * A direction in which a panel can be moved or placed relative to another panel.
11
+ */
9
12
  export type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
10
13
  export declare function toTarget(direction: Direction): Position;
11
14
  export interface MaximizedChanged<T extends IGridPanelView> {
@@ -22,6 +22,7 @@ export * from './dockview/types';
22
22
  export * from './dockview/dockviewGroupPanel';
23
23
  export { IGroupPanelBaseProps, IDockviewPanelHeaderProps, IDockviewPanelProps, IDockviewHeaderActionsProps, IGroupHeaderProps, IWatermarkPanelProps, DockviewReadyEvent, } from './dockview/framework';
24
24
  export * from './dockview/options';
25
+ export * from './dockview/theme';
25
26
  export * from './dockview/dockviewPanel';
26
27
  export { DefaultTab } from './dockview/components/tab/defaultTab';
27
28
  export { DefaultDockviewDeserialzier, IPanelDeserializer, } from './dockview/deserializer';
package/dist/cjs/index.js CHANGED
@@ -49,6 +49,7 @@ __exportStar(require("./dockview/dockviewGroupPanelModel"), exports);
49
49
  __exportStar(require("./dockview/types"), exports);
50
50
  __exportStar(require("./dockview/dockviewGroupPanel"), exports);
51
51
  __exportStar(require("./dockview/options"), exports);
52
+ __exportStar(require("./dockview/theme"), exports);
52
53
  __exportStar(require("./dockview/dockviewPanel"), exports);
53
54
  var defaultTab_1 = require("./dockview/components/tab/defaultTab");
54
55
  Object.defineProperty(exports, "DefaultTab", { enumerable: true, get: function () { return defaultTab_1.DefaultTab; } });
@@ -404,6 +404,7 @@ var PaneviewComponent = /** @class */ (function (_super) {
404
404
  finally { if (e_2) throw e_2.error; }
405
405
  }
406
406
  this._viewDisposables.clear();
407
+ this.element.remove();
407
408
  this.paneview.dispose();
408
409
  };
409
410
  return PaneviewComponent;
@@ -0,0 +1,12 @@
1
+ import { CompositeDisposable } from './lifecycle';
2
+ export declare class Scrollbar extends CompositeDisposable {
3
+ private readonly scrollableElement;
4
+ private readonly _element;
5
+ private readonly _horizontalScrollbar;
6
+ private _scrollLeft;
7
+ private _animationTimer;
8
+ static MouseWheelSpeed: number;
9
+ get element(): HTMLElement;
10
+ constructor(scrollableElement: HTMLElement);
11
+ private calculateScrollbarStyles;
12
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.Scrollbar = void 0;
19
+ var dom_1 = require("./dom");
20
+ var events_1 = require("./events");
21
+ var lifecycle_1 = require("./lifecycle");
22
+ var math_1 = require("./math");
23
+ var Scrollbar = /** @class */ (function (_super) {
24
+ __extends(Scrollbar, _super);
25
+ function Scrollbar(scrollableElement) {
26
+ var _this = _super.call(this) || this;
27
+ _this.scrollableElement = scrollableElement;
28
+ _this._scrollLeft = 0;
29
+ _this._element = document.createElement('div');
30
+ _this._element.className = 'dv-scrollable';
31
+ _this._horizontalScrollbar = document.createElement('div');
32
+ _this._horizontalScrollbar.className = 'dv-scrollbar-horizontal';
33
+ _this.element.appendChild(scrollableElement);
34
+ _this.element.appendChild(_this._horizontalScrollbar);
35
+ _this.addDisposables((0, events_1.addDisposableListener)(_this.element, 'wheel', function (event) {
36
+ _this._scrollLeft += event.deltaY * Scrollbar.MouseWheelSpeed;
37
+ _this.calculateScrollbarStyles();
38
+ }), (0, events_1.addDisposableListener)(_this._horizontalScrollbar, 'pointerdown', function (event) {
39
+ event.preventDefault();
40
+ (0, dom_1.toggleClass)(_this.element, 'dv-scrollable-scrolling', true);
41
+ var originalClientX = event.clientX;
42
+ var originalScrollLeft = _this._scrollLeft;
43
+ var onPointerMove = function (event) {
44
+ var deltaX = event.clientX - originalClientX;
45
+ var clientWidth = _this.element.clientWidth;
46
+ var scrollWidth = _this.scrollableElement.scrollWidth;
47
+ var p = clientWidth / scrollWidth;
48
+ _this._scrollLeft = originalScrollLeft + deltaX / p;
49
+ _this.calculateScrollbarStyles();
50
+ };
51
+ var onEnd = function () {
52
+ (0, dom_1.toggleClass)(_this.element, 'dv-scrollable-scrolling', false);
53
+ document.removeEventListener('pointermove', onPointerMove);
54
+ document.removeEventListener('pointerup', onEnd);
55
+ document.removeEventListener('pointercancel', onEnd);
56
+ };
57
+ document.addEventListener('pointermove', onPointerMove);
58
+ document.addEventListener('pointerup', onEnd);
59
+ document.addEventListener('pointercancel', onEnd);
60
+ }), (0, events_1.addDisposableListener)(_this.element, 'scroll', function () {
61
+ _this.calculateScrollbarStyles();
62
+ }), (0, events_1.addDisposableListener)(_this.scrollableElement, 'scroll', function () {
63
+ _this._scrollLeft = _this.scrollableElement.scrollLeft;
64
+ _this.calculateScrollbarStyles();
65
+ }), (0, dom_1.watchElementResize)(_this.element, function () {
66
+ (0, dom_1.toggleClass)(_this.element, 'dv-scrollable-resizing', true);
67
+ if (_this._animationTimer) {
68
+ clearTimeout(_this._animationTimer);
69
+ }
70
+ _this._animationTimer = setTimeout(function () {
71
+ clearTimeout(_this._animationTimer);
72
+ (0, dom_1.toggleClass)(_this.element, 'dv-scrollable-resizing', false);
73
+ }, 500);
74
+ _this.calculateScrollbarStyles();
75
+ }));
76
+ return _this;
77
+ }
78
+ Object.defineProperty(Scrollbar.prototype, "element", {
79
+ get: function () {
80
+ return this._element;
81
+ },
82
+ enumerable: false,
83
+ configurable: true
84
+ });
85
+ Scrollbar.prototype.calculateScrollbarStyles = function () {
86
+ var clientWidth = this.element.clientWidth;
87
+ var scrollWidth = this.scrollableElement.scrollWidth;
88
+ var hasScrollbar = scrollWidth > clientWidth;
89
+ if (hasScrollbar) {
90
+ var px = clientWidth * (clientWidth / scrollWidth);
91
+ this._horizontalScrollbar.style.width = "".concat(px, "px");
92
+ this._scrollLeft = (0, math_1.clamp)(this._scrollLeft, 0, this.scrollableElement.scrollWidth - clientWidth);
93
+ this.scrollableElement.scrollLeft = this._scrollLeft;
94
+ var percentageComplete = this._scrollLeft / (scrollWidth - clientWidth);
95
+ this._horizontalScrollbar.style.left = "".concat((clientWidth - px) * percentageComplete, "px");
96
+ }
97
+ else {
98
+ this._horizontalScrollbar.style.width = "0px";
99
+ this._horizontalScrollbar.style.left = "0px";
100
+ this._scrollLeft = 0;
101
+ }
102
+ };
103
+ Scrollbar.MouseWheelSpeed = 1;
104
+ return Scrollbar;
105
+ }(lifecycle_1.CompositeDisposable));
106
+ exports.Scrollbar = Scrollbar;
@@ -354,6 +354,7 @@ var Splitview = /** @class */ (function () {
354
354
  },
355
355
  set: function (value) {
356
356
  this._margin = value;
357
+ (0, dom_1.toggleClass)(this.element, 'dv-splitview-has-margin', value !== 0);
357
358
  },
358
359
  enumerable: false,
359
360
  configurable: true
@@ -390,6 +390,7 @@ var SplitviewComponent = /** @class */ (function (_super) {
390
390
  }
391
391
  finally { if (e_3) throw e_3.error; }
392
392
  }
393
+ this.element.remove();
393
394
  _super.prototype.dispose.call(this);
394
395
  };
395
396
  return SplitviewComponent;