dockview-angular 4.13.1 → 5.1.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 (133) hide show
  1. package/README.md +49 -17
  2. package/dist/README.md +88 -0
  3. package/dist/dockview-angular.d.ts.map +1 -0
  4. package/dist/dockview.css +63 -7
  5. package/dist/esm2022/dockview-angular.mjs +5 -0
  6. package/dist/esm2022/lib/dockview/dockview-angular.component.mjs +185 -0
  7. package/dist/esm2022/lib/dockview/types.mjs +3 -0
  8. package/dist/esm2022/lib/dockview-angular.module.mjs +38 -0
  9. package/dist/esm2022/lib/gridview/angular-gridview-panel.mjs +24 -0
  10. package/dist/esm2022/lib/gridview/gridview-angular.component.mjs +98 -0
  11. package/dist/esm2022/lib/gridview/types.mjs +3 -0
  12. package/dist/esm2022/lib/paneview/angular-pane-part.mjs +26 -0
  13. package/dist/esm2022/lib/paneview/paneview-angular.component.mjs +122 -0
  14. package/dist/esm2022/lib/paneview/types.mjs +3 -0
  15. package/dist/esm2022/lib/splitview/angular-splitview-panel.mjs +24 -0
  16. package/dist/esm2022/lib/splitview/splitview-angular.component.mjs +98 -0
  17. package/dist/esm2022/lib/splitview/types.mjs +3 -0
  18. package/dist/esm2022/lib/utils/angular-renderer.mjs +83 -0
  19. package/dist/esm2022/lib/utils/component-factory.mjs +100 -0
  20. package/dist/esm2022/lib/utils/lifecycle-utils.mjs +69 -0
  21. package/dist/esm2022/public-api.mjs +17 -0
  22. package/dist/fesm2022/dockview-angular.mjs +846 -0
  23. package/dist/fesm2022/dockview-angular.mjs.map +1 -0
  24. package/dist/index.d.ts +6 -0
  25. package/dist/{cjs/lib → lib}/dockview/dockview-angular.component.d.ts +4 -0
  26. package/dist/lib/dockview/dockview-angular.component.d.ts.map +1 -0
  27. package/dist/{cjs/lib → lib}/dockview/types.d.ts +2 -1
  28. package/dist/lib/dockview/types.d.ts.map +1 -0
  29. package/dist/lib/dockview-angular.module.d.ts +12 -0
  30. package/dist/lib/dockview-angular.module.d.ts.map +1 -0
  31. package/dist/{cjs/lib → lib}/gridview/angular-gridview-panel.d.ts +1 -0
  32. package/dist/lib/gridview/angular-gridview-panel.d.ts.map +1 -0
  33. package/dist/{esm/lib → lib}/gridview/gridview-angular.component.d.ts +4 -0
  34. package/dist/lib/gridview/gridview-angular.component.d.ts.map +1 -0
  35. package/dist/{esm/lib → lib}/gridview/types.d.ts +1 -0
  36. package/dist/lib/gridview/types.d.ts.map +1 -0
  37. package/dist/{esm/lib → lib}/paneview/angular-pane-part.d.ts +1 -0
  38. package/dist/lib/paneview/angular-pane-part.d.ts.map +1 -0
  39. package/dist/{esm/lib → lib}/paneview/paneview-angular.component.d.ts +4 -0
  40. package/dist/lib/paneview/paneview-angular.component.d.ts.map +1 -0
  41. package/dist/{esm/lib → lib}/paneview/types.d.ts +1 -0
  42. package/dist/lib/paneview/types.d.ts.map +1 -0
  43. package/dist/{cjs/lib → lib}/splitview/angular-splitview-panel.d.ts +1 -0
  44. package/dist/lib/splitview/angular-splitview-panel.d.ts.map +1 -0
  45. package/dist/{cjs/lib → lib}/splitview/splitview-angular.component.d.ts +4 -0
  46. package/dist/lib/splitview/splitview-angular.component.d.ts.map +1 -0
  47. package/dist/{cjs/lib → lib}/splitview/types.d.ts +1 -0
  48. package/dist/lib/splitview/types.d.ts.map +1 -0
  49. package/dist/lib/utils/angular-renderer.d.ts +21 -0
  50. package/dist/lib/utils/angular-renderer.d.ts.map +1 -0
  51. package/dist/{cjs/lib → lib}/utils/component-factory.d.ts +1 -0
  52. package/dist/lib/utils/component-factory.d.ts.map +1 -0
  53. package/dist/{cjs/lib → lib}/utils/lifecycle-utils.d.ts +1 -0
  54. package/dist/lib/utils/lifecycle-utils.d.ts.map +1 -0
  55. package/dist/{cjs/public-api.d.ts → public-api.d.ts} +5 -4
  56. package/dist/public-api.d.ts.map +1 -0
  57. package/package.json +72 -66
  58. package/dist/cjs/index.d.ts +0 -1
  59. package/dist/cjs/index.js +0 -17
  60. package/dist/cjs/lib/dockview/dockview-angular.component.js +0 -256
  61. package/dist/cjs/lib/dockview/types.js +0 -8
  62. package/dist/cjs/lib/dockview-angular.module.d.ts +0 -2
  63. package/dist/cjs/lib/dockview-angular.module.js +0 -35
  64. package/dist/cjs/lib/gridview/angular-gridview-panel.js +0 -21
  65. package/dist/cjs/lib/gridview/gridview-angular.component.d.ts +0 -28
  66. package/dist/cjs/lib/gridview/gridview-angular.component.js +0 -140
  67. package/dist/cjs/lib/gridview/types.d.ts +0 -12
  68. package/dist/cjs/lib/gridview/types.js +0 -6
  69. package/dist/cjs/lib/paneview/angular-pane-part.d.ts +0 -13
  70. package/dist/cjs/lib/paneview/angular-pane-part.js +0 -29
  71. package/dist/cjs/lib/paneview/paneview-angular.component.d.ts +0 -31
  72. package/dist/cjs/lib/paneview/paneview-angular.component.js +0 -166
  73. package/dist/cjs/lib/paneview/types.d.ts +0 -14
  74. package/dist/cjs/lib/paneview/types.js +0 -6
  75. package/dist/cjs/lib/splitview/angular-splitview-panel.js +0 -21
  76. package/dist/cjs/lib/splitview/splitview-angular.component.js +0 -140
  77. package/dist/cjs/lib/splitview/types.js +0 -6
  78. package/dist/cjs/lib/utils/angular-renderer.d.ts +0 -18
  79. package/dist/cjs/lib/utils/angular-renderer.js +0 -70
  80. package/dist/cjs/lib/utils/component-factory.js +0 -103
  81. package/dist/cjs/lib/utils/lifecycle-utils.js +0 -74
  82. package/dist/cjs/public-api.js +0 -32
  83. package/dist/dockview-angular.amd.js +0 -13209
  84. package/dist/dockview-angular.amd.js.map +0 -1
  85. package/dist/dockview-angular.amd.min.js +0 -8
  86. package/dist/dockview-angular.amd.min.js.map +0 -1
  87. package/dist/dockview-angular.amd.min.noStyle.js +0 -8
  88. package/dist/dockview-angular.amd.min.noStyle.js.map +0 -1
  89. package/dist/dockview-angular.amd.noStyle.js +0 -13179
  90. package/dist/dockview-angular.amd.noStyle.js.map +0 -1
  91. package/dist/dockview-angular.cjs.js +0 -13211
  92. package/dist/dockview-angular.cjs.js.map +0 -1
  93. package/dist/dockview-angular.esm.js +0 -13139
  94. package/dist/dockview-angular.esm.js.map +0 -1
  95. package/dist/dockview-angular.esm.min.js +0 -8
  96. package/dist/dockview-angular.esm.min.js.map +0 -1
  97. package/dist/dockview-angular.js +0 -13213
  98. package/dist/dockview-angular.js.map +0 -1
  99. package/dist/dockview-angular.min.js +0 -8
  100. package/dist/dockview-angular.min.js.map +0 -1
  101. package/dist/dockview-angular.min.noStyle.js +0 -8
  102. package/dist/dockview-angular.min.noStyle.js.map +0 -1
  103. package/dist/dockview-angular.noStyle.js +0 -13183
  104. package/dist/dockview-angular.noStyle.js.map +0 -1
  105. package/dist/esm/index.d.ts +0 -1
  106. package/dist/esm/index.js +0 -1
  107. package/dist/esm/lib/dockview/dockview-angular.component.d.ts +0 -49
  108. package/dist/esm/lib/dockview/dockview-angular.component.js +0 -253
  109. package/dist/esm/lib/dockview/types.d.ts +0 -27
  110. package/dist/esm/lib/dockview/types.js +0 -2
  111. package/dist/esm/lib/dockview-angular.module.d.ts +0 -2
  112. package/dist/esm/lib/dockview-angular.module.js +0 -32
  113. package/dist/esm/lib/gridview/angular-gridview-panel.d.ts +0 -9
  114. package/dist/esm/lib/gridview/angular-gridview-panel.js +0 -17
  115. package/dist/esm/lib/gridview/gridview-angular.component.js +0 -137
  116. package/dist/esm/lib/gridview/types.js +0 -2
  117. package/dist/esm/lib/paneview/angular-pane-part.js +0 -25
  118. package/dist/esm/lib/paneview/paneview-angular.component.js +0 -163
  119. package/dist/esm/lib/paneview/types.js +0 -2
  120. package/dist/esm/lib/splitview/angular-splitview-panel.d.ts +0 -9
  121. package/dist/esm/lib/splitview/angular-splitview-panel.js +0 -17
  122. package/dist/esm/lib/splitview/splitview-angular.component.d.ts +0 -28
  123. package/dist/esm/lib/splitview/splitview-angular.component.js +0 -137
  124. package/dist/esm/lib/splitview/types.d.ts +0 -12
  125. package/dist/esm/lib/splitview/types.js +0 -2
  126. package/dist/esm/lib/utils/angular-renderer.d.ts +0 -18
  127. package/dist/esm/lib/utils/angular-renderer.js +0 -66
  128. package/dist/esm/lib/utils/component-factory.d.ts +0 -20
  129. package/dist/esm/lib/utils/component-factory.js +0 -99
  130. package/dist/esm/lib/utils/lifecycle-utils.d.ts +0 -18
  131. package/dist/esm/lib/utils/lifecycle-utils.js +0 -68
  132. package/dist/esm/public-api.d.ts +0 -13
  133. 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>Zero dependency layout manager supporting tabs, groups, grids and splitviews with ReactJS support written in TypeScript</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
- [![npm version](https://badge.fury.io/js/dockview.svg)](https://www.npmjs.com/package/dockview)
11
- [![npm](https://img.shields.io/npm/dm/dockview)](https://www.npmjs.com/package/dockview)
10
+ [![npm version](https://badge.fury.io/js/dockview-angular.svg)](https://www.npmjs.com/package/dockview-angular)
11
+ [![npm](https://img.shields.io/npm/dm/dockview-angular)](https://www.npmjs.com/package/dockview-angular)
12
12
  [![CI Build](https://github.com/mathuo/dockview/workflows/CI/badge.svg)](https://github.com/mathuo/dockview/actions?query=workflow%3ACI)
13
13
  [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=mathuo_dockview&metric=coverage)](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
14
14
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=mathuo_dockview&metric=alert_status)](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
15
- [![Bundle Phobia](https://badgen.net/bundlephobia/minzip/dockview)](https://bundlephobia.com/result?p=dockview)
15
+ [![Bundle Phobia](https://badgen.net/bundlephobia/minzip/dockview-angular)](https://bundlephobia.com/result?p=dockview-angular)
16
16
 
17
17
  ##
18
18
 
19
+ ![](https://github.com/mathuo/dockview/blob/HEAD/packages/docs/static/img/splashscreen.gif?raw=true)
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 - verifed publishing and builds through GitHub Actions
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 start
38
+ ## Quick Start
39
39
 
40
- Dockview has a peer dependency on `react >= 16.8.0` and `react-dom >= 16.8.0`. You can install dockview from [npm](https://www.npmjs.com/package/dockview).
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 --save dockview
43
+ npm install dockview-angular
44
44
  ```
45
45
 
46
- Within your project you must import or reference the stylesheet at `dockview/dist/styles/dockview.css` and attach a theme.
46
+ Import the stylesheet in your `styles.css` or `angular.json`:
47
47
 
48
48
  ```css
49
- @import '~dockview/dist/styles/dockview.css';
49
+ @import 'dockview-angular/dist/dockview.css';
50
50
  ```
51
51
 
52
- You should also attach a dockview theme to an element containing your components. For example:
53
-
54
- ```html
55
- <body classname="dockview-theme-dark"></body>
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
+ [![npm version](https://badge.fury.io/js/dockview-angular.svg)](https://www.npmjs.com/package/dockview-angular)
11
+ [![npm](https://img.shields.io/npm/dm/dockview-angular)](https://www.npmjs.com/package/dockview-angular)
12
+ [![CI Build](https://github.com/mathuo/dockview/workflows/CI/badge.svg)](https://github.com/mathuo/dockview/actions?query=workflow%3ACI)
13
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=mathuo_dockview&metric=coverage)](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
14
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=mathuo_dockview&metric=alert_status)](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
15
+ [![Bundle Phobia](https://badgen.net/bundlephobia/minzip/dockview-angular)](https://bundlephobia.com/result?p=dockview-angular)
16
+
17
+ ##
18
+
19
+ ![](https://github.com/mathuo/dockview/blob/HEAD/packages/docs/static/img/splashscreen.gif?raw=true)
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-horizontal {
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:hover .dv-scrollbar-horizontal, .dv-scrollable.dv-scrollable-resizing .dv-scrollbar-horizontal, .dv-scrollable.dv-scrollable-scrolling .dv-scrollbar-horizontal {
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-horizontal .dv-tab:not(:first-child)::before {
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