material-react-table 1.5.12 → 1.6.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/README.md CHANGED
@@ -67,7 +67,7 @@ _All features can easily be enabled/disabled_
67
67
 
68
68
  _**Fully Fleshed out [Docs](https://www.material-react-table.com/docs/guides#guides) are available for all features**_
69
69
 
70
- - [x] < 41kb gzipped - [Bundlephobia](https://bundlephobia.com/package/material-react-table)
70
+ - [x] < 43kb gzipped - [Bundlephobia](https://bundlephobia.com/package/material-react-table)
71
71
  - [x] Advanced TypeScript Generics Support (TypeScript Optional)
72
72
  - [x] Aggregation and Grouping (Sum, Average, Count, etc.)
73
73
  - [x] Click To Copy Cell Values
@@ -82,6 +82,7 @@ _**Fully Fleshed out [Docs](https://www.material-react-table.com/docs/guides#gui
82
82
  - [x] Density Toggle
83
83
  - [x] Detail Panels (Expansion)
84
84
  - [x] Filtering (supports client-side and server-side)
85
+ - [x] Filter Match Highlighting
85
86
  - [x] Full Screen Mode
86
87
  - [x] Global Filtering (Search across all columns, rank by best match)
87
88
  - [x] Header Groups & Footers
package/dist/cjs/index.js CHANGED
@@ -72,6 +72,7 @@ var TableCell = require('@mui/material/TableCell');
72
72
  var TableSortLabel = require('@mui/material/TableSortLabel');
73
73
  var TableBody = require('@mui/material/TableBody');
74
74
  var Skeleton = require('@mui/material/Skeleton');
75
+ var highlightWords = require('highlight-words');
75
76
  var TableFooter = require('@mui/material/TableFooter');
76
77
  var DialogActions = require('@mui/material/DialogActions');
77
78
  var DialogContent = require('@mui/material/DialogContent');
@@ -145,6 +146,7 @@ var TableCell__default = /*#__PURE__*/_interopDefaultLegacy(TableCell);
145
146
  var TableSortLabel__default = /*#__PURE__*/_interopDefaultLegacy(TableSortLabel);
146
147
  var TableBody__default = /*#__PURE__*/_interopDefaultLegacy(TableBody);
147
148
  var Skeleton__default = /*#__PURE__*/_interopDefaultLegacy(Skeleton);
149
+ var highlightWords__default = /*#__PURE__*/_interopDefaultLegacy(highlightWords);
148
150
  var TableFooter__default = /*#__PURE__*/_interopDefaultLegacy(TableFooter);
149
151
  var DialogActions__default = /*#__PURE__*/_interopDefaultLegacy(DialogActions);
150
152
  var DialogContent__default = /*#__PURE__*/_interopDefaultLegacy(DialogContent);
@@ -339,6 +341,7 @@ const getCommonCellStyles = ({ column, header, table, tableCellProps, theme, })
339
341
  : undefined, minWidth: `max(${column.getSize()}px, ${(_g = column.columnDef.minSize) !== null && _g !== void 0 ? _g : 30}px)`, width: (_h = header === null || header === void 0 ? void 0 : header.getSize()) !== null && _h !== void 0 ? _h : column.getSize() }));
340
342
  };
341
343
  const MRT_DefaultColumn = {
344
+ filterVariant: 'text',
342
345
  minSize: 40,
343
346
  maxSize: 1000,
344
347
  size: 180,
@@ -1348,7 +1351,7 @@ const MRT_ToggleFiltersButton = (_a) => {
1348
1351
  };
1349
1352
 
1350
1353
  const MRT_ToggleGlobalFilterButton = (_a) => {
1351
- var _b;
1354
+ var _b, _c;
1352
1355
  var { table } = _a, rest = __rest(_a, ["table"]);
1353
1356
  const { getState, options: { icons: { SearchIcon, SearchOffIcon }, localization, }, refs: { searchInputRef }, setShowGlobalFilter, } = table;
1354
1357
  const { globalFilter, showGlobalFilter } = getState();
@@ -1357,7 +1360,7 @@ const MRT_ToggleGlobalFilterButton = (_a) => {
1357
1360
  queueMicrotask(() => { var _a; return (_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); });
1358
1361
  };
1359
1362
  return (React__default["default"].createElement(Tooltip__default["default"], { arrow: true, title: (_b = rest === null || rest === void 0 ? void 0 : rest.title) !== null && _b !== void 0 ? _b : localization.showHideSearch },
1360
- React__default["default"].createElement(IconButton__default["default"], Object.assign({ disabled: !!globalFilter, onClick: handleToggleSearch }, rest, { title: undefined }), showGlobalFilter ? React__default["default"].createElement(SearchOffIcon, null) : React__default["default"].createElement(SearchIcon, null))));
1363
+ React__default["default"].createElement(IconButton__default["default"], Object.assign({ "aria-label": (_c = rest === null || rest === void 0 ? void 0 : rest.title) !== null && _c !== void 0 ? _c : localization.showHideSearch, disabled: !!globalFilter, onClick: handleToggleSearch }, rest, { title: undefined }), showGlobalFilter ? React__default["default"].createElement(SearchOffIcon, null) : React__default["default"].createElement(SearchIcon, null))));
1361
1364
  };
1362
1365
 
1363
1366
  const MRT_ToolbarInternalButtons = ({ table, }) => {
@@ -1398,15 +1401,17 @@ const MRT_ToolbarDropZone = ({ table, }) => {
1398
1401
  React__default["default"].createElement(Box__default["default"], { className: "Mui-ToolbarDropZone", sx: (theme) => ({
1399
1402
  alignItems: 'center',
1400
1403
  backgroundColor: styles.alpha(theme.palette.info.main, (hoveredColumn === null || hoveredColumn === void 0 ? void 0 : hoveredColumn.id) === 'drop-zone' ? 0.2 : 0.1),
1404
+ backdropFilter: 'blur(4px)',
1405
+ boxSizing: 'border-box',
1401
1406
  border: `dashed ${theme.palette.info.main} 2px`,
1402
1407
  display: 'flex',
1403
1408
  justifyContent: 'center',
1404
- height: 'calc(100% - 4px)',
1409
+ height: '100%',
1405
1410
  position: 'absolute',
1406
- width: 'calc(100% - 4px)',
1407
- zIndex: 2,
1411
+ width: '100%',
1412
+ zIndex: 4,
1408
1413
  }), onDragEnter: handleDragEnter },
1409
- React__default["default"].createElement(Typography__default["default"], null, localization.dropToGroupBy.replace('{column}', (_b = (_a = draggingColumn === null || draggingColumn === void 0 ? void 0 : draggingColumn.columnDef) === null || _a === void 0 ? void 0 : _a.header) !== null && _b !== void 0 ? _b : '')))));
1414
+ React__default["default"].createElement(Typography__default["default"], { fontStyle: "italic" }, localization.dropToGroupBy.replace('{column}', (_b = (_a = draggingColumn === null || draggingColumn === void 0 ? void 0 : draggingColumn.columnDef) === null || _a === void 0 ? void 0 : _a.header) !== null && _b !== void 0 ? _b : '')))));
1410
1415
  };
1411
1416
 
1412
1417
  const commonToolbarStyles = ({ theme }) => ({
@@ -1451,6 +1456,7 @@ const MRT_TopToolbar = ({ table, }) => {
1451
1456
  right: 0,
1452
1457
  top: 0,
1453
1458
  width: '100%',
1459
+ zIndex: 2,
1454
1460
  } },
1455
1461
  enableGlobalFilter && positionGlobalFilter === 'left' && (React__default["default"].createElement(MRT_GlobalFilterTextField, { table: table })), (_a = renderTopToolbarCustomActions === null || renderTopToolbarCustomActions === void 0 ? void 0 : renderTopToolbarCustomActions({ table })) !== null && _a !== void 0 ? _a : React__default["default"].createElement("span", null),
1456
1462
  enableToolbarInternalActions ? (React__default["default"].createElement(Box__default["default"], { sx: {
@@ -2209,11 +2215,15 @@ const MRT_TableBodyRowGrabHandle = ({ cell, rowRef, table, }) => {
2209
2215
  return (React__default["default"].createElement(MRT_GrabHandleButton, { iconButtonProps: iconButtonProps, onDragStart: handleDragStart, onDragEnd: handleDragEnd, table: table }));
2210
2216
  };
2211
2217
 
2218
+ const allowedTypes = ['string', 'number'];
2212
2219
  const MRT_TableBodyCellValue = ({ cell, table }) => {
2213
- var _a, _b;
2220
+ var _a, _b, _c, _d;
2221
+ const { getState, options: { enableFilterMatchHighlighting }, } = table;
2214
2222
  const { column, row } = cell;
2215
2223
  const { columnDef } = column;
2216
- return (React__default["default"].createElement(React__default["default"].Fragment, null, cell.getIsAggregated() && columnDef.AggregatedCell
2224
+ const { globalFilter } = getState();
2225
+ const filterValue = column.getFilterValue();
2226
+ let renderedCellValue = cell.getIsAggregated() && columnDef.AggregatedCell
2217
2227
  ? columnDef.AggregatedCell({
2218
2228
  cell,
2219
2229
  column,
@@ -2229,7 +2239,45 @@ const MRT_TableBodyCellValue = ({ cell, table }) => {
2229
2239
  row,
2230
2240
  table,
2231
2241
  })
2232
- : (_b = (_a = columnDef === null || columnDef === void 0 ? void 0 : columnDef.Cell) === null || _a === void 0 ? void 0 : _a.call(columnDef, { cell, column, row, table })) !== null && _b !== void 0 ? _b : cell.renderValue()));
2242
+ : undefined;
2243
+ const isGroupedValue = renderedCellValue !== undefined;
2244
+ if (!isGroupedValue) {
2245
+ renderedCellValue = cell.renderValue();
2246
+ }
2247
+ if (enableFilterMatchHighlighting &&
2248
+ renderedCellValue &&
2249
+ allowedTypes.includes(typeof renderedCellValue) &&
2250
+ ((filterValue &&
2251
+ allowedTypes.includes(typeof filterValue) &&
2252
+ columnDef.filterVariant === 'text') ||
2253
+ (globalFilter && allowedTypes.includes(typeof globalFilter)))) {
2254
+ const chunks = highlightWords__default["default"] === null || highlightWords__default["default"] === void 0 ? void 0 : highlightWords__default["default"]({
2255
+ text: renderedCellValue === null || renderedCellValue === void 0 ? void 0 : renderedCellValue.toString(),
2256
+ query: ((_b = (_a = column.getFilterValue()) !== null && _a !== void 0 ? _a : globalFilter) !== null && _b !== void 0 ? _b : '').toString(),
2257
+ });
2258
+ if ((chunks === null || chunks === void 0 ? void 0 : chunks.length) > 1 || ((_c = chunks === null || chunks === void 0 ? void 0 : chunks[0]) === null || _c === void 0 ? void 0 : _c.match)) {
2259
+ renderedCellValue = (React__default["default"].createElement("span", { "aria-label": renderedCellValue, role: "note" }, (_d = chunks === null || chunks === void 0 ? void 0 : chunks.map(({ key, match, text }) => (React__default["default"].createElement(Box__default["default"], { "aria-hidden": "true", component: "span", key: key, sx: match
2260
+ ? {
2261
+ backgroundColor: (theme) => theme.palette.mode === 'dark'
2262
+ ? styles.darken(theme.palette.warning.dark, 0.25)
2263
+ : styles.lighten(theme.palette.warning.light, 0.5),
2264
+ borderRadius: '2px',
2265
+ color: (theme) => theme.palette.mode === 'dark' ? 'white' : 'black',
2266
+ padding: '2px 1px',
2267
+ }
2268
+ : undefined }, text)))) !== null && _d !== void 0 ? _d : renderedCellValue));
2269
+ }
2270
+ }
2271
+ if (columnDef.Cell && !isGroupedValue) {
2272
+ renderedCellValue = columnDef.Cell({
2273
+ cell,
2274
+ renderedCellValue,
2275
+ column,
2276
+ row,
2277
+ table,
2278
+ });
2279
+ }
2280
+ return React__default["default"].createElement(React__default["default"].Fragment, null, renderedCellValue);
2233
2281
  };
2234
2282
 
2235
2283
  const MRT_TableBodyCell = ({ cell, enableHover, measureElement, numRows, rowIndex, rowRef, table, virtualCell, }) => {
@@ -2345,7 +2393,13 @@ const MRT_TableBodyCell = ({ cell, enableHover, measureElement, numRows, rowInde
2345
2393
  column.id === 'mrt-row-numbers' ? (rowIndex + 1) : column.id === 'mrt-row-drag' ? (React__default["default"].createElement(MRT_TableBodyRowGrabHandle, { cell: cell, rowRef: rowRef, table: table })) : columnDefType === 'display' &&
2346
2394
  (column.id === 'mrt-row-select' ||
2347
2395
  column.id === 'mrt-row-expand' ||
2348
- !row.getIsGrouped()) ? ((_a = columnDef.Cell) === null || _a === void 0 ? void 0 : _a.call(columnDef, { cell, column, row, table })) : isEditing ? (React__default["default"].createElement(MRT_EditCellTextField, { cell: cell, table: table })) : (enableClickToCopy || columnDef.enableClickToCopy) &&
2396
+ !row.getIsGrouped()) ? ((_a = columnDef.Cell) === null || _a === void 0 ? void 0 : _a.call(columnDef, {
2397
+ cell,
2398
+ renderedCellValue: cell.renderValue(),
2399
+ column,
2400
+ row,
2401
+ table,
2402
+ })) : isEditing ? (React__default["default"].createElement(MRT_EditCellTextField, { cell: cell, table: table })) : (enableClickToCopy || columnDef.enableClickToCopy) &&
2349
2403
  columnDef.enableClickToCopy !== false ? (React__default["default"].createElement(MRT_CopyButton, { cell: cell, table: table },
2350
2404
  React__default["default"].createElement(MRT_TableBodyCellValue, { cell: cell, table: table }))) : (React__default["default"].createElement(MRT_TableBodyCellValue, { cell: cell, table: table }))),
2351
2405
  cell.getIsGrouped() && !columnDef.GroupedCell && (React__default["default"].createElement(React__default["default"].Fragment, null,
@@ -3023,7 +3077,7 @@ const MRT_Localization_EN = {
3023
3077
 
3024
3078
  const MaterialReactTable = (_a) => {
3025
3079
  var _b;
3026
- var { aggregationFns, autoResetExpanded = false, columnResizeMode = 'onEnd', defaultColumn, defaultDisplayColumn, editingMode = 'modal', enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnResizing = false, enableDensityToggle = true, enableExpandAll = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enablePinning = false, enableRowSelection = false, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, layoutMode = 'semantic', localization, manualFiltering, manualGrouping, manualPagination, manualSorting, positionActionsColumn = 'first', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberMode = 'original', selectAllMode = 'page', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnResizeMode", "defaultColumn", "defaultDisplayColumn", "editingMode", "enableBottomToolbar", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnResizing", "enableDensityToggle", "enableExpandAll", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enablePinning", "enableRowSelection", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "layoutMode", "localization", "manualFiltering", "manualGrouping", "manualPagination", "manualSorting", "positionActionsColumn", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberMode", "selectAllMode", "sortingFns"]);
3080
+ var { aggregationFns, autoResetExpanded = false, columnResizeMode = 'onEnd', defaultColumn, defaultDisplayColumn, editingMode = 'modal', enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnResizing = false, enableDensityToggle = true, enableExpandAll = true, enableFilterMatchHighlighting = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enablePinning = false, enableRowSelection = false, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, layoutMode = 'semantic', localization, manualFiltering, manualGrouping, manualPagination, manualSorting, positionActionsColumn = 'first', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberMode = 'original', selectAllMode = 'page', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnResizeMode", "defaultColumn", "defaultDisplayColumn", "editingMode", "enableBottomToolbar", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnResizing", "enableDensityToggle", "enableExpandAll", "enableFilterMatchHighlighting", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enablePinning", "enableRowSelection", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "layoutMode", "localization", "manualFiltering", "manualGrouping", "manualPagination", "manualSorting", "positionActionsColumn", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberMode", "selectAllMode", "sortingFns"]);
3027
3081
  const _icons = React.useMemo(() => (Object.assign(Object.assign({}, MRT_Default_Icons), icons)), [icons]);
3028
3082
  const _localization = React.useMemo(() => (Object.assign(Object.assign({}, MRT_Localization_EN), localization)), [localization]);
3029
3083
  const _aggregationFns = React.useMemo(() => (Object.assign(Object.assign({}, MRT_AggregationFns), aggregationFns)), []);
@@ -3046,11 +3100,12 @@ const MaterialReactTable = (_a) => {
3046
3100
  manualPagination = true;
3047
3101
  manualSorting = true;
3048
3102
  }
3049
- return (React__default["default"].createElement(MRT_TableRoot, Object.assign({ aggregationFns: _aggregationFns, autoResetExpanded: autoResetExpanded, columnResizeMode: columnResizeMode, defaultColumn: _defaultColumn, defaultDisplayColumn: _defaultDisplayColumn, editingMode: editingMode, enableBottomToolbar: enableBottomToolbar, enableColumnActions: enableColumnActions, enableColumnFilters: enableColumnFilters, enableColumnOrdering: enableColumnOrdering, enableColumnResizing: enableColumnResizing, enableDensityToggle: enableDensityToggle, enableExpandAll: enableExpandAll, enableFilters: enableFilters, enableFullScreenToggle: enableFullScreenToggle, enableGlobalFilter: enableGlobalFilter, enableGlobalFilterRankedResults: enableGlobalFilterRankedResults, enableGrouping: enableGrouping, enableHiding: enableHiding, enableMultiRowSelection: enableMultiRowSelection, enableMultiSort: enableMultiSort, enablePagination: enablePagination, enablePinning: enablePinning, enableRowSelection: enableRowSelection, enableSelectAll: enableSelectAll, enableSorting: enableSorting, enableStickyHeader: enableStickyHeader, enableTableFooter: enableTableFooter, enableTableHead: enableTableHead, enableToolbarInternalActions: enableToolbarInternalActions, enableTopToolbar: enableTopToolbar, filterFns: _filterFns, icons: _icons, layoutMode: layoutMode, localization: _localization, manualFiltering: manualFiltering, manualGrouping: manualGrouping, manualPagination: manualPagination, manualSorting: manualSorting, positionActionsColumn: positionActionsColumn, positionExpandColumn: positionExpandColumn, positionGlobalFilter: positionGlobalFilter, positionPagination: positionPagination, positionToolbarAlertBanner: positionToolbarAlertBanner, positionToolbarDropZone: positionToolbarDropZone, rowNumberMode: rowNumberMode, selectAllMode: selectAllMode, sortingFns: _sortingFns }, rest)));
3103
+ return (React__default["default"].createElement(MRT_TableRoot, Object.assign({ aggregationFns: _aggregationFns, autoResetExpanded: autoResetExpanded, columnResizeMode: columnResizeMode, defaultColumn: _defaultColumn, defaultDisplayColumn: _defaultDisplayColumn, editingMode: editingMode, enableBottomToolbar: enableBottomToolbar, enableColumnActions: enableColumnActions, enableColumnFilters: enableColumnFilters, enableColumnOrdering: enableColumnOrdering, enableColumnResizing: enableColumnResizing, enableDensityToggle: enableDensityToggle, enableExpandAll: enableExpandAll, enableFilterMatchHighlighting: enableFilterMatchHighlighting, enableFilters: enableFilters, enableFullScreenToggle: enableFullScreenToggle, enableGlobalFilter: enableGlobalFilter, enableGlobalFilterRankedResults: enableGlobalFilterRankedResults, enableGrouping: enableGrouping, enableHiding: enableHiding, enableMultiRowSelection: enableMultiRowSelection, enableMultiSort: enableMultiSort, enablePagination: enablePagination, enablePinning: enablePinning, enableRowSelection: enableRowSelection, enableSelectAll: enableSelectAll, enableSorting: enableSorting, enableStickyHeader: enableStickyHeader, enableTableFooter: enableTableFooter, enableTableHead: enableTableHead, enableToolbarInternalActions: enableToolbarInternalActions, enableTopToolbar: enableTopToolbar, filterFns: _filterFns, icons: _icons, layoutMode: layoutMode, localization: _localization, manualFiltering: manualFiltering, manualGrouping: manualGrouping, manualPagination: manualPagination, manualSorting: manualSorting, positionActionsColumn: positionActionsColumn, positionExpandColumn: positionExpandColumn, positionGlobalFilter: positionGlobalFilter, positionPagination: positionPagination, positionToolbarAlertBanner: positionToolbarAlertBanner, positionToolbarDropZone: positionToolbarDropZone, rowNumberMode: rowNumberMode, selectAllMode: selectAllMode, sortingFns: _sortingFns }, rest)));
3050
3104
  };
3051
3105
 
3052
3106
  exports.MRT_BottomToolbar = MRT_BottomToolbar;
3053
3107
  exports.MRT_CopyButton = MRT_CopyButton;
3108
+ exports.MRT_EditActionButtons = MRT_EditActionButtons;
3054
3109
  exports.MRT_FilterOptionMenu = MRT_FilterOptionMenu;
3055
3110
  exports.MRT_FullScreenToggleButton = MRT_FullScreenToggleButton;
3056
3111
  exports.MRT_GlobalFilterTextField = MRT_GlobalFilterTextField;