@trops/dash-core 0.1.21 → 0.1.23

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
@@ -10573,6 +10573,18 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
10573
10573
  } catch (e) {
10574
10574
  }
10575
10575
  }
10576
+ function handleChangeRowMode(gridContainerId, rowNumber, mode) {
10577
+ try {
10578
+ var dashboard = new DashboardModel(currentWorkspace);
10579
+ var result = dashboard.changeRowMode(gridContainerId, rowNumber, mode);
10580
+ if (result) {
10581
+ var newWorkspace = dashboard.workspace();
10582
+ setCurrentWorkspace(newWorkspace);
10583
+ } else {
10584
+ }
10585
+ } catch (e) {
10586
+ }
10587
+ }
10576
10588
 
10577
10589
  /**
10578
10590
  * handle the click of a cell in a grid that does not contain a widget yet
@@ -10658,6 +10670,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
10658
10670
  onAddGridColumn: handleAddGridColumn,
10659
10671
  onDeleteGridColumn: handleDeleteGridColumn,
10660
10672
  onChangeRowHeight: handleChangeRowHeight,
10673
+ onChangeRowMode: handleChangeRowMode,
10661
10674
  onMoveWidgetToCell: handleMoveWidgetToCell
10662
10675
  }, "layout-drag-".concat(dashboardId)), preview === false && editMode === "all" && /*#__PURE__*/jsx(LayoutDragBuilderEdit, {
10663
10676
  dashboardId: dashboardId,
@@ -10702,6 +10715,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
10702
10715
  onAddGridColumn: handleAddGridColumn,
10703
10716
  onDeleteGridColumn: handleDeleteGridColumn,
10704
10717
  onChangeRowHeight: handleChangeRowHeight,
10718
+ onChangeRowMode: handleChangeRowMode,
10705
10719
  onMoveWidgetToCell: handleMoveWidgetToCell,
10706
10720
  onDropWidgetFromSidebar: handleDropWidgetFromSidebar
10707
10721
  }, "layout-drag-edit-".concat(dashboardId))]
@@ -10791,7 +10805,9 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
10791
10805
  _ref$onDeleteGridColu = _ref.onDeleteGridColumn,
10792
10806
  onDeleteGridColumn = _ref$onDeleteGridColu === void 0 ? null : _ref$onDeleteGridColu,
10793
10807
  _ref$onChangeRowHeigh = _ref.onChangeRowHeight,
10794
- onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh;
10808
+ onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
10809
+ _ref$onChangeRowMode = _ref.onChangeRowMode,
10810
+ onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode;
10795
10811
  return isDraggable === true ? /*#__PURE__*/jsx(DndProvider, {
10796
10812
  backend: HTML5Backend,
10797
10813
  children: _renderLayout({
@@ -10821,7 +10837,8 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
10821
10837
  onDeleteGridRow: onDeleteGridRow,
10822
10838
  onAddGridColumn: onAddGridColumn,
10823
10839
  onDeleteGridColumn: onDeleteGridColumn,
10824
- onChangeRowHeight: onChangeRowHeight
10840
+ onChangeRowHeight: onChangeRowHeight,
10841
+ onChangeRowMode: onChangeRowMode
10825
10842
  })
10826
10843
  }, "dnd-provider") : _renderLayout({
10827
10844
  dashboardId: dashboardId,
@@ -10850,7 +10867,8 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
10850
10867
  onDeleteGridRow: onDeleteGridRow,
10851
10868
  onAddGridColumn: onAddGridColumn,
10852
10869
  onDeleteGridColumn: onDeleteGridColumn,
10853
- onChangeRowHeight: onChangeRowHeight
10870
+ onChangeRowHeight: onChangeRowHeight,
10871
+ onChangeRowMode: onChangeRowMode
10854
10872
  });
10855
10873
  };
10856
10874
 
@@ -10898,6 +10916,8 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
10898
10916
  onDeleteGridColumn = _ref$onDeleteGridColu === void 0 ? null : _ref$onDeleteGridColu,
10899
10917
  _ref$onChangeRowHeigh = _ref.onChangeRowHeight,
10900
10918
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
10919
+ _ref$onChangeRowMode = _ref.onChangeRowMode,
10920
+ onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
10901
10921
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
10902
10922
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
10903
10923
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -10936,6 +10956,7 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
10936
10956
  onAddGridColumn: onAddGridColumn,
10937
10957
  onDeleteGridColumn: onDeleteGridColumn,
10938
10958
  onChangeRowHeight: onChangeRowHeight,
10959
+ onChangeRowMode: onChangeRowMode,
10939
10960
  onMoveWidgetToCell: onMoveWidgetToCell,
10940
10961
  onDropWidgetFromSidebar: onDropWidgetFromSidebar
10941
10962
  });
@@ -13166,6 +13187,8 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13166
13187
  onDeleteGridColumn = _ref3$onDeleteGridCol === void 0 ? null : _ref3$onDeleteGridCol,
13167
13188
  _ref3$onChangeRowHeig = _ref3.onChangeRowHeight,
13168
13189
  onChangeRowHeight = _ref3$onChangeRowHeig === void 0 ? null : _ref3$onChangeRowHeig,
13190
+ _ref3$onChangeRowMode = _ref3.onChangeRowMode,
13191
+ onChangeRowMode = _ref3$onChangeRowMode === void 0 ? null : _ref3$onChangeRowMode,
13169
13192
  _ref3$onMoveWidgetToC = _ref3.onMoveWidgetToCell,
13170
13193
  onMoveWidgetToCell = _ref3$onMoveWidgetToC === void 0 ? null : _ref3$onMoveWidgetToC,
13171
13194
  _ref3$onDropWidgetFro = _ref3.onDropWidgetFromSidebar,
@@ -13196,18 +13219,39 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13196
13219
  var GRID_PAD = 16; // px — matches p-4 (1rem)
13197
13220
  var GRID_GAP = 20; // px — matches gap-5 (1.25rem)
13198
13221
 
13199
- // Compute fixed row heights for scrollable mode
13222
+ // Compute row template tracks respecting rowModes and rowHeights
13200
13223
  function getRowTemplate(grid) {
13201
13224
  var unit = grid.rowUnit || 300;
13202
13225
  var heights = grid.rowHeights || {};
13226
+ var modes = grid.rowModes || {};
13203
13227
  var tracks = [];
13204
13228
  for (var r = 1; r <= grid.rows; r++) {
13205
- var mult = heights[String(r)] || 1;
13206
- tracks.push("".concat(unit * mult, "px"));
13229
+ var mode = modes[String(r)] || "fixed";
13230
+ switch (mode) {
13231
+ case "shrink":
13232
+ tracks.push("auto");
13233
+ break;
13234
+ case "grow":
13235
+ tracks.push("minmax(0, 1fr)");
13236
+ break;
13237
+ default:
13238
+ {
13239
+ var mult = heights[String(r)] || 1;
13240
+ tracks.push("".concat(unit * mult, "px"));
13241
+ break;
13242
+ }
13243
+ }
13207
13244
  }
13208
13245
  return tracks.join(" ");
13209
13246
  }
13210
13247
 
13248
+ // Check if any row has an explicit mode set
13249
+ function hasExplicitRowModes() {
13250
+ if (!hasGrid) return false;
13251
+ var modes = item.grid.rowModes;
13252
+ return modes && Object.keys(modes).length > 0;
13253
+ }
13254
+
13211
13255
  // Get the current multiplier for a row
13212
13256
  function getRowMultiplier(row) {
13213
13257
  var _item$grid$rowHeights;
@@ -13215,15 +13259,54 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13215
13259
  return ((_item$grid$rowHeights = item.grid.rowHeights) === null || _item$grid$rowHeights === void 0 ? void 0 : _item$grid$rowHeights[String(row)]) || 1;
13216
13260
  }
13217
13261
 
13218
- // Cycle multiplier: 1 2 3 → 1
13219
- function handleCycleRowHeight(row) {
13220
- var current = getRowMultiplier(row);
13221
- var next = current >= 3 ? 1 : current + 1;
13222
- if (onChangeRowHeight) {
13223
- onChangeRowHeight(id, row, next);
13262
+ // Get the current mode for a row
13263
+ function getRowMode(row) {
13264
+ var _item$grid$rowModes;
13265
+ if (!hasGrid) return "fixed";
13266
+ return ((_item$grid$rowModes = item.grid.rowModes) === null || _item$grid$rowModes === void 0 ? void 0 : _item$grid$rowModes[String(row)]) || "fixed";
13267
+ }
13268
+
13269
+ // Unified cycle: shrink → grow → fixed 1x → fixed 2x → fixed 3x → shrink
13270
+ function handleCycleRowSizing(row) {
13271
+ var mode = getRowMode(row);
13272
+ var mult = getRowMultiplier(row);
13273
+ if (mode === "shrink") {
13274
+ // shrink → grow
13275
+ if (onChangeRowMode) onChangeRowMode(id, row, "grow");
13276
+ } else if (mode === "grow") {
13277
+ // grow → fixed 1x
13278
+ if (onChangeRowMode) onChangeRowMode(id, row, "fixed");
13279
+ } else {
13280
+ // fixed: cycle 1x → 2x → 3x → shrink
13281
+ if (mult >= 3) {
13282
+ if (onChangeRowMode) onChangeRowMode(id, row, "shrink");
13283
+ } else {
13284
+ if (onChangeRowHeight) onChangeRowHeight(id, row, mult + 1);
13285
+ }
13224
13286
  }
13225
13287
  }
13226
13288
 
13289
+ // Get display label and color for current row sizing
13290
+ function getRowSizingDisplay(row) {
13291
+ var mode = getRowMode(row);
13292
+ if (mode === "shrink") return {
13293
+ label: "S",
13294
+ color: "text-amber-400",
13295
+ hoverBg: "hover:bg-amber-400/10"
13296
+ };
13297
+ if (mode === "grow") return {
13298
+ label: "G",
13299
+ color: "text-green-400",
13300
+ hoverBg: "hover:bg-green-400/10"
13301
+ };
13302
+ var mult = getRowMultiplier(row);
13303
+ return {
13304
+ label: "".concat(mult, "x"),
13305
+ color: mult > 1 ? "text-blue-400" : "text-gray-500",
13306
+ hoverBg: mult > 1 ? "hover:bg-blue-400/10" : "hover:bg-gray-400/10"
13307
+ };
13308
+ }
13309
+
13227
13310
  // Modal state for grid operations
13228
13311
  var _useState = useState(false),
13229
13312
  _useState2 = _slicedToArray(_useState, 2),
@@ -13524,14 +13607,23 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13524
13607
  }), /*#__PURE__*/jsxs("span", {
13525
13608
  className: "text-[11px] text-gray-400 group-hover:text-gray-200 select-none font-mono font-medium",
13526
13609
  children: ["R", row]
13527
- }), scrollable && /*#__PURE__*/jsxs("button", {
13528
- className: "w-5 h-5 flex items-center justify-center rounded text-[10px] text-gray-500 opacity-40 hover:opacity-100 hover:text-blue-400 hover:bg-blue-400/10 transition-all font-mono font-bold select-none",
13529
- onClick: function onClick() {
13530
- return handleCycleRowHeight(row);
13531
- },
13532
- title: "Row height: ".concat(getRowMultiplier(row), "x (click to cycle)"),
13533
- children: [getRowMultiplier(row), "x"]
13534
- }), /*#__PURE__*/jsx("button", {
13610
+ }), function () {
13611
+ var _getRowSizingDisplay = getRowSizingDisplay(row),
13612
+ label = _getRowSizingDisplay.label,
13613
+ color = _getRowSizingDisplay.color,
13614
+ hoverBg = _getRowSizingDisplay.hoverBg;
13615
+ var mode = getRowMode(row);
13616
+ var mult = getRowMultiplier(row);
13617
+ var titleParts = mode === "shrink" ? "Shrink (auto)" : mode === "grow" ? "Grow (1fr)" : "Fixed ".concat(mult, "x");
13618
+ return /*#__PURE__*/jsx("button", {
13619
+ className: "w-5 h-5 flex items-center justify-center rounded text-[10px] ".concat(color, " opacity-40 hover:opacity-100 ").concat(hoverBg, " transition-all font-mono font-bold select-none"),
13620
+ onClick: function onClick() {
13621
+ return handleCycleRowSizing(row);
13622
+ },
13623
+ title: "Row sizing: ".concat(titleParts, " (click to cycle)"),
13624
+ children: label
13625
+ });
13626
+ }(), /*#__PURE__*/jsx("button", {
13535
13627
  className: "w-5 h-5 flex items-center justify-center rounded text-[10px] text-gray-600 opacity-40 hover:opacity-100 hover:text-green-400 hover:bg-green-400/10 transition-all",
13536
13628
  onClick: function onClick() {
13537
13629
  return handleAddRow(row);
@@ -13568,7 +13660,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13568
13660
  }), /*#__PURE__*/jsx("div", {
13569
13661
  className: "grid ".concat(scrollable ? "" : "flex-1"),
13570
13662
  style: {
13571
- gridTemplateRows: scrollable ? getRowTemplate(item.grid) : "repeat(".concat(rows, ", minmax(0, 1fr))"),
13663
+ gridTemplateRows: scrollable ? getRowTemplate(item.grid) : hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(rows, ", minmax(0, 1fr))"),
13572
13664
  gap: GRID_GAP
13573
13665
  },
13574
13666
  children: rowItems
@@ -13702,8 +13794,11 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13702
13794
  }
13703
13795
  }
13704
13796
  var isCellSelected = selectedCellsForMerge.includes(cellNumber);
13797
+ var rowModes = item.grid.rowModes || {};
13798
+ var rowMode = rowModes[String(row)] || "fixed";
13799
+ var heightClass = rowMode === "shrink" ? "" : "h-full";
13705
13800
  cells.push(/*#__PURE__*/jsx("div", {
13706
- className: "flex w-full h-full min-h-0 min-w-0 overflow-hidden relative ".concat(isCellSelected ? "ring-2 ring-blue-500 ring-inset rounded" : ""),
13801
+ className: "flex w-full ".concat(heightClass, " min-h-0 min-w-0 overflow-hidden relative ").concat(isCellSelected ? "ring-2 ring-blue-500 ring-inset rounded" : ""),
13707
13802
  "data-cell": cellNumber,
13708
13803
  style: spanStyle,
13709
13804
  children: preview ? cellDef.component ? renderCellComponent(cellDef.component) : renderPreviewEmptyCell(cellNumber) : renderEditCell(cellNumber, cellDef, selectableSet)
@@ -13963,7 +14058,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13963
14058
  id: "grid-container-".concat(id),
13964
14059
  className: "grid flex-1 p-4 gap-5",
13965
14060
  style: {
13966
- gridTemplateRows: "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14061
+ gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
13967
14062
  gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
13968
14063
  overflow: "hidden"
13969
14064
  },
@@ -14074,7 +14169,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
14074
14169
  id: "grid-container-".concat(id),
14075
14170
  className: "absolute inset-0 grid p-3 ".concat(item.grid.gap || "gap-2"),
14076
14171
  style: {
14077
- gridTemplateRows: "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14172
+ gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14078
14173
  gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
14079
14174
  overflow: "hidden"
14080
14175
  },
@@ -14167,6 +14262,8 @@ var _renderLayout = function renderLayout(_ref) {
14167
14262
  onDeleteGridColumn = _ref$onDeleteGridColu === void 0 ? null : _ref$onDeleteGridColu,
14168
14263
  _ref$onChangeRowHeigh = _ref.onChangeRowHeight,
14169
14264
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
14265
+ _ref$onChangeRowMode = _ref.onChangeRowMode,
14266
+ onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
14170
14267
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
14171
14268
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
14172
14269
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -14234,6 +14331,7 @@ var _renderLayout = function renderLayout(_ref) {
14234
14331
  onAddGridColumn: onAddGridColumn,
14235
14332
  onDeleteGridColumn: onDeleteGridColumn,
14236
14333
  onChangeRowHeight: onChangeRowHeight,
14334
+ onChangeRowMode: onChangeRowMode,
14237
14335
  onMoveWidgetToCell: onMoveWidgetToCell,
14238
14336
  onDropWidgetFromSidebar: onDropWidgetFromSidebar,
14239
14337
  children: id > 0 && _renderLayout({
@@ -14270,6 +14368,7 @@ var _renderLayout = function renderLayout(_ref) {
14270
14368
  onAddGridColumn: onAddGridColumn,
14271
14369
  onDeleteGridColumn: onDeleteGridColumn,
14272
14370
  onChangeRowHeight: onChangeRowHeight,
14371
+ onChangeRowMode: onChangeRowMode,
14273
14372
  onMoveWidgetToCell: onMoveWidgetToCell,
14274
14373
  onDropWidgetFromSidebar: onDropWidgetFromSidebar
14275
14374
  })
@@ -17049,6 +17148,20 @@ var DashboardModel = /*#__PURE__*/function () {
17049
17148
  delete grid["".concat(grid.rows, ".").concat(_c7)];
17050
17149
  }
17051
17150
  grid.rows--;
17151
+
17152
+ // Shift rowModes keys up and remove the compacted row's entry
17153
+ if (grid.rowModes) {
17154
+ var shifted = {};
17155
+ for (var _i2 = 0, _Object$entries = Object.entries(grid.rowModes); _i2 < _Object$entries.length; _i2++) {
17156
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
17157
+ _key2 = _Object$entries$_i[0],
17158
+ mode = _Object$entries$_i[1];
17159
+ var rowNum = Number(_key2);
17160
+ if (rowNum === _r6) continue;
17161
+ shifted[String(rowNum > _r6 ? rowNum - 1 : rowNum)] = mode;
17162
+ }
17163
+ grid.rowModes = Object.keys(shifted).length > 0 ? shifted : undefined;
17164
+ }
17052
17165
  }
17053
17166
 
17054
17167
  // --- Phase 3: Full normalization (steps 1-5) on the compacted grid ---
@@ -17082,14 +17195,14 @@ var DashboardModel = /*#__PURE__*/function () {
17082
17195
 
17083
17196
  // 2. Remove out-of-bounds cell keys
17084
17197
  var cellKeyPattern = /^(\d+)\.(\d+)$/;
17085
- for (var _i2 = 0, _Object$keys2 = Object.keys(grid); _i2 < _Object$keys2.length; _i2++) {
17086
- var _key2 = _Object$keys2[_i2];
17087
- var match = _key2.match(cellKeyPattern);
17198
+ for (var _i3 = 0, _Object$keys2 = Object.keys(grid); _i3 < _Object$keys2.length; _i3++) {
17199
+ var _key3 = _Object$keys2[_i3];
17200
+ var match = _key3.match(cellKeyPattern);
17088
17201
  if (match) {
17089
17202
  var _r7 = Number(match[1]);
17090
17203
  var _c8 = Number(match[2]);
17091
17204
  if (_r7 < 1 || _r7 > rows || _c8 < 1 || _c8 > cols) {
17092
- delete grid[_key2];
17205
+ delete grid[_key3];
17093
17206
  }
17094
17207
  }
17095
17208
  }
@@ -17120,13 +17233,13 @@ var DashboardModel = /*#__PURE__*/function () {
17120
17233
  var covered = new Set();
17121
17234
  for (var _r0 = 1; _r0 <= rows; _r0++) {
17122
17235
  for (var _c1 = 1; _c1 <= cols; _c1++) {
17123
- var _key3 = "".concat(_r0, ".").concat(_c1);
17124
- var _cell5 = grid[_key3];
17236
+ var _key4 = "".concat(_r0, ".").concat(_c1);
17237
+ var _cell5 = grid[_key4];
17125
17238
  if (!_cell5.span) continue;
17126
17239
 
17127
17240
  // If this cell is already covered by an earlier span,
17128
17241
  // remove its span to resolve the conflict
17129
- if (covered.has(_key3)) {
17242
+ if (covered.has(_key4)) {
17130
17243
  delete _cell5.span;
17131
17244
  continue;
17132
17245
  }
@@ -17146,7 +17259,7 @@ var DashboardModel = /*#__PURE__*/function () {
17146
17259
  covered.add(coveredKey);
17147
17260
  }
17148
17261
  }
17149
- covered.add(_key3);
17262
+ covered.add(_key4);
17150
17263
  }
17151
17264
  }
17152
17265
  }
@@ -17232,8 +17345,8 @@ var DashboardModel = /*#__PURE__*/function () {
17232
17345
  var visibleCells = [];
17233
17346
  for (var r = 1; r <= grid.rows; r++) {
17234
17347
  for (var c = 1; c <= oldCols; c++) {
17235
- var _key4 = "".concat(r, ".").concat(c);
17236
- var cell = grid[_key4];
17348
+ var _key5 = "".concat(r, ".").concat(c);
17349
+ var cell = grid[_key5];
17237
17350
  if (cell && !cell.hide) {
17238
17351
  var _cell$span, _cell$span2;
17239
17352
  visibleCells.push({
@@ -17248,20 +17361,20 @@ var DashboardModel = /*#__PURE__*/function () {
17248
17361
  }
17249
17362
 
17250
17363
  // 2. Clear all cell keys
17251
- for (var _i3 = 0, _Object$keys3 = Object.keys(grid); _i3 < _Object$keys3.length; _i3++) {
17252
- var _key5 = _Object$keys3[_i3];
17253
- if (/^\d+\.\d+$/.test(_key5)) delete grid[_key5];
17364
+ for (var _i4 = 0, _Object$keys3 = Object.keys(grid); _i4 < _Object$keys3.length; _i4++) {
17365
+ var _key6 = _Object$keys3[_i4];
17366
+ if (/^\d+\.\d+$/.test(_key6)) delete grid[_key6];
17254
17367
  }
17255
17368
 
17256
17369
  // 3. Update grid dimensions
17257
17370
  grid.cols = oldCols * count;
17258
17371
 
17259
17372
  // 4. Reposition all cells with scaled positions and spans
17260
- for (var _i4 = 0, _visibleCells = visibleCells; _i4 < _visibleCells.length; _i4++) {
17261
- var vc = _visibleCells[_i4];
17373
+ for (var _i5 = 0, _visibleCells = visibleCells; _i5 < _visibleCells.length; _i5++) {
17374
+ var vc = _visibleCells[_i5];
17262
17375
  var newCol = (vc.col - 1) * count + 1;
17263
- var _key6 = "".concat(vc.row, ".").concat(newCol);
17264
- grid[_key6] = _objectSpread$f(_objectSpread$f({}, vc.data), {}, {
17376
+ var _key7 = "".concat(vc.row, ".").concat(newCol);
17377
+ grid[_key7] = _objectSpread$f(_objectSpread$f({}, vc.data), {}, {
17265
17378
  hide: false,
17266
17379
  span: {
17267
17380
  row: vc.spanRow,
@@ -17276,16 +17389,16 @@ var DashboardModel = /*#__PURE__*/function () {
17276
17389
  var _subSpan = newTargetSpan / count;
17277
17390
  var _component = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
17278
17391
  var rowSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span4 = targetCell.span) === null || _targetCell$span4 === void 0 ? void 0 : _targetCell$span4.row) || 1;
17279
- for (var _i5 = 0; _i5 < count; _i5++) {
17280
- var _key7 = "".concat(row, ".").concat(newTargetCol + _i5 * _subSpan);
17281
- grid[_key7] = {
17282
- component: _i5 === 0 ? _component : null,
17392
+ for (var _i6 = 0; _i6 < count; _i6++) {
17393
+ var _key8 = "".concat(row, ".").concat(newTargetCol + _i6 * _subSpan);
17394
+ grid[_key8] = {
17395
+ component: _i6 === 0 ? _component : null,
17283
17396
  hide: false
17284
17397
  };
17285
17398
  if (_subSpan > 1 || rowSpan > 1) {
17286
- grid[_key7].span = {};
17287
- if (_subSpan > 1) grid[_key7].span.col = _subSpan;
17288
- if (rowSpan > 1) grid[_key7].span.row = rowSpan;
17399
+ grid[_key8].span = {};
17400
+ if (_subSpan > 1) grid[_key8].span.col = _subSpan;
17401
+ if (rowSpan > 1) grid[_key8].span.row = rowSpan;
17289
17402
  }
17290
17403
  }
17291
17404
  }
@@ -17308,16 +17421,16 @@ var DashboardModel = /*#__PURE__*/function () {
17308
17421
  delete targetCell.span;
17309
17422
 
17310
17423
  // Create subdivided cells
17311
- for (var _i6 = 0; _i6 < count; _i6++) {
17312
- var _key8 = "".concat(row + _i6 * _subSpan2, ".").concat(col);
17313
- grid[_key8] = {
17314
- component: _i6 === 0 ? _component2 : null,
17424
+ for (var _i7 = 0; _i7 < count; _i7++) {
17425
+ var _key9 = "".concat(row + _i7 * _subSpan2, ".").concat(col);
17426
+ grid[_key9] = {
17427
+ component: _i7 === 0 ? _component2 : null,
17315
17428
  hide: false
17316
17429
  };
17317
17430
  if (_subSpan2 > 1 || _targetSpanCol > 1) {
17318
- grid[_key8].span = {};
17319
- if (_subSpan2 > 1) grid[_key8].span.row = _subSpan2;
17320
- if (_targetSpanCol > 1) grid[_key8].span.col = _targetSpanCol;
17431
+ grid[_key9].span = {};
17432
+ if (_subSpan2 > 1) grid[_key9].span.row = _subSpan2;
17433
+ if (_targetSpanCol > 1) grid[_key9].span.col = _targetSpanCol;
17321
17434
  }
17322
17435
  }
17323
17436
  } else {
@@ -17329,8 +17442,8 @@ var DashboardModel = /*#__PURE__*/function () {
17329
17442
  var _visibleCells2 = [];
17330
17443
  for (var _r1 = 1; _r1 <= oldRows; _r1++) {
17331
17444
  for (var _c10 = 1; _c10 <= grid.cols; _c10++) {
17332
- var _key9 = "".concat(_r1, ".").concat(_c10);
17333
- var _cell6 = grid[_key9];
17445
+ var _key0 = "".concat(_r1, ".").concat(_c10);
17446
+ var _cell6 = grid[_key0];
17334
17447
  if (_cell6 && !_cell6.hide) {
17335
17448
  var _cell6$span, _cell6$span2;
17336
17449
  _visibleCells2.push({
@@ -17345,20 +17458,20 @@ var DashboardModel = /*#__PURE__*/function () {
17345
17458
  }
17346
17459
 
17347
17460
  // 2. Clear all cell keys
17348
- for (var _i7 = 0, _Object$keys4 = Object.keys(grid); _i7 < _Object$keys4.length; _i7++) {
17349
- var _key0 = _Object$keys4[_i7];
17350
- if (/^\d+\.\d+$/.test(_key0)) delete grid[_key0];
17461
+ for (var _i8 = 0, _Object$keys4 = Object.keys(grid); _i8 < _Object$keys4.length; _i8++) {
17462
+ var _key1 = _Object$keys4[_i8];
17463
+ if (/^\d+\.\d+$/.test(_key1)) delete grid[_key1];
17351
17464
  }
17352
17465
 
17353
17466
  // 3. Update grid dimensions
17354
17467
  grid.rows = oldRows * count;
17355
17468
 
17356
17469
  // 4. Reposition all cells with scaled positions and spans
17357
- for (var _i8 = 0, _visibleCells3 = _visibleCells2; _i8 < _visibleCells3.length; _i8++) {
17358
- var _vc = _visibleCells3[_i8];
17470
+ for (var _i9 = 0, _visibleCells3 = _visibleCells2; _i9 < _visibleCells3.length; _i9++) {
17471
+ var _vc = _visibleCells3[_i9];
17359
17472
  var newRow = (_vc.row - 1) * count + 1;
17360
- var _key1 = "".concat(newRow, ".").concat(_vc.col);
17361
- grid[_key1] = _objectSpread$f(_objectSpread$f({}, _vc.data), {}, {
17473
+ var _key10 = "".concat(newRow, ".").concat(_vc.col);
17474
+ grid[_key10] = _objectSpread$f(_objectSpread$f({}, _vc.data), {}, {
17362
17475
  hide: false,
17363
17476
  span: {
17364
17477
  row: _vc.spanRow * count,
@@ -17373,16 +17486,16 @@ var DashboardModel = /*#__PURE__*/function () {
17373
17486
  var _subSpan3 = _newTargetSpan / count;
17374
17487
  var _component3 = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
17375
17488
  var colSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span8 = targetCell.span) === null || _targetCell$span8 === void 0 ? void 0 : _targetCell$span8.col) || 1;
17376
- for (var _i9 = 0; _i9 < count; _i9++) {
17377
- var _key10 = "".concat(newTargetRow + _i9 * _subSpan3, ".").concat(col);
17378
- grid[_key10] = {
17379
- component: _i9 === 0 ? _component3 : null,
17489
+ for (var _i0 = 0; _i0 < count; _i0++) {
17490
+ var _key11 = "".concat(newTargetRow + _i0 * _subSpan3, ".").concat(col);
17491
+ grid[_key11] = {
17492
+ component: _i0 === 0 ? _component3 : null,
17380
17493
  hide: false
17381
17494
  };
17382
17495
  if (_subSpan3 > 1 || colSpan > 1) {
17383
- grid[_key10].span = {};
17384
- if (_subSpan3 > 1) grid[_key10].span.row = _subSpan3;
17385
- if (colSpan > 1) grid[_key10].span.col = colSpan;
17496
+ grid[_key11].span = {};
17497
+ if (_subSpan3 > 1) grid[_key11].span.row = _subSpan3;
17498
+ if (colSpan > 1) grid[_key11].span.col = colSpan;
17386
17499
  }
17387
17500
  }
17388
17501
  }
@@ -17534,6 +17647,50 @@ var DashboardModel = /*#__PURE__*/function () {
17534
17647
  }
17535
17648
  }
17536
17649
 
17650
+ /**
17651
+ * Change the sizing mode for a grid row
17652
+ * @param {Number} itemId The id of the grid container
17653
+ * @param {Number} rowNumber The row number (1-indexed)
17654
+ * @param {String} mode The sizing mode: "shrink", "grow", or "fixed"
17655
+ * @returns {Object} Updated grid or null on error
17656
+ */
17657
+ }, {
17658
+ key: "changeRowMode",
17659
+ value: function changeRowMode(itemId, rowNumber, mode) {
17660
+ try {
17661
+ var gridContainer = this.getComponentById(itemId);
17662
+ if (!gridContainer || !gridContainer.grid) {
17663
+ return null;
17664
+ }
17665
+ var grid = gridContainer.grid;
17666
+ grid.rowModes = grid.rowModes || {};
17667
+ if (mode === "fixed" || !mode) {
17668
+ delete grid.rowModes[String(rowNumber)];
17669
+ } else {
17670
+ grid.rowModes[String(rowNumber)] = mode;
17671
+ }
17672
+
17673
+ // When switching away from fixed, clear the rowHeights entry for that row
17674
+ if (mode === "shrink" || mode === "grow") {
17675
+ if (grid.rowHeights) {
17676
+ delete grid.rowHeights[String(rowNumber)];
17677
+ if (Object.keys(grid.rowHeights).length === 0) {
17678
+ delete grid.rowHeights;
17679
+ }
17680
+ }
17681
+ }
17682
+
17683
+ // Clean up empty object
17684
+ if (Object.keys(grid.rowModes).length === 0) {
17685
+ delete grid.rowModes;
17686
+ }
17687
+ this.updateLayoutItem(gridContainer);
17688
+ return grid;
17689
+ } catch (e) {
17690
+ return null;
17691
+ }
17692
+ }
17693
+
17537
17694
  /**
17538
17695
  * Add a new row to the grid
17539
17696
  * @param {Number} itemId The id of the grid container
@@ -17576,15 +17733,28 @@ var DashboardModel = /*#__PURE__*/function () {
17576
17733
  // Shift rowHeights keys down (rows after insertion point move +1)
17577
17734
  if (gridContainer.grid.rowHeights) {
17578
17735
  var shifted = {};
17579
- for (var _i0 = 0, _Object$entries = Object.entries(gridContainer.grid.rowHeights); _i0 < _Object$entries.length; _i0++) {
17580
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i0], 2),
17581
- key = _Object$entries$_i[0],
17582
- mult = _Object$entries$_i[1];
17736
+ for (var _i1 = 0, _Object$entries2 = Object.entries(gridContainer.grid.rowHeights); _i1 < _Object$entries2.length; _i1++) {
17737
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i1], 2),
17738
+ key = _Object$entries2$_i[0],
17739
+ mult = _Object$entries2$_i[1];
17583
17740
  var rowNum = Number(key);
17584
17741
  shifted[String(rowNum >= newRowNumber ? rowNum + 1 : rowNum)] = mult;
17585
17742
  }
17586
17743
  gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
17587
17744
  }
17745
+
17746
+ // Shift rowModes keys down (rows after insertion point move +1)
17747
+ if (gridContainer.grid.rowModes) {
17748
+ var _shifted = {};
17749
+ for (var _i10 = 0, _Object$entries3 = Object.entries(gridContainer.grid.rowModes); _i10 < _Object$entries3.length; _i10++) {
17750
+ var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i10], 2),
17751
+ _key12 = _Object$entries3$_i[0],
17752
+ mode = _Object$entries3$_i[1];
17753
+ var _rowNum = Number(_key12);
17754
+ _shifted[String(_rowNum >= newRowNumber ? _rowNum + 1 : _rowNum)] = mode;
17755
+ }
17756
+ gridContainer.grid.rowModes = Object.keys(_shifted).length > 0 ? _shifted : undefined;
17757
+ }
17588
17758
  this._normalizeGrid(gridContainer.grid);
17589
17759
  this.updateLayoutItem(gridContainer);
17590
17760
  return gridContainer.grid;
@@ -17636,16 +17806,30 @@ var DashboardModel = /*#__PURE__*/function () {
17636
17806
  // Shift rowHeights keys up and remove the deleted row's entry
17637
17807
  if (gridContainer.grid.rowHeights) {
17638
17808
  var shifted = {};
17639
- for (var _i1 = 0, _Object$entries2 = Object.entries(gridContainer.grid.rowHeights); _i1 < _Object$entries2.length; _i1++) {
17640
- var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i1], 2),
17641
- key = _Object$entries2$_i[0],
17642
- mult = _Object$entries2$_i[1];
17809
+ for (var _i11 = 0, _Object$entries4 = Object.entries(gridContainer.grid.rowHeights); _i11 < _Object$entries4.length; _i11++) {
17810
+ var _Object$entries4$_i = _slicedToArray(_Object$entries4[_i11], 2),
17811
+ key = _Object$entries4$_i[0],
17812
+ mult = _Object$entries4$_i[1];
17643
17813
  var rowNum = Number(key);
17644
17814
  if (rowNum === rowNumber) continue;
17645
17815
  shifted[String(rowNum > rowNumber ? rowNum - 1 : rowNum)] = mult;
17646
17816
  }
17647
17817
  gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
17648
17818
  }
17819
+
17820
+ // Shift rowModes keys up and remove the deleted row's entry
17821
+ if (gridContainer.grid.rowModes) {
17822
+ var _shifted2 = {};
17823
+ for (var _i12 = 0, _Object$entries5 = Object.entries(gridContainer.grid.rowModes); _i12 < _Object$entries5.length; _i12++) {
17824
+ var _Object$entries5$_i = _slicedToArray(_Object$entries5[_i12], 2),
17825
+ _key13 = _Object$entries5$_i[0],
17826
+ mode = _Object$entries5$_i[1];
17827
+ var _rowNum2 = Number(_key13);
17828
+ if (_rowNum2 === rowNumber) continue;
17829
+ _shifted2[String(_rowNum2 > rowNumber ? _rowNum2 - 1 : _rowNum2)] = mode;
17830
+ }
17831
+ gridContainer.grid.rowModes = Object.keys(_shifted2).length > 0 ? _shifted2 : undefined;
17832
+ }
17649
17833
  this._normalizeGrid(gridContainer.grid);
17650
17834
  this.updateLayoutItem(gridContainer);
17651
17835
  return gridContainer.grid;