@mui/material 7.2.0 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/Accordion/Accordion.d.ts +11 -0
  2. package/Accordion/Accordion.js +19 -5
  3. package/Alert/Alert.js +2 -3
  4. package/Autocomplete/Autocomplete.js +4 -4
  5. package/Button/Button.js +5 -6
  6. package/ButtonGroup/ButtonGroup.js +3 -4
  7. package/CHANGELOG.md +76 -0
  8. package/Checkbox/Checkbox.js +2 -3
  9. package/Chip/Chip.js +10 -11
  10. package/Divider/Divider.js +1 -2
  11. package/FilledInput/FilledInput.js +1 -1
  12. package/IconButton/IconButton.js +2 -3
  13. package/Input/Input.js +1 -1
  14. package/LinearProgress/LinearProgress.js +1 -2
  15. package/Link/Link.js +11 -4
  16. package/Link/getTextDecoration.js +5 -0
  17. package/ListItemButton/ListItemButton.js +4 -5
  18. package/MenuItem/MenuItem.js +4 -5
  19. package/OutlinedInput/OutlinedInput.js +2 -2
  20. package/PaginationItem/PaginationItem.js +7 -8
  21. package/Radio/Radio.js +2 -3
  22. package/Select/SelectInput.js +66 -21
  23. package/Skeleton/Skeleton.js +1 -1
  24. package/Slider/Slider.js +6 -15
  25. package/Snackbar/Snackbar.js +2 -8
  26. package/SpeedDial/SpeedDial.js +20 -6
  27. package/Switch/Switch.js +6 -4
  28. package/TableCell/TableCell.js +1 -2
  29. package/TableRow/TableRow.js +2 -3
  30. package/ToggleButton/ToggleButton.js +7 -8
  31. package/Tooltip/Tooltip.js +2 -3
  32. package/esm/Accordion/Accordion.d.ts +11 -0
  33. package/esm/Accordion/Accordion.js +19 -5
  34. package/esm/Alert/Alert.js +2 -3
  35. package/esm/Autocomplete/Autocomplete.js +4 -4
  36. package/esm/Button/Button.js +5 -6
  37. package/esm/ButtonGroup/ButtonGroup.js +3 -4
  38. package/esm/Checkbox/Checkbox.js +2 -3
  39. package/esm/Chip/Chip.js +10 -11
  40. package/esm/Divider/Divider.js +1 -2
  41. package/esm/FilledInput/FilledInput.js +1 -1
  42. package/esm/IconButton/IconButton.js +2 -3
  43. package/esm/Input/Input.js +1 -1
  44. package/esm/LinearProgress/LinearProgress.js +1 -2
  45. package/esm/Link/Link.js +11 -4
  46. package/esm/Link/getTextDecoration.js +5 -0
  47. package/esm/ListItemButton/ListItemButton.js +4 -5
  48. package/esm/MenuItem/MenuItem.js +4 -5
  49. package/esm/OutlinedInput/OutlinedInput.js +2 -2
  50. package/esm/PaginationItem/PaginationItem.js +7 -8
  51. package/esm/Radio/Radio.js +2 -3
  52. package/esm/Select/SelectInput.js +66 -21
  53. package/esm/Skeleton/Skeleton.js +2 -2
  54. package/esm/Slider/Slider.js +6 -15
  55. package/esm/Snackbar/Snackbar.js +2 -8
  56. package/esm/SpeedDial/SpeedDial.js +20 -6
  57. package/esm/Switch/Switch.js +6 -4
  58. package/esm/TableCell/TableCell.js +1 -2
  59. package/esm/TableRow/TableRow.js +2 -3
  60. package/esm/ToggleButton/ToggleButton.js +7 -8
  61. package/esm/Tooltip/Tooltip.js +2 -3
  62. package/esm/index.js +1 -1
  63. package/esm/styles/createColorScheme.d.ts +3 -1
  64. package/esm/styles/createColorScheme.js +6 -1
  65. package/esm/styles/createPalette.js +29 -2
  66. package/esm/styles/createTheme.d.ts +1 -1
  67. package/esm/styles/createThemeNoVars.d.ts +3 -0
  68. package/esm/styles/createThemeNoVars.js +59 -1
  69. package/esm/styles/createThemeWithVars.d.ts +4 -0
  70. package/esm/styles/createThemeWithVars.js +98 -69
  71. package/esm/useAutocomplete/useAutocomplete.d.ts +1 -0
  72. package/esm/useAutocomplete/useAutocomplete.js +21 -3
  73. package/esm/version/index.js +2 -2
  74. package/index.js +1 -1
  75. package/package.json +9 -11
  76. package/styles/createColorScheme.d.ts +3 -1
  77. package/styles/createColorScheme.js +6 -1
  78. package/styles/createPalette.js +30 -2
  79. package/styles/createTheme.d.ts +1 -1
  80. package/styles/createThemeNoVars.d.ts +3 -0
  81. package/styles/createThemeNoVars.js +59 -1
  82. package/styles/createThemeWithVars.d.ts +4 -0
  83. package/styles/createThemeWithVars.js +98 -69
  84. package/useAutocomplete/useAutocomplete.d.ts +1 -0
  85. package/useAutocomplete/useAutocomplete.js +22 -3
  86. package/version/index.js +2 -2
@@ -10,6 +10,7 @@ var _formatMuiErrorMessage = _interopRequireDefault(require("@mui/utils/formatMu
10
10
  var _deepmerge = _interopRequireDefault(require("@mui/utils/deepmerge"));
11
11
  var _styleFunctionSx = _interopRequireWildcard(require("@mui/system/styleFunctionSx"));
12
12
  var _createTheme = _interopRequireDefault(require("@mui/system/createTheme"));
13
+ var _colorManipulator = require("@mui/system/colorManipulator");
13
14
  var _generateUtilityClass = _interopRequireDefault(require("@mui/utils/generateUtilityClass"));
14
15
  var _createMixins = _interopRequireDefault(require("./createMixins"));
15
16
  var _createPalette = _interopRequireDefault(require("./createPalette"));
@@ -18,6 +19,58 @@ var _shadows = _interopRequireDefault(require("./shadows"));
18
19
  var _createTransitions = _interopRequireDefault(require("./createTransitions"));
19
20
  var _zIndex = _interopRequireDefault(require("./zIndex"));
20
21
  var _stringifyTheme = require("./stringifyTheme");
22
+ function coefficientToPercentage(coefficient) {
23
+ if (typeof coefficient === 'number') {
24
+ return `${(coefficient * 100).toFixed(0)}%`;
25
+ }
26
+ return `calc((${coefficient}) * 100%)`;
27
+ }
28
+
29
+ // This can be removed when moved to `color-mix()` entirely.
30
+ const parseAddition = str => {
31
+ if (!Number.isNaN(+str)) {
32
+ return +str;
33
+ }
34
+ const numbers = str.match(/\d*\.?\d+/g);
35
+ if (!numbers) {
36
+ return 0;
37
+ }
38
+ let sum = 0;
39
+ for (let i = 0; i < numbers.length; i += 1) {
40
+ sum += +numbers[i];
41
+ }
42
+ return sum;
43
+ };
44
+ function attachColorManipulators(theme) {
45
+ Object.assign(theme, {
46
+ alpha(color, coefficient) {
47
+ const obj = this || theme;
48
+ if (obj.colorSpace) {
49
+ return `oklch(from ${color} l c h / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;
50
+ }
51
+ if (obj.vars) {
52
+ // To preserve the behavior of the CSS theme variables
53
+ // In the future, this could be replaced by `color-mix` (when https://caniuse.com/?search=color-mix reaches 95%).
54
+ return `rgba(${color.replace(/var\(--([^,\s)]+)(?:,[^)]+)?\)+/g, 'var(--$1Channel)')} / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;
55
+ }
56
+ return (0, _colorManipulator.alpha)(color, parseAddition(coefficient));
57
+ },
58
+ lighten(color, coefficient) {
59
+ const obj = this || theme;
60
+ if (obj.colorSpace) {
61
+ return `color-mix(in ${obj.colorSpace}, ${color}, #fff ${coefficientToPercentage(coefficient)})`;
62
+ }
63
+ return (0, _colorManipulator.lighten)(color, coefficient);
64
+ },
65
+ darken(color, coefficient) {
66
+ const obj = this || theme;
67
+ if (obj.colorSpace) {
68
+ return `color-mix(in ${obj.colorSpace}, ${color}, #000 ${coefficientToPercentage(coefficient)})`;
69
+ }
70
+ return (0, _colorManipulator.darken)(color, coefficient);
71
+ }
72
+ });
73
+ }
21
74
  function createThemeNoVars(options = {}, ...args) {
22
75
  const {
23
76
  breakpoints: breakpointsInput,
@@ -27,6 +80,7 @@ function createThemeNoVars(options = {}, ...args) {
27
80
  transitions: transitionsInput = {},
28
81
  typography: typographyInput = {},
29
82
  shape: shapeInput,
83
+ colorSpace,
30
84
  ...other
31
85
  } = options;
32
86
  if (options.vars &&
@@ -37,7 +91,10 @@ function createThemeNoVars(options = {}, ...args) {
37
91
  // #host-reference
38
92
  'Please use another name or follow the [docs](https://mui.com/material-ui/customization/css-theme-variables/usage/) to enable the feature.' : (0, _formatMuiErrorMessage.default)(20));
39
93
  }
40
- const palette = (0, _createPalette.default)(paletteInput);
94
+ const palette = (0, _createPalette.default)({
95
+ ...paletteInput,
96
+ colorSpace
97
+ });
41
98
  const systemTheme = (0, _createTheme.default)(options);
42
99
  let muiTheme = (0, _deepmerge.default)(systemTheme, {
43
100
  mixins: (0, _createMixins.default)(systemTheme.breakpoints, mixinsInput),
@@ -94,6 +151,7 @@ function createThemeNoVars(options = {}, ...args) {
94
151
  };
95
152
  muiTheme.toRuntimeSource = _stringifyTheme.stringifyTheme; // for Pigment CSS integration
96
153
 
154
+ attachColorManipulators(muiTheme);
97
155
  return muiTheme;
98
156
  }
99
157
  var _default = exports.default = createThemeNoVars;
@@ -266,6 +266,10 @@ export interface CssVarsThemeOptions extends Omit<ThemeOptions, 'palette' | 'com
266
266
  * @default false
267
267
  */
268
268
  disableCssColorScheme?: boolean;
269
+ /**
270
+ * If `true`, the CSS relative color will be used.
271
+ */
272
+ nativeColor?: boolean;
269
273
  /**
270
274
  * A function to determine if the key, value should be attached as CSS Variable
271
275
  * `keys` is an array that represents the object path keys.
@@ -19,6 +19,7 @@ var _createColorScheme = _interopRequireWildcard(require("./createColorScheme"))
19
19
  var _shouldSkipGeneratingVar = _interopRequireDefault(require("./shouldSkipGeneratingVar"));
20
20
  var _createGetSelector = _interopRequireDefault(require("./createGetSelector"));
21
21
  var _stringifyTheme = require("./stringifyTheme");
22
+ var _createPalette = require("./createPalette");
22
23
  function assignNode(obj, keys) {
23
24
  keys.forEach(k => {
24
25
  if (!obj[k]) {
@@ -63,7 +64,7 @@ const silent = fn => {
63
64
  };
64
65
  const createGetCssVar = (cssVarPrefix = 'mui') => (0, _system.unstable_createGetCssVar)(cssVarPrefix);
65
66
  exports.createGetCssVar = createGetCssVar;
66
- function attachColorScheme(colorSchemes, scheme, restTheme, colorScheme) {
67
+ function attachColorScheme(colorSpace, colorSchemes, scheme, restTheme, colorScheme) {
67
68
  if (!scheme) {
68
69
  return undefined;
69
70
  }
@@ -75,7 +76,8 @@ function attachColorScheme(colorSchemes, scheme, restTheme, colorScheme) {
75
76
  palette: {
76
77
  mode,
77
78
  ...scheme?.palette
78
- }
79
+ },
80
+ colorSpace
79
81
  });
80
82
  return undefined;
81
83
  }
@@ -87,7 +89,8 @@ function attachColorScheme(colorSchemes, scheme, restTheme, colorScheme) {
87
89
  palette: {
88
90
  mode,
89
91
  ...scheme?.palette
90
- }
92
+ },
93
+ colorSpace
91
94
  });
92
95
  colorSchemes[colorScheme] = {
93
96
  ...scheme,
@@ -117,6 +120,7 @@ function createThemeWithVars(options = {}, ...args) {
117
120
  defaultColorScheme: defaultColorSchemeInput,
118
121
  disableCssColorScheme = false,
119
122
  cssVarPrefix = 'mui',
123
+ nativeColor = false,
120
124
  shouldSkipGeneratingVar = _shouldSkipGeneratingVar.default,
121
125
  colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,
122
126
  rootSelector = ':root',
@@ -144,13 +148,19 @@ function createThemeWithVars(options = {}, ...args) {
144
148
  throw new Error(process.env.NODE_ENV !== "production" ? `MUI: The \`colorSchemes.${defaultColorScheme}\` option is either missing or invalid.` : (0, _formatMuiErrorMessage.default)(21, defaultColorScheme));
145
149
  }
146
150
 
151
+ // The reason to use `oklch` is that it is the most perceptually uniform color space and widely supported.
152
+ let colorSpace;
153
+ if (nativeColor) {
154
+ colorSpace = 'oklch';
155
+ }
156
+
147
157
  // Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.
148
- const muiTheme = attachColorScheme(colorSchemes, defaultScheme, input, defaultColorScheme);
158
+ const muiTheme = attachColorScheme(colorSpace, colorSchemes, defaultScheme, input, defaultColorScheme);
149
159
  if (builtInLight && !colorSchemes.light) {
150
- attachColorScheme(colorSchemes, builtInLight, undefined, 'light');
160
+ attachColorScheme(colorSpace, colorSchemes, builtInLight, undefined, 'light');
151
161
  }
152
162
  if (builtInDark && !colorSchemes.dark) {
153
- attachColorScheme(colorSchemes, builtInDark, undefined, 'dark');
163
+ attachColorScheme(colorSpace, colorSchemes, builtInDark, undefined, 'dark');
154
164
  }
155
165
  let theme = {
156
166
  defaultColorScheme,
@@ -184,14 +194,30 @@ function createThemeWithVars(options = {}, ...args) {
184
194
  setColor(palette.common, 'background', '#000');
185
195
  setColor(palette.common, 'onBackground', '#fff');
186
196
  }
197
+ function colorMix(method, color, coefficient) {
198
+ if (colorSpace) {
199
+ let mixer;
200
+ if (method === _colorManipulator.private_safeAlpha) {
201
+ mixer = `transparent ${((1 - coefficient) * 100).toFixed(0)}%`;
202
+ }
203
+ if (method === _colorManipulator.private_safeDarken) {
204
+ mixer = `#000 ${(coefficient * 100).toFixed(0)}%`;
205
+ }
206
+ if (method === _colorManipulator.private_safeLighten) {
207
+ mixer = `#fff ${(coefficient * 100).toFixed(0)}%`;
208
+ }
209
+ return `color-mix(in ${colorSpace}, ${color}, ${mixer})`;
210
+ }
211
+ return method(color, coefficient);
212
+ }
187
213
 
188
214
  // assign component variables
189
215
  assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);
190
216
  if (palette.mode === 'light') {
191
- setColor(palette.Alert, 'errorColor', (0, _colorManipulator.private_safeDarken)(palette.error.light, 0.6));
192
- setColor(palette.Alert, 'infoColor', (0, _colorManipulator.private_safeDarken)(palette.info.light, 0.6));
193
- setColor(palette.Alert, 'successColor', (0, _colorManipulator.private_safeDarken)(palette.success.light, 0.6));
194
- setColor(palette.Alert, 'warningColor', (0, _colorManipulator.private_safeDarken)(palette.warning.light, 0.6));
217
+ setColor(palette.Alert, 'errorColor', colorMix(_colorManipulator.private_safeDarken, palette.error.light, 0.6));
218
+ setColor(palette.Alert, 'infoColor', colorMix(_colorManipulator.private_safeDarken, palette.info.light, 0.6));
219
+ setColor(palette.Alert, 'successColor', colorMix(_colorManipulator.private_safeDarken, palette.success.light, 0.6));
220
+ setColor(palette.Alert, 'warningColor', colorMix(_colorManipulator.private_safeDarken, palette.warning.light, 0.6));
195
221
  setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));
196
222
  setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));
197
223
  setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));
@@ -200,10 +226,10 @@ function createThemeWithVars(options = {}, ...args) {
200
226
  setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));
201
227
  setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));
202
228
  setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));
203
- setColor(palette.Alert, 'errorStandardBg', (0, _colorManipulator.private_safeLighten)(palette.error.light, 0.9));
204
- setColor(palette.Alert, 'infoStandardBg', (0, _colorManipulator.private_safeLighten)(palette.info.light, 0.9));
205
- setColor(palette.Alert, 'successStandardBg', (0, _colorManipulator.private_safeLighten)(palette.success.light, 0.9));
206
- setColor(palette.Alert, 'warningStandardBg', (0, _colorManipulator.private_safeLighten)(palette.warning.light, 0.9));
229
+ setColor(palette.Alert, 'errorStandardBg', colorMix(_colorManipulator.private_safeLighten, palette.error.light, 0.9));
230
+ setColor(palette.Alert, 'infoStandardBg', colorMix(_colorManipulator.private_safeLighten, palette.info.light, 0.9));
231
+ setColor(palette.Alert, 'successStandardBg', colorMix(_colorManipulator.private_safeLighten, palette.success.light, 0.9));
232
+ setColor(palette.Alert, 'warningStandardBg', colorMix(_colorManipulator.private_safeLighten, palette.warning.light, 0.9));
207
233
  setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));
208
234
  setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));
209
235
  setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));
@@ -218,41 +244,42 @@ function createThemeWithVars(options = {}, ...args) {
218
244
  setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');
219
245
  setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');
220
246
  setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');
221
- setColor(palette.LinearProgress, 'primaryBg', (0, _colorManipulator.private_safeLighten)(palette.primary.main, 0.62));
222
- setColor(palette.LinearProgress, 'secondaryBg', (0, _colorManipulator.private_safeLighten)(palette.secondary.main, 0.62));
223
- setColor(palette.LinearProgress, 'errorBg', (0, _colorManipulator.private_safeLighten)(palette.error.main, 0.62));
224
- setColor(palette.LinearProgress, 'infoBg', (0, _colorManipulator.private_safeLighten)(palette.info.main, 0.62));
225
- setColor(palette.LinearProgress, 'successBg', (0, _colorManipulator.private_safeLighten)(palette.success.main, 0.62));
226
- setColor(palette.LinearProgress, 'warningBg', (0, _colorManipulator.private_safeLighten)(palette.warning.main, 0.62));
227
- setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);
228
- setColor(palette.Slider, 'primaryTrack', (0, _colorManipulator.private_safeLighten)(palette.primary.main, 0.62));
229
- setColor(palette.Slider, 'secondaryTrack', (0, _colorManipulator.private_safeLighten)(palette.secondary.main, 0.62));
230
- setColor(palette.Slider, 'errorTrack', (0, _colorManipulator.private_safeLighten)(palette.error.main, 0.62));
231
- setColor(palette.Slider, 'infoTrack', (0, _colorManipulator.private_safeLighten)(palette.info.main, 0.62));
232
- setColor(palette.Slider, 'successTrack', (0, _colorManipulator.private_safeLighten)(palette.success.main, 0.62));
233
- setColor(palette.Slider, 'warningTrack', (0, _colorManipulator.private_safeLighten)(palette.warning.main, 0.62));
234
- const snackbarContentBackground = (0, _colorManipulator.private_safeEmphasize)(palette.background.default, 0.8);
247
+ setColor(palette.LinearProgress, 'primaryBg', colorMix(_colorManipulator.private_safeLighten, palette.primary.main, 0.62));
248
+ setColor(palette.LinearProgress, 'secondaryBg', colorMix(_colorManipulator.private_safeLighten, palette.secondary.main, 0.62));
249
+ setColor(palette.LinearProgress, 'errorBg', colorMix(_colorManipulator.private_safeLighten, palette.error.main, 0.62));
250
+ setColor(palette.LinearProgress, 'infoBg', colorMix(_colorManipulator.private_safeLighten, palette.info.main, 0.62));
251
+ setColor(palette.LinearProgress, 'successBg', colorMix(_colorManipulator.private_safeLighten, palette.success.main, 0.62));
252
+ setColor(palette.LinearProgress, 'warningBg', colorMix(_colorManipulator.private_safeLighten, palette.warning.main, 0.62));
253
+ setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(_colorManipulator.private_safeAlpha, palette.text.primary, 0.11) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);
254
+ setColor(palette.Slider, 'primaryTrack', colorMix(_colorManipulator.private_safeLighten, palette.primary.main, 0.62));
255
+ setColor(palette.Slider, 'secondaryTrack', colorMix(_colorManipulator.private_safeLighten, palette.secondary.main, 0.62));
256
+ setColor(palette.Slider, 'errorTrack', colorMix(_colorManipulator.private_safeLighten, palette.error.main, 0.62));
257
+ setColor(palette.Slider, 'infoTrack', colorMix(_colorManipulator.private_safeLighten, palette.info.main, 0.62));
258
+ setColor(palette.Slider, 'successTrack', colorMix(_colorManipulator.private_safeLighten, palette.success.main, 0.62));
259
+ setColor(palette.Slider, 'warningTrack', colorMix(_colorManipulator.private_safeLighten, palette.warning.main, 0.62));
260
+ const snackbarContentBackground = colorSpace ? colorMix(_colorManipulator.private_safeDarken, palette.background.default, 0.6825) // use `0.6825` instead of `0.8` to match the contrast ratio of JS implementation
261
+ : (0, _colorManipulator.private_safeEmphasize)(palette.background.default, 0.8);
235
262
  setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
236
- setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));
263
+ setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? _createPalette.dark.text.primary : palette.getContrastText(snackbarContentBackground)));
237
264
  setColor(palette.SpeedDialAction, 'fabHoverBg', (0, _colorManipulator.private_safeEmphasize)(palette.background.paper, 0.15));
238
265
  setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));
239
266
  setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));
240
267
  setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));
241
268
  setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));
242
- setColor(palette.Switch, 'primaryDisabledColor', (0, _colorManipulator.private_safeLighten)(palette.primary.main, 0.62));
243
- setColor(palette.Switch, 'secondaryDisabledColor', (0, _colorManipulator.private_safeLighten)(palette.secondary.main, 0.62));
244
- setColor(palette.Switch, 'errorDisabledColor', (0, _colorManipulator.private_safeLighten)(palette.error.main, 0.62));
245
- setColor(palette.Switch, 'infoDisabledColor', (0, _colorManipulator.private_safeLighten)(palette.info.main, 0.62));
246
- setColor(palette.Switch, 'successDisabledColor', (0, _colorManipulator.private_safeLighten)(palette.success.main, 0.62));
247
- setColor(palette.Switch, 'warningDisabledColor', (0, _colorManipulator.private_safeLighten)(palette.warning.main, 0.62));
248
- setColor(palette.TableCell, 'border', (0, _colorManipulator.private_safeLighten)((0, _colorManipulator.private_safeAlpha)(palette.divider, 1), 0.88));
249
- setColor(palette.Tooltip, 'bg', (0, _colorManipulator.private_safeAlpha)(palette.grey[700], 0.92));
269
+ setColor(palette.Switch, 'primaryDisabledColor', colorMix(_colorManipulator.private_safeLighten, palette.primary.main, 0.62));
270
+ setColor(palette.Switch, 'secondaryDisabledColor', colorMix(_colorManipulator.private_safeLighten, palette.secondary.main, 0.62));
271
+ setColor(palette.Switch, 'errorDisabledColor', colorMix(_colorManipulator.private_safeLighten, palette.error.main, 0.62));
272
+ setColor(palette.Switch, 'infoDisabledColor', colorMix(_colorManipulator.private_safeLighten, palette.info.main, 0.62));
273
+ setColor(palette.Switch, 'successDisabledColor', colorMix(_colorManipulator.private_safeLighten, palette.success.main, 0.62));
274
+ setColor(palette.Switch, 'warningDisabledColor', colorMix(_colorManipulator.private_safeLighten, palette.warning.main, 0.62));
275
+ setColor(palette.TableCell, 'border', colorMix(_colorManipulator.private_safeLighten, colorMix(_colorManipulator.private_safeAlpha, palette.divider, 1), 0.88));
276
+ setColor(palette.Tooltip, 'bg', colorMix(_colorManipulator.private_safeAlpha, palette.grey[700], 0.92));
250
277
  }
251
278
  if (palette.mode === 'dark') {
252
- setColor(palette.Alert, 'errorColor', (0, _colorManipulator.private_safeLighten)(palette.error.light, 0.6));
253
- setColor(palette.Alert, 'infoColor', (0, _colorManipulator.private_safeLighten)(palette.info.light, 0.6));
254
- setColor(palette.Alert, 'successColor', (0, _colorManipulator.private_safeLighten)(palette.success.light, 0.6));
255
- setColor(palette.Alert, 'warningColor', (0, _colorManipulator.private_safeLighten)(palette.warning.light, 0.6));
279
+ setColor(palette.Alert, 'errorColor', colorMix(_colorManipulator.private_safeLighten, palette.error.light, 0.6));
280
+ setColor(palette.Alert, 'infoColor', colorMix(_colorManipulator.private_safeLighten, palette.info.light, 0.6));
281
+ setColor(palette.Alert, 'successColor', colorMix(_colorManipulator.private_safeLighten, palette.success.light, 0.6));
282
+ setColor(palette.Alert, 'warningColor', colorMix(_colorManipulator.private_safeLighten, palette.warning.light, 0.6));
256
283
  setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));
257
284
  setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));
258
285
  setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));
@@ -261,10 +288,10 @@ function createThemeWithVars(options = {}, ...args) {
261
288
  setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));
262
289
  setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));
263
290
  setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));
264
- setColor(palette.Alert, 'errorStandardBg', (0, _colorManipulator.private_safeDarken)(palette.error.light, 0.9));
265
- setColor(palette.Alert, 'infoStandardBg', (0, _colorManipulator.private_safeDarken)(palette.info.light, 0.9));
266
- setColor(palette.Alert, 'successStandardBg', (0, _colorManipulator.private_safeDarken)(palette.success.light, 0.9));
267
- setColor(palette.Alert, 'warningStandardBg', (0, _colorManipulator.private_safeDarken)(palette.warning.light, 0.9));
291
+ setColor(palette.Alert, 'errorStandardBg', colorMix(_colorManipulator.private_safeDarken, palette.error.light, 0.9));
292
+ setColor(palette.Alert, 'infoStandardBg', colorMix(_colorManipulator.private_safeDarken, palette.info.light, 0.9));
293
+ setColor(palette.Alert, 'successStandardBg', colorMix(_colorManipulator.private_safeDarken, palette.success.light, 0.9));
294
+ setColor(palette.Alert, 'warningStandardBg', colorMix(_colorManipulator.private_safeDarken, palette.warning.light, 0.9));
268
295
  setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));
269
296
  setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));
270
297
  setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));
@@ -281,35 +308,36 @@ function createThemeWithVars(options = {}, ...args) {
281
308
  setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');
282
309
  setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');
283
310
  setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');
284
- setColor(palette.LinearProgress, 'primaryBg', (0, _colorManipulator.private_safeDarken)(palette.primary.main, 0.5));
285
- setColor(palette.LinearProgress, 'secondaryBg', (0, _colorManipulator.private_safeDarken)(palette.secondary.main, 0.5));
286
- setColor(palette.LinearProgress, 'errorBg', (0, _colorManipulator.private_safeDarken)(palette.error.main, 0.5));
287
- setColor(palette.LinearProgress, 'infoBg', (0, _colorManipulator.private_safeDarken)(palette.info.main, 0.5));
288
- setColor(palette.LinearProgress, 'successBg', (0, _colorManipulator.private_safeDarken)(palette.success.main, 0.5));
289
- setColor(palette.LinearProgress, 'warningBg', (0, _colorManipulator.private_safeDarken)(palette.warning.main, 0.5));
290
- setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);
291
- setColor(palette.Slider, 'primaryTrack', (0, _colorManipulator.private_safeDarken)(palette.primary.main, 0.5));
292
- setColor(palette.Slider, 'secondaryTrack', (0, _colorManipulator.private_safeDarken)(palette.secondary.main, 0.5));
293
- setColor(palette.Slider, 'errorTrack', (0, _colorManipulator.private_safeDarken)(palette.error.main, 0.5));
294
- setColor(palette.Slider, 'infoTrack', (0, _colorManipulator.private_safeDarken)(palette.info.main, 0.5));
295
- setColor(palette.Slider, 'successTrack', (0, _colorManipulator.private_safeDarken)(palette.success.main, 0.5));
296
- setColor(palette.Slider, 'warningTrack', (0, _colorManipulator.private_safeDarken)(palette.warning.main, 0.5));
297
- const snackbarContentBackground = (0, _colorManipulator.private_safeEmphasize)(palette.background.default, 0.98);
311
+ setColor(palette.LinearProgress, 'primaryBg', colorMix(_colorManipulator.private_safeDarken, palette.primary.main, 0.5));
312
+ setColor(palette.LinearProgress, 'secondaryBg', colorMix(_colorManipulator.private_safeDarken, palette.secondary.main, 0.5));
313
+ setColor(palette.LinearProgress, 'errorBg', colorMix(_colorManipulator.private_safeDarken, palette.error.main, 0.5));
314
+ setColor(palette.LinearProgress, 'infoBg', colorMix(_colorManipulator.private_safeDarken, palette.info.main, 0.5));
315
+ setColor(palette.LinearProgress, 'successBg', colorMix(_colorManipulator.private_safeDarken, palette.success.main, 0.5));
316
+ setColor(palette.LinearProgress, 'warningBg', colorMix(_colorManipulator.private_safeDarken, palette.warning.main, 0.5));
317
+ setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(_colorManipulator.private_safeAlpha, palette.text.primary, 0.13) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);
318
+ setColor(palette.Slider, 'primaryTrack', colorMix(_colorManipulator.private_safeDarken, palette.primary.main, 0.5));
319
+ setColor(palette.Slider, 'secondaryTrack', colorMix(_colorManipulator.private_safeDarken, palette.secondary.main, 0.5));
320
+ setColor(palette.Slider, 'errorTrack', colorMix(_colorManipulator.private_safeDarken, palette.error.main, 0.5));
321
+ setColor(palette.Slider, 'infoTrack', colorMix(_colorManipulator.private_safeDarken, palette.info.main, 0.5));
322
+ setColor(palette.Slider, 'successTrack', colorMix(_colorManipulator.private_safeDarken, palette.success.main, 0.5));
323
+ setColor(palette.Slider, 'warningTrack', colorMix(_colorManipulator.private_safeDarken, palette.warning.main, 0.5));
324
+ const snackbarContentBackground = colorSpace ? colorMix(_colorManipulator.private_safeLighten, palette.background.default, 0.985) // use `0.985` instead of `0.98` to match the contrast ratio of JS implementation
325
+ : (0, _colorManipulator.private_safeEmphasize)(palette.background.default, 0.98);
298
326
  setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
299
- setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));
327
+ setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? _createPalette.light.text.primary : palette.getContrastText(snackbarContentBackground)));
300
328
  setColor(palette.SpeedDialAction, 'fabHoverBg', (0, _colorManipulator.private_safeEmphasize)(palette.background.paper, 0.15));
301
329
  setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));
302
330
  setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));
303
331
  setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));
304
332
  setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));
305
- setColor(palette.Switch, 'primaryDisabledColor', (0, _colorManipulator.private_safeDarken)(palette.primary.main, 0.55));
306
- setColor(palette.Switch, 'secondaryDisabledColor', (0, _colorManipulator.private_safeDarken)(palette.secondary.main, 0.55));
307
- setColor(palette.Switch, 'errorDisabledColor', (0, _colorManipulator.private_safeDarken)(palette.error.main, 0.55));
308
- setColor(palette.Switch, 'infoDisabledColor', (0, _colorManipulator.private_safeDarken)(palette.info.main, 0.55));
309
- setColor(palette.Switch, 'successDisabledColor', (0, _colorManipulator.private_safeDarken)(palette.success.main, 0.55));
310
- setColor(palette.Switch, 'warningDisabledColor', (0, _colorManipulator.private_safeDarken)(palette.warning.main, 0.55));
311
- setColor(palette.TableCell, 'border', (0, _colorManipulator.private_safeDarken)((0, _colorManipulator.private_safeAlpha)(palette.divider, 1), 0.68));
312
- setColor(palette.Tooltip, 'bg', (0, _colorManipulator.private_safeAlpha)(palette.grey[700], 0.92));
333
+ setColor(palette.Switch, 'primaryDisabledColor', colorMix(_colorManipulator.private_safeDarken, palette.primary.main, 0.55));
334
+ setColor(palette.Switch, 'secondaryDisabledColor', colorMix(_colorManipulator.private_safeDarken, palette.secondary.main, 0.55));
335
+ setColor(palette.Switch, 'errorDisabledColor', colorMix(_colorManipulator.private_safeDarken, palette.error.main, 0.55));
336
+ setColor(palette.Switch, 'infoDisabledColor', colorMix(_colorManipulator.private_safeDarken, palette.info.main, 0.55));
337
+ setColor(palette.Switch, 'successDisabledColor', colorMix(_colorManipulator.private_safeDarken, palette.success.main, 0.55));
338
+ setColor(palette.Switch, 'warningDisabledColor', colorMix(_colorManipulator.private_safeDarken, palette.warning.main, 0.55));
339
+ setColor(palette.TableCell, 'border', colorMix(_colorManipulator.private_safeDarken, colorMix(_colorManipulator.private_safeAlpha, palette.divider, 1), 0.68));
340
+ setColor(palette.Tooltip, 'bg', colorMix(_colorManipulator.private_safeAlpha, palette.grey[700], 0.92));
313
341
  }
314
342
 
315
343
  // MUI X - DataGrid needs this token.
@@ -361,7 +389,8 @@ function createThemeWithVars(options = {}, ...args) {
361
389
  prefix: cssVarPrefix,
362
390
  disableCssColorScheme,
363
391
  shouldSkipGeneratingVar,
364
- getSelector: (0, _createGetSelector.default)(theme)
392
+ getSelector: (0, _createGetSelector.default)(theme),
393
+ enableContrastVars: nativeColor
365
394
  };
366
395
  const {
367
396
  vars,
@@ -135,6 +135,7 @@ export interface UseAutocompleteProps<Value, Multiple extends boolean | undefine
135
135
  * Used to determine the disabled state for a given option.
136
136
  *
137
137
  * @param {Value} option The option to test.
138
+ * @template Value The option shape. Will be the same shape as an item of the options.
138
139
  * @returns {boolean}
139
140
  */
140
141
  getOptionDisabled?: (option: Value) => boolean;
@@ -14,6 +14,14 @@ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallb
14
14
  var _useControlled = _interopRequireDefault(require("@mui/utils/useControlled"));
15
15
  var _useId = _interopRequireDefault(require("@mui/utils/useId"));
16
16
  var _usePreviousProps = _interopRequireDefault(require("@mui/utils/usePreviousProps"));
17
+ function areArraysSame({
18
+ array1,
19
+ array2,
20
+ parser = value => value
21
+ }) {
22
+ return array1 && array2 && array1.length === array2.length && array1.every((prevOption, index) => parser(prevOption) === parser(array2[index]));
23
+ }
24
+
17
25
  // https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
18
26
  function stripDiacritics(string) {
19
27
  return string.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
@@ -375,13 +383,22 @@ function useAutocomplete(props) {
375
383
  }
376
384
  }
377
385
  });
386
+ const filteredOptionsChanged = !areArraysSame({
387
+ array1: previousProps.filteredOptions,
388
+ array2: filteredOptions,
389
+ parser: getOptionLabel
390
+ });
378
391
  const getPreviousHighlightedOptionIndex = () => {
379
392
  const isSameValue = (value1, value2) => {
380
393
  const label1 = value1 ? getOptionLabel(value1) : '';
381
394
  const label2 = value2 ? getOptionLabel(value2) : '';
382
395
  return label1 === label2;
383
396
  };
384
- if (highlightedIndexRef.current !== -1 && previousProps.filteredOptions && previousProps.filteredOptions.length !== filteredOptions.length && previousProps.inputValue === inputValue && (multiple ? value.length === previousProps.value.length && previousProps.value.every((val, i) => getOptionLabel(value[i]) === getOptionLabel(val)) : isSameValue(previousProps.value, value))) {
397
+ if (highlightedIndexRef.current !== -1 && !areArraysSame({
398
+ array1: previousProps.filteredOptions,
399
+ array2: filteredOptions,
400
+ parser: getOptionLabel
401
+ }) && previousProps.inputValue === inputValue && (multiple ? value.length === previousProps.value.length && previousProps.value.every((val, i) => getOptionLabel(value[i]) === getOptionLabel(val)) : isSameValue(previousProps.value, value))) {
385
402
  const previousHighlightedOption = previousProps.filteredOptions[highlightedIndexRef.current];
386
403
  if (previousHighlightedOption) {
387
404
  return filteredOptions.findIndex(option => {
@@ -477,8 +494,10 @@ function useAutocomplete(props) {
477
494
  }, [componentName]);
478
495
  }
479
496
  React.useEffect(() => {
480
- syncHighlightedIndex();
481
- }, [syncHighlightedIndex]);
497
+ if (filteredOptionsChanged) {
498
+ syncHighlightedIndex();
499
+ }
500
+ }, [syncHighlightedIndex, filteredOptionsChanged]);
482
501
  const handleOpen = event => {
483
502
  if (open) {
484
503
  return;
package/version/index.js CHANGED
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = exports.prerelease = exports.patch = exports.minor = exports.major = exports.default = void 0;
7
- const version = exports.version = "7.2.0";
7
+ const version = exports.version = "7.3.0";
8
8
  const major = exports.major = Number("7");
9
- const minor = exports.minor = Number("2");
9
+ const minor = exports.minor = Number("3");
10
10
  const patch = exports.patch = Number("0");
11
11
  const prerelease = exports.prerelease = undefined;
12
12
  var _default = exports.default = version;