@alaarab/ogrid-react-material 2.2.0 → 2.3.0

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.
Files changed (2) hide show
  1. package/dist/esm/index.js +164 -123
  2. package/package.json +2 -2
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React4 from 'react';
2
2
  import { useMemo, useCallback, useState, useRef, useEffect } from 'react';
3
3
  import { Box, Tooltip, Typography, IconButton, Popover, Button, Select, MenuItem, useTheme, Checkbox, Table, TableHead, TableRow, TableCell, FormControlLabel, Avatar, TextField, InputAdornment, CircularProgress, Menu, Divider } from '@mui/material';
4
- import { useColumnHeaderFilterState, getColumnHeaderFilterStateParams, renderFilterContent, areGridRowPropsEqual, usePaginationControls, createOGrid, DateFilterContent, CHECKBOX_COLUMN_WIDTH, STOP_PROPAGATION, ROW_NUMBER_COLUMN_WIDTH, useDataGridTableOrchestration, useColumnMeta, getCellRenderDescriptor, buildInlineEditorProps, buildPopoverEditorProps, resolveCellDisplayContent, resolveCellStyle, getCellInteractionProps, CellErrorBoundary, PREVENT_DEFAULT, getHeaderFilterConfig, MarchingAntsOverlay, NOOP, useColumnChooserState, useListVirtualizer, BaseInlineCellEditor, partitionColumnsForVirtualization, getContextMenuHandlers, GRID_CONTEXT_MENU_ITEMS, formatShortcut, getColumnHeaderMenuItems, getStatusBarParts } from '@alaarab/ogrid-react';
4
+ import { useColumnHeaderFilterState, getColumnHeaderFilterStateParams, renderFilterContent, areGridRowPropsEqual, usePaginationControls, createOGrid, DateFilterContent, CHECKBOX_COLUMN_WIDTH, STOP_PROPAGATION, ROW_NUMBER_COLUMN_WIDTH, useDataGridTableOrchestration, useColumnMeta, getCellRenderDescriptor, buildInlineEditorProps, buildPopoverEditorProps, resolveCellDisplayContent, resolveCellStyle, getCellInteractionProps, CellErrorBoundary, PREVENT_DEFAULT, indexToColumnLetter, getHeaderFilterConfig, MarchingAntsOverlay, NOOP, useColumnChooserState, useListVirtualizer, BaseInlineCellEditor, partitionColumnsForVirtualization, getContextMenuHandlers, GRID_CONTEXT_MENU_ITEMS, formatShortcut, getColumnHeaderMenuItems, getStatusBarParts } from '@alaarab/ogrid-react';
5
5
  export { BaseColumnHeaderMenu, BaseDropIndicator, BaseEmptyState, BaseInlineCellEditor, BaseLoadingOverlay, CELL_PADDING, CHECKBOX_COLUMN_WIDTH, COLUMN_HEADER_MENU_ITEMS, CURSOR_CELL_STYLE, CellErrorBoundary, DEFAULT_MIN_COLUMN_WIDTH, DateFilterContent, EmptyState, GRID_BORDER_RADIUS, GRID_CONTEXT_MENU_ITEMS, GRID_ROOT_STYLE, GridContextMenu, MAX_PAGE_BUTTONS, MarchingAntsOverlay, NOOP, OGridLayout, PAGE_SIZE_OPTIONS, POPOVER_ANCHOR_STYLE, PREVENT_DEFAULT, ROW_NUMBER_COLUMN_WIDTH, STOP_PROPAGATION, SideBar, StatusBar, UndoRedoStack, areGridRowPropsEqual, booleanParser, buildCsvHeader, buildCsvRows, buildHeaderRows, buildInlineEditorProps, buildPopoverEditorProps, clampSelectionToBounds, computeAggregations, computeAutoScrollSpeed, computeTabNavigation, createOGrid, currencyParser, dateParser, deriveFilterOptionsFromData, editorInputStyle, editorWrapperStyle, emailParser, escapeCsvValue, exportToCsv, findCtrlArrowTarget, flattenColumns, formatCellValueForTsv, formatSelectionAsTsv, formatShortcut, getCellInteractionProps, getCellRenderDescriptor, getCellValue, getColumnHeaderFilterStateParams, getColumnHeaderMenuItems, getContextMenuHandlers, getDataGridStatusBarConfig, getDateFilterContentProps, getFilterField, getHeaderFilterConfig, getMultiSelectFilterFields, getPaginationViewModel, getStatusBarParts, isInSelectionRange, isRowInRange, mergeFilter, normalizeSelectionRange, numberParser, parseTsvClipboard, parseValue, processClientSideData, rangesEqual, renderFilterContent, resolveCellDisplayContent, resolveCellStyle, richSelectDropdownStyle, richSelectNoMatchesStyle, richSelectOptionHighlightedStyle, richSelectOptionStyle, richSelectWrapperStyle, selectChevronStyle, selectDisplayStyle, selectEditorStyle, toUserLike, triggerCsvDownload, useActiveCell, useCellEditing, useCellSelection, useClipboard, useColumnChooserState, useColumnHeaderFilterState, useColumnMeta, useColumnReorder, useColumnResize, useContextMenu, useDataGridState, useDataGridTableOrchestration, useDateFilterState, useDebounce, useFillHandle, useFilterOptions, useInlineCellEditorState, useKeyboardNavigation, useLatestRef, useListVirtualizer, useMultiSelectFilterState, useOGrid, usePaginationControls, usePeopleFilterState, useRichSelectState, useRowSelection, useSelectState, useSideBarState, useTableLayout, useTextFilterState, useUndoRedo, useVirtualScroll } from '@alaarab/ogrid-react';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { FilterList, FirstPage, ChevronLeft, ChevronRight, LastPage, ExpandLess, ExpandMore, ViewColumn, Clear, Search } from '@mui/icons-material';
@@ -29,6 +29,7 @@ table:not([data-virtual-scroll]) .ogrid-mat-tbody tr { content-visibility: auto;
29
29
 
30
30
  .ogrid-mat-cell--active { outline: 2px solid var(--ogrid-selection, #217346); outline-offset: -1px; z-index: var(--ogrid-z-active-cell, 2); position: relative; overflow: visible; background-color: var(--ogrid-hover-bg); }
31
31
  .ogrid-mat-cell--active:focus-visible { outline: 2px solid var(--ogrid-selection, #217346); outline-offset: -1px; }
32
+ .ogrid-mat-cell--active-in-range { outline: none; background-color: var(--ogrid-bg, #fff); }
32
33
  .ogrid-mat-cell--range { background-color: var(--ogrid-bg-range, rgba(33,115,70,0.12)); }
33
34
  .ogrid-mat-cell--range:focus-visible { outline: none; }
34
35
  .ogrid-mat-cell--cut { background-color: var(--ogrid-hover-bg); opacity: 0.7; }
@@ -624,6 +625,19 @@ var STICKY_HEADER_SX = {
624
625
  "& th": { bgcolor: HEADER_BG }
625
626
  };
626
627
  var HEADER_ROW_SX = { bgcolor: HEADER_BG };
628
+ var COLUMN_LETTER_CELL_SX = {
629
+ textAlign: "center",
630
+ fontSize: "11px",
631
+ fontWeight: 500,
632
+ color: "text.secondary",
633
+ py: "2px",
634
+ px: "4px",
635
+ bgcolor: HEADER_BG,
636
+ borderBottom: 1,
637
+ borderColor: "divider",
638
+ userSelect: "none",
639
+ fontVariantNumeric: "tabular-nums"
640
+ };
627
641
  var GROUP_HEADER_CELL_SX = { textAlign: "center", fontWeight: 600, borderBottom: 2, borderColor: "divider", py: 0.75 };
628
642
  function getDensityPadding(density) {
629
643
  switch (density) {
@@ -947,6 +961,7 @@ function DataGridTableInner(props) {
947
961
  headerRows,
948
962
  allowOverflowX,
949
963
  fitToContent,
964
+ showColumnLetters,
950
965
  editCallbacks,
951
966
  interactionHandlers,
952
967
  cellDescriptorInputRef,
@@ -1070,13 +1085,14 @@ function DataGridTableInner(props) {
1070
1085
  ] });
1071
1086
  } else {
1072
1087
  const content = resolveCellDisplayContent(col, item, descriptor.displayValue);
1073
- const cellStyle = resolveCellStyle(col, item);
1088
+ const cellStyle = resolveCellStyle(col, item, descriptor.displayValue);
1074
1089
  const styledContent = cellStyle ? /* @__PURE__ */ jsx("span", { style: cellStyle, children: content }) : content;
1075
1090
  let cls = "ogrid-mat-cell";
1076
1091
  if (col.type === "numeric") cls += " ogrid-mat-cell--numeric";
1077
1092
  else if (col.type === "boolean") cls += " ogrid-mat-cell--boolean";
1078
1093
  if (descriptor.canEditAny) cls += " ogrid-mat-cell--editable";
1079
1094
  if (descriptor.isActive) cls += " ogrid-mat-cell--active";
1095
+ if (descriptor.isActive && descriptor.isInRange) cls += " ogrid-mat-cell--active-in-range";
1080
1096
  if (descriptor.isInRange && !descriptor.isActive) cls += " ogrid-mat-cell--range";
1081
1097
  if (descriptor.isInCutRange) cls += " ogrid-mat-cell--cut";
1082
1098
  const interactionProps = getCellInteractionProps(descriptor, col.columnId, interactionHandlers);
@@ -1126,143 +1142,168 @@ function DataGridTableInner(props) {
1126
1142
  sx: { minWidth: minTableWidth, borderCollapse: "separate", borderSpacing: 0 },
1127
1143
  "data-virtual-scroll": virtualScrollEnabled ? "" : void 0,
1128
1144
  children: [
1129
- /* @__PURE__ */ jsx(TableHead, { sx: STICKY_HEADER_SX, children: headerRows.map((row, rowIdx) => /* @__PURE__ */ jsxs(TableRow, { sx: HEADER_ROW_SX, children: [
1130
- rowIdx === headerRows.length - 1 && hasCheckboxCol && /* @__PURE__ */ jsx(
1131
- TableCell,
1132
- {
1133
- ...{ padding: "checkbox", rowSpan: headerRows.length > 1 ? 1 : void 0, sx: CHECKBOX_CELL_SX },
1134
- children: /* @__PURE__ */ jsx(
1135
- Checkbox,
1136
- {
1137
- checked: allSelected,
1138
- indeterminate: someSelected,
1139
- onChange: (_, c) => handleSelectAll(!!c),
1140
- size: "small",
1141
- "aria-label": "Select all rows"
1142
- }
1143
- )
1144
- }
1145
- ),
1146
- rowIdx === 0 && rowIdx < headerRows.length - 1 && hasCheckboxCol && /* @__PURE__ */ jsx(TableCell, { ...{ rowSpan: headerRows.length - 1, sx: CHECKBOX_PLACEHOLDER_SX } }),
1147
- rowIdx === headerRows.length - 1 && hasRowNumbersCol && /* @__PURE__ */ jsx(
1148
- TableCell,
1149
- {
1150
- ...{
1151
- component: "th",
1152
- scope: "col",
1153
- rowSpan: headerRows.length > 1 ? 1 : void 0,
1154
- sx: {
1155
- width: ROW_NUMBER_COLUMN_WIDTH,
1156
- minWidth: ROW_NUMBER_COLUMN_WIDTH,
1157
- maxWidth: ROW_NUMBER_COLUMN_WIDTH,
1158
- textAlign: "center",
1159
- fontWeight: 600,
1160
- backgroundColor: HEADER_BG,
1161
- position: "sticky",
1162
- left: hasCheckboxCol ? CHECKBOX_COLUMN_WIDTH : 0,
1163
- zIndex: 4,
1164
- ...headerCellSx
1165
- }
1166
- },
1167
- children: "#"
1168
- }
1169
- ),
1170
- rowIdx === 0 && rowIdx < headerRows.length - 1 && hasRowNumbersCol && /* @__PURE__ */ jsx(
1171
- TableCell,
1172
- {
1173
- ...{
1174
- rowSpan: headerRows.length - 1,
1175
- sx: {
1176
- width: ROW_NUMBER_COLUMN_WIDTH,
1177
- minWidth: ROW_NUMBER_COLUMN_WIDTH,
1178
- position: "sticky",
1179
- left: hasCheckboxCol ? CHECKBOX_COLUMN_WIDTH : 0,
1180
- zIndex: 4,
1181
- backgroundColor: "background.paper"
1182
- }
1183
- }
1184
- }
1185
- ),
1186
- row.map((cell, cellIdx) => {
1187
- if (cell.isGroup) {
1145
+ /* @__PURE__ */ jsxs(TableHead, { sx: STICKY_HEADER_SX, children: [
1146
+ showColumnLetters && /* @__PURE__ */ jsxs(TableRow, { sx: HEADER_ROW_SX, children: [
1147
+ hasCheckboxCol && /* @__PURE__ */ jsx(TableCell, { sx: COLUMN_LETTER_CELL_SX }),
1148
+ hasRowNumbersCol && /* @__PURE__ */ jsx(TableCell, { sx: COLUMN_LETTER_CELL_SX }),
1149
+ visibleCols.map((col, colIdx) => {
1150
+ const hdrStyle = columnMeta.hdrStyles[col.columnId];
1188
1151
  return /* @__PURE__ */ jsx(
1189
1152
  TableCell,
1190
1153
  {
1191
1154
  ...{
1192
- colSpan: cell.colSpan,
1193
1155
  component: "th",
1194
- scope: "colgroup",
1195
- sx: GROUP_HEADER_CELL_SX
1156
+ sx: {
1157
+ ...COLUMN_LETTER_CELL_SX,
1158
+ minWidth: hdrStyle?.minWidth,
1159
+ width: hdrStyle?.width,
1160
+ maxWidth: hdrStyle?.maxWidth
1161
+ }
1196
1162
  },
1197
- children: cell.label
1163
+ children: indexToColumnLetter(colIdx)
1198
1164
  },
1199
- cellIdx
1165
+ col.columnId
1200
1166
  );
1201
- }
1202
- if (!cell.columnDef) return null;
1203
- const col = cell.columnDef;
1204
- const isPinnedLeft = pinning.pinnedColumns[col.columnId] === "left";
1205
- const isPinnedRight = pinning.pinnedColumns[col.columnId] === "right";
1206
- const baseHeaderSx = o.stickyHeader ? isPinnedLeft ? HEADER_PINNED_LEFT_SX : isPinnedRight ? HEADER_PINNED_RIGHT_SX : HEADER_BASE_SX : isPinnedLeft ? HEADER_PINNED_LEFT_NO_STICKY_SX : isPinnedRight ? HEADER_PINNED_RIGHT_NO_STICKY_SX : HEADER_BASE_NO_STICKY_SX;
1207
- const headerSx = isPinnedLeft && pinning.leftOffsets[col.columnId] != null ? { ...baseHeaderSx, left: pinning.leftOffsets[col.columnId] } : isPinnedRight && pinning.rightOffsets[col.columnId] != null ? { ...baseHeaderSx, right: pinning.rightOffsets[col.columnId] } : baseHeaderSx;
1208
- const hdrStyle = columnMeta.hdrStyles[col.columnId];
1209
- const isSorted = props.sortBy === col.columnId;
1210
- const ariaSort = isSorted ? props.sortDirection === "asc" ? "ascending" : "descending" : void 0;
1211
- return /* @__PURE__ */ jsxs(
1167
+ })
1168
+ ] }),
1169
+ headerRows.map((row, rowIdx) => /* @__PURE__ */ jsxs(TableRow, { sx: HEADER_ROW_SX, children: [
1170
+ rowIdx === headerRows.length - 1 && hasCheckboxCol && /* @__PURE__ */ jsx(
1171
+ TableCell,
1172
+ {
1173
+ ...{ padding: "checkbox", rowSpan: headerRows.length > 1 ? 1 : void 0, sx: CHECKBOX_CELL_SX },
1174
+ children: /* @__PURE__ */ jsx(
1175
+ Checkbox,
1176
+ {
1177
+ checked: allSelected,
1178
+ indeterminate: someSelected,
1179
+ onChange: (_, c) => handleSelectAll(!!c),
1180
+ size: "small",
1181
+ "aria-label": "Select all rows"
1182
+ }
1183
+ )
1184
+ }
1185
+ ),
1186
+ rowIdx === 0 && rowIdx < headerRows.length - 1 && hasCheckboxCol && /* @__PURE__ */ jsx(TableCell, { ...{ rowSpan: headerRows.length - 1, sx: CHECKBOX_PLACEHOLDER_SX } }),
1187
+ rowIdx === headerRows.length - 1 && hasRowNumbersCol && /* @__PURE__ */ jsx(
1212
1188
  TableCell,
1213
1189
  {
1214
1190
  ...{
1215
1191
  component: "th",
1216
1192
  scope: "col",
1217
- "data-column-id": col.columnId,
1218
- rowSpan: headerRows.length > 1 ? headerRows.length - rowIdx : void 0,
1219
- "aria-sort": ariaSort,
1193
+ rowSpan: headerRows.length > 1 ? 1 : void 0,
1220
1194
  sx: {
1221
- ...headerSx,
1222
- ...headerCellSx,
1223
- minWidth: hdrStyle?.minWidth,
1224
- width: hdrStyle?.width,
1225
- maxWidth: hdrStyle?.maxWidth,
1226
- ...columnReorder ? { cursor: isReorderDragging ? "grabbing" : "grab" } : {},
1227
- "&:focus-visible": {
1228
- outline: "2px solid",
1229
- outlineColor: "primary.main",
1230
- outlineOffset: "-2px",
1231
- zIndex: 11
1232
- }
1233
- },
1234
- onMouseDown: columnReorder ? (e) => handleHeaderMouseDown(col.columnId, e) : void 0
1195
+ width: ROW_NUMBER_COLUMN_WIDTH,
1196
+ minWidth: ROW_NUMBER_COLUMN_WIDTH,
1197
+ maxWidth: ROW_NUMBER_COLUMN_WIDTH,
1198
+ textAlign: "center",
1199
+ fontWeight: 600,
1200
+ backgroundColor: HEADER_BG,
1201
+ position: "sticky",
1202
+ left: hasCheckboxCol ? CHECKBOX_COLUMN_WIDTH : 0,
1203
+ zIndex: 4,
1204
+ ...headerCellSx
1205
+ }
1235
1206
  },
1236
- children: [
1237
- /* @__PURE__ */ jsxs(Box, { sx: HEADER_CONTENT_FLEX_SX, children: [
1238
- /* @__PURE__ */ jsx(ColumnHeaderFilter, { ...getHeaderFilterConfig(col, headerFilterInput) }),
1239
- /* @__PURE__ */ jsx(
1240
- Box,
1241
- {
1242
- component: "button",
1243
- onClick: (e) => {
1244
- e.stopPropagation();
1245
- headerMenu.open(col.columnId, e.currentTarget);
1246
- },
1247
- "aria-label": "Column options",
1248
- title: "Column options",
1249
- sx: COLUMN_OPTIONS_BUTTON_SX,
1250
- children: "\u22EE"
1207
+ children: "#"
1208
+ }
1209
+ ),
1210
+ rowIdx === 0 && rowIdx < headerRows.length - 1 && hasRowNumbersCol && /* @__PURE__ */ jsx(
1211
+ TableCell,
1212
+ {
1213
+ ...{
1214
+ rowSpan: headerRows.length - 1,
1215
+ sx: {
1216
+ width: ROW_NUMBER_COLUMN_WIDTH,
1217
+ minWidth: ROW_NUMBER_COLUMN_WIDTH,
1218
+ position: "sticky",
1219
+ left: hasCheckboxCol ? CHECKBOX_COLUMN_WIDTH : 0,
1220
+ zIndex: 4,
1221
+ backgroundColor: "background.paper"
1222
+ }
1223
+ }
1224
+ }
1225
+ ),
1226
+ row.map((cell, cellIdx) => {
1227
+ if (cell.isGroup) {
1228
+ return /* @__PURE__ */ jsx(
1229
+ TableCell,
1230
+ {
1231
+ ...{
1232
+ colSpan: cell.colSpan,
1233
+ component: "th",
1234
+ scope: "colgroup",
1235
+ sx: GROUP_HEADER_CELL_SX
1236
+ },
1237
+ children: cell.label
1238
+ },
1239
+ cellIdx
1240
+ );
1241
+ }
1242
+ if (!cell.columnDef) return null;
1243
+ const col = cell.columnDef;
1244
+ const isPinnedLeft = pinning.pinnedColumns[col.columnId] === "left";
1245
+ const isPinnedRight = pinning.pinnedColumns[col.columnId] === "right";
1246
+ const baseHeaderSx = o.stickyHeader ? isPinnedLeft ? HEADER_PINNED_LEFT_SX : isPinnedRight ? HEADER_PINNED_RIGHT_SX : HEADER_BASE_SX : isPinnedLeft ? HEADER_PINNED_LEFT_NO_STICKY_SX : isPinnedRight ? HEADER_PINNED_RIGHT_NO_STICKY_SX : HEADER_BASE_NO_STICKY_SX;
1247
+ const headerSx = isPinnedLeft && pinning.leftOffsets[col.columnId] != null ? { ...baseHeaderSx, left: pinning.leftOffsets[col.columnId] } : isPinnedRight && pinning.rightOffsets[col.columnId] != null ? { ...baseHeaderSx, right: pinning.rightOffsets[col.columnId] } : baseHeaderSx;
1248
+ const hdrStyle = columnMeta.hdrStyles[col.columnId];
1249
+ const isSorted = props.sortBy === col.columnId;
1250
+ const ariaSort = isSorted ? props.sortDirection === "asc" ? "ascending" : "descending" : void 0;
1251
+ return /* @__PURE__ */ jsxs(
1252
+ TableCell,
1253
+ {
1254
+ ...{
1255
+ component: "th",
1256
+ scope: "col",
1257
+ "data-column-id": col.columnId,
1258
+ rowSpan: headerRows.length > 1 ? headerRows.length - rowIdx : void 0,
1259
+ "aria-sort": ariaSort,
1260
+ sx: {
1261
+ ...headerSx,
1262
+ ...headerCellSx,
1263
+ minWidth: hdrStyle?.minWidth,
1264
+ width: hdrStyle?.width,
1265
+ maxWidth: hdrStyle?.maxWidth,
1266
+ ...columnReorder ? { cursor: isReorderDragging ? "grabbing" : "grab" } : {},
1267
+ "&:focus-visible": {
1268
+ outline: "2px solid",
1269
+ outlineColor: "primary.main",
1270
+ outlineOffset: "-2px",
1271
+ zIndex: 11
1251
1272
  }
1252
- )
1253
- ] }),
1254
- /* @__PURE__ */ jsx(Box, { onMouseDown: (e) => {
1255
- setActiveCell(null);
1256
- interaction.setSelectionRange(null);
1257
- wrapperRef.current?.focus({ preventScroll: true });
1258
- handleResizeStart(e, col);
1259
- }, onDoubleClick: (e) => handleResizeDoubleClick(e, col), sx: RESIZE_HANDLE_SX })
1260
- ]
1261
- },
1262
- col.columnId
1263
- );
1264
- })
1265
- ] }, rowIdx)) }),
1273
+ },
1274
+ onMouseDown: columnReorder ? (e) => handleHeaderMouseDown(col.columnId, e) : void 0
1275
+ },
1276
+ children: [
1277
+ /* @__PURE__ */ jsxs(Box, { sx: HEADER_CONTENT_FLEX_SX, children: [
1278
+ /* @__PURE__ */ jsx(ColumnHeaderFilter, { ...getHeaderFilterConfig(col, headerFilterInput) }),
1279
+ /* @__PURE__ */ jsx(
1280
+ Box,
1281
+ {
1282
+ component: "button",
1283
+ onClick: (e) => {
1284
+ e.stopPropagation();
1285
+ headerMenu.open(col.columnId, e.currentTarget);
1286
+ },
1287
+ "aria-label": "Column options",
1288
+ title: "Column options",
1289
+ sx: COLUMN_OPTIONS_BUTTON_SX,
1290
+ children: "\u22EE"
1291
+ }
1292
+ )
1293
+ ] }),
1294
+ /* @__PURE__ */ jsx(Box, { onMouseDown: (e) => {
1295
+ setActiveCell(null);
1296
+ interaction.setSelectionRange(null);
1297
+ wrapperRef.current?.focus({ preventScroll: true });
1298
+ handleResizeStart(e, col);
1299
+ }, onDoubleClick: (e) => handleResizeDoubleClick(e, col), sx: RESIZE_HANDLE_SX })
1300
+ ]
1301
+ },
1302
+ col.columnId
1303
+ );
1304
+ })
1305
+ ] }, rowIdx))
1306
+ ] }),
1266
1307
  !showEmptyInGrid && /* @__PURE__ */ jsx(
1267
1308
  MaterialTableBody,
1268
1309
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alaarab/ogrid-react-material",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "OGrid React Material implementation – MUI Table–based data grid with sorting, filtering, pagination, column chooser, spreadsheet selection, and CSV export.",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -39,7 +39,7 @@
39
39
  "node": ">=18"
40
40
  },
41
41
  "dependencies": {
42
- "@alaarab/ogrid-react": "2.2.0"
42
+ "@alaarab/ogrid-react": "2.3.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.0.0",