@trops/dash-core 0.1.522 → 0.1.523

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/dist/index.esm.js CHANGED
@@ -9271,7 +9271,7 @@ function _objectSpread$Z(e) { for (var r = 1; r < arguments.length; r++) { var t
9271
9271
  * multi-cell selections — that's a separate code path.
9272
9272
  */
9273
9273
 
9274
- var META_KEYS = new Set(["rows", "cols", "gap"]);
9274
+ var META_KEYS$5 = new Set(["rows", "cols", "gap"]);
9275
9275
 
9276
9276
  /**
9277
9277
  * Merge `(row, col)` with the cell to its right. Skips empty
@@ -9290,7 +9290,7 @@ function mergeRightOp(grid, row, col) {
9290
9290
  var bestCol = Infinity;
9291
9291
  for (var _i = 0, _Object$keys = Object.keys(grid); _i < _Object$keys.length; _i++) {
9292
9292
  var k = _Object$keys[_i];
9293
- if (META_KEYS.has(k)) continue;
9293
+ if (META_KEYS$5.has(k)) continue;
9294
9294
  var _k$split$map = k.split(".").map(function (n) {
9295
9295
  return parseInt(n, 10);
9296
9296
  }),
@@ -26616,6 +26616,497 @@ function mergeGridCellsOp(grid, cellNumbers, keepComponentId) {
26616
26616
 
26617
26617
  function ownKeys$D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
26618
26618
  function _objectSpread$D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$D(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26619
+ /**
26620
+ * splitGridCellOp
26621
+ *
26622
+ * Pure helper for `DashboardModel.splitGridCell`. Splits a single
26623
+ * cell horizontally or vertically into `count` sub-cells.
26624
+ *
26625
+ * Two regimes (preserving original DashboardModel semantics):
26626
+ *
26627
+ * CASE A — divisible span: when the target cell already has a span
26628
+ * in the split direction that's divisible by count, simply
26629
+ * subdivide the span into count pieces. No grid resolution change.
26630
+ *
26631
+ * CASE B — non-divisible span (typical for an unspanned cell with
26632
+ * count=2): multiply the entire grid's resolution in the split
26633
+ * direction by count, reposition every visible cell to its
26634
+ * equivalent location, and place the count sub-cells at the
26635
+ * scaled target position.
26636
+ *
26637
+ * In both regimes the widget on the original target cell ends up on
26638
+ * the FIRST sub-cell. The other sub-cells are empty.
26639
+ *
26640
+ * Pure — input grid is never mutated.
26641
+ */
26642
+
26643
+ var META_KEYS$4 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
26644
+ function _isCellKey$4(key) {
26645
+ return /^\d+\.\d+$/.test(key);
26646
+ }
26647
+ function _cloneShallow(grid) {
26648
+ var out = {};
26649
+ for (var _i = 0, _Object$keys = Object.keys(grid); _i < _Object$keys.length; _i++) {
26650
+ var k = _Object$keys[_i];
26651
+ if (META_KEYS$4.has(k)) {
26652
+ out[k] = grid[k];
26653
+ } else if (_isCellKey$4(k)) {
26654
+ var cell = grid[k];
26655
+ out[k] = _objectSpread$D({}, cell);
26656
+ if (cell.span) out[k].span = _objectSpread$D({}, cell.span);
26657
+ }
26658
+ }
26659
+ return out;
26660
+ }
26661
+ function _stripSpan(span, removeKey) {
26662
+ if (!span) return undefined;
26663
+ var out = _objectSpread$D({}, span);
26664
+ delete out[removeKey];
26665
+ return Object.keys(out).length > 0 ? out : undefined;
26666
+ }
26667
+ function _splitCaseADivisibleSpan(grid, row, col, direction, count) {
26668
+ var _targetCell$span, _targetCell$span2;
26669
+ // direction: "horizontal" splits col span; "vertical" splits row span.
26670
+ var isHorizontal = direction === "horizontal";
26671
+ var targetCell = grid["".concat(row, ".").concat(col)];
26672
+ var targetSpanCol = ((_targetCell$span = targetCell.span) === null || _targetCell$span === void 0 ? void 0 : _targetCell$span.col) || 1;
26673
+ var targetSpanRow = ((_targetCell$span2 = targetCell.span) === null || _targetCell$span2 === void 0 ? void 0 : _targetCell$span2.row) || 1;
26674
+ var splitSpan = isHorizontal ? targetSpanCol : targetSpanRow;
26675
+ var otherSpan = isHorizontal ? targetSpanRow : targetSpanCol;
26676
+ var subSpan = splitSpan / count;
26677
+ var component = targetCell.component;
26678
+ var out = _cloneShallow(grid);
26679
+
26680
+ // Unhide cells previously covered by the old span.
26681
+ for (var sr = row; sr < row + targetSpanRow; sr++) {
26682
+ for (var sc = col; sc < col + targetSpanCol; sc++) {
26683
+ var k = "".concat(sr, ".").concat(sc);
26684
+ if (out[k]) out[k] = _objectSpread$D(_objectSpread$D({}, out[k]), {}, {
26685
+ hide: false
26686
+ });
26687
+ }
26688
+ }
26689
+
26690
+ // Drop the old span on the target.
26691
+ if (out["".concat(row, ".").concat(col)].span) {
26692
+ delete out["".concat(row, ".").concat(col)].span;
26693
+ }
26694
+
26695
+ // Create the count sub-cells.
26696
+ for (var i = 0; i < count; i++) {
26697
+ var subRow = isHorizontal ? row : row + i * subSpan;
26698
+ var subCol = isHorizontal ? col + i * subSpan : col;
26699
+ var key = "".concat(subRow, ".").concat(subCol);
26700
+ var sub = {
26701
+ component: i === 0 ? component : null,
26702
+ hide: false
26703
+ };
26704
+ if (subSpan > 1 || otherSpan > 1) {
26705
+ sub.span = {};
26706
+ if (isHorizontal) {
26707
+ if (subSpan > 1) sub.span.col = subSpan;
26708
+ if (otherSpan > 1) sub.span.row = otherSpan;
26709
+ } else {
26710
+ if (subSpan > 1) sub.span.row = subSpan;
26711
+ if (otherSpan > 1) sub.span.col = otherSpan;
26712
+ }
26713
+ }
26714
+ out[key] = sub;
26715
+ }
26716
+ return out;
26717
+ }
26718
+ function _splitCaseBResolutionMultiply(grid, row, col, direction, count) {
26719
+ var _targetCell$span3, _targetCell$span4, _targetCell$span5, _targetCell$span6;
26720
+ var isHorizontal = direction === "horizontal";
26721
+ var targetCell = grid["".concat(row, ".").concat(col)];
26722
+ var oldRows = grid.rows || 1;
26723
+ var oldCols = grid.cols || 1;
26724
+ var component = targetCell.component;
26725
+
26726
+ // 1. Collect every visible cell's data + position + spans.
26727
+ var visibleCells = [];
26728
+ for (var r = 1; r <= oldRows; r++) {
26729
+ for (var c = 1; c <= oldCols; c++) {
26730
+ var key = "".concat(r, ".").concat(c);
26731
+ var c0 = grid[key];
26732
+ if (c0 && !c0.hide) {
26733
+ var _c0$span, _c0$span2;
26734
+ visibleCells.push({
26735
+ row: r,
26736
+ col: c,
26737
+ data: _objectSpread$D({}, c0),
26738
+ spanRow: ((_c0$span = c0.span) === null || _c0$span === void 0 ? void 0 : _c0$span.row) || 1,
26739
+ spanCol: ((_c0$span2 = c0.span) === null || _c0$span2 === void 0 ? void 0 : _c0$span2.col) || 1
26740
+ });
26741
+ }
26742
+ }
26743
+ }
26744
+
26745
+ // 2. Build the new grid: copy meta keys, drop all cell keys.
26746
+ var out = {};
26747
+ for (var _i2 = 0, _Object$keys2 = Object.keys(grid); _i2 < _Object$keys2.length; _i2++) {
26748
+ var k = _Object$keys2[_i2];
26749
+ if (META_KEYS$4.has(k)) out[k] = grid[k];
26750
+ }
26751
+ if (isHorizontal) {
26752
+ out.cols = oldCols * count;
26753
+ out.rows = oldRows;
26754
+ } else {
26755
+ out.rows = oldRows * count;
26756
+ out.cols = oldCols;
26757
+ }
26758
+
26759
+ // 3. Reposition every visible cell to its scaled position with the
26760
+ // span scaled in the split direction.
26761
+ for (var _i3 = 0, _visibleCells = visibleCells; _i3 < _visibleCells.length; _i3++) {
26762
+ var vc = _visibleCells[_i3];
26763
+ var newRow = isHorizontal ? vc.row : (vc.row - 1) * count + 1;
26764
+ var newCol = isHorizontal ? (vc.col - 1) * count + 1 : vc.col;
26765
+ var _key = "".concat(newRow, ".").concat(newCol);
26766
+ var repositioned = _objectSpread$D(_objectSpread$D({}, vc.data), {}, {
26767
+ hide: false,
26768
+ span: {
26769
+ row: isHorizontal ? vc.spanRow : vc.spanRow * count,
26770
+ col: isHorizontal ? vc.spanCol * count : vc.spanCol
26771
+ }
26772
+ });
26773
+ out[_key] = repositioned;
26774
+ }
26775
+
26776
+ // 4. Replace the target cell's repositioned entry with count sub-cells.
26777
+ var newTargetRow = isHorizontal ? row : (row - 1) * count + 1;
26778
+ var newTargetCol = isHorizontal ? (col - 1) * count + 1 : col;
26779
+ var newTargetSpanInSplitDir = isHorizontal ? (((_targetCell$span3 = targetCell.span) === null || _targetCell$span3 === void 0 ? void 0 : _targetCell$span3.col) || 1) * count : (((_targetCell$span4 = targetCell.span) === null || _targetCell$span4 === void 0 ? void 0 : _targetCell$span4.row) || 1) * count;
26780
+ var subSpan = newTargetSpanInSplitDir / count;
26781
+ var otherSpan = isHorizontal ? ((_targetCell$span5 = targetCell.span) === null || _targetCell$span5 === void 0 ? void 0 : _targetCell$span5.row) || 1 : ((_targetCell$span6 = targetCell.span) === null || _targetCell$span6 === void 0 ? void 0 : _targetCell$span6.col) || 1;
26782
+ for (var i = 0; i < count; i++) {
26783
+ var subRow = isHorizontal ? newTargetRow : newTargetRow + i * subSpan;
26784
+ var subCol = isHorizontal ? newTargetCol + i * subSpan : newTargetCol;
26785
+ var _key2 = "".concat(subRow, ".").concat(subCol);
26786
+ var sub = {
26787
+ component: i === 0 ? component : null,
26788
+ hide: false
26789
+ };
26790
+ if (subSpan > 1 || otherSpan > 1) {
26791
+ sub.span = {};
26792
+ if (isHorizontal) {
26793
+ if (subSpan > 1) sub.span.col = subSpan;
26794
+ if (otherSpan > 1) sub.span.row = otherSpan;
26795
+ } else {
26796
+ if (subSpan > 1) sub.span.row = subSpan;
26797
+ if (otherSpan > 1) sub.span.col = otherSpan;
26798
+ }
26799
+ }
26800
+ out[_key2] = sub;
26801
+ }
26802
+ return out;
26803
+ }
26804
+ function splitGridCellOp(grid, cellNumber, direction) {
26805
+ var _targetCell$span7, _targetCell$span8;
26806
+ var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
26807
+ if (!grid) return grid;
26808
+ var targetCell = grid[cellNumber];
26809
+ if (!targetCell) return grid;
26810
+ if (direction !== "horizontal" && direction !== "vertical") return grid;
26811
+ if (!Number.isFinite(count) || count < 2) return grid;
26812
+ var _cellNumber$split$map = cellNumber.split(".").map(Number),
26813
+ _cellNumber$split$map2 = _slicedToArray(_cellNumber$split$map, 2),
26814
+ row = _cellNumber$split$map2[0],
26815
+ col = _cellNumber$split$map2[1];
26816
+ var targetSpanInSplitDir = direction === "horizontal" ? ((_targetCell$span7 = targetCell.span) === null || _targetCell$span7 === void 0 ? void 0 : _targetCell$span7.col) || 1 : ((_targetCell$span8 = targetCell.span) === null || _targetCell$span8 === void 0 ? void 0 : _targetCell$span8.row) || 1;
26817
+ if (targetSpanInSplitDir % count === 0) {
26818
+ return _splitCaseADivisibleSpan(grid, row, col, direction, count);
26819
+ }
26820
+ return _splitCaseBResolutionMultiply(grid, row, col, direction, count);
26821
+ }
26822
+
26823
+ // Exposed for tests / DashboardModel utility (kept private until needed).
26824
+ splitGridCellOp._stripSpan = _stripSpan;
26825
+
26826
+ /**
26827
+ * addGridRowOp
26828
+ *
26829
+ * Pure helper for `DashboardModel.addGridRow`. Inserts a new empty row
26830
+ * after the supplied row number (afterRow=0 inserts at the top). All
26831
+ * rows at or after the insertion point shift down by one. rowHeights
26832
+ * and rowModes maps shift correspondingly so that per-row sizing/mode
26833
+ * state tracks the original rows.
26834
+ *
26835
+ * Pure — input grid is never mutated.
26836
+ */
26837
+
26838
+ var META_KEYS$3 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colWidths"]);
26839
+ function _isCellKey$3(key) {
26840
+ return /^\d+\.\d+$/.test(key);
26841
+ }
26842
+ function _shiftKeyMap$1(map, insertAt) {
26843
+ if (!map) return undefined;
26844
+ var shifted = {};
26845
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
26846
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
26847
+ key = _Object$entries$_i[0],
26848
+ value = _Object$entries$_i[1];
26849
+ var n = Number(key);
26850
+ shifted[String(n >= insertAt ? n + 1 : n)] = value;
26851
+ }
26852
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
26853
+ }
26854
+ function addGridRowOp(grid) {
26855
+ var afterRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
26856
+ if (!grid) return grid;
26857
+ var newRowNumber = afterRow + 1;
26858
+ var out = {};
26859
+ // Copy meta keys forward.
26860
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
26861
+ var k = _Object$keys[_i2];
26862
+ if (META_KEYS$3.has(k)) out[k] = grid[k];
26863
+ }
26864
+ out.rows = (grid.rows || 0) + 1;
26865
+ out.cols = grid.cols;
26866
+
26867
+ // Walk every cell. Cells at row >= insertion point shift down by 1.
26868
+ for (var _i3 = 0, _Object$keys2 = Object.keys(grid); _i3 < _Object$keys2.length; _i3++) {
26869
+ var _k = _Object$keys2[_i3];
26870
+ if (!_isCellKey$3(_k)) continue;
26871
+ var _k$split$map = _k.split(".").map(Number),
26872
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
26873
+ r = _k$split$map2[0],
26874
+ c = _k$split$map2[1];
26875
+ var newRow = r >= newRowNumber ? r + 1 : r;
26876
+ out["".concat(newRow, ".").concat(c)] = grid[_k];
26877
+ }
26878
+
26879
+ // Insert empty cells in the new row.
26880
+ var cols = grid.cols || 0;
26881
+ for (var _c = 1; _c <= cols; _c++) {
26882
+ out["".concat(newRowNumber, ".").concat(_c)] = {
26883
+ component: null,
26884
+ hide: false
26885
+ };
26886
+ }
26887
+
26888
+ // Shift rowHeights / rowModes keys to track original rows.
26889
+ var newRowHeights = _shiftKeyMap$1(grid.rowHeights, newRowNumber);
26890
+ if (newRowHeights) out.rowHeights = newRowHeights;else delete out.rowHeights;
26891
+ var newRowModes = _shiftKeyMap$1(grid.rowModes, newRowNumber);
26892
+ if (newRowModes) out.rowModes = newRowModes;else delete out.rowModes;
26893
+ return out;
26894
+ }
26895
+
26896
+ /**
26897
+ * deleteGridRowOp
26898
+ *
26899
+ * Pure helper for `DashboardModel.deleteGridRow`. Removes the row at
26900
+ * `rowNumber`, shifts everything below up by one, and **returns the
26901
+ * list of widget component ids that lived on the deleted row** so the
26902
+ * caller can remove them from the layout (or surface them to a
26903
+ * confirm-before-delete UX in the future).
26904
+ *
26905
+ * Refuses to delete the only remaining row (returns the input grid
26906
+ * unchanged + empty orphans list — same fail-safe the model had).
26907
+ */
26908
+
26909
+ var META_KEYS$2 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
26910
+ function _isCellKey$2(key) {
26911
+ return /^\d+\.\d+$/.test(key);
26912
+ }
26913
+ function _shiftKeyMapDown$1(map, deletedAt) {
26914
+ if (!map) return undefined;
26915
+ var shifted = {};
26916
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
26917
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
26918
+ key = _Object$entries$_i[0],
26919
+ value = _Object$entries$_i[1];
26920
+ var n = Number(key);
26921
+ if (n === deletedAt) continue;
26922
+ shifted[String(n > deletedAt ? n - 1 : n)] = value;
26923
+ }
26924
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
26925
+ }
26926
+ function deleteGridRowOp(grid, rowNumber) {
26927
+ if (!grid) return {
26928
+ grid: grid,
26929
+ orphanedComponents: []
26930
+ };
26931
+ if ((grid.rows || 0) <= 1) {
26932
+ // Can't delete the only row — fail-safe no-op.
26933
+ return {
26934
+ grid: grid,
26935
+ orphanedComponents: []
26936
+ };
26937
+ }
26938
+ var out = {};
26939
+ var orphanedComponents = [];
26940
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
26941
+ var k = _Object$keys[_i2];
26942
+ if (META_KEYS$2.has(k)) {
26943
+ out[k] = grid[k];
26944
+ continue;
26945
+ }
26946
+ if (!_isCellKey$2(k)) continue;
26947
+ var _k$split$map = k.split(".").map(Number),
26948
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
26949
+ r = _k$split$map2[0],
26950
+ c = _k$split$map2[1];
26951
+ if (r === rowNumber) {
26952
+ // Cell is in the row being deleted — collect its component (if
26953
+ // any) as an orphan, drop the cell entirely.
26954
+ var comp = grid[k] && grid[k].component;
26955
+ if (comp != null) orphanedComponents.push(comp);
26956
+ continue;
26957
+ }
26958
+ if (r > rowNumber) {
26959
+ // Cells below the deleted row shift up by one.
26960
+ out["".concat(r - 1, ".").concat(c)] = grid[k];
26961
+ } else {
26962
+ // Cells above the deleted row are unchanged.
26963
+ out[k] = grid[k];
26964
+ }
26965
+ }
26966
+ out.rows = (grid.rows || 0) - 1;
26967
+ out.cols = grid.cols;
26968
+ var newRowHeights = _shiftKeyMapDown$1(grid.rowHeights, rowNumber);
26969
+ if (newRowHeights) out.rowHeights = newRowHeights;else delete out.rowHeights;
26970
+ var newRowModes = _shiftKeyMapDown$1(grid.rowModes, rowNumber);
26971
+ if (newRowModes) out.rowModes = newRowModes;else delete out.rowModes;
26972
+ return {
26973
+ grid: out,
26974
+ orphanedComponents: orphanedComponents
26975
+ };
26976
+ }
26977
+
26978
+ /**
26979
+ * addGridColumnOp
26980
+ *
26981
+ * Pure helper for `DashboardModel.addGridColumn`. Symmetric to
26982
+ * `addGridRowOp` but for columns. Inserts an empty column after the
26983
+ * supplied column number (afterCol=0 inserts at the left edge).
26984
+ * colModes shifts to track its original columns. (Original code
26985
+ * doesn't track colWidths, so we don't either; can be added later.)
26986
+ */
26987
+
26988
+ var META_KEYS$1 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
26989
+ function _isCellKey$1(key) {
26990
+ return /^\d+\.\d+$/.test(key);
26991
+ }
26992
+ function _shiftKeyMap(map, insertAt) {
26993
+ if (!map) return undefined;
26994
+ var shifted = {};
26995
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
26996
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
26997
+ key = _Object$entries$_i[0],
26998
+ value = _Object$entries$_i[1];
26999
+ var n = Number(key);
27000
+ shifted[String(n >= insertAt ? n + 1 : n)] = value;
27001
+ }
27002
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
27003
+ }
27004
+ function addGridColumnOp(grid) {
27005
+ var afterCol = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
27006
+ if (!grid) return grid;
27007
+ var newColNumber = afterCol + 1;
27008
+ var out = {};
27009
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
27010
+ var k = _Object$keys[_i2];
27011
+ if (META_KEYS$1.has(k)) out[k] = grid[k];
27012
+ }
27013
+ out.cols = (grid.cols || 0) + 1;
27014
+ out.rows = grid.rows;
27015
+ for (var _i3 = 0, _Object$keys2 = Object.keys(grid); _i3 < _Object$keys2.length; _i3++) {
27016
+ var _k = _Object$keys2[_i3];
27017
+ if (!_isCellKey$1(_k)) continue;
27018
+ var _k$split$map = _k.split(".").map(Number),
27019
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
27020
+ r = _k$split$map2[0],
27021
+ c = _k$split$map2[1];
27022
+ var newCol = c >= newColNumber ? c + 1 : c;
27023
+ out["".concat(r, ".").concat(newCol)] = grid[_k];
27024
+ }
27025
+ var rows = grid.rows || 0;
27026
+ for (var _r = 1; _r <= rows; _r++) {
27027
+ out["".concat(_r, ".").concat(newColNumber)] = {
27028
+ component: null,
27029
+ hide: false
27030
+ };
27031
+ }
27032
+ var newColModes = _shiftKeyMap(grid.colModes, newColNumber);
27033
+ if (newColModes) out.colModes = newColModes;else delete out.colModes;
27034
+ return out;
27035
+ }
27036
+
27037
+ /**
27038
+ * deleteGridColumnOp
27039
+ *
27040
+ * Pure helper for `DashboardModel.deleteGridColumn`. Symmetric to
27041
+ * `deleteGridRowOp` — removes the column at `colNumber`, shifts
27042
+ * everything to the right left by one, returns orphaned widget ids.
27043
+ *
27044
+ * Refuses to delete the only remaining column (returns input grid
27045
+ * unchanged + empty orphans list).
27046
+ */
27047
+
27048
+ var META_KEYS = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
27049
+ function _isCellKey(key) {
27050
+ return /^\d+\.\d+$/.test(key);
27051
+ }
27052
+ function _shiftKeyMapDown(map, deletedAt) {
27053
+ if (!map) return undefined;
27054
+ var shifted = {};
27055
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
27056
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
27057
+ key = _Object$entries$_i[0],
27058
+ value = _Object$entries$_i[1];
27059
+ var n = Number(key);
27060
+ if (n === deletedAt) continue;
27061
+ shifted[String(n > deletedAt ? n - 1 : n)] = value;
27062
+ }
27063
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
27064
+ }
27065
+ function deleteGridColumnOp(grid, colNumber) {
27066
+ if (!grid) return {
27067
+ grid: grid,
27068
+ orphanedComponents: []
27069
+ };
27070
+ if ((grid.cols || 0) <= 1) {
27071
+ return {
27072
+ grid: grid,
27073
+ orphanedComponents: []
27074
+ };
27075
+ }
27076
+ var out = {};
27077
+ var orphanedComponents = [];
27078
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
27079
+ var k = _Object$keys[_i2];
27080
+ if (META_KEYS.has(k)) {
27081
+ out[k] = grid[k];
27082
+ continue;
27083
+ }
27084
+ if (!_isCellKey(k)) continue;
27085
+ var _k$split$map = k.split(".").map(Number),
27086
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
27087
+ r = _k$split$map2[0],
27088
+ c = _k$split$map2[1];
27089
+ if (c === colNumber) {
27090
+ var comp = grid[k] && grid[k].component;
27091
+ if (comp != null) orphanedComponents.push(comp);
27092
+ continue;
27093
+ }
27094
+ if (c > colNumber) {
27095
+ out["".concat(r, ".").concat(c - 1)] = grid[k];
27096
+ } else {
27097
+ out[k] = grid[k];
27098
+ }
27099
+ }
27100
+ out.cols = (grid.cols || 0) - 1;
27101
+ out.rows = grid.rows;
27102
+ var newColModes = _shiftKeyMapDown(grid.colModes, colNumber);
27103
+ if (newColModes) out.colModes = newColModes;else delete out.colModes;
27104
+ return {
27105
+ grid: out,
27106
+ orphanedComponents: orphanedComponents
27107
+ };
27108
+ }
27109
+
26619
27110
  function _createForOfIteratorHelper$m(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$m(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
26620
27111
  function _unsupportedIterableToArray$m(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$m(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$m(r, a) : void 0; } }
26621
27112
  function _arrayLikeToArray$m(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -27897,210 +28388,18 @@ var DashboardModel = /*#__PURE__*/function () {
27897
28388
  if (!gridContainer || !gridContainer.grid) {
27898
28389
  return null;
27899
28390
  }
27900
- var grid = gridContainer.grid;
27901
- var _cellNumber$split$map = cellNumber.split(".").map(Number),
27902
- _cellNumber$split$map2 = _slicedToArray(_cellNumber$split$map, 2),
27903
- row = _cellNumber$split$map2[0],
27904
- col = _cellNumber$split$map2[1];
27905
- var targetCell = grid[cellNumber];
27906
- if (direction === "horizontal") {
27907
- var _targetCell$span, _targetCell$span2;
27908
- var targetSpanCol = (targetCell === null || targetCell === void 0 || (_targetCell$span = targetCell.span) === null || _targetCell$span === void 0 ? void 0 : _targetCell$span.col) || 1;
27909
- var targetSpanRow = (targetCell === null || targetCell === void 0 || (_targetCell$span2 = targetCell.span) === null || _targetCell$span2 === void 0 ? void 0 : _targetCell$span2.row) || 1;
27910
- if (targetSpanCol % count === 0) {
27911
- // CASE A: Span is divisible — simple subdivision, no grid resize
27912
- var subSpan = targetSpanCol / count;
27913
- var component = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
27914
-
27915
- // Unhide cells covered by the old span
27916
- for (var sr = row; sr < row + targetSpanRow; sr++) {
27917
- for (var sc = col; sc < col + targetSpanCol; sc++) {
27918
- var k = "".concat(sr, ".").concat(sc);
27919
- if (grid[k]) grid[k].hide = false;
27920
- }
27921
- }
27922
- delete targetCell.span;
27923
-
27924
- // Create subdivided cells
27925
- for (var i = 0; i < count; i++) {
27926
- var key = "".concat(row, ".").concat(col + i * subSpan);
27927
- grid[key] = {
27928
- component: i === 0 ? component : null,
27929
- hide: false
27930
- };
27931
- if (subSpan > 1 || targetSpanRow > 1) {
27932
- grid[key].span = {};
27933
- if (subSpan > 1) grid[key].span.col = subSpan;
27934
- if (targetSpanRow > 1) grid[key].span.row = targetSpanRow;
27935
- }
27936
- }
27937
- } else {
27938
- var _targetCell$span3, _targetCell$span4;
27939
- // CASE B: Multiply grid resolution by count
27940
- var oldCols = grid.cols;
27941
-
27942
- // 1. Collect all visible cells
27943
- var visibleCells = [];
27944
- for (var r = 1; r <= grid.rows; r++) {
27945
- for (var c = 1; c <= oldCols; c++) {
27946
- var _key5 = "".concat(r, ".").concat(c);
27947
- var cell = grid[_key5];
27948
- if (cell && !cell.hide) {
27949
- var _cell$span, _cell$span2;
27950
- visibleCells.push({
27951
- row: r,
27952
- col: c,
27953
- data: _objectSpread$D({}, cell),
27954
- spanCol: ((_cell$span = cell.span) === null || _cell$span === void 0 ? void 0 : _cell$span.col) || 1,
27955
- spanRow: ((_cell$span2 = cell.span) === null || _cell$span2 === void 0 ? void 0 : _cell$span2.row) || 1
27956
- });
27957
- }
27958
- }
27959
- }
27960
-
27961
- // 2. Clear all cell keys
27962
- for (var _i4 = 0, _Object$keys3 = Object.keys(grid); _i4 < _Object$keys3.length; _i4++) {
27963
- var _key6 = _Object$keys3[_i4];
27964
- if (/^\d+\.\d+$/.test(_key6)) delete grid[_key6];
27965
- }
27966
-
27967
- // 3. Update grid dimensions
27968
- grid.cols = oldCols * count;
27969
-
27970
- // 4. Reposition all cells with scaled positions and spans
27971
- for (var _i5 = 0, _visibleCells = visibleCells; _i5 < _visibleCells.length; _i5++) {
27972
- var vc = _visibleCells[_i5];
27973
- var newCol = (vc.col - 1) * count + 1;
27974
- var _key7 = "".concat(vc.row, ".").concat(newCol);
27975
- grid[_key7] = _objectSpread$D(_objectSpread$D({}, vc.data), {}, {
27976
- hide: false,
27977
- span: {
27978
- row: vc.spanRow,
27979
- col: vc.spanCol * count
27980
- }
27981
- });
27982
- }
27983
-
27984
- // 5. Split the target cell into count sub-cells
27985
- var newTargetCol = (col - 1) * count + 1;
27986
- var newTargetSpan = ((targetCell === null || targetCell === void 0 || (_targetCell$span3 = targetCell.span) === null || _targetCell$span3 === void 0 ? void 0 : _targetCell$span3.col) || 1) * count;
27987
- var _subSpan = newTargetSpan / count;
27988
- var _component = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
27989
- var rowSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span4 = targetCell.span) === null || _targetCell$span4 === void 0 ? void 0 : _targetCell$span4.row) || 1;
27990
- for (var _i6 = 0; _i6 < count; _i6++) {
27991
- var _key8 = "".concat(row, ".").concat(newTargetCol + _i6 * _subSpan);
27992
- grid[_key8] = {
27993
- component: _i6 === 0 ? _component : null,
27994
- hide: false
27995
- };
27996
- if (_subSpan > 1 || rowSpan > 1) {
27997
- grid[_key8].span = {};
27998
- if (_subSpan > 1) grid[_key8].span.col = _subSpan;
27999
- if (rowSpan > 1) grid[_key8].span.row = rowSpan;
28000
- }
28001
- }
28002
- }
28003
- } else if (direction === "vertical") {
28004
- var _targetCell$span5, _targetCell$span6;
28005
- var _targetSpanRow = (targetCell === null || targetCell === void 0 || (_targetCell$span5 = targetCell.span) === null || _targetCell$span5 === void 0 ? void 0 : _targetCell$span5.row) || 1;
28006
- var _targetSpanCol = (targetCell === null || targetCell === void 0 || (_targetCell$span6 = targetCell.span) === null || _targetCell$span6 === void 0 ? void 0 : _targetCell$span6.col) || 1;
28007
- if (_targetSpanRow % count === 0) {
28008
- // CASE A: Span is divisible — simple subdivision, no grid resize
28009
- var _subSpan2 = _targetSpanRow / count;
28010
- var _component2 = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
28011
-
28012
- // Unhide cells covered by the old span
28013
- for (var _sr2 = row; _sr2 < row + _targetSpanRow; _sr2++) {
28014
- for (var _sc2 = col; _sc2 < col + _targetSpanCol; _sc2++) {
28015
- var _k = "".concat(_sr2, ".").concat(_sc2);
28016
- if (grid[_k]) grid[_k].hide = false;
28017
- }
28018
- }
28019
- delete targetCell.span;
28020
-
28021
- // Create subdivided cells
28022
- for (var _i7 = 0; _i7 < count; _i7++) {
28023
- var _key9 = "".concat(row + _i7 * _subSpan2, ".").concat(col);
28024
- grid[_key9] = {
28025
- component: _i7 === 0 ? _component2 : null,
28026
- hide: false
28027
- };
28028
- if (_subSpan2 > 1 || _targetSpanCol > 1) {
28029
- grid[_key9].span = {};
28030
- if (_subSpan2 > 1) grid[_key9].span.row = _subSpan2;
28031
- if (_targetSpanCol > 1) grid[_key9].span.col = _targetSpanCol;
28032
- }
28033
- }
28034
- } else {
28035
- var _targetCell$span7, _targetCell$span8;
28036
- // CASE B: Multiply grid resolution by count
28037
- var oldRows = grid.rows;
28038
-
28039
- // 1. Collect all visible cells
28040
- var _visibleCells2 = [];
28041
- for (var _r1 = 1; _r1 <= oldRows; _r1++) {
28042
- for (var _c10 = 1; _c10 <= grid.cols; _c10++) {
28043
- var _key0 = "".concat(_r1, ".").concat(_c10);
28044
- var _cell6 = grid[_key0];
28045
- if (_cell6 && !_cell6.hide) {
28046
- var _cell6$span, _cell6$span2;
28047
- _visibleCells2.push({
28048
- row: _r1,
28049
- col: _c10,
28050
- data: _objectSpread$D({}, _cell6),
28051
- spanRow: ((_cell6$span = _cell6.span) === null || _cell6$span === void 0 ? void 0 : _cell6$span.row) || 1,
28052
- spanCol: ((_cell6$span2 = _cell6.span) === null || _cell6$span2 === void 0 ? void 0 : _cell6$span2.col) || 1
28053
- });
28054
- }
28055
- }
28056
- }
28057
-
28058
- // 2. Clear all cell keys
28059
- for (var _i8 = 0, _Object$keys4 = Object.keys(grid); _i8 < _Object$keys4.length; _i8++) {
28060
- var _key1 = _Object$keys4[_i8];
28061
- if (/^\d+\.\d+$/.test(_key1)) delete grid[_key1];
28062
- }
28063
-
28064
- // 3. Update grid dimensions
28065
- grid.rows = oldRows * count;
28066
-
28067
- // 4. Reposition all cells with scaled positions and spans
28068
- for (var _i9 = 0, _visibleCells3 = _visibleCells2; _i9 < _visibleCells3.length; _i9++) {
28069
- var _vc = _visibleCells3[_i9];
28070
- var newRow = (_vc.row - 1) * count + 1;
28071
- var _key10 = "".concat(newRow, ".").concat(_vc.col);
28072
- grid[_key10] = _objectSpread$D(_objectSpread$D({}, _vc.data), {}, {
28073
- hide: false,
28074
- span: {
28075
- row: _vc.spanRow * count,
28076
- col: _vc.spanCol
28077
- }
28078
- });
28079
- }
28080
-
28081
- // 5. Split the target cell into count sub-cells
28082
- var newTargetRow = (row - 1) * count + 1;
28083
- var _newTargetSpan = ((targetCell === null || targetCell === void 0 || (_targetCell$span7 = targetCell.span) === null || _targetCell$span7 === void 0 ? void 0 : _targetCell$span7.row) || 1) * count;
28084
- var _subSpan3 = _newTargetSpan / count;
28085
- var _component3 = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
28086
- var colSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span8 = targetCell.span) === null || _targetCell$span8 === void 0 ? void 0 : _targetCell$span8.col) || 1;
28087
- for (var _i0 = 0; _i0 < count; _i0++) {
28088
- var _key11 = "".concat(newTargetRow + _i0 * _subSpan3, ".").concat(col);
28089
- grid[_key11] = {
28090
- component: _i0 === 0 ? _component3 : null,
28091
- hide: false
28092
- };
28093
- if (_subSpan3 > 1 || colSpan > 1) {
28094
- grid[_key11].span = {};
28095
- if (_subSpan3 > 1) grid[_key11].span.row = _subSpan3;
28096
- if (colSpan > 1) grid[_key11].span.col = colSpan;
28097
- }
28098
- }
28099
- }
28391
+ // Slice 11: pure helper handles both CASE A (divisible span)
28392
+ // and CASE B (resolution multiply). Falls through to the legacy
28393
+ // inline path below if the helper somehow returns the same
28394
+ // grid (defensive — shouldn't happen for a valid cellNumber +
28395
+ // direction).
28396
+ var newGrid = splitGridCellOp(gridContainer.grid, cellNumber, direction, count);
28397
+ if (newGrid !== gridContainer.grid) {
28398
+ gridContainer.grid = newGrid;
28399
+ this._normalizeGrid(gridContainer.grid);
28400
+ this.updateLayoutItem(gridContainer);
28100
28401
  }
28101
- this._normalizeGrid(grid);
28102
- this.updateLayoutItem(gridContainer);
28103
- return grid;
28402
+ return gridContainer.grid;
28104
28403
  } catch (e) {
28105
28404
  return null;
28106
28405
  }
@@ -28249,55 +28548,8 @@ var DashboardModel = /*#__PURE__*/function () {
28249
28548
  if (!gridContainer || !gridContainer.grid) {
28250
28549
  return null;
28251
28550
  }
28252
- var newRowNumber = afterRow + 1;
28253
- gridContainer.grid.rows += 1;
28254
-
28255
- // Shift existing rows down
28256
- for (var r = gridContainer.grid.rows; r > newRowNumber; r--) {
28257
- for (var c = 1; c <= gridContainer.grid.cols; c++) {
28258
- var oldCell = "".concat(r - 1, ".").concat(c);
28259
- var newCell = "".concat(r, ".").concat(c);
28260
- if (oldCell in gridContainer.grid) {
28261
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28262
- delete gridContainer.grid[oldCell];
28263
- }
28264
- }
28265
- }
28266
-
28267
- // Create new empty cells for the new row
28268
- for (var _c11 = 1; _c11 <= gridContainer.grid.cols; _c11++) {
28269
- var cellNumber = "".concat(newRowNumber, ".").concat(_c11);
28270
- gridContainer.grid[cellNumber] = {
28271
- component: null,
28272
- hide: false
28273
- };
28274
- }
28275
-
28276
- // Shift rowHeights keys down (rows after insertion point move +1)
28277
- if (gridContainer.grid.rowHeights) {
28278
- var shifted = {};
28279
- for (var _i1 = 0, _Object$entries2 = Object.entries(gridContainer.grid.rowHeights); _i1 < _Object$entries2.length; _i1++) {
28280
- var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i1], 2),
28281
- key = _Object$entries2$_i[0],
28282
- mult = _Object$entries2$_i[1];
28283
- var rowNum = Number(key);
28284
- shifted[String(rowNum >= newRowNumber ? rowNum + 1 : rowNum)] = mult;
28285
- }
28286
- gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
28287
- }
28288
-
28289
- // Shift rowModes keys down (rows after insertion point move +1)
28290
- if (gridContainer.grid.rowModes) {
28291
- var _shifted = {};
28292
- for (var _i10 = 0, _Object$entries3 = Object.entries(gridContainer.grid.rowModes); _i10 < _Object$entries3.length; _i10++) {
28293
- var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i10], 2),
28294
- _key12 = _Object$entries3$_i[0],
28295
- mode = _Object$entries3$_i[1];
28296
- var _rowNum = Number(_key12);
28297
- _shifted[String(_rowNum >= newRowNumber ? _rowNum + 1 : _rowNum)] = mode;
28298
- }
28299
- gridContainer.grid.rowModes = Object.keys(_shifted).length > 0 ? _shifted : undefined;
28300
- }
28551
+ // Slice 11: pure helper handles the row-insertion + shifting.
28552
+ gridContainer.grid = addGridRowOp(gridContainer.grid, afterRow);
28301
28553
  this._normalizeGrid(gridContainer.grid);
28302
28554
  this.updateLayoutItem(gridContainer);
28303
28555
  return gridContainer.grid;
@@ -28323,55 +28575,23 @@ var DashboardModel = /*#__PURE__*/function () {
28323
28575
  if (gridContainer.grid.rows <= 1) {
28324
28576
  return null;
28325
28577
  }
28326
-
28327
- // Remove components in the deleted row
28328
- for (var c = 1; c <= gridContainer.grid.cols; c++) {
28329
- var cellNumber = "".concat(rowNumber, ".").concat(c);
28330
- if (gridContainer.grid[cellNumber] && gridContainer.grid[cellNumber].component) {
28331
- this.removeItemFromLayout(gridContainer.grid[cellNumber].component);
28332
- }
28333
- delete gridContainer.grid[cellNumber];
28334
- }
28335
-
28336
- // Shift rows up
28337
- for (var r = rowNumber + 1; r <= gridContainer.grid.rows; r++) {
28338
- for (var _c12 = 1; _c12 <= gridContainer.grid.cols; _c12++) {
28339
- var oldCell = "".concat(r, ".").concat(_c12);
28340
- var newCell = "".concat(r - 1, ".").concat(_c12);
28341
- if (oldCell in gridContainer.grid) {
28342
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28343
- delete gridContainer.grid[oldCell];
28344
- }
28578
+ // Slice 11: pure helper returns the updated grid + the list of
28579
+ // widget components that lived on the deleted row. We remove
28580
+ // those from the layout here to preserve the original
28581
+ // destructive-delete behavior.
28582
+ var result = deleteGridRowOp(gridContainer.grid, rowNumber);
28583
+ gridContainer.grid = result.grid;
28584
+ var _iterator2 = _createForOfIteratorHelper$m(result.orphanedComponents),
28585
+ _step2;
28586
+ try {
28587
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
28588
+ var componentId = _step2.value;
28589
+ this.removeItemFromLayout(componentId);
28345
28590
  }
28346
- }
28347
- gridContainer.grid.rows -= 1;
28348
-
28349
- // Shift rowHeights keys up and remove the deleted row's entry
28350
- if (gridContainer.grid.rowHeights) {
28351
- var shifted = {};
28352
- for (var _i11 = 0, _Object$entries4 = Object.entries(gridContainer.grid.rowHeights); _i11 < _Object$entries4.length; _i11++) {
28353
- var _Object$entries4$_i = _slicedToArray(_Object$entries4[_i11], 2),
28354
- key = _Object$entries4$_i[0],
28355
- mult = _Object$entries4$_i[1];
28356
- var rowNum = Number(key);
28357
- if (rowNum === rowNumber) continue;
28358
- shifted[String(rowNum > rowNumber ? rowNum - 1 : rowNum)] = mult;
28359
- }
28360
- gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
28361
- }
28362
-
28363
- // Shift rowModes keys up and remove the deleted row's entry
28364
- if (gridContainer.grid.rowModes) {
28365
- var _shifted2 = {};
28366
- for (var _i12 = 0, _Object$entries5 = Object.entries(gridContainer.grid.rowModes); _i12 < _Object$entries5.length; _i12++) {
28367
- var _Object$entries5$_i = _slicedToArray(_Object$entries5[_i12], 2),
28368
- _key13 = _Object$entries5$_i[0],
28369
- mode = _Object$entries5$_i[1];
28370
- var _rowNum2 = Number(_key13);
28371
- if (_rowNum2 === rowNumber) continue;
28372
- _shifted2[String(_rowNum2 > rowNumber ? _rowNum2 - 1 : _rowNum2)] = mode;
28373
- }
28374
- gridContainer.grid.rowModes = Object.keys(_shifted2).length > 0 ? _shifted2 : undefined;
28591
+ } catch (err) {
28592
+ _iterator2.e(err);
28593
+ } finally {
28594
+ _iterator2.f();
28375
28595
  }
28376
28596
  this._normalizeGrid(gridContainer.grid);
28377
28597
  this.updateLayoutItem(gridContainer);
@@ -28430,42 +28650,8 @@ var DashboardModel = /*#__PURE__*/function () {
28430
28650
  if (!gridContainer || !gridContainer.grid) {
28431
28651
  return null;
28432
28652
  }
28433
- var newColNumber = afterCol + 1;
28434
- gridContainer.grid.cols += 1;
28435
-
28436
- // Shift existing columns right
28437
- for (var r = 1; r <= gridContainer.grid.rows; r++) {
28438
- for (var c = gridContainer.grid.cols; c > newColNumber; c--) {
28439
- var oldCell = "".concat(r, ".").concat(c - 1);
28440
- var newCell = "".concat(r, ".").concat(c);
28441
- if (oldCell in gridContainer.grid) {
28442
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28443
- delete gridContainer.grid[oldCell];
28444
- }
28445
- }
28446
- }
28447
-
28448
- // Create new empty cells for the new column
28449
- for (var _r10 = 1; _r10 <= gridContainer.grid.rows; _r10++) {
28450
- var cellNumber = "".concat(_r10, ".").concat(newColNumber);
28451
- gridContainer.grid[cellNumber] = {
28452
- component: null,
28453
- hide: false
28454
- };
28455
- }
28456
-
28457
- // Shift colModes keys right (columns after insertion point move +1)
28458
- if (gridContainer.grid.colModes) {
28459
- var shifted = {};
28460
- for (var _i13 = 0, _Object$entries6 = Object.entries(gridContainer.grid.colModes); _i13 < _Object$entries6.length; _i13++) {
28461
- var _Object$entries6$_i = _slicedToArray(_Object$entries6[_i13], 2),
28462
- key = _Object$entries6$_i[0],
28463
- mode = _Object$entries6$_i[1];
28464
- var colNum = Number(key);
28465
- shifted[String(colNum >= newColNumber ? colNum + 1 : colNum)] = mode;
28466
- }
28467
- gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
28468
- }
28653
+ // Slice 11: pure helper.
28654
+ gridContainer.grid = addGridColumnOp(gridContainer.grid, afterCol);
28469
28655
  this._normalizeGrid(gridContainer.grid);
28470
28656
  this.updateLayoutItem(gridContainer);
28471
28657
  return gridContainer.grid;
@@ -28491,41 +28677,20 @@ var DashboardModel = /*#__PURE__*/function () {
28491
28677
  if (gridContainer.grid.cols <= 1) {
28492
28678
  return null;
28493
28679
  }
28494
-
28495
- // Remove components in the deleted column
28496
- for (var r = 1; r <= gridContainer.grid.rows; r++) {
28497
- var cellNumber = "".concat(r, ".").concat(colNumber);
28498
- if (gridContainer.grid[cellNumber] && gridContainer.grid[cellNumber].component) {
28499
- this.removeItemFromLayout(gridContainer.grid[cellNumber].component);
28500
- }
28501
- delete gridContainer.grid[cellNumber];
28502
- }
28503
-
28504
- // Shift columns left
28505
- for (var _r11 = 1; _r11 <= gridContainer.grid.rows; _r11++) {
28506
- for (var c = colNumber + 1; c <= gridContainer.grid.cols; c++) {
28507
- var oldCell = "".concat(_r11, ".").concat(c);
28508
- var newCell = "".concat(_r11, ".").concat(c - 1);
28509
- if (oldCell in gridContainer.grid) {
28510
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28511
- delete gridContainer.grid[oldCell];
28512
- }
28513
- }
28514
- }
28515
- gridContainer.grid.cols -= 1;
28516
-
28517
- // Shift colModes keys left and remove the deleted column's entry
28518
- if (gridContainer.grid.colModes) {
28519
- var shifted = {};
28520
- for (var _i14 = 0, _Object$entries7 = Object.entries(gridContainer.grid.colModes); _i14 < _Object$entries7.length; _i14++) {
28521
- var _Object$entries7$_i = _slicedToArray(_Object$entries7[_i14], 2),
28522
- key = _Object$entries7$_i[0],
28523
- mode = _Object$entries7$_i[1];
28524
- var colNum = Number(key);
28525
- if (colNum === colNumber) continue;
28526
- shifted[String(colNum > colNumber ? colNum - 1 : colNum)] = mode;
28680
+ // Slice 11: pure helper.
28681
+ var result = deleteGridColumnOp(gridContainer.grid, colNumber);
28682
+ gridContainer.grid = result.grid;
28683
+ var _iterator3 = _createForOfIteratorHelper$m(result.orphanedComponents),
28684
+ _step3;
28685
+ try {
28686
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
28687
+ var componentId = _step3.value;
28688
+ this.removeItemFromLayout(componentId);
28527
28689
  }
28528
- gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
28690
+ } catch (err) {
28691
+ _iterator3.e(err);
28692
+ } finally {
28693
+ _iterator3.f();
28529
28694
  }
28530
28695
  this._normalizeGrid(gridContainer.grid);
28531
28696
  this.updateLayoutItem(gridContainer);
@@ -28610,14 +28775,14 @@ var DashboardModel = /*#__PURE__*/function () {
28610
28775
  try {
28611
28776
  // Collect all item IDs actively referenced by grid cells
28612
28777
  var activeItemIds = new Set();
28613
- var _iterator2 = _createForOfIteratorHelper$m(this.layout),
28614
- _step2;
28778
+ var _iterator4 = _createForOfIteratorHelper$m(this.layout),
28779
+ _step4;
28615
28780
  try {
28616
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
28617
- var item = _step2.value;
28781
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
28782
+ var item = _step4.value;
28618
28783
  if (item.grid && _typeof(item.grid) === "object") {
28619
- for (var _i15 = 0, _Object$keys5 = Object.keys(item.grid); _i15 < _Object$keys5.length; _i15++) {
28620
- var key = _Object$keys5[_i15];
28784
+ for (var _i4 = 0, _Object$keys3 = Object.keys(item.grid); _i4 < _Object$keys3.length; _i4++) {
28785
+ var key = _Object$keys3[_i4];
28621
28786
  var cell = item.grid[key];
28622
28787
  if (cell && _typeof(cell) === "object" && cell.component) {
28623
28788
  activeItemIds.add(cell.component);
@@ -28630,9 +28795,9 @@ var DashboardModel = /*#__PURE__*/function () {
28630
28795
 
28631
28796
  // If no grid containers exist, nothing to clean
28632
28797
  } catch (err) {
28633
- _iterator2.e(err);
28798
+ _iterator4.e(err);
28634
28799
  } finally {
28635
- _iterator2.f();
28800
+ _iterator4.f();
28636
28801
  }
28637
28802
  if (activeItemIds.size === 0) return;
28638
28803
 
@@ -28650,17 +28815,17 @@ var DashboardModel = /*#__PURE__*/function () {
28650
28815
  });
28651
28816
 
28652
28817
  // Clean listener references on remaining items for each removed orphan
28653
- var _iterator3 = _createForOfIteratorHelper$m(orphanedIds),
28654
- _step3;
28818
+ var _iterator5 = _createForOfIteratorHelper$m(orphanedIds),
28819
+ _step5;
28655
28820
  try {
28656
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
28657
- var id = _step3.value;
28821
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
28822
+ var id = _step5.value;
28658
28823
  this._cleanupListenerReferencesForId(id);
28659
28824
  }
28660
28825
  } catch (err) {
28661
- _iterator3.e(err);
28826
+ _iterator5.e(err);
28662
28827
  } finally {
28663
- _iterator3.f();
28828
+ _iterator5.f();
28664
28829
  }
28665
28830
  } catch (e) {
28666
28831
  }