@redsift/table 11.11.0-muiv5 → 11.11.0-muiv6

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';
@@ -128,6 +1904,7 @@ const decodeDisplayArrayValue = value => {
128
1904
  if (value === '') {
129
1905
  return [];
130
1906
  }
1907
+
131
1908
  // Split by unencoded commas only (not %2C)
132
1909
  // First, temporarily replace encoded commas, then split, then restore
133
1910
  const TEMP_COMMA_PLACEHOLDER = '\x00COMMA\x00';
@@ -432,42 +2209,39 @@ const numberOperatorDecoder = {
432
2209
  lt: '<',
433
2210
  lte: '<='
434
2211
  };
435
- const isOperatorValueValid = (columnField, operatorValue, columns) => {
436
- const column = columns.find(column => column.field === columnField);
2212
+ const isOperatorValueValid = (field, operator, columns) => {
2213
+ const column = columns.find(column => column.field === field);
437
2214
  if (!column) {
438
2215
  return false;
439
2216
  }
440
2217
  const columnType = (column === null || column === void 0 ? void 0 : column.type) || 'string';
441
- const operators = operatorList[columnType];
2218
+ const operators = column.filterOperators || operatorList[columnType];
442
2219
  if (!operators) {
443
2220
  return false;
444
2221
  }
445
- if ('filterOperators' in operators) {
446
- return !!operators.filterOperators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
447
- }
448
- return !!operators.find(op => ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
2222
+ return !!operators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operator : op.value === operator);
449
2223
  };
450
2224
  const listOperators = ['containsAnyOf', 'doesNotContainAnyOf', 'endsWithAnyOf', 'doesNotEndWithAnyOf', 'hasAnyOf', 'doesNotHaveAnyOf', 'isAnyOf', 'isNotAnyOf', 'startsWithAnyOf', 'doesNotStartWithAnyOf'];
451
2225
 
452
2226
  // Check if the value doesn't break
453
- const isValueValid = (value, columnField, columns, operatorValue) => {
2227
+ const isValueValid = (value, field, columns, operator) => {
454
2228
  var _column$type;
455
2229
  // every field accepts undefined as value for default
456
2230
  if (value === undefined || value === '') {
457
2231
  return true;
458
2232
  }
459
2233
 
460
- // xxxAnyOf accepts as value only lists, and we are declearing them in the
2234
+ // xxxAnyOf accepts as value only lists, and we are declaring them in the
461
2235
  // URL as `list=[...]`
462
- if (listOperators.includes(operatorValue)) {
2236
+ if (listOperators.includes(operator)) {
463
2237
  return Array.isArray(value) || value === '';
464
2238
  }
465
2239
 
466
2240
  // We are accepting arrays only if they are of the 'xxxAnyOf' type
467
- if (Array.isArray(value) && !listOperators.includes(operatorValue)) {
2241
+ if (Array.isArray(value) && !listOperators.includes(operator)) {
468
2242
  return false;
469
2243
  }
470
- const column = columns.find(column => column.field === columnField);
2244
+ const column = columns.find(column => column.field === field);
471
2245
  if (!column) {
472
2246
  return false;
473
2247
  }
@@ -505,7 +2279,7 @@ const getFilterModelFromString = (searchString, columns) => {
505
2279
  if (!searchString) {
506
2280
  return 'invalid';
507
2281
  }
508
- let linkOperator = GridLinkOperator.And;
2282
+ let logicOperator = GridLogicOperator.And;
509
2283
  let quickFilterValues = [];
510
2284
  const searchParams = new URLSearchParams();
511
2285
  for (const [key, value] of new URLSearchParams(searchString)) {
@@ -513,7 +2287,7 @@ const getFilterModelFromString = (searchString, columns) => {
513
2287
  searchParams.set(key, value);
514
2288
  }
515
2289
  if (key === '_logicOperator') {
516
- linkOperator = value;
2290
+ logicOperator = value === GridLogicOperator.And || value === GridLogicOperator.Or ? value : GridLogicOperator.And;
517
2291
  }
518
2292
  if (key === '_quickFilterValues') {
519
2293
  try {
@@ -532,7 +2306,7 @@ const getFilterModelFromString = (searchString, columns) => {
532
2306
  if (isInvalid) {
533
2307
  return;
534
2308
  }
535
- const field = key.split('[')[0].slice(1); // Slice to remove the _ at the beginning
2309
+ const field = key.split('[')[0].slice(1);
536
2310
  if (!fields.includes(field)) {
537
2311
  return;
538
2312
  }
@@ -549,7 +2323,6 @@ const getFilterModelFromString = (searchString, columns) => {
549
2323
  return;
550
2324
  }
551
2325
  const operator = splitRight[0];
552
- // if the operator is not part of the valid operators invalidate the URL
553
2326
  if (!isOperatorValueValid(field, operator, columns) || Array.isArray(operator)) {
554
2327
  isInvalid = true;
555
2328
  return;
@@ -561,41 +2334,37 @@ const getFilterModelFromString = (searchString, columns) => {
561
2334
  return;
562
2335
  }
563
2336
  items.push({
564
- columnField: field,
565
- operatorValue: ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
2337
+ field,
2338
+ operator: columnType === 'number' && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
566
2339
  id,
567
2340
  value: listOperators.includes(operator) && decodedValue === '' ? [] : decodedValue,
568
2341
  type
569
2342
  });
570
2343
  });
571
-
572
- // If we found some condition that results in an invalid URL,
573
- // return the empty filterModel (this will trigger the localStorage)
574
- // and will pick up the last valid search
575
2344
  if (isInvalid) {
576
2345
  return 'invalid';
577
2346
  }
578
2347
  return {
579
2348
  items,
580
- linkOperator,
2349
+ logicOperator,
581
2350
  quickFilterValues
582
2351
  };
583
2352
  };
584
2353
  const getSearchParamsFromFilterModel = filterModel => {
585
2354
  var _filterModel$quickFil;
586
2355
  const searchParams = new URLSearchParams();
587
- searchParams.set('_logicOperator', filterModel['linkOperator'] || '');
2356
+ searchParams.set('_logicOperator', filterModel['logicOperator'] || '');
588
2357
  filterModel['items'].forEach(item => {
589
2358
  const {
590
- columnField,
591
- operatorValue,
2359
+ field,
2360
+ operator,
592
2361
  value,
593
2362
  type
594
2363
  } = item;
595
- if (Object.keys(numberOperatorEncoder).includes(operatorValue)) {
596
- searchParams.set(`_${columnField}[${numberOperatorEncoder[operatorValue]},${encodeValue(type)}]`, encodeValue(value));
2364
+ if (Object.keys(numberOperatorEncoder).includes(operator)) {
2365
+ searchParams.set(`_${field}[${numberOperatorEncoder[operator]},${encodeValue(type)}]`, encodeValue(value));
597
2366
  } else {
598
- searchParams.set(`_${columnField}[${encodeValue(operatorValue)},${encodeValue(type)}]`, encodeValue(value));
2367
+ searchParams.set(`_${field}[${encodeValue(operator)},${encodeValue(type)}]`, encodeValue(value));
599
2368
  }
600
2369
  });
601
2370
  if ((_filterModel$quickFil = filterModel.quickFilterValues) !== null && _filterModel$quickFil !== void 0 && _filterModel$quickFil.length) {
@@ -611,7 +2380,7 @@ const getSearchParamsFromFilterModel = filterModel => {
611
2380
  const getFilterModel = (search, columns, localStorageFilters, setLocalStorageFilters, initialState, isNewVersion) => {
612
2381
  const defaultValue = initialState && initialState.filter && initialState.filter.filterModel ? initialState.filter.filterModel : {
613
2382
  items: [],
614
- linkOperator: GridLinkOperator.And
2383
+ logicOperator: GridLogicOperator.And
615
2384
  };
616
2385
  if (isNewVersion) {
617
2386
  return defaultValue;
@@ -750,13 +2519,38 @@ const getPaginationModel = (search, localStoragePagination, setLocalStoragePagin
750
2519
 
751
2520
  /** COLUMN VISIBILITY */
752
2521
 
2522
+ const getColumnVisibilityFromString = (searchString, columns) => {
2523
+ if (!searchString) {
2524
+ return 'invalid';
2525
+ }
2526
+ const searchParams = new URLSearchParams(searchString);
2527
+ const value = searchParams.get('_columnVisibility');
2528
+ if (value === '' || value === null || value === '[]') {
2529
+ return 'invalid';
2530
+ }
2531
+ const parsedFields = value.slice(1, value.length - 1).split(',');
2532
+ const fields = columns.map(column => column.field);
2533
+ const visibility = {};
2534
+ for (const field of fields) {
2535
+ visibility[field] = false;
2536
+ }
2537
+ for (const parsedField of parsedFields) {
2538
+ if (fields.includes(parsedField)) {
2539
+ visibility[parsedField] = true;
2540
+ }
2541
+ }
2542
+ if (Object.values(visibility).filter(v => v === true).length === 0) {
2543
+ return 'invalid';
2544
+ }
2545
+ return visibility;
2546
+ };
753
2547
  const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
754
2548
  const searchParams = new URLSearchParams();
755
- const columnFields = columns.map(column => column.field);
2549
+ const fields = columns.map(column => column.field);
756
2550
 
757
2551
  // if column visibility model is empty, show all columns
758
2552
  if (Object.keys(columnVisibility).length == 0) {
759
- searchParams.set('_columnVisibility', `[${columnFields.join(',')}]`);
2553
+ searchParams.set('_columnVisibility', `[${fields.join(',')}]`);
760
2554
  return searchParams;
761
2555
  }
762
2556
  const finalColumnVisibility = columns.filter(c => {
@@ -767,63 +2561,10 @@ const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
767
2561
  [colName]: true
768
2562
  });
769
2563
  }, columnVisibility);
770
- const visibleColumns = Object.entries(finalColumnVisibility)
771
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
772
- .filter(_ref => {
773
- let [_, visible] = _ref;
774
- return visible;
775
- })
776
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
777
- .map(_ref2 => {
778
- let [column, _] = _ref2;
779
- return encodeValue(column);
780
- });
2564
+ const visibleColumns = fields.filter(column => finalColumnVisibility[column] !== false);
781
2565
  searchParams.set('_columnVisibility', `[${visibleColumns.join(',')}]`);
782
2566
  return searchParams;
783
2567
  };
784
- const getColumnVisibilityFromString = (notParsed, tableColumns) => {
785
- if (!notParsed || notParsed.length === 1 && notParsed[0] === '?') {
786
- return 'invalid';
787
- }
788
- // remove the initial ? if present
789
- const parsed = notParsed[0] === '?' ? notParsed.slice(1) : notParsed;
790
- const visibility = {};
791
- let exist = false;
792
- let visibleColumnsCount = 0;
793
- for (const item of parsed.split('&')) {
794
- // if it's not column visibility field, skip
795
- const fieldURL = item.split('=')[0];
796
- if (fieldURL !== '_columnVisibility') {
797
- continue;
798
- }
799
- // e.g. item = _columnVisibility[abc,def]
800
- const left = item.split(']')[0];
801
- if (left.split('[').length < 2) {
802
- continue;
803
- }
804
- const encodedValues = item.split('[')[1].split(']')[0];
805
- if (typeof encodedValues !== 'string') {
806
- continue;
807
- }
808
- exist = true;
809
- const columnFields = tableColumns.map(column => column.field);
810
- // TODO: Add validation that , is present
811
- const columns = encodedValues.split(',').map(value => decodeValue(value));
812
-
813
- // for each column, check if it's visible and add it to visibility model
814
- for (const column of columnFields) {
815
- const isColumnVisible = columns.includes(column);
816
- visibility[column] = isColumnVisible;
817
- if (isColumnVisible) {
818
- visibleColumnsCount += 1;
819
- }
820
- }
821
- }
822
- if (visibleColumnsCount === 0 && !exist) {
823
- return 'invalid';
824
- }
825
- return visibility;
826
- };
827
2568
 
828
2569
  // Rules:
829
2570
  // - if we have something in the URL, use that info
@@ -884,8 +2625,8 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
884
2625
  if (typeof encodedValues !== 'string') {
885
2626
  continue;
886
2627
  }
887
- const columnFields = [...tableColumns.map(column => column.field), '__check__'];
888
- const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' && columnFields.includes(val));
2628
+ const fields = [...tableColumns.map(column => column.field), '__check__'];
2629
+ const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' && fields.includes(val));
889
2630
  if (fieldURL === '_pinnedColumnsLeft') {
890
2631
  pinnedColumns['left'] = columns;
891
2632
  }
@@ -893,9 +2634,9 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
893
2634
  pinnedColumns['right'] = columns;
894
2635
  }
895
2636
  }
896
- return pinnedColumns['left'] || pinnedColumns['right'] ? {
897
- left: pinnedColumns['left'] || [],
898
- right: pinnedColumns['right'] || []
2637
+ return pinnedColumns.left && pinnedColumns.left.length > 0 || pinnedColumns.right && pinnedColumns.right.length > 0 ? {
2638
+ left: pinnedColumns.left || [],
2639
+ right: pinnedColumns.right || []
899
2640
  } : 'invalid';
900
2641
  };
901
2642
  const getSearchParamsFromPinnedColumns = pinnedColumns => {
@@ -945,7 +2686,7 @@ const getSearchParamsFromTab = search => {
945
2686
  }
946
2687
  return searchParams;
947
2688
  };
948
- const getFinalSearch = _ref3 => {
2689
+ const getFinalSearch = _ref => {
949
2690
  let {
950
2691
  search,
951
2692
  localStorageVersion,
@@ -955,7 +2696,7 @@ const getFinalSearch = _ref3 => {
955
2696
  columnsVisibilityModel,
956
2697
  pinnedColumnsModel,
957
2698
  columns
958
- } = _ref3;
2699
+ } = _ref;
959
2700
  const filterModelSearch = getSearchParamsFromFilterModel(filterModel);
960
2701
  const sortModelSearch = getSearchParamsFromSorting(sortModel);
961
2702
  const paginationModelSearch = getSearchParamsFromPagination(paginationModel);
@@ -1028,14 +2769,14 @@ const getModelsParsedOrUpdateLocalStorage = (search, localStorageVersion, column
1028
2769
  pinnedColumnsModel
1029
2770
  };
1030
2771
  };
1031
- const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns) => {
2772
+ const updateUrl = (_ref2, search, localStorageVersion, historyReplace, columns) => {
1032
2773
  let {
1033
2774
  filterModel,
1034
2775
  sortModel,
1035
2776
  paginationModel,
1036
2777
  columnsModel: columnsVisibilityModel,
1037
2778
  pinnedColumnsModel
1038
- } = _ref4;
2779
+ } = _ref2;
1039
2780
  // Convert from display format to internal format if needed
1040
2781
  const decodedSearch = getDecodedSearchFromUrl(search, columns);
1041
2782
  const newSearch = getFinalSearch({
@@ -1064,17 +2805,17 @@ const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns)
1064
2805
  // do not use it for equivalence (e.g. with value `3` and undefined we
1065
2806
  // will get 0).
1066
2807
  const compareFilters = (firstFilter, secondFilter) => {
1067
- if (firstFilter.columnField < secondFilter.columnField) {
2808
+ if (firstFilter.field < secondFilter.field) {
1068
2809
  return -1;
1069
- } else if (firstFilter.columnField > secondFilter.columnField) {
2810
+ } else if (firstFilter.field > secondFilter.field) {
1070
2811
  return 1;
1071
2812
  }
1072
- if (firstFilter.operatorValue === undefined || secondFilter.operatorValue === undefined) {
2813
+ if (firstFilter.operator === undefined || secondFilter.operator === undefined) {
1073
2814
  return 0;
1074
2815
  }
1075
- if (firstFilter.operatorValue < secondFilter.operatorValue) {
2816
+ if (firstFilter.operator < secondFilter.operator) {
1076
2817
  return -1;
1077
- } else if (firstFilter.operatorValue > secondFilter.operatorValue) {
2818
+ } else if (firstFilter.operator > secondFilter.operator) {
1078
2819
  return 1;
1079
2820
  }
1080
2821
  if (firstFilter.value < secondFilter.value) {
@@ -1085,18 +2826,18 @@ const compareFilters = (firstFilter, secondFilter) => {
1085
2826
  return 0;
1086
2827
  };
1087
2828
  const areFiltersEquivalent = (firstFilter, secondFilter) => {
1088
- return firstFilter.columnField === secondFilter.columnField && firstFilter.operatorValue === secondFilter.operatorValue && firstFilter.value === secondFilter.value;
2829
+ return firstFilter.field === secondFilter.field && firstFilter.operator === secondFilter.operator && firstFilter.value === secondFilter.value;
1089
2830
  };
1090
2831
  const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
1091
2832
  const {
1092
2833
  items,
1093
- linkOperator
2834
+ logicOperator
1094
2835
  } = filterModel;
1095
2836
  const {
1096
2837
  items: itemsToMatch,
1097
- linkOperator: linkOperatorToMatch
2838
+ logicOperator: logicOperatorToMatch
1098
2839
  } = filterModelToMatch;
1099
- if (linkOperator !== linkOperatorToMatch) {
2840
+ if (logicOperator !== logicOperatorToMatch) {
1100
2841
  return false;
1101
2842
  }
1102
2843
  if (items.length !== itemsToMatch.length) {
@@ -1109,7 +2850,7 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
1109
2850
  const filterToCompare = itemsToMatch[i];
1110
2851
 
1111
2852
  // compareFilters return 0 if and only if the filters have the same
1112
- // columnField, operatorValue, and value
2853
+ // field, operator, and value
1113
2854
  if (!areFiltersEquivalent(filter, filterToCompare)) {
1114
2855
  return false;
1115
2856
  }
@@ -1118,8 +2859,6 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
1118
2859
  };
1119
2860
 
1120
2861
  // Get and Set data from LocalStorage WITHOUT useState
1121
-
1122
- // triggering a state update and consecutive re-render
1123
2862
  const useFetchState = (defaultValue, key) => {
1124
2863
  let stickyValue = null;
1125
2864
  try {
@@ -1127,16 +2866,7 @@ const useFetchState = (defaultValue, key) => {
1127
2866
  } catch (e) {
1128
2867
  console.error('StatefulDataGrid: error getting item from local storage: ', e);
1129
2868
  }
1130
- let parsedValue = stickyValue !== null && stickyValue !== undefined && stickyValue !== 'undefined' ? JSON.parse(stickyValue) : defaultValue;
1131
-
1132
- // TODO: temporary workaround to avoid clashes when someone had sorting on the now-removed screenshot field (renamed to num_annotations)
1133
- // 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
1134
- if (parsedValue instanceof Array) {
1135
- const fields = (parsedValue || []).map(item => item.field);
1136
- if (fields.includes('screenshot') || fields.includes('diffs')) {
1137
- parsedValue = defaultValue;
1138
- }
1139
- }
2869
+ const parsedValue = stickyValue !== null && stickyValue !== undefined && stickyValue !== 'undefined' ? JSON.parse(stickyValue) : defaultValue;
1140
2870
  const updateValue = useCallback(value => {
1141
2871
  try {
1142
2872
  window.localStorage.setItem(key, JSON.stringify(value));
@@ -1147,6 +2877,8 @@ const useFetchState = (defaultValue, key) => {
1147
2877
  return [parsedValue, updateValue];
1148
2878
  };
1149
2879
 
2880
+ // import useLocalStorage from './useLocalStorage';
2881
+
1150
2882
  const useTableStates = (id, version) => {
1151
2883
  const [paginationModel, setPaginationModel] = useFetchState('', buildStorageKey({
1152
2884
  id,
@@ -1203,8 +2935,7 @@ const useStatefulTable = props => {
1203
2935
  onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
1204
2936
  onColumnWidthChange: propsOnColumnWidthChange,
1205
2937
  onFilterModelChange: propsOnFilterModelChange,
1206
- onPageChange: propsOnPageChange,
1207
- onPageSizeChange: propsOnPageSizeChange,
2938
+ onPaginationModelChange: propsOnPaginationModelChange,
1208
2939
  onPinnedColumnsChange: propsOnPinnedColumnsChange,
1209
2940
  onSortModelChange: propsOnSortModelChange,
1210
2941
  useRouter,
@@ -1234,7 +2965,7 @@ const useStatefulTable = props => {
1234
2965
  setDimensionModel
1235
2966
  } = useTableStates(id, localStorageVersion);
1236
2967
 
1237
- // clearing up old version keys
2968
+ // clearing up old version keys, triggering only on first render
1238
2969
  useEffect(() => clearPreviousVersionStorage(id, previousLocalStorageVersions), [id, previousLocalStorageVersions]);
1239
2970
  const onColumnDimensionChange = useCallback(_ref => {
1240
2971
  let {
@@ -1279,7 +3010,7 @@ const useStatefulTable = props => {
1279
3010
  onFilterModelChange: (model, details) => {
1280
3011
  const filterModel = _objectSpread2(_objectSpread2({}, model), {}, {
1281
3012
  items: model.items.map(item => {
1282
- const column = apiRef.current.getColumn(item.columnField);
3013
+ const column = apiRef.current.getColumn(item.field);
1283
3014
  item.type = column.type || 'string';
1284
3015
  return item;
1285
3016
  }),
@@ -1317,34 +3048,16 @@ const useStatefulTable = props => {
1317
3048
  }, search, localStorageVersion, historyReplace, columns);
1318
3049
  },
1319
3050
  pinnedColumns: pinnedColumnsModel,
1320
- page: paginationModelParsed.page,
1321
- pageSize: paginationModelParsed.pageSize,
1322
- onPageChange: (page, details) => {
1323
- console.log('page change', page);
1324
- const direction = paginationModelParsed.page < page ? 'next' : 'back';
1325
- propsOnPageChange === null || propsOnPageChange === void 0 ? void 0 : propsOnPageChange(page, details);
1326
- updateUrl({
1327
- filterModel: filterParsed,
1328
- sortModel: sortModelParsed,
1329
- paginationModel: {
1330
- page,
1331
- pageSize: paginationModelParsed.pageSize,
1332
- direction
1333
- },
1334
- columnsModel: apiRef.current.state.columns.columnVisibilityModel,
1335
- pinnedColumnsModel: pinnedColumnsModel
1336
- }, search, localStorageVersion, historyReplace, columns);
1337
- },
1338
- onPageSizeChange: (pageSize, details) => {
1339
- propsOnPageSizeChange === null || propsOnPageSizeChange === void 0 ? void 0 : propsOnPageSizeChange(pageSize, details);
3051
+ paginationModel: paginationModelParsed,
3052
+ onPaginationModelChange: (model, details) => {
3053
+ const paginationModel = _objectSpread2(_objectSpread2({}, model), {}, {
3054
+ direction: paginationModelParsed.page < model.page ? 'next' : 'back'
3055
+ });
3056
+ propsOnPaginationModelChange === null || propsOnPaginationModelChange === void 0 ? void 0 : propsOnPaginationModelChange(paginationModel, details);
1340
3057
  updateUrl({
1341
3058
  filterModel: filterParsed,
1342
3059
  sortModel: sortModelParsed,
1343
- paginationModel: {
1344
- page: paginationModelParsed.page,
1345
- pageSize,
1346
- direction: paginationModelParsed.direction
1347
- },
3060
+ paginationModel: paginationModel,
1348
3061
  columnsModel: apiRef.current.state.columns.columnVisibilityModel,
1349
3062
  pinnedColumnsModel: pinnedColumnsModel
1350
3063
  }, search, localStorageVersion, historyReplace, columns);
@@ -1370,7 +3083,7 @@ const useStatefulTable = props => {
1370
3083
  };
1371
3084
  };
1372
3085
 
1373
- 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"];
3086
+ 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"];
1374
3087
  const COMPONENT_NAME = 'DataGrid';
1375
3088
  const CLASSNAME = 'redsift-datagrid';
1376
3089
  const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
@@ -1380,15 +3093,13 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1380
3093
  autoHeight,
1381
3094
  className,
1382
3095
  columns,
1383
- columnTypes: propsColumnTypes,
1384
- components,
1385
- componentsProps,
3096
+ slots,
3097
+ slotProps,
1386
3098
  filterModel: propsFilterModel,
1387
3099
  columnVisibilityModel: propsColumnVisibilityModel,
1388
3100
  pinnedColumns: propsPinnedColumns,
1389
3101
  sortModel: propsSortModel,
1390
- page: propsPage,
1391
- pageSize: propsPageSize,
3102
+ paginationModel: propsPaginationModel,
1392
3103
  height: propsHeight,
1393
3104
  hideToolbar,
1394
3105
  initialState,
@@ -1397,11 +3108,10 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1397
3108
  localStorageVersion,
1398
3109
  previousLocalStorageVersions,
1399
3110
  onFilterModelChange: propsOnFilterModelChange,
1400
- selectionModel: propsSelectionModel,
3111
+ rowSelectionModel: propsRowSelectionModel,
1401
3112
  onColumnWidthChange: propsOnColumnWidthChange,
1402
- onPageChange: propsOnPageChange,
1403
- onPageSizeChange: propsOnPageSizeChange,
1404
- onSelectionModelChange: propsOnSelectionModelChange,
3113
+ onPaginationModelChange: propsOnPaginationModelChange,
3114
+ onRowSelectionModelChange: propsOnRowSelectionModelChange,
1405
3115
  onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
1406
3116
  onPinnedColumnsChange: propsOnPinnedColumnsChange,
1407
3117
  onSortModelChange: propsOnSortModelChange,
@@ -1409,7 +3119,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1409
3119
  paginationPlacement = 'both',
1410
3120
  paginationProps,
1411
3121
  rows,
1412
- rowsPerPageOptions,
3122
+ pageSizeOptions,
1413
3123
  sx,
1414
3124
  theme: propsTheme,
1415
3125
  useRouter,
@@ -1417,46 +3127,41 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1417
3127
  rowCount
1418
3128
  } = props,
1419
3129
  forwardedProps = _objectWithoutProperties(props, _excluded);
1420
- const theme = useTheme(propsTheme);
3130
+ const theme = useTheme$1(propsTheme);
1421
3131
  const _apiRef = useGridApiRef();
1422
3132
  const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
1423
- const RenderedToolbar = components !== null && components !== void 0 && components.Toolbar ? components.Toolbar : Toolbar;
3133
+ const RenderedToolbar = slots !== null && slots !== void 0 && slots.toolbar ? slots.toolbar : Toolbar;
1424
3134
  LicenseInfo.setLicenseKey(license);
1425
3135
  const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
1426
3136
  const {
1427
3137
  onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
1428
3138
  onFilterModelChange: controlledOnFilterModelChange,
1429
- onPageChange: controlledOnPageChange,
1430
- onPageSizeChange: controlledOnPageSizeChange,
3139
+ onPaginationModelChange: controlledOnPaginationModelChange,
1431
3140
  onPinnedColumnsChange: controlledOnPinnedColumnsChange,
1432
3141
  onSortModelChange: controlledOnSortModelChange
1433
3142
  } = useControlledDatagridState({
1434
3143
  initialState,
1435
- rowsPerPageOptions,
3144
+ pageSizeOptions,
1436
3145
  propsColumnVisibilityModel,
1437
3146
  propsFilterModel,
1438
3147
  propsOnColumnVisibilityModelChange,
1439
3148
  propsOnFilterModelChange,
1440
3149
  propsOnPinnedColumnsChange,
1441
3150
  propsOnSortModelChange,
1442
- propsPage,
1443
- propsPageSize,
3151
+ propsPaginationModel,
1444
3152
  propsPinnedColumns,
1445
3153
  propsSortModel,
1446
- propsOnPageChange,
1447
- propsOnPageSizeChange
3154
+ propsOnPaginationModelChange
1448
3155
  });
1449
3156
  const {
1450
3157
  columnVisibilityModel,
1451
3158
  filterModel,
1452
3159
  onColumnVisibilityModelChange,
1453
3160
  onFilterModelChange,
1454
- onPageChange,
1455
- onPageSizeChange,
3161
+ onPaginationModelChange,
1456
3162
  onPinnedColumnsChange,
1457
3163
  onSortModelChange,
1458
- page,
1459
- pageSize,
3164
+ paginationModel,
1460
3165
  pinnedColumns,
1461
3166
  sortModel,
1462
3167
  onColumnWidthChange
@@ -1467,40 +3172,39 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1467
3172
  onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
1468
3173
  onColumnWidthChange: propsOnColumnWidthChange,
1469
3174
  onFilterModelChange: controlledOnFilterModelChange,
1470
- onPageChange: controlledOnPageChange,
1471
- onPageSizeChange: controlledOnPageSizeChange,
3175
+ onPaginationModelChange: controlledOnPaginationModelChange,
1472
3176
  onPinnedColumnsChange: controlledOnPinnedColumnsChange,
1473
3177
  onSortModelChange: controlledOnSortModelChange,
1474
3178
  useRouter: useRouter,
1475
3179
  localStorageVersion,
1476
3180
  previousLocalStorageVersions
1477
3181
  });
1478
- const [selectionModel, setSelectionModel] = useState(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
3182
+ const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
1479
3183
  useEffect(() => {
1480
- setSelectionModel(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
1481
- }, [propsSelectionModel]);
1482
- const onSelectionModelChange = (selectionModel, details) => {
1483
- if (propsOnSelectionModelChange) {
1484
- propsOnSelectionModelChange(selectionModel, details);
3184
+ setRowSelectionModel(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
3185
+ }, [propsRowSelectionModel]);
3186
+ const onRowSelectionModelChange = (selectionModel, details) => {
3187
+ if (propsOnRowSelectionModelChange) {
3188
+ propsOnRowSelectionModelChange(selectionModel, details);
1485
3189
  } else {
1486
- setSelectionModel(selectionModel);
3190
+ setRowSelectionModel(selectionModel);
1487
3191
  }
1488
3192
  };
1489
3193
  const selectionStatus = useRef({
1490
3194
  type: 'none',
1491
3195
  numberOfSelectedRows: 0,
1492
3196
  numberOfSelectedRowsInPage: 0,
1493
- page,
1494
- pageSize: pageSize
3197
+ page: paginationModel.page,
3198
+ pageSize: paginationModel.pageSize
1495
3199
  });
1496
3200
 
1497
3201
  // in server-side pagination we want to update the selection status
1498
3202
  // every time we navigate between pages, resize our page or select something
1499
3203
  useEffect(() => {
1500
3204
  if (paginationMode == 'server') {
1501
- onServerSideSelectionStatusChange(Array.isArray(selectionModel) ? selectionModel : [selectionModel], apiRef, selectionStatus, isRowSelectable, page, pageSize);
3205
+ onServerSideSelectionStatusChange(Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], apiRef, selectionStatus, isRowSelectable, paginationModel.page, paginationModel.pageSize);
1502
3206
  }
1503
- }, [selectionModel, page, pageSize]);
3207
+ }, [rowSelectionModel, paginationModel.page, paginationModel.pageSize]);
1504
3208
  if (!Array.isArray(rows)) {
1505
3209
  return null;
1506
3210
  }
@@ -1526,22 +3230,20 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1526
3230
  ref: datagridRef,
1527
3231
  className: classNames(StatefulDataGrid.className, className),
1528
3232
  $height: height
1529
- }, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
3233
+ }, /*#__PURE__*/React__default.createElement(DataGridPro, _extends$1({}, forwardedProps, {
1530
3234
  apiRef: apiRef,
1531
3235
  columns: columns,
1532
3236
  columnVisibilityModel: columnVisibilityModel,
1533
3237
  filterModel: filterModel,
1534
3238
  onColumnVisibilityModelChange: onColumnVisibilityModelChange,
1535
3239
  onFilterModelChange: onFilterModelChange,
1536
- onPageChange: onPageChange,
1537
- onPageSizeChange: onPageSizeChange,
3240
+ onPaginationModelChange: onPaginationModelChange,
1538
3241
  onPinnedColumnsChange: onPinnedColumnsChange,
1539
3242
  onSortModelChange: onSortModelChange,
1540
- page: page,
1541
- pageSize: pageSize,
3243
+ paginationModel: paginationModel,
1542
3244
  pinnedColumns: pinnedColumns,
1543
3245
  sortModel: sortModel,
1544
- rowsPerPageOptions: rowsPerPageOptions,
3246
+ pageSizeOptions: pageSizeOptions,
1545
3247
  onColumnWidthChange: onColumnWidthChange,
1546
3248
  initialState: initialState,
1547
3249
  isRowSelectable: isRowSelectable,
@@ -1552,79 +3254,74 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1552
3254
  rowCount: rowCount,
1553
3255
  autoHeight: autoHeight,
1554
3256
  checkboxSelectionVisibleOnly: Boolean(pagination),
1555
- columnTypes: _objectSpread2(_objectSpread2({}, customColumnTypes), propsColumnTypes),
1556
- components: _objectSpread2(_objectSpread2({
1557
- BaseButton,
1558
- BaseCheckbox,
1559
- // BaseTextField,
1560
- BasePopper,
1561
- ColumnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3257
+ slots: _objectSpread2(_objectSpread2({
3258
+ baseButton: BaseButton,
3259
+ baseCheckbox: BaseCheckbox,
3260
+ // baseTextField,
3261
+ basePopper: BasePopper,
3262
+ columnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1562
3263
  displayName: "ColumnFilteredIcon"
1563
3264
  })),
1564
- ColumnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3265
+ columnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1565
3266
  displayName: "ColumnSelectorIcon"
1566
3267
  })),
1567
- ColumnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3268
+ columnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1568
3269
  displayName: "ColumnSortedAscendingIcon"
1569
3270
  })),
1570
- ColumnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3271
+ columnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1571
3272
  displayName: "ColumnSortedDescendingIcon"
1572
3273
  })),
1573
- DensityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3274
+ densityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1574
3275
  displayName: "DensityCompactIcon"
1575
3276
  })),
1576
- DensityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3277
+ densityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1577
3278
  displayName: "DensityStandardIcon"
1578
3279
  })),
1579
- DensityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3280
+ densityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1580
3281
  displayName: "DensityComfortableIcon"
1581
3282
  })),
1582
- DetailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3283
+ detailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1583
3284
  displayName: "DetailPanelCollapseIcon"
1584
3285
  })),
1585
- DetailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3286
+ detailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1586
3287
  displayName: "DetailPanelExpandIcon"
1587
3288
  })),
1588
- ExportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
3289
+ exportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
1589
3290
  displayName: "ExportIcon"
1590
3291
  })),
1591
- OpenFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({
3292
+ openFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({
1592
3293
  displayName: "OpenFilterButtonIcon"
1593
3294
  }, props))
1594
- }, components), {}, {
1595
- Toolbar: ToolbarWrapper,
1596
- Pagination: props => {
1597
- return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
3295
+ }, slots), {}, {
3296
+ toolbar: ToolbarWrapper,
3297
+ pagination: props => {
3298
+ return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends$1({}, props, {
1598
3299
  displaySelection: false,
1599
3300
  displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
1600
3301
  displayPagination: ['bottom', 'both'].includes(paginationPlacement),
1601
3302
  selectionStatus: selectionStatus.current,
1602
- page: page,
1603
- pageSize: pageSize,
1604
- onPageChange: onPageChange,
1605
- onPageSizeChange: onPageSizeChange,
1606
- rowsPerPageOptions: rowsPerPageOptions,
3303
+ paginationModel: paginationModel,
3304
+ onPaginationModelChange: onPaginationModelChange,
3305
+ pageSizeOptions: pageSizeOptions,
1607
3306
  paginationProps: paginationProps,
1608
3307
  paginationMode: paginationMode,
1609
3308
  rowCount: rowCount
1610
- })) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
3309
+ })) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends$1({}, props, {
1611
3310
  displaySelection: false,
1612
3311
  displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
1613
3312
  displayPagination: ['bottom', 'both'].includes(paginationPlacement),
1614
3313
  selectionStatus: selectionStatus.current,
1615
3314
  apiRef: apiRef,
1616
3315
  isRowSelectable: isRowSelectable,
1617
- page: page,
1618
- pageSize: pageSize,
1619
- onPageChange: onPageChange,
1620
- onPageSizeChange: onPageSizeChange,
1621
- rowsPerPageOptions: rowsPerPageOptions,
3316
+ paginationModel: paginationModel,
3317
+ onPaginationModelChange: onPaginationModelChange,
3318
+ pageSizeOptions: pageSizeOptions,
1622
3319
  paginationProps: paginationProps,
1623
3320
  paginationMode: paginationMode
1624
3321
  })) : null;
1625
3322
  }
1626
3323
  }),
1627
- componentsProps: _objectSpread2(_objectSpread2({}, componentsProps), {}, {
3324
+ slotProps: _objectSpread2(_objectSpread2({}, slotProps), {}, {
1628
3325
  toolbar: _objectSpread2({
1629
3326
  hideToolbar,
1630
3327
  RenderedToolbar,
@@ -1635,18 +3332,16 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1635
3332
  selectionStatus,
1636
3333
  apiRef,
1637
3334
  isRowSelectable,
1638
- page,
1639
- pageSize,
1640
- onPageChange,
1641
- onPageSizeChange,
1642
- rowsPerPageOptions,
3335
+ paginationModel,
3336
+ onPaginationModelChange,
3337
+ pageSizeOptions,
1643
3338
  paginationProps,
1644
3339
  paginationMode,
1645
3340
  rowCount
1646
- }, componentsProps === null || componentsProps === void 0 ? void 0 : componentsProps.toolbar)
3341
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar)
1647
3342
  }),
1648
- selectionModel: selectionModel,
1649
- onSelectionModelChange: (newSelectionModel, details) => {
3343
+ rowSelectionModel: rowSelectionModel,
3344
+ onRowSelectionModelChange: (newSelectionModel, details) => {
1650
3345
  if (pagination && paginationMode != 'server') {
1651
3346
  const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref => {
1652
3347
  let {
@@ -1704,7 +3399,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1704
3399
  };
1705
3400
  }
1706
3401
  }
1707
- onSelectionModelChange === null || onSelectionModelChange === void 0 ? void 0 : onSelectionModelChange(newSelectionModel, details);
3402
+ onRowSelectionModelChange === null || onRowSelectionModelChange === void 0 ? void 0 : onRowSelectionModelChange(newSelectionModel, details);
1708
3403
  },
1709
3404
  sx: _objectSpread2(_objectSpread2({}, sx), {}, {
1710
3405
  '.MuiDataGrid-columnHeaders': {
@@ -1720,5 +3415,5 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
1720
3415
  StatefulDataGrid.className = CLASSNAME;
1721
3416
  StatefulDataGrid.displayName = COMPONENT_NAME;
1722
3417
 
1723
- export { getModelsParsedOrUpdateLocalStorage as A, updateUrl as B, CATEGORIES as C, DIMENSION_MODEL_KEY as D, areFilterModelsEquivalent as E, FILTER_MODEL_KEY as F, StatefulDataGrid as G, 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, convertToDisplayFormat as e, convertFromDisplayFormat as f, getDecodedSearchFromUrl as g, buildQueryParamsString as h, areSearchStringsEqual as i, decodeValue as j, encodeValue as k, numberOperatorDecoder as l, getFilterModelFromString as m, numberOperatorEncoder as n, getSearchParamsFromFilterModel as o, getSortingFromString as p, getSearchParamsFromSorting as q, getPaginationFromString as r, getSearchParamsFromPagination as s, getSearchParamsFromColumnVisibility as t, urlSearchParamsToString as u, getColumnVisibilityFromString as v, getPinnedColumnsFromString as w, getSearchParamsFromPinnedColumns as x, getSearchParamsFromTab as y, getFinalSearch as z };
3418
+ export { isOperatorValueValid 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, convertToDisplayFormat as O, PAGINATION_MODEL_KEY as P, convertFromDisplayFormat as Q, getDecodedSearchFromUrl as R, STARTS_WITH_ANY_OF as S, buildQueryParamsString as T, areSearchStringsEqual as U, VISIBILITY_MODEL_KEY as V, decodeValue as W, encodeValue as X, urlSearchParamsToString as Y, numberOperatorEncoder as Z, numberOperatorDecoder as _, DOES_NOT_EQUAL as a, isValueValid as a0, getFilterModelFromString as a1, getSearchParamsFromFilterModel as a2, getSortingFromString as a3, getSearchParamsFromSorting as a4, getPaginationFromString as a5, getSearchParamsFromPagination as a6, getColumnVisibilityFromString as a7, getSearchParamsFromColumnVisibility as a8, getPinnedColumnsFromString as a9, getSearchParamsFromPinnedColumns as aa, getSearchParamsFromTab as ab, getFinalSearch as ac, getModelsParsedOrUpdateLocalStorage as ad, updateUrl as ae, areFilterModelsEquivalent as af, StatefulDataGrid as ag, 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 };
1724
3419
  //# sourceMappingURL=StatefulDataGrid2.js.map