@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.js CHANGED
@@ -10592,6 +10592,18 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
10592
10592
  } catch (e) {
10593
10593
  }
10594
10594
  }
10595
+ function handleChangeRowMode(gridContainerId, rowNumber, mode) {
10596
+ try {
10597
+ var dashboard = new DashboardModel(currentWorkspace);
10598
+ var result = dashboard.changeRowMode(gridContainerId, rowNumber, mode);
10599
+ if (result) {
10600
+ var newWorkspace = dashboard.workspace();
10601
+ setCurrentWorkspace(newWorkspace);
10602
+ } else {
10603
+ }
10604
+ } catch (e) {
10605
+ }
10606
+ }
10595
10607
 
10596
10608
  /**
10597
10609
  * handle the click of a cell in a grid that does not contain a widget yet
@@ -10677,6 +10689,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
10677
10689
  onAddGridColumn: handleAddGridColumn,
10678
10690
  onDeleteGridColumn: handleDeleteGridColumn,
10679
10691
  onChangeRowHeight: handleChangeRowHeight,
10692
+ onChangeRowMode: handleChangeRowMode,
10680
10693
  onMoveWidgetToCell: handleMoveWidgetToCell
10681
10694
  }, "layout-drag-".concat(dashboardId)), preview === false && editMode === "all" && /*#__PURE__*/jsxRuntime.jsx(LayoutDragBuilderEdit, {
10682
10695
  dashboardId: dashboardId,
@@ -10721,6 +10734,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
10721
10734
  onAddGridColumn: handleAddGridColumn,
10722
10735
  onDeleteGridColumn: handleDeleteGridColumn,
10723
10736
  onChangeRowHeight: handleChangeRowHeight,
10737
+ onChangeRowMode: handleChangeRowMode,
10724
10738
  onMoveWidgetToCell: handleMoveWidgetToCell,
10725
10739
  onDropWidgetFromSidebar: handleDropWidgetFromSidebar
10726
10740
  }, "layout-drag-edit-".concat(dashboardId))]
@@ -10810,7 +10824,9 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
10810
10824
  _ref$onDeleteGridColu = _ref.onDeleteGridColumn,
10811
10825
  onDeleteGridColumn = _ref$onDeleteGridColu === void 0 ? null : _ref$onDeleteGridColu,
10812
10826
  _ref$onChangeRowHeigh = _ref.onChangeRowHeight,
10813
- onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh;
10827
+ onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
10828
+ _ref$onChangeRowMode = _ref.onChangeRowMode,
10829
+ onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode;
10814
10830
  return isDraggable === true ? /*#__PURE__*/jsxRuntime.jsx(reactDnd.DndProvider, {
10815
10831
  backend: reactDndHtml5Backend.HTML5Backend,
10816
10832
  children: _renderLayout({
@@ -10840,7 +10856,8 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
10840
10856
  onDeleteGridRow: onDeleteGridRow,
10841
10857
  onAddGridColumn: onAddGridColumn,
10842
10858
  onDeleteGridColumn: onDeleteGridColumn,
10843
- onChangeRowHeight: onChangeRowHeight
10859
+ onChangeRowHeight: onChangeRowHeight,
10860
+ onChangeRowMode: onChangeRowMode
10844
10861
  })
10845
10862
  }, "dnd-provider") : _renderLayout({
10846
10863
  dashboardId: dashboardId,
@@ -10869,7 +10886,8 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
10869
10886
  onDeleteGridRow: onDeleteGridRow,
10870
10887
  onAddGridColumn: onAddGridColumn,
10871
10888
  onDeleteGridColumn: onDeleteGridColumn,
10872
- onChangeRowHeight: onChangeRowHeight
10889
+ onChangeRowHeight: onChangeRowHeight,
10890
+ onChangeRowMode: onChangeRowMode
10873
10891
  });
10874
10892
  };
10875
10893
 
@@ -10917,6 +10935,8 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
10917
10935
  onDeleteGridColumn = _ref$onDeleteGridColu === void 0 ? null : _ref$onDeleteGridColu,
10918
10936
  _ref$onChangeRowHeigh = _ref.onChangeRowHeight,
10919
10937
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
10938
+ _ref$onChangeRowMode = _ref.onChangeRowMode,
10939
+ onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
10920
10940
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
10921
10941
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
10922
10942
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -10955,6 +10975,7 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
10955
10975
  onAddGridColumn: onAddGridColumn,
10956
10976
  onDeleteGridColumn: onDeleteGridColumn,
10957
10977
  onChangeRowHeight: onChangeRowHeight,
10978
+ onChangeRowMode: onChangeRowMode,
10958
10979
  onMoveWidgetToCell: onMoveWidgetToCell,
10959
10980
  onDropWidgetFromSidebar: onDropWidgetFromSidebar
10960
10981
  });
@@ -13185,6 +13206,8 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
13185
13206
  onDeleteGridColumn = _ref3$onDeleteGridCol === void 0 ? null : _ref3$onDeleteGridCol,
13186
13207
  _ref3$onChangeRowHeig = _ref3.onChangeRowHeight,
13187
13208
  onChangeRowHeight = _ref3$onChangeRowHeig === void 0 ? null : _ref3$onChangeRowHeig,
13209
+ _ref3$onChangeRowMode = _ref3.onChangeRowMode,
13210
+ onChangeRowMode = _ref3$onChangeRowMode === void 0 ? null : _ref3$onChangeRowMode,
13188
13211
  _ref3$onMoveWidgetToC = _ref3.onMoveWidgetToCell,
13189
13212
  onMoveWidgetToCell = _ref3$onMoveWidgetToC === void 0 ? null : _ref3$onMoveWidgetToC,
13190
13213
  _ref3$onDropWidgetFro = _ref3.onDropWidgetFromSidebar,
@@ -13215,18 +13238,39 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
13215
13238
  var GRID_PAD = 16; // px — matches p-4 (1rem)
13216
13239
  var GRID_GAP = 20; // px — matches gap-5 (1.25rem)
13217
13240
 
13218
- // Compute fixed row heights for scrollable mode
13241
+ // Compute row template tracks respecting rowModes and rowHeights
13219
13242
  function getRowTemplate(grid) {
13220
13243
  var unit = grid.rowUnit || 300;
13221
13244
  var heights = grid.rowHeights || {};
13245
+ var modes = grid.rowModes || {};
13222
13246
  var tracks = [];
13223
13247
  for (var r = 1; r <= grid.rows; r++) {
13224
- var mult = heights[String(r)] || 1;
13225
- tracks.push("".concat(unit * mult, "px"));
13248
+ var mode = modes[String(r)] || "fixed";
13249
+ switch (mode) {
13250
+ case "shrink":
13251
+ tracks.push("auto");
13252
+ break;
13253
+ case "grow":
13254
+ tracks.push("minmax(0, 1fr)");
13255
+ break;
13256
+ default:
13257
+ {
13258
+ var mult = heights[String(r)] || 1;
13259
+ tracks.push("".concat(unit * mult, "px"));
13260
+ break;
13261
+ }
13262
+ }
13226
13263
  }
13227
13264
  return tracks.join(" ");
13228
13265
  }
13229
13266
 
13267
+ // Check if any row has an explicit mode set
13268
+ function hasExplicitRowModes() {
13269
+ if (!hasGrid) return false;
13270
+ var modes = item.grid.rowModes;
13271
+ return modes && Object.keys(modes).length > 0;
13272
+ }
13273
+
13230
13274
  // Get the current multiplier for a row
13231
13275
  function getRowMultiplier(row) {
13232
13276
  var _item$grid$rowHeights;
@@ -13234,15 +13278,54 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
13234
13278
  return ((_item$grid$rowHeights = item.grid.rowHeights) === null || _item$grid$rowHeights === void 0 ? void 0 : _item$grid$rowHeights[String(row)]) || 1;
13235
13279
  }
13236
13280
 
13237
- // Cycle multiplier: 1 2 3 → 1
13238
- function handleCycleRowHeight(row) {
13239
- var current = getRowMultiplier(row);
13240
- var next = current >= 3 ? 1 : current + 1;
13241
- if (onChangeRowHeight) {
13242
- onChangeRowHeight(id, row, next);
13281
+ // Get the current mode for a row
13282
+ function getRowMode(row) {
13283
+ var _item$grid$rowModes;
13284
+ if (!hasGrid) return "fixed";
13285
+ return ((_item$grid$rowModes = item.grid.rowModes) === null || _item$grid$rowModes === void 0 ? void 0 : _item$grid$rowModes[String(row)]) || "fixed";
13286
+ }
13287
+
13288
+ // Unified cycle: shrink → grow → fixed 1x → fixed 2x → fixed 3x → shrink
13289
+ function handleCycleRowSizing(row) {
13290
+ var mode = getRowMode(row);
13291
+ var mult = getRowMultiplier(row);
13292
+ if (mode === "shrink") {
13293
+ // shrink → grow
13294
+ if (onChangeRowMode) onChangeRowMode(id, row, "grow");
13295
+ } else if (mode === "grow") {
13296
+ // grow → fixed 1x
13297
+ if (onChangeRowMode) onChangeRowMode(id, row, "fixed");
13298
+ } else {
13299
+ // fixed: cycle 1x → 2x → 3x → shrink
13300
+ if (mult >= 3) {
13301
+ if (onChangeRowMode) onChangeRowMode(id, row, "shrink");
13302
+ } else {
13303
+ if (onChangeRowHeight) onChangeRowHeight(id, row, mult + 1);
13304
+ }
13243
13305
  }
13244
13306
  }
13245
13307
 
13308
+ // Get display label and color for current row sizing
13309
+ function getRowSizingDisplay(row) {
13310
+ var mode = getRowMode(row);
13311
+ if (mode === "shrink") return {
13312
+ label: "S",
13313
+ color: "text-amber-400",
13314
+ hoverBg: "hover:bg-amber-400/10"
13315
+ };
13316
+ if (mode === "grow") return {
13317
+ label: "G",
13318
+ color: "text-green-400",
13319
+ hoverBg: "hover:bg-green-400/10"
13320
+ };
13321
+ var mult = getRowMultiplier(row);
13322
+ return {
13323
+ label: "".concat(mult, "x"),
13324
+ color: mult > 1 ? "text-blue-400" : "text-gray-500",
13325
+ hoverBg: mult > 1 ? "hover:bg-blue-400/10" : "hover:bg-gray-400/10"
13326
+ };
13327
+ }
13328
+
13246
13329
  // Modal state for grid operations
13247
13330
  var _useState = React.useState(false),
13248
13331
  _useState2 = _slicedToArray(_useState, 2),
@@ -13543,14 +13626,23 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
13543
13626
  }), /*#__PURE__*/jsxRuntime.jsxs("span", {
13544
13627
  className: "text-[11px] text-gray-400 group-hover:text-gray-200 select-none font-mono font-medium",
13545
13628
  children: ["R", row]
13546
- }), scrollable && /*#__PURE__*/jsxRuntime.jsxs("button", {
13547
- 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",
13548
- onClick: function onClick() {
13549
- return handleCycleRowHeight(row);
13550
- },
13551
- title: "Row height: ".concat(getRowMultiplier(row), "x (click to cycle)"),
13552
- children: [getRowMultiplier(row), "x"]
13553
- }), /*#__PURE__*/jsxRuntime.jsx("button", {
13629
+ }), function () {
13630
+ var _getRowSizingDisplay = getRowSizingDisplay(row),
13631
+ label = _getRowSizingDisplay.label,
13632
+ color = _getRowSizingDisplay.color,
13633
+ hoverBg = _getRowSizingDisplay.hoverBg;
13634
+ var mode = getRowMode(row);
13635
+ var mult = getRowMultiplier(row);
13636
+ var titleParts = mode === "shrink" ? "Shrink (auto)" : mode === "grow" ? "Grow (1fr)" : "Fixed ".concat(mult, "x");
13637
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
13638
+ 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"),
13639
+ onClick: function onClick() {
13640
+ return handleCycleRowSizing(row);
13641
+ },
13642
+ title: "Row sizing: ".concat(titleParts, " (click to cycle)"),
13643
+ children: label
13644
+ });
13645
+ }(), /*#__PURE__*/jsxRuntime.jsx("button", {
13554
13646
  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",
13555
13647
  onClick: function onClick() {
13556
13648
  return handleAddRow(row);
@@ -13587,7 +13679,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
13587
13679
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
13588
13680
  className: "grid ".concat(scrollable ? "" : "flex-1"),
13589
13681
  style: {
13590
- gridTemplateRows: scrollable ? getRowTemplate(item.grid) : "repeat(".concat(rows, ", minmax(0, 1fr))"),
13682
+ gridTemplateRows: scrollable ? getRowTemplate(item.grid) : hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(rows, ", minmax(0, 1fr))"),
13591
13683
  gap: GRID_GAP
13592
13684
  },
13593
13685
  children: rowItems
@@ -13982,7 +14074,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
13982
14074
  id: "grid-container-".concat(id),
13983
14075
  className: "grid flex-1 p-4 gap-5",
13984
14076
  style: {
13985
- gridTemplateRows: "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14077
+ gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
13986
14078
  gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
13987
14079
  overflow: "hidden"
13988
14080
  },
@@ -14093,7 +14185,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
14093
14185
  id: "grid-container-".concat(id),
14094
14186
  className: "absolute inset-0 grid p-3 ".concat(item.grid.gap || "gap-2"),
14095
14187
  style: {
14096
- gridTemplateRows: "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14188
+ gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
14097
14189
  gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
14098
14190
  overflow: "hidden"
14099
14191
  },
@@ -14186,6 +14278,8 @@ var _renderLayout = function renderLayout(_ref) {
14186
14278
  onDeleteGridColumn = _ref$onDeleteGridColu === void 0 ? null : _ref$onDeleteGridColu,
14187
14279
  _ref$onChangeRowHeigh = _ref.onChangeRowHeight,
14188
14280
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
14281
+ _ref$onChangeRowMode = _ref.onChangeRowMode,
14282
+ onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
14189
14283
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
14190
14284
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
14191
14285
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -14253,6 +14347,7 @@ var _renderLayout = function renderLayout(_ref) {
14253
14347
  onAddGridColumn: onAddGridColumn,
14254
14348
  onDeleteGridColumn: onDeleteGridColumn,
14255
14349
  onChangeRowHeight: onChangeRowHeight,
14350
+ onChangeRowMode: onChangeRowMode,
14256
14351
  onMoveWidgetToCell: onMoveWidgetToCell,
14257
14352
  onDropWidgetFromSidebar: onDropWidgetFromSidebar,
14258
14353
  children: id > 0 && _renderLayout({
@@ -14289,6 +14384,7 @@ var _renderLayout = function renderLayout(_ref) {
14289
14384
  onAddGridColumn: onAddGridColumn,
14290
14385
  onDeleteGridColumn: onDeleteGridColumn,
14291
14386
  onChangeRowHeight: onChangeRowHeight,
14387
+ onChangeRowMode: onChangeRowMode,
14292
14388
  onMoveWidgetToCell: onMoveWidgetToCell,
14293
14389
  onDropWidgetFromSidebar: onDropWidgetFromSidebar
14294
14390
  })
@@ -17068,6 +17164,20 @@ var DashboardModel = /*#__PURE__*/function () {
17068
17164
  delete grid["".concat(grid.rows, ".").concat(_c7)];
17069
17165
  }
17070
17166
  grid.rows--;
17167
+
17168
+ // Shift rowModes keys up and remove the compacted row's entry
17169
+ if (grid.rowModes) {
17170
+ var shifted = {};
17171
+ for (var _i2 = 0, _Object$entries = Object.entries(grid.rowModes); _i2 < _Object$entries.length; _i2++) {
17172
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
17173
+ _key2 = _Object$entries$_i[0],
17174
+ mode = _Object$entries$_i[1];
17175
+ var rowNum = Number(_key2);
17176
+ if (rowNum === _r6) continue;
17177
+ shifted[String(rowNum > _r6 ? rowNum - 1 : rowNum)] = mode;
17178
+ }
17179
+ grid.rowModes = Object.keys(shifted).length > 0 ? shifted : undefined;
17180
+ }
17071
17181
  }
17072
17182
 
17073
17183
  // --- Phase 3: Full normalization (steps 1-5) on the compacted grid ---
@@ -17101,14 +17211,14 @@ var DashboardModel = /*#__PURE__*/function () {
17101
17211
 
17102
17212
  // 2. Remove out-of-bounds cell keys
17103
17213
  var cellKeyPattern = /^(\d+)\.(\d+)$/;
17104
- for (var _i2 = 0, _Object$keys2 = Object.keys(grid); _i2 < _Object$keys2.length; _i2++) {
17105
- var _key2 = _Object$keys2[_i2];
17106
- var match = _key2.match(cellKeyPattern);
17214
+ for (var _i3 = 0, _Object$keys2 = Object.keys(grid); _i3 < _Object$keys2.length; _i3++) {
17215
+ var _key3 = _Object$keys2[_i3];
17216
+ var match = _key3.match(cellKeyPattern);
17107
17217
  if (match) {
17108
17218
  var _r7 = Number(match[1]);
17109
17219
  var _c8 = Number(match[2]);
17110
17220
  if (_r7 < 1 || _r7 > rows || _c8 < 1 || _c8 > cols) {
17111
- delete grid[_key2];
17221
+ delete grid[_key3];
17112
17222
  }
17113
17223
  }
17114
17224
  }
@@ -17139,13 +17249,13 @@ var DashboardModel = /*#__PURE__*/function () {
17139
17249
  var covered = new Set();
17140
17250
  for (var _r0 = 1; _r0 <= rows; _r0++) {
17141
17251
  for (var _c1 = 1; _c1 <= cols; _c1++) {
17142
- var _key3 = "".concat(_r0, ".").concat(_c1);
17143
- var _cell5 = grid[_key3];
17252
+ var _key4 = "".concat(_r0, ".").concat(_c1);
17253
+ var _cell5 = grid[_key4];
17144
17254
  if (!_cell5.span) continue;
17145
17255
 
17146
17256
  // If this cell is already covered by an earlier span,
17147
17257
  // remove its span to resolve the conflict
17148
- if (covered.has(_key3)) {
17258
+ if (covered.has(_key4)) {
17149
17259
  delete _cell5.span;
17150
17260
  continue;
17151
17261
  }
@@ -17165,7 +17275,7 @@ var DashboardModel = /*#__PURE__*/function () {
17165
17275
  covered.add(coveredKey);
17166
17276
  }
17167
17277
  }
17168
- covered.add(_key3);
17278
+ covered.add(_key4);
17169
17279
  }
17170
17280
  }
17171
17281
  }
@@ -17251,8 +17361,8 @@ var DashboardModel = /*#__PURE__*/function () {
17251
17361
  var visibleCells = [];
17252
17362
  for (var r = 1; r <= grid.rows; r++) {
17253
17363
  for (var c = 1; c <= oldCols; c++) {
17254
- var _key4 = "".concat(r, ".").concat(c);
17255
- var cell = grid[_key4];
17364
+ var _key5 = "".concat(r, ".").concat(c);
17365
+ var cell = grid[_key5];
17256
17366
  if (cell && !cell.hide) {
17257
17367
  var _cell$span, _cell$span2;
17258
17368
  visibleCells.push({
@@ -17267,20 +17377,20 @@ var DashboardModel = /*#__PURE__*/function () {
17267
17377
  }
17268
17378
 
17269
17379
  // 2. Clear all cell keys
17270
- for (var _i3 = 0, _Object$keys3 = Object.keys(grid); _i3 < _Object$keys3.length; _i3++) {
17271
- var _key5 = _Object$keys3[_i3];
17272
- if (/^\d+\.\d+$/.test(_key5)) delete grid[_key5];
17380
+ for (var _i4 = 0, _Object$keys3 = Object.keys(grid); _i4 < _Object$keys3.length; _i4++) {
17381
+ var _key6 = _Object$keys3[_i4];
17382
+ if (/^\d+\.\d+$/.test(_key6)) delete grid[_key6];
17273
17383
  }
17274
17384
 
17275
17385
  // 3. Update grid dimensions
17276
17386
  grid.cols = oldCols * count;
17277
17387
 
17278
17388
  // 4. Reposition all cells with scaled positions and spans
17279
- for (var _i4 = 0, _visibleCells = visibleCells; _i4 < _visibleCells.length; _i4++) {
17280
- var vc = _visibleCells[_i4];
17389
+ for (var _i5 = 0, _visibleCells = visibleCells; _i5 < _visibleCells.length; _i5++) {
17390
+ var vc = _visibleCells[_i5];
17281
17391
  var newCol = (vc.col - 1) * count + 1;
17282
- var _key6 = "".concat(vc.row, ".").concat(newCol);
17283
- grid[_key6] = _objectSpread$f(_objectSpread$f({}, vc.data), {}, {
17392
+ var _key7 = "".concat(vc.row, ".").concat(newCol);
17393
+ grid[_key7] = _objectSpread$f(_objectSpread$f({}, vc.data), {}, {
17284
17394
  hide: false,
17285
17395
  span: {
17286
17396
  row: vc.spanRow,
@@ -17295,16 +17405,16 @@ var DashboardModel = /*#__PURE__*/function () {
17295
17405
  var _subSpan = newTargetSpan / count;
17296
17406
  var _component = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
17297
17407
  var rowSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span4 = targetCell.span) === null || _targetCell$span4 === void 0 ? void 0 : _targetCell$span4.row) || 1;
17298
- for (var _i5 = 0; _i5 < count; _i5++) {
17299
- var _key7 = "".concat(row, ".").concat(newTargetCol + _i5 * _subSpan);
17300
- grid[_key7] = {
17301
- component: _i5 === 0 ? _component : null,
17408
+ for (var _i6 = 0; _i6 < count; _i6++) {
17409
+ var _key8 = "".concat(row, ".").concat(newTargetCol + _i6 * _subSpan);
17410
+ grid[_key8] = {
17411
+ component: _i6 === 0 ? _component : null,
17302
17412
  hide: false
17303
17413
  };
17304
17414
  if (_subSpan > 1 || rowSpan > 1) {
17305
- grid[_key7].span = {};
17306
- if (_subSpan > 1) grid[_key7].span.col = _subSpan;
17307
- if (rowSpan > 1) grid[_key7].span.row = rowSpan;
17415
+ grid[_key8].span = {};
17416
+ if (_subSpan > 1) grid[_key8].span.col = _subSpan;
17417
+ if (rowSpan > 1) grid[_key8].span.row = rowSpan;
17308
17418
  }
17309
17419
  }
17310
17420
  }
@@ -17327,16 +17437,16 @@ var DashboardModel = /*#__PURE__*/function () {
17327
17437
  delete targetCell.span;
17328
17438
 
17329
17439
  // Create subdivided cells
17330
- for (var _i6 = 0; _i6 < count; _i6++) {
17331
- var _key8 = "".concat(row + _i6 * _subSpan2, ".").concat(col);
17332
- grid[_key8] = {
17333
- component: _i6 === 0 ? _component2 : null,
17440
+ for (var _i7 = 0; _i7 < count; _i7++) {
17441
+ var _key9 = "".concat(row + _i7 * _subSpan2, ".").concat(col);
17442
+ grid[_key9] = {
17443
+ component: _i7 === 0 ? _component2 : null,
17334
17444
  hide: false
17335
17445
  };
17336
17446
  if (_subSpan2 > 1 || _targetSpanCol > 1) {
17337
- grid[_key8].span = {};
17338
- if (_subSpan2 > 1) grid[_key8].span.row = _subSpan2;
17339
- if (_targetSpanCol > 1) grid[_key8].span.col = _targetSpanCol;
17447
+ grid[_key9].span = {};
17448
+ if (_subSpan2 > 1) grid[_key9].span.row = _subSpan2;
17449
+ if (_targetSpanCol > 1) grid[_key9].span.col = _targetSpanCol;
17340
17450
  }
17341
17451
  }
17342
17452
  } else {
@@ -17348,8 +17458,8 @@ var DashboardModel = /*#__PURE__*/function () {
17348
17458
  var _visibleCells2 = [];
17349
17459
  for (var _r1 = 1; _r1 <= oldRows; _r1++) {
17350
17460
  for (var _c10 = 1; _c10 <= grid.cols; _c10++) {
17351
- var _key9 = "".concat(_r1, ".").concat(_c10);
17352
- var _cell6 = grid[_key9];
17461
+ var _key0 = "".concat(_r1, ".").concat(_c10);
17462
+ var _cell6 = grid[_key0];
17353
17463
  if (_cell6 && !_cell6.hide) {
17354
17464
  var _cell6$span, _cell6$span2;
17355
17465
  _visibleCells2.push({
@@ -17364,20 +17474,20 @@ var DashboardModel = /*#__PURE__*/function () {
17364
17474
  }
17365
17475
 
17366
17476
  // 2. Clear all cell keys
17367
- for (var _i7 = 0, _Object$keys4 = Object.keys(grid); _i7 < _Object$keys4.length; _i7++) {
17368
- var _key0 = _Object$keys4[_i7];
17369
- if (/^\d+\.\d+$/.test(_key0)) delete grid[_key0];
17477
+ for (var _i8 = 0, _Object$keys4 = Object.keys(grid); _i8 < _Object$keys4.length; _i8++) {
17478
+ var _key1 = _Object$keys4[_i8];
17479
+ if (/^\d+\.\d+$/.test(_key1)) delete grid[_key1];
17370
17480
  }
17371
17481
 
17372
17482
  // 3. Update grid dimensions
17373
17483
  grid.rows = oldRows * count;
17374
17484
 
17375
17485
  // 4. Reposition all cells with scaled positions and spans
17376
- for (var _i8 = 0, _visibleCells3 = _visibleCells2; _i8 < _visibleCells3.length; _i8++) {
17377
- var _vc = _visibleCells3[_i8];
17486
+ for (var _i9 = 0, _visibleCells3 = _visibleCells2; _i9 < _visibleCells3.length; _i9++) {
17487
+ var _vc = _visibleCells3[_i9];
17378
17488
  var newRow = (_vc.row - 1) * count + 1;
17379
- var _key1 = "".concat(newRow, ".").concat(_vc.col);
17380
- grid[_key1] = _objectSpread$f(_objectSpread$f({}, _vc.data), {}, {
17489
+ var _key10 = "".concat(newRow, ".").concat(_vc.col);
17490
+ grid[_key10] = _objectSpread$f(_objectSpread$f({}, _vc.data), {}, {
17381
17491
  hide: false,
17382
17492
  span: {
17383
17493
  row: _vc.spanRow * count,
@@ -17392,16 +17502,16 @@ var DashboardModel = /*#__PURE__*/function () {
17392
17502
  var _subSpan3 = _newTargetSpan / count;
17393
17503
  var _component3 = targetCell === null || targetCell === void 0 ? void 0 : targetCell.component;
17394
17504
  var colSpan = (targetCell === null || targetCell === void 0 || (_targetCell$span8 = targetCell.span) === null || _targetCell$span8 === void 0 ? void 0 : _targetCell$span8.col) || 1;
17395
- for (var _i9 = 0; _i9 < count; _i9++) {
17396
- var _key10 = "".concat(newTargetRow + _i9 * _subSpan3, ".").concat(col);
17397
- grid[_key10] = {
17398
- component: _i9 === 0 ? _component3 : null,
17505
+ for (var _i0 = 0; _i0 < count; _i0++) {
17506
+ var _key11 = "".concat(newTargetRow + _i0 * _subSpan3, ".").concat(col);
17507
+ grid[_key11] = {
17508
+ component: _i0 === 0 ? _component3 : null,
17399
17509
  hide: false
17400
17510
  };
17401
17511
  if (_subSpan3 > 1 || colSpan > 1) {
17402
- grid[_key10].span = {};
17403
- if (_subSpan3 > 1) grid[_key10].span.row = _subSpan3;
17404
- if (colSpan > 1) grid[_key10].span.col = colSpan;
17512
+ grid[_key11].span = {};
17513
+ if (_subSpan3 > 1) grid[_key11].span.row = _subSpan3;
17514
+ if (colSpan > 1) grid[_key11].span.col = colSpan;
17405
17515
  }
17406
17516
  }
17407
17517
  }
@@ -17553,6 +17663,50 @@ var DashboardModel = /*#__PURE__*/function () {
17553
17663
  }
17554
17664
  }
17555
17665
 
17666
+ /**
17667
+ * Change the sizing mode for a grid row
17668
+ * @param {Number} itemId The id of the grid container
17669
+ * @param {Number} rowNumber The row number (1-indexed)
17670
+ * @param {String} mode The sizing mode: "shrink", "grow", or "fixed"
17671
+ * @returns {Object} Updated grid or null on error
17672
+ */
17673
+ }, {
17674
+ key: "changeRowMode",
17675
+ value: function changeRowMode(itemId, rowNumber, mode) {
17676
+ try {
17677
+ var gridContainer = this.getComponentById(itemId);
17678
+ if (!gridContainer || !gridContainer.grid) {
17679
+ return null;
17680
+ }
17681
+ var grid = gridContainer.grid;
17682
+ grid.rowModes = grid.rowModes || {};
17683
+ if (mode === "fixed" || !mode) {
17684
+ delete grid.rowModes[String(rowNumber)];
17685
+ } else {
17686
+ grid.rowModes[String(rowNumber)] = mode;
17687
+ }
17688
+
17689
+ // When switching away from fixed, clear the rowHeights entry for that row
17690
+ if (mode === "shrink" || mode === "grow") {
17691
+ if (grid.rowHeights) {
17692
+ delete grid.rowHeights[String(rowNumber)];
17693
+ if (Object.keys(grid.rowHeights).length === 0) {
17694
+ delete grid.rowHeights;
17695
+ }
17696
+ }
17697
+ }
17698
+
17699
+ // Clean up empty object
17700
+ if (Object.keys(grid.rowModes).length === 0) {
17701
+ delete grid.rowModes;
17702
+ }
17703
+ this.updateLayoutItem(gridContainer);
17704
+ return grid;
17705
+ } catch (e) {
17706
+ return null;
17707
+ }
17708
+ }
17709
+
17556
17710
  /**
17557
17711
  * Add a new row to the grid
17558
17712
  * @param {Number} itemId The id of the grid container
@@ -17595,15 +17749,28 @@ var DashboardModel = /*#__PURE__*/function () {
17595
17749
  // Shift rowHeights keys down (rows after insertion point move +1)
17596
17750
  if (gridContainer.grid.rowHeights) {
17597
17751
  var shifted = {};
17598
- for (var _i0 = 0, _Object$entries = Object.entries(gridContainer.grid.rowHeights); _i0 < _Object$entries.length; _i0++) {
17599
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i0], 2),
17600
- key = _Object$entries$_i[0],
17601
- mult = _Object$entries$_i[1];
17752
+ for (var _i1 = 0, _Object$entries2 = Object.entries(gridContainer.grid.rowHeights); _i1 < _Object$entries2.length; _i1++) {
17753
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i1], 2),
17754
+ key = _Object$entries2$_i[0],
17755
+ mult = _Object$entries2$_i[1];
17602
17756
  var rowNum = Number(key);
17603
17757
  shifted[String(rowNum >= newRowNumber ? rowNum + 1 : rowNum)] = mult;
17604
17758
  }
17605
17759
  gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
17606
17760
  }
17761
+
17762
+ // Shift rowModes keys down (rows after insertion point move +1)
17763
+ if (gridContainer.grid.rowModes) {
17764
+ var _shifted = {};
17765
+ for (var _i10 = 0, _Object$entries3 = Object.entries(gridContainer.grid.rowModes); _i10 < _Object$entries3.length; _i10++) {
17766
+ var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i10], 2),
17767
+ _key12 = _Object$entries3$_i[0],
17768
+ mode = _Object$entries3$_i[1];
17769
+ var _rowNum = Number(_key12);
17770
+ _shifted[String(_rowNum >= newRowNumber ? _rowNum + 1 : _rowNum)] = mode;
17771
+ }
17772
+ gridContainer.grid.rowModes = Object.keys(_shifted).length > 0 ? _shifted : undefined;
17773
+ }
17607
17774
  this._normalizeGrid(gridContainer.grid);
17608
17775
  this.updateLayoutItem(gridContainer);
17609
17776
  return gridContainer.grid;
@@ -17655,16 +17822,30 @@ var DashboardModel = /*#__PURE__*/function () {
17655
17822
  // Shift rowHeights keys up and remove the deleted row's entry
17656
17823
  if (gridContainer.grid.rowHeights) {
17657
17824
  var shifted = {};
17658
- for (var _i1 = 0, _Object$entries2 = Object.entries(gridContainer.grid.rowHeights); _i1 < _Object$entries2.length; _i1++) {
17659
- var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i1], 2),
17660
- key = _Object$entries2$_i[0],
17661
- mult = _Object$entries2$_i[1];
17825
+ for (var _i11 = 0, _Object$entries4 = Object.entries(gridContainer.grid.rowHeights); _i11 < _Object$entries4.length; _i11++) {
17826
+ var _Object$entries4$_i = _slicedToArray(_Object$entries4[_i11], 2),
17827
+ key = _Object$entries4$_i[0],
17828
+ mult = _Object$entries4$_i[1];
17662
17829
  var rowNum = Number(key);
17663
17830
  if (rowNum === rowNumber) continue;
17664
17831
  shifted[String(rowNum > rowNumber ? rowNum - 1 : rowNum)] = mult;
17665
17832
  }
17666
17833
  gridContainer.grid.rowHeights = Object.keys(shifted).length > 0 ? shifted : undefined;
17667
17834
  }
17835
+
17836
+ // Shift rowModes keys up and remove the deleted row's entry
17837
+ if (gridContainer.grid.rowModes) {
17838
+ var _shifted2 = {};
17839
+ for (var _i12 = 0, _Object$entries5 = Object.entries(gridContainer.grid.rowModes); _i12 < _Object$entries5.length; _i12++) {
17840
+ var _Object$entries5$_i = _slicedToArray(_Object$entries5[_i12], 2),
17841
+ _key13 = _Object$entries5$_i[0],
17842
+ mode = _Object$entries5$_i[1];
17843
+ var _rowNum2 = Number(_key13);
17844
+ if (_rowNum2 === rowNumber) continue;
17845
+ _shifted2[String(_rowNum2 > rowNumber ? _rowNum2 - 1 : _rowNum2)] = mode;
17846
+ }
17847
+ gridContainer.grid.rowModes = Object.keys(_shifted2).length > 0 ? _shifted2 : undefined;
17848
+ }
17668
17849
  this._normalizeGrid(gridContainer.grid);
17669
17850
  this.updateLayoutItem(gridContainer);
17670
17851
  return gridContainer.grid;