material-react-table 2.11.3 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var reactTable = require('@tanstack/react-table');
6
- var matchSorterUtils = require('@tanstack/match-sorter-utils');
7
6
  var react = require('react');
7
+ var matchSorterUtils = require('@tanstack/match-sorter-utils');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
  var IconButton = require('@mui/material/IconButton');
10
10
  var Tooltip = require('@mui/material/Tooltip');
@@ -259,6 +259,54 @@ const getDefaultColumnFilterFn = (columnDef) => {
259
259
  return 'equals';
260
260
  return 'fuzzy';
261
261
  };
262
+ const getColumnFilterInfo = ({ header, table, }) => {
263
+ var _a;
264
+ const { options: { columnFilterModeOptions }, } = table;
265
+ const { column } = header;
266
+ const { columnDef } = column;
267
+ const { filterVariant } = columnDef;
268
+ const isDateFilter = !!((filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.startsWith('date')) || (filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.startsWith('time')));
269
+ const isAutocompleteFilter = filterVariant === 'autocomplete';
270
+ const isRangeFilter = (filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.includes('range')) ||
271
+ ['between', 'betweenInclusive', 'inNumberRange'].includes(columnDef._filterFn);
272
+ const isSelectFilter = filterVariant === 'select';
273
+ const isMultiSelectFilter = filterVariant === 'multi-select';
274
+ const isTextboxFilter = ['autocomplete', 'text'].includes(filterVariant) ||
275
+ (!isSelectFilter && !isMultiSelectFilter);
276
+ const currentFilterOption = columnDef._filterFn;
277
+ const allowedColumnFilterOptions = (_a = columnDef === null || columnDef === void 0 ? void 0 : columnDef.columnFilterModeOptions) !== null && _a !== void 0 ? _a : columnFilterModeOptions;
278
+ const facetedUniqueValues = column.getFacetedUniqueValues();
279
+ return {
280
+ allowedColumnFilterOptions,
281
+ currentFilterOption,
282
+ facetedUniqueValues,
283
+ isAutocompleteFilter,
284
+ isDateFilter,
285
+ isMultiSelectFilter,
286
+ isRangeFilter,
287
+ isSelectFilter,
288
+ isTextboxFilter,
289
+ };
290
+ };
291
+ const useDropdownOptions = ({ header, table, }) => {
292
+ const { column } = header;
293
+ const { columnDef } = column;
294
+ const { facetedUniqueValues, isAutocompleteFilter, isMultiSelectFilter, isSelectFilter, } = getColumnFilterInfo({ header, table });
295
+ return react.useMemo(() => {
296
+ var _a;
297
+ return (_a = columnDef.filterSelectOptions) !== null && _a !== void 0 ? _a : ((isSelectFilter || isMultiSelectFilter || isAutocompleteFilter) &&
298
+ facetedUniqueValues
299
+ ? Array.from(facetedUniqueValues.keys())
300
+ .filter((value) => value !== null && value !== undefined)
301
+ .sort((a, b) => a.localeCompare(b))
302
+ : undefined);
303
+ }, [
304
+ columnDef.filterSelectOptions,
305
+ facetedUniqueValues,
306
+ isMultiSelectFilter,
307
+ isSelectFilter,
308
+ ]);
309
+ };
262
310
 
263
311
  const flexRender = reactTable.flexRender;
264
312
  function createMRTColumnHelper() {
@@ -2098,6 +2146,11 @@ const MRT_TableBodyCell = (_a) => {
2098
2146
  setHoveredColumn(columnDef.enableColumnOrdering !== false ? column : null);
2099
2147
  }
2100
2148
  };
2149
+ const handleDragOver = (e) => {
2150
+ if (columnDef.enableColumnOrdering !== false) {
2151
+ e.preventDefault();
2152
+ }
2153
+ };
2101
2154
  const handleContextMenu = (e) => {
2102
2155
  var _a;
2103
2156
  (_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onContextMenu) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, e);
@@ -2107,7 +2160,7 @@ const MRT_TableBodyCell = (_a) => {
2107
2160
  table.refs.actionCellRef.current = e.currentTarget;
2108
2161
  }
2109
2162
  };
2110
- return (jsxRuntime.jsx(TableCell__default["default"], Object.assign({ align: theme.direction === 'rtl' ? 'right' : 'left', "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined }, tableCellProps, { onContextMenu: handleContextMenu, onDoubleClick: handleDoubleClick, onDragEnter: handleDragEnter, sx: (theme) => (Object.assign(Object.assign({ '&:hover': {
2163
+ return (jsxRuntime.jsx(TableCell__default["default"], Object.assign({ align: theme.direction === 'rtl' ? 'right' : 'left', "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined }, tableCellProps, { onContextMenu: handleContextMenu, onDoubleClick: handleDoubleClick, onDragEnter: handleDragEnter, onDragOver: handleDragOver, sx: (theme) => (Object.assign(Object.assign({ '&:hover': {
2111
2164
  outline: (actionCell === null || actionCell === void 0 ? void 0 : actionCell.id) === cell.id ||
2112
2165
  (editDisplayMode === 'cell' && isEditable) ||
2113
2166
  (editDisplayMode === 'table' && (isCreating || isEditing))
@@ -2152,7 +2205,7 @@ const Memo_MRT_TableBodyCell = react.memo(MRT_TableBodyCell, (prev, next) => nex
2152
2205
 
2153
2206
  const MRT_TableDetailPanel = (_a) => {
2154
2207
  var { parentRowRef, row, rowVirtualizer, staticRowIndex, table, virtualRow } = _a, rest = __rest(_a, ["parentRowRef", "row", "rowVirtualizer", "staticRowIndex", "table", "virtualRow"]);
2155
- const { getState, getVisibleLeafColumns, options: { enableRowVirtualization, layoutMode, mrtTheme: { baseBackgroundColor }, muiDetailPanelProps, muiTableBodyRowProps, renderDetailPanel, }, } = table;
2208
+ const { getState, getVisibleLeafColumns, options: { layoutMode, mrtTheme: { baseBackgroundColor }, muiDetailPanelProps, muiTableBodyRowProps, renderDetailPanel, }, } = table;
2156
2209
  const { isLoading } = getState();
2157
2210
  const tableRowProps = parseFromValuesOrFunc(muiTableBodyRowProps, {
2158
2211
  isDetailPanel: true,
@@ -2177,9 +2230,7 @@ const MRT_TableDetailPanel = (_a) => {
2177
2230
  : undefined, transform: virtualRow
2178
2231
  ? `translateY(${virtualRow === null || virtualRow === void 0 ? void 0 : virtualRow.start}px)`
2179
2232
  : undefined, width: '100%' }, parseFromValuesOrFunc(tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx, theme)));
2180
- }, children: jsxRuntime.jsx(TableCell__default["default"], Object.assign({ className: "Mui-TableBodyCell-DetailPanel", colSpan: getVisibleLeafColumns().length }, tableCellProps, { sx: (theme) => (Object.assign({ backgroundColor: virtualRow ? baseBackgroundColor : undefined, borderBottom: !row.getIsExpanded() ? 'none' : undefined, display: (layoutMode === null || layoutMode === void 0 ? void 0 : layoutMode.startsWith('grid')) ? 'flex' : undefined, py: !!DetailPanel && row.getIsExpanded() ? '1rem' : 0, transition: !enableRowVirtualization
2181
- ? 'all 150ms ease-in-out'
2182
- : undefined, width: `100%` }, parseFromValuesOrFunc(tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx, theme))), children: enableRowVirtualization ? (row.getIsExpanded() && DetailPanel) : (jsxRuntime.jsx(Collapse__default["default"], { in: row.getIsExpanded(), mountOnEnter: true, unmountOnExit: true, children: DetailPanel })) })) })));
2233
+ }, children: jsxRuntime.jsx(TableCell__default["default"], Object.assign({ className: "Mui-TableBodyCell-DetailPanel", colSpan: getVisibleLeafColumns().length }, tableCellProps, { sx: (theme) => (Object.assign({ backgroundColor: virtualRow ? baseBackgroundColor : undefined, borderBottom: !row.getIsExpanded() ? 'none' : undefined, display: (layoutMode === null || layoutMode === void 0 ? void 0 : layoutMode.startsWith('grid')) ? 'flex' : undefined, py: !!DetailPanel && row.getIsExpanded() ? '1rem' : 0, transition: !virtualRow ? 'all 150ms ease-in-out' : undefined, width: `100%` }, parseFromValuesOrFunc(tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx, theme))), children: virtualRow ? (row.getIsExpanded() && DetailPanel) : (jsxRuntime.jsx(Collapse__default["default"], { in: row.getIsExpanded(), mountOnEnter: true, unmountOnExit: true, children: DetailPanel })) })) })));
2183
2234
  };
2184
2235
 
2185
2236
  const MRT_TableBodyRow = (_a) => {
@@ -2225,6 +2276,9 @@ const MRT_TableBodyRow = (_a) => {
2225
2276
  setHoveredRow(row);
2226
2277
  }
2227
2278
  };
2279
+ const handleDragOver = (e) => {
2280
+ e.preventDefault();
2281
+ };
2228
2282
  const rowRef = react.useRef(null);
2229
2283
  const cellHighlightColor = isRowSelected
2230
2284
  ? selectedRowBackgroundColor
@@ -2238,7 +2292,7 @@ const MRT_TableBodyRow = (_a) => {
2238
2292
  ? `${styles.lighten(baseBackgroundColor, 0.3)}`
2239
2293
  : `${styles.darken(baseBackgroundColor, 0.3)}`
2240
2294
  : undefined;
2241
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(TableRow__default["default"], Object.assign({ "data-index": renderDetailPanel ? staticRowIndex * 2 : staticRowIndex, "data-pinned": !!isRowPinned || undefined, "data-selected": isRowSelected || undefined, onDragEnter: handleDragEnter, ref: (node) => {
2295
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(TableRow__default["default"], Object.assign({ "data-index": renderDetailPanel ? staticRowIndex * 2 : staticRowIndex, "data-pinned": !!isRowPinned || undefined, "data-selected": isRowSelected || undefined, onDragEnter: handleDragEnter, onDragOver: handleDragOver, ref: (node) => {
2242
2296
  if (node) {
2243
2297
  rowRef.current = node;
2244
2298
  rowVirtualizer === null || rowVirtualizer === void 0 ? void 0 : rowVirtualizer.measureElement(node);
@@ -2833,9 +2887,9 @@ const MRT_FilterCheckbox = (_a) => {
2833
2887
  };
2834
2888
 
2835
2889
  const MRT_FilterTextField = (_a) => {
2836
- var _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
2890
+ var _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
2837
2891
  var { header, rangeFilterIndex, table } = _a, rest = __rest(_a, ["header", "rangeFilterIndex", "table"]);
2838
- const { options: { columnFilterModeOptions, enableColumnFilterModes, icons: { CloseIcon, FilterListIcon }, localization, manualFiltering, muiFilterAutocompleteProps, muiFilterDatePickerProps, muiFilterDateTimePickerProps, muiFilterTextFieldProps, muiFilterTimePickerProps, }, refs: { filterInputRefs }, setColumnFilterFns, } = table;
2892
+ const { options: { enableColumnFilterModes, icons: { CloseIcon, FilterListIcon }, localization, manualFiltering, muiFilterAutocompleteProps, muiFilterDatePickerProps, muiFilterDateTimePickerProps, muiFilterTextFieldProps, muiFilterTimePickerProps, }, refs: { filterInputRefs }, setColumnFilterFns, } = table;
2839
2893
  const { column } = header;
2840
2894
  const { columnDef } = column;
2841
2895
  const { filterVariant } = columnDef;
@@ -2859,14 +2913,8 @@ const MRT_FilterTextField = (_a) => {
2859
2913
  column,
2860
2914
  table,
2861
2915
  }));
2862
- const isDateFilter = (filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.startsWith('date')) || (filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.startsWith('time'));
2863
- const isAutocompleteFilter = filterVariant === 'autocomplete';
2864
- const isRangeFilter = (filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.includes('range')) || rangeFilterIndex !== undefined;
2865
- const isSelectFilter = filterVariant === 'select';
2866
- const isMultiSelectFilter = filterVariant === 'multi-select';
2867
- const isTextboxFilter = ['autocomplete', 'text'].includes(filterVariant) ||
2868
- (!isSelectFilter && !isMultiSelectFilter);
2869
- const currentFilterOption = columnDef._filterFn;
2916
+ const { allowedColumnFilterOptions, currentFilterOption, facetedUniqueValues, isAutocompleteFilter, isDateFilter, isMultiSelectFilter, isRangeFilter, isSelectFilter, isTextboxFilter, } = getColumnFilterInfo({ header, table });
2917
+ const dropdownOptions = useDropdownOptions({ header, table });
2870
2918
  const filterChipLabel = ['empty', 'notEmpty'].includes(currentFilterOption)
2871
2919
  ? //@ts-ignore
2872
2920
  localization[`filter${((_c = (_b = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt) === null || _b === void 0 ? void 0 : _b.call(currentFilterOption, 0)) === null || _c === void 0 ? void 0 : _c.toUpperCase()) +
@@ -2879,13 +2927,11 @@ const MRT_FilterTextField = (_a) => {
2879
2927
  : rangeFilterIndex === 1
2880
2928
  ? localization.max
2881
2929
  : '';
2882
- const allowedColumnFilterOptions = (_g = columnDef === null || columnDef === void 0 ? void 0 : columnDef.columnFilterModeOptions) !== null && _g !== void 0 ? _g : columnFilterModeOptions;
2883
- const showChangeModeButton = enableColumnFilterModes &&
2930
+ const showChangeModeButton = !!(enableColumnFilterModes &&
2884
2931
  columnDef.enableColumnFilterModes !== false &&
2885
2932
  !rangeFilterIndex &&
2886
2933
  (allowedColumnFilterOptions === undefined ||
2887
- !!(allowedColumnFilterOptions === null || allowedColumnFilterOptions === void 0 ? void 0 : allowedColumnFilterOptions.length));
2888
- const facetedUniqueValues = column.getFacetedUniqueValues();
2934
+ !!(allowedColumnFilterOptions === null || allowedColumnFilterOptions === void 0 ? void 0 : allowedColumnFilterOptions.length)));
2889
2935
  const [anchorEl, setAnchorEl] = react.useState(null);
2890
2936
  const [filterValue, setFilterValue] = react.useState(() => {
2891
2937
  var _a, _b;
@@ -2972,23 +3018,9 @@ const MRT_FilterTextField = (_a) => {
2972
3018
  isMounted.current = true;
2973
3019
  }, [column.getFilterValue()]);
2974
3020
  if (columnDef.Filter) {
2975
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: (_h = columnDef.Filter) === null || _h === void 0 ? void 0 : _h.call(columnDef, { column, header, rangeFilterIndex, table }) }));
3021
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: (_g = columnDef.Filter) === null || _g === void 0 ? void 0 : _g.call(columnDef, { column, header, rangeFilterIndex, table }) }));
2976
3022
  }
2977
- const dropdownOptions = react.useMemo(() => {
2978
- var _a;
2979
- return (_a = columnDef.filterSelectOptions) !== null && _a !== void 0 ? _a : ((isSelectFilter || isMultiSelectFilter || isAutocompleteFilter) &&
2980
- facetedUniqueValues
2981
- ? Array.from(facetedUniqueValues.keys())
2982
- .filter((value) => value !== null && value !== undefined)
2983
- .sort((a, b) => a.localeCompare(b))
2984
- : undefined);
2985
- }, [
2986
- columnDef.filterSelectOptions,
2987
- facetedUniqueValues,
2988
- isMultiSelectFilter,
2989
- isSelectFilter,
2990
- ]);
2991
- const endAdornment = !isAutocompleteFilter && !isDateFilter && !filterChipLabel ? (jsxRuntime.jsx(InputAdornment__default["default"], { position: "end", sx: { mr: isSelectFilter || isMultiSelectFilter ? '20px' : undefined }, children: jsxRuntime.jsx(Tooltip__default["default"], { placement: "right", title: (_j = localization.clearFilter) !== null && _j !== void 0 ? _j : '', children: jsxRuntime.jsx("span", { children: jsxRuntime.jsx(IconButton__default["default"], { "aria-label": localization.clearFilter, disabled: !((_k = filterValue === null || filterValue === void 0 ? void 0 : filterValue.toString()) === null || _k === void 0 ? void 0 : _k.length), onClick: handleClear, size: "small", sx: {
3023
+ const endAdornment = !isAutocompleteFilter && !isDateFilter && !filterChipLabel ? (jsxRuntime.jsx(InputAdornment__default["default"], { position: "end", sx: { mr: isSelectFilter || isMultiSelectFilter ? '20px' : undefined }, children: jsxRuntime.jsx(Tooltip__default["default"], { placement: "right", title: (_h = localization.clearFilter) !== null && _h !== void 0 ? _h : '', children: jsxRuntime.jsx("span", { children: jsxRuntime.jsx(IconButton__default["default"], { "aria-label": localization.clearFilter, disabled: !((_j = filterValue === null || filterValue === void 0 ? void 0 : filterValue.toString()) === null || _j === void 0 ? void 0 : _j.length), onClick: handleClear, size: "small", sx: {
2992
3024
  height: '2rem',
2993
3025
  transform: 'scale(0.9)',
2994
3026
  width: '2rem',
@@ -3004,7 +3036,7 @@ const MRT_FilterTextField = (_a) => {
3004
3036
  ? { endAdornment, startAdornment }
3005
3037
  : { startAdornment }, fullWidth: true, helperText: showChangeModeButton ? (jsxRuntime.jsx("label", { children: localization.filterMode.replace('{filterType}',
3006
3038
  // @ts-ignore
3007
- localization[`filter${((_l = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt(0)) === null || _l === void 0 ? void 0 : _l.toUpperCase()) +
3039
+ localization[`filter${((_k = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt(0)) === null || _k === void 0 ? void 0 : _k.toUpperCase()) +
3008
3040
  (currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.slice(1))}`]) })) : null, inputProps: {
3009
3041
  'aria-label': filterPlaceholder,
3010
3042
  autoComplete: 'new-password', // disable autocomplete and autofill
@@ -3038,15 +3070,15 @@ const MRT_FilterTextField = (_a) => {
3038
3070
  value: filterValue || null,
3039
3071
  };
3040
3072
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [(filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.startsWith('time')) ? (jsxRuntime.jsx(TimePicker.TimePicker, Object.assign({}, commonDatePickerProps, timePickerProps, { slotProps: {
3041
- field: Object.assign({ clearable: true, onClear: () => handleClear() }, (_m = timePickerProps === null || timePickerProps === void 0 ? void 0 : timePickerProps.slotProps) === null || _m === void 0 ? void 0 : _m.field),
3042
- textField: Object.assign(Object.assign({}, commonTextFieldProps), (_o = timePickerProps === null || timePickerProps === void 0 ? void 0 : timePickerProps.slotProps) === null || _o === void 0 ? void 0 : _o.textField),
3073
+ field: Object.assign({ clearable: true, onClear: () => handleClear() }, (_l = timePickerProps === null || timePickerProps === void 0 ? void 0 : timePickerProps.slotProps) === null || _l === void 0 ? void 0 : _l.field),
3074
+ textField: Object.assign(Object.assign({}, commonTextFieldProps), (_m = timePickerProps === null || timePickerProps === void 0 ? void 0 : timePickerProps.slotProps) === null || _m === void 0 ? void 0 : _m.textField),
3043
3075
  } }))) : (filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.startsWith('datetime')) ? (jsxRuntime.jsx(DateTimePicker.DateTimePicker, Object.assign({}, commonDatePickerProps, dateTimePickerProps, { slotProps: {
3044
- field: Object.assign({ clearable: true, onClear: () => handleClear() }, (_p = dateTimePickerProps === null || dateTimePickerProps === void 0 ? void 0 : dateTimePickerProps.slotProps) === null || _p === void 0 ? void 0 : _p.field),
3045
- textField: Object.assign(Object.assign({}, commonTextFieldProps), (_q = dateTimePickerProps === null || dateTimePickerProps === void 0 ? void 0 : dateTimePickerProps.slotProps) === null || _q === void 0 ? void 0 : _q.textField),
3076
+ field: Object.assign({ clearable: true, onClear: () => handleClear() }, (_o = dateTimePickerProps === null || dateTimePickerProps === void 0 ? void 0 : dateTimePickerProps.slotProps) === null || _o === void 0 ? void 0 : _o.field),
3077
+ textField: Object.assign(Object.assign({}, commonTextFieldProps), (_p = dateTimePickerProps === null || dateTimePickerProps === void 0 ? void 0 : dateTimePickerProps.slotProps) === null || _p === void 0 ? void 0 : _p.textField),
3046
3078
  } }))) : (filterVariant === null || filterVariant === void 0 ? void 0 : filterVariant.startsWith('date')) ? (jsxRuntime.jsx(DatePicker.DatePicker, Object.assign({}, commonDatePickerProps, datePickerProps, { slotProps: {
3047
- field: Object.assign({ clearable: true, onClear: () => handleClear() }, (_r = datePickerProps === null || datePickerProps === void 0 ? void 0 : datePickerProps.slotProps) === null || _r === void 0 ? void 0 : _r.field),
3048
- textField: Object.assign(Object.assign({}, commonTextFieldProps), (_s = datePickerProps === null || datePickerProps === void 0 ? void 0 : datePickerProps.slotProps) === null || _s === void 0 ? void 0 : _s.textField),
3049
- } }))) : isAutocompleteFilter ? (jsxRuntime.jsx(Autocomplete__default["default"], Object.assign({ freeSolo: true, getOptionLabel: (option) => getValueAndLabel(option).label, onChange: (_e, newValue) => handleAutocompleteChange(newValue), options: (_t = dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.map((option) => getValueAndLabel(option))) !== null && _t !== void 0 ? _t : [] }, autocompleteProps, { renderInput: (builtinTextFieldProps) => {
3079
+ field: Object.assign({ clearable: true, onClear: () => handleClear() }, (_q = datePickerProps === null || datePickerProps === void 0 ? void 0 : datePickerProps.slotProps) === null || _q === void 0 ? void 0 : _q.field),
3080
+ textField: Object.assign(Object.assign({}, commonTextFieldProps), (_r = datePickerProps === null || datePickerProps === void 0 ? void 0 : datePickerProps.slotProps) === null || _r === void 0 ? void 0 : _r.textField),
3081
+ } }))) : isAutocompleteFilter ? (jsxRuntime.jsx(Autocomplete__default["default"], Object.assign({ freeSolo: true, getOptionLabel: (option) => getValueAndLabel(option).label, onChange: (_e, newValue) => handleAutocompleteChange(newValue), options: (_s = dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.map((option) => getValueAndLabel(option))) !== null && _s !== void 0 ? _s : [] }, autocompleteProps, { renderInput: (builtinTextFieldProps) => {
3050
3082
  var _a;
3051
3083
  return (jsxRuntime.jsx(TextField__default["default"], Object.assign({}, builtinTextFieldProps, commonTextFieldProps, { InputProps: Object.assign(Object.assign({}, builtinTextFieldProps.InputProps), { startAdornment: (_a = commonTextFieldProps === null || commonTextFieldProps === void 0 ? void 0 : commonTextFieldProps.InputProps) === null || _a === void 0 ? void 0 : _a.startAdornment }), inputProps: Object.assign(Object.assign({}, builtinTextFieldProps.inputProps), commonTextFieldProps === null || commonTextFieldProps === void 0 ? void 0 : commonTextFieldProps.inputProps), onChange: handleTextFieldChange, onClick: (e) => e.stopPropagation() })));
3052
3084
  }, value: autocompleteValue }))) : (jsxRuntime.jsx(TextField__default["default"], Object.assign({ select: isSelectFilter || isMultiSelectFilter }, commonTextFieldProps, { SelectProps: Object.assign({ MenuProps: { disableScrollLock: true }, displayEmpty: true, multiple: isMultiSelectFilter, renderValue: isMultiSelectFilter
@@ -3057,7 +3089,7 @@ const MRT_FilterTextField = (_a) => {
3057
3089
  : undefined }, commonTextFieldProps.SelectProps), onChange: handleTextFieldChange, onClick: (e) => e.stopPropagation(), value: filterValue !== null && filterValue !== void 0 ? filterValue : '', children: (isSelectFilter || isMultiSelectFilter) && [
3058
3090
  jsxRuntime.jsx(MenuItem__default["default"], { disabled: true, divider: true, hidden: true, value: "", children: jsxRuntime.jsx(Box__default["default"], { sx: { opacity: 0.5 }, children: filterPlaceholder }) }, "p"),
3059
3091
  ...[
3060
- (_u = textFieldProps.children) !== null && _u !== void 0 ? _u : dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.map((option, index) => {
3092
+ (_t = textFieldProps.children) !== null && _t !== void 0 ? _t : dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.map((option, index) => {
3061
3093
  var _a;
3062
3094
  const { label, value } = getValueAndLabel(option);
3063
3095
  return (jsxRuntime.jsxs(MenuItem__default["default"], { sx: {
@@ -3074,7 +3106,7 @@ const MRT_FilterTextField = (_a) => {
3074
3106
 
3075
3107
  const MRT_FilterRangeFields = (_a) => {
3076
3108
  var { header, table } = _a, rest = __rest(_a, ["header", "table"]);
3077
- return (jsxRuntime.jsxs(Box__default["default"], Object.assign({}, rest, { sx: (theme) => (Object.assign({ display: 'grid', gap: '1rem', gridTemplateColumns: '1fr 1fr' }, parseFromValuesOrFunc(rest === null || rest === void 0 ? void 0 : rest.sx, theme))), children: [jsxRuntime.jsx(MRT_FilterTextField, { header: header, rangeFilterIndex: 0, table: table }), jsxRuntime.jsx(MRT_FilterTextField, { header: header, rangeFilterIndex: 1, table: table })] })));
3109
+ return (jsxRuntime.jsx(Box__default["default"], Object.assign({}, rest, { sx: (theme) => (Object.assign({ display: 'grid', gap: '1rem', gridTemplateColumns: '1fr 1fr' }, parseFromValuesOrFunc(rest === null || rest === void 0 ? void 0 : rest.sx, theme))), children: [0, 1].map((rangeFilterIndex) => (jsxRuntime.jsx(MRT_FilterTextField, { header: header, rangeFilterIndex: rangeFilterIndex, table: table }, rangeFilterIndex))) })));
3078
3110
  };
3079
3111
 
3080
3112
  const MRT_FilterRangeSlider = (_a) => {
@@ -3150,41 +3182,45 @@ const MRT_FilterRangeSlider = (_a) => {
3150
3182
  };
3151
3183
 
3152
3184
  const MRT_TableHeadCellFilterContainer = (_a) => {
3153
- var _b;
3154
3185
  var { header, table } = _a, rest = __rest(_a, ["header", "table"]);
3155
3186
  const { getState, options: { columnFilterDisplayMode }, } = table;
3156
3187
  const { showColumnFilters } = getState();
3157
3188
  const { column } = header;
3158
3189
  const { columnDef } = column;
3159
- return (jsxRuntime.jsx(Collapse__default["default"], Object.assign({ in: showColumnFilters || columnFilterDisplayMode === 'popover', mountOnEnter: true, unmountOnExit: true }, rest, { children: columnDef.filterVariant === 'checkbox' ? (jsxRuntime.jsx(MRT_FilterCheckbox, { column: column, table: table })) : columnDef.filterVariant === 'range-slider' ? (jsxRuntime.jsx(MRT_FilterRangeSlider, { header: header, table: table })) : ((_b = columnDef.filterVariant) === null || _b === void 0 ? void 0 : _b.includes('range')) ||
3160
- ['between', 'betweenInclusive', 'inNumberRange'].includes(columnDef._filterFn) ? (jsxRuntime.jsx(MRT_FilterRangeFields, { header: header, table: table })) : (jsxRuntime.jsx(MRT_FilterTextField, { header: header, table: table })) })));
3190
+ const { isRangeFilter } = getColumnFilterInfo({ header, table });
3191
+ return (jsxRuntime.jsx(Collapse__default["default"], Object.assign({ in: showColumnFilters || columnFilterDisplayMode === 'popover', mountOnEnter: true, unmountOnExit: true }, rest, { children: columnDef.filterVariant === 'checkbox' ? (jsxRuntime.jsx(MRT_FilterCheckbox, { column: column, table: table })) : columnDef.filterVariant === 'range-slider' ? (jsxRuntime.jsx(MRT_FilterRangeSlider, { header: header, table: table })) : isRangeFilter ? (jsxRuntime.jsx(MRT_FilterRangeFields, { header: header, table: table })) : (jsxRuntime.jsx(MRT_FilterTextField, { header: header, table: table })) })));
3161
3192
  };
3162
3193
 
3163
3194
  const MRT_TableHeadCellFilterLabel = (_a) => {
3164
- var _b, _c, _d;
3195
+ var _b, _c;
3165
3196
  var { header, table } = _a, rest = __rest(_a, ["header", "table"]);
3166
3197
  const { options: { columnFilterDisplayMode, icons: { FilterAltIcon }, localization, }, refs: { filterInputRefs }, setShowColumnFilters, } = table;
3167
3198
  const { column } = header;
3168
3199
  const { columnDef } = column;
3169
3200
  const filterValue = column.getFilterValue();
3170
3201
  const [anchorEl, setAnchorEl] = react.useState(null);
3202
+ const { currentFilterOption, isMultiSelectFilter, isRangeFilter, isSelectFilter, } = getColumnFilterInfo({ header, table });
3203
+ const dropdownOptions = useDropdownOptions({ header, table });
3204
+ const getSelectLabel = (index) => getValueAndLabel(dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.find((option) => getValueAndLabel(option).value ===
3205
+ (index !== undefined ? filterValue[index] : filterValue))).label;
3171
3206
  const isFilterActive = (Array.isArray(filterValue) && filterValue.some(Boolean)) ||
3172
3207
  (!!filterValue && !Array.isArray(filterValue));
3173
- const isRangeFilter = ((_b = columnDef.filterVariant) === null || _b === void 0 ? void 0 : _b.includes('range')) ||
3174
- ['between', 'betweenInclusive', 'inNumberRange'].includes(columnDef._filterFn);
3175
- const currentFilterOption = columnDef._filterFn;
3176
3208
  const filterTooltip = columnFilterDisplayMode === 'popover' && !isFilterActive
3177
- ? (_c = localization.filterByColumn) === null || _c === void 0 ? void 0 : _c.replace('{column}', String(columnDef.header))
3209
+ ? (_b = localization.filterByColumn) === null || _b === void 0 ? void 0 : _b.replace('{column}', String(columnDef.header))
3178
3210
  : localization.filteringByColumn
3179
3211
  .replace('{column}', String(columnDef.header))
3180
3212
  .replace('{filterType}', currentFilterOption
3181
3213
  ? // @ts-ignore
3182
- localization[`filter${((_d = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt(0)) === null || _d === void 0 ? void 0 : _d.toUpperCase()) +
3214
+ localization[`filter${((_c = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt(0)) === null || _c === void 0 ? void 0 : _c.toUpperCase()) +
3183
3215
  (currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.slice(1))}`]
3184
3216
  : '')
3185
3217
  .replace('{filterValue}', `"${Array.isArray(filterValue)
3186
- ? filterValue.join(`" ${isRangeFilter ? localization.and : localization.or} "`)
3187
- : filterValue}"`)
3218
+ ? filterValue
3219
+ .map((value, index) => isMultiSelectFilter ? getSelectLabel(index) : value)
3220
+ .join(`" ${isRangeFilter ? localization.and : localization.or} "`)
3221
+ : isSelectFilter
3222
+ ? getSelectLabel()
3223
+ : filterValue}"`)
3188
3224
  .replace('" "', '');
3189
3225
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Grow__default["default"], { in: columnFilterDisplayMode === 'popover' ||
3190
3226
  (!!filterValue && !isRangeFilter) ||
@@ -3202,7 +3238,7 @@ const MRT_TableHeadCellFilterLabel = (_a) => {
3202
3238
  (_d = (_c = filterInputRefs.current[`${column.id}-0`]) === null || _c === void 0 ? void 0 : _c.select) === null || _d === void 0 ? void 0 : _d.call(_c);
3203
3239
  });
3204
3240
  event.stopPropagation();
3205
- }, size: "small" }, rest, { sx: (theme) => (Object.assign({ height: '16px', ml: '4px', opacity: isFilterActive ? 1 : 0.3, p: '8px', transform: 'scale(0.75)', transition: 'all 150ms ease-in-out', width: '16px' }, parseFromValuesOrFunc(rest === null || rest === void 0 ? void 0 : rest.sx, theme))), children: jsxRuntime.jsx(FilterAltIcon, {}) })) }) }) }), jsxRuntime.jsx(Popover__default["default"], { anchorEl: anchorEl, anchorOrigin: {
3241
+ }, size: "small" }, rest, { sx: (theme) => (Object.assign({ height: '16px', ml: '4px', opacity: isFilterActive ? 1 : 0.3, p: '8px', transform: 'scale(0.75)', transition: 'all 150ms ease-in-out', width: '16px' }, parseFromValuesOrFunc(rest === null || rest === void 0 ? void 0 : rest.sx, theme))), children: jsxRuntime.jsx(FilterAltIcon, {}) })) }) }) }), columnFilterDisplayMode === 'popover' && (jsxRuntime.jsx(Popover__default["default"], { anchorEl: anchorEl, anchorOrigin: {
3206
3242
  horizontal: 'center',
3207
3243
  vertical: 'top',
3208
3244
  }, disableScrollLock: true, onClick: (event) => event.stopPropagation(), onClose: (event) => {
@@ -3212,7 +3248,7 @@ const MRT_TableHeadCellFilterLabel = (_a) => {
3212
3248
  }, onKeyDown: (event) => event.key === 'Enter' && setAnchorEl(null), open: !!anchorEl, slotProps: { paper: { sx: { overflow: 'visible' } } }, transformOrigin: {
3213
3249
  horizontal: 'center',
3214
3250
  vertical: 'bottom',
3215
- }, children: jsxRuntime.jsx(Box__default["default"], { sx: { p: '1rem' }, children: jsxRuntime.jsx(MRT_TableHeadCellFilterContainer, { header: header, table: table }) }) })] }));
3251
+ }, children: jsxRuntime.jsx(Box__default["default"], { sx: { p: '1rem' }, children: jsxRuntime.jsx(MRT_TableHeadCellFilterContainer, { header: header, table: table }) }) }))] }));
3216
3252
  };
3217
3253
 
3218
3254
  const MRT_TableHeadCellGrabHandle = (_a) => {
@@ -3392,6 +3428,11 @@ const MRT_TableHeadCell = (_a) => {
3392
3428
  setHoveredColumn(columnDef.enableColumnOrdering !== false ? column : null);
3393
3429
  }
3394
3430
  };
3431
+ const handleDragOver = (e) => {
3432
+ if (columnDef.enableColumnOrdering !== false) {
3433
+ e.preventDefault();
3434
+ }
3435
+ };
3395
3436
  const HeaderElement = (_b = parseFromValuesOrFunc(columnDef.Header, {
3396
3437
  column,
3397
3438
  header,
@@ -3401,7 +3442,7 @@ const MRT_TableHeadCell = (_a) => {
3401
3442
  ? 'center'
3402
3443
  : theme.direction === 'rtl'
3403
3444
  ? 'right'
3404
- : 'left', colSpan: header.colSpan, "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, onDragEnter: handleDragEnter, ref: (node) => {
3445
+ : 'left', colSpan: header.colSpan, "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, onDragEnter: handleDragEnter, onDragOver: handleDragOver, ref: (node) => {
3405
3446
  var _a;
3406
3447
  if (node) {
3407
3448
  tableHeadCellRefs.current[column.id] = node;
@@ -3544,7 +3585,7 @@ const MRT_ToolbarAlertBanner = (_a) => {
3544
3585
 
3545
3586
  const MRT_TableHead = (_a) => {
3546
3587
  var { columnVirtualizer, table } = _a, rest = __rest(_a, ["columnVirtualizer", "table"]);
3547
- const { getHeaderGroups, getSelectedRowModel, getState, options: { enableStickyHeader, layoutMode, muiTableHeadProps, positionToolbarAlertBanner, }, refs: { tableHeadRef }, } = table;
3588
+ const { getState, options: { enableStickyHeader, layoutMode, muiTableHeadProps, positionToolbarAlertBanner, }, refs: { tableHeadRef }, } = table;
3548
3589
  const { isFullScreen, showAlertBanner } = getState();
3549
3590
  const tableHeadProps = Object.assign(Object.assign({}, parseFromValuesOrFunc(muiTableHeadProps, { table })), rest);
3550
3591
  const stickyHeader = enableStickyHeader || isFullScreen;
@@ -3555,12 +3596,14 @@ const MRT_TableHead = (_a) => {
3555
3596
  tableHeadProps.ref.current = ref;
3556
3597
  }
3557
3598
  }, sx: (theme) => (Object.assign({ display: (layoutMode === null || layoutMode === void 0 ? void 0 : layoutMode.startsWith('grid')) ? 'grid' : undefined, opacity: 0.97, position: stickyHeader ? 'sticky' : 'relative', top: stickyHeader && (layoutMode === null || layoutMode === void 0 ? void 0 : layoutMode.startsWith('grid')) ? 0 : undefined, zIndex: stickyHeader ? 2 : undefined }, parseFromValuesOrFunc(tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx, theme))), children: positionToolbarAlertBanner === 'head-overlay' &&
3558
- (showAlertBanner || getSelectedRowModel().rows.length > 0) ? (jsxRuntime.jsx("tr", { style: {
3599
+ (showAlertBanner || table.getSelectedRowModel().rows.length > 0) ? (jsxRuntime.jsx("tr", { style: {
3559
3600
  display: (layoutMode === null || layoutMode === void 0 ? void 0 : layoutMode.startsWith('grid')) ? 'grid' : undefined,
3560
3601
  }, children: jsxRuntime.jsx("th", { colSpan: table.getVisibleLeafColumns().length, style: {
3561
3602
  display: (layoutMode === null || layoutMode === void 0 ? void 0 : layoutMode.startsWith('grid')) ? 'grid' : undefined,
3562
3603
  padding: 0,
3563
- }, children: jsxRuntime.jsx(MRT_ToolbarAlertBanner, { table: table }) }) })) : (getHeaderGroups().map((headerGroup) => (jsxRuntime.jsx(MRT_TableHeadRow, { columnVirtualizer: columnVirtualizer, headerGroup: headerGroup, table: table }, headerGroup.id)))) })));
3604
+ }, children: jsxRuntime.jsx(MRT_ToolbarAlertBanner, { table: table }) }) })) : (table
3605
+ .getHeaderGroups()
3606
+ .map((headerGroup) => (jsxRuntime.jsx(MRT_TableHeadRow, { columnVirtualizer: columnVirtualizer, headerGroup: headerGroup, table: table }, headerGroup.id)))) })));
3564
3607
  };
3565
3608
 
3566
3609
  const MRT_Table = (_a) => {
@@ -3809,6 +3852,9 @@ const MRT_ToolbarDropZone = (_a) => {
3809
3852
  const handleDragEnter = (_event) => {
3810
3853
  setHoveredColumn({ id: 'drop-zone' });
3811
3854
  };
3855
+ const handleDragOver = (e) => {
3856
+ e.preventDefault();
3857
+ };
3812
3858
  react.useEffect(() => {
3813
3859
  var _a;
3814
3860
  if (((_a = table.options.state) === null || _a === void 0 ? void 0 : _a.showToolbarDropZone) !== undefined) {
@@ -3818,7 +3864,7 @@ const MRT_ToolbarDropZone = (_a) => {
3818
3864
  !grouping.includes(draggingColumn.id));
3819
3865
  }
3820
3866
  }, [enableGrouping, draggingColumn, grouping]);
3821
- return (jsxRuntime.jsx(Fade__default["default"], { in: showToolbarDropZone, children: jsxRuntime.jsx(Box__default["default"], Object.assign({ className: "Mui-ToolbarDropZone", onDragEnter: handleDragEnter }, rest, { sx: (theme) => (Object.assign({ alignItems: 'center', backdropFilter: 'blur(4px)', backgroundColor: styles.alpha(theme.palette.info.main, (hoveredColumn === null || hoveredColumn === void 0 ? void 0 : hoveredColumn.id) === 'drop-zone' ? 0.2 : 0.1), border: `dashed ${theme.palette.info.main} 2px`, boxSizing: 'border-box', display: 'flex', height: '100%', justifyContent: 'center', position: 'absolute', width: '100%', zIndex: 4 }, parseFromValuesOrFunc(rest === null || rest === void 0 ? void 0 : rest.sx, theme))), children: jsxRuntime.jsx(Typography__default["default"], { fontStyle: "italic", children: localization.dropToGroupBy.replace('{column}', (_c = (_b = draggingColumn === null || draggingColumn === void 0 ? void 0 : draggingColumn.columnDef) === null || _b === void 0 ? void 0 : _b.header) !== null && _c !== void 0 ? _c : '') }) })) }));
3867
+ return (jsxRuntime.jsx(Fade__default["default"], { in: showToolbarDropZone, children: jsxRuntime.jsx(Box__default["default"], Object.assign({ className: "Mui-ToolbarDropZone", onDragEnter: handleDragEnter, onDragOver: handleDragOver }, rest, { sx: (theme) => (Object.assign({ alignItems: 'center', backdropFilter: 'blur(4px)', backgroundColor: styles.alpha(theme.palette.info.main, (hoveredColumn === null || hoveredColumn === void 0 ? void 0 : hoveredColumn.id) === 'drop-zone' ? 0.2 : 0.1), border: `dashed ${theme.palette.info.main} 2px`, boxSizing: 'border-box', display: 'flex', height: '100%', justifyContent: 'center', position: 'absolute', width: '100%', zIndex: 4 }, parseFromValuesOrFunc(rest === null || rest === void 0 ? void 0 : rest.sx, theme))), children: jsxRuntime.jsx(Typography__default["default"], { fontStyle: "italic", children: localization.dropToGroupBy.replace('{column}', (_c = (_b = draggingColumn === null || draggingColumn === void 0 ? void 0 : draggingColumn.columnDef) === null || _b === void 0 ? void 0 : _b.header) !== null && _c !== void 0 ? _c : '') }) })) }));
3822
3868
  };
3823
3869
 
3824
3870
  const MRT_BottomToolbar = (_a) => {
@@ -4163,16 +4209,16 @@ const MRT_TablePaper = (_a) => {
4163
4209
  }, style: Object.assign(Object.assign({}, (isFullScreen
4164
4210
  ? {
4165
4211
  bottom: 0,
4166
- height: '100vh',
4212
+ height: '100dvh',
4167
4213
  left: 0,
4168
4214
  margin: 0,
4169
- maxHeight: '100vh',
4170
- maxWidth: '100vw',
4215
+ maxHeight: '100dvh',
4216
+ maxWidth: '100dvw',
4171
4217
  padding: 0,
4172
4218
  position: 'fixed',
4173
4219
  right: 0,
4174
4220
  top: 0,
4175
- width: '100vw',
4221
+ width: '100dvw',
4176
4222
  zIndex: 999,
4177
4223
  }
4178
4224
  : {})), paperProps === null || paperProps === void 0 ? void 0 : paperProps.style), sx: (theme) => (Object.assign({ backgroundColor: baseBackgroundColor, backgroundImage: 'unset', overflow: 'hidden', transition: 'all 100ms ease-in-out' }, parseFromValuesOrFunc(paperProps === null || paperProps === void 0 ? void 0 : paperProps.sx, theme))), children: [enableTopToolbar &&
@@ -4264,6 +4310,7 @@ exports.defaultDisplayColumnProps = defaultDisplayColumnProps;
4264
4310
  exports.flexRender = flexRender;
4265
4311
  exports.getAllLeafColumnDefs = getAllLeafColumnDefs;
4266
4312
  exports.getCanRankRows = getCanRankRows;
4313
+ exports.getColumnFilterInfo = getColumnFilterInfo;
4267
4314
  exports.getColumnId = getColumnId;
4268
4315
  exports.getDefaultColumnFilterFn = getDefaultColumnFilterFn;
4269
4316
  exports.getDefaultColumnOrderIds = getDefaultColumnOrderIds;
@@ -4287,6 +4334,7 @@ exports.showRowNumbersColumn = showRowNumbersColumn;
4287
4334
  exports.showRowPinningColumn = showRowPinningColumn;
4288
4335
  exports.showRowSelectionColumn = showRowSelectionColumn;
4289
4336
  exports.showRowSpacerColumn = showRowSpacerColumn;
4337
+ exports.useDropdownOptions = useDropdownOptions;
4290
4338
  exports.useMRT_ColumnVirtualizer = useMRT_ColumnVirtualizer;
4291
4339
  exports.useMRT_Effects = useMRT_Effects;
4292
4340
  exports.useMRT_RowVirtualizer = useMRT_RowVirtualizer;