@trops/dash-core 0.1.80 → 0.1.82

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
@@ -9419,7 +9419,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
9419
9419
  className: "flex-1 text-center",
9420
9420
  children: /*#__PURE__*/jsxRuntime.jsxs("span", {
9421
9421
  className: "text-xs opacity-40",
9422
- children: ["Step ", inlineWizardStep + 1, " of ", inlineTotalSteps]
9422
+ children: ["Step", " ", inlineWizardStep + 1, " ", "of ", inlineTotalSteps]
9423
9423
  })
9424
9424
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
9425
9425
  className: "flex flex-row gap-2",
@@ -11947,6 +11947,30 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
11947
11947
  } catch (e) {
11948
11948
  }
11949
11949
  }
11950
+ function handleChangeRowSizing(gridContainerId, rowNumber, mode, multiplier) {
11951
+ try {
11952
+ var dashboard = new DashboardModel(currentWorkspace);
11953
+ dashboard.changeRowMode(gridContainerId, rowNumber, mode);
11954
+ if (multiplier !== undefined) {
11955
+ dashboard.changeRowHeight(gridContainerId, rowNumber, multiplier);
11956
+ }
11957
+ var newWorkspace = dashboard.workspace();
11958
+ setCurrentWorkspace(newWorkspace);
11959
+ } catch (e) {
11960
+ }
11961
+ }
11962
+ function handleChangeColMode(gridContainerId, colNumber, mode) {
11963
+ try {
11964
+ var dashboard = new DashboardModel(currentWorkspace);
11965
+ var result = dashboard.changeColMode(gridContainerId, colNumber, mode);
11966
+ if (result) {
11967
+ var newWorkspace = dashboard.workspace();
11968
+ setCurrentWorkspace(newWorkspace);
11969
+ } else {
11970
+ }
11971
+ } catch (e) {
11972
+ }
11973
+ }
11950
11974
 
11951
11975
  /**
11952
11976
  * handle the click of a cell in a grid that does not contain a widget yet
@@ -12033,6 +12057,8 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
12033
12057
  onDeleteGridColumn: handleDeleteGridColumn,
12034
12058
  onChangeRowHeight: handleChangeRowHeight,
12035
12059
  onChangeRowMode: handleChangeRowMode,
12060
+ onChangeRowSizing: handleChangeRowSizing,
12061
+ onChangeColMode: handleChangeColMode,
12036
12062
  onMoveWidgetToCell: handleMoveWidgetToCell,
12037
12063
  onWidgetPopout: onWidgetPopout
12038
12064
  }, "layout-drag-".concat(dashboardId)), preview === false && editMode === "all" && /*#__PURE__*/jsxRuntime.jsx(LayoutDragBuilderEdit, {
@@ -12079,6 +12105,8 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
12079
12105
  onDeleteGridColumn: handleDeleteGridColumn,
12080
12106
  onChangeRowHeight: handleChangeRowHeight,
12081
12107
  onChangeRowMode: handleChangeRowMode,
12108
+ onChangeRowSizing: handleChangeRowSizing,
12109
+ onChangeColMode: handleChangeColMode,
12082
12110
  onMoveWidgetToCell: handleMoveWidgetToCell,
12083
12111
  onDropWidgetFromSidebar: handleDropWidgetFromSidebar
12084
12112
  }, "layout-drag-edit-".concat(dashboardId))]
@@ -12172,6 +12200,10 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
12172
12200
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
12173
12201
  _ref$onChangeRowMode = _ref.onChangeRowMode,
12174
12202
  onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
12203
+ _ref$onChangeRowSizin = _ref.onChangeRowSizing,
12204
+ onChangeRowSizing = _ref$onChangeRowSizin === void 0 ? null : _ref$onChangeRowSizin,
12205
+ _ref$onChangeColMode = _ref.onChangeColMode,
12206
+ onChangeColMode = _ref$onChangeColMode === void 0 ? null : _ref$onChangeColMode,
12175
12207
  _ref$onWidgetPopout = _ref.onWidgetPopout,
12176
12208
  onWidgetPopout = _ref$onWidgetPopout === void 0 ? null : _ref$onWidgetPopout;
12177
12209
  return isDraggable === true ? /*#__PURE__*/jsxRuntime.jsx(reactDnd.DndProvider, {
@@ -12205,6 +12237,8 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
12205
12237
  onDeleteGridColumn: onDeleteGridColumn,
12206
12238
  onChangeRowHeight: onChangeRowHeight,
12207
12239
  onChangeRowMode: onChangeRowMode,
12240
+ onChangeRowSizing: onChangeRowSizing,
12241
+ onChangeColMode: onChangeColMode,
12208
12242
  onWidgetPopout: onWidgetPopout
12209
12243
  })
12210
12244
  }, "dnd-provider") : _renderLayout({
@@ -12236,6 +12270,7 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
12236
12270
  onDeleteGridColumn: onDeleteGridColumn,
12237
12271
  onChangeRowHeight: onChangeRowHeight,
12238
12272
  onChangeRowMode: onChangeRowMode,
12273
+ onChangeColMode: onChangeColMode,
12239
12274
  onWidgetPopout: onWidgetPopout
12240
12275
  });
12241
12276
  };
@@ -12286,6 +12321,10 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
12286
12321
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
12287
12322
  _ref$onChangeRowMode = _ref.onChangeRowMode,
12288
12323
  onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
12324
+ _ref$onChangeRowSizin = _ref.onChangeRowSizing,
12325
+ onChangeRowSizing = _ref$onChangeRowSizin === void 0 ? null : _ref$onChangeRowSizin,
12326
+ _ref$onChangeColMode = _ref.onChangeColMode,
12327
+ onChangeColMode = _ref$onChangeColMode === void 0 ? null : _ref$onChangeColMode,
12289
12328
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
12290
12329
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
12291
12330
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -12325,6 +12364,8 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
12325
12364
  onDeleteGridColumn: onDeleteGridColumn,
12326
12365
  onChangeRowHeight: onChangeRowHeight,
12327
12366
  onChangeRowMode: onChangeRowMode,
12367
+ onChangeRowSizing: onChangeRowSizing,
12368
+ onChangeColMode: onChangeColMode,
12328
12369
  onMoveWidgetToCell: onMoveWidgetToCell,
12329
12370
  onDropWidgetFromSidebar: onDropWidgetFromSidebar
12330
12371
  });
@@ -14552,11 +14593,13 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
14552
14593
  _ref3$onAddGridColumn = _ref3.onAddGridColumn,
14553
14594
  onAddGridColumn = _ref3$onAddGridColumn === void 0 ? null : _ref3$onAddGridColumn,
14554
14595
  _ref3$onDeleteGridCol = _ref3.onDeleteGridColumn,
14555
- onDeleteGridColumn = _ref3$onDeleteGridCol === void 0 ? null : _ref3$onDeleteGridCol,
14556
- _ref3$onChangeRowHeig = _ref3.onChangeRowHeight,
14557
- onChangeRowHeight = _ref3$onChangeRowHeig === void 0 ? null : _ref3$onChangeRowHeig,
14558
- _ref3$onChangeRowMode = _ref3.onChangeRowMode,
14559
- onChangeRowMode = _ref3$onChangeRowMode === void 0 ? null : _ref3$onChangeRowMode,
14596
+ onDeleteGridColumn = _ref3$onDeleteGridCol === void 0 ? null : _ref3$onDeleteGridCol;
14597
+ _ref3.onChangeRowHeight;
14598
+ _ref3.onChangeRowMode;
14599
+ var _ref3$onChangeRowSizi = _ref3.onChangeRowSizing,
14600
+ onChangeRowSizing = _ref3$onChangeRowSizi === void 0 ? null : _ref3$onChangeRowSizi,
14601
+ _ref3$onChangeColMode = _ref3.onChangeColMode,
14602
+ onChangeColMode = _ref3$onChangeColMode === void 0 ? null : _ref3$onChangeColMode,
14560
14603
  _ref3$onMoveWidgetToC = _ref3.onMoveWidgetToCell,
14561
14604
  onMoveWidgetToCell = _ref3$onMoveWidgetToC === void 0 ? null : _ref3$onMoveWidgetToC,
14562
14605
  _ref3$onDropWidgetFro = _ref3.onDropWidgetFromSidebar,
@@ -14636,26 +14679,6 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
14636
14679
  return ((_item$grid$rowModes = item.grid.rowModes) === null || _item$grid$rowModes === void 0 ? void 0 : _item$grid$rowModes[String(row)]) || "fixed";
14637
14680
  }
14638
14681
 
14639
- // Unified cycle: shrink → grow → fixed 1x → fixed 2x → fixed 3x → shrink
14640
- function handleCycleRowSizing(row) {
14641
- var mode = getRowMode(row);
14642
- var mult = getRowMultiplier(row);
14643
- if (mode === "shrink") {
14644
- // shrink → grow
14645
- if (onChangeRowMode) onChangeRowMode(id, row, "grow");
14646
- } else if (mode === "grow") {
14647
- // grow → fixed 1x
14648
- if (onChangeRowMode) onChangeRowMode(id, row, "fixed");
14649
- } else {
14650
- // fixed: cycle 1x → 2x → 3x → shrink
14651
- if (mult >= 3) {
14652
- if (onChangeRowMode) onChangeRowMode(id, row, "shrink");
14653
- } else {
14654
- if (onChangeRowHeight) onChangeRowHeight(id, row, mult + 1);
14655
- }
14656
- }
14657
- }
14658
-
14659
14682
  // Get display label and color for current row sizing
14660
14683
  function getRowSizingDisplay(row) {
14661
14684
  var mode = getRowMode(row);
@@ -14677,26 +14700,224 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
14677
14700
  };
14678
14701
  }
14679
14702
 
14680
- // Modal state for grid operations
14681
- var _useState = React.useState(false),
14703
+ // Compute column template tracks respecting colModes
14704
+ function getColTemplate(grid) {
14705
+ var modes = grid.colModes || {};
14706
+ var tracks = [];
14707
+ for (var c = 1; c <= grid.cols; c++) {
14708
+ var mode = modes[String(c)] || "grow";
14709
+ switch (mode) {
14710
+ case "shrink":
14711
+ tracks.push("auto");
14712
+ break;
14713
+ case "1/4":
14714
+ tracks.push("25%");
14715
+ break;
14716
+ case "1/3":
14717
+ tracks.push("33.333%");
14718
+ break;
14719
+ case "1/2":
14720
+ tracks.push("50%");
14721
+ break;
14722
+ case "2/3":
14723
+ tracks.push("66.667%");
14724
+ break;
14725
+ default:
14726
+ tracks.push("minmax(0, 1fr)");
14727
+ break;
14728
+ }
14729
+ }
14730
+ return tracks.join(" ");
14731
+ }
14732
+ function hasExplicitColModes() {
14733
+ if (!hasGrid) return false;
14734
+ var modes = item.grid.colModes;
14735
+ return modes && Object.keys(modes).length > 0;
14736
+ }
14737
+ function getColMode(col) {
14738
+ var _item$grid$colModes;
14739
+ if (!hasGrid) return "grow";
14740
+ return ((_item$grid$colModes = item.grid.colModes) === null || _item$grid$colModes === void 0 ? void 0 : _item$grid$colModes[String(col)]) || "grow";
14741
+ }
14742
+ function getColSizingDisplay(col) {
14743
+ var mode = getColMode(col);
14744
+ if (mode === "shrink") return {
14745
+ label: "S",
14746
+ color: "text-amber-400",
14747
+ hoverBg: "hover:bg-amber-400/10"
14748
+ };
14749
+ if (mode === "1/4") return {
14750
+ label: "1/4",
14751
+ color: "text-blue-400",
14752
+ hoverBg: "hover:bg-blue-400/10"
14753
+ };
14754
+ if (mode === "1/3") return {
14755
+ label: "1/3",
14756
+ color: "text-blue-400",
14757
+ hoverBg: "hover:bg-blue-400/10"
14758
+ };
14759
+ if (mode === "1/2") return {
14760
+ label: "1/2",
14761
+ color: "text-blue-400",
14762
+ hoverBg: "hover:bg-blue-400/10"
14763
+ };
14764
+ if (mode === "2/3") return {
14765
+ label: "2/3",
14766
+ color: "text-blue-400",
14767
+ hoverBg: "hover:bg-blue-400/10"
14768
+ };
14769
+ // default: grow
14770
+ return {
14771
+ label: "G",
14772
+ color: "text-green-400",
14773
+ hoverBg: "hover:bg-green-400/10"
14774
+ };
14775
+ }
14776
+
14777
+ // Sizing popover state
14778
+ var _useState = React.useState(null),
14682
14779
  _useState2 = _slicedToArray(_useState, 2),
14683
- mergeModalOpen = _useState2[0],
14684
- setMergeModalOpen = _useState2[1];
14685
- var _useState3 = React.useState([]),
14780
+ sizingPopover = _useState2[0],
14781
+ setSizingPopover = _useState2[1]; // { type: "row"|"col", index: number }
14782
+ var popoverRef = React.useRef(null);
14783
+ var popoverTriggerRef = React.useRef(null);
14784
+ React.useEffect(function () {
14785
+ if (!sizingPopover) return;
14786
+ function handleClickOutside(e) {
14787
+ if (popoverRef.current && !popoverRef.current.contains(e.target) && popoverTriggerRef.current && !popoverTriggerRef.current.contains(e.target)) {
14788
+ setSizingPopover(null);
14789
+ }
14790
+ }
14791
+ function handleEscape(e) {
14792
+ if (e.key === "Escape") setSizingPopover(null);
14793
+ }
14794
+ document.addEventListener("mousedown", handleClickOutside);
14795
+ document.addEventListener("keydown", handleEscape);
14796
+ return function () {
14797
+ document.removeEventListener("mousedown", handleClickOutside);
14798
+ document.removeEventListener("keydown", handleEscape);
14799
+ };
14800
+ }, [sizingPopover]);
14801
+ var ROW_OPTIONS = [{
14802
+ mode: "shrink",
14803
+ label: "S"
14804
+ }, {
14805
+ mode: "grow",
14806
+ label: "G"
14807
+ }, {
14808
+ mode: "fixed-1",
14809
+ label: "1x"
14810
+ }, {
14811
+ mode: "fixed-2",
14812
+ label: "2x"
14813
+ }, {
14814
+ mode: "fixed-3",
14815
+ label: "3x"
14816
+ }];
14817
+ var COL_OPTIONS = [{
14818
+ mode: "grow",
14819
+ label: "G"
14820
+ }, {
14821
+ mode: "shrink",
14822
+ label: "S"
14823
+ }, {
14824
+ mode: "1/4",
14825
+ label: "1/4"
14826
+ }, {
14827
+ mode: "1/3",
14828
+ label: "1/3"
14829
+ }, {
14830
+ mode: "1/2",
14831
+ label: "1/2"
14832
+ }, {
14833
+ mode: "2/3",
14834
+ label: "2/3"
14835
+ }];
14836
+ function getActiveRowOption(row) {
14837
+ var mode = getRowMode(row);
14838
+ var mult = getRowMultiplier(row);
14839
+ if (mode === "shrink") return "shrink";
14840
+ if (mode === "grow") return "grow";
14841
+ return "fixed-".concat(mult);
14842
+ }
14843
+ function handleRowOptionSelect(row, optionMode) {
14844
+ if (onChangeRowSizing) {
14845
+ if (optionMode === "shrink" || optionMode === "grow") {
14846
+ onChangeRowSizing(id, row, optionMode);
14847
+ } else if (optionMode.startsWith("fixed-")) {
14848
+ var mult = Number(optionMode.split("-")[1]);
14849
+ onChangeRowSizing(id, row, "fixed", mult);
14850
+ }
14851
+ }
14852
+ }
14853
+ function handleColOptionSelect(col, optionMode) {
14854
+ if (onChangeColMode) onChangeColMode(id, col, optionMode);
14855
+ }
14856
+ function getOptionColor(optionMode, type) {
14857
+ if (type === "row") {
14858
+ if (optionMode === "shrink") return "text-amber-400";
14859
+ if (optionMode === "grow") return "text-green-400";
14860
+ return "text-blue-400";
14861
+ }
14862
+ // col
14863
+ if (optionMode === "grow") return "text-green-400";
14864
+ if (optionMode === "shrink") return "text-amber-400";
14865
+ return "text-blue-400";
14866
+ }
14867
+ function renderSizingPopover(type, index, triggerEl) {
14868
+ if (!sizingPopover || sizingPopover.type !== type || sizingPopover.index !== index) return null;
14869
+ var options = type === "row" ? ROW_OPTIONS : COL_OPTIONS;
14870
+ var activeMode = type === "row" ? getActiveRowOption(index) : getColMode(index);
14871
+ var isRow = type === "row";
14872
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
14873
+ ref: popoverRef,
14874
+ className: "absolute z-50 bg-gray-800 border border-gray-600 rounded-lg shadow-xl p-1 flex flex-row gap-0.5",
14875
+ style: isRow ? {
14876
+ left: "100%",
14877
+ top: "50%",
14878
+ transform: "translateY(-50%)",
14879
+ marginLeft: 4
14880
+ } : {
14881
+ top: "100%",
14882
+ left: "50%",
14883
+ transform: "translateX(-50%)",
14884
+ marginTop: 4
14885
+ },
14886
+ children: options.map(function (opt) {
14887
+ var isActive = opt.mode === activeMode;
14888
+ var color = getOptionColor(opt.mode, type);
14889
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
14890
+ className: "px-1.5 py-0.5 rounded text-[10px] font-mono font-bold transition-all whitespace-nowrap ".concat(isActive ? "".concat(color, " bg-white/20") : "text-gray-400 hover:text-gray-200 hover:bg-white/10"),
14891
+ onClick: function onClick() {
14892
+ if (type === "row") handleRowOptionSelect(index, opt.mode);else handleColOptionSelect(index, opt.mode);
14893
+ },
14894
+ title: opt.label,
14895
+ children: opt.label
14896
+ }, opt.mode);
14897
+ })
14898
+ });
14899
+ }
14900
+
14901
+ // Modal state for grid operations
14902
+ var _useState3 = React.useState(false),
14686
14903
  _useState4 = _slicedToArray(_useState3, 2),
14687
- selectedCellsForMerge = _useState4[0],
14688
- setSelectedCellsForMerge = _useState4[1];
14689
- var _useState5 = React.useState(null),
14904
+ mergeModalOpen = _useState4[0],
14905
+ setMergeModalOpen = _useState4[1];
14906
+ var _useState5 = React.useState([]),
14690
14907
  _useState6 = _slicedToArray(_useState5, 2),
14691
- contextMenuCell = _useState6[0],
14692
- setContextMenuCell = _useState6[1];
14693
- var _useState7 = React.useState({
14908
+ selectedCellsForMerge = _useState6[0],
14909
+ setSelectedCellsForMerge = _useState6[1];
14910
+ var _useState7 = React.useState(null),
14911
+ _useState8 = _slicedToArray(_useState7, 2),
14912
+ contextMenuCell = _useState8[0],
14913
+ setContextMenuCell = _useState8[1];
14914
+ var _useState9 = React.useState({
14694
14915
  x: 0,
14695
14916
  y: 0
14696
14917
  }),
14697
- _useState8 = _slicedToArray(_useState7, 2),
14698
- contextMenuPosition = _useState8[0],
14699
- setContextMenuPosition = _useState8[1];
14918
+ _useState0 = _slicedToArray(_useState9, 2),
14919
+ contextMenuPosition = _useState0[0],
14920
+ setContextMenuPosition = _useState0[1];
14700
14921
 
14701
14922
  // Grid operation handlers
14702
14923
  function handleInstantSplit(cellNumber, direction) {
@@ -14982,16 +15203,20 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
14982
15203
  label = _getRowSizingDisplay.label,
14983
15204
  color = _getRowSizingDisplay.color,
14984
15205
  hoverBg = _getRowSizingDisplay.hoverBg;
14985
- var mode = getRowMode(row);
14986
- var mult = getRowMultiplier(row);
14987
- var titleParts = mode === "shrink" ? "Shrink (auto)" : mode === "grow" ? "Grow (1fr)" : "Fixed ".concat(mult, "x");
14988
- return /*#__PURE__*/jsxRuntime.jsx("button", {
14989
- 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"),
14990
- onClick: function onClick() {
14991
- return handleCycleRowSizing(row);
14992
- },
14993
- title: "Row sizing: ".concat(titleParts, " (click to cycle)"),
14994
- children: label
15206
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
15207
+ className: "relative",
15208
+ children: [/*#__PURE__*/jsxRuntime.jsx("button", {
15209
+ ref: (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "row" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === row ? popoverTriggerRef : undefined,
15210
+ className: "w-5 h-5 flex items-center justify-center rounded text-[10px] ".concat(color, " ").concat((sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "row" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === row ? "opacity-100" : "opacity-40", " hover:opacity-100 ").concat(hoverBg, " transition-all font-mono font-bold select-none"),
15211
+ onClick: function onClick() {
15212
+ return setSizingPopover((sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "row" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === row ? null : {
15213
+ type: "row",
15214
+ index: row
15215
+ });
15216
+ },
15217
+ title: "Row sizing (click to change)",
15218
+ children: label
15219
+ }), renderSizingPopover("row", row)]
14995
15220
  });
14996
15221
  }(), /*#__PURE__*/jsxRuntime.jsx("button", {
14997
15222
  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",
@@ -15074,7 +15299,27 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
15074
15299
  }), /*#__PURE__*/jsxRuntime.jsxs("span", {
15075
15300
  className: "text-[11px] text-gray-400 group-hover:text-gray-200 select-none font-mono font-medium",
15076
15301
  children: ["C", col]
15077
- }), /*#__PURE__*/jsxRuntime.jsx("button", {
15302
+ }), function () {
15303
+ var _getColSizingDisplay = getColSizingDisplay(col),
15304
+ label = _getColSizingDisplay.label,
15305
+ color = _getColSizingDisplay.color,
15306
+ hoverBg = _getColSizingDisplay.hoverBg;
15307
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
15308
+ className: "relative",
15309
+ children: [/*#__PURE__*/jsxRuntime.jsx("button", {
15310
+ ref: (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "col" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === col ? popoverTriggerRef : undefined,
15311
+ className: "w-5 h-5 flex items-center justify-center rounded text-[10px] ".concat(color, " ").concat((sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "col" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === col ? "opacity-100" : "opacity-40", " hover:opacity-100 ").concat(hoverBg, " transition-all font-mono font-bold select-none"),
15312
+ onClick: function onClick() {
15313
+ return setSizingPopover((sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "col" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === col ? null : {
15314
+ type: "col",
15315
+ index: col
15316
+ });
15317
+ },
15318
+ title: "Column sizing (click to change)",
15319
+ children: label
15320
+ }), renderSizingPopover("col", col)]
15321
+ });
15322
+ }(), /*#__PURE__*/jsxRuntime.jsx("button", {
15078
15323
  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",
15079
15324
  onClick: function onClick() {
15080
15325
  return handleAddColumn(col);
@@ -15112,7 +15357,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
15112
15357
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
15113
15358
  className: "grid flex-1",
15114
15359
  style: {
15115
- gridTemplateColumns: "repeat(".concat(cols, ", 1fr)"),
15360
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(cols, ", 1fr)"),
15116
15361
  gap: GRID_GAP
15117
15362
  },
15118
15363
  children: colItems
@@ -15455,7 +15700,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
15455
15700
  className: "grid flex-1 min-h-24 p-4 gap-5",
15456
15701
  style: {
15457
15702
  gridTemplateRows: getRowTemplate(item.grid),
15458
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)")
15703
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)")
15459
15704
  },
15460
15705
  children: renderGridCells()
15461
15706
  })]
@@ -15469,7 +15714,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
15469
15714
  className: "grid flex-1 p-4 gap-5",
15470
15715
  style: {
15471
15716
  gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
15472
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
15717
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)"),
15473
15718
  overflow: "hidden"
15474
15719
  },
15475
15720
  children: renderGridCells()
@@ -15569,7 +15814,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
15569
15814
  className: "grid w-full min-h-24 p-3 ".concat(item.grid.gap || "gap-2"),
15570
15815
  style: {
15571
15816
  gridTemplateRows: getRowTemplate(item.grid),
15572
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
15817
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)"),
15573
15818
  overflow: "auto"
15574
15819
  },
15575
15820
  children: renderGridCells()
@@ -15580,7 +15825,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
15580
15825
  className: "absolute inset-0 grid p-3 ".concat(item.grid.gap || "gap-2"),
15581
15826
  style: {
15582
15827
  gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
15583
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
15828
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)"),
15584
15829
  overflow: "hidden"
15585
15830
  },
15586
15831
  children: renderGridCells()
@@ -15674,6 +15919,10 @@ var _renderLayout = function renderLayout(_ref) {
15674
15919
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
15675
15920
  _ref$onChangeRowMode = _ref.onChangeRowMode,
15676
15921
  onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
15922
+ _ref$onChangeRowSizin = _ref.onChangeRowSizing,
15923
+ onChangeRowSizing = _ref$onChangeRowSizin === void 0 ? null : _ref$onChangeRowSizin,
15924
+ _ref$onChangeColMode = _ref.onChangeColMode,
15925
+ onChangeColMode = _ref$onChangeColMode === void 0 ? null : _ref$onChangeColMode,
15677
15926
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
15678
15927
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
15679
15928
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -15744,6 +15993,8 @@ var _renderLayout = function renderLayout(_ref) {
15744
15993
  onDeleteGridColumn: onDeleteGridColumn,
15745
15994
  onChangeRowHeight: onChangeRowHeight,
15746
15995
  onChangeRowMode: onChangeRowMode,
15996
+ onChangeRowSizing: onChangeRowSizing,
15997
+ onChangeColMode: onChangeColMode,
15747
15998
  onMoveWidgetToCell: onMoveWidgetToCell,
15748
15999
  onDropWidgetFromSidebar: onDropWidgetFromSidebar,
15749
16000
  onWidgetPopout: onWidgetPopout,
@@ -15782,6 +16033,8 @@ var _renderLayout = function renderLayout(_ref) {
15782
16033
  onDeleteGridColumn: onDeleteGridColumn,
15783
16034
  onChangeRowHeight: onChangeRowHeight,
15784
16035
  onChangeRowMode: onChangeRowMode,
16036
+ onChangeRowSizing: onChangeRowSizing,
16037
+ onChangeColMode: onChangeColMode,
15785
16038
  onMoveWidgetToCell: onMoveWidgetToCell,
15786
16039
  onDropWidgetFromSidebar: onDropWidgetFromSidebar,
15787
16040
  onWidgetPopout: onWidgetPopout
@@ -19283,6 +19536,40 @@ var DashboardModel = /*#__PURE__*/function () {
19283
19536
  }
19284
19537
  }
19285
19538
 
19539
+ /**
19540
+ * Change the sizing mode for a column
19541
+ * @param {String} itemId The id of the grid container
19542
+ * @param {Number} colNumber The column number (1-indexed)
19543
+ * @param {String} mode The sizing mode: "grow" (default), "shrink", "1/4", "1/3", "1/2", "2/3"
19544
+ * @returns {Object} Updated grid or null on error
19545
+ */
19546
+ }, {
19547
+ key: "changeColMode",
19548
+ value: function changeColMode(itemId, colNumber, mode) {
19549
+ try {
19550
+ var gridContainer = this.getComponentById(itemId);
19551
+ if (!gridContainer || !gridContainer.grid) {
19552
+ return null;
19553
+ }
19554
+ var grid = gridContainer.grid;
19555
+ grid.colModes = grid.colModes || {};
19556
+ if (mode === "grow" || !mode) {
19557
+ delete grid.colModes[String(colNumber)];
19558
+ } else {
19559
+ grid.colModes[String(colNumber)] = mode;
19560
+ }
19561
+
19562
+ // Clean up empty object
19563
+ if (Object.keys(grid.colModes).length === 0) {
19564
+ delete grid.colModes;
19565
+ }
19566
+ this.updateLayoutItem(gridContainer);
19567
+ return grid;
19568
+ } catch (e) {
19569
+ return null;
19570
+ }
19571
+ }
19572
+
19286
19573
  /**
19287
19574
  * Add a new column to the grid
19288
19575
  * @param {Number} itemId The id of the grid container
@@ -19321,6 +19608,19 @@ var DashboardModel = /*#__PURE__*/function () {
19321
19608
  hide: false
19322
19609
  };
19323
19610
  }
19611
+
19612
+ // Shift colModes keys right (columns after insertion point move +1)
19613
+ if (gridContainer.grid.colModes) {
19614
+ var shifted = {};
19615
+ for (var _i13 = 0, _Object$entries6 = Object.entries(gridContainer.grid.colModes); _i13 < _Object$entries6.length; _i13++) {
19616
+ var _Object$entries6$_i = _slicedToArray(_Object$entries6[_i13], 2),
19617
+ key = _Object$entries6$_i[0],
19618
+ mode = _Object$entries6$_i[1];
19619
+ var colNum = Number(key);
19620
+ shifted[String(colNum >= newColNumber ? colNum + 1 : colNum)] = mode;
19621
+ }
19622
+ gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
19623
+ }
19324
19624
  this._normalizeGrid(gridContainer.grid);
19325
19625
  this.updateLayoutItem(gridContainer);
19326
19626
  return gridContainer.grid;
@@ -19368,6 +19668,20 @@ var DashboardModel = /*#__PURE__*/function () {
19368
19668
  }
19369
19669
  }
19370
19670
  gridContainer.grid.cols -= 1;
19671
+
19672
+ // Shift colModes keys left and remove the deleted column's entry
19673
+ if (gridContainer.grid.colModes) {
19674
+ var shifted = {};
19675
+ for (var _i14 = 0, _Object$entries7 = Object.entries(gridContainer.grid.colModes); _i14 < _Object$entries7.length; _i14++) {
19676
+ var _Object$entries7$_i = _slicedToArray(_Object$entries7[_i14], 2),
19677
+ key = _Object$entries7$_i[0],
19678
+ mode = _Object$entries7$_i[1];
19679
+ var colNum = Number(key);
19680
+ if (colNum === colNumber) continue;
19681
+ shifted[String(colNum > colNumber ? colNum - 1 : colNum)] = mode;
19682
+ }
19683
+ gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
19684
+ }
19371
19685
  this._normalizeGrid(gridContainer.grid);
19372
19686
  this.updateLayoutItem(gridContainer);
19373
19687
  return gridContainer.grid;