dockview-angular 4.10.0 → 4.12.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 (37) hide show
  1. package/dist/cjs/lib/dockview/dockview-angular.component.js +2 -1
  2. package/dist/cjs/lib/dockview-angular.module.js +2 -4
  3. package/dist/cjs/lib/gridview/gridview-angular.component.js +2 -1
  4. package/dist/cjs/lib/paneview/paneview-angular.component.js +2 -1
  5. package/dist/cjs/lib/splitview/splitview-angular.component.js +2 -1
  6. package/dist/cjs/lib/utils/angular-renderer.js +11 -3
  7. package/dist/cjs/lib/utils/component-factory.js +1 -0
  8. package/dist/dockview-angular.amd.js +184 -46
  9. package/dist/dockview-angular.amd.js.map +1 -1
  10. package/dist/dockview-angular.amd.min.js +2 -2
  11. package/dist/dockview-angular.amd.min.js.map +1 -1
  12. package/dist/dockview-angular.amd.min.noStyle.js +2 -2
  13. package/dist/dockview-angular.amd.min.noStyle.js.map +1 -1
  14. package/dist/dockview-angular.amd.noStyle.js +184 -46
  15. package/dist/dockview-angular.amd.noStyle.js.map +1 -1
  16. package/dist/dockview-angular.cjs.js +184 -46
  17. package/dist/dockview-angular.cjs.js.map +1 -1
  18. package/dist/dockview-angular.esm.js +184 -46
  19. package/dist/dockview-angular.esm.js.map +1 -1
  20. package/dist/dockview-angular.esm.min.js +2 -2
  21. package/dist/dockview-angular.esm.min.js.map +1 -1
  22. package/dist/dockview-angular.js +184 -46
  23. package/dist/dockview-angular.js.map +1 -1
  24. package/dist/dockview-angular.min.js +2 -2
  25. package/dist/dockview-angular.min.js.map +1 -1
  26. package/dist/dockview-angular.min.noStyle.js +2 -2
  27. package/dist/dockview-angular.min.noStyle.js.map +1 -1
  28. package/dist/dockview-angular.noStyle.js +184 -46
  29. package/dist/dockview-angular.noStyle.js.map +1 -1
  30. package/dist/esm/lib/dockview/dockview-angular.component.js +2 -1
  31. package/dist/esm/lib/dockview-angular.module.js +2 -4
  32. package/dist/esm/lib/gridview/gridview-angular.component.js +2 -1
  33. package/dist/esm/lib/paneview/paneview-angular.component.js +2 -1
  34. package/dist/esm/lib/splitview/splitview-angular.component.js +2 -1
  35. package/dist/esm/lib/utils/angular-renderer.js +11 -3
  36. package/dist/esm/lib/utils/component-factory.js +1 -0
  37. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-angular
3
- * @version 4.10.0
3
+ * @version 4.12.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -3781,8 +3781,8 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
3781
3781
  /**
3782
3782
  * Create a component from a serialized object.
3783
3783
  */
3784
- fromJSON(data) {
3785
- this.component.fromJSON(data);
3784
+ fromJSON(data, options) {
3785
+ this.component.fromJSON(data, options);
3786
3786
  }
3787
3787
  /**
3788
3788
  * Create a serialized object of the current component.
@@ -5013,6 +5013,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
5013
5013
  }
5014
5014
  if (doRender) {
5015
5015
  const focusTracker = trackFocus(container);
5016
+ this.focusTracker = focusTracker;
5016
5017
  const disposable = new CompositeDisposable();
5017
5018
  disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
5018
5019
  this.disposable.value = disposable;
@@ -5040,6 +5041,16 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
5040
5041
  this.disposable.dispose();
5041
5042
  super.dispose();
5042
5043
  }
5044
+ /**
5045
+ * Refresh the focus tracker state to handle cases where focus state
5046
+ * gets out of sync due to programmatic panel activation
5047
+ */
5048
+ refreshFocusState() {
5049
+ var _a;
5050
+ if ((_a = this.focusTracker) === null || _a === void 0 ? void 0 : _a.refreshState) {
5051
+ this.focusTracker.refreshState();
5052
+ }
5053
+ }
5043
5054
  }
5044
5055
 
5045
5056
  function addGhostImage(dataTransfer, ghostElement, options) {
@@ -6366,8 +6377,11 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
6366
6377
  this._activePanel = panel;
6367
6378
  if (panel) {
6368
6379
  this.tabsContainer.setActivePanel(panel);
6380
+ this.contentContainer.openPanel(panel);
6369
6381
  panel.layout(this._width, this._height);
6370
6382
  this.updateMru(panel);
6383
+ // Refresh focus state to handle programmatic activation without DOM focus change
6384
+ this.contentContainer.refreshFocusState();
6371
6385
  this._onDidActivePanelChange.fire({
6372
6386
  panel,
6373
6387
  });
@@ -6791,11 +6805,16 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
6791
6805
  }
6792
6806
  }
6793
6807
 
6808
+ // GridConstraintChangeEvent2 is not exported, so we'll type it manually
6794
6809
  const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
6795
6810
  const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
6796
6811
  class DockviewGroupPanel extends GridviewPanel {
6797
6812
  get minimumWidth() {
6798
6813
  var _a;
6814
+ // Check for explicitly set group constraint first
6815
+ if (typeof this._explicitConstraints.minimumWidth === 'number') {
6816
+ return this._explicitConstraints.minimumWidth;
6817
+ }
6799
6818
  const activePanelMinimumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumWidth;
6800
6819
  if (typeof activePanelMinimumWidth === 'number') {
6801
6820
  return activePanelMinimumWidth;
@@ -6804,6 +6823,10 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
6804
6823
  }
6805
6824
  get minimumHeight() {
6806
6825
  var _a;
6826
+ // Check for explicitly set group constraint first
6827
+ if (typeof this._explicitConstraints.minimumHeight === 'number') {
6828
+ return this._explicitConstraints.minimumHeight;
6829
+ }
6807
6830
  const activePanelMinimumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumHeight;
6808
6831
  if (typeof activePanelMinimumHeight === 'number') {
6809
6832
  return activePanelMinimumHeight;
@@ -6812,6 +6835,10 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
6812
6835
  }
6813
6836
  get maximumWidth() {
6814
6837
  var _a;
6838
+ // Check for explicitly set group constraint first
6839
+ if (typeof this._explicitConstraints.maximumWidth === 'number') {
6840
+ return this._explicitConstraints.maximumWidth;
6841
+ }
6815
6842
  const activePanelMaximumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumWidth;
6816
6843
  if (typeof activePanelMaximumWidth === 'number') {
6817
6844
  return activePanelMaximumWidth;
@@ -6820,6 +6847,10 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
6820
6847
  }
6821
6848
  get maximumHeight() {
6822
6849
  var _a;
6850
+ // Check for explicitly set group constraint first
6851
+ if (typeof this._explicitConstraints.maximumHeight === 'number') {
6852
+ return this._explicitConstraints.maximumHeight;
6853
+ }
6823
6854
  const activePanelMaximumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumHeight;
6824
6855
  if (typeof activePanelMaximumHeight === 'number') {
6825
6856
  return activePanelMaximumHeight;
@@ -6851,14 +6882,39 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
6851
6882
  var _a, _b, _c, _d, _e, _f;
6852
6883
  super(id, 'groupview_default', {
6853
6884
  minimumHeight: (_b = (_a = options.constraints) === null || _a === void 0 ? void 0 : _a.minimumHeight) !== null && _b !== void 0 ? _b : MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
6854
- minimumWidth: (_d = (_c = options.constraints) === null || _c === void 0 ? void 0 : _c.maximumHeight) !== null && _d !== void 0 ? _d : MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
6885
+ minimumWidth: (_d = (_c = options.constraints) === null || _c === void 0 ? void 0 : _c.minimumWidth) !== null && _d !== void 0 ? _d : MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
6855
6886
  maximumHeight: (_e = options.constraints) === null || _e === void 0 ? void 0 : _e.maximumHeight,
6856
6887
  maximumWidth: (_f = options.constraints) === null || _f === void 0 ? void 0 : _f.maximumWidth,
6857
6888
  }, new DockviewGroupPanelApiImpl(id, accessor));
6889
+ // Track explicitly set constraints to override panel constraints
6890
+ this._explicitConstraints = {};
6858
6891
  this.api.initialize(this); // cannot use 'this' after after 'super' call
6859
6892
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
6860
6893
  this.addDisposables(this.model.onDidActivePanelChange((event) => {
6861
6894
  this.api._onDidActivePanelChange.fire(event);
6895
+ }), this.api.onDidConstraintsChangeInternal((event) => {
6896
+ // Track explicitly set constraints to override panel constraints
6897
+ // Extract numeric values from functions or values
6898
+ if (event.minimumWidth !== undefined) {
6899
+ this._explicitConstraints.minimumWidth = typeof event.minimumWidth === 'function'
6900
+ ? event.minimumWidth()
6901
+ : event.minimumWidth;
6902
+ }
6903
+ if (event.minimumHeight !== undefined) {
6904
+ this._explicitConstraints.minimumHeight = typeof event.minimumHeight === 'function'
6905
+ ? event.minimumHeight()
6906
+ : event.minimumHeight;
6907
+ }
6908
+ if (event.maximumWidth !== undefined) {
6909
+ this._explicitConstraints.maximumWidth = typeof event.maximumWidth === 'function'
6910
+ ? event.maximumWidth()
6911
+ : event.maximumWidth;
6912
+ }
6913
+ if (event.maximumHeight !== undefined) {
6914
+ this._explicitConstraints.maximumHeight = typeof event.maximumHeight === 'function'
6915
+ ? event.maximumHeight()
6916
+ : event.maximumHeight;
6917
+ }
6862
6918
  }));
6863
6919
  }
6864
6920
  focus() {
@@ -7155,6 +7211,18 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
7155
7211
  params: this._params,
7156
7212
  });
7157
7213
  }
7214
+ updateFromStateModel(state) {
7215
+ var _a, _b, _c;
7216
+ this._maximumHeight = state.maximumHeight;
7217
+ this._minimumHeight = state.minimumHeight;
7218
+ this._maximumWidth = state.maximumWidth;
7219
+ this._minimumWidth = state.minimumWidth;
7220
+ this.update({ params: (_a = state.params) !== null && _a !== void 0 ? _a : {} });
7221
+ this.setTitle((_b = state.title) !== null && _b !== void 0 ? _b : this.id);
7222
+ this.setRenderer((_c = state.renderer) !== null && _c !== void 0 ? _c : this.accessor.renderer);
7223
+ // state.contentComponent;
7224
+ // state.tabComponent;
7225
+ }
7158
7226
  updateParentGroup(group, options) {
7159
7227
  this._group = group;
7160
7228
  this.api.group = this._group;
@@ -8918,7 +8986,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
8918
8986
  : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
8919
8987
  const el = group.element.querySelector('.dv-void-container');
8920
8988
  if (!el) {
8921
- throw new Error('failed to find drag handle');
8989
+ throw new Error('dockview: failed to find drag handle');
8922
8990
  }
8923
8991
  overlay.setupDrag(el, {
8924
8992
  inDragMode: typeof (options === null || options === void 0 ? void 0 : options.inDragMode) === 'boolean'
@@ -8990,7 +9058,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
8990
9058
  case 'right':
8991
9059
  return this.createGroupAtLocation([this.gridview.length], undefined, options); // insert into last position
8992
9060
  default:
8993
- throw new Error(`unsupported position ${position}`);
9061
+ throw new Error(`dockview: unsupported position ${position}`);
8994
9062
  }
8995
9063
  }
8996
9064
  updateOptions(options) {
@@ -9136,15 +9204,48 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9136
9204
  }
9137
9205
  return result;
9138
9206
  }
9139
- fromJSON(data) {
9207
+ fromJSON(data, options) {
9140
9208
  var _a, _b;
9209
+ const existingPanels = new Map();
9210
+ let tempGroup;
9211
+ if (options === null || options === void 0 ? void 0 : options.reuseExistingPanels) {
9212
+ /**
9213
+ * What are we doing here?
9214
+ *
9215
+ * 1. Create a temporary group to hold any panels that currently exist and that also exist in the new layout
9216
+ * 2. Remove that temporary group from the group mapping so that it doesn't get cleared when we clear the layout
9217
+ */
9218
+ tempGroup = this.createGroup();
9219
+ this._groups.delete(tempGroup.api.id);
9220
+ const newPanels = Object.keys(data.panels);
9221
+ for (const panel of this.panels) {
9222
+ if (newPanels.includes(panel.api.id)) {
9223
+ existingPanels.set(panel.api.id, panel);
9224
+ }
9225
+ }
9226
+ this.movingLock(() => {
9227
+ Array.from(existingPanels.values()).forEach((panel) => {
9228
+ this.moveGroupOrPanel({
9229
+ from: {
9230
+ groupId: panel.api.group.api.id,
9231
+ panelId: panel.api.id,
9232
+ },
9233
+ to: {
9234
+ group: tempGroup,
9235
+ position: 'center',
9236
+ },
9237
+ keepEmptyGroups: true,
9238
+ });
9239
+ });
9240
+ });
9241
+ }
9141
9242
  this.clear();
9142
9243
  if (typeof data !== 'object' || data === null) {
9143
- throw new Error('serialized layout must be a non-null object');
9244
+ throw new Error('dockview: serialized layout must be a non-null object');
9144
9245
  }
9145
9246
  const { grid, panels, activeGroup } = data;
9146
9247
  if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
9147
- throw new Error('root must be of type branch');
9248
+ throw new Error('dockview: root must be of type branch');
9148
9249
  }
9149
9250
  try {
9150
9251
  // take note of the existing dimensions
@@ -9153,7 +9254,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9153
9254
  const createGroupFromSerializedState = (data) => {
9154
9255
  const { id, locked, hideHeader, views, activeView } = data;
9155
9256
  if (typeof id !== 'string') {
9156
- throw new Error('group id must be of type string');
9257
+ throw new Error('dockview: group id must be of type string');
9157
9258
  }
9158
9259
  const group = this.createGroup({
9159
9260
  id,
@@ -9168,17 +9269,38 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9168
9269
  * In running this section first we avoid firing lots of 'add' events in the event of a failure
9169
9270
  * due to a corruption of input data.
9170
9271
  */
9171
- const panel = this._deserializer.fromJSON(panels[child], group);
9172
- createdPanels.push(panel);
9272
+ const existingPanel = existingPanels.get(child);
9273
+ if (tempGroup && existingPanel) {
9274
+ this.movingLock(() => {
9275
+ tempGroup.model.removePanel(existingPanel);
9276
+ });
9277
+ createdPanels.push(existingPanel);
9278
+ existingPanel.updateFromStateModel(panels[child]);
9279
+ }
9280
+ else {
9281
+ const panel = this._deserializer.fromJSON(panels[child], group);
9282
+ createdPanels.push(panel);
9283
+ }
9173
9284
  }
9174
9285
  for (let i = 0; i < views.length; i++) {
9175
9286
  const panel = createdPanels[i];
9176
9287
  const isActive = typeof activeView === 'string' &&
9177
9288
  activeView === panel.id;
9178
- group.model.openPanel(panel, {
9179
- skipSetActive: !isActive,
9180
- skipSetGroupActive: true,
9181
- });
9289
+ const hasExisting = existingPanels.has(panel.api.id);
9290
+ if (hasExisting) {
9291
+ this.movingLock(() => {
9292
+ group.model.openPanel(panel, {
9293
+ skipSetActive: !isActive,
9294
+ skipSetGroupActive: true,
9295
+ });
9296
+ });
9297
+ }
9298
+ else {
9299
+ group.model.openPanel(panel, {
9300
+ skipSetActive: !isActive,
9301
+ skipSetGroupActive: true,
9302
+ });
9303
+ }
9182
9304
  }
9183
9305
  if (!group.activePanel && group.panels.length > 0) {
9184
9306
  group.model.openPanel(group.panels[group.panels.length - 1], {
@@ -9217,7 +9339,9 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9217
9339
  setTimeout(() => {
9218
9340
  this.addPopoutGroup(group, {
9219
9341
  position: position !== null && position !== void 0 ? position : undefined,
9220
- overridePopoutGroup: gridReferenceGroup ? group : undefined,
9342
+ overridePopoutGroup: gridReferenceGroup
9343
+ ? group
9344
+ : undefined,
9221
9345
  referenceGroup: gridReferenceGroup
9222
9346
  ? this.getPanel(gridReferenceGroup)
9223
9347
  : undefined,
@@ -9303,11 +9427,11 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9303
9427
  addPanel(options) {
9304
9428
  var _a, _b;
9305
9429
  if (this.panels.find((_) => _.id === options.id)) {
9306
- throw new Error(`panel with id ${options.id} already exists`);
9430
+ throw new Error(`dockview: panel with id ${options.id} already exists`);
9307
9431
  }
9308
9432
  let referenceGroup;
9309
9433
  if (options.position && options.floating) {
9310
- throw new Error('you can only provide one of: position, floating as arguments to .addPanel(...)');
9434
+ throw new Error('dockview: you can only provide one of: position, floating as arguments to .addPanel(...)');
9311
9435
  }
9312
9436
  const initial = {
9313
9437
  width: options.initialWidth,
@@ -9321,7 +9445,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9321
9445
  : options.position.referencePanel;
9322
9446
  index = options.position.index;
9323
9447
  if (!referencePanel) {
9324
- throw new Error(`referencePanel '${options.position.referencePanel}' does not exist`);
9448
+ throw new Error(`dockview: referencePanel '${options.position.referencePanel}' does not exist`);
9325
9449
  }
9326
9450
  referenceGroup = this.findGroup(referencePanel);
9327
9451
  }
@@ -9332,7 +9456,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9332
9456
  : options.position.referenceGroup;
9333
9457
  index = options.position.index;
9334
9458
  if (!referenceGroup) {
9335
- throw new Error(`referenceGroup '${options.position.referenceGroup}' does not exist`);
9459
+ throw new Error(`dockview: referenceGroup '${options.position.referenceGroup}' does not exist`);
9336
9460
  }
9337
9461
  }
9338
9462
  else {
@@ -9444,7 +9568,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9444
9568
  }) {
9445
9569
  const group = panel.group;
9446
9570
  if (!group) {
9447
- throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
9571
+ throw new Error(`dockview: cannot remove panel ${panel.id}. it's missing a group.`);
9448
9572
  }
9449
9573
  group.model.removePanel(panel, {
9450
9574
  skipSetActiveGroup: options.skipSetActiveGroup,
@@ -9493,11 +9617,11 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9493
9617
  ? this.panels.find((panel) => panel.id === options.referencePanel)
9494
9618
  : options.referencePanel;
9495
9619
  if (!referencePanel) {
9496
- throw new Error(`reference panel ${options.referencePanel} does not exist`);
9620
+ throw new Error(`dockview: reference panel ${options.referencePanel} does not exist`);
9497
9621
  }
9498
9622
  referenceGroup = this.findGroup(referencePanel);
9499
9623
  if (!referenceGroup) {
9500
- throw new Error(`reference group for reference panel ${options.referencePanel} does not exist`);
9624
+ throw new Error(`dockview: reference group for reference panel ${options.referencePanel} does not exist`);
9501
9625
  }
9502
9626
  }
9503
9627
  else if (isGroupOptionsWithGroup(options)) {
@@ -9506,7 +9630,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9506
9630
  ? (_a = this._groups.get(options.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
9507
9631
  : options.referenceGroup;
9508
9632
  if (!referenceGroup) {
9509
- throw new Error(`reference group ${options.referenceGroup} does not exist`);
9633
+ throw new Error(`dockview: reference group ${options.referenceGroup} does not exist`);
9510
9634
  }
9511
9635
  }
9512
9636
  else {
@@ -9574,7 +9698,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9574
9698
  }
9575
9699
  return floatingGroup.group;
9576
9700
  }
9577
- throw new Error('failed to find floating group');
9701
+ throw new Error('dockview: failed to find floating group');
9578
9702
  }
9579
9703
  if (group.api.location.type === 'popout') {
9580
9704
  const selectedGroup = this._popoutGroups.find((_) => _.popoutGroup === group);
@@ -9605,7 +9729,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9605
9729
  this.updateWatermark();
9606
9730
  return selectedGroup.popoutGroup;
9607
9731
  }
9608
- throw new Error('failed to find popout group');
9732
+ throw new Error('dockview: failed to find popout group');
9609
9733
  }
9610
9734
  const re = super.doRemoveGroup(group, options);
9611
9735
  if (!(options === null || options === void 0 ? void 0 : options.skipActive)) {
@@ -9636,7 +9760,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9636
9760
  ? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
9637
9761
  : undefined;
9638
9762
  if (!sourceGroup) {
9639
- throw new Error(`Failed to find group id ${sourceGroupId}`);
9763
+ throw new Error(`dockview: Failed to find group id ${sourceGroupId}`);
9640
9764
  }
9641
9765
  if (sourceItemId === undefined) {
9642
9766
  /**
@@ -9661,9 +9785,9 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9661
9785
  skipSetActiveGroup: true,
9662
9786
  }));
9663
9787
  if (!removedPanel) {
9664
- throw new Error(`No panel with id ${sourceItemId}`);
9788
+ throw new Error(`dockview: No panel with id ${sourceItemId}`);
9665
9789
  }
9666
- if (sourceGroup.model.size === 0) {
9790
+ if (!options.keepEmptyGroups && sourceGroup.model.size === 0) {
9667
9791
  // remove the group and do not set a new group as active
9668
9792
  this.doRemoveGroup(sourceGroup, { skipActive: true });
9669
9793
  }
@@ -9673,7 +9797,8 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9673
9797
  var _a;
9674
9798
  return destinationGroup.model.openPanel(removedPanel, {
9675
9799
  index: destinationIndex,
9676
- skipSetActive: ((_a = options.skipSetActive) !== null && _a !== void 0 ? _a : false) && !isDestinationGroupEmpty,
9800
+ skipSetActive: ((_a = options.skipSetActive) !== null && _a !== void 0 ? _a : false) &&
9801
+ !isDestinationGroupEmpty,
9677
9802
  skipSetGroupActive: true,
9678
9803
  });
9679
9804
  });
@@ -9728,7 +9853,9 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9728
9853
  }));
9729
9854
  this.doRemoveGroup(sourceGroup, { skipActive: true });
9730
9855
  const newGroup = this.createGroupAtLocation(targetLocation);
9731
- this.movingLock(() => newGroup.model.openPanel(removedPanel));
9856
+ this.movingLock(() => newGroup.model.openPanel(removedPanel, {
9857
+ skipSetActive: true,
9858
+ }));
9732
9859
  this.doSetGroupAndPanelActive(newGroup);
9733
9860
  this._onDidMovePanel.fire({
9734
9861
  panel: this.getGroupPanel(sourceItemId),
@@ -9761,7 +9888,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9761
9888
  skipSetActiveGroup: true,
9762
9889
  }));
9763
9890
  if (!removedPanel) {
9764
- throw new Error(`No panel with id ${sourceItemId}`);
9891
+ throw new Error(`dockview: No panel with id ${sourceItemId}`);
9765
9892
  }
9766
9893
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
9767
9894
  const group = this.createGroupAtLocation(dropLocation);
@@ -9816,7 +9943,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9816
9943
  case 'floating': {
9817
9944
  const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === from);
9818
9945
  if (!selectedFloatingGroup) {
9819
- throw new Error('failed to find floating group');
9946
+ throw new Error('dockview: failed to find floating group');
9820
9947
  }
9821
9948
  selectedFloatingGroup.dispose();
9822
9949
  break;
@@ -9824,7 +9951,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
9824
9951
  case 'popout': {
9825
9952
  const selectedPopoutGroup = this._popoutGroups.find((x) => x.popoutGroup === from);
9826
9953
  if (!selectedPopoutGroup) {
9827
- throw new Error('failed to find popout group');
9954
+ throw new Error('dockview: failed to find popout group');
9828
9955
  }
9829
9956
  // Remove from popout groups list to prevent automatic restoration
9830
9957
  const index = this._popoutGroups.indexOf(selectedPopoutGroup);
@@ -11273,12 +11400,19 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
11273
11400
  return this._element;
11274
11401
  }
11275
11402
  init(parameters) {
11276
- this.render(parameters);
11403
+ // If already initialized, just update the parameters
11404
+ if (this.componentRef) {
11405
+ this.update(parameters);
11406
+ }
11407
+ else {
11408
+ this.render(parameters);
11409
+ }
11277
11410
  }
11278
11411
  update(params) {
11279
11412
  if (this.componentRef) {
11280
11413
  Object.keys(params).forEach(key => {
11281
- if (this.componentRef.instance.hasOwnProperty(key)) {
11414
+ // Use 'in' operator instead of hasOwnProperty to support getter/setter properties
11415
+ if (key in this.componentRef.instance) {
11282
11416
  this.componentRef.instance[key] = params[key];
11283
11417
  }
11284
11418
  });
@@ -11294,7 +11428,8 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
11294
11428
  });
11295
11429
  // Set initial parameters
11296
11430
  Object.keys(parameters).forEach(key => {
11297
- if (this.componentRef.instance.hasOwnProperty(key)) {
11431
+ // Use 'in' operator instead of hasOwnProperty to support getter/setter properties
11432
+ if (key in this.componentRef.instance) {
11298
11433
  this.componentRef.instance[key] = parameters[key];
11299
11434
  }
11300
11435
  });
@@ -11465,6 +11600,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
11465
11600
  injector: this.injector,
11466
11601
  environmentInjector: this.environmentInjector
11467
11602
  });
11603
+ // Initialize with empty props - dockview-core will call init() again with actual IGroupHeaderProps
11468
11604
  renderer.init({});
11469
11605
  return renderer;
11470
11606
  }
@@ -12522,6 +12658,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12522
12658
  exports.DockviewAngularComponent = __decorate([
12523
12659
  core.Component({
12524
12660
  selector: 'dv-dockview',
12661
+ standalone: true,
12525
12662
  template: '<div #dockviewContainer class="dockview-container"></div>',
12526
12663
  styles: [`
12527
12664
  :host {
@@ -12529,7 +12666,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12529
12666
  width: 100%;
12530
12667
  height: 100%;
12531
12668
  }
12532
-
12669
+
12533
12670
  .dockview-container {
12534
12671
  width: 100%;
12535
12672
  height: 100%;
@@ -12645,6 +12782,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12645
12782
  exports.GridviewAngularComponent = __decorate([
12646
12783
  core.Component({
12647
12784
  selector: 'dv-gridview',
12785
+ standalone: true,
12648
12786
  template: '<div #gridviewContainer class="gridview-container"></div>',
12649
12787
  styles: [`
12650
12788
  :host {
@@ -12652,7 +12790,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12652
12790
  width: 100%;
12653
12791
  height: 100%;
12654
12792
  }
12655
-
12793
+
12656
12794
  .gridview-container {
12657
12795
  width: 100%;
12658
12796
  height: 100%;
@@ -12793,6 +12931,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12793
12931
  exports.PaneviewAngularComponent = __decorate([
12794
12932
  core.Component({
12795
12933
  selector: 'dv-paneview',
12934
+ standalone: true,
12796
12935
  template: '<div #paneviewContainer class="paneview-container"></div>',
12797
12936
  styles: [`
12798
12937
  :host {
@@ -12800,7 +12939,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12800
12939
  width: 100%;
12801
12940
  height: 100%;
12802
12941
  }
12803
-
12942
+
12804
12943
  .paneview-container {
12805
12944
  width: 100%;
12806
12945
  height: 100%;
@@ -12916,6 +13055,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12916
13055
  exports.SplitviewAngularComponent = __decorate([
12917
13056
  core.Component({
12918
13057
  selector: 'dv-splitview',
13058
+ standalone: true,
12919
13059
  template: '<div #splitviewContainer class="splitview-container"></div>',
12920
13060
  styles: [`
12921
13061
  :host {
@@ -12923,7 +13063,7 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12923
13063
  width: 100%;
12924
13064
  height: 100%;
12925
13065
  }
12926
-
13066
+
12927
13067
  .splitview-container {
12928
13068
  width: 100%;
12929
13069
  height: 100%;
@@ -12937,15 +13077,13 @@ define(['exports', '@angular/core', '@angular/common', 'rxjs'], (function (expor
12937
13077
  };
12938
13078
  exports.DockviewAngularModule = __decorate([
12939
13079
  core.NgModule({
12940
- declarations: [
13080
+ imports: [
13081
+ common.CommonModule,
12941
13082
  exports.DockviewAngularComponent,
12942
13083
  exports.GridviewAngularComponent,
12943
13084
  exports.PaneviewAngularComponent,
12944
13085
  exports.SplitviewAngularComponent
12945
13086
  ],
12946
- imports: [
12947
- common.CommonModule
12948
- ],
12949
13087
  exports: [
12950
13088
  exports.DockviewAngularComponent,
12951
13089
  exports.GridviewAngularComponent,