dockview-core 1.12.0 → 1.13.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 (73) hide show
  1. package/dist/cjs/api/component.api.d.ts +2 -1
  2. package/dist/cjs/api/component.api.js +7 -0
  3. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +5 -1
  4. package/dist/cjs/api/dockviewGroupPanelApi.js +19 -1
  5. package/dist/cjs/dnd/droptarget.d.ts +1 -1
  6. package/dist/cjs/dnd/droptarget.js +4 -10
  7. package/dist/cjs/dockview/components/panel/content.js +0 -8
  8. package/dist/cjs/dockview/dockviewComponent.d.ts +6 -4
  9. package/dist/cjs/dockview/dockviewComponent.js +73 -68
  10. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +3 -0
  11. package/dist/cjs/dockview/dockviewGroupPanelModel.js +18 -19
  12. package/dist/cjs/dockview/dockviewPanelModel.js +21 -24
  13. package/dist/cjs/dockview/framework.d.ts +38 -0
  14. package/dist/cjs/dockview/framework.js +2 -0
  15. package/dist/cjs/dockview/options.d.ts +68 -46
  16. package/dist/cjs/dockview/options.js +43 -1
  17. package/dist/cjs/dockview/types.d.ts +4 -10
  18. package/dist/cjs/events.d.ts +13 -2
  19. package/dist/cjs/events.js +44 -12
  20. package/dist/cjs/framwork.d.ts +4 -0
  21. package/dist/cjs/framwork.js +2 -0
  22. package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -4
  23. package/dist/cjs/gridview/baseComponentGridview.js +3 -7
  24. package/dist/cjs/index.d.ts +2 -1
  25. package/dist/cjs/index.js +1 -1
  26. package/dist/dockview-core.amd.js +2121 -2040
  27. package/dist/dockview-core.amd.js.map +1 -1
  28. package/dist/dockview-core.amd.min.js +2 -2
  29. package/dist/dockview-core.amd.min.js.map +1 -1
  30. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  31. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  32. package/dist/dockview-core.amd.noStyle.js +2121 -2040
  33. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  34. package/dist/dockview-core.cjs.js +2121 -2040
  35. package/dist/dockview-core.cjs.js.map +1 -1
  36. package/dist/dockview-core.esm.js +2120 -2041
  37. package/dist/dockview-core.esm.js.map +1 -1
  38. package/dist/dockview-core.esm.min.js +2 -2
  39. package/dist/dockview-core.esm.min.js.map +1 -1
  40. package/dist/dockview-core.js +2121 -2040
  41. package/dist/dockview-core.js.map +1 -1
  42. package/dist/dockview-core.min.js +2 -2
  43. package/dist/dockview-core.min.js.map +1 -1
  44. package/dist/dockview-core.min.noStyle.js +2 -2
  45. package/dist/dockview-core.min.noStyle.js.map +1 -1
  46. package/dist/dockview-core.noStyle.js +2121 -2040
  47. package/dist/dockview-core.noStyle.js.map +1 -1
  48. package/dist/esm/api/component.api.d.ts +2 -1
  49. package/dist/esm/api/component.api.js +3 -0
  50. package/dist/esm/api/dockviewGroupPanelApi.d.ts +5 -1
  51. package/dist/esm/api/dockviewGroupPanelApi.js +18 -1
  52. package/dist/esm/dnd/droptarget.d.ts +1 -1
  53. package/dist/esm/dnd/droptarget.js +4 -10
  54. package/dist/esm/dockview/components/panel/content.js +0 -8
  55. package/dist/esm/dockview/dockviewComponent.d.ts +6 -4
  56. package/dist/esm/dockview/dockviewComponent.js +72 -69
  57. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +3 -0
  58. package/dist/esm/dockview/dockviewGroupPanelModel.js +18 -19
  59. package/dist/esm/dockview/dockviewPanelModel.js +21 -13
  60. package/dist/esm/dockview/framework.d.ts +38 -0
  61. package/dist/esm/dockview/framework.js +1 -0
  62. package/dist/esm/dockview/options.d.ts +68 -46
  63. package/dist/esm/dockview/options.js +36 -0
  64. package/dist/esm/dockview/types.d.ts +4 -10
  65. package/dist/esm/events.d.ts +13 -2
  66. package/dist/esm/events.js +37 -6
  67. package/dist/esm/framwork.d.ts +4 -0
  68. package/dist/esm/framwork.js +1 -0
  69. package/dist/esm/gridview/baseComponentGridview.d.ts +3 -4
  70. package/dist/esm/gridview/baseComponentGridview.js +4 -8
  71. package/dist/esm/index.d.ts +2 -1
  72. package/dist/esm/index.js +1 -1
  73. package/package.json +2 -2
@@ -1,5 +1,4 @@
1
1
  import { DefaultTab } from './components/tab/defaultTab';
2
- import { createComponent } from '../panel/componentFactory';
3
2
  export class DockviewPanelModel {
4
3
  get content() {
5
4
  return this._content;
@@ -16,7 +15,7 @@ export class DockviewPanelModel {
16
15
  this._tab = this.createTabComponent(this.id, tabComponent);
17
16
  }
18
17
  init(params) {
19
- this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
18
+ this.content.init(params);
20
19
  this.tab.init(params);
21
20
  }
22
21
  updateParentGroup(_group, _isPanelVisible) {
@@ -37,19 +36,28 @@ export class DockviewPanelModel {
37
36
  (_d = (_c = this.tab).dispose) === null || _d === void 0 ? void 0 : _d.call(_c);
38
37
  }
39
38
  createContentComponent(id, componentName) {
40
- var _a, _b;
41
- return createComponent(id, componentName, (_a = this.accessor.options.components) !== null && _a !== void 0 ? _a : {}, this.accessor.options.frameworkComponents, (_b = this.accessor.options.frameworkComponentFactory) === null || _b === void 0 ? void 0 : _b.content);
39
+ return this.accessor.options.createComponent({
40
+ id,
41
+ name: componentName,
42
+ });
42
43
  }
43
44
  createTabComponent(id, componentName) {
44
- var _a, _b;
45
- if (componentName) {
46
- return createComponent(id, componentName, this.accessor.options.tabComponents, this.accessor.options.frameworkTabComponents, (_a = this.accessor.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.tab, () => new DefaultTab());
47
- }
48
- else if (this.accessor.options.defaultTabComponent) {
49
- return createComponent(id, this.accessor.options.defaultTabComponent, this.accessor.options.tabComponents, this.accessor.options.frameworkTabComponents, (_b = this.accessor.options.frameworkComponentFactory) === null || _b === void 0 ? void 0 : _b.tab, () => new DefaultTab());
50
- }
51
- else {
52
- return new DefaultTab();
45
+ const name = componentName !== null && componentName !== void 0 ? componentName : this.accessor.options.defaultTabComponent;
46
+ if (name) {
47
+ if (this.accessor.options.createTabComponent) {
48
+ const component = this.accessor.options.createTabComponent({
49
+ id,
50
+ name,
51
+ });
52
+ if (component) {
53
+ return component;
54
+ }
55
+ else {
56
+ return new DefaultTab();
57
+ }
58
+ }
59
+ console.warn(`dockview: tabComponent '${componentName}' was not found. falling back to the default tab.`);
53
60
  }
61
+ return new DefaultTab();
54
62
  }
55
63
  }
@@ -0,0 +1,38 @@
1
+ import { DockviewApi } from '../api/component.api';
2
+ import { DockviewGroupPanelApi } from '../api/dockviewGroupPanelApi';
3
+ import { DockviewPanelApi } from '../api/dockviewPanelApi';
4
+ import { PanelParameters } from '../framwork';
5
+ import { DockviewGroupPanel, IDockviewGroupPanel } from './dockviewGroupPanel';
6
+ import { IDockviewPanel } from './dockviewPanel';
7
+ export interface IGroupPanelBaseProps<T extends {
8
+ [index: string]: any;
9
+ } = any> extends PanelParameters<T> {
10
+ api: DockviewPanelApi;
11
+ containerApi: DockviewApi;
12
+ }
13
+ export type IDockviewPanelHeaderProps<T extends {
14
+ [index: string]: any;
15
+ } = any> = IGroupPanelBaseProps<T>;
16
+ export type IDockviewPanelProps<T extends {
17
+ [index: string]: any;
18
+ } = any> = IGroupPanelBaseProps<T>;
19
+ export interface IDockviewHeaderActionsProps {
20
+ api: DockviewGroupPanelApi;
21
+ containerApi: DockviewApi;
22
+ panels: IDockviewPanel[];
23
+ activePanel: IDockviewPanel | undefined;
24
+ isGroupActive: boolean;
25
+ group: DockviewGroupPanel;
26
+ }
27
+ export interface IGroupHeaderProps {
28
+ api: DockviewGroupPanelApi;
29
+ containerApi: DockviewApi;
30
+ group: IDockviewGroupPanel;
31
+ }
32
+ export interface IWatermarkPanelProps {
33
+ containerApi: DockviewApi;
34
+ group?: IDockviewGroupPanel;
35
+ }
36
+ export interface DockviewReadyEvent {
37
+ api: DockviewApi;
38
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,74 +1,33 @@
1
1
  import { DockviewApi } from '../api/component.api';
2
2
  import { Direction } from '../gridview/baseComponentGridview';
3
3
  import { IGridView } from '../gridview/gridview';
4
- import { IContentRenderer, ITabRenderer, WatermarkConstructor, IWatermarkRenderer } from './types';
4
+ import { IContentRenderer, ITabRenderer, IWatermarkRenderer } from './types';
5
5
  import { Parameters } from '../panel/types';
6
6
  import { DockviewGroupPanel } from './dockviewGroupPanel';
7
- import { ISplitviewStyles, Orientation } from '../splitview/splitview';
8
7
  import { PanelTransfer } from '../dnd/dataTransfer';
9
8
  import { IDisposable } from '../lifecycle';
10
9
  import { DroptargetOverlayModel, Position } from '../dnd/droptarget';
11
10
  import { DockviewGroupDropLocation, GroupOptions } from './dockviewGroupPanelModel';
12
11
  import { IDockviewPanel } from './dockviewPanel';
13
- import { ComponentConstructor, FrameworkFactory } from '../panel/componentFactory';
14
- import { DockviewGroupPanelApi } from '../api/dockviewGroupPanelApi';
15
12
  import { DockviewPanelRenderer } from '../overlayRenderContainer';
13
+ import { IGroupHeaderProps } from './framework';
16
14
  export interface IHeaderActionsRenderer extends IDisposable {
17
15
  readonly element: HTMLElement;
18
- init(params: {
19
- containerApi: DockviewApi;
20
- api: DockviewGroupPanelApi;
21
- }): void;
22
- }
23
- export interface GroupPanelFrameworkComponentFactory {
24
- content: FrameworkFactory<IContentRenderer>;
25
- tab: FrameworkFactory<ITabRenderer>;
26
- watermark: FrameworkFactory<IWatermarkRenderer>;
16
+ init(params: IGroupHeaderProps): void;
27
17
  }
28
18
  export interface TabContextMenuEvent {
29
19
  event: MouseEvent;
30
20
  api: DockviewApi;
31
21
  panel: IDockviewPanel;
32
22
  }
33
- export interface DockviewRenderFunctions {
34
- tabComponents?: {
35
- [componentName: string]: ComponentConstructor<ITabRenderer>;
36
- };
37
- components?: {
38
- [componentName: string]: ComponentConstructor<IContentRenderer>;
39
- };
40
- frameworkTabComponents?: {
41
- [componentName: string]: any;
42
- };
43
- frameworkComponents?: {
44
- [componentName: string]: any;
45
- };
46
- }
47
23
  export interface ViewFactoryData {
48
24
  content: string;
49
25
  tab?: string;
50
26
  }
51
- export interface DockviewDndOverlayEvent {
52
- nativeEvent: DragEvent;
53
- target: DockviewGroupDropLocation;
54
- position: Position;
55
- group?: DockviewGroupPanel;
56
- getData: () => PanelTransfer | undefined;
57
- }
58
- export interface DockviewComponentOptions extends DockviewRenderFunctions {
27
+ export interface DockviewOptions {
59
28
  disableAutoResizing?: boolean;
60
- watermarkComponent?: WatermarkConstructor;
61
- watermarkFrameworkComponent?: any;
62
- frameworkComponentFactory?: GroupPanelFrameworkComponentFactory;
63
- orientation?: Orientation;
64
- styles?: ISplitviewStyles;
65
- defaultTabComponent?: string;
66
- showDndOverlay?: (event: DockviewDndOverlayEvent) => boolean;
67
- createRightHeaderActionsElement?: (group: DockviewGroupPanel) => IHeaderActionsRenderer;
68
- createLeftHeaderActionsElement?: (group: DockviewGroupPanel) => IHeaderActionsRenderer;
69
- createPrefixHeaderActionsElement?: (group: DockviewGroupPanel) => IHeaderActionsRenderer;
29
+ hideBorders?: boolean;
70
30
  singleTabMode?: 'fullwidth' | 'default';
71
- parentElement: HTMLElement;
72
31
  disableFloatingGroups?: boolean;
73
32
  floatingGroupBounds?: 'boundedWithinViewport' | {
74
33
  minimumHeightWithinViewport?: number;
@@ -81,6 +40,44 @@ export interface DockviewComponentOptions extends DockviewRenderFunctions {
81
40
  locked?: boolean;
82
41
  disableDnd?: boolean;
83
42
  }
43
+ export interface DockviewDndOverlayEvent {
44
+ nativeEvent: DragEvent;
45
+ target: DockviewGroupDropLocation;
46
+ position: Position;
47
+ group?: DockviewGroupPanel;
48
+ getData: () => PanelTransfer | undefined;
49
+ isAccepted: boolean;
50
+ accept(): void;
51
+ }
52
+ export declare class DockviewUnhandledDragOverEvent implements DockviewDndOverlayEvent {
53
+ readonly nativeEvent: DragEvent;
54
+ readonly target: DockviewGroupDropLocation;
55
+ readonly position: Position;
56
+ readonly getData: () => PanelTransfer | undefined;
57
+ readonly group?: DockviewGroupPanel | undefined;
58
+ private _isAccepted;
59
+ get isAccepted(): boolean;
60
+ constructor(nativeEvent: DragEvent, target: DockviewGroupDropLocation, position: Position, getData: () => PanelTransfer | undefined, group?: DockviewGroupPanel | undefined);
61
+ accept(): void;
62
+ }
63
+ export declare const PROPERTY_KEYS: (keyof DockviewOptions)[];
64
+ export interface DockviewFrameworkOptions {
65
+ parentElement: HTMLElement;
66
+ defaultTabComponent?: string;
67
+ createRightHeaderActionComponent?: (group: DockviewGroupPanel) => IHeaderActionsRenderer;
68
+ createLeftHeaderActionComponent?: (group: DockviewGroupPanel) => IHeaderActionsRenderer;
69
+ createPrefixHeaderActionComponent?: (group: DockviewGroupPanel) => IHeaderActionsRenderer;
70
+ createTabComponent?: (options: {
71
+ id: string;
72
+ name: string;
73
+ }) => ITabRenderer | undefined;
74
+ createComponent: (options: {
75
+ id: string;
76
+ name: string;
77
+ }) => IContentRenderer;
78
+ createWatermarkComponent?: () => IWatermarkRenderer;
79
+ }
80
+ export type DockviewComponentOptions = DockviewOptions & DockviewFrameworkOptions;
84
81
  export interface PanelOptions<P extends object = Parameters> {
85
82
  component: string;
86
83
  tabComponent?: string;
@@ -118,11 +115,36 @@ type AddPanelPositionUnion = {
118
115
  type AddPanelOptionsUnion = AddPanelFloatingGroupUnion | AddPanelPositionUnion;
119
116
  export type AddPanelOptions<P extends object = Parameters> = {
120
117
  params?: P;
118
+ /**
119
+ * The unique id for the panel
120
+ */
121
121
  id: string;
122
+ /**
123
+ * The title for the panel which can be accessed within both the tab and component.
124
+ *
125
+ * If using the default tab renderer this title will be displayed in the tab.
126
+ */
122
127
  title?: string;
128
+ /**
129
+ * The id of the component renderer
130
+ */
123
131
  component: string;
132
+ /**
133
+ * The id of the tab componnet renderer
134
+ */
124
135
  tabComponent?: string;
136
+ /**
137
+ * The rendering mode of the panel.
138
+ *
139
+ * This dictates what happens to the HTML of the panel when it is hidden.
140
+ */
125
141
  renderer?: DockviewPanelRenderer;
142
+ /**
143
+ * If true then add the panel without setting it as the active panel.
144
+ *
145
+ * Defaults to `false` which forces newly added panels to become active.
146
+ */
147
+ inactive?: boolean;
126
148
  } & Partial<AddPanelOptionsUnion>;
127
149
  type AddGroupOptionsWithPanel = {
128
150
  referencePanel: string | IDockviewPanel;
@@ -1,3 +1,39 @@
1
+ export class DockviewUnhandledDragOverEvent {
2
+ get isAccepted() {
3
+ return this._isAccepted;
4
+ }
5
+ constructor(nativeEvent, target, position, getData, group) {
6
+ this.nativeEvent = nativeEvent;
7
+ this.target = target;
8
+ this.position = position;
9
+ this.getData = getData;
10
+ this.group = group;
11
+ this._isAccepted = false;
12
+ }
13
+ accept() {
14
+ this._isAccepted = true;
15
+ }
16
+ }
17
+ export const PROPERTY_KEYS = (() => {
18
+ /**
19
+ * by readong the keys from an empty value object TypeScript will error
20
+ * when we add or remove new properties to `DockviewOptions`
21
+ */
22
+ const properties = {
23
+ disableAutoResizing: undefined,
24
+ hideBorders: undefined,
25
+ singleTabMode: undefined,
26
+ disableFloatingGroups: undefined,
27
+ floatingGroupBounds: undefined,
28
+ popoutUrl: undefined,
29
+ defaultRenderer: undefined,
30
+ debug: undefined,
31
+ rootOverlayModel: undefined,
32
+ locked: undefined,
33
+ disableDnd: undefined,
34
+ };
35
+ return Object.keys(properties);
36
+ })();
1
37
  export function isPanelOptionsWithPanel(data) {
2
38
  if (data.referencePanel) {
3
39
  return true;
@@ -2,7 +2,6 @@ import { IDockviewComponent } from './dockviewComponent';
2
2
  import { DockviewPanelApi } from '../api/dockviewPanelApi';
3
3
  import { PanelInitParameters, IPanel } from '../panel/types';
4
4
  import { DockviewApi } from '../api/component.api';
5
- import { Event } from '../events';
6
5
  import { Optional } from '../types';
7
6
  import { DockviewGroupPanel, IDockviewGroupPanel } from './dockviewGroupPanel';
8
7
  import { DockviewPanelRenderer } from '../overlayRenderContainer';
@@ -13,27 +12,22 @@ export interface GroupPanelPartInitParameters extends PanelInitParameters, Heade
13
12
  api: DockviewPanelApi;
14
13
  containerApi: DockviewApi;
15
14
  }
16
- export interface GroupPanelContentPartInitParameters extends GroupPanelPartInitParameters {
17
- tab: ITabRenderer;
18
- }
19
15
  export interface WatermarkRendererInitParameters {
20
16
  containerApi: DockviewApi;
21
17
  group?: IDockviewGroupPanel;
22
18
  }
23
- export interface IWatermarkRenderer extends Optional<Omit<IPanel, 'id' | 'init'>, 'dispose' | 'update' | 'layout' | 'toJSON'> {
19
+ export interface IWatermarkRenderer extends Optional<Omit<IPanel, 'id' | 'init'>, 'dispose' | 'update' | 'layout' | 'toJSON' | 'focus'> {
24
20
  readonly element: HTMLElement;
25
21
  init: (params: WatermarkRendererInitParameters) => void;
26
22
  updateParentGroup(group: DockviewGroupPanel, visible: boolean): void;
27
23
  }
28
- export interface ITabRenderer extends Optional<Omit<IPanel, 'id'>, 'dispose' | 'update' | 'layout' | 'toJSON'> {
24
+ export interface ITabRenderer extends Optional<Omit<IPanel, 'id'>, 'dispose' | 'update' | 'layout' | 'toJSON' | 'focus'> {
29
25
  readonly element: HTMLElement;
30
26
  init(parameters: GroupPanelPartInitParameters): void;
31
27
  }
32
- export interface IContentRenderer extends Optional<Omit<IPanel, 'id'>, 'dispose' | 'update' | 'layout' | 'toJSON'> {
28
+ export interface IContentRenderer extends Optional<Omit<IPanel, 'id'>, 'dispose' | 'update' | 'layout' | 'toJSON' | 'focus'> {
33
29
  readonly element: HTMLElement;
34
- readonly onDidFocus?: Event<void>;
35
- readonly onDidBlur?: Event<void>;
36
- init(parameters: GroupPanelContentPartInitParameters): void;
30
+ init(parameters: GroupPanelPartInitParameters): void;
37
31
  }
38
32
  export interface WatermarkPartInitParameters {
39
33
  accessor: IDockviewComponent;
@@ -47,9 +47,20 @@ export declare class Emitter<T> implements IDisposable {
47
47
  }
48
48
  export declare function addDisposableWindowListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
49
49
  export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
50
- export declare class TickDelayedEvent implements IDisposable {
51
- private timer;
50
+ /**
51
+ *
52
+ * Event Emitter that fires events from a Microtask callback, only one event will fire per event-loop cycle.
53
+ *
54
+ * It's kind of like using an `asapScheduler` in RxJs with additional logic to only fire once per event-loop cycle.
55
+ * This implementation exists to avoid external dependencies.
56
+ *
57
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask
58
+ * @see https://rxjs.dev/api/index/const/asapScheduler
59
+ */
60
+ export declare class AsapEvent implements IDisposable {
52
61
  private readonly _onFired;
62
+ private _currentFireCount;
63
+ private _queued;
53
64
  readonly onEvent: Event<void>;
54
65
  fire(): void;
55
66
  dispose(): void;
@@ -150,18 +150,49 @@ export function addDisposableListener(element, type, listener, options) {
150
150
  },
151
151
  };
152
152
  }
153
- export class TickDelayedEvent {
153
+ /**
154
+ *
155
+ * Event Emitter that fires events from a Microtask callback, only one event will fire per event-loop cycle.
156
+ *
157
+ * It's kind of like using an `asapScheduler` in RxJs with additional logic to only fire once per event-loop cycle.
158
+ * This implementation exists to avoid external dependencies.
159
+ *
160
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask
161
+ * @see https://rxjs.dev/api/index/const/asapScheduler
162
+ */
163
+ export class AsapEvent {
154
164
  constructor() {
155
165
  this._onFired = new Emitter();
156
- this.onEvent = this._onFired.event;
166
+ this._currentFireCount = 0;
167
+ this._queued = false;
168
+ this.onEvent = (e) => {
169
+ /**
170
+ * when the event is first subscribed to take note of the current fire count
171
+ */
172
+ const fireCountAtTimeOfEventSubscription = this._currentFireCount;
173
+ return this._onFired.event(() => {
174
+ /**
175
+ * if the current fire count is greater than the fire count at event subscription
176
+ * then the event has been fired since we subscribed and it's ok to "on_next" the event.
177
+ *
178
+ * if the count is not greater then what we are recieving is an event from the microtask
179
+ * queue that was triggered before we actually subscribed and therfore we should ignore it.
180
+ */
181
+ if (this._currentFireCount > fireCountAtTimeOfEventSubscription) {
182
+ e();
183
+ }
184
+ });
185
+ };
157
186
  }
158
187
  fire() {
159
- if (this.timer) {
160
- clearTimeout(this.timer);
188
+ this._currentFireCount++;
189
+ if (this._queued) {
190
+ return;
161
191
  }
162
- this.timer = setTimeout(() => {
192
+ this._queued = true;
193
+ queueMicrotask(() => {
194
+ this._queued = false;
163
195
  this._onFired.fire();
164
- clearTimeout(this.timer);
165
196
  });
166
197
  }
167
198
  dispose() {
@@ -0,0 +1,4 @@
1
+ import { Parameters } from "./panel/types";
2
+ export interface PanelParameters<T extends {} = Parameters> {
3
+ params: T;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import { Event, TickDelayedEvent } from '../events';
1
+ import { Event, AsapEvent } from '../events';
2
2
  import { Gridview, IGridView } from './gridview';
3
3
  import { Position } from '../dnd/droptarget';
4
4
  import { IValueDisposable } from '../lifecycle';
@@ -51,15 +51,14 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizab
51
51
  protected readonly _groups: Map<string, IValueDisposable<T>>;
52
52
  protected readonly gridview: Gridview;
53
53
  protected _activeGroup: T | undefined;
54
- private _onDidLayoutChange;
55
- readonly onDidLayoutChange: Event<void>;
56
54
  private readonly _onDidRemove;
57
55
  readonly onDidRemove: Event<T>;
58
56
  private readonly _onDidAdd;
59
57
  readonly onDidAdd: Event<T>;
60
58
  private readonly _onDidActiveChange;
61
59
  readonly onDidActiveChange: Event<T | undefined>;
62
- protected readonly _bufferOnDidLayoutChange: TickDelayedEvent;
60
+ protected readonly _bufferOnDidLayoutChange: AsapEvent;
61
+ readonly onDidLayoutChange: Event<void>;
63
62
  get id(): string;
64
63
  get size(): number;
65
64
  get groups(): T[];
@@ -1,4 +1,4 @@
1
- import { Emitter, Event, TickDelayedEvent } from '../events';
1
+ import { Emitter, Event, AsapEvent } from '../events';
2
2
  import { getGridLocation, Gridview } from './gridview';
3
3
  import { Disposable } from '../lifecycle';
4
4
  import { sequentialNumberGenerator } from '../math';
@@ -61,15 +61,14 @@ export class BaseGrid extends Resizable {
61
61
  super(document.createElement('div'), options.disableAutoResizing);
62
62
  this._id = nextLayoutId.next();
63
63
  this._groups = new Map();
64
- this._onDidLayoutChange = new Emitter();
65
- this.onDidLayoutChange = this._onDidLayoutChange.event;
66
64
  this._onDidRemove = new Emitter();
67
65
  this.onDidRemove = this._onDidRemove.event;
68
66
  this._onDidAdd = new Emitter();
69
67
  this.onDidAdd = this._onDidAdd.event;
70
68
  this._onDidActiveChange = new Emitter();
71
69
  this.onDidActiveChange = this._onDidActiveChange.event;
72
- this._bufferOnDidLayoutChange = new TickDelayedEvent();
70
+ this._bufferOnDidLayoutChange = new AsapEvent();
71
+ this.onDidLayoutChange = this._bufferOnDidLayoutChange.onEvent;
73
72
  this.element.style.height = '100%';
74
73
  this.element.style.width = '100%';
75
74
  options.parentElement.appendChild(this.element);
@@ -84,13 +83,11 @@ export class BaseGrid extends Resizable {
84
83
  this._bufferOnDidLayoutChange.fire();
85
84
  }), Event.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
86
85
  this._bufferOnDidLayoutChange.fire();
87
- }), this._bufferOnDidLayoutChange.onEvent(() => {
88
- this._onDidLayoutChange.fire();
89
86
  }), this._bufferOnDidLayoutChange);
90
87
  }
91
88
  setVisible(panel, visible) {
92
89
  this.gridview.setViewVisible(getGridLocation(panel.element), visible);
93
- this._onDidLayoutChange.fire();
90
+ this._bufferOnDidLayoutChange.fire();
94
91
  }
95
92
  isVisible(panel) {
96
93
  return this.gridview.isViewVisible(getGridLocation(panel.element));
@@ -196,7 +193,6 @@ export class BaseGrid extends Resizable {
196
193
  this._onDidActiveChange.dispose();
197
194
  this._onDidAdd.dispose();
198
195
  this._onDidRemove.dispose();
199
- this._onDidLayoutChange.dispose();
200
196
  for (const group of this.groups) {
201
197
  group.dispose();
202
198
  }
@@ -12,14 +12,15 @@ export { SplitviewComponentOptions, PanelViewInitParameters, } from './splitview
12
12
  export * from './paneview/paneview';
13
13
  export * from './gridview/gridview';
14
14
  export { GridviewComponentOptions } from './gridview/options';
15
- export * from './dockview/dockviewGroupPanelModel';
16
15
  export * from './gridview/baseComponentGridview';
17
16
  export * from './paneview/draggablePaneviewPanel';
18
17
  export * from './dockview/components/panel/content';
19
18
  export * from './dockview/components/tab/tab';
19
+ export * from './dockview/dockviewGroupPanelModel';
20
20
  export { TabDragEvent, GroupDragEvent, } from './dockview/components/titlebar/tabsContainer';
21
21
  export * from './dockview/types';
22
22
  export * from './dockview/dockviewGroupPanel';
23
+ export { IGroupPanelBaseProps, IDockviewPanelHeaderProps, IDockviewPanelProps, IDockviewHeaderActionsProps, IGroupHeaderProps, IWatermarkPanelProps, DockviewReadyEvent, } from './dockview/framework';
23
24
  export * from './dockview/options';
24
25
  export * from './dockview/dockviewPanel';
25
26
  export * from './dockview/components/tab/defaultTab';
package/dist/esm/index.js CHANGED
@@ -10,11 +10,11 @@ export * from './panel/componentFactory';
10
10
  export * from './splitview/splitview';
11
11
  export * from './paneview/paneview';
12
12
  export * from './gridview/gridview';
13
- export * from './dockview/dockviewGroupPanelModel';
14
13
  export * from './gridview/baseComponentGridview';
15
14
  export * from './paneview/draggablePaneviewPanel';
16
15
  export * from './dockview/components/panel/content';
17
16
  export * from './dockview/components/tab/tab';
17
+ export * from './dockview/dockviewGroupPanelModel';
18
18
  export * from './dockview/types';
19
19
  export * from './dockview/dockviewGroupPanel';
20
20
  export * from './dockview/options';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dockview-core",
3
- "version": "1.12.0",
4
- "description": "Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support",
3
+ "version": "1.13.1",
4
+ "description": "Zero dependency layout manager supporting tabs, grids and splitviews",
5
5
  "keywords": [
6
6
  "splitview",
7
7
  "split-view",