material-react-table 2.0.0-rc.0 → 2.0.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.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.0.0-rc.0",
2
+ "version": "2.0.0",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material UI V5 implementation of TanStack React Table V8, written from the ground up in TypeScript.",
@@ -66,9 +66,9 @@
66
66
  "@emotion/react": "^11.11.1",
67
67
  "@emotion/styled": "^11.11.0",
68
68
  "@faker-js/faker": "^8.2.0",
69
- "@mui/icons-material": "^5.14.14",
70
- "@mui/material": "^5.14.14",
71
- "@mui/x-date-pickers": "^6.16.3",
69
+ "@mui/icons-material": "^5.14.15",
70
+ "@mui/material": "^5.14.15",
71
+ "@mui/x-date-pickers": "^6.17.0",
72
72
  "@rollup/plugin-typescript": "^11.1.5",
73
73
  "@size-limit/preset-small-lib": "^10.0.1",
74
74
  "@storybook/addon-a11y": "^7.5.1",
@@ -80,8 +80,8 @@
80
80
  "@storybook/react": "^7.5.1",
81
81
  "@storybook/react-vite": "^7.5.1",
82
82
  "@storybook/testing-library": "^0.2.2",
83
- "@types/node": "^20.8.8",
84
- "@types/react": "^18.2.31",
83
+ "@types/node": "^20.8.9",
84
+ "@types/react": "^18.2.33",
85
85
  "@types/react-dom": "^18.2.14",
86
86
  "@typescript-eslint/eslint-plugin": "^6.9.0",
87
87
  "@typescript-eslint/parser": "^6.9.0",
@@ -50,6 +50,7 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
50
50
  const {
51
51
  getState,
52
52
  options: {
53
+ columnResizeMode,
53
54
  createDisplayMode,
54
55
  editDisplayMode,
55
56
  enableClickToCopy,
@@ -118,19 +119,21 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
118
119
  const isFirstColumn = getIsFirstColumn(column, table);
119
120
  const isLastColumn = getIsLastColumn(column, table);
120
121
  const isLastRow = numRows && rowIndex === numRows - 1;
122
+ const showResizeBorder =
123
+ columnSizingInfo.isResizingColumn === column.id &&
124
+ columnResizeMode === 'onChange';
121
125
 
122
- const borderStyle =
123
- columnSizingInfo.isResizingColumn === column.id
124
- ? `2px solid ${draggingBorderColor} !important`
125
- : isDraggingColumn || isDraggingRow
126
- ? `1px dashed ${theme.palette.grey[500]} !important`
127
- : isHoveredColumn ||
128
- isHoveredRow ||
129
- columnSizingInfo.isResizingColumn === column.id
130
- ? `2px dashed ${draggingBorderColor} !important`
131
- : undefined;
126
+ const borderStyle = showResizeBorder
127
+ ? `2px solid ${draggingBorderColor} !important`
128
+ : isDraggingColumn || isDraggingRow
129
+ ? `1px dashed ${theme.palette.grey[500]} !important`
130
+ : isHoveredColumn ||
131
+ isHoveredRow ||
132
+ columnSizingInfo.isResizingColumn === column.id
133
+ ? `2px dashed ${draggingBorderColor} !important`
134
+ : undefined;
132
135
 
133
- if (columnSizingInfo.isResizingColumn === column.id) {
136
+ if (showResizeBorder) {
134
137
  return { borderRight: borderStyle };
135
138
  }
136
139
 
@@ -56,7 +56,7 @@ export const MRT_TableBodyCellValue = <TData extends MRT_RowData>({
56
56
  if (
57
57
  enableFilterMatchHighlighting &&
58
58
  columnDef.enableFilterMatchHighlighting !== false &&
59
- renderedCellValue &&
59
+ String(renderedCellValue) &&
60
60
  allowedTypes.includes(typeof renderedCellValue) &&
61
61
  ((filterValue &&
62
62
  allowedTypes.includes(typeof filterValue) &&
@@ -32,6 +32,7 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
32
32
  getState,
33
33
  options: {
34
34
  columnFilterDisplayMode,
35
+ columnResizeMode,
35
36
  enableColumnActions,
36
37
  enableColumnDragging,
37
38
  enableColumnOrdering,
@@ -88,17 +89,20 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
88
89
  }, [showColumnActions, showDragHandle]);
89
90
 
90
91
  const draggingBorders = useMemo(() => {
91
- const borderStyle =
92
+ const showResizeBorder =
92
93
  columnSizingInfo.isResizingColumn === column.id &&
93
- !header.subHeaders.length
94
- ? `2px solid ${draggingBorderColor} !important`
95
- : draggingColumn?.id === column.id
96
- ? `1px dashed ${theme.palette.grey[500]}`
97
- : hoveredColumn?.id === column.id
98
- ? `2px dashed ${draggingBorderColor}`
99
- : undefined;
94
+ columnResizeMode === 'onChange' &&
95
+ !header.subHeaders.length;
100
96
 
101
- if (columnSizingInfo.isResizingColumn === column.id) {
97
+ const borderStyle = showResizeBorder
98
+ ? `2px solid ${draggingBorderColor} !important`
99
+ : draggingColumn?.id === column.id
100
+ ? `1px dashed ${theme.palette.grey[500]}`
101
+ : hoveredColumn?.id === column.id
102
+ ? `2px dashed ${draggingBorderColor}`
103
+ : undefined;
104
+
105
+ if (showResizeBorder) {
102
106
  return { borderRight: borderStyle };
103
107
  }
104
108
  const draggingBorders = borderStyle
@@ -46,7 +46,8 @@ export const MRT_TableHeadCellResizeHandle = <TData extends MRT_RowData>({
46
46
  sx={(theme) => ({
47
47
  '&:active > hr': {
48
48
  backgroundColor: theme.palette.info.main,
49
- opacity: header.subHeaders.length ? 1 : 0,
49
+ opacity:
50
+ header.subHeaders.length || columnResizeMode === 'onEnd' ? 1 : 0,
50
51
  },
51
52
  cursor: 'col-resize',
52
53
  mr:
@@ -73,7 +73,7 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
73
73
  enableTopToolbar = true,
74
74
  filterFns,
75
75
  icons,
76
- layoutMode = 'semantic',
76
+ layoutMode,
77
77
  localization,
78
78
  manualFiltering,
79
79
  manualGrouping,
@@ -118,13 +118,13 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
118
118
  [defaultDisplayColumn],
119
119
  );
120
120
 
121
- if (layoutMode === 'semantic') {
122
- if (rest.enableRowVirtualization || rest.enableColumnVirtualization) {
123
- layoutMode = 'grid';
124
- }
125
- if (enableColumnResizing) {
126
- layoutMode = 'grid-no-grow';
127
- }
121
+ layoutMode =
122
+ layoutMode || (enableColumnResizing ? 'grid-no-grow' : 'semantic');
123
+ if (
124
+ layoutMode === 'semantic' &&
125
+ (rest.enableRowVirtualization || rest.enableColumnVirtualization)
126
+ ) {
127
+ layoutMode = 'grid';
128
128
  }
129
129
 
130
130
  if (rest.enableRowVirtualization) {
@@ -65,7 +65,9 @@ export const MRT_Table = <TData extends MRT_RowData>({
65
65
  const colSizes: { [key: string]: number } = {};
66
66
  for (let i = 0; i < headers.length; i++) {
67
67
  const header = headers[i];
68
- const colSize = header.getSize();
68
+ let colSize = header.getSize();
69
+ if (header.subHeaders?.length)
70
+ colSize = colSize * 1.05 + header.subHeaders.length * 2;
69
71
  colSizes[`--header-${parseCSSVarId(header.id)}-size`] = colSize;
70
72
  colSizes[`--col-${parseCSSVarId(header.column.id)}-size`] = colSize;
71
73
  }
package/src/types.ts CHANGED
@@ -714,7 +714,7 @@ export type MRT_TableOptions<TData extends MRT_RowData> = Omit<
714
714
  }) => Partial<VirtualizerOptions<HTMLDivElement, HTMLTableCellElement>>)
715
715
  | Partial<VirtualizerOptions<HTMLDivElement, HTMLTableCellElement>>;
716
716
  /**
717
- * The columns to display in the table. `accessorKey`s or `accessorFn`s must match keys in the `data` prop.
717
+ * The columns to display in the table. `accessorKey`s or `accessorFn`s must match keys in the `data` table option.
718
718
  *
719
719
  * See more info on creating columns on the official docs site:
720
720
  * @link https://www.material-react-table.com/docs/guides/data-columns
@@ -733,7 +733,7 @@ export type MRT_TableOptions<TData extends MRT_RowData> = Omit<
733
733
  */
734
734
  data: TData[];
735
735
  /**
736
- * Instead of specifying a bunch of the same options for each column, you can just change an option in the `defaultColumn` prop to change a default option for all columns.
736
+ * Instead of specifying a bunch of the same options for each column, you can just change an option in the `defaultColumn` table option to change a default option for all columns.
737
737
  */
738
738
  defaultColumn?: Partial<MRT_ColumnDef<TData>>;
739
739
  /**