material-react-table 0.8.0 → 0.8.3

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 (36) hide show
  1. package/README.md +1 -1
  2. package/dist/MaterialReactTable.d.ts +3 -1
  3. package/dist/head/MRT_DraggableTableHeadCell.d.ts +8 -0
  4. package/dist/head/MRT_TableHeadCell.d.ts +5 -1
  5. package/dist/head/MRT_TableHeadCellFilterContainer.d.ts +8 -0
  6. package/dist/head/MRT_TableHeadCellFilterLabel.d.ts +8 -0
  7. package/dist/head/MRT_TableHeadCellGrabHandle.d.ts +9 -0
  8. package/dist/head/MRT_TableHeadCellResizeHandle.d.ts +8 -0
  9. package/dist/head/MRT_TableHeadCellSortLabel.d.ts +8 -0
  10. package/dist/icons.d.ts +1 -0
  11. package/dist/inputs/MRT_FilterRangeFields.d.ts +2 -2
  12. package/dist/localization.d.ts +1 -0
  13. package/dist/material-react-table.cjs.development.js +306 -111
  14. package/dist/material-react-table.cjs.development.js.map +1 -1
  15. package/dist/material-react-table.cjs.production.min.js +1 -1
  16. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  17. package/dist/material-react-table.esm.js +308 -113
  18. package/dist/material-react-table.esm.js.map +1 -1
  19. package/dist/table/MRT_TableContainer.d.ts +1 -1
  20. package/dist/utils.d.ts +1 -1
  21. package/package.json +10 -8
  22. package/src/MaterialReactTable.tsx +6 -0
  23. package/src/head/MRT_DraggableTableHeadCell.tsx +52 -0
  24. package/src/head/MRT_TableHeadCell.tsx +61 -153
  25. package/src/head/MRT_TableHeadCellFilterContainer.tsx +32 -0
  26. package/src/head/MRT_TableHeadCellFilterLabel.tsx +82 -0
  27. package/src/head/MRT_TableHeadCellGrabHandle.tsx +52 -0
  28. package/src/head/MRT_TableHeadCellResizeHandle.tsx +52 -0
  29. package/src/head/MRT_TableHeadCellSortLabel.tsx +45 -0
  30. package/src/head/MRT_TableHeadRow.tsx +17 -8
  31. package/src/icons.ts +3 -0
  32. package/src/inputs/MRT_FilterRangeFields.tsx +1 -3
  33. package/src/localization.ts +2 -0
  34. package/src/table/MRT_TableContainer.tsx +1 -1
  35. package/src/table/MRT_TablePaper.tsx +26 -22
  36. 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
@@ -2134,6 +2296,7 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2134
2296
  align: column.columnDefType === 'group' ? 'center' : 'left',
2135
2297
  colSpan: header.colSpan
2136
2298
  }, tableCellProps, {
2299
+ ref: column.columnDefType === 'data' ? dropRef : undefined,
2137
2300
  sx: function sx(theme) {
2138
2301
  return _extends({
2139
2302
  backgroundColor: column.getIsPinned() && column.columnDefType !== 'group' ? alpha(lighten(theme.palette.background["default"], 0.04), 0.95) : 'inherit',
@@ -2159,10 +2322,12 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2159
2322
  width: header.getSize()
2160
2323
  }
2161
2324
  }), header.isPlaceholder ? null : column.columnDefType === 'display' ? headerElement : React.createElement(Box, {
2325
+ ref: previewRef,
2162
2326
  sx: {
2163
2327
  alignItems: 'flex-start',
2164
2328
  display: 'flex',
2165
2329
  justifyContent: column.columnDefType === 'group' ? 'center' : 'space-between',
2330
+ opacity: isDragging ? 0.5 : 1,
2166
2331
  width: '100%'
2167
2332
  }
2168
2333
  }, React.createElement(Box, {
@@ -2176,85 +2341,90 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
2176
2341
  flexWrap: 'nowrap',
2177
2342
  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
2343
  }
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",
2344
+ }, headerElement, column.columnDefType === 'data' && column.getCanSort() && React.createElement(MRT_TableHeadCellSortLabel, {
2345
+ header: header,
2346
+ tableInstance: tableInstance
2347
+ }), column.columnDefType === 'data' && enableColumnFilters && column.getCanFilter() && React.createElement(MRT_TableHeadCellFilterLabel, {
2348
+ header: header,
2349
+ tableInstance: tableInstance
2350
+ })), React.createElement(Box, {
2198
2351
  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
- }
2352
+ whiteSpace: 'nowrap'
2207
2353
  }
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, {
2354
+ }, column.columnDefType === 'data' && (enableColumnOrdering && column.enableColumnOrdering !== false || enableGrouping && column.enableGrouping !== false) && React.createElement(MRT_TableHeadCellGrabHandle, {
2209
2355
  header: header,
2356
+ ref: dragRef,
2210
2357
  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) {
2358
+ }), (enableColumnActions || column.enableColumnActions) && column.enableColumnActions !== false && column.columnDefType !== 'group' && React.createElement(MRT_ToggleColumnActionMenuButton, {
2359
+ header: header,
2360
+ tableInstance: tableInstance
2361
+ })), column.getCanResize() && React.createElement(MRT_TableHeadCellResizeHandle, {
2362
+ header: header,
2363
+ tableInstance: tableInstance
2364
+ })), column.columnDefType === 'data' && column.getCanFilter() && React.createElement(MRT_TableHeadCellFilterContainer, {
2365
+ header: header,
2366
+ tableInstance: tableInstance
2367
+ }));
2368
+ };
2369
+
2370
+ var MRT_DraggableTableHeadCell = function MRT_DraggableTableHeadCell(_ref) {
2371
+ var header = _ref.header,
2372
+ tableInstance = _ref.tableInstance;
2373
+ var getState = tableInstance.getState;
2374
+
2375
+ _objectDestructuringEmpty(tableInstance.options);
2376
+
2377
+ var setColumnOrder = tableInstance.setColumnOrder;
2378
+
2379
+ var _getState = getState(),
2380
+ columnOrder = _getState.columnOrder;
2381
+
2382
+ var reorder = function reorder(item, newIndex) {
2383
+ var currentIndex = item.index;
2384
+ columnOrder.splice(newIndex, 0, columnOrder.splice(currentIndex, 1)[0]);
2385
+ setColumnOrder([].concat(columnOrder));
2386
+ };
2387
+
2388
+ var _useDrop = useDrop({
2389
+ accept: 'header',
2390
+ drop: function drop(item) {
2391
+ return reorder(item, header.index);
2392
+ }
2393
+ }),
2394
+ drop = _useDrop[1];
2395
+
2396
+ var _useDrag = useDrag({
2397
+ collect: function collect(monitor) {
2218
2398
  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
- }
2399
+ isDragging: monitor.isDragging()
2234
2400
  };
2235
2401
  },
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, {
2402
+ item: function item() {
2403
+ return header;
2404
+ },
2405
+ type: 'header'
2406
+ }),
2407
+ isDragging = _useDrag[0].isDragging,
2408
+ drag = _useDrag[1],
2409
+ preview = _useDrag[2];
2410
+
2411
+ return React.createElement(MRT_TableHeadCell, {
2412
+ dragRef: drag,
2413
+ dropRef: drop,
2249
2414
  header: header,
2415
+ isDragging: isDragging,
2416
+ previewRef: preview,
2250
2417
  tableInstance: tableInstance
2251
- })));
2418
+ });
2252
2419
  };
2253
2420
 
2254
2421
  var MRT_TableHeadRow = function MRT_TableHeadRow(_ref) {
2255
2422
  var headerGroup = _ref.headerGroup,
2256
2423
  tableInstance = _ref.tableInstance;
2257
- var muiTableHeadRowProps = tableInstance.options.muiTableHeadRowProps;
2424
+ var _tableInstance$option = tableInstance.options,
2425
+ enableColumnOrdering = _tableInstance$option.enableColumnOrdering,
2426
+ enableGrouping = _tableInstance$option.enableGrouping,
2427
+ muiTableHeadRowProps = _tableInstance$option.muiTableHeadRowProps;
2258
2428
  var tableRowProps = muiTableHeadRowProps instanceof Function ? muiTableHeadRowProps({
2259
2429
  headerGroup: headerGroup,
2260
2430
  tableInstance: tableInstance
@@ -2267,7 +2437,11 @@ var MRT_TableHeadRow = function MRT_TableHeadRow(_ref) {
2267
2437
  }, tableRowProps == null ? void 0 : tableRowProps.sx);
2268
2438
  }
2269
2439
  }), headerGroup.headers.map(function (header, index) {
2270
- return React.createElement(MRT_TableHeadCell, {
2440
+ return enableColumnOrdering || enableGrouping ? React.createElement(MRT_DraggableTableHeadCell, {
2441
+ header: header,
2442
+ key: header.id || index,
2443
+ tableInstance: tableInstance
2444
+ }) : React.createElement(MRT_TableHeadCell, {
2271
2445
  header: header,
2272
2446
  key: header.id || index,
2273
2447
  tableInstance: tableInstance
@@ -2841,7 +3015,9 @@ var MRT_TablePaper = function MRT_TablePaper(_ref) {
2841
3015
  var tablePaperProps = muiTablePaperProps instanceof Function ? muiTablePaperProps({
2842
3016
  tableInstance: tableInstance
2843
3017
  }) : muiTablePaperProps;
2844
- return React.createElement(Paper, Object.assign({
3018
+ return React.createElement(DndProvider, {
3019
+ backend: HTML5Backend
3020
+ }, React.createElement(Paper, Object.assign({
2845
3021
  elevation: 2
2846
3022
  }, tablePaperProps, {
2847
3023
  sx: _extends({
@@ -2861,7 +3037,7 @@ var MRT_TablePaper = function MRT_TablePaper(_ref) {
2861
3037
  tableInstance: tableInstance
2862
3038
  }), enableToolbarBottom && React.createElement(MRT_ToolbarBottom, {
2863
3039
  tableInstance: tableInstance
2864
- }));
3040
+ })));
2865
3041
  };
2866
3042
 
2867
3043
  var getAllLeafColumnDefs = function getAllLeafColumnDefs(columns) {
@@ -3076,7 +3252,18 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3076
3252
  return _ref7 = {}, _ref7[c.id] = null, _ref7;
3077
3253
  })));
3078
3254
  }) : 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
3255
+ }, [props.data, (_props$state3 = props.state) == null ? void 0 : _props$state3.isLoading, (_props$state4 = props.state) == null ? void 0 : _props$state4.showSkeletons]);
3256
+
3257
+ var _useState11 = useState(function () {
3258
+ var _initialState$columnO;
3259
+
3260
+ return ((_initialState$columnO = initialState == null ? void 0 : initialState.columnOrder) != null ? _initialState$columnO : props.enableColumnOrdering) ? getAllLeafColumnDefs(columns).map(function (c) {
3261
+ return c.id;
3262
+ }) : [];
3263
+ }),
3264
+ columnOrder = _useState11[0],
3265
+ setColumnOrder = _useState11[1]; //@ts-ignore
3266
+
3080
3267
 
3081
3268
  var tableInstance = _extends({}, useTableInstance(table, _extends({
3082
3269
  filterFns: defaultFilterFNs,
@@ -3092,6 +3279,7 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3092
3279
  },
3093
3280
  //@ts-ignore
3094
3281
  globalFilterFn: currentGlobalFilterFn,
3282
+ onColumnOrderChange: setColumnOrder,
3095
3283
  onPaginationChange: function onPaginationChange(updater) {
3096
3284
  return setPagination(function (old) {
3097
3285
  return functionalUpdate(updater, old);
@@ -3104,6 +3292,7 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3104
3292
  idPrefix: idPrefix,
3105
3293
  initialState: initialState,
3106
3294
  state: _extends({
3295
+ columnOrder: columnOrder,
3107
3296
  currentEditingCell: currentEditingCell,
3108
3297
  currentEditingRow: currentEditingRow,
3109
3298
  currentFilterFns: currentFilterFns,
@@ -3166,7 +3355,7 @@ var MRT_TableRoot = function MRT_TableRoot(props) {
3166
3355
  }));
3167
3356
  };
3168
3357
 
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"];
3358
+ 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
3359
  var MaterialReactTable = (function (_ref) {
3171
3360
  var _ref$autoResetExpande = _ref.autoResetExpanded,
3172
3361
  autoResetExpanded = _ref$autoResetExpande === void 0 ? false : _ref$autoResetExpande,
@@ -3184,6 +3373,8 @@ var MaterialReactTable = (function (_ref) {
3184
3373
  enableColumnActions = _ref$enableColumnActi === void 0 ? true : _ref$enableColumnActi,
3185
3374
  _ref$enableColumnFilt = _ref.enableColumnFilters,
3186
3375
  enableColumnFilters = _ref$enableColumnFilt === void 0 ? true : _ref$enableColumnFilt,
3376
+ _ref$enableColumnOrde = _ref.enableColumnOrdering,
3377
+ enableColumnOrdering = _ref$enableColumnOrde === void 0 ? false : _ref$enableColumnOrde,
3187
3378
  _ref$enableColumnResi = _ref.enableColumnResizing,
3188
3379
  enableColumnResizing = _ref$enableColumnResi === void 0 ? false : _ref$enableColumnResi,
3189
3380
  _ref$enableDensePaddi = _ref.enableDensePaddingToggle,
@@ -3196,6 +3387,8 @@ var MaterialReactTable = (function (_ref) {
3196
3387
  enableFullScreenToggle = _ref$enableFullScreen === void 0 ? true : _ref$enableFullScreen,
3197
3388
  _ref$enableGlobalFilt = _ref.enableGlobalFilter,
3198
3389
  enableGlobalFilter = _ref$enableGlobalFilt === void 0 ? true : _ref$enableGlobalFilt,
3390
+ _ref$enableGrouping = _ref.enableGrouping,
3391
+ enableGrouping = _ref$enableGrouping === void 0 ? false : _ref$enableGrouping,
3199
3392
  _ref$enableHiding = _ref.enableHiding,
3200
3393
  enableHiding = _ref$enableHiding === void 0 ? true : _ref$enableHiding,
3201
3394
  _ref$enableMultiRowSe = _ref.enableMultiRowSelection,
@@ -3241,12 +3434,14 @@ var MaterialReactTable = (function (_ref) {
3241
3434
  editingMode: editingMode,
3242
3435
  enableColumnActions: enableColumnActions,
3243
3436
  enableColumnFilters: enableColumnFilters,
3437
+ enableColumnOrdering: enableColumnOrdering,
3244
3438
  enableColumnResizing: enableColumnResizing,
3245
3439
  enableDensePaddingToggle: enableDensePaddingToggle,
3246
3440
  enableExpandAll: enableExpandAll,
3247
3441
  enableFilters: enableFilters,
3248
3442
  enableFullScreenToggle: enableFullScreenToggle,
3249
3443
  enableGlobalFilter: enableGlobalFilter,
3444
+ enableGrouping: enableGrouping,
3250
3445
  enableHiding: enableHiding,
3251
3446
  enableMultiRowSelection: enableMultiRowSelection,
3252
3447
  enablePagination: enablePagination,