@trops/dash-core 0.1.21 → 0.1.22

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
@@ -13963,7 +14055,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
13963
14055
  id: "grid-container-".concat(id),
13964
14056
  className: "grid flex-1 p-4 gap-5",
13965
14057
  style: {
13966
- gridTemplateRows: "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14058
+ gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
13967
14059
  gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
13968
14060
  overflow: "hidden"
13969
14061
  },
@@ -14074,7 +14166,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
14074
14166
  id: "grid-container-".concat(id),
14075
14167
  className: "absolute inset-0 grid p-3 ".concat(item.grid.gap || "gap-2"),
14076
14168
  style: {
14077
- gridTemplateRows: "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14169
+ gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14078
14170
  gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
14079
14171
  overflow: "hidden"
14080
14172
  },
@@ -14167,6 +14259,8 @@ var _renderLayout = function renderLayout(_ref) {
14167
14259
  onDeleteGridColumn = _ref$onDeleteGridColu === void 0 ? null : _ref$onDeleteGridColu,
14168
14260
  _ref$onChangeRowHeigh = _ref.onChangeRowHeight,
14169
14261
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
14262
+ _ref$onChangeRowMode = _ref.onChangeRowMode,
14263
+ onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
14170
14264
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
14171
14265
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
14172
14266
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -14234,6 +14328,7 @@ var _renderLayout = function renderLayout(_ref) {
14234
14328
  onAddGridColumn: onAddGridColumn,
14235
14329
  onDeleteGridColumn: onDeleteGridColumn,
14236
14330
  onChangeRowHeight: onChangeRowHeight,
14331
+ onChangeRowMode: onChangeRowMode,
14237
14332
  onMoveWidgetToCell: onMoveWidgetToCell,
14238
14333
  onDropWidgetFromSidebar: onDropWidgetFromSidebar,
14239
14334
  children: id > 0 && _renderLayout({
@@ -14270,6 +14365,7 @@ var _renderLayout = function renderLayout(_ref) {
14270
14365
  onAddGridColumn: onAddGridColumn,
14271
14366
  onDeleteGridColumn: onDeleteGridColumn,
14272
14367
  onChangeRowHeight: onChangeRowHeight,
14368
+ onChangeRowMode: onChangeRowMode,
14273
14369
  onMoveWidgetToCell: onMoveWidgetToCell,
14274
14370
  onDropWidgetFromSidebar: onDropWidgetFromSidebar
14275
14371
  })
@@ -17049,6 +17145,20 @@ var DashboardModel = /*#__PURE__*/function () {
17049
17145
  delete grid["".concat(grid.rows, ".").concat(_c7)];
17050
17146
  }
17051
17147
  grid.rows--;
17148
+
17149
+ // Shift rowModes keys up and remove the compacted row's entry
17150
+ if (grid.rowModes) {
17151
+ var shifted = {};
17152
+ for (var _i2 = 0, _Object$entries = Object.entries(grid.rowModes); _i2 < _Object$entries.length; _i2++) {
17153
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
17154
+ _key2 = _Object$entries$_i[0],
17155
+ mode = _Object$entries$_i[1];
17156
+ var rowNum = Number(_key2);
17157
+ if (rowNum === _r6) continue;
17158
+ shifted[String(rowNum > _r6 ? rowNum - 1 : rowNum)] = mode;
17159
+ }
17160
+ grid.rowModes = Object.keys(shifted).length > 0 ? shifted : undefined;
17161
+ }
17052
17162
  }
17053
17163
 
17054
17164
  // --- Phase 3: Full normalization (steps 1-5) on the compacted grid ---
@@ -17082,14 +17192,14 @@ var DashboardModel = /*#__PURE__*/function () {
17082
17192
 
17083
17193
  // 2. Remove out-of-bounds cell keys
17084
17194
  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);
17195
+ for (var _i3 = 0, _Object$keys2 = Object.keys(grid); _i3 < _Object$keys2.length; _i3++) {
17196
+ var _key3 = _Object$keys2[_i3];
17197
+ var match = _key3.match(cellKeyPattern);
17088
17198
  if (match) {
17089
17199
  var _r7 = Number(match[1]);
17090
17200
  var _c8 = Number(match[2]);
17091
17201
  if (_r7 < 1 || _r7 > rows || _c8 < 1 || _c8 > cols) {
17092
- delete grid[_key2];
17202
+ delete grid[_key3];
17093
17203
  }
17094
17204
  }
17095
17205
  }
@@ -17120,13 +17230,13 @@ var DashboardModel = /*#__PURE__*/function () {
17120
17230
  var covered = new Set();
17121
17231
  for (var _r0 = 1; _r0 <= rows; _r0++) {
17122
17232
  for (var _c1 = 1; _c1 <= cols; _c1++) {
17123
- var _key3 = "".concat(_r0, ".").concat(_c1);
17124
- var _cell5 = grid[_key3];
17233
+ var _key4 = "".concat(_r0, ".").concat(_c1);
17234
+ var _cell5 = grid[_key4];
17125
17235
  if (!_cell5.span) continue;
17126
17236
 
17127
17237
  // If this cell is already covered by an earlier span,
17128
17238
  // remove its span to resolve the conflict
17129
- if (covered.has(_key3)) {
17239
+ if (covered.has(_key4)) {
17130
17240
  delete _cell5.span;
17131
17241
  continue;
17132
17242
  }
@@ -17146,7 +17256,7 @@ var DashboardModel = /*#__PURE__*/function () {
17146
17256
  covered.add(coveredKey);
17147
17257
  }
17148
17258
  }
17149
- covered.add(_key3);
17259
+ covered.add(_key4);
17150
17260
  }
17151
17261
  }
17152
17262
  }
@@ -17232,8 +17342,8 @@ var DashboardModel = /*#__PURE__*/function () {
17232
17342
  var visibleCells = [];
17233
17343
  for (var r = 1; r <= grid.rows; r++) {
17234
17344
  for (var c = 1; c <= oldCols; c++) {
17235
- var _key4 = "".concat(r, ".").concat(c);
17236
- var cell = grid[_key4];
17345
+ var _key5 = "".concat(r, ".").concat(c);
17346
+ var cell = grid[_key5];
17237
17347
  if (cell && !cell.hide) {
17238
17348
  var _cell$span, _cell$span2;
17239
17349
  visibleCells.push({
@@ -17248,20 +17358,20 @@ var DashboardModel = /*#__PURE__*/function () {
17248
17358
  }
17249
17359
 
17250
17360
  // 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];
17361
+ for (var _i4 = 0, _Object$keys3 = Object.keys(grid); _i4 < _Object$keys3.length; _i4++) {
17362
+ var _key6 = _Object$keys3[_i4];
17363
+ if (/^\d+\.\d+$/.test(_key6)) delete grid[_key6];
17254
17364
  }
17255
17365
 
17256
17366
  // 3. Update grid dimensions
17257
17367
  grid.cols = oldCols * count;
17258
17368
 
17259
17369
  // 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];
17370
+ for (var _i5 = 0, _visibleCells = visibleCells; _i5 < _visibleCells.length; _i5++) {
17371
+ var vc = _visibleCells[_i5];
17262
17372
  var newCol = (vc.col - 1) * count + 1;
17263
- var _key6 = "".concat(vc.row, ".").concat(newCol);
17264
- grid[_key6] = _objectSpread$f(_objectSpread$f({}, vc.data), {}, {
17373
+ var _key7 = "".concat(vc.row, ".").concat(newCol);
17374
+ grid[_key7] = _objectSpread$f(_objectSpread$f({}, vc.data), {}, {
17265
17375
  hide: false,
17266
17376
  span: {
17267
17377
  row: vc.spanRow,
@@ -17276,16 +17386,16 @@ var DashboardModel = /*#__PURE__*/function () {
17276
17386
  var _subSpan = newTargetSpan / count;
17277
17387
  var _component = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
17278
17388
  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,
17389
+ for (var _i6 = 0; _i6 < count; _i6++) {
17390
+ var _key8 = "".concat(row, ".").concat(newTargetCol + _i6 * _subSpan);
17391
+ grid[_key8] = {
17392
+ component: _i6 === 0 ? _component : null,
17283
17393
  hide: false
17284
17394
  };
17285
17395
  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;
17396
+ grid[_key8].span = {};
17397
+ if (_subSpan > 1) grid[_key8].span.col = _subSpan;
17398
+ if (rowSpan > 1) grid[_key8].span.row = rowSpan;
17289
17399
  }
17290
17400
  }
17291
17401
  }
@@ -17308,16 +17418,16 @@ var DashboardModel = /*#__PURE__*/function () {
17308
17418
  delete targetCell.span;
17309
17419
 
17310
17420
  // 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,
17421
+ for (var _i7 = 0; _i7 < count; _i7++) {
17422
+ var _key9 = "".concat(row + _i7 * _subSpan2, ".").concat(col);
17423
+ grid[_key9] = {
17424
+ component: _i7 === 0 ? _component2 : null,
17315
17425
  hide: false
17316
17426
  };
17317
17427
  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;
17428
+ grid[_key9].span = {};
17429
+ if (_subSpan2 > 1) grid[_key9].span.row = _subSpan2;
17430
+ if (_targetSpanCol > 1) grid[_key9].span.col = _targetSpanCol;
17321
17431
  }
17322
17432
  }
17323
17433
  } else {
@@ -17329,8 +17439,8 @@ var DashboardModel = /*#__PURE__*/function () {
17329
17439
  var _visibleCells2 = [];
17330
17440
  for (var _r1 = 1; _r1 <= oldRows; _r1++) {
17331
17441
  for (var _c10 = 1; _c10 <= grid.cols; _c10++) {
17332
- var _key9 = "".concat(_r1, ".").concat(_c10);
17333
- var _cell6 = grid[_key9];
17442
+ var _key0 = "".concat(_r1, ".").concat(_c10);
17443
+ var _cell6 = grid[_key0];
17334
17444
  if (_cell6 && !_cell6.hide) {
17335
17445
  var _cell6$span, _cell6$span2;
17336
17446
  _visibleCells2.push({
@@ -17345,20 +17455,20 @@ var DashboardModel = /*#__PURE__*/function () {
17345
17455
  }
17346
17456
 
17347
17457
  // 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];
17458
+ for (var _i8 = 0, _Object$keys4 = Object.keys(grid); _i8 < _Object$keys4.length; _i8++) {
17459
+ var _key1 = _Object$keys4[_i8];
17460
+ if (/^\d+\.\d+$/.test(_key1)) delete grid[_key1];
17351
17461
  }
17352
17462
 
17353
17463
  // 3. Update grid dimensions
17354
17464
  grid.rows = oldRows * count;
17355
17465
 
17356
17466
  // 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];
17467
+ for (var _i9 = 0, _visibleCells3 = _visibleCells2; _i9 < _visibleCells3.length; _i9++) {
17468
+ var _vc = _visibleCells3[_i9];
17359
17469
  var newRow = (_vc.row - 1) * count + 1;
17360
- var _key1 = "".concat(newRow, ".").concat(_vc.col);
17361
- grid[_key1] = _objectSpread$f(_objectSpread$f({}, _vc.data), {}, {
17470
+ var _key10 = "".concat(newRow, ".").concat(_vc.col);
17471
+ grid[_key10] = _objectSpread$f(_objectSpread$f({}, _vc.data), {}, {
17362
17472
  hide: false,
17363
17473
  span: {
17364
17474
  row: _vc.spanRow * count,
@@ -17373,16 +17483,16 @@ var DashboardModel = /*#__PURE__*/function () {
17373
17483
  var _subSpan3 = _newTargetSpan / count;
17374
17484
  var _component3 = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
17375
17485
  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,
17486
+ for (var _i0 = 0; _i0 < count; _i0++) {
17487
+ var _key11 = "".concat(newTargetRow + _i0 * _subSpan3, ".").concat(col);
17488
+ grid[_key11] = {
17489
+ component: _i0 === 0 ? _component3 : null,
17380
17490
  hide: false
17381
17491
  };
17382
17492
  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;
17493
+ grid[_key11].span = {};
17494
+ if (_subSpan3 > 1) grid[_key11].span.row = _subSpan3;
17495
+ if (colSpan > 1) grid[_key11].span.col = colSpan;
17386
17496
  }
17387
17497
  }
17388
17498
  }
@@ -17534,6 +17644,50 @@ var DashboardModel = /*#__PURE__*/function () {
17534
17644
  }
17535
17645
  }
17536
17646
 
17647
+ /**
17648
+ * Change the sizing mode for a grid row
17649
+ * @param {Number} itemId The id of the grid container
17650
+ * @param {Number} rowNumber The row number (1-indexed)
17651
+ * @param {String} mode The sizing mode: "shrink", "grow", or "fixed"
17652
+ * @returns {Object} Updated grid or null on error
17653
+ */
17654
+ }, {
17655
+ key: "changeRowMode",
17656
+ value: function changeRowMode(itemId, rowNumber, mode) {
17657
+ try {
17658
+ var gridContainer = this.getComponentById(itemId);
17659
+ if (!gridContainer || !gridContainer.grid) {
17660
+ return null;
17661
+ }
17662
+ var grid = gridContainer.grid;
17663
+ grid.rowModes = grid.rowModes || {};
17664
+ if (mode === "fixed" || !mode) {
17665
+ delete grid.rowModes[String(rowNumber)];
17666
+ } else {
17667
+ grid.rowModes[String(rowNumber)] = mode;
17668
+ }
17669
+
17670
+ // When switching away from fixed, clear the rowHeights entry for that row
17671
+ if (mode === "shrink" || mode === "grow") {
17672
+ if (grid.rowHeights) {
17673
+ delete grid.rowHeights[String(rowNumber)];
17674
+ if (Object.keys(grid.rowHeights).length === 0) {
17675
+ delete grid.rowHeights;
17676
+ }
17677
+ }
17678
+ }
17679
+
17680
+ // Clean up empty object
17681
+ if (Object.keys(grid.rowModes).length === 0) {
17682
+ delete grid.rowModes;
17683
+ }
17684
+ this.updateLayoutItem(gridContainer);
17685
+ return grid;
17686
+ } catch (e) {
17687
+ return null;
17688
+ }
17689
+ }
17690
+
17537
17691
  /**
17538
17692
  * Add a new row to the grid
17539
17693
  * @param {Number} itemId The id of the grid container
@@ -17576,15 +17730,28 @@ var DashboardModel = /*#__PURE__*/function () {
17576
17730
  // Shift rowHeights keys down (rows after insertion point move +1)
17577
17731
  if (gridContainer.grid.rowHeights) {
17578
17732
  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];
17733
+ for (var _i1 = 0, _Object$entries2 = Object.entries(gridContainer.grid.rowHeights); _i1 < _Object$entries2.length; _i1++) {
17734
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i1], 2),
17735
+ key = _Object$entries2$_i[0],
17736
+ mult = _Object$entries2$_i[1];
17583
17737
  var rowNum = Number(key);
17584
17738
  shifted[String(rowNum >= newRowNumber ? rowNum + 1 : rowNum)] = mult;
17585
17739
  }
17586
17740
  gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
17587
17741
  }
17742
+
17743
+ // Shift rowModes keys down (rows after insertion point move +1)
17744
+ if (gridContainer.grid.rowModes) {
17745
+ var _shifted = {};
17746
+ for (var _i10 = 0, _Object$entries3 = Object.entries(gridContainer.grid.rowModes); _i10 < _Object$entries3.length; _i10++) {
17747
+ var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i10], 2),
17748
+ _key12 = _Object$entries3$_i[0],
17749
+ mode = _Object$entries3$_i[1];
17750
+ var _rowNum = Number(_key12);
17751
+ _shifted[String(_rowNum >= newRowNumber ? _rowNum + 1 : _rowNum)] = mode;
17752
+ }
17753
+ gridContainer.grid.rowModes = Object.keys(_shifted).length > 0 ? _shifted : undefined;
17754
+ }
17588
17755
  this._normalizeGrid(gridContainer.grid);
17589
17756
  this.updateLayoutItem(gridContainer);
17590
17757
  return gridContainer.grid;
@@ -17636,16 +17803,30 @@ var DashboardModel = /*#__PURE__*/function () {
17636
17803
  // Shift rowHeights keys up and remove the deleted row's entry
17637
17804
  if (gridContainer.grid.rowHeights) {
17638
17805
  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];
17806
+ for (var _i11 = 0, _Object$entries4 = Object.entries(gridContainer.grid.rowHeights); _i11 < _Object$entries4.length; _i11++) {
17807
+ var _Object$entries4$_i = _slicedToArray(_Object$entries4[_i11], 2),
17808
+ key = _Object$entries4$_i[0],
17809
+ mult = _Object$entries4$_i[1];
17643
17810
  var rowNum = Number(key);
17644
17811
  if (rowNum === rowNumber) continue;
17645
17812
  shifted[String(rowNum > rowNumber ? rowNum - 1 : rowNum)] = mult;
17646
17813
  }
17647
17814
  gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
17648
17815
  }
17816
+
17817
+ // Shift rowModes keys up and remove the deleted row's entry
17818
+ if (gridContainer.grid.rowModes) {
17819
+ var _shifted2 = {};
17820
+ for (var _i12 = 0, _Object$entries5 = Object.entries(gridContainer.grid.rowModes); _i12 < _Object$entries5.length; _i12++) {
17821
+ var _Object$entries5$_i = _slicedToArray(_Object$entries5[_i12], 2),
17822
+ _key13 = _Object$entries5$_i[0],
17823
+ mode = _Object$entries5$_i[1];
17824
+ var _rowNum2 = Number(_key13);
17825
+ if (_rowNum2 === rowNumber) continue;
17826
+ _shifted2[String(_rowNum2 > rowNumber ? _rowNum2 - 1 : _rowNum2)] = mode;
17827
+ }
17828
+ gridContainer.grid.rowModes = Object.keys(_shifted2).length > 0 ? _shifted2 : undefined;
17829
+ }
17649
17830
  this._normalizeGrid(gridContainer.grid);
17650
17831
  this.updateLayoutItem(gridContainer);
17651
17832
  return gridContainer.grid;