@trops/dash-core 0.1.81 → 0.1.83

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
@@ -11928,6 +11928,30 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
11928
11928
  } catch (e) {
11929
11929
  }
11930
11930
  }
11931
+ function handleChangeRowSizing(gridContainerId, rowNumber, mode, multiplier) {
11932
+ try {
11933
+ var dashboard = new DashboardModel(currentWorkspace);
11934
+ dashboard.changeRowMode(gridContainerId, rowNumber, mode);
11935
+ if (multiplier !== undefined) {
11936
+ dashboard.changeRowHeight(gridContainerId, rowNumber, multiplier);
11937
+ }
11938
+ var newWorkspace = dashboard.workspace();
11939
+ setCurrentWorkspace(newWorkspace);
11940
+ } catch (e) {
11941
+ }
11942
+ }
11943
+ function handleChangeColMode(gridContainerId, colNumber, mode) {
11944
+ try {
11945
+ var dashboard = new DashboardModel(currentWorkspace);
11946
+ var result = dashboard.changeColMode(gridContainerId, colNumber, mode);
11947
+ if (result) {
11948
+ var newWorkspace = dashboard.workspace();
11949
+ setCurrentWorkspace(newWorkspace);
11950
+ } else {
11951
+ }
11952
+ } catch (e) {
11953
+ }
11954
+ }
11931
11955
 
11932
11956
  /**
11933
11957
  * handle the click of a cell in a grid that does not contain a widget yet
@@ -12014,6 +12038,8 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
12014
12038
  onDeleteGridColumn: handleDeleteGridColumn,
12015
12039
  onChangeRowHeight: handleChangeRowHeight,
12016
12040
  onChangeRowMode: handleChangeRowMode,
12041
+ onChangeRowSizing: handleChangeRowSizing,
12042
+ onChangeColMode: handleChangeColMode,
12017
12043
  onMoveWidgetToCell: handleMoveWidgetToCell,
12018
12044
  onWidgetPopout: onWidgetPopout
12019
12045
  }, "layout-drag-".concat(dashboardId)), preview === false && editMode === "all" && /*#__PURE__*/jsx(LayoutDragBuilderEdit, {
@@ -12060,6 +12086,8 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
12060
12086
  onDeleteGridColumn: handleDeleteGridColumn,
12061
12087
  onChangeRowHeight: handleChangeRowHeight,
12062
12088
  onChangeRowMode: handleChangeRowMode,
12089
+ onChangeRowSizing: handleChangeRowSizing,
12090
+ onChangeColMode: handleChangeColMode,
12063
12091
  onMoveWidgetToCell: handleMoveWidgetToCell,
12064
12092
  onDropWidgetFromSidebar: handleDropWidgetFromSidebar
12065
12093
  }, "layout-drag-edit-".concat(dashboardId))]
@@ -12153,6 +12181,10 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
12153
12181
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
12154
12182
  _ref$onChangeRowMode = _ref.onChangeRowMode,
12155
12183
  onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
12184
+ _ref$onChangeRowSizin = _ref.onChangeRowSizing,
12185
+ onChangeRowSizing = _ref$onChangeRowSizin === void 0 ? null : _ref$onChangeRowSizin,
12186
+ _ref$onChangeColMode = _ref.onChangeColMode,
12187
+ onChangeColMode = _ref$onChangeColMode === void 0 ? null : _ref$onChangeColMode,
12156
12188
  _ref$onWidgetPopout = _ref.onWidgetPopout,
12157
12189
  onWidgetPopout = _ref$onWidgetPopout === void 0 ? null : _ref$onWidgetPopout;
12158
12190
  return isDraggable === true ? /*#__PURE__*/jsx(DndProvider, {
@@ -12186,6 +12218,8 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
12186
12218
  onDeleteGridColumn: onDeleteGridColumn,
12187
12219
  onChangeRowHeight: onChangeRowHeight,
12188
12220
  onChangeRowMode: onChangeRowMode,
12221
+ onChangeRowSizing: onChangeRowSizing,
12222
+ onChangeColMode: onChangeColMode,
12189
12223
  onWidgetPopout: onWidgetPopout
12190
12224
  })
12191
12225
  }, "dnd-provider") : _renderLayout({
@@ -12217,6 +12251,7 @@ var LayoutDragBuilder = function LayoutDragBuilder(_ref) {
12217
12251
  onDeleteGridColumn: onDeleteGridColumn,
12218
12252
  onChangeRowHeight: onChangeRowHeight,
12219
12253
  onChangeRowMode: onChangeRowMode,
12254
+ onChangeColMode: onChangeColMode,
12220
12255
  onWidgetPopout: onWidgetPopout
12221
12256
  });
12222
12257
  };
@@ -12267,6 +12302,10 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
12267
12302
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
12268
12303
  _ref$onChangeRowMode = _ref.onChangeRowMode,
12269
12304
  onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
12305
+ _ref$onChangeRowSizin = _ref.onChangeRowSizing,
12306
+ onChangeRowSizing = _ref$onChangeRowSizin === void 0 ? null : _ref$onChangeRowSizin,
12307
+ _ref$onChangeColMode = _ref.onChangeColMode,
12308
+ onChangeColMode = _ref$onChangeColMode === void 0 ? null : _ref$onChangeColMode,
12270
12309
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
12271
12310
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
12272
12311
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -12306,6 +12345,8 @@ var LayoutDragBuilderEdit = function LayoutDragBuilderEdit(_ref) {
12306
12345
  onDeleteGridColumn: onDeleteGridColumn,
12307
12346
  onChangeRowHeight: onChangeRowHeight,
12308
12347
  onChangeRowMode: onChangeRowMode,
12348
+ onChangeRowSizing: onChangeRowSizing,
12349
+ onChangeColMode: onChangeColMode,
12309
12350
  onMoveWidgetToCell: onMoveWidgetToCell,
12310
12351
  onDropWidgetFromSidebar: onDropWidgetFromSidebar
12311
12352
  });
@@ -14533,11 +14574,13 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
14533
14574
  _ref3$onAddGridColumn = _ref3.onAddGridColumn,
14534
14575
  onAddGridColumn = _ref3$onAddGridColumn === void 0 ? null : _ref3$onAddGridColumn,
14535
14576
  _ref3$onDeleteGridCol = _ref3.onDeleteGridColumn,
14536
- onDeleteGridColumn = _ref3$onDeleteGridCol === void 0 ? null : _ref3$onDeleteGridCol,
14537
- _ref3$onChangeRowHeig = _ref3.onChangeRowHeight,
14538
- onChangeRowHeight = _ref3$onChangeRowHeig === void 0 ? null : _ref3$onChangeRowHeig,
14539
- _ref3$onChangeRowMode = _ref3.onChangeRowMode,
14540
- onChangeRowMode = _ref3$onChangeRowMode === void 0 ? null : _ref3$onChangeRowMode,
14577
+ onDeleteGridColumn = _ref3$onDeleteGridCol === void 0 ? null : _ref3$onDeleteGridCol;
14578
+ _ref3.onChangeRowHeight;
14579
+ _ref3.onChangeRowMode;
14580
+ var _ref3$onChangeRowSizi = _ref3.onChangeRowSizing,
14581
+ onChangeRowSizing = _ref3$onChangeRowSizi === void 0 ? null : _ref3$onChangeRowSizi,
14582
+ _ref3$onChangeColMode = _ref3.onChangeColMode,
14583
+ onChangeColMode = _ref3$onChangeColMode === void 0 ? null : _ref3$onChangeColMode,
14541
14584
  _ref3$onMoveWidgetToC = _ref3.onMoveWidgetToCell,
14542
14585
  onMoveWidgetToCell = _ref3$onMoveWidgetToC === void 0 ? null : _ref3$onMoveWidgetToC,
14543
14586
  _ref3$onDropWidgetFro = _ref3.onDropWidgetFromSidebar,
@@ -14617,26 +14660,6 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
14617
14660
  return ((_item$grid$rowModes = item.grid.rowModes) === null || _item$grid$rowModes === void 0 ? void 0 : _item$grid$rowModes[String(row)]) || "fixed";
14618
14661
  }
14619
14662
 
14620
- // Unified cycle: shrink → grow → fixed 1x → fixed 2x → fixed 3x → shrink
14621
- function handleCycleRowSizing(row) {
14622
- var mode = getRowMode(row);
14623
- var mult = getRowMultiplier(row);
14624
- if (mode === "shrink") {
14625
- // shrink → grow
14626
- if (onChangeRowMode) onChangeRowMode(id, row, "grow");
14627
- } else if (mode === "grow") {
14628
- // grow → fixed 1x
14629
- if (onChangeRowMode) onChangeRowMode(id, row, "fixed");
14630
- } else {
14631
- // fixed: cycle 1x → 2x → 3x → shrink
14632
- if (mult >= 3) {
14633
- if (onChangeRowMode) onChangeRowMode(id, row, "shrink");
14634
- } else {
14635
- if (onChangeRowHeight) onChangeRowHeight(id, row, mult + 1);
14636
- }
14637
- }
14638
- }
14639
-
14640
14663
  // Get display label and color for current row sizing
14641
14664
  function getRowSizingDisplay(row) {
14642
14665
  var mode = getRowMode(row);
@@ -14658,26 +14681,224 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
14658
14681
  };
14659
14682
  }
14660
14683
 
14661
- // Modal state for grid operations
14662
- var _useState = useState(false),
14684
+ // Compute column template tracks respecting colModes
14685
+ function getColTemplate(grid) {
14686
+ var modes = grid.colModes || {};
14687
+ var tracks = [];
14688
+ for (var c = 1; c <= grid.cols; c++) {
14689
+ var mode = modes[String(c)] || "grow";
14690
+ switch (mode) {
14691
+ case "shrink":
14692
+ tracks.push("auto");
14693
+ break;
14694
+ case "1/4":
14695
+ tracks.push("25%");
14696
+ break;
14697
+ case "1/3":
14698
+ tracks.push("33.333%");
14699
+ break;
14700
+ case "1/2":
14701
+ tracks.push("50%");
14702
+ break;
14703
+ case "2/3":
14704
+ tracks.push("66.667%");
14705
+ break;
14706
+ default:
14707
+ tracks.push("minmax(0, 1fr)");
14708
+ break;
14709
+ }
14710
+ }
14711
+ return tracks.join(" ");
14712
+ }
14713
+ function hasExplicitColModes() {
14714
+ if (!hasGrid) return false;
14715
+ var modes = item.grid.colModes;
14716
+ return modes && Object.keys(modes).length > 0;
14717
+ }
14718
+ function getColMode(col) {
14719
+ var _item$grid$colModes;
14720
+ if (!hasGrid) return "grow";
14721
+ return ((_item$grid$colModes = item.grid.colModes) === null || _item$grid$colModes === void 0 ? void 0 : _item$grid$colModes[String(col)]) || "grow";
14722
+ }
14723
+ function getColSizingDisplay(col) {
14724
+ var mode = getColMode(col);
14725
+ if (mode === "shrink") return {
14726
+ label: "S",
14727
+ color: "text-amber-400",
14728
+ hoverBg: "hover:bg-amber-400/10"
14729
+ };
14730
+ if (mode === "1/4") return {
14731
+ label: "1/4",
14732
+ color: "text-blue-400",
14733
+ hoverBg: "hover:bg-blue-400/10"
14734
+ };
14735
+ if (mode === "1/3") return {
14736
+ label: "1/3",
14737
+ color: "text-blue-400",
14738
+ hoverBg: "hover:bg-blue-400/10"
14739
+ };
14740
+ if (mode === "1/2") return {
14741
+ label: "1/2",
14742
+ color: "text-blue-400",
14743
+ hoverBg: "hover:bg-blue-400/10"
14744
+ };
14745
+ if (mode === "2/3") return {
14746
+ label: "2/3",
14747
+ color: "text-blue-400",
14748
+ hoverBg: "hover:bg-blue-400/10"
14749
+ };
14750
+ // default: grow
14751
+ return {
14752
+ label: "G",
14753
+ color: "text-green-400",
14754
+ hoverBg: "hover:bg-green-400/10"
14755
+ };
14756
+ }
14757
+
14758
+ // Sizing popover state
14759
+ var _useState = useState(null),
14663
14760
  _useState2 = _slicedToArray(_useState, 2),
14664
- mergeModalOpen = _useState2[0],
14665
- setMergeModalOpen = _useState2[1];
14666
- var _useState3 = useState([]),
14761
+ sizingPopover = _useState2[0],
14762
+ setSizingPopover = _useState2[1]; // { type: "row"|"col", index: number }
14763
+ var popoverRef = useRef(null);
14764
+ var popoverTriggerRef = useRef(null);
14765
+ useEffect(function () {
14766
+ if (!sizingPopover) return;
14767
+ function handleClickOutside(e) {
14768
+ if (popoverRef.current && !popoverRef.current.contains(e.target) && popoverTriggerRef.current && !popoverTriggerRef.current.contains(e.target)) {
14769
+ setSizingPopover(null);
14770
+ }
14771
+ }
14772
+ function handleEscape(e) {
14773
+ if (e.key === "Escape") setSizingPopover(null);
14774
+ }
14775
+ document.addEventListener("mousedown", handleClickOutside);
14776
+ document.addEventListener("keydown", handleEscape);
14777
+ return function () {
14778
+ document.removeEventListener("mousedown", handleClickOutside);
14779
+ document.removeEventListener("keydown", handleEscape);
14780
+ };
14781
+ }, [sizingPopover]);
14782
+ var ROW_OPTIONS = [{
14783
+ mode: "shrink",
14784
+ label: "S"
14785
+ }, {
14786
+ mode: "grow",
14787
+ label: "G"
14788
+ }, {
14789
+ mode: "fixed-1",
14790
+ label: "1x"
14791
+ }, {
14792
+ mode: "fixed-2",
14793
+ label: "2x"
14794
+ }, {
14795
+ mode: "fixed-3",
14796
+ label: "3x"
14797
+ }];
14798
+ var COL_OPTIONS = [{
14799
+ mode: "grow",
14800
+ label: "G"
14801
+ }, {
14802
+ mode: "shrink",
14803
+ label: "S"
14804
+ }, {
14805
+ mode: "1/4",
14806
+ label: "1/4"
14807
+ }, {
14808
+ mode: "1/3",
14809
+ label: "1/3"
14810
+ }, {
14811
+ mode: "1/2",
14812
+ label: "1/2"
14813
+ }, {
14814
+ mode: "2/3",
14815
+ label: "2/3"
14816
+ }];
14817
+ function getActiveRowOption(row) {
14818
+ var mode = getRowMode(row);
14819
+ var mult = getRowMultiplier(row);
14820
+ if (mode === "shrink") return "shrink";
14821
+ if (mode === "grow") return "grow";
14822
+ return "fixed-".concat(mult);
14823
+ }
14824
+ function handleRowOptionSelect(row, optionMode) {
14825
+ if (onChangeRowSizing) {
14826
+ if (optionMode === "shrink" || optionMode === "grow") {
14827
+ onChangeRowSizing(id, row, optionMode);
14828
+ } else if (optionMode.startsWith("fixed-")) {
14829
+ var mult = Number(optionMode.split("-")[1]);
14830
+ onChangeRowSizing(id, row, "fixed", mult);
14831
+ }
14832
+ }
14833
+ }
14834
+ function handleColOptionSelect(col, optionMode) {
14835
+ if (onChangeColMode) onChangeColMode(id, col, optionMode);
14836
+ }
14837
+ function getOptionColor(optionMode, type) {
14838
+ if (type === "row") {
14839
+ if (optionMode === "shrink") return "text-amber-400";
14840
+ if (optionMode === "grow") return "text-green-400";
14841
+ return "text-blue-400";
14842
+ }
14843
+ // col
14844
+ if (optionMode === "grow") return "text-green-400";
14845
+ if (optionMode === "shrink") return "text-amber-400";
14846
+ return "text-blue-400";
14847
+ }
14848
+ function renderSizingPopover(type, index, triggerEl) {
14849
+ if (!sizingPopover || sizingPopover.type !== type || sizingPopover.index !== index) return null;
14850
+ var options = type === "row" ? ROW_OPTIONS : COL_OPTIONS;
14851
+ var activeMode = type === "row" ? getActiveRowOption(index) : getColMode(index);
14852
+ var isRow = type === "row";
14853
+ return /*#__PURE__*/jsx("div", {
14854
+ ref: popoverRef,
14855
+ className: "absolute z-50 bg-gray-800 border border-gray-600 rounded-lg shadow-xl p-1 flex flex-row gap-0.5",
14856
+ style: isRow ? {
14857
+ left: "100%",
14858
+ top: "50%",
14859
+ transform: "translateY(-50%)",
14860
+ marginLeft: 4
14861
+ } : {
14862
+ top: "100%",
14863
+ left: "50%",
14864
+ transform: "translateX(-50%)",
14865
+ marginTop: 4
14866
+ },
14867
+ children: options.map(function (opt) {
14868
+ var isActive = opt.mode === activeMode;
14869
+ var color = getOptionColor(opt.mode, type);
14870
+ return /*#__PURE__*/jsx("button", {
14871
+ 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"),
14872
+ onClick: function onClick() {
14873
+ if (type === "row") handleRowOptionSelect(index, opt.mode);else handleColOptionSelect(index, opt.mode);
14874
+ },
14875
+ title: opt.label,
14876
+ children: opt.label
14877
+ }, opt.mode);
14878
+ })
14879
+ });
14880
+ }
14881
+
14882
+ // Modal state for grid operations
14883
+ var _useState3 = useState(false),
14667
14884
  _useState4 = _slicedToArray(_useState3, 2),
14668
- selectedCellsForMerge = _useState4[0],
14669
- setSelectedCellsForMerge = _useState4[1];
14670
- var _useState5 = useState(null),
14885
+ mergeModalOpen = _useState4[0],
14886
+ setMergeModalOpen = _useState4[1];
14887
+ var _useState5 = useState([]),
14671
14888
  _useState6 = _slicedToArray(_useState5, 2),
14672
- contextMenuCell = _useState6[0],
14673
- setContextMenuCell = _useState6[1];
14674
- var _useState7 = useState({
14889
+ selectedCellsForMerge = _useState6[0],
14890
+ setSelectedCellsForMerge = _useState6[1];
14891
+ var _useState7 = useState(null),
14892
+ _useState8 = _slicedToArray(_useState7, 2),
14893
+ contextMenuCell = _useState8[0],
14894
+ setContextMenuCell = _useState8[1];
14895
+ var _useState9 = useState({
14675
14896
  x: 0,
14676
14897
  y: 0
14677
14898
  }),
14678
- _useState8 = _slicedToArray(_useState7, 2),
14679
- contextMenuPosition = _useState8[0],
14680
- setContextMenuPosition = _useState8[1];
14899
+ _useState0 = _slicedToArray(_useState9, 2),
14900
+ contextMenuPosition = _useState0[0],
14901
+ setContextMenuPosition = _useState0[1];
14681
14902
 
14682
14903
  // Grid operation handlers
14683
14904
  function handleInstantSplit(cellNumber, direction) {
@@ -14963,16 +15184,20 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
14963
15184
  label = _getRowSizingDisplay.label,
14964
15185
  color = _getRowSizingDisplay.color,
14965
15186
  hoverBg = _getRowSizingDisplay.hoverBg;
14966
- var mode = getRowMode(row);
14967
- var mult = getRowMultiplier(row);
14968
- var titleParts = mode === "shrink" ? "Shrink (auto)" : mode === "grow" ? "Grow (1fr)" : "Fixed ".concat(mult, "x");
14969
- return /*#__PURE__*/jsx("button", {
14970
- 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"),
14971
- onClick: function onClick() {
14972
- return handleCycleRowSizing(row);
14973
- },
14974
- title: "Row sizing: ".concat(titleParts, " (click to cycle)"),
14975
- children: label
15187
+ return /*#__PURE__*/jsxs("div", {
15188
+ className: "relative",
15189
+ children: [/*#__PURE__*/jsx("button", {
15190
+ ref: (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "row" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === row ? popoverTriggerRef : undefined,
15191
+ 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"),
15192
+ onClick: function onClick() {
15193
+ return setSizingPopover((sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "row" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === row ? null : {
15194
+ type: "row",
15195
+ index: row
15196
+ });
15197
+ },
15198
+ title: "Row sizing (click to change)",
15199
+ children: label
15200
+ }), renderSizingPopover("row", row)]
14976
15201
  });
14977
15202
  }(), /*#__PURE__*/jsx("button", {
14978
15203
  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",
@@ -15055,7 +15280,27 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
15055
15280
  }), /*#__PURE__*/jsxs("span", {
15056
15281
  className: "text-[11px] text-gray-400 group-hover:text-gray-200 select-none font-mono font-medium",
15057
15282
  children: ["C", col]
15058
- }), /*#__PURE__*/jsx("button", {
15283
+ }), function () {
15284
+ var _getColSizingDisplay = getColSizingDisplay(col),
15285
+ label = _getColSizingDisplay.label,
15286
+ color = _getColSizingDisplay.color,
15287
+ hoverBg = _getColSizingDisplay.hoverBg;
15288
+ return /*#__PURE__*/jsxs("div", {
15289
+ className: "relative",
15290
+ children: [/*#__PURE__*/jsx("button", {
15291
+ ref: (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "col" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === col ? popoverTriggerRef : undefined,
15292
+ 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"),
15293
+ onClick: function onClick() {
15294
+ return setSizingPopover((sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.type) === "col" && (sizingPopover === null || sizingPopover === void 0 ? void 0 : sizingPopover.index) === col ? null : {
15295
+ type: "col",
15296
+ index: col
15297
+ });
15298
+ },
15299
+ title: "Column sizing (click to change)",
15300
+ children: label
15301
+ }), renderSizingPopover("col", col)]
15302
+ });
15303
+ }(), /*#__PURE__*/jsx("button", {
15059
15304
  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",
15060
15305
  onClick: function onClick() {
15061
15306
  return handleAddColumn(col);
@@ -15093,7 +15338,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
15093
15338
  }), /*#__PURE__*/jsx("div", {
15094
15339
  className: "grid flex-1",
15095
15340
  style: {
15096
- gridTemplateColumns: "repeat(".concat(cols, ", 1fr)"),
15341
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(cols, ", 1fr)"),
15097
15342
  gap: GRID_GAP
15098
15343
  },
15099
15344
  children: colItems
@@ -15436,7 +15681,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
15436
15681
  className: "grid flex-1 min-h-24 p-4 gap-5",
15437
15682
  style: {
15438
15683
  gridTemplateRows: getRowTemplate(item.grid),
15439
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)")
15684
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)")
15440
15685
  },
15441
15686
  children: renderGridCells()
15442
15687
  })]
@@ -15450,7 +15695,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
15450
15695
  className: "grid flex-1 p-4 gap-5",
15451
15696
  style: {
15452
15697
  gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
15453
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
15698
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)"),
15454
15699
  overflow: "hidden"
15455
15700
  },
15456
15701
  children: renderGridCells()
@@ -15550,7 +15795,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
15550
15795
  className: "grid w-full min-h-24 p-3 ".concat(item.grid.gap || "gap-2"),
15551
15796
  style: {
15552
15797
  gridTemplateRows: getRowTemplate(item.grid),
15553
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
15798
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)"),
15554
15799
  overflow: "auto"
15555
15800
  },
15556
15801
  children: renderGridCells()
@@ -15561,7 +15806,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
15561
15806
  className: "absolute inset-0 grid p-3 ".concat(item.grid.gap || "gap-2"),
15562
15807
  style: {
15563
15808
  gridTemplateRows: hasExplicitRowModes() ? getRowTemplate(item.grid) : "repeat(".concat(item.grid.rows, ", minmax(0, 1fr))"),
15564
- gridTemplateColumns: "repeat(".concat(item.grid.cols, ", 1fr)"),
15809
+ gridTemplateColumns: hasExplicitColModes() ? getColTemplate(item.grid) : "repeat(".concat(item.grid.cols, ", 1fr)"),
15565
15810
  overflow: "hidden"
15566
15811
  },
15567
15812
  children: renderGridCells()
@@ -15655,6 +15900,10 @@ var _renderLayout = function renderLayout(_ref) {
15655
15900
  onChangeRowHeight = _ref$onChangeRowHeigh === void 0 ? null : _ref$onChangeRowHeigh,
15656
15901
  _ref$onChangeRowMode = _ref.onChangeRowMode,
15657
15902
  onChangeRowMode = _ref$onChangeRowMode === void 0 ? null : _ref$onChangeRowMode,
15903
+ _ref$onChangeRowSizin = _ref.onChangeRowSizing,
15904
+ onChangeRowSizing = _ref$onChangeRowSizin === void 0 ? null : _ref$onChangeRowSizin,
15905
+ _ref$onChangeColMode = _ref.onChangeColMode,
15906
+ onChangeColMode = _ref$onChangeColMode === void 0 ? null : _ref$onChangeColMode,
15658
15907
  _ref$onMoveWidgetToCe = _ref.onMoveWidgetToCell,
15659
15908
  onMoveWidgetToCell = _ref$onMoveWidgetToCe === void 0 ? null : _ref$onMoveWidgetToCe,
15660
15909
  _ref$onDropWidgetFrom = _ref.onDropWidgetFromSidebar,
@@ -15725,6 +15974,8 @@ var _renderLayout = function renderLayout(_ref) {
15725
15974
  onDeleteGridColumn: onDeleteGridColumn,
15726
15975
  onChangeRowHeight: onChangeRowHeight,
15727
15976
  onChangeRowMode: onChangeRowMode,
15977
+ onChangeRowSizing: onChangeRowSizing,
15978
+ onChangeColMode: onChangeColMode,
15728
15979
  onMoveWidgetToCell: onMoveWidgetToCell,
15729
15980
  onDropWidgetFromSidebar: onDropWidgetFromSidebar,
15730
15981
  onWidgetPopout: onWidgetPopout,
@@ -15763,6 +16014,8 @@ var _renderLayout = function renderLayout(_ref) {
15763
16014
  onDeleteGridColumn: onDeleteGridColumn,
15764
16015
  onChangeRowHeight: onChangeRowHeight,
15765
16016
  onChangeRowMode: onChangeRowMode,
16017
+ onChangeRowSizing: onChangeRowSizing,
16018
+ onChangeColMode: onChangeColMode,
15766
16019
  onMoveWidgetToCell: onMoveWidgetToCell,
15767
16020
  onDropWidgetFromSidebar: onDropWidgetFromSidebar,
15768
16021
  onWidgetPopout: onWidgetPopout
@@ -19264,6 +19517,40 @@ var DashboardModel = /*#__PURE__*/function () {
19264
19517
  }
19265
19518
  }
19266
19519
 
19520
+ /**
19521
+ * Change the sizing mode for a column
19522
+ * @param {String} itemId The id of the grid container
19523
+ * @param {Number} colNumber The column number (1-indexed)
19524
+ * @param {String} mode The sizing mode: "grow" (default), "shrink", "1/4", "1/3", "1/2", "2/3"
19525
+ * @returns {Object} Updated grid or null on error
19526
+ */
19527
+ }, {
19528
+ key: "changeColMode",
19529
+ value: function changeColMode(itemId, colNumber, mode) {
19530
+ try {
19531
+ var gridContainer = this.getComponentById(itemId);
19532
+ if (!gridContainer || !gridContainer.grid) {
19533
+ return null;
19534
+ }
19535
+ var grid = gridContainer.grid;
19536
+ grid.colModes = grid.colModes || {};
19537
+ if (mode === "grow" || !mode) {
19538
+ delete grid.colModes[String(colNumber)];
19539
+ } else {
19540
+ grid.colModes[String(colNumber)] = mode;
19541
+ }
19542
+
19543
+ // Clean up empty object
19544
+ if (Object.keys(grid.colModes).length === 0) {
19545
+ delete grid.colModes;
19546
+ }
19547
+ this.updateLayoutItem(gridContainer);
19548
+ return grid;
19549
+ } catch (e) {
19550
+ return null;
19551
+ }
19552
+ }
19553
+
19267
19554
  /**
19268
19555
  * Add a new column to the grid
19269
19556
  * @param {Number} itemId The id of the grid container
@@ -19302,6 +19589,19 @@ var DashboardModel = /*#__PURE__*/function () {
19302
19589
  hide: false
19303
19590
  };
19304
19591
  }
19592
+
19593
+ // Shift colModes keys right (columns after insertion point move +1)
19594
+ if (gridContainer.grid.colModes) {
19595
+ var shifted = {};
19596
+ for (var _i13 = 0, _Object$entries6 = Object.entries(gridContainer.grid.colModes); _i13 < _Object$entries6.length; _i13++) {
19597
+ var _Object$entries6$_i = _slicedToArray(_Object$entries6[_i13], 2),
19598
+ key = _Object$entries6$_i[0],
19599
+ mode = _Object$entries6$_i[1];
19600
+ var colNum = Number(key);
19601
+ shifted[String(colNum >= newColNumber ? colNum + 1 : colNum)] = mode;
19602
+ }
19603
+ gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
19604
+ }
19305
19605
  this._normalizeGrid(gridContainer.grid);
19306
19606
  this.updateLayoutItem(gridContainer);
19307
19607
  return gridContainer.grid;
@@ -19349,6 +19649,20 @@ var DashboardModel = /*#__PURE__*/function () {
19349
19649
  }
19350
19650
  }
19351
19651
  gridContainer.grid.cols -= 1;
19652
+
19653
+ // Shift colModes keys left and remove the deleted column's entry
19654
+ if (gridContainer.grid.colModes) {
19655
+ var shifted = {};
19656
+ for (var _i14 = 0, _Object$entries7 = Object.entries(gridContainer.grid.colModes); _i14 < _Object$entries7.length; _i14++) {
19657
+ var _Object$entries7$_i = _slicedToArray(_Object$entries7[_i14], 2),
19658
+ key = _Object$entries7$_i[0],
19659
+ mode = _Object$entries7$_i[1];
19660
+ var colNum = Number(key);
19661
+ if (colNum === colNumber) continue;
19662
+ shifted[String(colNum > colNumber ? colNum - 1 : colNum)] = mode;
19663
+ }
19664
+ gridContainer.grid.colModes = Object.keys(shifted).length > 0 ? shifted : undefined;
19665
+ }
19352
19666
  this._normalizeGrid(gridContainer.grid);
19353
19667
  this.updateLayoutItem(gridContainer);
19354
19668
  return gridContainer.grid;