@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.js CHANGED
@@ -9289,7 +9289,7 @@ function _objectSpread$Z(e) { for (var r = 1; r < arguments.length; r++) { var t
9289
9289
  * multi-cell selections — that's a separate code path.
9290
9290
  */
9291
9291
 
9292
- var META_KEYS = new Set(["rows", "cols", "gap"]);
9292
+ var META_KEYS$5 = new Set(["rows", "cols", "gap"]);
9293
9293
 
9294
9294
  /**
9295
9295
  * Merge `(row, col)` with the cell to its right. Skips empty
@@ -9308,7 +9308,7 @@ function mergeRightOp(grid, row, col) {
9308
9308
  var bestCol = Infinity;
9309
9309
  for (var _i = 0, _Object$keys = Object.keys(grid); _i < _Object$keys.length; _i++) {
9310
9310
  var k = _Object$keys[_i];
9311
- if (META_KEYS.has(k)) continue;
9311
+ if (META_KEYS$5.has(k)) continue;
9312
9312
  var _k$split$map = k.split(".").map(function (n) {
9313
9313
  return parseInt(n, 10);
9314
9314
  }),
@@ -26634,6 +26634,497 @@ function mergeGridCellsOp(grid, cellNumbers, keepComponentId) {
26634
26634
 
26635
26635
  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; }
26636
26636
  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; }
26637
+ /**
26638
+ * splitGridCellOp
26639
+ *
26640
+ * Pure helper for `DashboardModel.splitGridCell`. Splits a single
26641
+ * cell horizontally or vertically into `count` sub-cells.
26642
+ *
26643
+ * Two regimes (preserving original DashboardModel semantics):
26644
+ *
26645
+ * CASE A — divisible span: when the target cell already has a span
26646
+ * in the split direction that's divisible by count, simply
26647
+ * subdivide the span into count pieces. No grid resolution change.
26648
+ *
26649
+ * CASE B — non-divisible span (typical for an unspanned cell with
26650
+ * count=2): multiply the entire grid's resolution in the split
26651
+ * direction by count, reposition every visible cell to its
26652
+ * equivalent location, and place the count sub-cells at the
26653
+ * scaled target position.
26654
+ *
26655
+ * In both regimes the widget on the original target cell ends up on
26656
+ * the FIRST sub-cell. The other sub-cells are empty.
26657
+ *
26658
+ * Pure — input grid is never mutated.
26659
+ */
26660
+
26661
+ var META_KEYS$4 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
26662
+ function _isCellKey$4(key) {
26663
+ return /^\d+\.\d+$/.test(key);
26664
+ }
26665
+ function _cloneShallow(grid) {
26666
+ var out = {};
26667
+ for (var _i = 0, _Object$keys = Object.keys(grid); _i < _Object$keys.length; _i++) {
26668
+ var k = _Object$keys[_i];
26669
+ if (META_KEYS$4.has(k)) {
26670
+ out[k] = grid[k];
26671
+ } else if (_isCellKey$4(k)) {
26672
+ var cell = grid[k];
26673
+ out[k] = _objectSpread$D({}, cell);
26674
+ if (cell.span) out[k].span = _objectSpread$D({}, cell.span);
26675
+ }
26676
+ }
26677
+ return out;
26678
+ }
26679
+ function _stripSpan(span, removeKey) {
26680
+ if (!span) return undefined;
26681
+ var out = _objectSpread$D({}, span);
26682
+ delete out[removeKey];
26683
+ return Object.keys(out).length > 0 ? out : undefined;
26684
+ }
26685
+ function _splitCaseADivisibleSpan(grid, row, col, direction, count) {
26686
+ var _targetCell$span, _targetCell$span2;
26687
+ // direction: "horizontal" splits col span; "vertical" splits row span.
26688
+ var isHorizontal = direction === "horizontal";
26689
+ var targetCell = grid["".concat(row, ".").concat(col)];
26690
+ var targetSpanCol = ((_targetCell$span = targetCell.span) === null || _targetCell$span === void 0 ? void 0 : _targetCell$span.col) || 1;
26691
+ var targetSpanRow = ((_targetCell$span2 = targetCell.span) === null || _targetCell$span2 === void 0 ? void 0 : _targetCell$span2.row) || 1;
26692
+ var splitSpan = isHorizontal ? targetSpanCol : targetSpanRow;
26693
+ var otherSpan = isHorizontal ? targetSpanRow : targetSpanCol;
26694
+ var subSpan = splitSpan / count;
26695
+ var component = targetCell.component;
26696
+ var out = _cloneShallow(grid);
26697
+
26698
+ // Unhide cells previously covered by the old span.
26699
+ for (var sr = row; sr < row + targetSpanRow; sr++) {
26700
+ for (var sc = col; sc < col + targetSpanCol; sc++) {
26701
+ var k = "".concat(sr, ".").concat(sc);
26702
+ if (out[k]) out[k] = _objectSpread$D(_objectSpread$D({}, out[k]), {}, {
26703
+ hide: false
26704
+ });
26705
+ }
26706
+ }
26707
+
26708
+ // Drop the old span on the target.
26709
+ if (out["".concat(row, ".").concat(col)].span) {
26710
+ delete out["".concat(row, ".").concat(col)].span;
26711
+ }
26712
+
26713
+ // Create the count sub-cells.
26714
+ for (var i = 0; i < count; i++) {
26715
+ var subRow = isHorizontal ? row : row + i * subSpan;
26716
+ var subCol = isHorizontal ? col + i * subSpan : col;
26717
+ var key = "".concat(subRow, ".").concat(subCol);
26718
+ var sub = {
26719
+ component: i === 0 ? component : null,
26720
+ hide: false
26721
+ };
26722
+ if (subSpan > 1 || otherSpan > 1) {
26723
+ sub.span = {};
26724
+ if (isHorizontal) {
26725
+ if (subSpan > 1) sub.span.col = subSpan;
26726
+ if (otherSpan > 1) sub.span.row = otherSpan;
26727
+ } else {
26728
+ if (subSpan > 1) sub.span.row = subSpan;
26729
+ if (otherSpan > 1) sub.span.col = otherSpan;
26730
+ }
26731
+ }
26732
+ out[key] = sub;
26733
+ }
26734
+ return out;
26735
+ }
26736
+ function _splitCaseBResolutionMultiply(grid, row, col, direction, count) {
26737
+ var _targetCell$span3, _targetCell$span4, _targetCell$span5, _targetCell$span6;
26738
+ var isHorizontal = direction === "horizontal";
26739
+ var targetCell = grid["".concat(row, ".").concat(col)];
26740
+ var oldRows = grid.rows || 1;
26741
+ var oldCols = grid.cols || 1;
26742
+ var component = targetCell.component;
26743
+
26744
+ // 1. Collect every visible cell's data + position + spans.
26745
+ var visibleCells = [];
26746
+ for (var r = 1; r <= oldRows; r++) {
26747
+ for (var c = 1; c <= oldCols; c++) {
26748
+ var key = "".concat(r, ".").concat(c);
26749
+ var c0 = grid[key];
26750
+ if (c0 && !c0.hide) {
26751
+ var _c0$span, _c0$span2;
26752
+ visibleCells.push({
26753
+ row: r,
26754
+ col: c,
26755
+ data: _objectSpread$D({}, c0),
26756
+ spanRow: ((_c0$span = c0.span) === null || _c0$span === void 0 ? void 0 : _c0$span.row) || 1,
26757
+ spanCol: ((_c0$span2 = c0.span) === null || _c0$span2 === void 0 ? void 0 : _c0$span2.col) || 1
26758
+ });
26759
+ }
26760
+ }
26761
+ }
26762
+
26763
+ // 2. Build the new grid: copy meta keys, drop all cell keys.
26764
+ var out = {};
26765
+ for (var _i2 = 0, _Object$keys2 = Object.keys(grid); _i2 < _Object$keys2.length; _i2++) {
26766
+ var k = _Object$keys2[_i2];
26767
+ if (META_KEYS$4.has(k)) out[k] = grid[k];
26768
+ }
26769
+ if (isHorizontal) {
26770
+ out.cols = oldCols * count;
26771
+ out.rows = oldRows;
26772
+ } else {
26773
+ out.rows = oldRows * count;
26774
+ out.cols = oldCols;
26775
+ }
26776
+
26777
+ // 3. Reposition every visible cell to its scaled position with the
26778
+ // span scaled in the split direction.
26779
+ for (var _i3 = 0, _visibleCells = visibleCells; _i3 < _visibleCells.length; _i3++) {
26780
+ var vc = _visibleCells[_i3];
26781
+ var newRow = isHorizontal ? vc.row : (vc.row - 1) * count + 1;
26782
+ var newCol = isHorizontal ? (vc.col - 1) * count + 1 : vc.col;
26783
+ var _key = "".concat(newRow, ".").concat(newCol);
26784
+ var repositioned = _objectSpread$D(_objectSpread$D({}, vc.data), {}, {
26785
+ hide: false,
26786
+ span: {
26787
+ row: isHorizontal ? vc.spanRow : vc.spanRow * count,
26788
+ col: isHorizontal ? vc.spanCol * count : vc.spanCol
26789
+ }
26790
+ });
26791
+ out[_key] = repositioned;
26792
+ }
26793
+
26794
+ // 4. Replace the target cell's repositioned entry with count sub-cells.
26795
+ var newTargetRow = isHorizontal ? row : (row - 1) * count + 1;
26796
+ var newTargetCol = isHorizontal ? (col - 1) * count + 1 : col;
26797
+ 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;
26798
+ var subSpan = newTargetSpanInSplitDir / count;
26799
+ 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;
26800
+ for (var i = 0; i < count; i++) {
26801
+ var subRow = isHorizontal ? newTargetRow : newTargetRow + i * subSpan;
26802
+ var subCol = isHorizontal ? newTargetCol + i * subSpan : newTargetCol;
26803
+ var _key2 = "".concat(subRow, ".").concat(subCol);
26804
+ var sub = {
26805
+ component: i === 0 ? component : null,
26806
+ hide: false
26807
+ };
26808
+ if (subSpan > 1 || otherSpan > 1) {
26809
+ sub.span = {};
26810
+ if (isHorizontal) {
26811
+ if (subSpan > 1) sub.span.col = subSpan;
26812
+ if (otherSpan > 1) sub.span.row = otherSpan;
26813
+ } else {
26814
+ if (subSpan > 1) sub.span.row = subSpan;
26815
+ if (otherSpan > 1) sub.span.col = otherSpan;
26816
+ }
26817
+ }
26818
+ out[_key2] = sub;
26819
+ }
26820
+ return out;
26821
+ }
26822
+ function splitGridCellOp(grid, cellNumber, direction) {
26823
+ var _targetCell$span7, _targetCell$span8;
26824
+ var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
26825
+ if (!grid) return grid;
26826
+ var targetCell = grid[cellNumber];
26827
+ if (!targetCell) return grid;
26828
+ if (direction !== "horizontal" && direction !== "vertical") return grid;
26829
+ if (!Number.isFinite(count) || count < 2) return grid;
26830
+ var _cellNumber$split$map = cellNumber.split(".").map(Number),
26831
+ _cellNumber$split$map2 = _slicedToArray(_cellNumber$split$map, 2),
26832
+ row = _cellNumber$split$map2[0],
26833
+ col = _cellNumber$split$map2[1];
26834
+ 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;
26835
+ if (targetSpanInSplitDir % count === 0) {
26836
+ return _splitCaseADivisibleSpan(grid, row, col, direction, count);
26837
+ }
26838
+ return _splitCaseBResolutionMultiply(grid, row, col, direction, count);
26839
+ }
26840
+
26841
+ // Exposed for tests / DashboardModel utility (kept private until needed).
26842
+ splitGridCellOp._stripSpan = _stripSpan;
26843
+
26844
+ /**
26845
+ * addGridRowOp
26846
+ *
26847
+ * Pure helper for `DashboardModel.addGridRow`. Inserts a new empty row
26848
+ * after the supplied row number (afterRow=0 inserts at the top). All
26849
+ * rows at or after the insertion point shift down by one. rowHeights
26850
+ * and rowModes maps shift correspondingly so that per-row sizing/mode
26851
+ * state tracks the original rows.
26852
+ *
26853
+ * Pure — input grid is never mutated.
26854
+ */
26855
+
26856
+ var META_KEYS$3 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colWidths"]);
26857
+ function _isCellKey$3(key) {
26858
+ return /^\d+\.\d+$/.test(key);
26859
+ }
26860
+ function _shiftKeyMap$1(map, insertAt) {
26861
+ if (!map) return undefined;
26862
+ var shifted = {};
26863
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
26864
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
26865
+ key = _Object$entries$_i[0],
26866
+ value = _Object$entries$_i[1];
26867
+ var n = Number(key);
26868
+ shifted[String(n >= insertAt ? n + 1 : n)] = value;
26869
+ }
26870
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
26871
+ }
26872
+ function addGridRowOp(grid) {
26873
+ var afterRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
26874
+ if (!grid) return grid;
26875
+ var newRowNumber = afterRow + 1;
26876
+ var out = {};
26877
+ // Copy meta keys forward.
26878
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
26879
+ var k = _Object$keys[_i2];
26880
+ if (META_KEYS$3.has(k)) out[k] = grid[k];
26881
+ }
26882
+ out.rows = (grid.rows || 0) + 1;
26883
+ out.cols = grid.cols;
26884
+
26885
+ // Walk every cell. Cells at row >= insertion point shift down by 1.
26886
+ for (var _i3 = 0, _Object$keys2 = Object.keys(grid); _i3 < _Object$keys2.length; _i3++) {
26887
+ var _k = _Object$keys2[_i3];
26888
+ if (!_isCellKey$3(_k)) continue;
26889
+ var _k$split$map = _k.split(".").map(Number),
26890
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
26891
+ r = _k$split$map2[0],
26892
+ c = _k$split$map2[1];
26893
+ var newRow = r >= newRowNumber ? r + 1 : r;
26894
+ out["".concat(newRow, ".").concat(c)] = grid[_k];
26895
+ }
26896
+
26897
+ // Insert empty cells in the new row.
26898
+ var cols = grid.cols || 0;
26899
+ for (var _c = 1; _c <= cols; _c++) {
26900
+ out["".concat(newRowNumber, ".").concat(_c)] = {
26901
+ component: null,
26902
+ hide: false
26903
+ };
26904
+ }
26905
+
26906
+ // Shift rowHeights / rowModes keys to track original rows.
26907
+ var newRowHeights = _shiftKeyMap$1(grid.rowHeights, newRowNumber);
26908
+ if (newRowHeights) out.rowHeights = newRowHeights;else delete out.rowHeights;
26909
+ var newRowModes = _shiftKeyMap$1(grid.rowModes, newRowNumber);
26910
+ if (newRowModes) out.rowModes = newRowModes;else delete out.rowModes;
26911
+ return out;
26912
+ }
26913
+
26914
+ /**
26915
+ * deleteGridRowOp
26916
+ *
26917
+ * Pure helper for `DashboardModel.deleteGridRow`. Removes the row at
26918
+ * `rowNumber`, shifts everything below up by one, and **returns the
26919
+ * list of widget component ids that lived on the deleted row** so the
26920
+ * caller can remove them from the layout (or surface them to a
26921
+ * confirm-before-delete UX in the future).
26922
+ *
26923
+ * Refuses to delete the only remaining row (returns the input grid
26924
+ * unchanged + empty orphans list — same fail-safe the model had).
26925
+ */
26926
+
26927
+ var META_KEYS$2 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
26928
+ function _isCellKey$2(key) {
26929
+ return /^\d+\.\d+$/.test(key);
26930
+ }
26931
+ function _shiftKeyMapDown$1(map, deletedAt) {
26932
+ if (!map) return undefined;
26933
+ var shifted = {};
26934
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
26935
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
26936
+ key = _Object$entries$_i[0],
26937
+ value = _Object$entries$_i[1];
26938
+ var n = Number(key);
26939
+ if (n === deletedAt) continue;
26940
+ shifted[String(n > deletedAt ? n - 1 : n)] = value;
26941
+ }
26942
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
26943
+ }
26944
+ function deleteGridRowOp(grid, rowNumber) {
26945
+ if (!grid) return {
26946
+ grid: grid,
26947
+ orphanedComponents: []
26948
+ };
26949
+ if ((grid.rows || 0) <= 1) {
26950
+ // Can't delete the only row — fail-safe no-op.
26951
+ return {
26952
+ grid: grid,
26953
+ orphanedComponents: []
26954
+ };
26955
+ }
26956
+ var out = {};
26957
+ var orphanedComponents = [];
26958
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
26959
+ var k = _Object$keys[_i2];
26960
+ if (META_KEYS$2.has(k)) {
26961
+ out[k] = grid[k];
26962
+ continue;
26963
+ }
26964
+ if (!_isCellKey$2(k)) continue;
26965
+ var _k$split$map = k.split(".").map(Number),
26966
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
26967
+ r = _k$split$map2[0],
26968
+ c = _k$split$map2[1];
26969
+ if (r === rowNumber) {
26970
+ // Cell is in the row being deleted — collect its component (if
26971
+ // any) as an orphan, drop the cell entirely.
26972
+ var comp = grid[k] && grid[k].component;
26973
+ if (comp != null) orphanedComponents.push(comp);
26974
+ continue;
26975
+ }
26976
+ if (r > rowNumber) {
26977
+ // Cells below the deleted row shift up by one.
26978
+ out["".concat(r - 1, ".").concat(c)] = grid[k];
26979
+ } else {
26980
+ // Cells above the deleted row are unchanged.
26981
+ out[k] = grid[k];
26982
+ }
26983
+ }
26984
+ out.rows = (grid.rows || 0) - 1;
26985
+ out.cols = grid.cols;
26986
+ var newRowHeights = _shiftKeyMapDown$1(grid.rowHeights, rowNumber);
26987
+ if (newRowHeights) out.rowHeights = newRowHeights;else delete out.rowHeights;
26988
+ var newRowModes = _shiftKeyMapDown$1(grid.rowModes, rowNumber);
26989
+ if (newRowModes) out.rowModes = newRowModes;else delete out.rowModes;
26990
+ return {
26991
+ grid: out,
26992
+ orphanedComponents: orphanedComponents
26993
+ };
26994
+ }
26995
+
26996
+ /**
26997
+ * addGridColumnOp
26998
+ *
26999
+ * Pure helper for `DashboardModel.addGridColumn`. Symmetric to
27000
+ * `addGridRowOp` but for columns. Inserts an empty column after the
27001
+ * supplied column number (afterCol=0 inserts at the left edge).
27002
+ * colModes shifts to track its original columns. (Original code
27003
+ * doesn't track colWidths, so we don't either; can be added later.)
27004
+ */
27005
+
27006
+ var META_KEYS$1 = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
27007
+ function _isCellKey$1(key) {
27008
+ return /^\d+\.\d+$/.test(key);
27009
+ }
27010
+ function _shiftKeyMap(map, insertAt) {
27011
+ if (!map) return undefined;
27012
+ var shifted = {};
27013
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
27014
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
27015
+ key = _Object$entries$_i[0],
27016
+ value = _Object$entries$_i[1];
27017
+ var n = Number(key);
27018
+ shifted[String(n >= insertAt ? n + 1 : n)] = value;
27019
+ }
27020
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
27021
+ }
27022
+ function addGridColumnOp(grid) {
27023
+ var afterCol = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
27024
+ if (!grid) return grid;
27025
+ var newColNumber = afterCol + 1;
27026
+ var out = {};
27027
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
27028
+ var k = _Object$keys[_i2];
27029
+ if (META_KEYS$1.has(k)) out[k] = grid[k];
27030
+ }
27031
+ out.cols = (grid.cols || 0) + 1;
27032
+ out.rows = grid.rows;
27033
+ for (var _i3 = 0, _Object$keys2 = Object.keys(grid); _i3 < _Object$keys2.length; _i3++) {
27034
+ var _k = _Object$keys2[_i3];
27035
+ if (!_isCellKey$1(_k)) continue;
27036
+ var _k$split$map = _k.split(".").map(Number),
27037
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
27038
+ r = _k$split$map2[0],
27039
+ c = _k$split$map2[1];
27040
+ var newCol = c >= newColNumber ? c + 1 : c;
27041
+ out["".concat(r, ".").concat(newCol)] = grid[_k];
27042
+ }
27043
+ var rows = grid.rows || 0;
27044
+ for (var _r = 1; _r <= rows; _r++) {
27045
+ out["".concat(_r, ".").concat(newColNumber)] = {
27046
+ component: null,
27047
+ hide: false
27048
+ };
27049
+ }
27050
+ var newColModes = _shiftKeyMap(grid.colModes, newColNumber);
27051
+ if (newColModes) out.colModes = newColModes;else delete out.colModes;
27052
+ return out;
27053
+ }
27054
+
27055
+ /**
27056
+ * deleteGridColumnOp
27057
+ *
27058
+ * Pure helper for `DashboardModel.deleteGridColumn`. Symmetric to
27059
+ * `deleteGridRowOp` — removes the column at `colNumber`, shifts
27060
+ * everything to the right left by one, returns orphaned widget ids.
27061
+ *
27062
+ * Refuses to delete the only remaining column (returns input grid
27063
+ * unchanged + empty orphans list).
27064
+ */
27065
+
27066
+ var META_KEYS = new Set(["rows", "cols", "gap", "rowHeights", "rowModes", "colModes", "colWidths"]);
27067
+ function _isCellKey(key) {
27068
+ return /^\d+\.\d+$/.test(key);
27069
+ }
27070
+ function _shiftKeyMapDown(map, deletedAt) {
27071
+ if (!map) return undefined;
27072
+ var shifted = {};
27073
+ for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {
27074
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
27075
+ key = _Object$entries$_i[0],
27076
+ value = _Object$entries$_i[1];
27077
+ var n = Number(key);
27078
+ if (n === deletedAt) continue;
27079
+ shifted[String(n > deletedAt ? n - 1 : n)] = value;
27080
+ }
27081
+ return Object.keys(shifted).length > 0 ? shifted : undefined;
27082
+ }
27083
+ function deleteGridColumnOp(grid, colNumber) {
27084
+ if (!grid) return {
27085
+ grid: grid,
27086
+ orphanedComponents: []
27087
+ };
27088
+ if ((grid.cols || 0) <= 1) {
27089
+ return {
27090
+ grid: grid,
27091
+ orphanedComponents: []
27092
+ };
27093
+ }
27094
+ var out = {};
27095
+ var orphanedComponents = [];
27096
+ for (var _i2 = 0, _Object$keys = Object.keys(grid); _i2 < _Object$keys.length; _i2++) {
27097
+ var k = _Object$keys[_i2];
27098
+ if (META_KEYS.has(k)) {
27099
+ out[k] = grid[k];
27100
+ continue;
27101
+ }
27102
+ if (!_isCellKey(k)) continue;
27103
+ var _k$split$map = k.split(".").map(Number),
27104
+ _k$split$map2 = _slicedToArray(_k$split$map, 2),
27105
+ r = _k$split$map2[0],
27106
+ c = _k$split$map2[1];
27107
+ if (c === colNumber) {
27108
+ var comp = grid[k] && grid[k].component;
27109
+ if (comp != null) orphanedComponents.push(comp);
27110
+ continue;
27111
+ }
27112
+ if (c > colNumber) {
27113
+ out["".concat(r, ".").concat(c - 1)] = grid[k];
27114
+ } else {
27115
+ out[k] = grid[k];
27116
+ }
27117
+ }
27118
+ out.cols = (grid.cols || 0) - 1;
27119
+ out.rows = grid.rows;
27120
+ var newColModes = _shiftKeyMapDown(grid.colModes, colNumber);
27121
+ if (newColModes) out.colModes = newColModes;else delete out.colModes;
27122
+ return {
27123
+ grid: out,
27124
+ orphanedComponents: orphanedComponents
27125
+ };
27126
+ }
27127
+
26637
27128
  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; } } }; }
26638
27129
  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; } }
26639
27130
  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; }
@@ -27915,210 +28406,18 @@ var DashboardModel = /*#__PURE__*/function () {
27915
28406
  if (!gridContainer || !gridContainer.grid) {
27916
28407
  return null;
27917
28408
  }
27918
- var grid = gridContainer.grid;
27919
- var _cellNumber$split$map = cellNumber.split(".").map(Number),
27920
- _cellNumber$split$map2 = _slicedToArray(_cellNumber$split$map, 2),
27921
- row = _cellNumber$split$map2[0],
27922
- col = _cellNumber$split$map2[1];
27923
- var targetCell = grid[cellNumber];
27924
- if (direction === "horizontal") {
27925
- var _targetCell$span, _targetCell$span2;
27926
- var targetSpanCol = (targetCell === null || targetCell === void 0 || (_targetCell$span = targetCell.span) === null || _targetCell$span === void 0 ? void 0 : _targetCell$span.col) || 1;
27927
- var targetSpanRow = (targetCell === null || targetCell === void 0 || (_targetCell$span2 = targetCell.span) === null || _targetCell$span2 === void 0 ? void 0 : _targetCell$span2.row) || 1;
27928
- if (targetSpanCol % count === 0) {
27929
- // CASE A: Span is divisible — simple subdivision, no grid resize
27930
- var subSpan = targetSpanCol / count;
27931
- var component = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
27932
-
27933
- // Unhide cells covered by the old span
27934
- for (var sr = row; sr < row + targetSpanRow; sr++) {
27935
- for (var sc = col; sc < col + targetSpanCol; sc++) {
27936
- var k = "".concat(sr, ".").concat(sc);
27937
- if (grid[k]) grid[k].hide = false;
27938
- }
27939
- }
27940
- delete targetCell.span;
27941
-
27942
- // Create subdivided cells
27943
- for (var i = 0; i < count; i++) {
27944
- var key = "".concat(row, ".").concat(col + i * subSpan);
27945
- grid[key] = {
27946
- component: i === 0 ? component : null,
27947
- hide: false
27948
- };
27949
- if (subSpan > 1 || targetSpanRow > 1) {
27950
- grid[key].span = {};
27951
- if (subSpan > 1) grid[key].span.col = subSpan;
27952
- if (targetSpanRow > 1) grid[key].span.row = targetSpanRow;
27953
- }
27954
- }
27955
- } else {
27956
- var _targetCell$span3, _targetCell$span4;
27957
- // CASE B: Multiply grid resolution by count
27958
- var oldCols = grid.cols;
27959
-
27960
- // 1. Collect all visible cells
27961
- var visibleCells = [];
27962
- for (var r = 1; r <= grid.rows; r++) {
27963
- for (var c = 1; c <= oldCols; c++) {
27964
- var _key5 = "".concat(r, ".").concat(c);
27965
- var cell = grid[_key5];
27966
- if (cell && !cell.hide) {
27967
- var _cell$span, _cell$span2;
27968
- visibleCells.push({
27969
- row: r,
27970
- col: c,
27971
- data: _objectSpread$D({}, cell),
27972
- spanCol: ((_cell$span = cell.span) === null || _cell$span === void 0 ? void 0 : _cell$span.col) || 1,
27973
- spanRow: ((_cell$span2 = cell.span) === null || _cell$span2 === void 0 ? void 0 : _cell$span2.row) || 1
27974
- });
27975
- }
27976
- }
27977
- }
27978
-
27979
- // 2. Clear all cell keys
27980
- for (var _i4 = 0, _Object$keys3 = Object.keys(grid); _i4 < _Object$keys3.length; _i4++) {
27981
- var _key6 = _Object$keys3[_i4];
27982
- if (/^\d+\.\d+$/.test(_key6)) delete grid[_key6];
27983
- }
27984
-
27985
- // 3. Update grid dimensions
27986
- grid.cols = oldCols * count;
27987
-
27988
- // 4. Reposition all cells with scaled positions and spans
27989
- for (var _i5 = 0, _visibleCells = visibleCells; _i5 < _visibleCells.length; _i5++) {
27990
- var vc = _visibleCells[_i5];
27991
- var newCol = (vc.col - 1) * count + 1;
27992
- var _key7 = "".concat(vc.row, ".").concat(newCol);
27993
- grid[_key7] = _objectSpread$D(_objectSpread$D({}, vc.data), {}, {
27994
- hide: false,
27995
- span: {
27996
- row: vc.spanRow,
27997
- col: vc.spanCol * count
27998
- }
27999
- });
28000
- }
28001
-
28002
- // 5. Split the target cell into count sub-cells
28003
- var newTargetCol = (col - 1) * count + 1;
28004
- var newTargetSpan = ((targetCell === null || targetCell === void 0 || (_targetCell$span3 = targetCell.span) === null || _targetCell$span3 === void 0 ? void 0 : _targetCell$span3.col) || 1) * count;
28005
- var _subSpan = newTargetSpan / count;
28006
- var _component = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
28007
- var rowSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span4 = targetCell.span) === null || _targetCell$span4 === void 0 ? void 0 : _targetCell$span4.row) || 1;
28008
- for (var _i6 = 0; _i6 < count; _i6++) {
28009
- var _key8 = "".concat(row, ".").concat(newTargetCol + _i6 * _subSpan);
28010
- grid[_key8] = {
28011
- component: _i6 === 0 ? _component : null,
28012
- hide: false
28013
- };
28014
- if (_subSpan > 1 || rowSpan > 1) {
28015
- grid[_key8].span = {};
28016
- if (_subSpan > 1) grid[_key8].span.col = _subSpan;
28017
- if (rowSpan > 1) grid[_key8].span.row = rowSpan;
28018
- }
28019
- }
28020
- }
28021
- } else if (direction === "vertical") {
28022
- var _targetCell$span5, _targetCell$span6;
28023
- var _targetSpanRow = (targetCell === null || targetCell === void 0 || (_targetCell$span5 = targetCell.span) === null || _targetCell$span5 === void 0 ? void 0 : _targetCell$span5.row) || 1;
28024
- var _targetSpanCol = (targetCell === null || targetCell === void 0 || (_targetCell$span6 = targetCell.span) === null || _targetCell$span6 === void 0 ? void 0 : _targetCell$span6.col) || 1;
28025
- if (_targetSpanRow % count === 0) {
28026
- // CASE A: Span is divisible — simple subdivision, no grid resize
28027
- var _subSpan2 = _targetSpanRow / count;
28028
- var _component2 = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
28029
-
28030
- // Unhide cells covered by the old span
28031
- for (var _sr2 = row; _sr2 < row + _targetSpanRow; _sr2++) {
28032
- for (var _sc2 = col; _sc2 < col + _targetSpanCol; _sc2++) {
28033
- var _k = "".concat(_sr2, ".").concat(_sc2);
28034
- if (grid[_k]) grid[_k].hide = false;
28035
- }
28036
- }
28037
- delete targetCell.span;
28038
-
28039
- // Create subdivided cells
28040
- for (var _i7 = 0; _i7 < count; _i7++) {
28041
- var _key9 = "".concat(row + _i7 * _subSpan2, ".").concat(col);
28042
- grid[_key9] = {
28043
- component: _i7 === 0 ? _component2 : null,
28044
- hide: false
28045
- };
28046
- if (_subSpan2 > 1 || _targetSpanCol > 1) {
28047
- grid[_key9].span = {};
28048
- if (_subSpan2 > 1) grid[_key9].span.row = _subSpan2;
28049
- if (_targetSpanCol > 1) grid[_key9].span.col = _targetSpanCol;
28050
- }
28051
- }
28052
- } else {
28053
- var _targetCell$span7, _targetCell$span8;
28054
- // CASE B: Multiply grid resolution by count
28055
- var oldRows = grid.rows;
28056
-
28057
- // 1. Collect all visible cells
28058
- var _visibleCells2 = [];
28059
- for (var _r1 = 1; _r1 <= oldRows; _r1++) {
28060
- for (var _c10 = 1; _c10 <= grid.cols; _c10++) {
28061
- var _key0 = "".concat(_r1, ".").concat(_c10);
28062
- var _cell6 = grid[_key0];
28063
- if (_cell6 && !_cell6.hide) {
28064
- var _cell6$span, _cell6$span2;
28065
- _visibleCells2.push({
28066
- row: _r1,
28067
- col: _c10,
28068
- data: _objectSpread$D({}, _cell6),
28069
- spanRow: ((_cell6$span = _cell6.span) === null || _cell6$span === void 0 ? void 0 : _cell6$span.row) || 1,
28070
- spanCol: ((_cell6$span2 = _cell6.span) === null || _cell6$span2 === void 0 ? void 0 : _cell6$span2.col) || 1
28071
- });
28072
- }
28073
- }
28074
- }
28075
-
28076
- // 2. Clear all cell keys
28077
- for (var _i8 = 0, _Object$keys4 = Object.keys(grid); _i8 < _Object$keys4.length; _i8++) {
28078
- var _key1 = _Object$keys4[_i8];
28079
- if (/^\d+\.\d+$/.test(_key1)) delete grid[_key1];
28080
- }
28081
-
28082
- // 3. Update grid dimensions
28083
- grid.rows = oldRows * count;
28084
-
28085
- // 4. Reposition all cells with scaled positions and spans
28086
- for (var _i9 = 0, _visibleCells3 = _visibleCells2; _i9 < _visibleCells3.length; _i9++) {
28087
- var _vc = _visibleCells3[_i9];
28088
- var newRow = (_vc.row - 1) * count + 1;
28089
- var _key10 = "".concat(newRow, ".").concat(_vc.col);
28090
- grid[_key10] = _objectSpread$D(_objectSpread$D({}, _vc.data), {}, {
28091
- hide: false,
28092
- span: {
28093
- row: _vc.spanRow * count,
28094
- col: _vc.spanCol
28095
- }
28096
- });
28097
- }
28098
-
28099
- // 5. Split the target cell into count sub-cells
28100
- var newTargetRow = (row - 1) * count + 1;
28101
- var _newTargetSpan = ((targetCell === null || targetCell === void 0 || (_targetCell$span7 = targetCell.span) === null || _targetCell$span7 === void 0 ? void 0 : _targetCell$span7.row) || 1) * count;
28102
- var _subSpan3 = _newTargetSpan / count;
28103
- var _component3 = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
28104
- var colSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span8 = targetCell.span) === null || _targetCell$span8 === void 0 ? void 0 : _targetCell$span8.col) || 1;
28105
- for (var _i0 = 0; _i0 < count; _i0++) {
28106
- var _key11 = "".concat(newTargetRow + _i0 * _subSpan3, ".").concat(col);
28107
- grid[_key11] = {
28108
- component: _i0 === 0 ? _component3 : null,
28109
- hide: false
28110
- };
28111
- if (_subSpan3 > 1 || colSpan > 1) {
28112
- grid[_key11].span = {};
28113
- if (_subSpan3 > 1) grid[_key11].span.row = _subSpan3;
28114
- if (colSpan > 1) grid[_key11].span.col = colSpan;
28115
- }
28116
- }
28117
- }
28409
+ // Slice 11: pure helper handles both CASE A (divisible span)
28410
+ // and CASE B (resolution multiply). Falls through to the legacy
28411
+ // inline path below if the helper somehow returns the same
28412
+ // grid (defensive — shouldn't happen for a valid cellNumber +
28413
+ // direction).
28414
+ var newGrid = splitGridCellOp(gridContainer.grid, cellNumber, direction, count);
28415
+ if (newGrid !== gridContainer.grid) {
28416
+ gridContainer.grid = newGrid;
28417
+ this._normalizeGrid(gridContainer.grid);
28418
+ this.updateLayoutItem(gridContainer);
28118
28419
  }
28119
- this._normalizeGrid(grid);
28120
- this.updateLayoutItem(gridContainer);
28121
- return grid;
28420
+ return gridContainer.grid;
28122
28421
  } catch (e) {
28123
28422
  return null;
28124
28423
  }
@@ -28267,55 +28566,8 @@ var DashboardModel = /*#__PURE__*/function () {
28267
28566
  if (!gridContainer || !gridContainer.grid) {
28268
28567
  return null;
28269
28568
  }
28270
- var newRowNumber = afterRow + 1;
28271
- gridContainer.grid.rows += 1;
28272
-
28273
- // Shift existing rows down
28274
- for (var r = gridContainer.grid.rows; r > newRowNumber; r--) {
28275
- for (var c = 1; c <= gridContainer.grid.cols; c++) {
28276
- var oldCell = "".concat(r - 1, ".").concat(c);
28277
- var newCell = "".concat(r, ".").concat(c);
28278
- if (oldCell in gridContainer.grid) {
28279
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28280
- delete gridContainer.grid[oldCell];
28281
- }
28282
- }
28283
- }
28284
-
28285
- // Create new empty cells for the new row
28286
- for (var _c11 = 1; _c11 <= gridContainer.grid.cols; _c11++) {
28287
- var cellNumber = "".concat(newRowNumber, ".").concat(_c11);
28288
- gridContainer.grid[cellNumber] = {
28289
- component: null,
28290
- hide: false
28291
- };
28292
- }
28293
-
28294
- // Shift rowHeights keys down (rows after insertion point move +1)
28295
- if (gridContainer.grid.rowHeights) {
28296
- var shifted = {};
28297
- for (var _i1 = 0, _Object$entries2 = Object.entries(gridContainer.grid.rowHeights); _i1 < _Object$entries2.length; _i1++) {
28298
- var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i1], 2),
28299
- key = _Object$entries2$_i[0],
28300
- mult = _Object$entries2$_i[1];
28301
- var rowNum = Number(key);
28302
- shifted[String(rowNum >= newRowNumber ? rowNum + 1 : rowNum)] = mult;
28303
- }
28304
- gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
28305
- }
28306
-
28307
- // Shift rowModes keys down (rows after insertion point move +1)
28308
- if (gridContainer.grid.rowModes) {
28309
- var _shifted = {};
28310
- for (var _i10 = 0, _Object$entries3 = Object.entries(gridContainer.grid.rowModes); _i10 < _Object$entries3.length; _i10++) {
28311
- var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i10], 2),
28312
- _key12 = _Object$entries3$_i[0],
28313
- mode = _Object$entries3$_i[1];
28314
- var _rowNum = Number(_key12);
28315
- _shifted[String(_rowNum >= newRowNumber ? _rowNum + 1 : _rowNum)] = mode;
28316
- }
28317
- gridContainer.grid.rowModes = Object.keys(_shifted).length > 0 ? _shifted : undefined;
28318
- }
28569
+ // Slice 11: pure helper handles the row-insertion + shifting.
28570
+ gridContainer.grid = addGridRowOp(gridContainer.grid, afterRow);
28319
28571
  this._normalizeGrid(gridContainer.grid);
28320
28572
  this.updateLayoutItem(gridContainer);
28321
28573
  return gridContainer.grid;
@@ -28341,55 +28593,23 @@ var DashboardModel = /*#__PURE__*/function () {
28341
28593
  if (gridContainer.grid.rows <= 1) {
28342
28594
  return null;
28343
28595
  }
28344
-
28345
- // Remove components in the deleted row
28346
- for (var c = 1; c <= gridContainer.grid.cols; c++) {
28347
- var cellNumber = "".concat(rowNumber, ".").concat(c);
28348
- if (gridContainer.grid[cellNumber] && gridContainer.grid[cellNumber].component) {
28349
- this.removeItemFromLayout(gridContainer.grid[cellNumber].component);
28350
- }
28351
- delete gridContainer.grid[cellNumber];
28352
- }
28353
-
28354
- // Shift rows up
28355
- for (var r = rowNumber + 1; r <= gridContainer.grid.rows; r++) {
28356
- for (var _c12 = 1; _c12 <= gridContainer.grid.cols; _c12++) {
28357
- var oldCell = "".concat(r, ".").concat(_c12);
28358
- var newCell = "".concat(r - 1, ".").concat(_c12);
28359
- if (oldCell in gridContainer.grid) {
28360
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28361
- delete gridContainer.grid[oldCell];
28362
- }
28596
+ // Slice 11: pure helper returns the updated grid + the list of
28597
+ // widget components that lived on the deleted row. We remove
28598
+ // those from the layout here to preserve the original
28599
+ // destructive-delete behavior.
28600
+ var result = deleteGridRowOp(gridContainer.grid, rowNumber);
28601
+ gridContainer.grid = result.grid;
28602
+ var _iterator2 = _createForOfIteratorHelper$m(result.orphanedComponents),
28603
+ _step2;
28604
+ try {
28605
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
28606
+ var componentId = _step2.value;
28607
+ this.removeItemFromLayout(componentId);
28363
28608
  }
28364
- }
28365
- gridContainer.grid.rows -= 1;
28366
-
28367
- // Shift rowHeights keys up and remove the deleted row's entry
28368
- if (gridContainer.grid.rowHeights) {
28369
- var shifted = {};
28370
- for (var _i11 = 0, _Object$entries4 = Object.entries(gridContainer.grid.rowHeights); _i11 < _Object$entries4.length; _i11++) {
28371
- var _Object$entries4$_i = _slicedToArray(_Object$entries4[_i11], 2),
28372
- key = _Object$entries4$_i[0],
28373
- mult = _Object$entries4$_i[1];
28374
- var rowNum = Number(key);
28375
- if (rowNum === rowNumber) continue;
28376
- shifted[String(rowNum > rowNumber ? rowNum - 1 : rowNum)] = mult;
28377
- }
28378
- gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
28379
- }
28380
-
28381
- // Shift rowModes keys up and remove the deleted row's entry
28382
- if (gridContainer.grid.rowModes) {
28383
- var _shifted2 = {};
28384
- for (var _i12 = 0, _Object$entries5 = Object.entries(gridContainer.grid.rowModes); _i12 < _Object$entries5.length; _i12++) {
28385
- var _Object$entries5$_i = _slicedToArray(_Object$entries5[_i12], 2),
28386
- _key13 = _Object$entries5$_i[0],
28387
- mode = _Object$entries5$_i[1];
28388
- var _rowNum2 = Number(_key13);
28389
- if (_rowNum2 === rowNumber) continue;
28390
- _shifted2[String(_rowNum2 > rowNumber ? _rowNum2 - 1 : _rowNum2)] = mode;
28391
- }
28392
- gridContainer.grid.rowModes = Object.keys(_shifted2).length > 0 ? _shifted2 : undefined;
28609
+ } catch (err) {
28610
+ _iterator2.e(err);
28611
+ } finally {
28612
+ _iterator2.f();
28393
28613
  }
28394
28614
  this._normalizeGrid(gridContainer.grid);
28395
28615
  this.updateLayoutItem(gridContainer);
@@ -28448,42 +28668,8 @@ var DashboardModel = /*#__PURE__*/function () {
28448
28668
  if (!gridContainer || !gridContainer.grid) {
28449
28669
  return null;
28450
28670
  }
28451
- var newColNumber = afterCol + 1;
28452
- gridContainer.grid.cols += 1;
28453
-
28454
- // Shift existing columns right
28455
- for (var r = 1; r <= gridContainer.grid.rows; r++) {
28456
- for (var c = gridContainer.grid.cols; c > newColNumber; c--) {
28457
- var oldCell = "".concat(r, ".").concat(c - 1);
28458
- var newCell = "".concat(r, ".").concat(c);
28459
- if (oldCell in gridContainer.grid) {
28460
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28461
- delete gridContainer.grid[oldCell];
28462
- }
28463
- }
28464
- }
28465
-
28466
- // Create new empty cells for the new column
28467
- for (var _r10 = 1; _r10 <= gridContainer.grid.rows; _r10++) {
28468
- var cellNumber = "".concat(_r10, ".").concat(newColNumber);
28469
- gridContainer.grid[cellNumber] = {
28470
- component: null,
28471
- hide: false
28472
- };
28473
- }
28474
-
28475
- // Shift colModes keys right (columns after insertion point move +1)
28476
- if (gridContainer.grid.colModes) {
28477
- var shifted = {};
28478
- for (var _i13 = 0, _Object$entries6 = Object.entries(gridContainer.grid.colModes); _i13 < _Object$entries6.length; _i13++) {
28479
- var _Object$entries6$_i = _slicedToArray(_Object$entries6[_i13], 2),
28480
- key = _Object$entries6$_i[0],
28481
- mode = _Object$entries6$_i[1];
28482
- var colNum = Number(key);
28483
- shifted[String(colNum >= newColNumber ? colNum + 1 : colNum)] = mode;
28484
- }
28485
- gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
28486
- }
28671
+ // Slice 11: pure helper.
28672
+ gridContainer.grid = addGridColumnOp(gridContainer.grid, afterCol);
28487
28673
  this._normalizeGrid(gridContainer.grid);
28488
28674
  this.updateLayoutItem(gridContainer);
28489
28675
  return gridContainer.grid;
@@ -28509,41 +28695,20 @@ var DashboardModel = /*#__PURE__*/function () {
28509
28695
  if (gridContainer.grid.cols <= 1) {
28510
28696
  return null;
28511
28697
  }
28512
-
28513
- // Remove components in the deleted column
28514
- for (var r = 1; r <= gridContainer.grid.rows; r++) {
28515
- var cellNumber = "".concat(r, ".").concat(colNumber);
28516
- if (gridContainer.grid[cellNumber] && gridContainer.grid[cellNumber].component) {
28517
- this.removeItemFromLayout(gridContainer.grid[cellNumber].component);
28518
- }
28519
- delete gridContainer.grid[cellNumber];
28520
- }
28521
-
28522
- // Shift columns left
28523
- for (var _r11 = 1; _r11 <= gridContainer.grid.rows; _r11++) {
28524
- for (var c = colNumber + 1; c <= gridContainer.grid.cols; c++) {
28525
- var oldCell = "".concat(_r11, ".").concat(c);
28526
- var newCell = "".concat(_r11, ".").concat(c - 1);
28527
- if (oldCell in gridContainer.grid) {
28528
- gridContainer.grid[newCell] = gridContainer.grid[oldCell];
28529
- delete gridContainer.grid[oldCell];
28530
- }
28531
- }
28532
- }
28533
- gridContainer.grid.cols -= 1;
28534
-
28535
- // Shift colModes keys left and remove the deleted column's entry
28536
- if (gridContainer.grid.colModes) {
28537
- var shifted = {};
28538
- for (var _i14 = 0, _Object$entries7 = Object.entries(gridContainer.grid.colModes); _i14 < _Object$entries7.length; _i14++) {
28539
- var _Object$entries7$_i = _slicedToArray(_Object$entries7[_i14], 2),
28540
- key = _Object$entries7$_i[0],
28541
- mode = _Object$entries7$_i[1];
28542
- var colNum = Number(key);
28543
- if (colNum === colNumber) continue;
28544
- shifted[String(colNum > colNumber ? colNum - 1 : colNum)] = mode;
28698
+ // Slice 11: pure helper.
28699
+ var result = deleteGridColumnOp(gridContainer.grid, colNumber);
28700
+ gridContainer.grid = result.grid;
28701
+ var _iterator3 = _createForOfIteratorHelper$m(result.orphanedComponents),
28702
+ _step3;
28703
+ try {
28704
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
28705
+ var componentId = _step3.value;
28706
+ this.removeItemFromLayout(componentId);
28545
28707
  }
28546
- gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
28708
+ } catch (err) {
28709
+ _iterator3.e(err);
28710
+ } finally {
28711
+ _iterator3.f();
28547
28712
  }
28548
28713
  this._normalizeGrid(gridContainer.grid);
28549
28714
  this.updateLayoutItem(gridContainer);
@@ -28628,14 +28793,14 @@ var DashboardModel = /*#__PURE__*/function () {
28628
28793
  try {
28629
28794
  // Collect all item IDs actively referenced by grid cells
28630
28795
  var activeItemIds = new Set();
28631
- var _iterator2 = _createForOfIteratorHelper$m(this.layout),
28632
- _step2;
28796
+ var _iterator4 = _createForOfIteratorHelper$m(this.layout),
28797
+ _step4;
28633
28798
  try {
28634
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
28635
- var item = _step2.value;
28799
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
28800
+ var item = _step4.value;
28636
28801
  if (item.grid && _typeof(item.grid) === "object") {
28637
- for (var _i15 = 0, _Object$keys5 = Object.keys(item.grid); _i15 < _Object$keys5.length; _i15++) {
28638
- var key = _Object$keys5[_i15];
28802
+ for (var _i4 = 0, _Object$keys3 = Object.keys(item.grid); _i4 < _Object$keys3.length; _i4++) {
28803
+ var key = _Object$keys3[_i4];
28639
28804
  var cell = item.grid[key];
28640
28805
  if (cell && _typeof(cell) === "object" && cell.component) {
28641
28806
  activeItemIds.add(cell.component);
@@ -28648,9 +28813,9 @@ var DashboardModel = /*#__PURE__*/function () {
28648
28813
 
28649
28814
  // If no grid containers exist, nothing to clean
28650
28815
  } catch (err) {
28651
- _iterator2.e(err);
28816
+ _iterator4.e(err);
28652
28817
  } finally {
28653
- _iterator2.f();
28818
+ _iterator4.f();
28654
28819
  }
28655
28820
  if (activeItemIds.size === 0) return;
28656
28821
 
@@ -28668,17 +28833,17 @@ var DashboardModel = /*#__PURE__*/function () {
28668
28833
  });
28669
28834
 
28670
28835
  // Clean listener references on remaining items for each removed orphan
28671
- var _iterator3 = _createForOfIteratorHelper$m(orphanedIds),
28672
- _step3;
28836
+ var _iterator5 = _createForOfIteratorHelper$m(orphanedIds),
28837
+ _step5;
28673
28838
  try {
28674
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
28675
- var id = _step3.value;
28839
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
28840
+ var id = _step5.value;
28676
28841
  this._cleanupListenerReferencesForId(id);
28677
28842
  }
28678
28843
  } catch (err) {
28679
- _iterator3.e(err);
28844
+ _iterator5.e(err);
28680
28845
  } finally {
28681
- _iterator3.f();
28846
+ _iterator5.f();
28682
28847
  }
28683
28848
  } catch (e) {
28684
28849
  }