dockview-angular 4.13.1 → 5.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.
- package/README.md +49 -17
- package/dist/README.md +88 -0
- package/dist/dockview-angular.d.ts.map +1 -0
- package/dist/dockview.css +63 -7
- package/dist/esm2022/dockview-angular.mjs +5 -0
- package/dist/esm2022/lib/dockview/dockview-angular.component.mjs +185 -0
- package/dist/esm2022/lib/dockview/types.mjs +3 -0
- package/dist/esm2022/lib/dockview-angular.module.mjs +38 -0
- package/dist/esm2022/lib/gridview/angular-gridview-panel.mjs +24 -0
- package/dist/esm2022/lib/gridview/gridview-angular.component.mjs +98 -0
- package/dist/esm2022/lib/gridview/types.mjs +3 -0
- package/dist/esm2022/lib/paneview/angular-pane-part.mjs +26 -0
- package/dist/esm2022/lib/paneview/paneview-angular.component.mjs +122 -0
- package/dist/esm2022/lib/paneview/types.mjs +3 -0
- package/dist/esm2022/lib/splitview/angular-splitview-panel.mjs +24 -0
- package/dist/esm2022/lib/splitview/splitview-angular.component.mjs +98 -0
- package/dist/esm2022/lib/splitview/types.mjs +3 -0
- package/dist/esm2022/lib/utils/angular-renderer.mjs +83 -0
- package/dist/esm2022/lib/utils/component-factory.mjs +100 -0
- package/dist/esm2022/lib/utils/lifecycle-utils.mjs +69 -0
- package/dist/esm2022/public-api.mjs +17 -0
- package/dist/fesm2022/dockview-angular.mjs +846 -0
- package/dist/fesm2022/dockview-angular.mjs.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/{cjs/lib → lib}/dockview/dockview-angular.component.d.ts +4 -0
- package/dist/lib/dockview/dockview-angular.component.d.ts.map +1 -0
- package/dist/{cjs/lib → lib}/dockview/types.d.ts +2 -1
- package/dist/lib/dockview/types.d.ts.map +1 -0
- package/dist/lib/dockview-angular.module.d.ts +12 -0
- package/dist/lib/dockview-angular.module.d.ts.map +1 -0
- package/dist/{cjs/lib → lib}/gridview/angular-gridview-panel.d.ts +1 -0
- package/dist/lib/gridview/angular-gridview-panel.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/gridview/gridview-angular.component.d.ts +4 -0
- package/dist/lib/gridview/gridview-angular.component.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/gridview/types.d.ts +1 -0
- package/dist/lib/gridview/types.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/paneview/angular-pane-part.d.ts +1 -0
- package/dist/lib/paneview/angular-pane-part.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/paneview/paneview-angular.component.d.ts +4 -0
- package/dist/lib/paneview/paneview-angular.component.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/paneview/types.d.ts +1 -0
- package/dist/lib/paneview/types.d.ts.map +1 -0
- package/dist/{cjs/lib → lib}/splitview/angular-splitview-panel.d.ts +1 -0
- package/dist/lib/splitview/angular-splitview-panel.d.ts.map +1 -0
- package/dist/{cjs/lib → lib}/splitview/splitview-angular.component.d.ts +4 -0
- package/dist/lib/splitview/splitview-angular.component.d.ts.map +1 -0
- package/dist/{cjs/lib → lib}/splitview/types.d.ts +1 -0
- package/dist/lib/splitview/types.d.ts.map +1 -0
- package/dist/lib/utils/angular-renderer.d.ts +21 -0
- package/dist/lib/utils/angular-renderer.d.ts.map +1 -0
- package/dist/{cjs/lib → lib}/utils/component-factory.d.ts +1 -0
- package/dist/lib/utils/component-factory.d.ts.map +1 -0
- package/dist/{cjs/lib → lib}/utils/lifecycle-utils.d.ts +1 -0
- package/dist/lib/utils/lifecycle-utils.d.ts.map +1 -0
- package/dist/{cjs/public-api.d.ts → public-api.d.ts} +5 -4
- package/dist/public-api.d.ts.map +1 -0
- package/package.json +72 -66
- package/dist/cjs/index.d.ts +0 -1
- package/dist/cjs/index.js +0 -17
- package/dist/cjs/lib/dockview/dockview-angular.component.js +0 -256
- package/dist/cjs/lib/dockview/types.js +0 -8
- package/dist/cjs/lib/dockview-angular.module.d.ts +0 -2
- package/dist/cjs/lib/dockview-angular.module.js +0 -35
- package/dist/cjs/lib/gridview/angular-gridview-panel.js +0 -21
- package/dist/cjs/lib/gridview/gridview-angular.component.d.ts +0 -28
- package/dist/cjs/lib/gridview/gridview-angular.component.js +0 -140
- package/dist/cjs/lib/gridview/types.d.ts +0 -12
- package/dist/cjs/lib/gridview/types.js +0 -6
- package/dist/cjs/lib/paneview/angular-pane-part.d.ts +0 -13
- package/dist/cjs/lib/paneview/angular-pane-part.js +0 -29
- package/dist/cjs/lib/paneview/paneview-angular.component.d.ts +0 -31
- package/dist/cjs/lib/paneview/paneview-angular.component.js +0 -166
- package/dist/cjs/lib/paneview/types.d.ts +0 -14
- package/dist/cjs/lib/paneview/types.js +0 -6
- package/dist/cjs/lib/splitview/angular-splitview-panel.js +0 -21
- package/dist/cjs/lib/splitview/splitview-angular.component.js +0 -140
- package/dist/cjs/lib/splitview/types.js +0 -6
- package/dist/cjs/lib/utils/angular-renderer.d.ts +0 -18
- package/dist/cjs/lib/utils/angular-renderer.js +0 -70
- package/dist/cjs/lib/utils/component-factory.js +0 -103
- package/dist/cjs/lib/utils/lifecycle-utils.js +0 -74
- package/dist/cjs/public-api.js +0 -32
- package/dist/dockview-angular.amd.js +0 -13209
- package/dist/dockview-angular.amd.js.map +0 -1
- package/dist/dockview-angular.amd.min.js +0 -8
- package/dist/dockview-angular.amd.min.js.map +0 -1
- package/dist/dockview-angular.amd.min.noStyle.js +0 -8
- package/dist/dockview-angular.amd.min.noStyle.js.map +0 -1
- package/dist/dockview-angular.amd.noStyle.js +0 -13179
- package/dist/dockview-angular.amd.noStyle.js.map +0 -1
- package/dist/dockview-angular.cjs.js +0 -13211
- package/dist/dockview-angular.cjs.js.map +0 -1
- package/dist/dockview-angular.esm.js +0 -13139
- package/dist/dockview-angular.esm.js.map +0 -1
- package/dist/dockview-angular.esm.min.js +0 -8
- package/dist/dockview-angular.esm.min.js.map +0 -1
- package/dist/dockview-angular.js +0 -13213
- package/dist/dockview-angular.js.map +0 -1
- package/dist/dockview-angular.min.js +0 -8
- package/dist/dockview-angular.min.js.map +0 -1
- package/dist/dockview-angular.min.noStyle.js +0 -8
- package/dist/dockview-angular.min.noStyle.js.map +0 -1
- package/dist/dockview-angular.noStyle.js +0 -13183
- package/dist/dockview-angular.noStyle.js.map +0 -1
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/lib/dockview/dockview-angular.component.d.ts +0 -49
- package/dist/esm/lib/dockview/dockview-angular.component.js +0 -253
- package/dist/esm/lib/dockview/types.d.ts +0 -27
- package/dist/esm/lib/dockview/types.js +0 -2
- package/dist/esm/lib/dockview-angular.module.d.ts +0 -2
- package/dist/esm/lib/dockview-angular.module.js +0 -32
- package/dist/esm/lib/gridview/angular-gridview-panel.d.ts +0 -9
- package/dist/esm/lib/gridview/angular-gridview-panel.js +0 -17
- package/dist/esm/lib/gridview/gridview-angular.component.js +0 -137
- package/dist/esm/lib/gridview/types.js +0 -2
- package/dist/esm/lib/paneview/angular-pane-part.js +0 -25
- package/dist/esm/lib/paneview/paneview-angular.component.js +0 -163
- package/dist/esm/lib/paneview/types.js +0 -2
- package/dist/esm/lib/splitview/angular-splitview-panel.d.ts +0 -9
- package/dist/esm/lib/splitview/angular-splitview-panel.js +0 -17
- package/dist/esm/lib/splitview/splitview-angular.component.d.ts +0 -28
- package/dist/esm/lib/splitview/splitview-angular.component.js +0 -137
- package/dist/esm/lib/splitview/types.d.ts +0 -12
- package/dist/esm/lib/splitview/types.js +0 -2
- package/dist/esm/lib/utils/angular-renderer.d.ts +0 -18
- package/dist/esm/lib/utils/angular-renderer.js +0 -66
- package/dist/esm/lib/utils/component-factory.d.ts +0 -20
- package/dist/esm/lib/utils/component-factory.js +0 -99
- package/dist/esm/lib/utils/lifecycle-utils.d.ts +0 -18
- package/dist/esm/lib/utils/lifecycle-utils.js +0 -68
- package/dist/esm/public-api.d.ts +0 -13
- package/dist/esm/public-api.js +0 -16
package/README.md
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<h1>dockview</h1>
|
|
2
|
+
<h1>dockview-angular</h1>
|
|
3
3
|
|
|
4
|
-
<p>
|
|
4
|
+
<p>Angular bindings for dockview — zero dependency layout manager supporting tabs, groups, grids and splitviews</p>
|
|
5
5
|
|
|
6
6
|
</div>
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
[](https://www.npmjs.com/package/dockview)
|
|
11
|
-
[](https://www.npmjs.com/package/dockview)
|
|
10
|
+
[](https://www.npmjs.com/package/dockview-angular)
|
|
11
|
+
[](https://www.npmjs.com/package/dockview-angular)
|
|
12
12
|
[](https://github.com/mathuo/dockview/actions?query=workflow%3ACI)
|
|
13
13
|
[](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
|
|
14
14
|
[](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
|
|
15
|
-
[](https://bundlephobia.com/result?p=dockview)
|
|
15
|
+
[](https://bundlephobia.com/result?p=dockview-angular)
|
|
16
16
|
|
|
17
17
|
##
|
|
18
18
|
|
|
19
|
+

|
|
20
|
+
|
|
19
21
|
Please see the website: https://dockview.dev
|
|
20
22
|
|
|
21
23
|
## Features
|
|
@@ -31,26 +33,56 @@ Please see the website: https://dockview.dev
|
|
|
31
33
|
- High test coverage
|
|
32
34
|
- Documentation website with live examples
|
|
33
35
|
- Transparent builds and Code Analysis
|
|
34
|
-
- Security at mind -
|
|
35
|
-
|
|
36
|
-
Want to verify our builds? Go [here](https://www.npmjs.com/package/dockview#Provenance).
|
|
36
|
+
- Security at mind - verified publishing and builds through GitHub Actions
|
|
37
37
|
|
|
38
|
-
## Quick
|
|
38
|
+
## Quick Start
|
|
39
39
|
|
|
40
|
-
Dockview has a peer dependency on
|
|
40
|
+
Dockview-angular has a peer dependency on `@angular/core >= 21`. Install from [npm](https://www.npmjs.com/package/dockview-angular):
|
|
41
41
|
|
|
42
42
|
```
|
|
43
|
-
npm install
|
|
43
|
+
npm install dockview-angular
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Import the stylesheet in your `styles.css` or `angular.json`:
|
|
47
47
|
|
|
48
48
|
```css
|
|
49
|
-
@import '
|
|
49
|
+
@import 'dockview-angular/dist/dockview.css';
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
|
|
52
|
+
Use the component in your Angular template:
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { Component } from '@angular/core';
|
|
56
|
+
import { DockviewModule } from 'dockview-angular';
|
|
57
|
+
import { DockviewReadyEvent } from 'dockview-core';
|
|
58
|
+
|
|
59
|
+
@Component({
|
|
60
|
+
selector: 'app-root',
|
|
61
|
+
standalone: true,
|
|
62
|
+
imports: [DockviewModule],
|
|
63
|
+
template: `
|
|
64
|
+
<div class="dockview-theme-dark" style="height: 400px">
|
|
65
|
+
<dockview-angular
|
|
66
|
+
[components]="components"
|
|
67
|
+
(ready)="onReady($event)"
|
|
68
|
+
></dockview-angular>
|
|
69
|
+
</div>
|
|
70
|
+
`,
|
|
71
|
+
})
|
|
72
|
+
export class AppComponent {
|
|
73
|
+
components = {
|
|
74
|
+
myComponent: /* your panel component */,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
onReady(event: DockviewReadyEvent) {
|
|
78
|
+
event.api.addPanel({
|
|
79
|
+
id: 'panel_1',
|
|
80
|
+
component: 'myComponent',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
56
84
|
```
|
|
85
|
+
|
|
86
|
+
See the [documentation](https://dockview.dev) for full examples.
|
|
87
|
+
|
|
88
|
+
Want to verify our builds? Go [here](https://www.npmjs.com/package/dockview-angular#Provenance).
|
package/dist/README.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1>dockview-angular</h1>
|
|
3
|
+
|
|
4
|
+
<p>Angular bindings for dockview — zero dependency layout manager supporting tabs, groups, grids and splitviews</p>
|
|
5
|
+
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
[](https://www.npmjs.com/package/dockview-angular)
|
|
11
|
+
[](https://www.npmjs.com/package/dockview-angular)
|
|
12
|
+
[](https://github.com/mathuo/dockview/actions?query=workflow%3ACI)
|
|
13
|
+
[](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
|
|
14
|
+
[](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
|
|
15
|
+
[](https://bundlephobia.com/result?p=dockview-angular)
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
Please see the website: https://dockview.dev
|
|
22
|
+
|
|
23
|
+
## Features
|
|
24
|
+
|
|
25
|
+
- Serialization / deserialization with full layout management
|
|
26
|
+
- Support for split-views, grid-views and 'dockable' views
|
|
27
|
+
- Themeable and customizable
|
|
28
|
+
- Tab and Group docking / Drag n' Drop
|
|
29
|
+
- Popout Windows
|
|
30
|
+
- Floating Groups
|
|
31
|
+
- Extensive API
|
|
32
|
+
- Supports Shadow DOMs
|
|
33
|
+
- High test coverage
|
|
34
|
+
- Documentation website with live examples
|
|
35
|
+
- Transparent builds and Code Analysis
|
|
36
|
+
- Security at mind - verified publishing and builds through GitHub Actions
|
|
37
|
+
|
|
38
|
+
## Quick Start
|
|
39
|
+
|
|
40
|
+
Dockview-angular has a peer dependency on `@angular/core >= 21`. Install from [npm](https://www.npmjs.com/package/dockview-angular):
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
npm install dockview-angular
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Import the stylesheet in your `styles.css` or `angular.json`:
|
|
47
|
+
|
|
48
|
+
```css
|
|
49
|
+
@import 'dockview-angular/dist/dockview.css';
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Use the component in your Angular template:
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { Component } from '@angular/core';
|
|
56
|
+
import { DockviewModule } from 'dockview-angular';
|
|
57
|
+
import { DockviewReadyEvent } from 'dockview-core';
|
|
58
|
+
|
|
59
|
+
@Component({
|
|
60
|
+
selector: 'app-root',
|
|
61
|
+
standalone: true,
|
|
62
|
+
imports: [DockviewModule],
|
|
63
|
+
template: `
|
|
64
|
+
<div class="dockview-theme-dark" style="height: 400px">
|
|
65
|
+
<dockview-angular
|
|
66
|
+
[components]="components"
|
|
67
|
+
(ready)="onReady($event)"
|
|
68
|
+
></dockview-angular>
|
|
69
|
+
</div>
|
|
70
|
+
`,
|
|
71
|
+
})
|
|
72
|
+
export class AppComponent {
|
|
73
|
+
components = {
|
|
74
|
+
myComponent: /* your panel component */,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
onReady(event: DockviewReadyEvent) {
|
|
78
|
+
event.api.addPanel({
|
|
79
|
+
id: 'panel_1',
|
|
80
|
+
component: 'myComponent',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
See the [documentation](https://dockview.dev) for full examples.
|
|
87
|
+
|
|
88
|
+
Want to verify our builds? Go [here](https://www.npmjs.com/package/dockview-angular#Provenance).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockview-angular.d.ts","sourceRoot":"","sources":["../src/dockview-angular.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,cAAc,CAAC"}
|
package/dist/dockview.css
CHANGED
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
position: relative;
|
|
3
3
|
overflow: hidden;
|
|
4
4
|
}
|
|
5
|
-
.dv-scrollable .dv-scrollbar
|
|
5
|
+
.dv-scrollable .dv-scrollbar {
|
|
6
6
|
position: absolute;
|
|
7
|
-
bottom: 0px;
|
|
8
|
-
left: 0px;
|
|
9
|
-
height: 4px;
|
|
10
7
|
border-radius: 2px;
|
|
11
8
|
background-color: transparent;
|
|
12
9
|
/* GPU optimizations */
|
|
@@ -18,7 +15,17 @@
|
|
|
18
15
|
transition-duration: 1s;
|
|
19
16
|
transition-delay: 0s;
|
|
20
17
|
}
|
|
21
|
-
.dv-scrollable
|
|
18
|
+
.dv-scrollable .dv-scrollbar-horizontal {
|
|
19
|
+
bottom: 0px;
|
|
20
|
+
left: 0px;
|
|
21
|
+
height: 4px;
|
|
22
|
+
}
|
|
23
|
+
.dv-scrollable .dv-scrollbar-vertical {
|
|
24
|
+
right: 0px;
|
|
25
|
+
top: 0px;
|
|
26
|
+
width: 4px;
|
|
27
|
+
}
|
|
28
|
+
.dv-scrollable:hover .dv-scrollbar, .dv-scrollable.dv-scrollable-resizing .dv-scrollbar, .dv-scrollable.dv-scrollable-scrolling .dv-scrollbar {
|
|
22
29
|
background-color: var(--dv-scrollbar-background-color, rgba(255, 255, 255, 0.25));
|
|
23
30
|
}
|
|
24
31
|
.dv-svg {
|
|
@@ -686,10 +693,10 @@
|
|
|
686
693
|
}
|
|
687
694
|
.dv-groupview {
|
|
688
695
|
display: flex;
|
|
689
|
-
flex-direction: column;
|
|
690
696
|
height: 100%;
|
|
691
697
|
background-color: var(--dv-group-view-background-color);
|
|
692
698
|
overflow: hidden;
|
|
699
|
+
flex-direction: column;
|
|
693
700
|
}
|
|
694
701
|
.dv-groupview:focus {
|
|
695
702
|
outline: none;
|
|
@@ -699,6 +706,15 @@
|
|
|
699
706
|
min-height: 0;
|
|
700
707
|
outline: none;
|
|
701
708
|
}
|
|
709
|
+
.dv-groupview.dv-groupview-header-bottom {
|
|
710
|
+
flex-direction: column-reverse;
|
|
711
|
+
}
|
|
712
|
+
.dv-groupview.dv-groupview-header-left {
|
|
713
|
+
flex-direction: row;
|
|
714
|
+
}
|
|
715
|
+
.dv-groupview.dv-groupview-header-right {
|
|
716
|
+
flex-direction: row-reverse;
|
|
717
|
+
}
|
|
702
718
|
.dv-root-wrapper {
|
|
703
719
|
height: 100%;
|
|
704
720
|
width: 100%;
|
|
@@ -1092,6 +1108,7 @@
|
|
|
1092
1108
|
.dv-tab .dv-default-tab {
|
|
1093
1109
|
position: relative;
|
|
1094
1110
|
height: 100%;
|
|
1111
|
+
width: 100%;
|
|
1095
1112
|
display: flex;
|
|
1096
1113
|
align-items: center;
|
|
1097
1114
|
white-space: nowrap;
|
|
@@ -1139,7 +1156,13 @@
|
|
|
1139
1156
|
/* Track */
|
|
1140
1157
|
/* Handle */
|
|
1141
1158
|
}
|
|
1142
|
-
.dv-tabs-container.dv-
|
|
1159
|
+
.dv-tabs-container.dv-tabs-container-vertical {
|
|
1160
|
+
width: 100%;
|
|
1161
|
+
height: fit-content;
|
|
1162
|
+
max-height: 100%;
|
|
1163
|
+
writing-mode: vertical-rl;
|
|
1164
|
+
}
|
|
1165
|
+
.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before, .dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {
|
|
1143
1166
|
content: " ";
|
|
1144
1167
|
position: absolute;
|
|
1145
1168
|
top: 0;
|
|
@@ -1147,9 +1170,15 @@
|
|
|
1147
1170
|
z-index: 5;
|
|
1148
1171
|
pointer-events: none;
|
|
1149
1172
|
background-color: var(--dv-tab-divider-color);
|
|
1173
|
+
}
|
|
1174
|
+
.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before {
|
|
1150
1175
|
width: 1px;
|
|
1151
1176
|
height: 100%;
|
|
1152
1177
|
}
|
|
1178
|
+
.dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {
|
|
1179
|
+
width: 100%;
|
|
1180
|
+
height: 1px;
|
|
1181
|
+
}
|
|
1153
1182
|
.dv-tabs-container::-webkit-scrollbar {
|
|
1154
1183
|
height: 3px;
|
|
1155
1184
|
}
|
|
@@ -1175,11 +1204,30 @@
|
|
|
1175
1204
|
margin: var(--dv-tab-margin);
|
|
1176
1205
|
}
|
|
1177
1206
|
|
|
1207
|
+
.dv-tabs-container-vertical .dv-tab {
|
|
1208
|
+
padding: 0.5rem 0.25rem;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1178
1211
|
.dv-tabs-overflow-container {
|
|
1179
1212
|
flex-direction: column;
|
|
1180
1213
|
height: unset;
|
|
1214
|
+
max-height: min(50vh, 400px);
|
|
1215
|
+
overflow-y: auto;
|
|
1181
1216
|
border: 1px solid var(--dv-tab-divider-color);
|
|
1182
1217
|
background-color: var(--dv-group-view-background-color);
|
|
1218
|
+
/* Scrollbar styling for webkit browsers */
|
|
1219
|
+
/* Firefox scrollbar */
|
|
1220
|
+
scrollbar-width: thin;
|
|
1221
|
+
}
|
|
1222
|
+
.dv-tabs-overflow-container::-webkit-scrollbar {
|
|
1223
|
+
width: 6px;
|
|
1224
|
+
}
|
|
1225
|
+
.dv-tabs-overflow-container::-webkit-scrollbar-track {
|
|
1226
|
+
background: transparent;
|
|
1227
|
+
}
|
|
1228
|
+
.dv-tabs-overflow-container::-webkit-scrollbar-thumb {
|
|
1229
|
+
background: var(--dv-tabs-container-scrollbar-color);
|
|
1230
|
+
border-radius: 3px;
|
|
1183
1231
|
}
|
|
1184
1232
|
.dv-tabs-overflow-container .dv-tab:not(:last-child) {
|
|
1185
1233
|
border-bottom: 1px solid var(--dv-tab-divider-color);
|
|
@@ -1223,6 +1271,14 @@
|
|
|
1223
1271
|
.dv-tabs-and-actions-container .dv-right-actions-container {
|
|
1224
1272
|
display: flex;
|
|
1225
1273
|
}
|
|
1274
|
+
.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical {
|
|
1275
|
+
flex-direction: column;
|
|
1276
|
+
}
|
|
1277
|
+
.dv-tabs-and-actions-container.dv-groupview-header-vertical {
|
|
1278
|
+
flex-direction: column;
|
|
1279
|
+
height: auto;
|
|
1280
|
+
width: var(--dv-tabs-and-actions-container-height);
|
|
1281
|
+
}
|
|
1226
1282
|
.dv-watermark {
|
|
1227
1283
|
display: flex;
|
|
1228
1284
|
height: 100%;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja3ZpZXctYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb2Nrdmlldy1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { Component, ElementRef, EventEmitter, Injector, Input, Output, Type, ViewChild, ChangeDetectionStrategy, EnvironmentInjector, inject, } from '@angular/core';
|
|
2
|
+
import { createDockview, PROPERTY_KEYS_DOCKVIEW, } from 'dockview-core';
|
|
3
|
+
import { AngularFrameworkComponentFactory } from '../utils/component-factory';
|
|
4
|
+
import { AngularLifecycleManager } from '../utils/lifecycle-utils';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class DockviewAngularComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.ready = new EventEmitter();
|
|
9
|
+
this.didDrop = new EventEmitter();
|
|
10
|
+
this.willDrop = new EventEmitter();
|
|
11
|
+
this.lifecycleManager = new AngularLifecycleManager();
|
|
12
|
+
this.injector = inject(Injector);
|
|
13
|
+
this.environmentInjector = inject(EnvironmentInjector);
|
|
14
|
+
}
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
this.initializeDockview();
|
|
17
|
+
}
|
|
18
|
+
ngOnDestroy() {
|
|
19
|
+
this.lifecycleManager.destroy();
|
|
20
|
+
if (this.dockviewApi) {
|
|
21
|
+
this.dockviewApi.dispose();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
ngOnChanges(changes) {
|
|
25
|
+
if (this.dockviewApi) {
|
|
26
|
+
const coreChanges = {};
|
|
27
|
+
let hasChanges = false;
|
|
28
|
+
// Check for changes in core dockview properties
|
|
29
|
+
PROPERTY_KEYS_DOCKVIEW.forEach((key) => {
|
|
30
|
+
if (changes[key] && !changes[key].isFirstChange()) {
|
|
31
|
+
coreChanges[key] = changes[key].currentValue;
|
|
32
|
+
hasChanges = true;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
if (hasChanges) {
|
|
36
|
+
this.dockviewApi.updateOptions(coreChanges);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
getDockviewApi() {
|
|
41
|
+
return this.dockviewApi;
|
|
42
|
+
}
|
|
43
|
+
initializeDockview() {
|
|
44
|
+
if (!this.components) {
|
|
45
|
+
throw new Error('DockviewAngularComponent: components input is required');
|
|
46
|
+
}
|
|
47
|
+
const coreOptions = this.extractCoreOptions();
|
|
48
|
+
const frameworkOptions = this.createFrameworkOptions();
|
|
49
|
+
this.dockviewApi = createDockview(this.containerRef.nativeElement, {
|
|
50
|
+
...coreOptions,
|
|
51
|
+
...frameworkOptions,
|
|
52
|
+
});
|
|
53
|
+
// Set up event listeners
|
|
54
|
+
this.setupEventListeners();
|
|
55
|
+
// Emit ready event
|
|
56
|
+
this.ready.emit({ api: this.dockviewApi });
|
|
57
|
+
}
|
|
58
|
+
extractCoreOptions() {
|
|
59
|
+
const coreOptions = {};
|
|
60
|
+
PROPERTY_KEYS_DOCKVIEW.forEach((key) => {
|
|
61
|
+
const value = this[key];
|
|
62
|
+
if (value !== undefined) {
|
|
63
|
+
coreOptions[key] = value;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return coreOptions;
|
|
67
|
+
}
|
|
68
|
+
createFrameworkOptions() {
|
|
69
|
+
const headerActionsComponents = {};
|
|
70
|
+
if (this.leftHeaderActionsComponent) {
|
|
71
|
+
headerActionsComponents['left'] = this.leftHeaderActionsComponent;
|
|
72
|
+
}
|
|
73
|
+
if (this.rightHeaderActionsComponent) {
|
|
74
|
+
headerActionsComponents['right'] = this.rightHeaderActionsComponent;
|
|
75
|
+
}
|
|
76
|
+
if (this.prefixHeaderActionsComponent) {
|
|
77
|
+
headerActionsComponents['prefix'] =
|
|
78
|
+
this.prefixHeaderActionsComponent;
|
|
79
|
+
}
|
|
80
|
+
const componentFactory = new AngularFrameworkComponentFactory(this.components, this.injector, this.environmentInjector, this.tabComponents, this.watermarkComponent, headerActionsComponents, this.defaultTabComponent);
|
|
81
|
+
return {
|
|
82
|
+
createComponent: (options) => {
|
|
83
|
+
return componentFactory.createDockviewComponent(options);
|
|
84
|
+
},
|
|
85
|
+
createTabComponent: (options) => {
|
|
86
|
+
return componentFactory.createTabComponent(options);
|
|
87
|
+
},
|
|
88
|
+
createWatermarkComponent: this.watermarkComponent
|
|
89
|
+
? () => {
|
|
90
|
+
return componentFactory.createWatermarkComponent();
|
|
91
|
+
}
|
|
92
|
+
: undefined,
|
|
93
|
+
createLeftHeaderActionComponent: this.leftHeaderActionsComponent
|
|
94
|
+
? (group) => {
|
|
95
|
+
return componentFactory.createHeaderActionsComponent('left');
|
|
96
|
+
}
|
|
97
|
+
: undefined,
|
|
98
|
+
createRightHeaderActionComponent: this.rightHeaderActionsComponent
|
|
99
|
+
? (group) => {
|
|
100
|
+
return componentFactory.createHeaderActionsComponent('right');
|
|
101
|
+
}
|
|
102
|
+
: undefined,
|
|
103
|
+
createPrefixHeaderActionComponent: this.prefixHeaderActionsComponent
|
|
104
|
+
? (group) => {
|
|
105
|
+
return componentFactory.createHeaderActionsComponent('prefix');
|
|
106
|
+
}
|
|
107
|
+
: undefined,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
setupEventListeners() {
|
|
111
|
+
if (!this.dockviewApi) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Set up event subscriptions using lifecycle manager
|
|
115
|
+
const api = this.dockviewApi;
|
|
116
|
+
if (this.didDrop.observers.length > 0) {
|
|
117
|
+
const disposable = api.onDidDrop((event) => {
|
|
118
|
+
this.didDrop.emit(event);
|
|
119
|
+
});
|
|
120
|
+
this.lifecycleManager.addDisposable(disposable);
|
|
121
|
+
}
|
|
122
|
+
if (this.willDrop.observers.length > 0) {
|
|
123
|
+
const disposable = api.onWillDrop((event) => {
|
|
124
|
+
this.willDrop.emit(event);
|
|
125
|
+
});
|
|
126
|
+
this.lifecycleManager.addDisposable(disposable);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DockviewAngularComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
130
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DockviewAngularComponent, isStandalone: true, selector: "dv-dockview", inputs: { components: "components", tabComponents: "tabComponents", watermarkComponent: "watermarkComponent", defaultTabComponent: "defaultTabComponent", leftHeaderActionsComponent: "leftHeaderActionsComponent", rightHeaderActionsComponent: "rightHeaderActionsComponent", prefixHeaderActionsComponent: "prefixHeaderActionsComponent", className: "className", orientation: "orientation", hideBorders: "hideBorders", rootOverlayModel: "rootOverlayModel", defaultTabComponent_: "defaultTabComponent_", tabHeight: "tabHeight", disableFloatingGroups: "disableFloatingGroups", floatingGroupBounds: "floatingGroupBounds", popoutUrl: "popoutUrl", debug: "debug", locked: "locked", disableAutoResizing: "disableAutoResizing", singleTabMode: "singleTabMode" }, outputs: { ready: "ready", didDrop: "didDrop", willDrop: "willDrop" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["dockviewContainer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: '<div #dockviewContainer class="dockview-container"></div>', isInline: true, styles: [":host{display:block;width:100%;height:100%}.dockview-container{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
131
|
+
}
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DockviewAngularComponent, decorators: [{
|
|
133
|
+
type: Component,
|
|
134
|
+
args: [{ selector: 'dv-dockview', standalone: true, template: '<div #dockviewContainer class="dockview-container"></div>', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%}.dockview-container{width:100%;height:100%}\n"] }]
|
|
135
|
+
}], propDecorators: { containerRef: [{
|
|
136
|
+
type: ViewChild,
|
|
137
|
+
args: ['dockviewContainer', { static: true }]
|
|
138
|
+
}], components: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], tabComponents: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], watermarkComponent: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], defaultTabComponent: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], leftHeaderActionsComponent: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], rightHeaderActionsComponent: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], prefixHeaderActionsComponent: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], className: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], orientation: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], hideBorders: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], rootOverlayModel: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], defaultTabComponent_: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], tabHeight: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], disableFloatingGroups: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}], floatingGroupBounds: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], popoutUrl: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], debug: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], locked: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], disableAutoResizing: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], singleTabMode: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], ready: [{
|
|
179
|
+
type: Output
|
|
180
|
+
}], didDrop: [{
|
|
181
|
+
type: Output
|
|
182
|
+
}], willDrop: [{
|
|
183
|
+
type: Output
|
|
184
|
+
}] } });
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja3ZpZXctYW5ndWxhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RvY2t2aWV3L2RvY2t2aWV3LWFuZ3VsYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUdMLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxFQUNULHVCQUF1QixFQUd2QixtQkFBbUIsRUFDbkIsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFNSCxjQUFjLEVBQ2Qsc0JBQXNCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQWdDbkUsTUFBTSxPQUFPLHdCQUF3QjtJQXBCckM7UUErQ2MsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQy9DLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUNuRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFHdkQscUJBQWdCLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pELGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0F3SjdEO0lBdEpHLFFBQVE7UUFDSixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLE9B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QkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVHlwZSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBEb2Nrdmlld0FwaSxcbiAgICBEb2Nrdmlld09wdGlvbnMsXG4gICAgRG9ja3ZpZXdSZWFkeUV2ZW50LFxuICAgIERvY2t2aWV3RGlkRHJvcEV2ZW50LFxuICAgIERvY2t2aWV3V2lsbERyb3BFdmVudCxcbiAgICBjcmVhdGVEb2NrdmlldyxcbiAgICBQUk9QRVJUWV9LRVlTX0RPQ0tWSUVXLFxuICAgIERvY2t2aWV3RnJhbWV3b3JrT3B0aW9ucyxcbiAgICBEb2Nrdmlld0NvbXBvbmVudE9wdGlvbnMsXG59IGZyb20gJ2RvY2t2aWV3LWNvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckZyYW1ld29ya0NvbXBvbmVudEZhY3RvcnkgfSBmcm9tICcuLi91dGlscy9jb21wb25lbnQtZmFjdG9yeSc7XG5pbXBvcnQgeyBBbmd1bGFyTGlmZWN5Y2xlTWFuYWdlciB9IGZyb20gJy4uL3V0aWxzL2xpZmVjeWNsZS11dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja3ZpZXdBbmd1bGFyT3B0aW9ucyBleHRlbmRzIERvY2t2aWV3T3B0aW9ucyB7XG4gICAgY29tcG9uZW50czogUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+PjtcbiAgICB0YWJDb21wb25lbnRzPzogUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+PjtcbiAgICB3YXRlcm1hcmtDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgZGVmYXVsdFRhYkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICBsZWZ0SGVhZGVyQWN0aW9uc0NvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICByaWdodEhlYWRlckFjdGlvbnNDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgcHJlZml4SGVhZGVyQWN0aW9uc0NvbXBvbmVudD86IFR5cGU8YW55Pjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkdi1kb2NrdmlldycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJzxkaXYgI2RvY2t2aWV3Q29udGFpbmVyIGNsYXNzPVwiZG9ja3ZpZXctY29udGFpbmVyXCI+PC9kaXY+JyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmRvY2t2aWV3LWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICBgLFxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERvY2t2aWV3QW5ndWxhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoJ2RvY2t2aWV3Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgQElucHV0KCkgY29tcG9uZW50cyE6IFJlY29yZDxzdHJpbmcsIFR5cGU8YW55Pj47XG4gICAgQElucHV0KCkgdGFiQ29tcG9uZW50cz86IFJlY29yZDxzdHJpbmcsIFR5cGU8YW55Pj47XG4gICAgQElucHV0KCkgd2F0ZXJtYXJrQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICAgIEBJbnB1dCgpIGRlZmF1bHRUYWJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgQElucHV0KCkgbGVmdEhlYWRlckFjdGlvbnNDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgQElucHV0KCkgcmlnaHRIZWFkZXJBY3Rpb25zQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICAgIEBJbnB1dCgpIHByZWZpeEhlYWRlckFjdGlvbnNDb21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgICAvLyBDb3JlIGRvY2t2aWV3IG9wdGlvbnMgYXMgaW5wdXRzXG4gICAgQElucHV0KCkgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG9yaWVudGF0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbiAgICBASW5wdXQoKSBoaWRlQm9yZGVycz86IGJvb2xlYW47XG4gICAgQElucHV0KCkgcm9vdE92ZXJsYXlNb2RlbD86ICdhbHdheXMnIHwgJ25ldmVyJztcbiAgICBASW5wdXQoKSBkZWZhdWx0VGFiQ29tcG9uZW50Xz86IHN0cmluZztcbiAgICBASW5wdXQoKSB0YWJIZWlnaHQ/OiBudW1iZXI7XG4gICAgQElucHV0KCkgZGlzYWJsZUZsb2F0aW5nR3JvdXBzPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmbG9hdGluZ0dyb3VwQm91bmRzPzogJ2JvdW5kZWRXaXRoaW5WaWV3cG9ydCc7XG4gICAgQElucHV0KCkgcG9wb3V0VXJsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlYnVnPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NrZWQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc2FibGVBdXRvUmVzaXppbmc/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNpbmdsZVRhYk1vZGU/OiAnZnVsbHdpZHRoJyB8ICdkZWZhdWx0JztcblxuICAgIEBPdXRwdXQoKSByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8RG9ja3ZpZXdSZWFkeUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBkaWREcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxEb2Nrdmlld0RpZERyb3BFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgd2lsbERyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPERvY2t2aWV3V2lsbERyb3BFdmVudD4oKTtcblxuICAgIHByaXZhdGUgZG9ja3ZpZXdBcGk/OiBEb2Nrdmlld0FwaTtcbiAgICBwcml2YXRlIGxpZmVjeWNsZU1hbmFnZXIgPSBuZXcgQW5ndWxhckxpZmVjeWNsZU1hbmFnZXIoKTtcbiAgICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIGVudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRG9ja3ZpZXcoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saWZlY3ljbGVNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuZG9ja3ZpZXdBcGkpIHtcbiAgICAgICAgICAgIHRoaXMuZG9ja3ZpZXdBcGkuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2Nrdmlld0FwaSkge1xuICAgICAgICAgICAgY29uc3QgY29yZUNoYW5nZXM6IFBhcnRpYWw8RG9ja3ZpZXdPcHRpb25zPiA9IHt9O1xuICAgICAgICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMgaW4gY29yZSBkb2NrdmlldyBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBQUk9QRVJUWV9LRVlTX0RPQ0tWSUVXLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgKGNvcmVDaGFuZ2VzIGFzIGFueSlba2V5XSA9IGNoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9ja3ZpZXdBcGkudXBkYXRlT3B0aW9ucyhjb3JlQ2hhbmdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREb2Nrdmlld0FwaSgpOiBEb2Nrdmlld0FwaSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY2t2aWV3QXBpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZURvY2t2aWV3KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdEb2Nrdmlld0FuZ3VsYXJDb21wb25lbnQ6IGNvbXBvbmVudHMgaW5wdXQgaXMgcmVxdWlyZWQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29yZU9wdGlvbnMgPSB0aGlzLmV4dHJhY3RDb3JlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBmcmFtZXdvcmtPcHRpb25zID0gdGhpcy5jcmVhdGVGcmFtZXdvcmtPcHRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5kb2Nrdmlld0FwaSA9IGNyZWF0ZURvY2t2aWV3KHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgIC4uLmNvcmVPcHRpb25zLFxuICAgICAgICAgICAgLi4uZnJhbWV3b3JrT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgICAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgICAgICAvLyBFbWl0IHJlYWR5IGV2ZW50XG4gICAgICAgIHRoaXMucmVhZHkuZW1pdCh7IGFwaTogdGhpcy5kb2Nrdmlld0FwaSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RDb3JlT3B0aW9ucygpOiBEb2Nrdmlld09wdGlvbnMge1xuICAgICAgICBjb25zdCBjb3JlT3B0aW9uczogUGFydGlhbDxEb2Nrdmlld0NvbXBvbmVudE9wdGlvbnM+ID0ge307XG5cbiAgICAgICAgUFJPUEVSVFlfS0VZU19ET0NLVklFVy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMgYXMgYW55KVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAoY29yZU9wdGlvbnMgYXMgYW55KVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb3JlT3B0aW9ucyBhcyBEb2Nrdmlld09wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGcmFtZXdvcmtPcHRpb25zKCk6IERvY2t2aWV3RnJhbWV3b3JrT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGhlYWRlckFjdGlvbnNDb21wb25lbnRzOiBSZWNvcmQ8c3RyaW5nLCBUeXBlPGFueT4+ID0ge307XG4gICAgICAgIGlmICh0aGlzLmxlZnRIZWFkZXJBY3Rpb25zQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBoZWFkZXJBY3Rpb25zQ29tcG9uZW50c1snbGVmdCddID0gdGhpcy5sZWZ0SGVhZGVyQWN0aW9uc0NvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yaWdodEhlYWRlckFjdGlvbnNDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGhlYWRlckFjdGlvbnNDb21wb25lbnRzWydyaWdodCddID0gdGhpcy5yaWdodEhlYWRlckFjdGlvbnNDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJlZml4SGVhZGVyQWN0aW9uc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgaGVhZGVyQWN0aW9uc0NvbXBvbmVudHNbJ3ByZWZpeCddID1cbiAgICAgICAgICAgICAgICB0aGlzLnByZWZpeEhlYWRlckFjdGlvbnNDb21wb25lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gbmV3IEFuZ3VsYXJGcmFtZXdvcmtDb21wb25lbnRGYWN0b3J5KFxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICAgIHRoaXMudGFiQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHRoaXMud2F0ZXJtYXJrQ29tcG9uZW50LFxuICAgICAgICAgICAgaGVhZGVyQWN0aW9uc0NvbXBvbmVudHMsXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRUYWJDb21wb25lbnRcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50OiAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZURvY2t2aWV3Q29tcG9uZW50KG9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZVRhYkNvbXBvbmVudDogKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50RmFjdG9yeS5jcmVhdGVUYWJDb21wb25lbnQob3B0aW9ucyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlV2F0ZXJtYXJrQ29tcG9uZW50OiB0aGlzLndhdGVybWFya0NvbXBvbmVudFxuICAgICAgICAgICAgICAgID8gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZVdhdGVybWFya0NvbXBvbmVudCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3JlYXRlTGVmdEhlYWRlckFjdGlvbkNvbXBvbmVudDogdGhpcy5sZWZ0SGVhZGVyQWN0aW9uc0NvbXBvbmVudFxuICAgICAgICAgICAgICAgID8gKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlSGVhZGVyQWN0aW9uc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgKSE7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjcmVhdGVSaWdodEhlYWRlckFjdGlvbkNvbXBvbmVudDogdGhpcy5yaWdodEhlYWRlckFjdGlvbnNDb21wb25lbnRcbiAgICAgICAgICAgICAgICA/IChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZUhlYWRlckFjdGlvbnNDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgICApITtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNyZWF0ZVByZWZpeEhlYWRlckFjdGlvbkNvbXBvbmVudDogdGhpcy5wcmVmaXhIZWFkZXJBY3Rpb25zQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgPyAoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50RmFjdG9yeS5jcmVhdGVIZWFkZXJBY3Rpb25zQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAncHJlZml4J1xuICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY2t2aWV3QXBpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdXAgZXZlbnQgc3Vic2NyaXB0aW9ucyB1c2luZyBsaWZlY3ljbGUgbWFuYWdlclxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzLmRvY2t2aWV3QXBpO1xuXG4gICAgICAgIGlmICh0aGlzLmRpZERyb3Aub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhcGkub25EaWREcm9wKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlkRHJvcC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5saWZlY3ljbGVNYW5hZ2VyLmFkZERpc3Bvc2FibGUoZGlzcG9zYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53aWxsRHJvcC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IGFwaS5vbldpbGxEcm9wKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2lsbERyb3AuZW1pdChldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGlmZWN5Y2xlTWFuYWdlci5hZGREaXNwb3NhYmxlKGRpc3Bvc2FibGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Re-export commonly used types from dockview-core
|
|
2
|
+
export { DockviewApi, DockviewDidDropEvent, DockviewWillDropEvent, } from 'dockview-core';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RvY2t2aWV3L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStDQSxtREFBbUQ7QUFDbkQsT0FBTyxFQUNILFdBQVcsRUFFWCxvQkFBb0IsRUFDcEIscUJBQXFCLEdBRXhCLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBEb2Nrdmlld09wdGlvbnMsXG4gICAgRG9ja3ZpZXdSZWFkeUV2ZW50LFxuICAgIERvY2t2aWV3RGlkRHJvcEV2ZW50LFxuICAgIERvY2t2aWV3V2lsbERyb3BFdmVudCxcbiAgICBJRG9ja3ZpZXdQYW5lbFByb3BzLFxuICAgIElEb2Nrdmlld1BhbmVsSGVhZGVyUHJvcHMsXG4gICAgSVdhdGVybWFya1BhbmVsUHJvcHMsXG4gICAgSURvY2t2aWV3SGVhZGVyQWN0aW9uc1Byb3BzLFxufSBmcm9tICdkb2Nrdmlldy1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRG9ja3ZpZXdBbmd1bGFyUGFuZWxQcm9wcyBleHRlbmRzIElEb2Nrdmlld1BhbmVsUHJvcHMge1xuICAgIC8vIEFuZ3VsYXItc3BlY2lmaWMgcGFuZWwgcHJvcGVydGllcyBjYW4gYmUgYWRkZWQgaGVyZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEb2Nrdmlld0FuZ3VsYXJQYW5lbEhlYWRlclByb3BzIGV4dGVuZHMgSURvY2t2aWV3UGFuZWxIZWFkZXJQcm9wcyB7XG4gICAgLy8gQW5ndWxhci1zcGVjaWZpYyBoZWFkZXIgcHJvcGVydGllcyBjYW4gYmUgYWRkZWQgaGVyZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEb2Nrdmlld0FuZ3VsYXJXYXRlcm1hcmtQcm9wcyBleHRlbmRzIElXYXRlcm1hcmtQYW5lbFByb3BzIHtcbiAgICAvLyBBbmd1bGFyLXNwZWNpZmljIHdhdGVybWFyayBwcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBoZXJlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURvY2t2aWV3QW5ndWxhckhlYWRlckFjdGlvbnNQcm9wcyBleHRlbmRzIElEb2Nrdmlld0hlYWRlckFjdGlvbnNQcm9wcyB7XG4gICAgLy8gQW5ndWxhci1zcGVjaWZpYyBoZWFkZXIgYWN0aW9ucyBwcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBoZXJlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja3ZpZXdBbmd1bGFyT3B0aW9ucyBleHRlbmRzIERvY2t2aWV3T3B0aW9ucyB7XG4gICAgY29tcG9uZW50czogUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+PjtcbiAgICB0YWJDb21wb25lbnRzPzogUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+PjtcbiAgICB3YXRlcm1hcmtDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgZGVmYXVsdFRhYkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICBsZWZ0SGVhZGVyQWN0aW9uc0NvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICByaWdodEhlYWRlckFjdGlvbnNDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgcHJlZml4SGVhZGVyQWN0aW9uc0NvbXBvbmVudD86IFR5cGU8YW55Pjtcbn1cblxuLy8gQWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmV4cG9ydCBpbnRlcmZhY2UgRG9ja3ZpZXdBbmd1bGFyQ29tcG9uZW50T3B0aW9ucyBleHRlbmRzIERvY2t2aWV3QW5ndWxhck9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBEb2Nrdmlld0FuZ3VsYXJFdmVudHMge1xuICAgIHJlYWR5OiBEb2Nrdmlld1JlYWR5RXZlbnQ7XG4gICAgZGlkRHJvcDogRG9ja3ZpZXdEaWREcm9wRXZlbnQ7XG4gICAgd2lsbERyb3A6IERvY2t2aWV3V2lsbERyb3BFdmVudDtcbn1cblxuLy8gUmUtZXhwb3J0IGNvbW1vbmx5IHVzZWQgdHlwZXMgZnJvbSBkb2Nrdmlldy1jb3JlXG5leHBvcnQge1xuICAgIERvY2t2aWV3QXBpLFxuICAgIERvY2t2aWV3UmVhZHlFdmVudCxcbiAgICBEb2Nrdmlld0RpZERyb3BFdmVudCxcbiAgICBEb2Nrdmlld1dpbGxEcm9wRXZlbnQsXG4gICAgRG9ja3ZpZXdPcHRpb25zLFxufSBmcm9tICdkb2Nrdmlldy1jb3JlJztcbiJdfQ==
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DockviewAngularComponent } from './dockview/dockview-angular.component';
|
|
4
|
+
import { GridviewAngularComponent } from './gridview/gridview-angular.component';
|
|
5
|
+
import { PaneviewAngularComponent } from './paneview/paneview-angular.component';
|
|
6
|
+
import { SplitviewAngularComponent } from './splitview/splitview-angular.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class DockviewAngularModule {
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DockviewAngularModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
10
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DockviewAngularModule, imports: [CommonModule,
|
|
11
|
+
DockviewAngularComponent,
|
|
12
|
+
GridviewAngularComponent,
|
|
13
|
+
PaneviewAngularComponent,
|
|
14
|
+
SplitviewAngularComponent], exports: [DockviewAngularComponent,
|
|
15
|
+
GridviewAngularComponent,
|
|
16
|
+
PaneviewAngularComponent,
|
|
17
|
+
SplitviewAngularComponent] }); }
|
|
18
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DockviewAngularModule, imports: [CommonModule] }); }
|
|
19
|
+
}
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DockviewAngularModule, decorators: [{
|
|
21
|
+
type: NgModule,
|
|
22
|
+
args: [{
|
|
23
|
+
imports: [
|
|
24
|
+
CommonModule,
|
|
25
|
+
DockviewAngularComponent,
|
|
26
|
+
GridviewAngularComponent,
|
|
27
|
+
PaneviewAngularComponent,
|
|
28
|
+
SplitviewAngularComponent,
|
|
29
|
+
],
|
|
30
|
+
exports: [
|
|
31
|
+
DockviewAngularComponent,
|
|
32
|
+
GridviewAngularComponent,
|
|
33
|
+
PaneviewAngularComponent,
|
|
34
|
+
SplitviewAngularComponent,
|
|
35
|
+
],
|
|
36
|
+
}]
|
|
37
|
+
}] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja3ZpZXctYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2RvY2t2aWV3LWFuZ3VsYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQWlCcEYsTUFBTSxPQUFPLHFCQUFxQjsrR0FBckIscUJBQXFCO2dIQUFyQixxQkFBcUIsWUFiMUIsWUFBWTtZQUNaLHdCQUF3QjtZQUN4Qix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLHlCQUF5QixhQUd6Qix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLHdCQUF3QjtZQUN4Qix5QkFBeUI7Z0hBR3BCLHFCQUFxQixZQWIxQixZQUFZOzs0RkFhUCxxQkFBcUI7a0JBZmpDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4Qix3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3FCQUM1QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsd0JBQXdCO3dCQUN4Qix3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3FCQUM1QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBEb2Nrdmlld0FuZ3VsYXJDb21wb25lbnQgfSBmcm9tICcuL2RvY2t2aWV3L2RvY2t2aWV3LWFuZ3VsYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWR2aWV3QW5ndWxhckNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZHZpZXcvZ3JpZHZpZXctYW5ndWxhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFuZXZpZXdBbmd1bGFyQ29tcG9uZW50IH0gZnJvbSAnLi9wYW5ldmlldy9wYW5ldmlldy1hbmd1bGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTcGxpdHZpZXdBbmd1bGFyQ29tcG9uZW50IH0gZnJvbSAnLi9zcGxpdHZpZXcvc3BsaXR2aWV3LWFuZ3VsYXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRG9ja3ZpZXdBbmd1bGFyQ29tcG9uZW50LFxuICAgICAgICBHcmlkdmlld0FuZ3VsYXJDb21wb25lbnQsXG4gICAgICAgIFBhbmV2aWV3QW5ndWxhckNvbXBvbmVudCxcbiAgICAgICAgU3BsaXR2aWV3QW5ndWxhckNvbXBvbmVudCxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgRG9ja3ZpZXdBbmd1bGFyQ29tcG9uZW50LFxuICAgICAgICBHcmlkdmlld0FuZ3VsYXJDb21wb25lbnQsXG4gICAgICAgIFBhbmV2aWV3QW5ndWxhckNvbXBvbmVudCxcbiAgICAgICAgU3BsaXR2aWV3QW5ndWxhckNvbXBvbmVudCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2Nrdmlld0FuZ3VsYXJNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GridviewPanel } from 'dockview-core';
|
|
2
|
+
import { AngularRenderer } from '../utils/angular-renderer';
|
|
3
|
+
export class AngularGridviewPanel extends GridviewPanel {
|
|
4
|
+
constructor(id, component, angularComponent, injector, environmentInjector) {
|
|
5
|
+
super(id, component);
|
|
6
|
+
this.angularComponent = angularComponent;
|
|
7
|
+
this.injector = injector;
|
|
8
|
+
this.environmentInjector = environmentInjector;
|
|
9
|
+
}
|
|
10
|
+
getComponent() {
|
|
11
|
+
const renderer = new AngularRenderer({
|
|
12
|
+
component: this.angularComponent,
|
|
13
|
+
injector: this.injector,
|
|
14
|
+
environmentInjector: this.environmentInjector,
|
|
15
|
+
});
|
|
16
|
+
renderer.init({
|
|
17
|
+
params: this._params?.params ?? {},
|
|
18
|
+
api: this.api,
|
|
19
|
+
});
|
|
20
|
+
this.element.appendChild(renderer.element);
|
|
21
|
+
return renderer;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1ncmlkdmlldy1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZ3JpZHZpZXcvYW5ndWxhci1ncmlkdmlldy1wYW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUFDbkQsWUFDSSxFQUFVLEVBQ1YsU0FBaUIsRUFDQSxnQkFBMkIsRUFDM0IsUUFBa0IsRUFDbEIsbUJBQXlDO1FBRTFELEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFKSixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVc7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXNCO0lBRzlELENBQUM7SUFFRCxZQUFZO1FBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUM7WUFDakMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNWLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFO1lBQ2xDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSwgSW5qZWN0b3IsIEVudmlyb25tZW50SW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWR2aWV3UGFuZWwsIElGcmFtZXdvcmtQYXJ0IH0gZnJvbSAnZG9ja3ZpZXctY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyUmVuZGVyZXIgfSBmcm9tICcuLi91dGlscy9hbmd1bGFyLXJlbmRlcmVyJztcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJHcmlkdmlld1BhbmVsIGV4dGVuZHMgR3JpZHZpZXdQYW5lbCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGlkOiBzdHJpbmcsXG4gICAgICAgIGNvbXBvbmVudDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJDb21wb25lbnQ6IFR5cGU8YW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaWQsIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgZ2V0Q29tcG9uZW50KCk6IElGcmFtZXdvcmtQYXJ0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgQW5ndWxhclJlbmRlcmVyKHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5hbmd1bGFyQ29tcG9uZW50LFxuICAgICAgICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIH0pO1xuICAgICAgICByZW5kZXJlci5pbml0KHtcbiAgICAgICAgICAgIHBhcmFtczogdGhpcy5fcGFyYW1zPy5wYXJhbXMgPz8ge30sXG4gICAgICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJlbmRlcmVyLmVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcmVuZGVyZXI7XG4gICAgfVxufVxuIl19
|