material-react-table 0.8.0 → 0.8.1

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 (33) hide show
  1. package/dist/MaterialReactTable.d.ts +3 -1
  2. package/dist/head/MRT_DraggableTableHeadCell.d.ts +8 -0
  3. package/dist/head/MRT_TableHeadCell.d.ts +5 -1
  4. package/dist/head/MRT_TableHeadCellFilterContainer.d.ts +8 -0
  5. package/dist/head/MRT_TableHeadCellFilterLabel.d.ts +8 -0
  6. package/dist/head/MRT_TableHeadCellGrabHandle.d.ts +9 -0
  7. package/dist/head/MRT_TableHeadCellResizeHandle.d.ts +8 -0
  8. package/dist/head/MRT_TableHeadCellSortLabel.d.ts +8 -0
  9. package/dist/icons.d.ts +1 -0
  10. package/dist/inputs/MRT_FilterRangeFields.d.ts +2 -2
  11. package/dist/localization.d.ts +1 -0
  12. package/dist/material-react-table.cjs.development.js +307 -111
  13. package/dist/material-react-table.cjs.development.js.map +1 -1
  14. package/dist/material-react-table.cjs.production.min.js +1 -1
  15. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  16. package/dist/material-react-table.esm.js +309 -113
  17. package/dist/material-react-table.esm.js.map +1 -1
  18. package/dist/utils.d.ts +1 -1
  19. package/package.json +8 -5
  20. package/src/MaterialReactTable.tsx +6 -0
  21. package/src/head/MRT_DraggableTableHeadCell.tsx +52 -0
  22. package/src/head/MRT_TableHeadCell.tsx +62 -154
  23. package/src/head/MRT_TableHeadCellFilterContainer.tsx +32 -0
  24. package/src/head/MRT_TableHeadCellFilterLabel.tsx +82 -0
  25. package/src/head/MRT_TableHeadCellGrabHandle.tsx +52 -0
  26. package/src/head/MRT_TableHeadCellResizeHandle.tsx +52 -0
  27. package/src/head/MRT_TableHeadCellSortLabel.tsx +45 -0
  28. package/src/head/MRT_TableHeadRow.tsx +17 -8
  29. package/src/icons.ts +3 -0
  30. package/src/inputs/MRT_FilterRangeFields.tsx +1 -3
  31. package/src/localization.ts +2 -0
  32. package/src/table/MRT_TablePaper.tsx +26 -22
  33. package/src/table/MRT_TableRoot.tsx +8 -0
@@ -1,4 +1,4 @@
1
- import React, { useMemo, useState, useCallback, Fragment, useLayoutEffect, useEffect } from 'react';
1
+ import React, { useMemo, useState, useCallback, Fragment, forwardRef, useLayoutEffect, useEffect } from 'react';
2
2
  import ArrowRightIcon from '@mui/icons-material/ArrowRight';
3
3
  import CancelIcon from '@mui/icons-material/Cancel';
4
4
  import CheckBoxIcon from '@mui/icons-material/CheckBox';
@@ -7,6 +7,7 @@ import CloseIcon from '@mui/icons-material/Close';
7
7
  import DensityMediumIcon from '@mui/icons-material/DensityMedium';
8
8
  import DensitySmallIcon from '@mui/icons-material/DensitySmall';
9
9
  import DoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
10
+ import DragHandleIcon from '@mui/icons-material/DragHandle';
10
11
  import DynamicFeedIcon from '@mui/icons-material/DynamicFeed';
11
12
  import EditIcon from '@mui/icons-material/Edit';
12
13
  import ExpandLessIcon from '@mui/icons-material/ExpandLess';
@@ -28,8 +29,10 @@ import SortIcon from '@mui/icons-material/Sort';
28
29
  import ViewColumnIcon from '@mui/icons-material/ViewColumn';
29
30
  import VisibilityOffIcon from '@mui/icons-material/VisibilityOff';
30
31
  import { createTable, useTableInstance, getCoreRowModel, getExpandedRowModel, getFacetedRowModel, getFilteredRowModel, getGroupedRowModel, getPaginationRowModel, getSortedRowModel, functionalUpdate } from '@tanstack/react-table';
31
- import { Tooltip, IconButton, Menu, MenuItem, Box, FormControlLabel, Switch, Button, Divider, ListItemIcon, Checkbox, debounce, Collapse, TextField, InputAdornment, TablePagination, Chip, Alert, LinearProgress, useMediaQuery, Toolbar, lighten, alpha, TableCell, TableSortLabel, TableRow, TableHead, darken, Skeleton, TableBody, TableFooter, Table, TableContainer, Paper, Dialog, Grow } from '@mui/material';
32
+ import { Tooltip, IconButton, Menu, MenuItem, Box, FormControlLabel, Switch, Button, Divider, ListItemIcon, Checkbox, debounce, Collapse, TextField, InputAdornment, TablePagination, Chip, Alert, LinearProgress, useMediaQuery, Toolbar, lighten, alpha, TableSortLabel, TableCell, TableRow, TableHead, darken, Skeleton, TableBody, TableFooter, Table, TableContainer, Paper, Dialog, Grow } from '@mui/material';
32
33
  import { rankItem, rankings } from '@tanstack/match-sorter-utils';
34
+ import { useDrop, useDrag, DndProvider } from 'react-dnd';
35
+ import { HTML5Backend } from 'react-dnd-html5-backend';
33
36
 
34
37
  function _extends() {
35
38
  _extends = Object.assign ? Object.assign.bind() : function (target) {
@@ -48,6 +51,10 @@ function _extends() {
48
51
  return _extends.apply(this, arguments);
49
52
  }
50
53
 
54
+ function _objectDestructuringEmpty(obj) {
55
+ if (obj == null) throw new TypeError("Cannot destructure undefined");
56
+ }
57
+
51
58
  function _objectWithoutPropertiesLoose(source, excluded) {
52
59
  if (source == null) return {};
53
60
  var target = {};
@@ -92,6 +99,7 @@ var MRT_DefaultLocalization_EN = {
92
99
  filterNotEquals: 'Not Equals',
93
100
  filterStartsWith: 'Starts With',
94
101
  filteringByColumn: 'Filtering by {column} - {filterType} {filterValue}',
102
+ grab: 'Grab',
95
103
  groupByColumn: 'Group by {column}',
96
104
  groupedBy: 'Grouped by ',
97
105
  hideAll: 'Hide all',
@@ -138,6 +146,7 @@ var MRT_Default_Icons = {
138
146
  DensityMediumIcon: DensityMediumIcon,
139
147
  DensitySmallIcon: DensitySmallIcon,
140
148
  DoubleArrowDownIcon: DoubleArrowDownIcon,
149
+ DragHandleIcon: DragHandleIcon,
141
150
  DynamicFeedIcon: DynamicFeedIcon,
142
151
  EditIcon: EditIcon,
143
152
  ExpandLessIcon: ExpandLessIcon,
@@ -1989,6 +1998,190 @@ var MRT_FilterTextField = function MRT_FilterTextField(_ref) {
1989
1998
  }));
1990
1999
  };
1991
2000
 
2001
+ var MRT_FilterRangeFields = function MRT_FilterRangeFields(_ref) {
2002
+ var header = _ref.header,
2003
+ tableInstance = _ref.tableInstance;
2004
+ var localization = tableInstance.options.localization;
2005
+ return React.createElement(Box, {
2006
+ sx: {
2007
+ display: 'grid',
2008
+ gridTemplateColumns: '6fr auto 5fr'
2009
+ }
2010
+ }, React.createElement(MRT_FilterTextField, {
2011
+ header: header,
2012
+ inputIndex: 0,
2013
+ tableInstance: tableInstance
2014
+ }), React.createElement(Box, {
2015
+ sx: {
2016
+ width: '100%',
2017
+ minWidth: '5ch',
2018
+ textAlign: 'center'
2019
+ }
2020
+ }, localization.to), React.createElement(MRT_FilterTextField, {
2021
+ header: header,
2022
+ inputIndex: 1,
2023
+ tableInstance: tableInstance
2024
+ }));
2025
+ };
2026
+
2027
+ var MRT_TableHeadCellFilterContainer = function MRT_TableHeadCellFilterContainer(_ref) {
2028
+ var header = _ref.header,
2029
+ tableInstance = _ref.tableInstance;
2030
+ var getState = tableInstance.getState;
2031
+
2032
+ var _getState = getState(),
2033
+ currentFilterFns = _getState.currentFilterFns,
2034
+ showFilters = _getState.showFilters;
2035
+
2036
+ var column = header.column;
2037
+ return React.createElement(Collapse, {
2038
+ "in": showFilters,
2039
+ mountOnEnter: true,
2040
+ unmountOnExit: true
2041
+ }, currentFilterFns[column.id] === MRT_FILTER_OPTION.BETWEEN ? React.createElement(MRT_FilterRangeFields, {
2042
+ header: header,
2043
+ tableInstance: tableInstance
2044
+ }) : React.createElement(MRT_FilterTextField, {
2045
+ header: header,
2046
+ tableInstance: tableInstance
2047
+ }));
2048
+ };
2049
+
2050
+ var MRT_TableHeadCellFilterLabel = function MRT_TableHeadCellFilterLabel(_ref) {
2051
+ var _getState2, _getState2$currentFil;
2052
+
2053
+ var header = _ref.header,
2054
+ tableInstance = _ref.tableInstance;
2055
+ var getState = tableInstance.getState,
2056
+ _tableInstance$option = tableInstance.options,
2057
+ _tableInstance$option2 = _tableInstance$option.icons,
2058
+ FilterAltIcon = _tableInstance$option2.FilterAltIcon,
2059
+ FilterAltOff = _tableInstance$option2.FilterAltOff,
2060
+ localization = _tableInstance$option.localization,
2061
+ setShowFilters = tableInstance.setShowFilters;
2062
+
2063
+ var _getState = getState(),
2064
+ showFilters = _getState.showFilters;
2065
+
2066
+ var column = header.column;
2067
+ var filterFn = (_getState2 = getState()) == null ? void 0 : (_getState2$currentFil = _getState2.currentFilterFns) == null ? void 0 : _getState2$currentFil[header.id];
2068
+ var filterTooltip = !!column.getFilterValue() ? localization.filteringByColumn.replace('{column}', String(column.columnDef.header)).replace('{filterType}', filterFn instanceof Function ? '' : // @ts-ignore
2069
+ localization["filter" + (filterFn.charAt(0).toUpperCase() + filterFn.slice(1))]).replace('{filterValue}', "\"" + (Array.isArray(column.getFilterValue()) ? column.getFilterValue().join("\" " + localization.and + " \"") : column.getFilterValue()) + "\"").replace('" "', '') : localization.showHideFilters;
2070
+ return React.createElement(Tooltip, {
2071
+ arrow: true,
2072
+ placement: "top",
2073
+ title: filterTooltip
2074
+ }, React.createElement(IconButton, {
2075
+ disableRipple: true,
2076
+ onClick: function onClick(event) {
2077
+ event.stopPropagation();
2078
+ setShowFilters(!showFilters);
2079
+ },
2080
+ size: "small",
2081
+ sx: {
2082
+ m: 0,
2083
+ opacity: !!column.getFilterValue() || showFilters ? 0.8 : 0,
2084
+ p: '2px',
2085
+ transition: 'all 0.2s ease-in-out',
2086
+ '&:hover': {
2087
+ backgroundColor: 'transparent',
2088
+ opacity: 0.8
2089
+ }
2090
+ }
2091
+ }, showFilters && !column.getFilterValue() ? React.createElement(FilterAltOff, null) : React.createElement(FilterAltIcon, null)));
2092
+ };
2093
+
2094
+ var MRT_TableHeadCellGrabHandle = /*#__PURE__*/forwardRef(function (_ref, ref) {
2095
+ var tableInstance = _ref.tableInstance;
2096
+ var _tableInstance$option = tableInstance.options,
2097
+ DragHandleIcon = _tableInstance$option.icons.DragHandleIcon,
2098
+ localization = _tableInstance$option.localization;
2099
+ return React.createElement(Tooltip, {
2100
+ arrow: true,
2101
+ enterDelay: 1000,
2102
+ enterNextDelay: 1000,
2103
+ placement: "top",
2104
+ title: localization.grab
2105
+ }, React.createElement(IconButton, {
2106
+ disableRipple: true,
2107
+ ref: ref,
2108
+ size: "small",
2109
+ sx: {
2110
+ cursor: 'grab',
2111
+ m: 0,
2112
+ opacity: 0.5,
2113
+ p: '2px',
2114
+ transition: 'all 0.2s ease-in-out',
2115
+ '&:hover': {
2116
+ backgroundColor: 'transparent',
2117
+ opacity: 1
2118
+ },
2119
+ '&:active': {
2120
+ cursor: 'grabbing'
2121
+ }
2122
+ }
2123
+ }, React.createElement(DragHandleIcon, null)));
2124
+ });
2125
+
2126
+ var MRT_TableHeadCellResizeHandle = function MRT_TableHeadCellResizeHandle(_ref) {
2127
+ var header = _ref.header,
2128
+ tableInstance = _ref.tableInstance;
2129
+ var getState = tableInstance.getState;
2130
+
2131
+ var _getState = getState(),
2132
+ showFilters = _getState.showFilters;
2133
+
2134
+ var column = header.column;
2135
+ return React.createElement(Divider, {
2136
+ flexItem: true,
2137
+ orientation: "vertical",
2138
+ onDoubleClick: function onDoubleClick() {
2139
+ return column.resetSize();
2140
+ },
2141
+ sx: function sx(theme) {
2142
+ return {
2143
+ borderRadius: '2px',
2144
+ borderRightWidth: '2px',
2145
+ cursor: 'col-resize',
2146
+ height: showFilters && column.columnDefType === 'data' ? '4rem' : '2rem',
2147
+ opacity: 0.8,
2148
+ position: 'absolute',
2149
+ right: '1px',
2150
+ touchAction: 'none',
2151
+ transition: column.getIsResizing() ? undefined : 'all 0.2s ease-in-out',
2152
+ userSelect: 'none',
2153
+ zIndex: 2000,
2154
+ '&:active': {
2155
+ backgroundColor: theme.palette.info.main,
2156
+ opacity: 1
2157
+ }
2158
+ };
2159
+ },
2160
+ onMouseDown: header.getResizeHandler(),
2161
+ onTouchStart: header.getResizeHandler(),
2162
+ style: {
2163
+ transform: column.getIsResizing() ? "translateX(" + getState().columnSizingInfo.deltaOffset + "px)" : 'none'
2164
+ }
2165
+ });
2166
+ };
2167
+
2168
+ var MRT_TableHeadCellSortLabel = function MRT_TableHeadCellSortLabel(_ref) {
2169
+ var header = _ref.header,
2170
+ tableInstance = _ref.tableInstance;
2171
+ var localization = tableInstance.options.localization;
2172
+ var column = header.column;
2173
+ var sortTooltip = !!column.getIsSorted() ? column.getIsSorted() === 'desc' ? localization.sortedByColumnDesc.replace('{column}', column.columnDef.header) : localization.sortedByColumnAsc.replace('{column}', column.columnDef.header) : localization.unsorted;
2174
+ return React.createElement(Tooltip, {
2175
+ arrow: true,
2176
+ placement: "top",
2177
+ title: sortTooltip
2178
+ }, React.createElement(TableSortLabel, {
2179
+ "aria-label": sortTooltip,
2180
+ active: !!column.getIsSorted(),
2181
+ direction: column.getIsSorted() ? column.getIsSorted() : undefined
2182
+ }));
2183
+ };
2184
+
1992
2185
  var MRT_ToggleColumnActionMenuButton = function MRT_ToggleColumnActionMenuButton(_ref) {
1993
2186
  var header = _ref.header,
1994
2187
  tableInstance = _ref.tableInstance;
@@ -2049,53 +2242,26 @@ var MRT_ToggleColumnActionMenuButton = function MRT_ToggleColumnActionMenuButton
2049
2242
  }));
2050
2243
  };
2051
2244
 
2052
- var MRT_FilterRangeFields = function MRT_FilterRangeFields(_ref) {
2053
- var header = _ref.header,
2054
- tableInstance = _ref.tableInstance;
2055
- var localization = tableInstance.options.localization;
2056
- return React.createElement(Box, {
2057
- sx: {
2058
- display: 'grid',
2059
- gridTemplateColumns: '6fr auto 5fr'
2060
- }
2061
- }, React.createElement(MRT_FilterTextField, {
2062
- header: header,
2063
- inputIndex: 0,
2064
- tableInstance: tableInstance
2065
- }), React.createElement(Box, {
2066
- sx: {
2067
- width: '100%',
2068
- minWidth: '5ch',
2069
- textAlign: 'center'
2070
- }
2071
- }, localization.to), React.createElement(MRT_FilterTextField, {
2072
- header: header,
2073
- inputIndex: 1,
2074
- tableInstance: tableInstance
2075
- }));
2076
- };
2077
-
2078
2245
  var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2079
- var _getState2, _getState2$currentFil, _column$columnDef$Hea, _column$columnDef, _column$minSize, _column$columnDef$hea, _column$columnDef$hea2;
2246
+ var _column$columnDef$Hea, _column$columnDef, _column$minSize, _column$columnDef$hea, _column$columnDef$hea2;
2080
2247
 
2081
- var header = _ref.header,
2248
+ var dragRef = _ref.dragRef,
2249
+ dropRef = _ref.dropRef,
2250
+ header = _ref.header,
2251
+ isDragging = _ref.isDragging,
2252
+ previewRef = _ref.previewRef,
2082
2253
  tableInstance = _ref.tableInstance;
2083
2254
  var getState = tableInstance.getState,
2084
2255
  _tableInstance$option = tableInstance.options,
2085
2256
  enableColumnActions = _tableInstance$option.enableColumnActions,
2086
2257
  enableColumnFilters = _tableInstance$option.enableColumnFilters,
2258
+ enableColumnOrdering = _tableInstance$option.enableColumnOrdering,
2087
2259
  enableColumnResizing = _tableInstance$option.enableColumnResizing,
2088
- _tableInstance$option2 = _tableInstance$option.icons,
2089
- FilterAltIcon = _tableInstance$option2.FilterAltIcon,
2090
- FilterAltOff = _tableInstance$option2.FilterAltOff,
2091
- localization = _tableInstance$option.localization,
2092
- muiTableHeadCellProps = _tableInstance$option.muiTableHeadCellProps,
2093
- setShowFilters = tableInstance.setShowFilters;
2260
+ enableGrouping = _tableInstance$option.enableGrouping,
2261
+ muiTableHeadCellProps = _tableInstance$option.muiTableHeadCellProps;
2094
2262
 
2095
2263
  var _getState = getState(),
2096
- currentFilterFns = _getState.currentFilterFns,
2097
- isDensePadding = _getState.isDensePadding,
2098
- showFilters = _getState.showFilters;
2264
+ isDensePadding = _getState.isDensePadding;
2099
2265
 
2100
2266
  var column = header.column;
2101
2267
  var mTableHeadCellProps = muiTableHeadCellProps instanceof Function ? muiTableHeadCellProps({
@@ -2109,10 +2275,6 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2109
2275
 
2110
2276
  var tableCellProps = _extends({}, mTableHeadCellProps, mcTableHeadCellProps);
2111
2277
 
2112
- var sortTooltip = !!column.getIsSorted() ? column.getIsSorted() === 'desc' ? localization.sortedByColumnDesc.replace('{column}', column.columnDef.header) : localization.sortedByColumnAsc.replace('{column}', column.columnDef.header) : localization.unsorted;
2113
- var filterFn = (_getState2 = getState()) == null ? void 0 : (_getState2$currentFil = _getState2.currentFilterFns) == null ? void 0 : _getState2$currentFil[header.id];
2114
- var filterTooltip = !!column.getFilterValue() ? localization.filteringByColumn.replace('{column}', String(column.columnDef.header)).replace('{filterType}', filterFn instanceof Function ? '' : // @ts-ignore
2115
- localization["filter" + (filterFn.charAt(0).toUpperCase() + filterFn.slice(1))]).replace('{filterValue}', "\"" + (Array.isArray(column.getFilterValue()) ? column.getFilterValue().join("\" " + localization.and + " \"") : column.getFilterValue()) + "\"").replace('" "', '') : localization.showHideFilters;
2116
2278
  var headerElement = (_column$columnDef$Hea = (_column$columnDef = column.columnDef) == null ? void 0 : _column$columnDef.Header == null ? void 0 : _column$columnDef.Header({
2117
2279
  header: header,
2118
2280
  tableInstance: tableInstance
@@ -2130,10 +2292,12 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2130
2292
  return (tableInstance.getRightLeafHeaders().length - 1 - column.getPinnedIndex()) * 150;
2131
2293
  };
2132
2294
 
2295
+ console.log(column.getCanGroup());
2133
2296
  return React.createElement(TableCell, Object.assign({
2134
2297
  align: column.columnDefType === 'group' ? 'center' : 'left',
2135
2298
  colSpan: header.colSpan
2136
2299
  }, tableCellProps, {
2300
+ ref: column.columnDefType === 'data' ? dropRef : undefined,
2137
2301
  sx: function sx(theme) {
2138
2302
  return _extends({
2139
2303
  backgroundColor: column.getIsPinned() && column.columnDefType !== 'group' ? alpha(lighten(theme.palette.background["default"], 0.04), 0.95) : 'inherit',
@@ -2159,10 +2323,12 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2159
2323
  width: header.getSize()
2160
2324
  }
2161
2325
  }), header.isPlaceholder ? null : column.columnDefType === 'display' ? headerElement : React.createElement(Box, {
2326
+ ref: previewRef,
2162
2327
  sx: {
2163
2328
  alignItems: 'flex-start',
2164
2329
  display: 'flex',
2165
2330
  justifyContent: column.columnDefType === 'group' ? 'center' : 'space-between',
2331
+ opacity: isDragging ? 0.5 : 1,
2166
2332
  width: '100%'
2167
2333
  }
2168
2334
  }, React.createElement(Box, {
@@ -2176,85 +2342,90 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2176
2342
  flexWrap: 'nowrap',
2177
2343
  whiteSpace: ((_column$columnDef$hea = (_column$columnDef$hea2 = column.columnDef.header) == null ? void 0 : _column$columnDef$hea2.length) != null ? _column$columnDef$hea : 0) < 24 ? 'nowrap' : 'normal'
2178
2344
  }
2179
- }, headerElement, column.columnDefType === 'data' && column.getCanSort() && React.createElement(Tooltip, {
2180
- arrow: true,
2181
- placement: "top",
2182
- title: sortTooltip
2183
- }, React.createElement(TableSortLabel, {
2184
- "aria-label": sortTooltip,
2185
- active: !!column.getIsSorted(),
2186
- direction: column.getIsSorted() ? column.getIsSorted() : undefined
2187
- })), column.columnDefType === 'data' && enableColumnFilters && !!column.getCanFilter() && React.createElement(Tooltip, {
2188
- arrow: true,
2189
- placement: "top",
2190
- title: filterTooltip
2191
- }, React.createElement(IconButton, {
2192
- disableRipple: true,
2193
- onClick: function onClick(event) {
2194
- event.stopPropagation();
2195
- setShowFilters(!showFilters);
2196
- },
2197
- size: "small",
2345
+ }, headerElement, column.columnDefType === 'data' && column.getCanSort() && React.createElement(MRT_TableHeadCellSortLabel, {
2346
+ header: header,
2347
+ tableInstance: tableInstance
2348
+ }), column.columnDefType === 'data' && enableColumnFilters && column.getCanFilter() && React.createElement(MRT_TableHeadCellFilterLabel, {
2349
+ header: header,
2350
+ tableInstance: tableInstance
2351
+ })), React.createElement(Box, {
2198
2352
  sx: {
2199
- m: 0,
2200
- opacity: !!column.getFilterValue() ? 0.8 : 0,
2201
- p: '2px',
2202
- transition: 'all 0.2s ease-in-out',
2203
- '&:hover': {
2204
- backgroundColor: 'transparent',
2205
- opacity: 0.8
2206
- }
2353
+ whiteSpace: 'nowrap'
2207
2354
  }
2208
- }, showFilters && !column.getFilterValue() ? React.createElement(FilterAltOff, null) : React.createElement(FilterAltIcon, null)))), (enableColumnActions || column.enableColumnActions) && column.enableColumnActions !== false && column.columnDefType !== 'group' && React.createElement(MRT_ToggleColumnActionMenuButton, {
2355
+ }, column.columnDefType === 'data' && (enableColumnOrdering && column.enableColumnOrdering !== false || enableGrouping && column.enableGrouping !== false) && React.createElement(MRT_TableHeadCellGrabHandle, {
2209
2356
  header: header,
2357
+ ref: dragRef,
2210
2358
  tableInstance: tableInstance
2211
- }), column.getCanResize() && React.createElement(Divider, {
2212
- flexItem: true,
2213
- orientation: "vertical",
2214
- onDoubleClick: function onDoubleClick() {
2215
- return column.resetSize();
2216
- },
2217
- sx: function sx(theme) {
2359
+ }), (enableColumnActions || column.enableColumnActions) && column.enableColumnActions !== false && column.columnDefType !== 'group' && React.createElement(MRT_ToggleColumnActionMenuButton, {
2360
+ header: header,
2361
+ tableInstance: tableInstance
2362
+ })), column.getCanResize() && React.createElement(MRT_TableHeadCellResizeHandle, {
2363
+ header: header,
2364
+ tableInstance: tableInstance
2365
+ })), column.columnDefType === 'data' && column.getCanFilter() && React.createElement(MRT_TableHeadCellFilterContainer, {
2366
+ header: header,
2367
+ tableInstance: tableInstance
2368
+ }));
2369
+ };
2370
+
2371
+ var MRT_DraggableTableHeadCell = function MRT_DraggableTableHeadCell(_ref) {
2372
+ var header = _ref.header,
2373
+ tableInstance = _ref.tableInstance;
2374
+ var getState = tableInstance.getState;
2375
+
2376
+ _objectDestructuringEmpty(tableInstance.options);
2377
+
2378
+ var setColumnOrder = tableInstance.setColumnOrder;
2379
+
2380
+ var _getState = getState(),
2381
+ columnOrder = _getState.columnOrder;
2382
+
2383
+ var reorder = function reorder(item, newIndex) {
2384
+ var currentIndex = item.index;
2385
+ columnOrder.splice(newIndex, 0, columnOrder.splice(currentIndex, 1)[0]);
2386
+ setColumnOrder([].concat(columnOrder));
2387
+ };
2388
+
2389
+ var _useDrop = useDrop({
2390
+ accept: 'header',
2391
+ drop: function drop(item) {
2392
+ return reorder(item, header.index);
2393
+ }
2394
+ }),
2395
+ drop = _useDrop[1];
2396
+
2397
+ var _useDrag = useDrag({
2398
+ collect: function collect(monitor) {
2218
2399
  return {
2219
- borderRadius: '2px',
2220
- borderRightWidth: '2px',
2221
- cursor: 'col-resize',
2222
- height: showFilters && column.columnDefType === 'data' ? '4rem' : '2rem',
2223
- opacity: 0.8,
2224
- position: 'absolute',
2225
- right: '1px',
2226
- touchAction: 'none',
2227
- transition: column.getIsResizing() ? undefined : 'all 0.2s ease-in-out',
2228
- userSelect: 'none',
2229
- zIndex: 2000,
2230
- '&:active': {
2231
- backgroundColor: theme.palette.info.main,
2232
- opacity: 1
2233
- }
2400
+ isDragging: monitor.isDragging()
2234
2401
  };
2235
2402
  },
2236
- onMouseDown: header.getResizeHandler(),
2237
- onTouchStart: header.getResizeHandler(),
2238
- style: {
2239
- transform: column.getIsResizing() ? "translateX(" + getState().columnSizingInfo.deltaOffset + "px)" : 'none'
2240
- }
2241
- })), column.columnDefType === 'data' && column.getCanFilter() && React.createElement(Collapse, {
2242
- "in": showFilters,
2243
- mountOnEnter: true,
2244
- unmountOnExit: true
2245
- }, currentFilterFns[column.id] === MRT_FILTER_OPTION.BETWEEN ? React.createElement(MRT_FilterRangeFields, {
2246
- header: header,
2247
- tableInstance: tableInstance
2248
- }) : React.createElement(MRT_FilterTextField, {
2403
+ item: function item() {
2404
+ return header;
2405
+ },
2406
+ type: 'header'
2407
+ }),
2408
+ isDragging = _useDrag[0].isDragging,
2409
+ drag = _useDrag[1],
2410
+ preview = _useDrag[2];
2411
+
2412
+ return React.createElement(MRT_TableHeadCell, {
2413
+ dragRef: drag,
2414
+ dropRef: drop,
2249
2415
  header: header,
2416
+ isDragging: isDragging,
2417
+ previewRef: preview,
2250
2418
  tableInstance: tableInstance
2251
- })));
2419
+ });
2252
2420
  };
2253
2421
 
2254
2422
  var MRT_TableHeadRow = function MRT_TableHeadRow(_ref) {
2255
2423
  var headerGroup = _ref.headerGroup,
2256
2424
  tableInstance = _ref.tableInstance;
2257
- var muiTableHeadRowProps = tableInstance.options.muiTableHeadRowProps;
2425
+ var _tableInstance$option = tableInstance.options,
2426
+ enableColumnOrdering = _tableInstance$option.enableColumnOrdering,
2427
+ enableGrouping = _tableInstance$option.enableGrouping,
2428
+ muiTableHeadRowProps = _tableInstance$option.muiTableHeadRowProps;
2258
2429
  var tableRowProps = muiTableHeadRowProps instanceof Function ? muiTableHeadRowProps({
2259
2430
  headerGroup: headerGroup,
2260
2431
  tableInstance: tableInstance
@@ -2267,7 +2438,11 @@ var MRT_TableHeadRow = function MRT_TableHeadRow(_ref) {
2267
2438
  }, tableRowProps == null ? void 0 : tableRowProps.sx);
2268
2439
  }
2269
2440
  }), headerGroup.headers.map(function (header, index) {
2270
- return React.createElement(MRT_TableHeadCell, {
2441
+ return enableColumnOrdering || enableGrouping ? React.createElement(MRT_DraggableTableHeadCell, {
2442
+ header: header,
2443
+ key: header.id || index,
2444
+ tableInstance: tableInstance
2445
+ }) : React.createElement(MRT_TableHeadCell, {
2271
2446
  header: header,
2272
2447
  key: header.id || index,
2273
2448
  tableInstance: tableInstance
@@ -2841,7 +3016,9 @@ var MRT_TablePaper = function MRT_TablePaper(_ref) {
2841
3016
  var tablePaperProps = muiTablePaperProps instanceof Function ? muiTablePaperProps({
2842
3017
  tableInstance: tableInstance
2843
3018
  }) : muiTablePaperProps;
2844
- return React.createElement(Paper, Object.assign({
3019
+ return React.createElement(DndProvider, {
3020
+ backend: HTML5Backend
3021
+ }, React.createElement(Paper, Object.assign({
2845
3022
  elevation: 2
2846
3023
  }, tablePaperProps, {
2847
3024
  sx: _extends({
@@ -2861,7 +3038,7 @@ var MRT_TablePaper = function MRT_TablePaper(_ref) {
2861
3038
  tableInstance: tableInstance
2862
3039
  }), enableToolbarBottom && React.createElement(MRT_ToolbarBottom, {
2863
3040
  tableInstance: tableInstance
2864
- }));
3041
+ })));
2865
3042
  };
2866
3043
 
2867
3044
  var getAllLeafColumnDefs = function getAllLeafColumnDefs(columns) {
@@ -3076,7 +3253,18 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3076
3253
  return _ref7 = {}, _ref7[c.id] = null, _ref7;
3077
3254
  })));
3078
3255
  }) : props.data;
3079
- }, [props.data, (_props$state3 = props.state) == null ? void 0 : _props$state3.isLoading, (_props$state4 = props.state) == null ? void 0 : _props$state4.showSkeletons]); //@ts-ignore
3256
+ }, [props.data, (_props$state3 = props.state) == null ? void 0 : _props$state3.isLoading, (_props$state4 = props.state) == null ? void 0 : _props$state4.showSkeletons]);
3257
+
3258
+ var _useState11 = useState(function () {
3259
+ var _initialState$columnO;
3260
+
3261
+ return ((_initialState$columnO = initialState == null ? void 0 : initialState.columnOrder) != null ? _initialState$columnO : props.enableColumnOrdering) ? getAllLeafColumnDefs(columns).map(function (c) {
3262
+ return c.id;
3263
+ }) : [];
3264
+ }),
3265
+ columnOrder = _useState11[0],
3266
+ setColumnOrder = _useState11[1]; //@ts-ignore
3267
+
3080
3268
 
3081
3269
  var tableInstance = _extends({}, useTableInstance(table, _extends({
3082
3270
  filterFns: defaultFilterFNs,
@@ -3092,6 +3280,7 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3092
3280
  },
3093
3281
  //@ts-ignore
3094
3282
  globalFilterFn: currentGlobalFilterFn,
3283
+ onColumnOrderChange: setColumnOrder,
3095
3284
  onPaginationChange: function onPaginationChange(updater) {
3096
3285
  return setPagination(function (old) {
3097
3286
  return functionalUpdate(updater, old);
@@ -3104,6 +3293,7 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3104
3293
  idPrefix: idPrefix,
3105
3294
  initialState: initialState,
3106
3295
  state: _extends({
3296
+ columnOrder: columnOrder,
3107
3297
  currentEditingCell: currentEditingCell,
3108
3298
  currentEditingRow: currentEditingRow,
3109
3299
  currentFilterFns: currentFilterFns,
@@ -3166,7 +3356,7 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3166
3356
  }));
3167
3357
  };
3168
3358
 
3169
- var _excluded$5 = ["autoResetExpanded", "columnResizeMode", "defaultColumn", "editingMode", "enableColumnActions", "enableColumnFilters", "enableColumnResizing", "enableDensePaddingToggle", "enableExpandAll", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableHiding", "enableMultiRowSelection", "enablePagination", "enablePinning", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarBottom", "enableToolbarInternalActions", "enableToolbarTop", "icons", "localization", "persistentStateMode", "positionActionsColumn", "positionPagination", "positionToolbarActions", "positionToolbarAlertBanner"];
3359
+ var _excluded$5 = ["autoResetExpanded", "columnResizeMode", "defaultColumn", "editingMode", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnResizing", "enableDensePaddingToggle", "enableExpandAll", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGrouping", "enableHiding", "enableMultiRowSelection", "enablePagination", "enablePinning", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarBottom", "enableToolbarInternalActions", "enableToolbarTop", "icons", "localization", "persistentStateMode", "positionActionsColumn", "positionPagination", "positionToolbarActions", "positionToolbarAlertBanner"];
3170
3360
  var MaterialReactTable = (function (_ref) {
3171
3361
  var _ref$autoResetExpande = _ref.autoResetExpanded,
3172
3362
  autoResetExpanded = _ref$autoResetExpande === void 0 ? false : _ref$autoResetExpande,
@@ -3184,6 +3374,8 @@ var MaterialReactTable = (function (_ref) {
3184
3374
  enableColumnActions = _ref$enableColumnActi === void 0 ? true : _ref$enableColumnActi,
3185
3375
  _ref$enableColumnFilt = _ref.enableColumnFilters,
3186
3376
  enableColumnFilters = _ref$enableColumnFilt === void 0 ? true : _ref$enableColumnFilt,
3377
+ _ref$enableColumnOrde = _ref.enableColumnOrdering,
3378
+ enableColumnOrdering = _ref$enableColumnOrde === void 0 ? false : _ref$enableColumnOrde,
3187
3379
  _ref$enableColumnResi = _ref.enableColumnResizing,
3188
3380
  enableColumnResizing = _ref$enableColumnResi === void 0 ? false : _ref$enableColumnResi,
3189
3381
  _ref$enableDensePaddi = _ref.enableDensePaddingToggle,
@@ -3196,6 +3388,8 @@ var MaterialReactTable = (function (_ref) {
3196
3388
  enableFullScreenToggle = _ref$enableFullScreen === void 0 ? true : _ref$enableFullScreen,
3197
3389
  _ref$enableGlobalFilt = _ref.enableGlobalFilter,
3198
3390
  enableGlobalFilter = _ref$enableGlobalFilt === void 0 ? true : _ref$enableGlobalFilt,
3391
+ _ref$enableGrouping = _ref.enableGrouping,
3392
+ enableGrouping = _ref$enableGrouping === void 0 ? false : _ref$enableGrouping,
3199
3393
  _ref$enableHiding = _ref.enableHiding,
3200
3394
  enableHiding = _ref$enableHiding === void 0 ? true : _ref$enableHiding,
3201
3395
  _ref$enableMultiRowSe = _ref.enableMultiRowSelection,
@@ -3241,12 +3435,14 @@ var MaterialReactTable = (function (_ref) {
3241
3435
  editingMode: editingMode,
3242
3436
  enableColumnActions: enableColumnActions,
3243
3437
  enableColumnFilters: enableColumnFilters,
3438
+ enableColumnOrdering: enableColumnOrdering,
3244
3439
  enableColumnResizing: enableColumnResizing,
3245
3440
  enableDensePaddingToggle: enableDensePaddingToggle,
3246
3441
  enableExpandAll: enableExpandAll,
3247
3442
  enableFilters: enableFilters,
3248
3443
  enableFullScreenToggle: enableFullScreenToggle,
3249
3444
  enableGlobalFilter: enableGlobalFilter,
3445
+ enableGrouping: enableGrouping,
3250
3446
  enableHiding: enableHiding,
3251
3447
  enableMultiRowSelection: enableMultiRowSelection,
3252
3448
  enablePagination: enablePagination,