dockview-core 5.1.0 → 6.0.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.
Files changed (117) hide show
  1. package/README.md +3 -1
  2. package/dist/cjs/api/component.api.d.ts +93 -1
  3. package/dist/cjs/api/component.api.js +146 -0
  4. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +26 -0
  5. package/dist/cjs/api/dockviewGroupPanelApi.js +21 -1
  6. package/dist/cjs/api/entryPoints.js +4 -5
  7. package/dist/cjs/array.js +7 -8
  8. package/dist/cjs/dnd/dataTransfer.d.ts +2 -1
  9. package/dist/cjs/dnd/dataTransfer.js +5 -4
  10. package/dist/cjs/dnd/droptarget.d.ts +12 -0
  11. package/dist/cjs/dnd/droptarget.js +38 -10
  12. package/dist/cjs/dnd/ghost.js +1 -2
  13. package/dist/cjs/dockview/components/panel/content.js +5 -1
  14. package/dist/cjs/dockview/components/popupService.d.ts +9 -2
  15. package/dist/cjs/dockview/components/popupService.js +24 -9
  16. package/dist/cjs/dockview/components/tab/tab.d.ts +8 -1
  17. package/dist/cjs/dockview/components/tab/tab.js +94 -6
  18. package/dist/cjs/dockview/components/titlebar/tabGroupChip.d.ts +30 -0
  19. package/dist/cjs/dockview/components/titlebar/tabGroupChip.js +95 -0
  20. package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.d.ts +71 -0
  21. package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.js +471 -0
  22. package/dist/cjs/dockview/components/titlebar/tabGroups.d.ts +57 -0
  23. package/dist/cjs/dockview/components/titlebar/tabGroups.js +612 -0
  24. package/dist/cjs/dockview/components/titlebar/tabOverflowControl.js +1 -2
  25. package/dist/cjs/dockview/components/titlebar/tabs.d.ts +67 -0
  26. package/dist/cjs/dockview/components/titlebar/tabs.js +1464 -34
  27. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +6 -0
  28. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +132 -14
  29. package/dist/cjs/dockview/contextMenu.d.ts +10 -0
  30. package/dist/cjs/dockview/contextMenu.js +298 -0
  31. package/dist/cjs/dockview/dockviewComponent.d.ts +60 -3
  32. package/dist/cjs/dockview/dockviewComponent.js +712 -126
  33. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +83 -0
  34. package/dist/cjs/dockview/dockviewGroupPanelModel.js +619 -27
  35. package/dist/cjs/dockview/dockviewShell.d.ts +128 -0
  36. package/dist/cjs/dockview/dockviewShell.js +681 -0
  37. package/dist/cjs/dockview/events.d.ts +9 -0
  38. package/dist/cjs/dockview/framework.d.ts +14 -0
  39. package/dist/cjs/dockview/options.d.ts +97 -2
  40. package/dist/cjs/dockview/options.js +10 -5
  41. package/dist/cjs/dockview/tabGroup.d.ts +99 -0
  42. package/dist/cjs/dockview/tabGroup.js +219 -0
  43. package/dist/cjs/dockview/tabGroupAccent.d.ts +65 -0
  44. package/dist/cjs/dockview/tabGroupAccent.js +128 -0
  45. package/dist/cjs/dockview/theme.d.ts +56 -1
  46. package/dist/cjs/dockview/theme.js +103 -6
  47. package/dist/cjs/dockview/types.d.ts +2 -0
  48. package/dist/cjs/dom.js +19 -19
  49. package/dist/cjs/events.js +2 -2
  50. package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -0
  51. package/dist/cjs/gridview/baseComponentGridview.js +6 -3
  52. package/dist/cjs/gridview/gridview.js +7 -7
  53. package/dist/cjs/index.d.ts +8 -5
  54. package/dist/cjs/index.js +6 -1
  55. package/dist/cjs/popoutWindow.js +3 -3
  56. package/dist/cjs/splitview/splitviewPanel.d.ts +1 -1
  57. package/dist/dockview-core.js +5188 -729
  58. package/dist/dockview-core.min.js +2 -2
  59. package/dist/dockview-core.min.js.map +1 -1
  60. package/dist/dockview-core.min.noStyle.js +2 -2
  61. package/dist/dockview-core.min.noStyle.js.map +1 -1
  62. package/dist/dockview-core.noStyle.js +5186 -727
  63. package/dist/esm/api/component.api.d.ts +93 -1
  64. package/dist/esm/api/component.api.js +118 -0
  65. package/dist/esm/api/dockviewGroupPanelApi.d.ts +26 -0
  66. package/dist/esm/api/dockviewGroupPanelApi.js +21 -1
  67. package/dist/esm/dnd/dataTransfer.d.ts +2 -1
  68. package/dist/esm/dnd/dataTransfer.js +2 -1
  69. package/dist/esm/dnd/droptarget.d.ts +12 -0
  70. package/dist/esm/dnd/droptarget.js +33 -5
  71. package/dist/esm/dockview/components/panel/content.js +5 -1
  72. package/dist/esm/dockview/components/popupService.d.ts +9 -2
  73. package/dist/esm/dockview/components/popupService.js +23 -9
  74. package/dist/esm/dockview/components/tab/tab.d.ts +8 -1
  75. package/dist/esm/dockview/components/tab/tab.js +96 -6
  76. package/dist/esm/dockview/components/titlebar/tabGroupChip.d.ts +30 -0
  77. package/dist/esm/dockview/components/titlebar/tabGroupChip.js +68 -0
  78. package/dist/esm/dockview/components/titlebar/tabGroupIndicator.d.ts +71 -0
  79. package/dist/esm/dockview/components/titlebar/tabGroupIndicator.js +354 -0
  80. package/dist/esm/dockview/components/titlebar/tabGroups.d.ts +57 -0
  81. package/dist/esm/dockview/components/titlebar/tabGroups.js +406 -0
  82. package/dist/esm/dockview/components/titlebar/tabs.d.ts +67 -0
  83. package/dist/esm/dockview/components/titlebar/tabs.js +1212 -25
  84. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +6 -0
  85. package/dist/esm/dockview/components/titlebar/tabsContainer.js +105 -7
  86. package/dist/esm/dockview/contextMenu.d.ts +10 -0
  87. package/dist/esm/dockview/contextMenu.js +213 -0
  88. package/dist/esm/dockview/dockviewComponent.d.ts +60 -3
  89. package/dist/esm/dockview/dockviewComponent.js +460 -35
  90. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +83 -0
  91. package/dist/esm/dockview/dockviewGroupPanelModel.js +460 -4
  92. package/dist/esm/dockview/dockviewShell.d.ts +128 -0
  93. package/dist/esm/dockview/dockviewShell.js +621 -0
  94. package/dist/esm/dockview/events.d.ts +9 -0
  95. package/dist/esm/dockview/framework.d.ts +14 -0
  96. package/dist/esm/dockview/options.d.ts +97 -2
  97. package/dist/esm/dockview/options.js +5 -0
  98. package/dist/esm/dockview/tabGroup.d.ts +99 -0
  99. package/dist/esm/dockview/tabGroup.js +144 -0
  100. package/dist/esm/dockview/tabGroupAccent.d.ts +65 -0
  101. package/dist/esm/dockview/tabGroupAccent.js +116 -0
  102. package/dist/esm/dockview/theme.d.ts +56 -1
  103. package/dist/esm/dockview/theme.js +102 -5
  104. package/dist/esm/dockview/types.d.ts +2 -0
  105. package/dist/esm/dom.js +1 -1
  106. package/dist/esm/gridview/baseComponentGridview.d.ts +1 -0
  107. package/dist/esm/gridview/baseComponentGridview.js +4 -1
  108. package/dist/esm/index.d.ts +8 -5
  109. package/dist/esm/index.js +2 -1
  110. package/dist/esm/popoutWindow.js +1 -1
  111. package/dist/esm/splitview/splitviewPanel.d.ts +1 -1
  112. package/dist/package/main.cjs.js +5182 -753
  113. package/dist/package/main.cjs.min.js +2 -2
  114. package/dist/package/main.esm.min.mjs +2 -2
  115. package/dist/package/main.esm.mjs +5168 -753
  116. package/dist/styles/dockview.css +1968 -195
  117. package/package.json +5 -1
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TabGroupColorPalette = exports.DEFAULT_TAB_GROUP_COLORS = void 0;
4
+ exports.applyTabGroupAccent = applyTabGroupAccent;
5
+ exports.resolveTabGroupAccent = resolveTabGroupAccent;
6
+ exports.DEFAULT_TAB_GROUP_COLORS = [
7
+ { id: 'grey', value: 'var(--dv-tab-group-color-grey)', label: 'Grey' },
8
+ { id: 'blue', value: 'var(--dv-tab-group-color-blue)', label: 'Blue' },
9
+ { id: 'red', value: 'var(--dv-tab-group-color-red)', label: 'Red' },
10
+ {
11
+ id: 'yellow',
12
+ value: 'var(--dv-tab-group-color-yellow)',
13
+ label: 'Yellow',
14
+ },
15
+ { id: 'green', value: 'var(--dv-tab-group-color-green)', label: 'Green' },
16
+ { id: 'pink', value: 'var(--dv-tab-group-color-pink)', label: 'Pink' },
17
+ {
18
+ id: 'purple',
19
+ value: 'var(--dv-tab-group-color-purple)',
20
+ label: 'Purple',
21
+ },
22
+ { id: 'cyan', value: 'var(--dv-tab-group-color-cyan)', label: 'Cyan' },
23
+ {
24
+ id: 'orange',
25
+ value: 'var(--dv-tab-group-color-orange)',
26
+ label: 'Orange',
27
+ },
28
+ ];
29
+ /**
30
+ * Runtime palette for tab-group color accents.
31
+ *
32
+ * Resolves a stored `color` string to a CSS color expression, with three
33
+ * fall-through modes:
34
+ * 1. `id` matches an entry → entry's `value`
35
+ * 2. `id` doesn't match → `id` itself (raw CSS literal pass-through)
36
+ * 3. `id` is empty or undefined → undefined (caller skips assignment)
37
+ *
38
+ * When `enabled` is false the palette returns undefined for everything; this
39
+ * is the `tabGroupAccent: 'off'` opt-out path.
40
+ */
41
+ var TabGroupColorPalette = /** @class */ (function () {
42
+ function TabGroupColorPalette(entries, enabled) {
43
+ if (enabled === void 0) { enabled = true; }
44
+ this._entries = entries.slice();
45
+ this._byId = new Map(entries.map(function (e) { return [e.id, e]; }));
46
+ this._enabled = enabled;
47
+ }
48
+ Object.defineProperty(TabGroupColorPalette.prototype, "enabled", {
49
+ get: function () {
50
+ return this._enabled;
51
+ },
52
+ set: function (value) {
53
+ this._enabled = value;
54
+ },
55
+ enumerable: false,
56
+ configurable: true
57
+ });
58
+ /**
59
+ * Replace the entry list in place. Used by `updateOptions` so that
60
+ * existing palette references (held by chips, indicators, etc.) see
61
+ * the new palette without needing to be re-wired.
62
+ */
63
+ TabGroupColorPalette.prototype.setEntries = function (entries) {
64
+ this._entries = entries.slice();
65
+ this._byId = new Map(entries.map(function (e) { return [e.id, e]; }));
66
+ };
67
+ TabGroupColorPalette.prototype.entries = function () {
68
+ return this._entries;
69
+ };
70
+ TabGroupColorPalette.prototype.has = function (id) {
71
+ return this._byId.has(id);
72
+ };
73
+ TabGroupColorPalette.prototype.get = function (id) {
74
+ return this._byId.get(id);
75
+ };
76
+ /** First entry's id; used as the default when a color is unset. */
77
+ TabGroupColorPalette.prototype.defaultId = function () {
78
+ var _a;
79
+ return (_a = this._entries[0]) === null || _a === void 0 ? void 0 : _a.id;
80
+ };
81
+ /**
82
+ * Resolve a stored color to its CSS value, or undefined if no value
83
+ * should be written (palette disabled, or color empty/undefined).
84
+ */
85
+ TabGroupColorPalette.prototype.resolveValue = function (color) {
86
+ if (!this._enabled || !color) {
87
+ return undefined;
88
+ }
89
+ var entry = this._byId.get(color);
90
+ return entry ? entry.value : color;
91
+ };
92
+ return TabGroupColorPalette;
93
+ }());
94
+ exports.TabGroupColorPalette = TabGroupColorPalette;
95
+ var _fallbackPalette;
96
+ /**
97
+ * Lazy-built palette used when the accessor isn't available (test mocks,
98
+ * isolated chip construction). Production code paths always pass a real
99
+ * palette through.
100
+ */
101
+ function getFallbackPalette() {
102
+ if (!_fallbackPalette) {
103
+ _fallbackPalette = new TabGroupColorPalette(exports.DEFAULT_TAB_GROUP_COLORS, true);
104
+ }
105
+ return _fallbackPalette;
106
+ }
107
+ /**
108
+ * Set the `--dv-tab-group-color` custom property on `el` to the resolved
109
+ * accent value, or remove it when the palette is disabled / color is unset.
110
+ */
111
+ function applyTabGroupAccent(el, color, palette) {
112
+ var value = (palette !== null && palette !== void 0 ? palette : getFallbackPalette()).resolveValue(color);
113
+ if (value === undefined) {
114
+ el.style.removeProperty('--dv-tab-group-color');
115
+ }
116
+ else {
117
+ el.style.setProperty('--dv-tab-group-color', value);
118
+ }
119
+ }
120
+ /**
121
+ * Return the resolved CSS color for a tab group, or undefined when the
122
+ * palette is disabled or no color is set. Use this when you need the raw
123
+ * value to assign to a non-custom-property style (e.g. SVG stroke,
124
+ * backgroundColor on the indicator underline).
125
+ */
126
+ function resolveTabGroupAccent(color, palette) {
127
+ return (palette !== null && palette !== void 0 ? palette : getFallbackPalette()).resolveValue(color);
128
+ }
@@ -1,3 +1,5 @@
1
+ import { TabAnimation } from './options';
2
+ export type DockviewTabGroupIndicator = 'wrap' | 'none';
1
3
  export interface DockviewTheme {
2
4
  /**
3
5
  * The name of the theme
@@ -7,10 +9,20 @@ export interface DockviewTheme {
7
9
  * The class name to apply to the theme containing the CSS variables settings.
8
10
  */
9
11
  className: string;
12
+ /**
13
+ * Whether the theme is light or dark. Useful for adapting panel content colors.
14
+ */
15
+ colorScheme?: 'light' | 'dark';
10
16
  /**
11
17
  * The gap between the groups
12
18
  */
13
19
  gap?: number;
20
+ /**
21
+ * The collapsed size (in px) for edge groups when using this theme.
22
+ * When set, this overrides the default 35px collapsed size so that
23
+ * collapsed edge groups match the theme's tab strip height.
24
+ */
25
+ edgeGroupCollapsedSize?: number;
14
26
  /**
15
27
  * The mouting position of the overlay shown when dragging a panel. `absolute`
16
28
  * will mount the overlay to root of the dockview component whereas `relative` will mount the overlay to the group container.
@@ -20,12 +32,55 @@ export interface DockviewTheme {
20
32
  * When dragging a panel, the overlay can either encompass the panel contents or the entire group including the tab header space.
21
33
  */
22
34
  dndPanelOverlay?: 'content' | 'group';
35
+ /**
36
+ * The style of the drop indicator shown when dragging a tab over another tab.
37
+ * `'line'` renders a thin 4px insertion strip at the tab edge (suited to bordered/spaced themes).
38
+ * `'fill'` renders a half-width highlighted area (suited to themes that use a background fill).
39
+ * Defaults to `'fill'`.
40
+ */
41
+ dndTabIndicator?: 'line' | 'fill';
42
+ /**
43
+ * The CSS value applied to `--dv-drag-over-border` when this theme is active.
44
+ * For example `'2px solid var(--dv-active-sash-color)'`.
45
+ * When unset the CSS variable is left to the stylesheet default (`none`).
46
+ */
47
+ dndOverlayBorder?: string;
48
+ /**
49
+ * Controls how tab groups are visually indicated in the tab bar.
50
+ *
51
+ * - `'wrap'` (default): Chrome-style SVG underline that wraps around the active tab
52
+ * with rounded corners. Requires JavaScript for positioning and path computation.
53
+ * - `'none'`: Flat continuous colored bar spanning the full tab group width.
54
+ * Unlike `'wrap'`, the bar does not curve around the active tab.
55
+ */
56
+ tabGroupIndicator?: DockviewTabGroupIndicator;
57
+ /**
58
+ * Controls tab drag-and-drop reorder animation style.
59
+ *
60
+ * - `"smooth"`: tabs animate smoothly during drag-and-drop reorder —
61
+ * tabs slide apart to reveal the insertion gap, then animate to their
62
+ * final positions on drop (Chrome-like behavior).
63
+ * - `"default"`: standard tab reorder behavior without animation.
64
+ *
65
+ * Defaults to `"default"`.
66
+ */
67
+ tabAnimation?: TabAnimation;
23
68
  }
24
69
  export declare const themeDark: DockviewTheme;
25
70
  export declare const themeLight: DockviewTheme;
26
71
  export declare const themeVisualStudio: DockviewTheme;
27
72
  export declare const themeAbyss: DockviewTheme;
28
73
  export declare const themeDracula: DockviewTheme;
29
- export declare const themeReplit: DockviewTheme;
30
74
  export declare const themeAbyssSpaced: DockviewTheme;
31
75
  export declare const themeLightSpaced: DockviewTheme;
76
+ export declare const themeNord: DockviewTheme;
77
+ export declare const themeNordSpaced: DockviewTheme;
78
+ export declare const themeCatppuccinMocha: DockviewTheme;
79
+ export declare const themeCatppuccinMochaSpaced: DockviewTheme;
80
+ export declare const themeMonokai: DockviewTheme;
81
+ export declare const themeSolarizedLight: DockviewTheme;
82
+ export declare const themeSolarizedLightSpaced: DockviewTheme;
83
+ export declare const themeGithubDark: DockviewTheme;
84
+ export declare const themeGithubDarkSpaced: DockviewTheme;
85
+ export declare const themeGithubLight: DockviewTheme;
86
+ export declare const themeGithubLightSpaced: DockviewTheme;
@@ -1,42 +1,139 @@
1
1
  "use strict";
2
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;
3
+ exports.themeGithubLightSpaced = exports.themeGithubLight = exports.themeGithubDarkSpaced = exports.themeGithubDark = exports.themeSolarizedLightSpaced = exports.themeSolarizedLight = exports.themeMonokai = exports.themeCatppuccinMochaSpaced = exports.themeCatppuccinMocha = exports.themeNordSpaced = exports.themeNord = exports.themeLightSpaced = exports.themeAbyssSpaced = exports.themeDracula = exports.themeAbyss = exports.themeVisualStudio = exports.themeLight = exports.themeDark = void 0;
4
4
  exports.themeDark = {
5
5
  name: 'dark',
6
6
  className: 'dockview-theme-dark',
7
+ colorScheme: 'dark',
7
8
  };
8
9
  exports.themeLight = {
9
10
  name: 'light',
10
11
  className: 'dockview-theme-light',
12
+ colorScheme: 'light',
11
13
  };
12
14
  exports.themeVisualStudio = {
13
15
  name: 'visualStudio',
14
16
  className: 'dockview-theme-vs',
17
+ colorScheme: 'dark',
18
+ // --dv-tabs-and-actions-container-height is 20px, but the VS theme applies
19
+ // box-sizing: content-box + border-bottom: 2px, so the rendered strip is 22px.
20
+ edgeGroupCollapsedSize: 22,
15
21
  };
16
22
  exports.themeAbyss = {
17
23
  name: 'abyss',
18
24
  className: 'dockview-theme-abyss',
25
+ colorScheme: 'dark',
26
+ tabGroupIndicator: 'none',
19
27
  };
20
28
  exports.themeDracula = {
21
29
  name: 'dracula',
22
30
  className: 'dockview-theme-dracula',
23
- };
24
- exports.themeReplit = {
25
- name: 'replit',
26
- className: 'dockview-theme-replit',
27
- gap: 10,
31
+ colorScheme: 'dark',
28
32
  };
29
33
  exports.themeAbyssSpaced = {
30
34
  name: 'abyssSpaced',
31
35
  className: 'dockview-theme-abyss-spaced',
36
+ colorScheme: 'dark',
32
37
  gap: 10,
38
+ edgeGroupCollapsedSize: 44,
33
39
  dndOverlayMounting: 'absolute',
34
40
  dndPanelOverlay: 'group',
41
+ dndTabIndicator: 'line',
42
+ dndOverlayBorder: '2px solid var(--dv-active-sash-color)',
35
43
  };
36
44
  exports.themeLightSpaced = {
37
45
  name: 'lightSpaced',
38
46
  className: 'dockview-theme-light-spaced',
47
+ colorScheme: 'light',
48
+ gap: 10,
49
+ edgeGroupCollapsedSize: 44,
50
+ dndOverlayMounting: 'absolute',
51
+ dndPanelOverlay: 'group',
52
+ dndTabIndicator: 'line',
53
+ dndOverlayBorder: '2px solid var(--dv-active-sash-color)',
54
+ };
55
+ exports.themeNord = {
56
+ name: 'nord',
57
+ className: 'dockview-theme-nord',
58
+ colorScheme: 'dark',
59
+ };
60
+ exports.themeNordSpaced = {
61
+ name: 'nordSpaced',
62
+ className: 'dockview-theme-nord-spaced',
63
+ colorScheme: 'dark',
64
+ gap: 10,
65
+ edgeGroupCollapsedSize: 44,
66
+ dndOverlayMounting: 'absolute',
67
+ dndPanelOverlay: 'group',
68
+ dndTabIndicator: 'line',
69
+ dndOverlayBorder: '2px solid var(--dv-active-sash-color)',
70
+ };
71
+ exports.themeCatppuccinMocha = {
72
+ name: 'catppuccinMocha',
73
+ className: 'dockview-theme-catppuccin-mocha',
74
+ colorScheme: 'dark',
75
+ };
76
+ exports.themeCatppuccinMochaSpaced = {
77
+ name: 'catppuccinMochaSpaced',
78
+ className: 'dockview-theme-catppuccin-mocha-spaced',
79
+ colorScheme: 'dark',
80
+ gap: 10,
81
+ edgeGroupCollapsedSize: 44,
82
+ dndOverlayMounting: 'absolute',
83
+ dndPanelOverlay: 'group',
84
+ dndTabIndicator: 'line',
85
+ dndOverlayBorder: '2px solid var(--dv-active-sash-color)',
86
+ };
87
+ exports.themeMonokai = {
88
+ name: 'monokai',
89
+ className: 'dockview-theme-monokai',
90
+ colorScheme: 'dark',
91
+ };
92
+ exports.themeSolarizedLight = {
93
+ name: 'solarizedLight',
94
+ className: 'dockview-theme-solarized-light',
95
+ colorScheme: 'light',
96
+ };
97
+ exports.themeSolarizedLightSpaced = {
98
+ name: 'solarizedLightSpaced',
99
+ className: 'dockview-theme-solarized-light-spaced',
100
+ colorScheme: 'light',
101
+ gap: 10,
102
+ edgeGroupCollapsedSize: 44,
103
+ dndOverlayMounting: 'absolute',
104
+ dndPanelOverlay: 'group',
105
+ dndTabIndicator: 'line',
106
+ dndOverlayBorder: '2px solid var(--dv-active-sash-color)',
107
+ };
108
+ exports.themeGithubDark = {
109
+ name: 'githubDark',
110
+ className: 'dockview-theme-github-dark',
111
+ colorScheme: 'dark',
112
+ };
113
+ exports.themeGithubDarkSpaced = {
114
+ name: 'githubDarkSpaced',
115
+ className: 'dockview-theme-github-dark-spaced',
116
+ colorScheme: 'dark',
117
+ gap: 10,
118
+ edgeGroupCollapsedSize: 44,
119
+ dndOverlayMounting: 'absolute',
120
+ dndPanelOverlay: 'group',
121
+ dndTabIndicator: 'line',
122
+ dndOverlayBorder: '2px solid var(--dv-active-sash-color)',
123
+ };
124
+ exports.themeGithubLight = {
125
+ name: 'githubLight',
126
+ className: 'dockview-theme-github-light',
127
+ colorScheme: 'light',
128
+ };
129
+ exports.themeGithubLightSpaced = {
130
+ name: 'githubLightSpaced',
131
+ className: 'dockview-theme-github-light-spaced',
132
+ colorScheme: 'light',
39
133
  gap: 10,
134
+ edgeGroupCollapsedSize: 44,
40
135
  dndOverlayMounting: 'absolute',
41
136
  dndPanelOverlay: 'group',
137
+ dndTabIndicator: 'line',
138
+ dndOverlayBorder: '2px solid var(--dv-active-sash-color)',
42
139
  };
@@ -31,6 +31,8 @@ export interface ITabRenderer extends Optional<Omit<IPanel, 'id'>, RendererMetho
31
31
  export interface IContentRenderer extends Optional<Omit<IPanel, 'id'>, RendererMethodOptionalList> {
32
32
  readonly element: HTMLElement;
33
33
  init(parameters: GroupPanelPartInitParameters): void;
34
+ onShow?(): void;
35
+ onHide?(): void;
34
36
  }
35
37
  export interface IGroupPanelInitParameters extends PanelInitParameters, HeaderPartInitParameters {
36
38
  }
package/dist/cjs/dom.js CHANGED
@@ -26,7 +26,24 @@ var __values = (this && this.__values) || function(o) {
26
26
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.findRelativeZIndexParent = exports.shiftAbsoluteElementIntoView = exports.onDidWindowResizeEnd = exports.onDidWindowMoveEnd = 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;
29
+ exports.Classnames = exports.toggleClass = exports.addClasses = exports.removeClasses = exports.OverflowObserver = void 0;
30
+ exports.watchElementResize = watchElementResize;
31
+ exports.isAncestor = isAncestor;
32
+ exports.getElementsByTagName = getElementsByTagName;
33
+ exports.trackFocus = trackFocus;
34
+ exports.quasiPreventDefault = quasiPreventDefault;
35
+ exports.quasiDefaultPrevented = quasiDefaultPrevented;
36
+ exports.addStyles = addStyles;
37
+ exports.getDomNodePagePosition = getDomNodePagePosition;
38
+ exports.isInDocument = isInDocument;
39
+ exports.addTestId = addTestId;
40
+ exports.disableIframePointEvents = disableIframePointEvents;
41
+ exports.getDockviewTheme = getDockviewTheme;
42
+ exports.isChildEntirelyVisibleWithinParent = isChildEntirelyVisibleWithinParent;
43
+ exports.onDidWindowMoveEnd = onDidWindowMoveEnd;
44
+ exports.onDidWindowResizeEnd = onDidWindowResizeEnd;
45
+ exports.shiftAbsoluteElementIntoView = shiftAbsoluteElementIntoView;
46
+ exports.findRelativeZIndexParent = findRelativeZIndexParent;
30
47
  var events_1 = require("./events");
31
48
  var lifecycle_1 = require("./lifecycle");
32
49
  var OverflowObserver = /** @class */ (function (_super) {
@@ -67,7 +84,6 @@ function watchElementResize(element, cb) {
67
84
  },
68
85
  };
69
86
  }
70
- exports.watchElementResize = watchElementResize;
71
87
  var removeClasses = function (element) {
72
88
  var e_1, _a;
73
89
  var classes = [];
@@ -133,15 +149,12 @@ function isAncestor(testChild, testAncestor) {
133
149
  }
134
150
  return false;
135
151
  }
136
- exports.isAncestor = isAncestor;
137
152
  function getElementsByTagName(tag, document) {
138
153
  return Array.prototype.slice.call(document.querySelectorAll(tag), 0);
139
154
  }
140
- exports.getElementsByTagName = getElementsByTagName;
141
155
  function trackFocus(element) {
142
156
  return new FocusTracker(element);
143
157
  }
144
- exports.trackFocus = trackFocus;
145
158
  /**
146
159
  * Track focus on an element. Ensure tabIndex is set when an HTMLElement is not focusable by default
147
160
  */
@@ -201,12 +214,10 @@ var QUASI_PREVENT_DEFAULT_KEY = 'dv-quasiPreventDefault';
201
214
  function quasiPreventDefault(event) {
202
215
  event[QUASI_PREVENT_DEFAULT_KEY] = true;
203
216
  }
204
- exports.quasiPreventDefault = quasiPreventDefault;
205
217
  // check if this event has been marked
206
218
  function quasiDefaultPrevented(event) {
207
219
  return event[QUASI_PREVENT_DEFAULT_KEY];
208
220
  }
209
- exports.quasiDefaultPrevented = quasiDefaultPrevented;
210
221
  function addStyles(document, styleSheetList) {
211
222
  var e_3, _a, e_4, _b;
212
223
  var styleSheets = Array.from(styleSheetList);
@@ -227,7 +238,7 @@ function addStyles(document, styleSheetList) {
227
238
  }
228
239
  }
229
240
  catch (err) {
230
- // security errors (lack of permissions), ignore
241
+ console.warn('dockview: failed to access stylesheet rules due to security restrictions', err);
231
242
  }
232
243
  try {
233
244
  for (var cssTexts_1 = (e_4 = void 0, __values(cssTexts)), cssTexts_1_1 = cssTexts_1.next(); !cssTexts_1_1.done; cssTexts_1_1 = cssTexts_1.next()) {
@@ -254,7 +265,6 @@ function addStyles(document, styleSheetList) {
254
265
  finally { if (e_3) throw e_3.error; }
255
266
  }
256
267
  }
257
- exports.addStyles = addStyles;
258
268
  function getDomNodePagePosition(domNode) {
259
269
  var _a = domNode.getBoundingClientRect(), left = _a.left, top = _a.top, width = _a.width, height = _a.height;
260
270
  return {
@@ -264,7 +274,6 @@ function getDomNodePagePosition(domNode) {
264
274
  height: height,
265
275
  };
266
276
  }
267
- exports.getDomNodePagePosition = getDomNodePagePosition;
268
277
  /**
269
278
  * Check whether an element is in the DOM (including the Shadow DOM)
270
279
  * @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
@@ -285,11 +294,9 @@ function isInDocument(element) {
285
294
  }
286
295
  return false;
287
296
  }
288
- exports.isInDocument = isInDocument;
289
297
  function addTestId(element, id) {
290
298
  element.setAttribute('data-testid', id);
291
299
  }
292
- exports.addTestId = addTestId;
293
300
  /**
294
301
  * Should be more efficient than element.querySelectorAll("*") since there
295
302
  * is no need to store every element in-memory using this approach
@@ -363,7 +370,6 @@ function disableIframePointEvents(rootNode) {
363
370
  },
364
371
  };
365
372
  }
366
- exports.disableIframePointEvents = disableIframePointEvents;
367
373
  function getDockviewTheme(element) {
368
374
  function toClassList(element) {
369
375
  var list = [];
@@ -385,7 +391,6 @@ function getDockviewTheme(element) {
385
391
  }
386
392
  return theme;
387
393
  }
388
- exports.getDockviewTheme = getDockviewTheme;
389
394
  var Classnames = /** @class */ (function () {
390
395
  function Classnames(element) {
391
396
  this.element = element;
@@ -448,7 +453,6 @@ function isChildEntirelyVisibleWithinParent(child, parent) {
448
453
  }
449
454
  return true;
450
455
  }
451
- exports.isChildEntirelyVisibleWithinParent = isChildEntirelyVisibleWithinParent;
452
456
  function onDidWindowMoveEnd(window) {
453
457
  var emitter = new events_1.Emitter();
454
458
  var previousScreenX = window.screenX;
@@ -474,7 +478,6 @@ function onDidWindowMoveEnd(window) {
474
478
  checkMovement();
475
479
  return emitter;
476
480
  }
477
- exports.onDidWindowMoveEnd = onDidWindowMoveEnd;
478
481
  function onDidWindowResizeEnd(element, cb) {
479
482
  var resizeTimeout;
480
483
  var disposable = new lifecycle_1.CompositeDisposable((0, events_1.addDisposableListener)(element, 'resize', function () {
@@ -485,7 +488,6 @@ function onDidWindowResizeEnd(element, cb) {
485
488
  }));
486
489
  return disposable;
487
490
  }
488
- exports.onDidWindowResizeEnd = onDidWindowResizeEnd;
489
491
  function shiftAbsoluteElementIntoView(element, root, options) {
490
492
  if (options === void 0) { options = { buffer: 10 }; }
491
493
  var buffer = options.buffer;
@@ -516,7 +518,6 @@ function shiftAbsoluteElementIntoView(element, root, options) {
516
518
  element.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
517
519
  }
518
520
  }
519
- exports.shiftAbsoluteElementIntoView = shiftAbsoluteElementIntoView;
520
521
  function findRelativeZIndexParent(el) {
521
522
  var tmp = el;
522
523
  while (tmp && (tmp.style.zIndex === 'auto' || tmp.style.zIndex === '')) {
@@ -524,4 +525,3 @@ function findRelativeZIndexParent(el) {
524
525
  }
525
526
  return tmp;
526
527
  }
527
- exports.findRelativeZIndexParent = findRelativeZIndexParent;
@@ -11,7 +11,8 @@ var __values = (this && this.__values) || function(o) {
11
11
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.AsapEvent = exports.addDisposableListener = exports.Emitter = exports.AcceptableEvent = exports.DockviewEvent = exports.Event = void 0;
14
+ exports.AsapEvent = exports.Emitter = exports.AcceptableEvent = exports.DockviewEvent = exports.Event = void 0;
15
+ exports.addDisposableListener = addDisposableListener;
15
16
  var Event;
16
17
  (function (Event) {
17
18
  Event.any = function () {
@@ -227,7 +228,6 @@ function addDisposableListener(element, type, listener, options) {
227
228
  },
228
229
  };
229
230
  }
230
- exports.addDisposableListener = addDisposableListener;
231
231
  /**
232
232
  *
233
233
  * Event Emitter that fires events from a Microtask callback, only one event will fire per event-loop cycle.
@@ -105,6 +105,7 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizab
105
105
  removeGroup(group: T): void;
106
106
  moveToNext(options?: MovementOptions2): void;
107
107
  moveToPrevious(options?: MovementOptions2): void;
108
+ protected forceRelayout(): void;
108
109
  layout(width: number, height: number, forceResize?: boolean): void;
109
110
  dispose(): void;
110
111
  }
@@ -26,7 +26,8 @@ var __values = (this && this.__values) || function(o) {
26
26
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.BaseGrid = exports.toTarget = void 0;
29
+ exports.BaseGrid = void 0;
30
+ exports.toTarget = toTarget;
30
31
  var events_1 = require("../events");
31
32
  var gridview_1 = require("./gridview");
32
33
  var lifecycle_1 = require("../lifecycle");
@@ -50,7 +51,6 @@ function toTarget(direction) {
50
51
  return 'center';
51
52
  }
52
53
  }
53
- exports.toTarget = toTarget;
54
54
  var BaseGrid = /** @class */ (function (_super) {
55
55
  __extends(BaseGrid, _super);
56
56
  function BaseGrid(container, options) {
@@ -88,7 +88,7 @@ var BaseGrid = /** @class */ (function (_super) {
88
88
  }), _this.gridview.onDidViewVisibilityChange(function () {
89
89
  return _this._onDidViewVisibilityChangeMicroTaskQueue.fire();
90
90
  }), _this.onDidViewVisibilityChangeMicroTaskQueue(function () {
91
- _this.layout(_this.width, _this.height, true);
91
+ _this.forceRelayout();
92
92
  }), lifecycle_1.Disposable.from(function () {
93
93
  var _a;
94
94
  (_a = _this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(_this.element);
@@ -296,6 +296,9 @@ var BaseGrid = /** @class */ (function (_super) {
296
296
  var next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
297
297
  this.doSetGroupActive(next);
298
298
  };
299
+ BaseGrid.prototype.forceRelayout = function () {
300
+ this.layout(this.width, this.height, true);
301
+ };
299
302
  BaseGrid.prototype.layout = function (width, height, forceResize) {
300
303
  var different = forceResize || width !== this.width || height !== this.height;
301
304
  if (!different) {
@@ -29,7 +29,13 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
29
29
  return to.concat(ar || Array.prototype.slice.call(from));
30
30
  };
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.Gridview = exports.isGridBranchNode = exports.orthogonal = exports.getLocationOrientation = exports.getDirectionOrientation = exports.getRelativeLocation = exports.getGridLocation = exports.indexInParent = void 0;
32
+ exports.Gridview = exports.orthogonal = void 0;
33
+ exports.indexInParent = indexInParent;
34
+ exports.getGridLocation = getGridLocation;
35
+ exports.getRelativeLocation = getRelativeLocation;
36
+ exports.getDirectionOrientation = getDirectionOrientation;
37
+ exports.getLocationOrientation = getLocationOrientation;
38
+ exports.isGridBranchNode = isGridBranchNode;
33
39
  var splitview_1 = require("../splitview/splitview");
34
40
  var array_1 = require("../array");
35
41
  var leafNode_1 = require("./leafNode");
@@ -94,7 +100,6 @@ function indexInParent(element) {
94
100
  }
95
101
  return index;
96
102
  }
97
- exports.indexInParent = indexInParent;
98
103
  /**
99
104
  * Find the grid location of a specific DOM element by traversing the parent
100
105
  * chain and finding each child index on the way.
@@ -113,7 +118,6 @@ function getGridLocation(element) {
113
118
  var ancestor = parentElement.parentElement.parentElement.parentElement;
114
119
  return __spreadArray(__spreadArray([], __read(getGridLocation(ancestor)), false), [index], false);
115
120
  }
116
- exports.getGridLocation = getGridLocation;
117
121
  function getRelativeLocation(rootOrientation, location, direction) {
118
122
  var orientation = getLocationOrientation(rootOrientation, location);
119
123
  var directionOrientation = getDirectionOrientation(direction);
@@ -130,19 +134,16 @@ function getRelativeLocation(rootOrientation, location, direction) {
130
134
  return __spreadArray(__spreadArray([], __read(location), false), [index], false);
131
135
  }
132
136
  }
133
- exports.getRelativeLocation = getRelativeLocation;
134
137
  function getDirectionOrientation(direction) {
135
138
  return direction === 'top' || direction === 'bottom'
136
139
  ? splitview_1.Orientation.VERTICAL
137
140
  : splitview_1.Orientation.HORIZONTAL;
138
141
  }
139
- exports.getDirectionOrientation = getDirectionOrientation;
140
142
  function getLocationOrientation(rootOrientation, location) {
141
143
  return location.length % 2 === 0
142
144
  ? (0, exports.orthogonal)(rootOrientation)
143
145
  : rootOrientation;
144
146
  }
145
- exports.getLocationOrientation = getLocationOrientation;
146
147
  var orthogonal = function (orientation) {
147
148
  return orientation === splitview_1.Orientation.HORIZONTAL
148
149
  ? splitview_1.Orientation.VERTICAL
@@ -152,7 +153,6 @@ exports.orthogonal = orthogonal;
152
153
  function isGridBranchNode(node) {
153
154
  return !!node.children;
154
155
  }
155
- exports.isGridBranchNode = isGridBranchNode;
156
156
  var serializeBranchNode = function (node, orientation) {
157
157
  var size = orientation === splitview_1.Orientation.VERTICAL ? node.box.width : node.box.height;
158
158
  if (!isGridBranchNode(node)) {
@@ -16,18 +16,21 @@ export * from './gridview/baseComponentGridview';
16
16
  export { DraggablePaneviewPanel, PaneviewDidDropEvent as PaneviewDropEvent, } from './paneview/draggablePaneviewPanel';
17
17
  export * from './dockview/components/panel/content';
18
18
  export * from './dockview/components/tab/tab';
19
- export { DockviewGroupPanelModel, DockviewDidDropEvent, DockviewWillDropEvent, DockviewGroupChangeEvent, } from './dockview/dockviewGroupPanelModel';
20
- export { DockviewWillShowOverlayLocationEvent } from './dockview/events';
19
+ export { DockviewGroupPanelModel, DockviewDidDropEvent, DockviewWillDropEvent, DockviewGroupChangeEvent, DockviewGroupLocation, } from './dockview/dockviewGroupPanelModel';
20
+ export { DockviewWillShowOverlayLocationEvent, DockviewTabGroupChangeEvent, DockviewTabGroupCollapsedChangeEvent, DockviewTabGroupPanelChangeEvent, } from './dockview/events';
21
21
  export { TabDragEvent, GroupDragEvent, } from './dockview/components/titlebar/tabsContainer';
22
22
  export * from './dockview/types';
23
23
  export * from './dockview/dockviewGroupPanel';
24
- export { IGroupPanelBaseProps, IDockviewPanelHeaderProps, IDockviewPanelProps, IDockviewHeaderActionsProps, IGroupHeaderProps, IWatermarkPanelProps, DockviewReadyEvent, } from './dockview/framework';
24
+ export { IGroupPanelBaseProps, IDockviewPanelHeaderProps, IDockviewPanelProps, IDockviewHeaderActionsProps, IGroupHeaderProps, IWatermarkPanelProps, DockviewReadyEvent, ITabGroupChipRenderer, } from './dockview/framework';
25
25
  export * from './dockview/options';
26
26
  export * from './dockview/theme';
27
27
  export * from './dockview/dockviewPanel';
28
+ export { DockviewTabGroupColor, ITabGroup, SerializedTabGroup, TabGroupOptions, } from './dockview/tabGroup';
29
+ export { DEFAULT_TAB_GROUP_COLORS, DockviewTabGroupColorEntry, TabGroupColorPalette, applyTabGroupAccent, resolveTabGroupAccent, } from './dockview/tabGroupAccent';
28
30
  export { DefaultTab } from './dockview/components/tab/defaultTab';
29
31
  export { DefaultDockviewDeserialzier, IPanelDeserializer, } from './dockview/deserializer';
30
32
  export * from './dockview/dockviewComponent';
33
+ export { EdgeGroupOptions, EdgeGroupPosition, SerializedEdgeGroups, } from './dockview/dockviewShell';
31
34
  export * from './gridview/gridviewComponent';
32
35
  export * from './splitview/splitviewComponent';
33
36
  export * from './paneview/paneviewComponent';
@@ -43,6 +46,6 @@ export { SizeEvent, GridviewPanelApi, GridConstraintChangeEvent, } from './api/g
43
46
  export { TitleEvent, RendererChangedEvent, DockviewPanelApi, DockviewPanelMoveParams, } from './api/dockviewPanelApi';
44
47
  export { PanelSizeEvent, PanelConstraintChangeEvent, SplitviewPanelApi, } from './api/splitviewPanelApi';
45
48
  export { ExpansionEvent, PaneviewPanelApi } from './api/paneviewPanelApi';
46
- export { DockviewGroupPanelApi, DockviewGroupPanelFloatingChangeEvent, DockviewGroupMoveParams, } from './api/dockviewGroupPanelApi';
47
- export { CommonApi, SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, } from './api/component.api';
49
+ export { DockviewGroupPanelApi, DockviewGroupPanelFloatingChangeEvent, DockviewGroupPanelCollapsedChangeEvent, DockviewGroupMoveParams, } from './api/dockviewGroupPanelApi';
50
+ export { CommonApi, SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, DockviewGetTabGroupsOptions, } from './api/component.api';
48
51
  export { createDockview, createGridview, createPaneview, createSplitview, } from './api/entryPoints';