@redsift/table 11.9.2-muiv5 → 11.9.2

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.
@@ -1,15 +1,1791 @@
1
- import { _ as _objectSpread2, b as _objectWithoutProperties, a as _extends } from './_rollupPluginBabelHelpers.js';
1
+ import { _ as _objectSpread2, a as _objectWithoutProperties, b as _extends$1 } from './_rollupPluginBabelHelpers.js';
2
+ import * as React from 'react';
2
3
  import React__default, { useCallback, useEffect, useMemo, forwardRef, useRef, useState } from 'react';
3
4
  import classNames from 'classnames';
4
- import { useTheme, ThemeProvider, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite } from '@redsift/design-system';
5
- import { GridLinkOperator, useGridApiRef, DataGridPro, gridPaginatedVisibleSortedGridRowEntriesSelector, gridPaginatedVisibleSortedGridRowIdsSelector, gridFilteredSortedRowEntriesSelector, gridFilteredSortedRowIdsSelector } from '@mui/x-data-grid-pro';
6
- import { o as operatorList, M as LicenseInfo, N as useControlledDatagridState, T as ThemeProvider$1, O as StyledDataGrid, f as customColumnTypes } from './useControlledDatagridState.js';
7
- import { g as createTheme } from './Portal.js';
5
+ import { Icon, useTheme as useTheme$1, ThemeProvider, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite } from '@redsift/design-system';
6
+ import { getGridNumericOperators as getGridNumericOperators$1, GridFilterInputValue, GridFilterInputSingleSelect, GridFilterInputMultipleValue, GridFilterInputMultipleSingleSelect, getGridStringOperators as getGridStringOperators$1, getGridBooleanOperators, getGridDateOperators, getGridSingleSelectOperators, GridLogicOperator, useGridApiRef, DataGridPro, gridPaginatedVisibleSortedGridRowEntriesSelector, gridPaginatedVisibleSortedGridRowIdsSelector, gridFilteredSortedRowEntriesSelector, gridFilteredSortedRowIdsSelector } from '@mui/x-data-grid-pro';
7
+ import { L as LicenseInfo, u as useControlledDatagridState, T as ThemeProvider$1, S as StyledDataGrid } from './useControlledDatagridState.js';
8
+ import { mdiSync } from '@redsift/icons';
9
+ import { _ as _objectWithoutPropertiesLoose, a as _extends, d as defaultSxConfig, i as isPlainObject, s as styled, b as styleFunctionSx, u as useTheme, c as clsx, e as createTheme, T as THEME_ID, C as ClassNameGenerator, P as PropTypes, g as generateUtilityClasses, f as generateUtilityClass, h as styled$1, j as useThemeProps, k as capitalize, l as composeClasses, r as rootShouldForwardProp, m as refType } from './Portal.js';
10
+ import { j as jsxRuntimeExports } from './jsx-runtime.js';
11
+ import { u as useFormControl, f as formControlState, i as isAdornedStart, a as isFilled, F as FormControlContext, b as useId, c as Select, I as Input, d as FilledInput, O as OutlinedInput, o as onServerSideSelectionStatusChange, S as ServerSideControlledPagination, C as ControlledPagination } from './ControlledPagination.js';
8
12
  import { T as Toolbar } from './Toolbar2.js';
9
- import { o as onServerSideSelectionStatusChange, S as ServerSideControlledPagination, C as ControlledPagination } from './ControlledPagination.js';
10
13
  import { B as BaseButton, a as BaseCheckbox, c as BasePopper, b as BaseIcon } from './BasePopper.js';
11
14
  import { T as ToolbarWrapper } from './ToolbarWrapper2.js';
12
15
 
16
+ function isMuiElement(element, muiNames) {
17
+ return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1;
18
+ }
19
+
20
+ const _excluded$7 = ["sx"];
21
+ const splitProps = props => {
22
+ var _props$theme$unstable, _props$theme;
23
+ const result = {
24
+ systemProps: {},
25
+ otherProps: {}
26
+ };
27
+ const config = (_props$theme$unstable = props == null ? void 0 : (_props$theme = props.theme) == null ? void 0 : _props$theme.unstable_sxConfig) != null ? _props$theme$unstable : defaultSxConfig;
28
+ Object.keys(props).forEach(prop => {
29
+ if (config[prop]) {
30
+ result.systemProps[prop] = props[prop];
31
+ } else {
32
+ result.otherProps[prop] = props[prop];
33
+ }
34
+ });
35
+ return result;
36
+ };
37
+ function extendSxProp(props) {
38
+ const {
39
+ sx: inSx
40
+ } = props,
41
+ other = _objectWithoutPropertiesLoose(props, _excluded$7);
42
+ const {
43
+ systemProps,
44
+ otherProps
45
+ } = splitProps(other);
46
+ let finalSx;
47
+ if (Array.isArray(inSx)) {
48
+ finalSx = [systemProps, ...inSx];
49
+ } else if (typeof inSx === 'function') {
50
+ finalSx = (...args) => {
51
+ const result = inSx(...args);
52
+ if (!isPlainObject(result)) {
53
+ return systemProps;
54
+ }
55
+ return _extends({}, systemProps, result);
56
+ };
57
+ } else {
58
+ finalSx = _extends({}, systemProps, inSx);
59
+ }
60
+ return _extends({}, otherProps, {
61
+ sx: finalSx
62
+ });
63
+ }
64
+
65
+ const _excluded$6 = ["className", "component"];
66
+ function createBox(options = {}) {
67
+ const {
68
+ themeId,
69
+ defaultTheme,
70
+ defaultClassName = 'MuiBox-root',
71
+ generateClassName
72
+ } = options;
73
+ const BoxRoot = styled('div', {
74
+ shouldForwardProp: prop => prop !== 'theme' && prop !== 'sx' && prop !== 'as'
75
+ })(styleFunctionSx);
76
+ const Box = /*#__PURE__*/React.forwardRef(function Box(inProps, ref) {
77
+ const theme = useTheme(defaultTheme);
78
+ const _extendSxProp = extendSxProp(inProps),
79
+ {
80
+ className,
81
+ component = 'div'
82
+ } = _extendSxProp,
83
+ other = _objectWithoutPropertiesLoose(_extendSxProp, _excluded$6);
84
+ return /*#__PURE__*/jsxRuntimeExports.jsx(BoxRoot, _extends({
85
+ as: component,
86
+ ref: ref,
87
+ className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),
88
+ theme: themeId ? theme[themeId] || theme : theme
89
+ }, other));
90
+ });
91
+ return Box;
92
+ }
93
+
94
+ const defaultTheme = createTheme();
95
+ const Box = createBox({
96
+ themeId: THEME_ID,
97
+ defaultTheme,
98
+ defaultClassName: 'MuiBox-root',
99
+ generateClassName: ClassNameGenerator.generate
100
+ });
101
+ process.env.NODE_ENV !== "production" ? Box.propTypes /* remove-proptypes */ = {
102
+ // ----------------------------- Warning --------------------------------
103
+ // | These PropTypes are generated from the TypeScript type definitions |
104
+ // | To update them edit the d.ts file and run "yarn proptypes" |
105
+ // ----------------------------------------------------------------------
106
+ /**
107
+ * @ignore
108
+ */
109
+ children: PropTypes.node,
110
+ /**
111
+ * The component used for the root node.
112
+ * Either a string to use a HTML element or a component.
113
+ */
114
+ component: PropTypes.elementType,
115
+ /**
116
+ * The system prop that allows defining system overrides as well as additional CSS styles.
117
+ */
118
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
119
+ } : void 0;
120
+ var Box$1 = Box;
121
+
122
+ function getFormLabelUtilityClasses(slot) {
123
+ return generateUtilityClass('MuiFormLabel', slot);
124
+ }
125
+ const formLabelClasses = generateUtilityClasses('MuiFormLabel', ['root', 'colorSecondary', 'focused', 'disabled', 'error', 'filled', 'required', 'asterisk']);
126
+ var formLabelClasses$1 = formLabelClasses;
127
+
128
+ const _excluded$5 = ["children", "className", "color", "component", "disabled", "error", "filled", "focused", "required"];
129
+ const useUtilityClasses$4 = ownerState => {
130
+ const {
131
+ classes,
132
+ color,
133
+ focused,
134
+ disabled,
135
+ error,
136
+ filled,
137
+ required
138
+ } = ownerState;
139
+ const slots = {
140
+ root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', filled && 'filled', focused && 'focused', required && 'required'],
141
+ asterisk: ['asterisk', error && 'error']
142
+ };
143
+ return composeClasses(slots, getFormLabelUtilityClasses, classes);
144
+ };
145
+ const FormLabelRoot = styled$1('label', {
146
+ name: 'MuiFormLabel',
147
+ slot: 'Root',
148
+ overridesResolver: ({
149
+ ownerState
150
+ }, styles) => {
151
+ return _extends({}, styles.root, ownerState.color === 'secondary' && styles.colorSecondary, ownerState.filled && styles.filled);
152
+ }
153
+ })(({
154
+ theme,
155
+ ownerState
156
+ }) => _extends({
157
+ color: (theme.vars || theme).palette.text.secondary
158
+ }, theme.typography.body1, {
159
+ lineHeight: '1.4375em',
160
+ padding: 0,
161
+ position: 'relative',
162
+ [`&.${formLabelClasses$1.focused}`]: {
163
+ color: (theme.vars || theme).palette[ownerState.color].main
164
+ },
165
+ [`&.${formLabelClasses$1.disabled}`]: {
166
+ color: (theme.vars || theme).palette.text.disabled
167
+ },
168
+ [`&.${formLabelClasses$1.error}`]: {
169
+ color: (theme.vars || theme).palette.error.main
170
+ }
171
+ }));
172
+ const AsteriskComponent = styled$1('span', {
173
+ name: 'MuiFormLabel',
174
+ slot: 'Asterisk',
175
+ overridesResolver: (props, styles) => styles.asterisk
176
+ })(({
177
+ theme
178
+ }) => ({
179
+ [`&.${formLabelClasses$1.error}`]: {
180
+ color: (theme.vars || theme).palette.error.main
181
+ }
182
+ }));
183
+ const FormLabel = /*#__PURE__*/React.forwardRef(function FormLabel(inProps, ref) {
184
+ const props = useThemeProps({
185
+ props: inProps,
186
+ name: 'MuiFormLabel'
187
+ });
188
+ const {
189
+ children,
190
+ className,
191
+ component = 'label'
192
+ } = props,
193
+ other = _objectWithoutPropertiesLoose(props, _excluded$5);
194
+ const muiFormControl = useFormControl();
195
+ const fcs = formControlState({
196
+ props,
197
+ muiFormControl,
198
+ states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']
199
+ });
200
+ const ownerState = _extends({}, props, {
201
+ color: fcs.color || 'primary',
202
+ component,
203
+ disabled: fcs.disabled,
204
+ error: fcs.error,
205
+ filled: fcs.filled,
206
+ focused: fcs.focused,
207
+ required: fcs.required
208
+ });
209
+ const classes = useUtilityClasses$4(ownerState);
210
+ return /*#__PURE__*/jsxRuntimeExports.jsxs(FormLabelRoot, _extends({
211
+ as: component,
212
+ ownerState: ownerState,
213
+ className: clsx(classes.root, className),
214
+ ref: ref
215
+ }, other, {
216
+ children: [children, fcs.required && /*#__PURE__*/jsxRuntimeExports.jsxs(AsteriskComponent, {
217
+ ownerState: ownerState,
218
+ "aria-hidden": true,
219
+ className: classes.asterisk,
220
+ children: ["\u2009", '*']
221
+ })]
222
+ }));
223
+ });
224
+ process.env.NODE_ENV !== "production" ? FormLabel.propTypes /* remove-proptypes */ = {
225
+ // ----------------------------- Warning --------------------------------
226
+ // | These PropTypes are generated from the TypeScript type definitions |
227
+ // | To update them edit the d.ts file and run "yarn proptypes" |
228
+ // ----------------------------------------------------------------------
229
+ /**
230
+ * The content of the component.
231
+ */
232
+ children: PropTypes.node,
233
+ /**
234
+ * Override or extend the styles applied to the component.
235
+ */
236
+ classes: PropTypes.object,
237
+ /**
238
+ * @ignore
239
+ */
240
+ className: PropTypes.string,
241
+ /**
242
+ * The color of the component.
243
+ * It supports both default and custom theme colors, which can be added as shown in the
244
+ * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
245
+ */
246
+ color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),
247
+ /**
248
+ * The component used for the root node.
249
+ * Either a string to use a HTML element or a component.
250
+ */
251
+ component: PropTypes.elementType,
252
+ /**
253
+ * If `true`, the label should be displayed in a disabled state.
254
+ */
255
+ disabled: PropTypes.bool,
256
+ /**
257
+ * If `true`, the label is displayed in an error state.
258
+ */
259
+ error: PropTypes.bool,
260
+ /**
261
+ * If `true`, the label should use filled classes key.
262
+ */
263
+ filled: PropTypes.bool,
264
+ /**
265
+ * If `true`, the input of this label is focused (used by `FormGroup` components).
266
+ */
267
+ focused: PropTypes.bool,
268
+ /**
269
+ * If `true`, the label will indicate that the `input` is required.
270
+ */
271
+ required: PropTypes.bool,
272
+ /**
273
+ * The system prop that allows defining system overrides as well as additional CSS styles.
274
+ */
275
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
276
+ } : void 0;
277
+ var FormLabel$1 = FormLabel;
278
+
279
+ function getInputLabelUtilityClasses(slot) {
280
+ return generateUtilityClass('MuiInputLabel', slot);
281
+ }
282
+ generateUtilityClasses('MuiInputLabel', ['root', 'focused', 'disabled', 'error', 'required', 'asterisk', 'formControl', 'sizeSmall', 'shrink', 'animated', 'standard', 'filled', 'outlined']);
283
+
284
+ const _excluded$4 = ["disableAnimation", "margin", "shrink", "variant", "className"];
285
+ const useUtilityClasses$3 = ownerState => {
286
+ const {
287
+ classes,
288
+ formControl,
289
+ size,
290
+ shrink,
291
+ disableAnimation,
292
+ variant,
293
+ required
294
+ } = ownerState;
295
+ const slots = {
296
+ root: ['root', formControl && 'formControl', !disableAnimation && 'animated', shrink && 'shrink', size === 'small' && 'sizeSmall', variant],
297
+ asterisk: [required && 'asterisk']
298
+ };
299
+ const composedClasses = composeClasses(slots, getInputLabelUtilityClasses, classes);
300
+ return _extends({}, classes, composedClasses);
301
+ };
302
+ const InputLabelRoot = styled$1(FormLabel$1, {
303
+ shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
304
+ name: 'MuiInputLabel',
305
+ slot: 'Root',
306
+ overridesResolver: (props, styles) => {
307
+ const {
308
+ ownerState
309
+ } = props;
310
+ return [{
311
+ [`& .${formLabelClasses$1.asterisk}`]: styles.asterisk
312
+ }, styles.root, ownerState.formControl && styles.formControl, ownerState.size === 'small' && styles.sizeSmall, ownerState.shrink && styles.shrink, !ownerState.disableAnimation && styles.animated, styles[ownerState.variant]];
313
+ }
314
+ })(({
315
+ theme,
316
+ ownerState
317
+ }) => _extends({
318
+ display: 'block',
319
+ transformOrigin: 'top left',
320
+ whiteSpace: 'nowrap',
321
+ overflow: 'hidden',
322
+ textOverflow: 'ellipsis',
323
+ maxWidth: '100%'
324
+ }, ownerState.formControl && {
325
+ position: 'absolute',
326
+ left: 0,
327
+ top: 0,
328
+ // slight alteration to spec spacing to match visual spec result
329
+ transform: 'translate(0, 20px) scale(1)'
330
+ }, ownerState.size === 'small' && {
331
+ // Compensation for the `Input.inputSizeSmall` style.
332
+ transform: 'translate(0, 17px) scale(1)'
333
+ }, ownerState.shrink && {
334
+ transform: 'translate(0, -1.5px) scale(0.75)',
335
+ transformOrigin: 'top left',
336
+ maxWidth: '133%'
337
+ }, !ownerState.disableAnimation && {
338
+ transition: theme.transitions.create(['color', 'transform', 'max-width'], {
339
+ duration: theme.transitions.duration.shorter,
340
+ easing: theme.transitions.easing.easeOut
341
+ })
342
+ }, ownerState.variant === 'filled' && _extends({
343
+ // Chrome's autofill feature gives the input field a yellow background.
344
+ // Since the input field is behind the label in the HTML tree,
345
+ // the input field is drawn last and hides the label with an opaque background color.
346
+ // zIndex: 1 will raise the label above opaque background-colors of input.
347
+ zIndex: 1,
348
+ pointerEvents: 'none',
349
+ transform: 'translate(12px, 16px) scale(1)',
350
+ maxWidth: 'calc(100% - 24px)'
351
+ }, ownerState.size === 'small' && {
352
+ transform: 'translate(12px, 13px) scale(1)'
353
+ }, ownerState.shrink && _extends({
354
+ userSelect: 'none',
355
+ pointerEvents: 'auto',
356
+ transform: 'translate(12px, 7px) scale(0.75)',
357
+ maxWidth: 'calc(133% - 24px)'
358
+ }, ownerState.size === 'small' && {
359
+ transform: 'translate(12px, 4px) scale(0.75)'
360
+ })), ownerState.variant === 'outlined' && _extends({
361
+ // see comment above on filled.zIndex
362
+ zIndex: 1,
363
+ pointerEvents: 'none',
364
+ transform: 'translate(14px, 16px) scale(1)',
365
+ maxWidth: 'calc(100% - 24px)'
366
+ }, ownerState.size === 'small' && {
367
+ transform: 'translate(14px, 9px) scale(1)'
368
+ }, ownerState.shrink && {
369
+ userSelect: 'none',
370
+ pointerEvents: 'auto',
371
+ // Theoretically, we should have (8+5)*2/0.75 = 34px
372
+ // but it feels a better when it bleeds a bit on the left, so 32px.
373
+ maxWidth: 'calc(133% - 32px)',
374
+ transform: 'translate(14px, -9px) scale(0.75)'
375
+ })));
376
+ const InputLabel = /*#__PURE__*/React.forwardRef(function InputLabel(inProps, ref) {
377
+ const props = useThemeProps({
378
+ name: 'MuiInputLabel',
379
+ props: inProps
380
+ });
381
+ const {
382
+ disableAnimation = false,
383
+ shrink: shrinkProp,
384
+ className
385
+ } = props,
386
+ other = _objectWithoutPropertiesLoose(props, _excluded$4);
387
+ const muiFormControl = useFormControl();
388
+ let shrink = shrinkProp;
389
+ if (typeof shrink === 'undefined' && muiFormControl) {
390
+ shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;
391
+ }
392
+ const fcs = formControlState({
393
+ props,
394
+ muiFormControl,
395
+ states: ['size', 'variant', 'required']
396
+ });
397
+ const ownerState = _extends({}, props, {
398
+ disableAnimation,
399
+ formControl: muiFormControl,
400
+ shrink,
401
+ size: fcs.size,
402
+ variant: fcs.variant,
403
+ required: fcs.required
404
+ });
405
+ const classes = useUtilityClasses$3(ownerState);
406
+ return /*#__PURE__*/jsxRuntimeExports.jsx(InputLabelRoot, _extends({
407
+ "data-shrink": shrink,
408
+ ownerState: ownerState,
409
+ ref: ref,
410
+ className: clsx(classes.root, className)
411
+ }, other, {
412
+ classes: classes
413
+ }));
414
+ });
415
+ process.env.NODE_ENV !== "production" ? InputLabel.propTypes /* remove-proptypes */ = {
416
+ // ----------------------------- Warning --------------------------------
417
+ // | These PropTypes are generated from the TypeScript type definitions |
418
+ // | To update them edit the d.ts file and run "yarn proptypes" |
419
+ // ----------------------------------------------------------------------
420
+ /**
421
+ * The content of the component.
422
+ */
423
+ children: PropTypes.node,
424
+ /**
425
+ * Override or extend the styles applied to the component.
426
+ */
427
+ classes: PropTypes.object,
428
+ /**
429
+ * @ignore
430
+ */
431
+ className: PropTypes.string,
432
+ /**
433
+ * The color of the component.
434
+ * It supports both default and custom theme colors, which can be added as shown in the
435
+ * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
436
+ */
437
+ color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),
438
+ /**
439
+ * If `true`, the transition animation is disabled.
440
+ * @default false
441
+ */
442
+ disableAnimation: PropTypes.bool,
443
+ /**
444
+ * If `true`, the component is disabled.
445
+ */
446
+ disabled: PropTypes.bool,
447
+ /**
448
+ * If `true`, the label is displayed in an error state.
449
+ */
450
+ error: PropTypes.bool,
451
+ /**
452
+ * If `true`, the `input` of this label is focused.
453
+ */
454
+ focused: PropTypes.bool,
455
+ /**
456
+ * If `dense`, will adjust vertical spacing. This is normally obtained via context from
457
+ * FormControl.
458
+ */
459
+ margin: PropTypes.oneOf(['dense']),
460
+ /**
461
+ * if `true`, the label will indicate that the `input` is required.
462
+ */
463
+ required: PropTypes.bool,
464
+ /**
465
+ * If `true`, the label is shrunk.
466
+ */
467
+ shrink: PropTypes.bool,
468
+ /**
469
+ * The size of the component.
470
+ * @default 'normal'
471
+ */
472
+ size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['normal', 'small']), PropTypes.string]),
473
+ /**
474
+ * The system prop that allows defining system overrides as well as additional CSS styles.
475
+ */
476
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
477
+ /**
478
+ * The variant to use.
479
+ */
480
+ variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
481
+ } : void 0;
482
+ var InputLabel$1 = InputLabel;
483
+
484
+ function getFormControlUtilityClasses(slot) {
485
+ return generateUtilityClass('MuiFormControl', slot);
486
+ }
487
+ generateUtilityClasses('MuiFormControl', ['root', 'marginNone', 'marginNormal', 'marginDense', 'fullWidth', 'disabled']);
488
+
489
+ const _excluded$3 = ["children", "className", "color", "component", "disabled", "error", "focused", "fullWidth", "hiddenLabel", "margin", "required", "size", "variant"];
490
+ const useUtilityClasses$2 = ownerState => {
491
+ const {
492
+ classes,
493
+ margin,
494
+ fullWidth
495
+ } = ownerState;
496
+ const slots = {
497
+ root: ['root', margin !== 'none' && `margin${capitalize(margin)}`, fullWidth && 'fullWidth']
498
+ };
499
+ return composeClasses(slots, getFormControlUtilityClasses, classes);
500
+ };
501
+ const FormControlRoot = styled$1('div', {
502
+ name: 'MuiFormControl',
503
+ slot: 'Root',
504
+ overridesResolver: ({
505
+ ownerState
506
+ }, styles) => {
507
+ return _extends({}, styles.root, styles[`margin${capitalize(ownerState.margin)}`], ownerState.fullWidth && styles.fullWidth);
508
+ }
509
+ })(({
510
+ ownerState
511
+ }) => _extends({
512
+ display: 'inline-flex',
513
+ flexDirection: 'column',
514
+ position: 'relative',
515
+ // Reset fieldset default style.
516
+ minWidth: 0,
517
+ padding: 0,
518
+ margin: 0,
519
+ border: 0,
520
+ verticalAlign: 'top'
521
+ }, ownerState.margin === 'normal' && {
522
+ marginTop: 16,
523
+ marginBottom: 8
524
+ }, ownerState.margin === 'dense' && {
525
+ marginTop: 8,
526
+ marginBottom: 4
527
+ }, ownerState.fullWidth && {
528
+ width: '100%'
529
+ }));
530
+
531
+ /**
532
+ * Provides context such as filled/focused/error/required for form inputs.
533
+ * Relying on the context provides high flexibility and ensures that the state always stays
534
+ * consistent across the children of the `FormControl`.
535
+ * This context is used by the following components:
536
+ *
537
+ * - FormLabel
538
+ * - FormHelperText
539
+ * - Input
540
+ * - InputLabel
541
+ *
542
+ * You can find one composition example below and more going to [the demos](/material-ui/react-text-field/#components).
543
+ *
544
+ * ```jsx
545
+ * <FormControl>
546
+ * <InputLabel htmlFor="my-input">Email address</InputLabel>
547
+ * <Input id="my-input" aria-describedby="my-helper-text" />
548
+ * <FormHelperText id="my-helper-text">We'll never share your email.</FormHelperText>
549
+ * </FormControl>
550
+ * ```
551
+ *
552
+ * ⚠️ Only one `InputBase` can be used within a FormControl because it creates visual inconsistencies.
553
+ * For instance, only one input can be focused at the same time, the state shouldn't be shared.
554
+ */
555
+ const FormControl = /*#__PURE__*/React.forwardRef(function FormControl(inProps, ref) {
556
+ const props = useThemeProps({
557
+ props: inProps,
558
+ name: 'MuiFormControl'
559
+ });
560
+ const {
561
+ children,
562
+ className,
563
+ color = 'primary',
564
+ component = 'div',
565
+ disabled = false,
566
+ error = false,
567
+ focused: visuallyFocused,
568
+ fullWidth = false,
569
+ hiddenLabel = false,
570
+ margin = 'none',
571
+ required = false,
572
+ size = 'medium',
573
+ variant = 'outlined'
574
+ } = props,
575
+ other = _objectWithoutPropertiesLoose(props, _excluded$3);
576
+ const ownerState = _extends({}, props, {
577
+ color,
578
+ component,
579
+ disabled,
580
+ error,
581
+ fullWidth,
582
+ hiddenLabel,
583
+ margin,
584
+ required,
585
+ size,
586
+ variant
587
+ });
588
+ const classes = useUtilityClasses$2(ownerState);
589
+ const [adornedStart, setAdornedStart] = React.useState(() => {
590
+ // We need to iterate through the children and find the Input in order
591
+ // to fully support server-side rendering.
592
+ let initialAdornedStart = false;
593
+ if (children) {
594
+ React.Children.forEach(children, child => {
595
+ if (!isMuiElement(child, ['Input', 'Select'])) {
596
+ return;
597
+ }
598
+ const input = isMuiElement(child, ['Select']) ? child.props.input : child;
599
+ if (input && isAdornedStart(input.props)) {
600
+ initialAdornedStart = true;
601
+ }
602
+ });
603
+ }
604
+ return initialAdornedStart;
605
+ });
606
+ const [filled, setFilled] = React.useState(() => {
607
+ // We need to iterate through the children and find the Input in order
608
+ // to fully support server-side rendering.
609
+ let initialFilled = false;
610
+ if (children) {
611
+ React.Children.forEach(children, child => {
612
+ if (!isMuiElement(child, ['Input', 'Select'])) {
613
+ return;
614
+ }
615
+ if (isFilled(child.props, true) || isFilled(child.props.inputProps, true)) {
616
+ initialFilled = true;
617
+ }
618
+ });
619
+ }
620
+ return initialFilled;
621
+ });
622
+ const [focusedState, setFocused] = React.useState(false);
623
+ if (disabled && focusedState) {
624
+ setFocused(false);
625
+ }
626
+ const focused = visuallyFocused !== undefined && !disabled ? visuallyFocused : focusedState;
627
+ let registerEffect;
628
+ if (process.env.NODE_ENV !== 'production') {
629
+ // eslint-disable-next-line react-hooks/rules-of-hooks
630
+ const registeredInput = React.useRef(false);
631
+ registerEffect = () => {
632
+ if (registeredInput.current) {
633
+ console.error(['MUI: There are multiple `InputBase` components inside a FormControl.', 'This creates visual inconsistencies, only use one `InputBase`.'].join('\n'));
634
+ }
635
+ registeredInput.current = true;
636
+ return () => {
637
+ registeredInput.current = false;
638
+ };
639
+ };
640
+ }
641
+ const childContext = React.useMemo(() => {
642
+ return {
643
+ adornedStart,
644
+ setAdornedStart,
645
+ color,
646
+ disabled,
647
+ error,
648
+ filled,
649
+ focused,
650
+ fullWidth,
651
+ hiddenLabel,
652
+ size,
653
+ onBlur: () => {
654
+ setFocused(false);
655
+ },
656
+ onEmpty: () => {
657
+ setFilled(false);
658
+ },
659
+ onFilled: () => {
660
+ setFilled(true);
661
+ },
662
+ onFocus: () => {
663
+ setFocused(true);
664
+ },
665
+ registerEffect,
666
+ required,
667
+ variant
668
+ };
669
+ }, [adornedStart, color, disabled, error, filled, focused, fullWidth, hiddenLabel, registerEffect, required, size, variant]);
670
+ return /*#__PURE__*/jsxRuntimeExports.jsx(FormControlContext.Provider, {
671
+ value: childContext,
672
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(FormControlRoot, _extends({
673
+ as: component,
674
+ ownerState: ownerState,
675
+ className: clsx(classes.root, className),
676
+ ref: ref
677
+ }, other, {
678
+ children: children
679
+ }))
680
+ });
681
+ });
682
+ process.env.NODE_ENV !== "production" ? FormControl.propTypes /* remove-proptypes */ = {
683
+ // ----------------------------- Warning --------------------------------
684
+ // | These PropTypes are generated from the TypeScript type definitions |
685
+ // | To update them edit the d.ts file and run "yarn proptypes" |
686
+ // ----------------------------------------------------------------------
687
+ /**
688
+ * The content of the component.
689
+ */
690
+ children: PropTypes.node,
691
+ /**
692
+ * Override or extend the styles applied to the component.
693
+ */
694
+ classes: PropTypes.object,
695
+ /**
696
+ * @ignore
697
+ */
698
+ className: PropTypes.string,
699
+ /**
700
+ * The color of the component.
701
+ * It supports both default and custom theme colors, which can be added as shown in the
702
+ * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
703
+ * @default 'primary'
704
+ */
705
+ color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
706
+ /**
707
+ * The component used for the root node.
708
+ * Either a string to use a HTML element or a component.
709
+ */
710
+ component: PropTypes.elementType,
711
+ /**
712
+ * If `true`, the label, input and helper text should be displayed in a disabled state.
713
+ * @default false
714
+ */
715
+ disabled: PropTypes.bool,
716
+ /**
717
+ * If `true`, the label is displayed in an error state.
718
+ * @default false
719
+ */
720
+ error: PropTypes.bool,
721
+ /**
722
+ * If `true`, the component is displayed in focused state.
723
+ */
724
+ focused: PropTypes.bool,
725
+ /**
726
+ * If `true`, the component will take up the full width of its container.
727
+ * @default false
728
+ */
729
+ fullWidth: PropTypes.bool,
730
+ /**
731
+ * If `true`, the label is hidden.
732
+ * This is used to increase density for a `FilledInput`.
733
+ * Be sure to add `aria-label` to the `input` element.
734
+ * @default false
735
+ */
736
+ hiddenLabel: PropTypes.bool,
737
+ /**
738
+ * If `dense` or `normal`, will adjust vertical spacing of this and contained components.
739
+ * @default 'none'
740
+ */
741
+ margin: PropTypes.oneOf(['dense', 'none', 'normal']),
742
+ /**
743
+ * If `true`, the label will indicate that the `input` is required.
744
+ * @default false
745
+ */
746
+ required: PropTypes.bool,
747
+ /**
748
+ * The size of the component.
749
+ * @default 'medium'
750
+ */
751
+ size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
752
+ /**
753
+ * The system prop that allows defining system overrides as well as additional CSS styles.
754
+ */
755
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
756
+ /**
757
+ * The variant to use.
758
+ * @default 'outlined'
759
+ */
760
+ variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
761
+ } : void 0;
762
+ var FormControl$1 = FormControl;
763
+
764
+ function getFormHelperTextUtilityClasses(slot) {
765
+ return generateUtilityClass('MuiFormHelperText', slot);
766
+ }
767
+ const formHelperTextClasses = generateUtilityClasses('MuiFormHelperText', ['root', 'error', 'disabled', 'sizeSmall', 'sizeMedium', 'contained', 'focused', 'filled', 'required']);
768
+ var formHelperTextClasses$1 = formHelperTextClasses;
769
+
770
+ var _span;
771
+ const _excluded$2 = ["children", "className", "component", "disabled", "error", "filled", "focused", "margin", "required", "variant"];
772
+ const useUtilityClasses$1 = ownerState => {
773
+ const {
774
+ classes,
775
+ contained,
776
+ size,
777
+ disabled,
778
+ error,
779
+ filled,
780
+ focused,
781
+ required
782
+ } = ownerState;
783
+ const slots = {
784
+ root: ['root', disabled && 'disabled', error && 'error', size && `size${capitalize(size)}`, contained && 'contained', focused && 'focused', filled && 'filled', required && 'required']
785
+ };
786
+ return composeClasses(slots, getFormHelperTextUtilityClasses, classes);
787
+ };
788
+ const FormHelperTextRoot = styled$1('p', {
789
+ name: 'MuiFormHelperText',
790
+ slot: 'Root',
791
+ overridesResolver: (props, styles) => {
792
+ const {
793
+ ownerState
794
+ } = props;
795
+ return [styles.root, ownerState.size && styles[`size${capitalize(ownerState.size)}`], ownerState.contained && styles.contained, ownerState.filled && styles.filled];
796
+ }
797
+ })(({
798
+ theme,
799
+ ownerState
800
+ }) => _extends({
801
+ color: (theme.vars || theme).palette.text.secondary
802
+ }, theme.typography.caption, {
803
+ textAlign: 'left',
804
+ marginTop: 3,
805
+ marginRight: 0,
806
+ marginBottom: 0,
807
+ marginLeft: 0,
808
+ [`&.${formHelperTextClasses$1.disabled}`]: {
809
+ color: (theme.vars || theme).palette.text.disabled
810
+ },
811
+ [`&.${formHelperTextClasses$1.error}`]: {
812
+ color: (theme.vars || theme).palette.error.main
813
+ }
814
+ }, ownerState.size === 'small' && {
815
+ marginTop: 4
816
+ }, ownerState.contained && {
817
+ marginLeft: 14,
818
+ marginRight: 14
819
+ }));
820
+ const FormHelperText = /*#__PURE__*/React.forwardRef(function FormHelperText(inProps, ref) {
821
+ const props = useThemeProps({
822
+ props: inProps,
823
+ name: 'MuiFormHelperText'
824
+ });
825
+ const {
826
+ children,
827
+ className,
828
+ component = 'p'
829
+ } = props,
830
+ other = _objectWithoutPropertiesLoose(props, _excluded$2);
831
+ const muiFormControl = useFormControl();
832
+ const fcs = formControlState({
833
+ props,
834
+ muiFormControl,
835
+ states: ['variant', 'size', 'disabled', 'error', 'filled', 'focused', 'required']
836
+ });
837
+ const ownerState = _extends({}, props, {
838
+ component,
839
+ contained: fcs.variant === 'filled' || fcs.variant === 'outlined',
840
+ variant: fcs.variant,
841
+ size: fcs.size,
842
+ disabled: fcs.disabled,
843
+ error: fcs.error,
844
+ filled: fcs.filled,
845
+ focused: fcs.focused,
846
+ required: fcs.required
847
+ });
848
+ const classes = useUtilityClasses$1(ownerState);
849
+ return /*#__PURE__*/jsxRuntimeExports.jsx(FormHelperTextRoot, _extends({
850
+ as: component,
851
+ ownerState: ownerState,
852
+ className: clsx(classes.root, className),
853
+ ref: ref
854
+ }, other, {
855
+ children: children === ' ' ? // notranslate needed while Google Translate will not fix zero-width space issue
856
+ _span || (_span = /*#__PURE__*/jsxRuntimeExports.jsx("span", {
857
+ className: "notranslate",
858
+ children: "\u200B"
859
+ })) : children
860
+ }));
861
+ });
862
+ process.env.NODE_ENV !== "production" ? FormHelperText.propTypes /* remove-proptypes */ = {
863
+ // ----------------------------- Warning --------------------------------
864
+ // | These PropTypes are generated from the TypeScript type definitions |
865
+ // | To update them edit the d.ts file and run "yarn proptypes" |
866
+ // ----------------------------------------------------------------------
867
+ /**
868
+ * The content of the component.
869
+ *
870
+ * If `' '` is provided, the component reserves one line height for displaying a future message.
871
+ */
872
+ children: PropTypes.node,
873
+ /**
874
+ * Override or extend the styles applied to the component.
875
+ */
876
+ classes: PropTypes.object,
877
+ /**
878
+ * @ignore
879
+ */
880
+ className: PropTypes.string,
881
+ /**
882
+ * The component used for the root node.
883
+ * Either a string to use a HTML element or a component.
884
+ */
885
+ component: PropTypes.elementType,
886
+ /**
887
+ * If `true`, the helper text should be displayed in a disabled state.
888
+ */
889
+ disabled: PropTypes.bool,
890
+ /**
891
+ * If `true`, helper text should be displayed in an error state.
892
+ */
893
+ error: PropTypes.bool,
894
+ /**
895
+ * If `true`, the helper text should use filled classes key.
896
+ */
897
+ filled: PropTypes.bool,
898
+ /**
899
+ * If `true`, the helper text should use focused classes key.
900
+ */
901
+ focused: PropTypes.bool,
902
+ /**
903
+ * If `dense`, will adjust vertical spacing. This is normally obtained via context from
904
+ * FormControl.
905
+ */
906
+ margin: PropTypes.oneOf(['dense']),
907
+ /**
908
+ * If `true`, the helper text should use required classes key.
909
+ */
910
+ required: PropTypes.bool,
911
+ /**
912
+ * The system prop that allows defining system overrides as well as additional CSS styles.
913
+ */
914
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
915
+ /**
916
+ * The variant to use.
917
+ */
918
+ variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])
919
+ } : void 0;
920
+ var FormHelperText$1 = FormHelperText;
921
+
922
+ function getTextFieldUtilityClass(slot) {
923
+ return generateUtilityClass('MuiTextField', slot);
924
+ }
925
+ generateUtilityClasses('MuiTextField', ['root']);
926
+
927
+ const _excluded$1 = ["autoComplete", "autoFocus", "children", "className", "color", "defaultValue", "disabled", "error", "FormHelperTextProps", "fullWidth", "helperText", "id", "InputLabelProps", "inputProps", "InputProps", "inputRef", "label", "maxRows", "minRows", "multiline", "name", "onBlur", "onChange", "onClick", "onFocus", "placeholder", "required", "rows", "select", "SelectProps", "type", "value", "variant"];
928
+ const variantComponent = {
929
+ standard: Input,
930
+ filled: FilledInput,
931
+ outlined: OutlinedInput
932
+ };
933
+ const useUtilityClasses = ownerState => {
934
+ const {
935
+ classes
936
+ } = ownerState;
937
+ const slots = {
938
+ root: ['root']
939
+ };
940
+ return composeClasses(slots, getTextFieldUtilityClass, classes);
941
+ };
942
+ const TextFieldRoot = styled$1(FormControl$1, {
943
+ name: 'MuiTextField',
944
+ slot: 'Root',
945
+ overridesResolver: (props, styles) => styles.root
946
+ })({});
947
+
948
+ /**
949
+ * The `TextField` is a convenience wrapper for the most common cases (80%).
950
+ * It cannot be all things to all people, otherwise the API would grow out of control.
951
+ *
952
+ * ## Advanced Configuration
953
+ *
954
+ * It's important to understand that the text field is a simple abstraction
955
+ * on top of the following components:
956
+ *
957
+ * - [FormControl](/material-ui/api/form-control/)
958
+ * - [InputLabel](/material-ui/api/input-label/)
959
+ * - [FilledInput](/material-ui/api/filled-input/)
960
+ * - [OutlinedInput](/material-ui/api/outlined-input/)
961
+ * - [Input](/material-ui/api/input/)
962
+ * - [FormHelperText](/material-ui/api/form-helper-text/)
963
+ *
964
+ * If you wish to alter the props applied to the `input` element, you can do so as follows:
965
+ *
966
+ * ```jsx
967
+ * const inputProps = {
968
+ * step: 300,
969
+ * };
970
+ *
971
+ * return <TextField id="time" type="time" inputProps={inputProps} />;
972
+ * ```
973
+ *
974
+ * For advanced cases, please look at the source of TextField by clicking on the
975
+ * "Edit this page" button above. Consider either:
976
+ *
977
+ * - using the upper case props for passing values directly to the components
978
+ * - using the underlying components directly as shown in the demos
979
+ */
980
+ const TextField = /*#__PURE__*/React.forwardRef(function TextField(inProps, ref) {
981
+ const props = useThemeProps({
982
+ props: inProps,
983
+ name: 'MuiTextField'
984
+ });
985
+ const {
986
+ autoComplete,
987
+ autoFocus = false,
988
+ children,
989
+ className,
990
+ color = 'primary',
991
+ defaultValue,
992
+ disabled = false,
993
+ error = false,
994
+ FormHelperTextProps,
995
+ fullWidth = false,
996
+ helperText,
997
+ id: idOverride,
998
+ InputLabelProps,
999
+ inputProps,
1000
+ InputProps,
1001
+ inputRef,
1002
+ label,
1003
+ maxRows,
1004
+ minRows,
1005
+ multiline = false,
1006
+ name,
1007
+ onBlur,
1008
+ onChange,
1009
+ onClick,
1010
+ onFocus,
1011
+ placeholder,
1012
+ required = false,
1013
+ rows,
1014
+ select = false,
1015
+ SelectProps,
1016
+ type,
1017
+ value,
1018
+ variant = 'outlined'
1019
+ } = props,
1020
+ other = _objectWithoutPropertiesLoose(props, _excluded$1);
1021
+ const ownerState = _extends({}, props, {
1022
+ autoFocus,
1023
+ color,
1024
+ disabled,
1025
+ error,
1026
+ fullWidth,
1027
+ multiline,
1028
+ required,
1029
+ select,
1030
+ variant
1031
+ });
1032
+ const classes = useUtilityClasses(ownerState);
1033
+ if (process.env.NODE_ENV !== 'production') {
1034
+ if (select && !children) {
1035
+ console.error('MUI: `children` must be passed when using the `TextField` component with `select`.');
1036
+ }
1037
+ }
1038
+ const InputMore = {};
1039
+ if (variant === 'outlined') {
1040
+ if (InputLabelProps && typeof InputLabelProps.shrink !== 'undefined') {
1041
+ InputMore.notched = InputLabelProps.shrink;
1042
+ }
1043
+ InputMore.label = label;
1044
+ }
1045
+ if (select) {
1046
+ // unset defaults from textbox inputs
1047
+ if (!SelectProps || !SelectProps.native) {
1048
+ InputMore.id = undefined;
1049
+ }
1050
+ InputMore['aria-describedby'] = undefined;
1051
+ }
1052
+ const id = useId(idOverride);
1053
+ const helperTextId = helperText && id ? `${id}-helper-text` : undefined;
1054
+ const inputLabelId = label && id ? `${id}-label` : undefined;
1055
+ const InputComponent = variantComponent[variant];
1056
+ const InputElement = /*#__PURE__*/jsxRuntimeExports.jsx(InputComponent, _extends({
1057
+ "aria-describedby": helperTextId,
1058
+ autoComplete: autoComplete,
1059
+ autoFocus: autoFocus,
1060
+ defaultValue: defaultValue,
1061
+ fullWidth: fullWidth,
1062
+ multiline: multiline,
1063
+ name: name,
1064
+ rows: rows,
1065
+ maxRows: maxRows,
1066
+ minRows: minRows,
1067
+ type: type,
1068
+ value: value,
1069
+ id: id,
1070
+ inputRef: inputRef,
1071
+ onBlur: onBlur,
1072
+ onChange: onChange,
1073
+ onFocus: onFocus,
1074
+ onClick: onClick,
1075
+ placeholder: placeholder,
1076
+ inputProps: inputProps
1077
+ }, InputMore, InputProps));
1078
+ return /*#__PURE__*/jsxRuntimeExports.jsxs(TextFieldRoot, _extends({
1079
+ className: clsx(classes.root, className),
1080
+ disabled: disabled,
1081
+ error: error,
1082
+ fullWidth: fullWidth,
1083
+ ref: ref,
1084
+ required: required,
1085
+ color: color,
1086
+ variant: variant,
1087
+ ownerState: ownerState
1088
+ }, other, {
1089
+ children: [label != null && label !== '' && /*#__PURE__*/jsxRuntimeExports.jsx(InputLabel$1, _extends({
1090
+ htmlFor: id,
1091
+ id: inputLabelId
1092
+ }, InputLabelProps, {
1093
+ children: label
1094
+ })), select ? /*#__PURE__*/jsxRuntimeExports.jsx(Select, _extends({
1095
+ "aria-describedby": helperTextId,
1096
+ id: id,
1097
+ labelId: inputLabelId,
1098
+ value: value,
1099
+ input: InputElement
1100
+ }, SelectProps, {
1101
+ children: children
1102
+ })) : InputElement, helperText && /*#__PURE__*/jsxRuntimeExports.jsx(FormHelperText$1, _extends({
1103
+ id: helperTextId
1104
+ }, FormHelperTextProps, {
1105
+ children: helperText
1106
+ }))]
1107
+ }));
1108
+ });
1109
+ process.env.NODE_ENV !== "production" ? TextField.propTypes /* remove-proptypes */ = {
1110
+ // ----------------------------- Warning --------------------------------
1111
+ // | These PropTypes are generated from the TypeScript type definitions |
1112
+ // | To update them edit the d.ts file and run "yarn proptypes" |
1113
+ // ----------------------------------------------------------------------
1114
+ /**
1115
+ * This prop helps users to fill forms faster, especially on mobile devices.
1116
+ * The name can be confusing, as it's more like an autofill.
1117
+ * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
1118
+ */
1119
+ autoComplete: PropTypes.string,
1120
+ /**
1121
+ * If `true`, the `input` element is focused during the first mount.
1122
+ * @default false
1123
+ */
1124
+ autoFocus: PropTypes.bool,
1125
+ /**
1126
+ * @ignore
1127
+ */
1128
+ children: PropTypes.node,
1129
+ /**
1130
+ * Override or extend the styles applied to the component.
1131
+ */
1132
+ classes: PropTypes.object,
1133
+ /**
1134
+ * @ignore
1135
+ */
1136
+ className: PropTypes.string,
1137
+ /**
1138
+ * The color of the component.
1139
+ * It supports both default and custom theme colors, which can be added as shown in the
1140
+ * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
1141
+ * @default 'primary'
1142
+ */
1143
+ color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
1144
+ /**
1145
+ * The default value. Use when the component is not controlled.
1146
+ */
1147
+ defaultValue: PropTypes.any,
1148
+ /**
1149
+ * If `true`, the component is disabled.
1150
+ * @default false
1151
+ */
1152
+ disabled: PropTypes.bool,
1153
+ /**
1154
+ * If `true`, the label is displayed in an error state.
1155
+ * @default false
1156
+ */
1157
+ error: PropTypes.bool,
1158
+ /**
1159
+ * Props applied to the [`FormHelperText`](/material-ui/api/form-helper-text/) element.
1160
+ */
1161
+ FormHelperTextProps: PropTypes.object,
1162
+ /**
1163
+ * If `true`, the input will take up the full width of its container.
1164
+ * @default false
1165
+ */
1166
+ fullWidth: PropTypes.bool,
1167
+ /**
1168
+ * The helper text content.
1169
+ */
1170
+ helperText: PropTypes.node,
1171
+ /**
1172
+ * The id of the `input` element.
1173
+ * Use this prop to make `label` and `helperText` accessible for screen readers.
1174
+ */
1175
+ id: PropTypes.string,
1176
+ /**
1177
+ * Props applied to the [`InputLabel`](/material-ui/api/input-label/) element.
1178
+ * Pointer events like `onClick` are enabled if and only if `shrink` is `true`.
1179
+ */
1180
+ InputLabelProps: PropTypes.object,
1181
+ /**
1182
+ * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
1183
+ */
1184
+ inputProps: PropTypes.object,
1185
+ /**
1186
+ * Props applied to the Input element.
1187
+ * It will be a [`FilledInput`](/material-ui/api/filled-input/),
1188
+ * [`OutlinedInput`](/material-ui/api/outlined-input/) or [`Input`](/material-ui/api/input/)
1189
+ * component depending on the `variant` prop value.
1190
+ */
1191
+ InputProps: PropTypes.object,
1192
+ /**
1193
+ * Pass a ref to the `input` element.
1194
+ */
1195
+ inputRef: refType,
1196
+ /**
1197
+ * The label content.
1198
+ */
1199
+ label: PropTypes.node,
1200
+ /**
1201
+ * If `dense` or `normal`, will adjust vertical spacing of this and contained components.
1202
+ * @default 'none'
1203
+ */
1204
+ margin: PropTypes.oneOf(['dense', 'none', 'normal']),
1205
+ /**
1206
+ * Maximum number of rows to display when multiline option is set to true.
1207
+ */
1208
+ maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
1209
+ /**
1210
+ * Minimum number of rows to display when multiline option is set to true.
1211
+ */
1212
+ minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
1213
+ /**
1214
+ * If `true`, a `textarea` element is rendered instead of an input.
1215
+ * @default false
1216
+ */
1217
+ multiline: PropTypes.bool,
1218
+ /**
1219
+ * Name attribute of the `input` element.
1220
+ */
1221
+ name: PropTypes.string,
1222
+ /**
1223
+ * @ignore
1224
+ */
1225
+ onBlur: PropTypes.func,
1226
+ /**
1227
+ * Callback fired when the value is changed.
1228
+ *
1229
+ * @param {object} event The event source of the callback.
1230
+ * You can pull out the new value by accessing `event.target.value` (string).
1231
+ */
1232
+ onChange: PropTypes.func,
1233
+ /**
1234
+ * @ignore
1235
+ */
1236
+ onClick: PropTypes.func,
1237
+ /**
1238
+ * @ignore
1239
+ */
1240
+ onFocus: PropTypes.func,
1241
+ /**
1242
+ * The short hint displayed in the `input` before the user enters a value.
1243
+ */
1244
+ placeholder: PropTypes.string,
1245
+ /**
1246
+ * If `true`, the label is displayed as required and the `input` element is required.
1247
+ * @default false
1248
+ */
1249
+ required: PropTypes.bool,
1250
+ /**
1251
+ * Number of rows to display when multiline option is set to true.
1252
+ */
1253
+ rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
1254
+ /**
1255
+ * Render a [`Select`](/material-ui/api/select/) element while passing the Input element to `Select` as `input` parameter.
1256
+ * If this option is set you must pass the options of the select as children.
1257
+ * @default false
1258
+ */
1259
+ select: PropTypes.bool,
1260
+ /**
1261
+ * Props applied to the [`Select`](/material-ui/api/select/) element.
1262
+ */
1263
+ SelectProps: PropTypes.object,
1264
+ /**
1265
+ * The size of the component.
1266
+ */
1267
+ size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
1268
+ /**
1269
+ * The system prop that allows defining system overrides as well as additional CSS styles.
1270
+ */
1271
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
1272
+ /**
1273
+ * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).
1274
+ */
1275
+ type: PropTypes /* @typescript-to-proptypes-ignore */.string,
1276
+ /**
1277
+ * The value of the `input` element, required for a controlled component.
1278
+ */
1279
+ value: PropTypes.any,
1280
+ /**
1281
+ * The variant to use.
1282
+ * @default 'outlined'
1283
+ */
1284
+ variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
1285
+ } : void 0;
1286
+ var TextField$1 = TextField;
1287
+
1288
+ const SUBMIT_FILTER_STROKE_TIME = 500;
1289
+ const InputNumberInterval = props => {
1290
+ var _item$value;
1291
+ const {
1292
+ item,
1293
+ applyValue,
1294
+ focusElementRef = null
1295
+ } = props;
1296
+ const filterTimeout = React.useRef();
1297
+ const [filterValueState, setFilterValueState] = React.useState((_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : '');
1298
+ const [applying, setIsApplying] = React.useState(false);
1299
+ React.useEffect(() => {
1300
+ return () => {
1301
+ clearTimeout(filterTimeout.current);
1302
+ };
1303
+ }, []);
1304
+ React.useEffect(() => {
1305
+ var _item$value2;
1306
+ const itemValue = (_item$value2 = item.value) !== null && _item$value2 !== void 0 ? _item$value2 : [undefined, undefined];
1307
+ setFilterValueState(itemValue);
1308
+ }, [item.value]);
1309
+ const updateFilterValue = (lowerBound, upperBound) => {
1310
+ clearTimeout(filterTimeout.current);
1311
+ setFilterValueState([lowerBound, upperBound]);
1312
+ setIsApplying(true);
1313
+ filterTimeout.current = setTimeout(() => {
1314
+ setIsApplying(false);
1315
+ applyValue(_objectSpread2(_objectSpread2({}, item), {}, {
1316
+ value: [lowerBound, upperBound]
1317
+ }));
1318
+ }, SUBMIT_FILTER_STROKE_TIME);
1319
+ };
1320
+ const handleUpperFilterChange = event => {
1321
+ const newUpperBound = event.target.value;
1322
+ updateFilterValue(filterValueState[0], newUpperBound);
1323
+ };
1324
+ const handleLowerFilterChange = event => {
1325
+ const newLowerBound = event.target.value;
1326
+ updateFilterValue(newLowerBound, filterValueState[1]);
1327
+ };
1328
+ return /*#__PURE__*/React.createElement(Box$1, {
1329
+ sx: {
1330
+ display: 'inline-flex',
1331
+ flexDirection: 'row',
1332
+ alignItems: 'end',
1333
+ height: 48,
1334
+ pl: '20px'
1335
+ }
1336
+ }, /*#__PURE__*/React.createElement(TextField$1, {
1337
+ name: "lower-bound-input",
1338
+ placeholder: "From",
1339
+ label: "From",
1340
+ variant: "standard",
1341
+ value: Number(filterValueState[0]),
1342
+ onChange: handleLowerFilterChange,
1343
+ type: "number",
1344
+ inputRef: focusElementRef,
1345
+ sx: {
1346
+ mr: 2
1347
+ }
1348
+ }), /*#__PURE__*/React.createElement(TextField$1, {
1349
+ name: "upper-bound-input",
1350
+ placeholder: "To",
1351
+ label: "To",
1352
+ variant: "standard",
1353
+ value: Number(filterValueState[1]),
1354
+ onChange: handleUpperFilterChange,
1355
+ type: "number",
1356
+ InputProps: applying ? {
1357
+ endAdornment: /*#__PURE__*/React.createElement(Icon, {
1358
+ icon: mdiSync
1359
+ })
1360
+ } : {}
1361
+ }));
1362
+ };
1363
+
1364
+ const isBetweenOperator = {
1365
+ label: 'is between',
1366
+ value: 'isBetween',
1367
+ getApplyFilterFn: filterItem => {
1368
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1369
+ return null;
1370
+ }
1371
+ if (!Array.isArray(filterItem.value) || filterItem.value.length !== 2) {
1372
+ return null;
1373
+ }
1374
+ if (filterItem.value[0] == null || filterItem.value[1] == null) {
1375
+ return null;
1376
+ }
1377
+ if (typeof filterItem.value[0] !== 'number' || typeof filterItem.value[1] !== 'number') {
1378
+ return null;
1379
+ }
1380
+ return params => {
1381
+ return params.value !== null && params.value !== undefined && filterItem.value[0] <= params.value && params.value <= filterItem.value[1];
1382
+ };
1383
+ },
1384
+ InputComponent: InputNumberInterval
1385
+ };
1386
+ const IS_BETWEEN = isBetweenOperator;
1387
+
1388
+ const getGridNumericOperators = () => [...getGridNumericOperators$1(), IS_BETWEEN];
1389
+
1390
+ const doesNotContain = {
1391
+ label: 'does not contain',
1392
+ value: 'doesNotContain',
1393
+ getApplyFilterFn: filterItem => {
1394
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1395
+ return null;
1396
+ }
1397
+ return params => {
1398
+ if (filterItem.value.length === 0) {
1399
+ return true;
1400
+ }
1401
+ if (String(params.value).indexOf(filterItem.value) !== -1) {
1402
+ return false;
1403
+ }
1404
+ return true;
1405
+ };
1406
+ },
1407
+ InputComponent: GridFilterInputValue
1408
+ };
1409
+ const DOES_NOT_CONTAIN = doesNotContain;
1410
+
1411
+ const doesNotEqual = {
1412
+ label: 'does not equal',
1413
+ value: 'doesNotEqual',
1414
+ getApplyFilterFn: filterItem => {
1415
+ if (!filterItem.field || !filterItem.value || !filterItem.value) {
1416
+ return null;
1417
+ }
1418
+ return params => {
1419
+ if (filterItem.value.length === 0) {
1420
+ return true;
1421
+ }
1422
+ if (String(params.value) === filterItem.value) {
1423
+ return false;
1424
+ }
1425
+ return true;
1426
+ };
1427
+ },
1428
+ InputComponent: GridFilterInputValue
1429
+ };
1430
+ const DOES_NOT_EQUAL = doesNotEqual;
1431
+
1432
+ const doesNotHaveOperator = {
1433
+ label: "doesn't have",
1434
+ value: 'doesNotHave',
1435
+ getApplyFilterFn: filterItem => {
1436
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1437
+ return null;
1438
+ }
1439
+ return params => {
1440
+ const cellValues = Array.isArray(params.value) ? params.value : [params.value];
1441
+ return !cellValues.map(value => String(value)).includes(filterItem.value);
1442
+ };
1443
+ },
1444
+ InputComponent: GridFilterInputValue
1445
+ };
1446
+ const DOES_NOT_HAVE = doesNotHaveOperator;
1447
+ const DOES_NOT_HAVE_WITH_SELECT = _objectSpread2(_objectSpread2({}, DOES_NOT_HAVE), {}, {
1448
+ InputComponent: GridFilterInputSingleSelect
1449
+ });
1450
+
1451
+ const hasOperator = {
1452
+ label: 'has',
1453
+ value: 'has',
1454
+ getApplyFilterFn: filterItem => {
1455
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1456
+ return null;
1457
+ }
1458
+ return params => {
1459
+ const cellValues = Array.isArray(params.value) ? params.value : [params.value];
1460
+ return cellValues.map(value => String(value)).includes(filterItem.value);
1461
+ };
1462
+ },
1463
+ InputComponent: GridFilterInputValue
1464
+ };
1465
+ const HAS = hasOperator;
1466
+ const HAS_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS), {}, {
1467
+ InputComponent: GridFilterInputSingleSelect
1468
+ });
1469
+
1470
+ const hasOnlyOperator = {
1471
+ label: 'has only',
1472
+ value: 'hasOnly',
1473
+ getApplyFilterFn: filterItem => {
1474
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1475
+ return null;
1476
+ }
1477
+ return params => {
1478
+ const cellValues = Array.isArray(params.value) ? params.value : [params.value];
1479
+ return cellValues.length === 1 && String(cellValues[0]) === filterItem.value;
1480
+ };
1481
+ },
1482
+ InputComponent: GridFilterInputValue
1483
+ };
1484
+ const HAS_ONLY = hasOnlyOperator;
1485
+ const HAS_ONLY_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS_ONLY), {}, {
1486
+ InputComponent: GridFilterInputSingleSelect
1487
+ });
1488
+
1489
+ const isOperator = {
1490
+ label: 'is',
1491
+ value: 'is',
1492
+ getApplyFilterFn: filterItem => {
1493
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1494
+ return null;
1495
+ }
1496
+ return params => {
1497
+ if (Array.isArray(params.value)) {
1498
+ return false;
1499
+ }
1500
+ return String(params.value) === filterItem.value;
1501
+ };
1502
+ },
1503
+ InputComponent: GridFilterInputValue
1504
+ };
1505
+ const IS = isOperator;
1506
+ const IS_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS), {}, {
1507
+ InputComponent: GridFilterInputSingleSelect
1508
+ });
1509
+
1510
+ const isNotOperator = {
1511
+ label: 'is not',
1512
+ value: 'isNot',
1513
+ getApplyFilterFn: filterItem => {
1514
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1515
+ return null;
1516
+ }
1517
+ return params => {
1518
+ if (Array.isArray(params.value)) {
1519
+ return true;
1520
+ }
1521
+ return String(params.value) !== filterItem.value;
1522
+ };
1523
+ },
1524
+ InputComponent: GridFilterInputValue
1525
+ };
1526
+ const IS_NOT = isNotOperator;
1527
+ const IS_NOT_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_NOT), {}, {
1528
+ InputComponent: GridFilterInputSingleSelect
1529
+ });
1530
+
1531
+ const containsAnyOfOperator = {
1532
+ label: 'contains any of',
1533
+ value: 'containsAnyOf',
1534
+ getApplyFilterFn: filterItem => {
1535
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1536
+ return null;
1537
+ }
1538
+ return params => {
1539
+ if (filterItem.value.length === 0) {
1540
+ return true;
1541
+ }
1542
+ const paramValues = Array.isArray(params.value) ? params.value : [params.value];
1543
+ let match = false;
1544
+ filterItem.value.forEach(filteredValue => {
1545
+ paramValues.forEach(paramValue => {
1546
+ if (String(paramValue).indexOf(filteredValue) !== -1) {
1547
+ match = true;
1548
+ }
1549
+ });
1550
+ });
1551
+ return match;
1552
+ };
1553
+ },
1554
+ InputComponent: GridFilterInputMultipleValue
1555
+ };
1556
+ const containsAnyOfCIOperator = {
1557
+ label: 'contains any of (case insensitive)',
1558
+ value: 'containsAnyOf',
1559
+ getApplyFilterFn: filterItem => {
1560
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1561
+ return null;
1562
+ }
1563
+ return params => {
1564
+ if (filterItem.value.length === 0) {
1565
+ return true;
1566
+ }
1567
+ const paramValues = Array.isArray(params.value) ? params.value : [params.value];
1568
+ const paramValuesLower = paramValues.map(item => String(item).toLowerCase());
1569
+ let match = false;
1570
+ filterItem.value.forEach(filteredValue => {
1571
+ if (paramValuesLower.indexOf(filteredValue.toLowerCase()) !== -1) {
1572
+ match = true;
1573
+ }
1574
+ });
1575
+ return match;
1576
+ };
1577
+ },
1578
+ InputComponent: GridFilterInputMultipleValue
1579
+ };
1580
+ const CONTAINS_ANY_OF = containsAnyOfOperator;
1581
+ const CONTAINS_ANY_OF_I = containsAnyOfCIOperator;
1582
+
1583
+ const doesNotHaveAnyOf = {
1584
+ label: "doesn't have any of",
1585
+ value: 'doesNotHaveAnyOf',
1586
+ getApplyFilterFn: filterItem => {
1587
+ if (!filterItem.field || !filterItem.value || !Array.isArray(filterItem.value) || filterItem.value.length === 0) {
1588
+ return null;
1589
+ }
1590
+ return params => {
1591
+ const cellValues = Array.isArray(params.value) ? params.value : [params.value];
1592
+
1593
+ // Return true only if none of the filter values are in the cell values
1594
+ return filterItem.value.every(filterVal => !cellValues.map(value => String(value)).includes(filterVal));
1595
+ };
1596
+ },
1597
+ InputComponent: GridFilterInputMultipleValue
1598
+ };
1599
+ const DOES_NOT_HAVE_ANY_OF = doesNotHaveAnyOf;
1600
+ const DOES_NOT_HAVE_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, DOES_NOT_HAVE_ANY_OF), {}, {
1601
+ InputComponent: GridFilterInputMultipleSingleSelect
1602
+ });
1603
+
1604
+ const endsWithAnyOfOperator = {
1605
+ label: 'ends with any of',
1606
+ value: 'endsWithAnyOf',
1607
+ getApplyFilterFn: filterItem => {
1608
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1609
+ return null;
1610
+ }
1611
+ return params => {
1612
+ if (filterItem.value.length === 0) {
1613
+ return true;
1614
+ }
1615
+ const paramValues = Array.isArray(params.value) ? params.value : [params.value];
1616
+ let match = false;
1617
+ filterItem.value.forEach(filteredValue => {
1618
+ paramValues.forEach(paramValue => {
1619
+ if (String(paramValue).endsWith(filteredValue)) {
1620
+ match = true;
1621
+ }
1622
+ });
1623
+ });
1624
+ return match;
1625
+ };
1626
+ },
1627
+ InputComponent: GridFilterInputMultipleValue
1628
+ };
1629
+ const ENDS_WITH_ANY_OF = endsWithAnyOfOperator;
1630
+
1631
+ const isAnyOfOperator = {
1632
+ label: 'is any of',
1633
+ value: 'isAnyOf',
1634
+ getApplyFilterFn: filterItem => {
1635
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1636
+ return null;
1637
+ }
1638
+ return params => {
1639
+ if (filterItem.value.length === 0) {
1640
+ return true;
1641
+ }
1642
+ const paramValues = Array.isArray(params.value) ? params.value : [params.value];
1643
+ for (const paramValue of paramValues) {
1644
+ if (filterItem.value.includes(String(paramValue))) {
1645
+ return true;
1646
+ }
1647
+ }
1648
+ return false;
1649
+ };
1650
+ },
1651
+ InputComponent: GridFilterInputMultipleValue
1652
+ };
1653
+ const IS_ANY_OF = isAnyOfOperator;
1654
+ const IS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_ANY_OF), {}, {
1655
+ InputComponent: GridFilterInputMultipleSingleSelect
1656
+ });
1657
+
1658
+ const isAnyOfIOperator = {
1659
+ label: 'is any of (case-insensitive)',
1660
+ value: 'isAnyOfI',
1661
+ getApplyFilterFn: filterItem => {
1662
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1663
+ return null;
1664
+ }
1665
+ const lowerCaseFilterValues = filterItem.value.map(v => String(v).toLowerCase());
1666
+ return params => {
1667
+ if (filterItem.value.length === 0) {
1668
+ return true;
1669
+ }
1670
+ const paramValues = Array.isArray(params.value) ? params.value : [params.value];
1671
+ for (const paramValue of paramValues) {
1672
+ if (lowerCaseFilterValues.includes(String(paramValue).toLowerCase())) {
1673
+ return true;
1674
+ }
1675
+ }
1676
+ return false;
1677
+ };
1678
+ },
1679
+ InputComponent: GridFilterInputMultipleValue
1680
+ };
1681
+ const IS_ANY_OF_I = isAnyOfIOperator;
1682
+ const IS_ANY_OF_I_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_ANY_OF_I), {}, {
1683
+ InputComponent: GridFilterInputMultipleSingleSelect
1684
+ });
1685
+
1686
+ const hasAnyOfOperator = {
1687
+ label: 'has any of',
1688
+ value: 'hasAnyOf',
1689
+ getApplyFilterFn: filterItem => {
1690
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1691
+ return null;
1692
+ }
1693
+ return params => {
1694
+ if (filterItem.value.length === 0) {
1695
+ return true;
1696
+ }
1697
+ const cellValues = Array.isArray(params.value) ? params.value : [params.value];
1698
+ const filterItemValues = Array.isArray(filterItem.value) ? filterItem.value : [filterItem.value];
1699
+ return filterItemValues.some(v => cellValues.map(value => String(value)).includes(v));
1700
+ };
1701
+ },
1702
+ InputComponent: GridFilterInputMultipleValue
1703
+ };
1704
+ const HAS_ANY_OF = hasAnyOfOperator;
1705
+ const HAS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS_ANY_OF), {}, {
1706
+ InputComponent: GridFilterInputMultipleSingleSelect
1707
+ });
1708
+
1709
+ const isNotAnyOfOperator = {
1710
+ label: 'is not any of',
1711
+ value: 'isNotAnyOf',
1712
+ getApplyFilterFn: filterItem => {
1713
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1714
+ return null;
1715
+ }
1716
+ return params => {
1717
+ if (filterItem.value.length === 0) {
1718
+ return true;
1719
+ }
1720
+ const paramValues = Array.isArray(params.value) ? params.value : [params.value];
1721
+ for (const paramValue of paramValues) {
1722
+ if (filterItem.value.includes(String(paramValue))) {
1723
+ return false;
1724
+ }
1725
+ }
1726
+ return true;
1727
+ };
1728
+ },
1729
+ InputComponent: GridFilterInputMultipleValue
1730
+ };
1731
+ const IS_NOT_ANY_OF = isNotAnyOfOperator;
1732
+ const IS_NOT_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_NOT_ANY_OF), {}, {
1733
+ InputComponent: GridFilterInputMultipleSingleSelect
1734
+ });
1735
+
1736
+ const startsWithAnyOfOperator = {
1737
+ label: 'starts with any of',
1738
+ value: 'startsWithAnyOf',
1739
+ getApplyFilterFn: filterItem => {
1740
+ if (!filterItem.field || !filterItem.value || !filterItem.operator) {
1741
+ return null;
1742
+ }
1743
+ return params => {
1744
+ if (filterItem.value.length === 0) {
1745
+ return true;
1746
+ }
1747
+ const paramValues = Array.isArray(params.value) ? params.value : [params.value];
1748
+ let match = false;
1749
+ filterItem.value.forEach(filteredValue => {
1750
+ paramValues.forEach(paramValue => {
1751
+ if (String(paramValue).startsWith(filteredValue)) {
1752
+ match = true;
1753
+ }
1754
+ });
1755
+ });
1756
+ return match;
1757
+ };
1758
+ },
1759
+ InputComponent: GridFilterInputMultipleValue
1760
+ };
1761
+ const STARTS_WITH_ANY_OF = startsWithAnyOfOperator;
1762
+
1763
+ const getGridStringArrayOperators = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF, IS_ANY_OF_I, IS_NOT_ANY_OF, STARTS_WITH_ANY_OF];
1764
+ const getGridStringArrayOperatorsWithSelect = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_ANY_OF_I_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF];
1765
+ const getGridStringArrayOperatorsWithSelectOnStringArrayColumns = () => [HAS_WITH_SELECT, HAS_ANY_OF_WITH_SELECT, HAS_ONLY_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, DOES_NOT_HAVE_ANY_OF_WITH_SELECT];
1766
+
1767
+ const getGridStringOperators = () => [...getGridStringOperators$1().filter(operator => !['isAnyOf'].includes(operator.value)), DOES_NOT_CONTAIN, DOES_NOT_EQUAL, ...getGridStringArrayOperators()];
1768
+
1769
+ // istanbul ignore file
1770
+ const operatorList = {
1771
+ // Default types
1772
+ string: getGridStringOperators$1(),
1773
+ number: getGridNumericOperators$1(),
1774
+ boolean: getGridBooleanOperators(),
1775
+ date: getGridDateOperators(),
1776
+ dateTime: getGridDateOperators(true),
1777
+ singleSelect: getGridSingleSelectOperators(),
1778
+ // Extended types
1779
+ rsString: getGridStringOperators(),
1780
+ rsNumber: getGridNumericOperators(),
1781
+ rsSingleSelect: [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF],
1782
+ rsSingleSelectWithShortOperatorList: [IS_WITH_SELECT, IS_NOT_WITH_SELECT, IS_ANY_OF_WITH_SELECT],
1783
+ rsMultipleSelect: [HAS_WITH_SELECT, HAS_ANY_OF_WITH_SELECT, HAS_ONLY_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, DOES_NOT_HAVE_ANY_OF_WITH_SELECT],
1784
+ rsMultipleSelectWithShortOperatorList: [HAS_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, HAS_ANY_OF_WITH_SELECT],
1785
+ // Custom types
1786
+ rsStringArray: getGridStringArrayOperators()
1787
+ };
1788
+
13
1789
  const PAGINATION_MODEL_KEY = 'paginationModel';
14
1790
  const FILTER_MODEL_KEY = 'filterModel';
15
1791
  const SORT_MODEL_KEY = 'sortModel';
@@ -148,42 +1924,39 @@ const numberOperatorDecoder = {
148
1924
  lt: '<',
149
1925
  lte: '<='
150
1926
  };
151
- const isOperatorValueValid = (columnField, operatorValue, columns) => {
152
- const column = columns.find(column => column.field === columnField);
1927
+ const isOperatorValueValid = (field, operator, columns) => {
1928
+ const column = columns.find(column => column.field === field);
153
1929
  if (!column) {
154
1930
  return false;
155
1931
  }
156
1932
  const columnType = (column === null || column === void 0 ? void 0 : column.type) || 'string';
157
- const operators = operatorList[columnType];
1933
+ const operators = column.filterOperators || operatorList[columnType];
158
1934
  if (!operators) {
159
1935
  return false;
160
1936
  }
161
- if ('filterOperators' in operators) {
162
- return !!operators.filterOperators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
163
- }
164
- return !!operators.find(op => ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
1937
+ return !!operators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operator : op.value === operator);
165
1938
  };
166
1939
  const listOperators = ['containsAnyOf', 'doesNotContainAnyOf', 'endsWithAnyOf', 'doesNotEndWithAnyOf', 'hasAnyOf', 'doesNotHaveAnyOf', 'isAnyOf', 'isNotAnyOf', 'startsWithAnyOf', 'doesNotStartWithAnyOf'];
167
1940
 
168
1941
  // Check if the value doesn't break
169
- const isValueValid = (value, columnField, columns, operatorValue) => {
1942
+ const isValueValid = (value, field, columns, operator) => {
170
1943
  var _column$type;
171
1944
  // every field accepts undefined as value for default
172
1945
  if (value === undefined || value === '') {
173
1946
  return true;
174
1947
  }
175
1948
 
176
- // xxxAnyOf accepts as value only lists, and we are declearing them in the
1949
+ // xxxAnyOf accepts as value only lists, and we are declaring them in the
177
1950
  // URL as `list=[...]`
178
- if (listOperators.includes(operatorValue)) {
1951
+ if (listOperators.includes(operator)) {
179
1952
  return Array.isArray(value) || value === '';
180
1953
  }
181
1954
 
182
1955
  // We are accepting arrays only if they are of the 'xxxAnyOf' type
183
- if (Array.isArray(value) && !listOperators.includes(operatorValue)) {
1956
+ if (Array.isArray(value) && !listOperators.includes(operator)) {
184
1957
  return false;
185
1958
  }
186
- const column = columns.find(column => column.field === columnField);
1959
+ const column = columns.find(column => column.field === field);
187
1960
  if (!column) {
188
1961
  return false;
189
1962
  }
@@ -221,7 +1994,7 @@ const getFilterModelFromString = (searchString, columns) => {
221
1994
  if (!searchString) {
222
1995
  return 'invalid';
223
1996
  }
224
- let linkOperator = GridLinkOperator.And;
1997
+ let logicOperator = GridLogicOperator.And;
225
1998
  let quickFilterValues = [];
226
1999
  const searchParams = new URLSearchParams();
227
2000
  for (const [key, value] of new URLSearchParams(searchString)) {
@@ -229,7 +2002,7 @@ const getFilterModelFromString = (searchString, columns) => {
229
2002
  searchParams.set(key, value);
230
2003
  }
231
2004
  if (key === '_logicOperator') {
232
- linkOperator = value;
2005
+ logicOperator = value === GridLogicOperator.And || value === GridLogicOperator.Or ? value : GridLogicOperator.And;
233
2006
  }
234
2007
  if (key === '_quickFilterValues') {
235
2008
  try {
@@ -248,7 +2021,7 @@ const getFilterModelFromString = (searchString, columns) => {
248
2021
  if (isInvalid) {
249
2022
  return;
250
2023
  }
251
- const field = key.split('[')[0].slice(1); // Slice to remove the _ at the beginning
2024
+ const field = key.split('[')[0].slice(1);
252
2025
  if (!fields.includes(field)) {
253
2026
  return;
254
2027
  }
@@ -265,7 +2038,6 @@ const getFilterModelFromString = (searchString, columns) => {
265
2038
  return;
266
2039
  }
267
2040
  const operator = splitRight[0];
268
- // if the operator is not part of the valid operators invalidate the URL
269
2041
  if (!isOperatorValueValid(field, operator, columns) || Array.isArray(operator)) {
270
2042
  isInvalid = true;
271
2043
  return;
@@ -277,41 +2049,37 @@ const getFilterModelFromString = (searchString, columns) => {
277
2049
  return;
278
2050
  }
279
2051
  items.push({
280
- columnField: field,
281
- operatorValue: ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
2052
+ field,
2053
+ operator: columnType === 'number' && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
282
2054
  id,
283
2055
  value: listOperators.includes(operator) && decodedValue === '' ? [] : decodedValue,
284
2056
  type
285
2057
  });
286
2058
  });
287
-
288
- // If we found some condition that results in an invalid URL,
289
- // return the empty filterModel (this will trigger the localStorage)
290
- // and will pick up the last valid search
291
2059
  if (isInvalid) {
292
2060
  return 'invalid';
293
2061
  }
294
2062
  return {
295
2063
  items,
296
- linkOperator,
2064
+ logicOperator,
297
2065
  quickFilterValues
298
2066
  };
299
2067
  };
300
2068
  const getSearchParamsFromFilterModel = filterModel => {
301
2069
  var _filterModel$quickFil;
302
2070
  const searchParams = new URLSearchParams();
303
- searchParams.set('_logicOperator', filterModel['linkOperator'] || '');
2071
+ searchParams.set('_logicOperator', filterModel['logicOperator'] || '');
304
2072
  filterModel['items'].forEach(item => {
305
2073
  const {
306
- columnField,
307
- operatorValue,
2074
+ field,
2075
+ operator,
308
2076
  value,
309
2077
  type
310
2078
  } = item;
311
- if (Object.keys(numberOperatorEncoder).includes(operatorValue)) {
312
- searchParams.set(`_${columnField}[${numberOperatorEncoder[operatorValue]}%7C${encodeValue(type)}]`, encodeValue(value));
2079
+ if (Object.keys(numberOperatorEncoder).includes(operator)) {
2080
+ searchParams.set(`_${field}[${numberOperatorEncoder[operator]}%7C${encodeValue(type)}]`, encodeValue(value));
313
2081
  } else {
314
- searchParams.set(`_${columnField}[${encodeValue(operatorValue)}%7C${encodeValue(type)}]`, encodeValue(value));
2082
+ searchParams.set(`_${field}[${encodeValue(operator)}%7C${encodeValue(type)}]`, encodeValue(value));
315
2083
  }
316
2084
  });
317
2085
  if ((_filterModel$quickFil = filterModel.quickFilterValues) !== null && _filterModel$quickFil !== void 0 && _filterModel$quickFil.length) {
@@ -327,7 +2095,7 @@ const getSearchParamsFromFilterModel = filterModel => {
327
2095
  const getFilterModel = (search, columns, localStorageFilters, setLocalStorageFilters, initialState, isNewVersion) => {
328
2096
  const defaultValue = initialState && initialState.filter && initialState.filter.filterModel ? initialState.filter.filterModel : {
329
2097
  items: [],
330
- linkOperator: GridLinkOperator.And
2098
+ logicOperator: GridLogicOperator.And
331
2099
  };
332
2100
  if (isNewVersion) {
333
2101
  return defaultValue;
@@ -427,7 +2195,7 @@ const getPaginationFromString = searchString => {
427
2195
  };
428
2196
  const getSearchParamsFromPagination = pagination => {
429
2197
  const searchParams = new URLSearchParams();
430
- searchParams.set('_pagination', `[${pagination.page}%7C${pagination.pageSize}|${pagination.direction}]`);
2198
+ searchParams.set('_pagination', `[${pagination.page}%7C${pagination.pageSize}%7C${pagination.direction}]`);
431
2199
  return searchParams;
432
2200
  };
433
2201
 
@@ -466,13 +2234,38 @@ const getPaginationModel = (search, localStoragePagination, setLocalStoragePagin
466
2234
 
467
2235
  /** COLUMN VISIBILITY */
468
2236
 
2237
+ const getColumnVisibilityFromString = (searchString, columns) => {
2238
+ if (!searchString) {
2239
+ return 'invalid';
2240
+ }
2241
+ const searchParams = new URLSearchParams(searchString);
2242
+ const value = searchParams.get('_columnVisibility');
2243
+ if (value === '' || value === null || value === '[]') {
2244
+ return 'invalid';
2245
+ }
2246
+ const parsedFields = value.slice(1, value.length - 1).split('%7C');
2247
+ const fields = columns.map(column => column.field);
2248
+ const visibility = {};
2249
+ for (const field of fields) {
2250
+ visibility[field] = false;
2251
+ }
2252
+ for (const parsedField of parsedFields) {
2253
+ if (fields.includes(parsedField)) {
2254
+ visibility[parsedField] = true;
2255
+ }
2256
+ }
2257
+ if (Object.values(visibility).filter(v => v === true).length === 0) {
2258
+ return 'invalid';
2259
+ }
2260
+ return visibility;
2261
+ };
469
2262
  const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
470
2263
  const searchParams = new URLSearchParams();
471
- const columnFields = columns.map(column => column.field);
2264
+ const fields = columns.map(column => column.field);
472
2265
 
473
2266
  // if column visibility model is empty, show all columns
474
2267
  if (Object.keys(columnVisibility).length == 0) {
475
- searchParams.set('_columnVisibility', `[${columnFields.join('%7C')}]`);
2268
+ searchParams.set('_columnVisibility', `[${fields.join('%7C')}]`);
476
2269
  return searchParams;
477
2270
  }
478
2271
  const finalColumnVisibility = columns.filter(c => {
@@ -483,63 +2276,10 @@ const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
483
2276
  [colName]: true
484
2277
  });
485
2278
  }, columnVisibility);
486
- const visibleColumns = Object.entries(finalColumnVisibility)
487
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
488
- .filter(_ref => {
489
- let [_, visible] = _ref;
490
- return visible;
491
- })
492
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
493
- .map(_ref2 => {
494
- let [column, _] = _ref2;
495
- return encodeValue(column);
496
- });
2279
+ const visibleColumns = fields.filter(column => finalColumnVisibility[column] !== false);
497
2280
  searchParams.set('_columnVisibility', `[${visibleColumns.join('%7C')}]`);
498
2281
  return searchParams;
499
2282
  };
500
- const getColumnVisibilityFromString = (notParsed, tableColumns) => {
501
- if (!notParsed || notParsed.length === 1 && notParsed[0] === '?') {
502
- return 'invalid';
503
- }
504
- // remove the initial ? if present
505
- const parsed = notParsed[0] === '?' ? notParsed.slice(1) : notParsed;
506
- const visibility = {};
507
- let exist = false;
508
- let visibleColumnsCount = 0;
509
- for (const item of parsed.split('&')) {
510
- // if it's not column visibility field, skip
511
- const fieldURL = item.split('=')[0];
512
- if (fieldURL !== '_columnVisibility') {
513
- continue;
514
- }
515
- // e.g. item = _columnVisibility[abc,def]
516
- const left = item.split(']')[0];
517
- if (left.split('[').length < 2) {
518
- continue;
519
- }
520
- const encodedValues = item.split('[')[1].split(']')[0];
521
- if (typeof encodedValues !== 'string') {
522
- continue;
523
- }
524
- exist = true;
525
- const columnFields = tableColumns.map(column => column.field);
526
- // TODO: Add validation that %7C is present
527
- const columns = encodedValues.split('%7C').map(value => decodeValue(value));
528
-
529
- // for each column, check if it's visible and add it to visibility model
530
- for (const column of columnFields) {
531
- const isColumnVisible = columns.includes(column);
532
- visibility[column] = isColumnVisible;
533
- if (isColumnVisible) {
534
- visibleColumnsCount += 1;
535
- }
536
- }
537
- }
538
- if (visibleColumnsCount === 0 && !exist) {
539
- return 'invalid';
540
- }
541
- return visibility;
542
- };
543
2283
 
544
2284
  // Rules:
545
2285
  // - if we have something in the URL, use that info
@@ -600,8 +2340,8 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
600
2340
  if (typeof encodedValues !== 'string') {
601
2341
  continue;
602
2342
  }
603
- const columnFields = [...tableColumns.map(column => column.field), '__check__'];
604
- const columns = encodedValues.split('%7C').map(value => decodeValue(value)).filter(val => typeof val === 'string' && columnFields.includes(val));
2343
+ const fields = [...tableColumns.map(column => column.field), '__check__'];
2344
+ const columns = encodedValues.split('%7C').map(value => decodeValue(value)).filter(val => typeof val === 'string' && fields.includes(val));
605
2345
  if (fieldURL === '_pinnedColumnsLeft') {
606
2346
  pinnedColumns['left'] = columns;
607
2347
  }
@@ -609,9 +2349,9 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
609
2349
  pinnedColumns['right'] = columns;
610
2350
  }
611
2351
  }
612
- return pinnedColumns['left'] || pinnedColumns['right'] ? {
613
- left: pinnedColumns['left'] || [],
614
- right: pinnedColumns['right'] || []
2352
+ return pinnedColumns.left && pinnedColumns.left.length > 0 || pinnedColumns.right && pinnedColumns.right.length > 0 ? {
2353
+ left: pinnedColumns.left || [],
2354
+ right: pinnedColumns.right || []
615
2355
  } : 'invalid';
616
2356
  };
617
2357
  const getSearchParamsFromPinnedColumns = pinnedColumns => {
@@ -661,7 +2401,7 @@ const getSearchParamsFromTab = search => {
661
2401
  }
662
2402
  return searchParams;
663
2403
  };
664
- const getFinalSearch = _ref3 => {
2404
+ const getFinalSearch = _ref => {
665
2405
  let {
666
2406
  search,
667
2407
  localStorageVersion,
@@ -671,7 +2411,7 @@ const getFinalSearch = _ref3 => {
671
2411
  columnsVisibilityModel,
672
2412
  pinnedColumnsModel,
673
2413
  columns
674
- } = _ref3;
2414
+ } = _ref;
675
2415
  const filterModelSearch = getSearchParamsFromFilterModel(filterModel);
676
2416
  const sortModelSearch = getSearchParamsFromSorting(sortModel);
677
2417
  const paginationModelSearch = getSearchParamsFromPagination(paginationModel);
@@ -736,14 +2476,14 @@ const getModelsParsedOrUpdateLocalStorage = (search, localStorageVersion, column
736
2476
  pinnedColumnsModel
737
2477
  };
738
2478
  };
739
- const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns) => {
2479
+ const updateUrl = (_ref2, search, localStorageVersion, historyReplace, columns) => {
740
2480
  let {
741
2481
  filterModel,
742
2482
  sortModel,
743
2483
  paginationModel,
744
2484
  columnsModel: columnsVisibilityModel,
745
2485
  pinnedColumnsModel
746
- } = _ref4;
2486
+ } = _ref2;
747
2487
  const newSearch = getFinalSearch({
748
2488
  search,
749
2489
  localStorageVersion,
@@ -764,17 +2504,17 @@ const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns)
764
2504
  // do not use it for equivalence (e.g. with value `3` and undefined we
765
2505
  // will get 0).
766
2506
  const compareFilters = (firstFilter, secondFilter) => {
767
- if (firstFilter.columnField < secondFilter.columnField) {
2507
+ if (firstFilter.field < secondFilter.field) {
768
2508
  return -1;
769
- } else if (firstFilter.columnField > secondFilter.columnField) {
2509
+ } else if (firstFilter.field > secondFilter.field) {
770
2510
  return 1;
771
2511
  }
772
- if (firstFilter.operatorValue === undefined || secondFilter.operatorValue === undefined) {
2512
+ if (firstFilter.operator === undefined || secondFilter.operator === undefined) {
773
2513
  return 0;
774
2514
  }
775
- if (firstFilter.operatorValue < secondFilter.operatorValue) {
2515
+ if (firstFilter.operator < secondFilter.operator) {
776
2516
  return -1;
777
- } else if (firstFilter.operatorValue > secondFilter.operatorValue) {
2517
+ } else if (firstFilter.operator > secondFilter.operator) {
778
2518
  return 1;
779
2519
  }
780
2520
  if (firstFilter.value < secondFilter.value) {
@@ -785,18 +2525,18 @@ const compareFilters = (firstFilter, secondFilter) => {
785
2525
  return 0;
786
2526
  };
787
2527
  const areFiltersEquivalent = (firstFilter, secondFilter) => {
788
- return firstFilter.columnField === secondFilter.columnField && firstFilter.operatorValue === secondFilter.operatorValue && firstFilter.value === secondFilter.value;
2528
+ return firstFilter.field === secondFilter.field && firstFilter.operator === secondFilter.operator && firstFilter.value === secondFilter.value;
789
2529
  };
790
2530
  const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
791
2531
  const {
792
2532
  items,
793
- linkOperator
2533
+ logicOperator
794
2534
  } = filterModel;
795
2535
  const {
796
2536
  items: itemsToMatch,
797
- linkOperator: linkOperatorToMatch
2537
+ logicOperator: logicOperatorToMatch
798
2538
  } = filterModelToMatch;
799
- if (linkOperator !== linkOperatorToMatch) {
2539
+ if (logicOperator !== logicOperatorToMatch) {
800
2540
  return false;
801
2541
  }
802
2542
  if (items.length !== itemsToMatch.length) {
@@ -809,7 +2549,7 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
809
2549
  const filterToCompare = itemsToMatch[i];
810
2550
 
811
2551
  // compareFilters return 0 if and only if the filters have the same
812
- // columnField, operatorValue, and value
2552
+ // field, operator, and value
813
2553
  if (!areFiltersEquivalent(filter, filterToCompare)) {
814
2554
  return false;
815
2555
  }
@@ -818,8 +2558,6 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
818
2558
  };
819
2559
 
820
2560
  // Get and Set data from LocalStorage WITHOUT useState
821
-
822
- // triggering a state update and consecutive re-render
823
2561
  const useFetchState = (defaultValue, key) => {
824
2562
  let stickyValue = null;
825
2563
  try {
@@ -827,16 +2565,7 @@ const useFetchState = (defaultValue, key) => {
827
2565
  } catch (e) {
828
2566
  console.error('StatefulDataGrid: error getting item from local storage: ', e);
829
2567
  }
830
- let parsedValue = stickyValue !== null && stickyValue !== undefined && stickyValue !== 'undefined' ? JSON.parse(stickyValue) : defaultValue;
831
-
832
- // TODO: temporary workaround to avoid clashes when someone had sorting on the now-removed screenshot field (renamed to num_annotations)
833
- // Consider upgrading the Datagrid component library as the exception handling was added in this PR: https://github.com/mui-org/material-ui-x/pull/3224
834
- if (parsedValue instanceof Array) {
835
- const fields = (parsedValue || []).map(item => item.field);
836
- if (fields.includes('screenshot') || fields.includes('diffs')) {
837
- parsedValue = defaultValue;
838
- }
839
- }
2568
+ const parsedValue = stickyValue !== null && stickyValue !== undefined && stickyValue !== 'undefined' ? JSON.parse(stickyValue) : defaultValue;
840
2569
  const updateValue = useCallback(value => {
841
2570
  try {
842
2571
  window.localStorage.setItem(key, JSON.stringify(value));
@@ -847,6 +2576,8 @@ const useFetchState = (defaultValue, key) => {
847
2576
  return [parsedValue, updateValue];
848
2577
  };
849
2578
 
2579
+ // import useLocalStorage from './useLocalStorage';
2580
+
850
2581
  const useTableStates = (id, version) => {
851
2582
  const [paginationModel, setPaginationModel] = useFetchState('', buildStorageKey({
852
2583
  id,
@@ -903,8 +2634,7 @@ const useStatefulTable = props => {
903
2634
  onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
904
2635
  onColumnWidthChange: propsOnColumnWidthChange,
905
2636
  onFilterModelChange: propsOnFilterModelChange,
906
- onPageChange: propsOnPageChange,
907
- onPageSizeChange: propsOnPageSizeChange,
2637
+ onPaginationModelChange: propsOnPaginationModelChange,
908
2638
  onPinnedColumnsChange: propsOnPinnedColumnsChange,
909
2639
  onSortModelChange: propsOnSortModelChange,
910
2640
  useRouter,
@@ -934,7 +2664,7 @@ const useStatefulTable = props => {
934
2664
  setDimensionModel
935
2665
  } = useTableStates(id, localStorageVersion);
936
2666
 
937
- // clearing up old version keys
2667
+ // clearing up old version keys, triggering only on first render
938
2668
  useEffect(() => clearPreviousVersionStorage(id, previousLocalStorageVersions), [id, previousLocalStorageVersions]);
939
2669
  const onColumnDimensionChange = useCallback(_ref => {
940
2670
  let {
@@ -979,7 +2709,7 @@ const useStatefulTable = props => {
979
2709
  onFilterModelChange: (model, details) => {
980
2710
  const filterModel = _objectSpread2(_objectSpread2({}, model), {}, {
981
2711
  items: model.items.map(item => {
982
- const column = apiRef.current.getColumn(item.columnField);
2712
+ const column = apiRef.current.getColumn(item.field);
983
2713
  item.type = column.type || 'string';
984
2714
  return item;
985
2715
  }),
@@ -1017,33 +2747,16 @@ const useStatefulTable = props => {
1017
2747
  }, search, localStorageVersion, historyReplace, columns);
1018
2748
  },
1019
2749
  pinnedColumns: pinnedColumnsModel,
1020
- page: paginationModelParsed.page,
1021
- pageSize: paginationModelParsed.pageSize,
1022
- onPageChange: (page, details) => {
1023
- const direction = paginationModelParsed.page < page ? 'next' : 'back';
1024
- propsOnPageChange === null || propsOnPageChange === void 0 ? void 0 : propsOnPageChange(page, details);
1025
- updateUrl({
1026
- filterModel: filterParsed,
1027
- sortModel: sortModelParsed,
1028
- paginationModel: {
1029
- page,
1030
- pageSize: paginationModelParsed.pageSize,
1031
- direction
1032
- },
1033
- columnsModel: apiRef.current.state.columns.columnVisibilityModel,
1034
- pinnedColumnsModel: pinnedColumnsModel
1035
- }, search, localStorageVersion, historyReplace, columns);
1036
- },
1037
- onPageSizeChange: (pageSize, details) => {
1038
- propsOnPageSizeChange === null || propsOnPageSizeChange === void 0 ? void 0 : propsOnPageSizeChange(pageSize, details);
2750
+ paginationModel: paginationModelParsed,
2751
+ onPaginationModelChange: (model, details) => {
2752
+ const paginationModel = _objectSpread2(_objectSpread2({}, model), {}, {
2753
+ direction: paginationModelParsed.page < model.page ? 'next' : 'back'
2754
+ });
2755
+ propsOnPaginationModelChange === null || propsOnPaginationModelChange === void 0 ? void 0 : propsOnPaginationModelChange(paginationModel, details);
1039
2756
  updateUrl({
1040
2757
  filterModel: filterParsed,
1041
2758
  sortModel: sortModelParsed,
1042
- paginationModel: {
1043
- page: paginationModelParsed.page,
1044
- pageSize,
1045
- direction: paginationModelParsed.direction
1046
- },
2759
+ paginationModel: paginationModel,
1047
2760
  columnsModel: apiRef.current.state.columns.columnVisibilityModel,
1048
2761
  pinnedColumnsModel: pinnedColumnsModel
1049
2762
  }, search, localStorageVersion, historyReplace, columns);
@@ -1069,7 +2782,7 @@ const useStatefulTable = props => {
1069
2782
  };
1070
2783
  };
1071
2784
 
1072
- const _excluded = ["apiRef", "autoHeight", "className", "columns", "columnTypes", "components", "componentsProps", "filterModel", "columnVisibilityModel", "pinnedColumns", "sortModel", "page", "pageSize", "height", "hideToolbar", "initialState", "isRowSelectable", "license", "localStorageVersion", "previousLocalStorageVersions", "onFilterModelChange", "selectionModel", "onColumnWidthChange", "onPageChange", "onPageSizeChange", "onSelectionModelChange", "onColumnVisibilityModelChange", "onPinnedColumnsChange", "onSortModelChange", "pagination", "paginationPlacement", "paginationProps", "rows", "rowsPerPageOptions", "sx", "theme", "useRouter", "paginationMode", "rowCount"];
2785
+ const _excluded = ["apiRef", "autoHeight", "className", "columns", "slots", "slotProps", "filterModel", "columnVisibilityModel", "pinnedColumns", "sortModel", "paginationModel", "height", "hideToolbar", "initialState", "isRowSelectable", "license", "localStorageVersion", "previousLocalStorageVersions", "onFilterModelChange", "rowSelectionModel", "onColumnWidthChange", "onPaginationModelChange", "onRowSelectionModelChange", "onColumnVisibilityModelChange", "onPinnedColumnsChange", "onSortModelChange", "pagination", "paginationPlacement", "paginationProps", "rows", "pageSizeOptions", "sx", "theme", "useRouter", "paginationMode", "rowCount"];
1073
2786
  const COMPONENT_NAME = 'DataGrid';
1074
2787
  const CLASSNAME = 'redsift-datagrid';
1075
2788
  const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
@@ -1079,15 +2792,13 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1079
2792
  autoHeight,
1080
2793
  className,
1081
2794
  columns,
1082
- columnTypes: propsColumnTypes,
1083
- components,
1084
- componentsProps,
2795
+ slots,
2796
+ slotProps,
1085
2797
  filterModel: propsFilterModel,
1086
2798
  columnVisibilityModel: propsColumnVisibilityModel,
1087
2799
  pinnedColumns: propsPinnedColumns,
1088
2800
  sortModel: propsSortModel,
1089
- page: propsPage,
1090
- pageSize: propsPageSize,
2801
+ paginationModel: propsPaginationModel,
1091
2802
  height: propsHeight,
1092
2803
  hideToolbar,
1093
2804
  initialState,
@@ -1096,11 +2807,10 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1096
2807
  localStorageVersion,
1097
2808
  previousLocalStorageVersions,
1098
2809
  onFilterModelChange: propsOnFilterModelChange,
1099
- selectionModel: propsSelectionModel,
2810
+ rowSelectionModel: propsRowSelectionModel,
1100
2811
  onColumnWidthChange: propsOnColumnWidthChange,
1101
- onPageChange: propsOnPageChange,
1102
- onPageSizeChange: propsOnPageSizeChange,
1103
- onSelectionModelChange: propsOnSelectionModelChange,
2812
+ onPaginationModelChange: propsOnPaginationModelChange,
2813
+ onRowSelectionModelChange: propsOnRowSelectionModelChange,
1104
2814
  onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
1105
2815
  onPinnedColumnsChange: propsOnPinnedColumnsChange,
1106
2816
  onSortModelChange: propsOnSortModelChange,
@@ -1108,7 +2818,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1108
2818
  paginationPlacement = 'both',
1109
2819
  paginationProps,
1110
2820
  rows,
1111
- rowsPerPageOptions,
2821
+ pageSizeOptions,
1112
2822
  sx,
1113
2823
  theme: propsTheme,
1114
2824
  useRouter,
@@ -1116,46 +2826,41 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1116
2826
  rowCount
1117
2827
  } = props,
1118
2828
  forwardedProps = _objectWithoutProperties(props, _excluded);
1119
- const theme = useTheme(propsTheme);
2829
+ const theme = useTheme$1(propsTheme);
1120
2830
  const _apiRef = useGridApiRef();
1121
2831
  const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
1122
- const RenderedToolbar = components !== null && components !== void 0 && components.Toolbar ? components.Toolbar : Toolbar;
2832
+ const RenderedToolbar = slots !== null && slots !== void 0 && slots.toolbar ? slots.toolbar : Toolbar;
1123
2833
  LicenseInfo.setLicenseKey(license);
1124
2834
  const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
1125
2835
  const {
1126
2836
  onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
1127
2837
  onFilterModelChange: controlledOnFilterModelChange,
1128
- onPageChange: controlledOnPageChange,
1129
- onPageSizeChange: controlledOnPageSizeChange,
2838
+ onPaginationModelChange: controlledOnPaginationModelChange,
1130
2839
  onPinnedColumnsChange: controlledOnPinnedColumnsChange,
1131
2840
  onSortModelChange: controlledOnSortModelChange
1132
2841
  } = useControlledDatagridState({
1133
2842
  initialState,
1134
- rowsPerPageOptions,
2843
+ pageSizeOptions,
1135
2844
  propsColumnVisibilityModel,
1136
2845
  propsFilterModel,
1137
2846
  propsOnColumnVisibilityModelChange,
1138
2847
  propsOnFilterModelChange,
1139
2848
  propsOnPinnedColumnsChange,
1140
2849
  propsOnSortModelChange,
1141
- propsPage,
1142
- propsPageSize,
2850
+ propsPaginationModel,
1143
2851
  propsPinnedColumns,
1144
2852
  propsSortModel,
1145
- propsOnPageChange,
1146
- propsOnPageSizeChange
2853
+ propsOnPaginationModelChange
1147
2854
  });
1148
2855
  const {
1149
2856
  columnVisibilityModel,
1150
2857
  filterModel,
1151
2858
  onColumnVisibilityModelChange,
1152
2859
  onFilterModelChange,
1153
- onPageChange,
1154
- onPageSizeChange,
2860
+ onPaginationModelChange,
1155
2861
  onPinnedColumnsChange,
1156
2862
  onSortModelChange,
1157
- page,
1158
- pageSize,
2863
+ paginationModel,
1159
2864
  pinnedColumns,
1160
2865
  sortModel,
1161
2866
  onColumnWidthChange
@@ -1166,31 +2871,30 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1166
2871
  onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
1167
2872
  onColumnWidthChange: propsOnColumnWidthChange,
1168
2873
  onFilterModelChange: controlledOnFilterModelChange,
1169
- onPageChange: controlledOnPageChange,
1170
- onPageSizeChange: controlledOnPageSizeChange,
2874
+ onPaginationModelChange: controlledOnPaginationModelChange,
1171
2875
  onPinnedColumnsChange: controlledOnPinnedColumnsChange,
1172
2876
  onSortModelChange: controlledOnSortModelChange,
1173
2877
  useRouter: useRouter,
1174
2878
  localStorageVersion,
1175
2879
  previousLocalStorageVersions
1176
2880
  });
1177
- const [selectionModel, setSelectionModel] = useState(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
2881
+ const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
1178
2882
  useEffect(() => {
1179
- setSelectionModel(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
1180
- }, [propsSelectionModel]);
1181
- const onSelectionModelChange = (selectionModel, details) => {
1182
- if (propsOnSelectionModelChange) {
1183
- propsOnSelectionModelChange(selectionModel, details);
2883
+ setRowSelectionModel(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
2884
+ }, [propsRowSelectionModel]);
2885
+ const onRowSelectionModelChange = (selectionModel, details) => {
2886
+ if (propsOnRowSelectionModelChange) {
2887
+ propsOnRowSelectionModelChange(selectionModel, details);
1184
2888
  } else {
1185
- setSelectionModel(selectionModel);
2889
+ setRowSelectionModel(selectionModel);
1186
2890
  }
1187
2891
  };
1188
2892
  const selectionStatus = useRef({
1189
2893
  type: 'none',
1190
2894
  numberOfSelectedRows: 0,
1191
2895
  numberOfSelectedRowsInPage: 0,
1192
- page,
1193
- pageSize: pageSize
2896
+ page: paginationModel.page,
2897
+ pageSize: paginationModel.pageSize
1194
2898
  });
1195
2899
 
1196
2900
  // The checkboxSelectionVisibleOnly should only be applied to client-side pagination,
@@ -1201,9 +2905,9 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1201
2905
  // every time we navigate between pages, resize our page or select something
1202
2906
  useEffect(() => {
1203
2907
  if (paginationMode == 'server') {
1204
- onServerSideSelectionStatusChange(Array.isArray(selectionModel) ? selectionModel : [selectionModel], apiRef, selectionStatus, isRowSelectable, page, pageSize);
2908
+ onServerSideSelectionStatusChange(Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], apiRef, selectionStatus, isRowSelectable, paginationModel.page, paginationModel.pageSize);
1205
2909
  }
1206
- }, [selectionModel, page, pageSize]);
2910
+ }, [rowSelectionModel, paginationModel.page, paginationModel.pageSize]);
1207
2911
  if (!Array.isArray(rows)) {
1208
2912
  return null;
1209
2913
  }
@@ -1229,22 +2933,20 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1229
2933
  ref: datagridRef,
1230
2934
  className: classNames(StatefulDataGrid.className, className),
1231
2935
  $height: height
1232
- }, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
2936
+ }, /*#__PURE__*/React__default.createElement(DataGridPro, _extends$1({}, forwardedProps, {
1233
2937
  apiRef: apiRef,
1234
2938
  columns: columns,
1235
2939
  columnVisibilityModel: columnVisibilityModel,
1236
2940
  filterModel: filterModel,
1237
2941
  onColumnVisibilityModelChange: onColumnVisibilityModelChange,
1238
2942
  onFilterModelChange: onFilterModelChange,
1239
- onPageChange: onPageChange,
1240
- onPageSizeChange: onPageSizeChange,
2943
+ onPaginationModelChange: onPaginationModelChange,
1241
2944
  onPinnedColumnsChange: onPinnedColumnsChange,
1242
2945
  onSortModelChange: onSortModelChange,
1243
- page: page,
1244
- pageSize: pageSize,
2946
+ paginationModel: paginationModel,
1245
2947
  pinnedColumns: pinnedColumns,
1246
2948
  sortModel: sortModel,
1247
- rowsPerPageOptions: rowsPerPageOptions,
2949
+ pageSizeOptions: pageSizeOptions,
1248
2950
  onColumnWidthChange: onColumnWidthChange,
1249
2951
  initialState: initialState,
1250
2952
  isRowSelectable: isRowSelectable,
@@ -1255,79 +2957,74 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1255
2957
  rowCount: rowCount,
1256
2958
  autoHeight: autoHeight,
1257
2959
  checkboxSelectionVisibleOnly: checkboxSelectionVisibleOnly,
1258
- columnTypes: _objectSpread2(_objectSpread2({}, customColumnTypes), propsColumnTypes),
1259
- components: _objectSpread2(_objectSpread2({
1260
- BaseButton,
1261
- BaseCheckbox,
1262
- // BaseTextField,
1263
- BasePopper,
1264
- ColumnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2960
+ slots: _objectSpread2(_objectSpread2({
2961
+ baseButton: BaseButton,
2962
+ baseCheckbox: BaseCheckbox,
2963
+ // baseTextField,
2964
+ basePopper: BasePopper,
2965
+ columnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1265
2966
  displayName: "ColumnFilteredIcon"
1266
2967
  })),
1267
- ColumnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2968
+ columnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1268
2969
  displayName: "ColumnSelectorIcon"
1269
2970
  })),
1270
- ColumnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2971
+ columnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1271
2972
  displayName: "ColumnSortedAscendingIcon"
1272
2973
  })),
1273
- ColumnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2974
+ columnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1274
2975
  displayName: "ColumnSortedDescendingIcon"
1275
2976
  })),
1276
- DensityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2977
+ densityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1277
2978
  displayName: "DensityCompactIcon"
1278
2979
  })),
1279
- DensityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2980
+ densityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1280
2981
  displayName: "DensityStandardIcon"
1281
2982
  })),
1282
- DensityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2983
+ densityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1283
2984
  displayName: "DensityComfortableIcon"
1284
2985
  })),
1285
- DetailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2986
+ detailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1286
2987
  displayName: "DetailPanelCollapseIcon"
1287
2988
  })),
1288
- DetailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2989
+ detailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1289
2990
  displayName: "DetailPanelExpandIcon"
1290
2991
  })),
1291
- ExportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
2992
+ exportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1292
2993
  displayName: "ExportIcon"
1293
2994
  })),
1294
- OpenFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({
2995
+ openFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({
1295
2996
  displayName: "OpenFilterButtonIcon"
1296
2997
  }, props))
1297
- }, components), {}, {
1298
- Toolbar: ToolbarWrapper,
1299
- Pagination: props => {
1300
- return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
2998
+ }, slots), {}, {
2999
+ toolbar: ToolbarWrapper,
3000
+ pagination: props => {
3001
+ return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends$1({}, props, {
1301
3002
  displaySelection: false,
1302
3003
  displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
1303
3004
  displayPagination: ['bottom', 'both'].includes(paginationPlacement),
1304
3005
  selectionStatus: selectionStatus.current,
1305
- page: page,
1306
- pageSize: pageSize,
1307
- onPageChange: onPageChange,
1308
- onPageSizeChange: onPageSizeChange,
1309
- rowsPerPageOptions: rowsPerPageOptions,
3006
+ paginationModel: paginationModel,
3007
+ onPaginationModelChange: onPaginationModelChange,
3008
+ pageSizeOptions: pageSizeOptions,
1310
3009
  paginationProps: paginationProps,
1311
3010
  paginationMode: paginationMode,
1312
3011
  rowCount: rowCount
1313
- })) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
3012
+ })) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends$1({}, props, {
1314
3013
  displaySelection: false,
1315
3014
  displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
1316
3015
  displayPagination: ['bottom', 'both'].includes(paginationPlacement),
1317
3016
  selectionStatus: selectionStatus.current,
1318
3017
  apiRef: apiRef,
1319
3018
  isRowSelectable: isRowSelectable,
1320
- page: page,
1321
- pageSize: pageSize,
1322
- onPageChange: onPageChange,
1323
- onPageSizeChange: onPageSizeChange,
1324
- rowsPerPageOptions: rowsPerPageOptions,
3019
+ paginationModel: paginationModel,
3020
+ onPaginationModelChange: onPaginationModelChange,
3021
+ pageSizeOptions: pageSizeOptions,
1325
3022
  paginationProps: paginationProps,
1326
3023
  paginationMode: paginationMode
1327
3024
  })) : null;
1328
3025
  }
1329
3026
  }),
1330
- componentsProps: _objectSpread2(_objectSpread2({}, componentsProps), {}, {
3027
+ slotProps: _objectSpread2(_objectSpread2({}, slotProps), {}, {
1331
3028
  toolbar: _objectSpread2({
1332
3029
  hideToolbar,
1333
3030
  RenderedToolbar,
@@ -1338,18 +3035,16 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1338
3035
  selectionStatus,
1339
3036
  apiRef,
1340
3037
  isRowSelectable,
1341
- page,
1342
- pageSize,
1343
- onPageChange,
1344
- onPageSizeChange,
1345
- rowsPerPageOptions,
3038
+ paginationModel,
3039
+ onPaginationModelChange,
3040
+ pageSizeOptions,
1346
3041
  paginationProps,
1347
3042
  paginationMode,
1348
3043
  rowCount
1349
- }, componentsProps === null || componentsProps === void 0 ? void 0 : componentsProps.toolbar)
3044
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar)
1350
3045
  }),
1351
- selectionModel: selectionModel,
1352
- onSelectionModelChange: (newSelectionModel, details) => {
3046
+ rowSelectionModel: rowSelectionModel,
3047
+ onRowSelectionModelChange: (newSelectionModel, details) => {
1353
3048
  if (pagination && paginationMode != 'server') {
1354
3049
  const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref => {
1355
3050
  let {
@@ -1407,7 +3102,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1407
3102
  };
1408
3103
  }
1409
3104
  }
1410
- onSelectionModelChange === null || onSelectionModelChange === void 0 ? void 0 : onSelectionModelChange(newSelectionModel, details);
3105
+ onRowSelectionModelChange === null || onRowSelectionModelChange === void 0 ? void 0 : onRowSelectionModelChange(newSelectionModel, details);
1411
3106
  },
1412
3107
  sx: _objectSpread2(_objectSpread2({}, sx), {}, {
1413
3108
  '.MuiDataGrid-columnHeaders': {
@@ -1423,5 +3118,5 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1423
3118
  StatefulDataGrid.className = CLASSNAME;
1424
3119
  StatefulDataGrid.displayName = COMPONENT_NAME;
1425
3120
 
1426
- export { CATEGORIES as C, DIMENSION_MODEL_KEY as D, FILTER_MODEL_KEY as F, PAGINATION_MODEL_KEY as P, SORT_MODEL_KEY as S, VISIBILITY_MODEL_KEY as V, PINNED_COLUMNS as a, FILTER_SEARCH_KEY as b, buildStorageKey as c, clearPreviousVersionStorage as d, decodeValue as e, encodeValue as f, numberOperatorDecoder as g, getFilterModelFromString as h, getSearchParamsFromFilterModel as i, getSortingFromString as j, getSearchParamsFromSorting as k, getPaginationFromString as l, getSearchParamsFromPagination as m, numberOperatorEncoder as n, getSearchParamsFromColumnVisibility as o, getColumnVisibilityFromString as p, getPinnedColumnsFromString as q, getSearchParamsFromPinnedColumns as r, getSearchParamsFromTab as s, getFinalSearch as t, urlSearchParamsToString as u, getModelsParsedOrUpdateLocalStorage as v, updateUrl as w, areFilterModelsEquivalent as x, StatefulDataGrid as y };
3121
+ export { getSearchParamsFromSorting as $, getGridStringArrayOperatorsWithSelectOnStringArrayColumns as A, SORT_MODEL_KEY as B, CONTAINS_ANY_OF as C, DOES_NOT_CONTAIN as D, ENDS_WITH_ANY_OF as E, FILTER_MODEL_KEY as F, PINNED_COLUMNS as G, HAS as H, IS_BETWEEN as I, DIMENSION_MODEL_KEY as J, FILTER_SEARCH_KEY as K, CATEGORIES as L, buildStorageKey as M, clearPreviousVersionStorage as N, decodeValue as O, PAGINATION_MODEL_KEY as P, encodeValue as Q, urlSearchParamsToString as R, STARTS_WITH_ANY_OF as S, numberOperatorEncoder as T, numberOperatorDecoder as U, VISIBILITY_MODEL_KEY as V, isOperatorValueValid as W, isValueValid as X, getFilterModelFromString as Y, getSearchParamsFromFilterModel as Z, getSortingFromString as _, DOES_NOT_EQUAL as a, getPaginationFromString as a0, getSearchParamsFromPagination as a1, getColumnVisibilityFromString as a2, getSearchParamsFromColumnVisibility as a3, getPinnedColumnsFromString as a4, getSearchParamsFromPinnedColumns as a5, getSearchParamsFromTab as a6, getFinalSearch as a7, getModelsParsedOrUpdateLocalStorage as a8, updateUrl as a9, areFilterModelsEquivalent as aa, StatefulDataGrid as ab, DOES_NOT_HAVE as b, DOES_NOT_HAVE_WITH_SELECT as c, HAS_WITH_SELECT as d, HAS_ONLY as e, HAS_ONLY_WITH_SELECT as f, getGridNumericOperators as g, IS as h, IS_WITH_SELECT as i, IS_NOT as j, IS_NOT_WITH_SELECT as k, getGridStringOperators as l, CONTAINS_ANY_OF_I as m, DOES_NOT_HAVE_ANY_OF as n, operatorList as o, DOES_NOT_HAVE_ANY_OF_WITH_SELECT as p, IS_ANY_OF as q, IS_ANY_OF_WITH_SELECT as r, IS_ANY_OF_I as s, IS_ANY_OF_I_WITH_SELECT as t, HAS_ANY_OF as u, HAS_ANY_OF_WITH_SELECT as v, IS_NOT_ANY_OF as w, IS_NOT_ANY_OF_WITH_SELECT as x, getGridStringArrayOperators as y, getGridStringArrayOperatorsWithSelect as z };
1427
3122
  //# sourceMappingURL=StatefulDataGrid2.js.map