@mui/material 9.0.0-alpha.3 → 9.0.0-alpha.4

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 (302) hide show
  1. package/Accordion/Accordion.d.mts +0 -14
  2. package/Accordion/Accordion.d.ts +0 -14
  3. package/Accordion/Accordion.js +3 -25
  4. package/Accordion/Accordion.mjs +3 -25
  5. package/AccordionSummary/AccordionSummary.js +1 -1
  6. package/AccordionSummary/AccordionSummary.mjs +1 -1
  7. package/AccordionSummary/accordionSummaryClasses.d.mts +0 -5
  8. package/AccordionSummary/accordionSummaryClasses.d.ts +0 -5
  9. package/AccordionSummary/accordionSummaryClasses.js +1 -1
  10. package/AccordionSummary/accordionSummaryClasses.mjs +1 -1
  11. package/Alert/Alert.d.mts +0 -23
  12. package/Alert/Alert.d.ts +0 -23
  13. package/Alert/Alert.js +4 -36
  14. package/Alert/Alert.mjs +4 -36
  15. package/Alert/alertClasses.d.mts +0 -72
  16. package/Alert/alertClasses.d.ts +0 -72
  17. package/Alert/alertClasses.js +1 -1
  18. package/Alert/alertClasses.mjs +1 -1
  19. package/Autocomplete/Autocomplete.d.mts +10 -60
  20. package/Autocomplete/Autocomplete.d.ts +10 -60
  21. package/Autocomplete/Autocomplete.js +33 -99
  22. package/Autocomplete/Autocomplete.mjs +33 -99
  23. package/Avatar/Avatar.d.mts +0 -8
  24. package/Avatar/Avatar.d.ts +0 -8
  25. package/Avatar/Avatar.js +13 -35
  26. package/Avatar/Avatar.mjs +13 -35
  27. package/AvatarGroup/AvatarGroup.d.mts +0 -15
  28. package/AvatarGroup/AvatarGroup.d.ts +0 -15
  29. package/AvatarGroup/AvatarGroup.js +1 -18
  30. package/AvatarGroup/AvatarGroup.mjs +1 -18
  31. package/Backdrop/Backdrop.d.mts +1 -31
  32. package/Backdrop/Backdrop.d.ts +1 -31
  33. package/Backdrop/Backdrop.js +2 -42
  34. package/Backdrop/Backdrop.mjs +2 -42
  35. package/Badge/Badge.d.mts +0 -20
  36. package/Badge/Badge.d.ts +0 -20
  37. package/Badge/Badge.js +2 -35
  38. package/Badge/Badge.mjs +2 -35
  39. package/Button/Button.js +6 -6
  40. package/Button/Button.mjs +6 -6
  41. package/Button/buttonClasses.d.mts +0 -132
  42. package/Button/buttonClasses.d.ts +0 -132
  43. package/Button/buttonClasses.js +1 -1
  44. package/Button/buttonClasses.mjs +1 -1
  45. package/ButtonBase/ButtonBase.js +16 -2
  46. package/ButtonBase/ButtonBase.mjs +16 -2
  47. package/CHANGELOG.md +154 -0
  48. package/CircularProgress/CircularProgress.js +2 -2
  49. package/CircularProgress/CircularProgress.mjs +2 -2
  50. package/CircularProgress/circularProgressClasses.d.mts +0 -8
  51. package/CircularProgress/circularProgressClasses.d.ts +0 -8
  52. package/CircularProgress/circularProgressClasses.js +1 -1
  53. package/CircularProgress/circularProgressClasses.mjs +1 -1
  54. package/Divider/Divider.d.mts +0 -6
  55. package/Divider/Divider.d.ts +0 -6
  56. package/Divider/Divider.js +2 -18
  57. package/Divider/Divider.mjs +2 -18
  58. package/Divider/dividerClasses.d.mts +0 -4
  59. package/Divider/dividerClasses.d.ts +0 -4
  60. package/Divider/dividerClasses.js +1 -1
  61. package/Divider/dividerClasses.mjs +1 -1
  62. package/FormControlLabel/FormControlLabel.d.mts +1 -14
  63. package/FormControlLabel/FormControlLabel.d.ts +1 -14
  64. package/FormControlLabel/FormControlLabel.js +1 -13
  65. package/FormControlLabel/FormControlLabel.mjs +1 -13
  66. package/Input/Input.js +2 -1
  67. package/Input/Input.mjs +2 -1
  68. package/Menu/Menu.d.mts +0 -13
  69. package/Menu/Menu.d.ts +0 -13
  70. package/Menu/Menu.js +5 -44
  71. package/Menu/Menu.mjs +5 -44
  72. package/MenuItem/MenuItem.js +21 -1
  73. package/MenuItem/MenuItem.mjs +23 -1
  74. package/MenuList/MenuList.js +2 -4
  75. package/MenuList/MenuList.mjs +2 -4
  76. package/MobileStepper/MobileStepper.d.mts +0 -5
  77. package/MobileStepper/MobileStepper.d.ts +0 -5
  78. package/MobileStepper/MobileStepper.js +1 -10
  79. package/MobileStepper/MobileStepper.mjs +1 -10
  80. package/Popover/Popover.d.mts +4 -48
  81. package/Popover/Popover.d.ts +4 -48
  82. package/Popover/Popover.js +4 -64
  83. package/Popover/Popover.mjs +4 -64
  84. package/Popper/Popper.d.mts +0 -17
  85. package/Popper/Popper.d.ts +0 -17
  86. package/Popper/Popper.js +2 -26
  87. package/Popper/Popper.mjs +2 -26
  88. package/Popper/index.d.mts +1 -0
  89. package/Popper/index.d.ts +1 -0
  90. package/Popper/index.js +11 -2
  91. package/Popper/index.mjs +1 -0
  92. package/Select/SelectInput.js +50 -55
  93. package/Select/SelectInput.mjs +47 -52
  94. package/Select/index.d.mts +1 -0
  95. package/Select/index.d.ts +1 -0
  96. package/Select/index.js +12 -0
  97. package/Select/index.mjs +1 -0
  98. package/Select/utils/SelectFocusSourceContext.d.mts +4 -0
  99. package/Select/utils/SelectFocusSourceContext.d.ts +4 -0
  100. package/Select/utils/SelectFocusSourceContext.js +19 -0
  101. package/Select/utils/SelectFocusSourceContext.mjs +13 -0
  102. package/Select/utils/areEqualValues.d.mts +1 -0
  103. package/Select/utils/areEqualValues.d.ts +1 -0
  104. package/Select/utils/areEqualValues.js +14 -0
  105. package/Select/utils/areEqualValues.mjs +8 -0
  106. package/Select/utils/getOpenInteractionType.d.mts +1 -0
  107. package/Select/utils/getOpenInteractionType.d.ts +1 -0
  108. package/Select/utils/getOpenInteractionType.js +18 -0
  109. package/Select/utils/getOpenInteractionType.mjs +12 -0
  110. package/Select/utils/index.d.mts +4 -0
  111. package/Select/utils/index.d.ts +4 -0
  112. package/Select/utils/index.js +40 -0
  113. package/Select/utils/index.mjs +4 -0
  114. package/Select/utils/isEmpty.d.mts +1 -0
  115. package/Select/utils/isEmpty.d.ts +1 -0
  116. package/Select/utils/isEmpty.js +9 -0
  117. package/Select/utils/isEmpty.mjs +3 -0
  118. package/Slider/Slider.d.mts +109 -77
  119. package/Slider/Slider.d.ts +109 -77
  120. package/Slider/Slider.js +42 -119
  121. package/Slider/Slider.mjs +42 -119
  122. package/Slider/sliderClasses.d.mts +7 -7
  123. package/Slider/sliderClasses.d.ts +7 -7
  124. package/Slider/useSlider.js +50 -14
  125. package/Slider/useSlider.mjs +50 -14
  126. package/Snackbar/Snackbar.d.mts +1 -27
  127. package/Snackbar/Snackbar.d.ts +1 -27
  128. package/Snackbar/Snackbar.js +5 -58
  129. package/Snackbar/Snackbar.mjs +5 -58
  130. package/SpeedDial/SpeedDial.d.mts +0 -13
  131. package/SpeedDial/SpeedDial.d.ts +0 -13
  132. package/SpeedDial/SpeedDial.js +15 -40
  133. package/SpeedDial/SpeedDial.mjs +15 -40
  134. package/SpeedDialAction/SpeedDialAction.d.mts +0 -28
  135. package/SpeedDialAction/SpeedDialAction.d.ts +0 -28
  136. package/SpeedDialAction/SpeedDialAction.js +5 -46
  137. package/SpeedDialAction/SpeedDialAction.mjs +5 -46
  138. package/TablePagination/TablePagination.d.mts +1 -1
  139. package/TablePagination/TablePagination.d.ts +1 -1
  140. package/TablePagination/TablePagination.js +4 -2
  141. package/TablePagination/TablePagination.mjs +4 -2
  142. package/Tabs/Tabs.d.mts +2 -33
  143. package/Tabs/Tabs.d.ts +2 -33
  144. package/Tabs/Tabs.js +8 -38
  145. package/Tabs/Tabs.mjs +8 -38
  146. package/TextField/TextField.d.mts +6 -49
  147. package/TextField/TextField.d.ts +6 -49
  148. package/TextField/TextField.js +18 -53
  149. package/TextField/TextField.mjs +18 -53
  150. package/Tooltip/Tooltip.d.mts +1 -55
  151. package/Tooltip/Tooltip.d.ts +1 -55
  152. package/Tooltip/Tooltip.js +9 -87
  153. package/Tooltip/Tooltip.mjs +9 -87
  154. package/Typography/Typography.d.mts +0 -6
  155. package/Typography/Typography.d.ts +0 -6
  156. package/Typography/Typography.js +3 -19
  157. package/Typography/Typography.mjs +3 -19
  158. package/Typography/typographyClasses.d.mts +0 -5
  159. package/Typography/typographyClasses.d.ts +0 -5
  160. package/Typography/typographyClasses.js +1 -1
  161. package/Typography/typographyClasses.mjs +1 -1
  162. package/index.d.mts +0 -2
  163. package/index.d.ts +0 -2
  164. package/index.js +1 -9
  165. package/index.mjs +1 -2
  166. package/locale/amET.js +4 -1
  167. package/locale/amET.mjs +3 -1
  168. package/locale/arEG.js +4 -1
  169. package/locale/arEG.mjs +3 -1
  170. package/locale/arSA.js +4 -1
  171. package/locale/arSA.mjs +3 -1
  172. package/locale/arSD.js +4 -1
  173. package/locale/arSD.mjs +3 -1
  174. package/locale/beBY.js +4 -1
  175. package/locale/beBY.mjs +3 -1
  176. package/locale/bnBD.js +4 -1
  177. package/locale/bnBD.mjs +3 -1
  178. package/locale/caES.js +4 -1
  179. package/locale/caES.mjs +3 -1
  180. package/locale/csCZ.js +4 -1
  181. package/locale/csCZ.mjs +3 -1
  182. package/locale/daDK.js +4 -1
  183. package/locale/daDK.mjs +3 -1
  184. package/locale/deDE.js +4 -1
  185. package/locale/deDE.mjs +3 -1
  186. package/locale/elGR.js +4 -1
  187. package/locale/elGR.mjs +3 -1
  188. package/locale/esES.js +4 -1
  189. package/locale/esES.mjs +3 -1
  190. package/locale/etEE.js +4 -1
  191. package/locale/etEE.mjs +3 -1
  192. package/locale/faIR.js +4 -1
  193. package/locale/faIR.mjs +3 -1
  194. package/locale/fiFI.js +4 -1
  195. package/locale/fiFI.mjs +3 -1
  196. package/locale/frFR.js +4 -1
  197. package/locale/frFR.mjs +3 -1
  198. package/locale/heIL.js +4 -1
  199. package/locale/heIL.mjs +3 -1
  200. package/locale/hiIN.js +4 -1
  201. package/locale/hiIN.mjs +3 -1
  202. package/locale/hrHR.js +5 -1
  203. package/locale/hrHR.mjs +4 -1
  204. package/locale/isIS.js +4 -1
  205. package/locale/isIS.mjs +3 -1
  206. package/locale/itIT.js +4 -1
  207. package/locale/itIT.mjs +3 -1
  208. package/locale/jaJP.js +4 -1
  209. package/locale/jaJP.mjs +3 -1
  210. package/locale/khKH.js +4 -1
  211. package/locale/khKH.mjs +3 -1
  212. package/locale/kkKZ.js +4 -1
  213. package/locale/kkKZ.mjs +3 -1
  214. package/locale/koKR.js +4 -1
  215. package/locale/koKR.mjs +3 -1
  216. package/locale/kuCKB.js +4 -1
  217. package/locale/kuCKB.mjs +3 -1
  218. package/locale/kuLatn.js +4 -1
  219. package/locale/kuLatn.mjs +3 -1
  220. package/locale/mkMK.js +5 -1
  221. package/locale/mkMK.mjs +4 -1
  222. package/locale/msMS.js +5 -1
  223. package/locale/msMS.mjs +4 -1
  224. package/locale/myMY.js +5 -1
  225. package/locale/myMY.mjs +4 -1
  226. package/locale/nbNO.js +4 -1
  227. package/locale/nbNO.mjs +3 -1
  228. package/locale/neNP.js +5 -1
  229. package/locale/neNP.mjs +4 -1
  230. package/locale/nlNL.js +4 -1
  231. package/locale/nlNL.mjs +3 -1
  232. package/locale/nnNO.js +4 -1
  233. package/locale/nnNO.mjs +3 -1
  234. package/locale/plPL.js +4 -1
  235. package/locale/plPL.mjs +3 -1
  236. package/locale/psAF.js +4 -1
  237. package/locale/psAF.mjs +3 -1
  238. package/locale/ptBR.js +4 -1
  239. package/locale/ptBR.mjs +3 -1
  240. package/locale/ptPT.js +4 -1
  241. package/locale/ptPT.mjs +3 -1
  242. package/locale/roRO.js +4 -1
  243. package/locale/roRO.mjs +3 -1
  244. package/locale/ruRU.js +4 -1
  245. package/locale/ruRU.mjs +3 -1
  246. package/locale/siLK.js +4 -1
  247. package/locale/siLK.mjs +3 -1
  248. package/locale/skSK.js +4 -1
  249. package/locale/skSK.mjs +3 -1
  250. package/locale/srRS.js +5 -1
  251. package/locale/srRS.mjs +4 -1
  252. package/locale/svSE.js +4 -1
  253. package/locale/svSE.mjs +3 -1
  254. package/locale/thTH.js +4 -1
  255. package/locale/thTH.mjs +3 -1
  256. package/locale/tlTL.js +5 -1
  257. package/locale/tlTL.mjs +4 -1
  258. package/locale/trTR.js +4 -1
  259. package/locale/trTR.mjs +3 -1
  260. package/locale/ukUA.js +4 -1
  261. package/locale/ukUA.mjs +3 -1
  262. package/locale/urPK.js +4 -1
  263. package/locale/urPK.mjs +3 -1
  264. package/locale/utils/buildFormatNumber.d.mts +2 -0
  265. package/locale/utils/buildFormatNumber.d.ts +2 -0
  266. package/locale/utils/buildFormatNumber.js +23 -0
  267. package/locale/utils/buildFormatNumber.mjs +17 -0
  268. package/locale/viVN.js +4 -1
  269. package/locale/viVN.mjs +3 -1
  270. package/locale/zhCN.js +4 -1
  271. package/locale/zhCN.mjs +3 -1
  272. package/locale/zhHK.js +4 -1
  273. package/locale/zhHK.mjs +3 -1
  274. package/locale/zhTW.js +4 -1
  275. package/locale/zhTW.mjs +3 -1
  276. package/package.json +6 -20
  277. package/styles/components.d.mts +0 -5
  278. package/styles/components.d.ts +0 -5
  279. package/styles/overrides.d.mts +0 -2
  280. package/styles/overrides.d.ts +0 -2
  281. package/styles/props.d.mts +0 -2
  282. package/styles/props.d.ts +0 -2
  283. package/useAutocomplete/useAutocomplete.d.mts +0 -12
  284. package/useAutocomplete/useAutocomplete.d.ts +0 -12
  285. package/useAutocomplete/useAutocomplete.js +29 -28
  286. package/useAutocomplete/useAutocomplete.mjs +29 -28
  287. package/version/index.js +2 -2
  288. package/version/index.mjs +2 -2
  289. package/GridLegacy/GridLegacy.d.mts +0 -160
  290. package/GridLegacy/GridLegacy.d.ts +0 -160
  291. package/GridLegacy/GridLegacy.js +0 -601
  292. package/GridLegacy/GridLegacy.mjs +0 -588
  293. package/GridLegacy/GridLegacyContext.js +0 -17
  294. package/GridLegacy/GridLegacyContext.mjs +0 -12
  295. package/GridLegacy/gridLegacyClasses.d.mts +0 -48
  296. package/GridLegacy/gridLegacyClasses.d.ts +0 -48
  297. package/GridLegacy/gridLegacyClasses.js +0 -27
  298. package/GridLegacy/gridLegacyClasses.mjs +0 -19
  299. package/GridLegacy/index.d.mts +0 -4
  300. package/GridLegacy/index.d.ts +0 -4
  301. package/GridLegacy/index.js +0 -35
  302. package/GridLegacy/index.mjs +0 -3
@@ -64,6 +64,7 @@ const defaultFilterOptions = createFilterOptions();
64
64
  // Number of options to jump in list box when `Page Up` and `Page Down` keys are used.
65
65
  const pageSize = 5;
66
66
  const defaultIsActiveElementInListbox = listboxRef => listboxRef.current !== null && listboxRef.current.parentElement?.contains(document.activeElement);
67
+ const defaultIsOptionEqualToValue = (option, value) => option === value;
67
68
  const MULTIPLE_DEFAULT_VALUE = [];
68
69
  function getInputValue(value, multiple, getOptionLabel, renderValue) {
69
70
  if (multiple || value == null || renderValue) {
@@ -102,7 +103,7 @@ function useAutocomplete(props) {
102
103
  id: idProp,
103
104
  includeInputInList = false,
104
105
  inputValue: inputValueProp,
105
- isOptionEqualToValue = (option, value) => option === value,
106
+ isOptionEqualToValue = defaultIsOptionEqualToValue,
106
107
  multiple = false,
107
108
  onChange,
108
109
  onClose,
@@ -180,8 +181,30 @@ function useAutocomplete(props) {
180
181
  const [inputPristine, setInputPristine] = React.useState(true);
181
182
  const inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value);
182
183
  const popupOpen = open && !readOnly;
184
+ const selectedValues = React.useMemo(() => {
185
+ if (multiple) {
186
+ return value;
187
+ }
188
+ if (value != null) {
189
+ return [value];
190
+ }
191
+ return [];
192
+ }, [multiple, value]);
193
+ const selectedValuesSet = React.useMemo(() => {
194
+ // Fast path for the default strict equality comparator to avoid O(n^2) option checks.
195
+ if (isOptionEqualToValue !== defaultIsOptionEqualToValue || selectedValues.length === 0) {
196
+ return null;
197
+ }
198
+ return new Set(selectedValues);
199
+ }, [isOptionEqualToValue, selectedValues]);
200
+ const isOptionSelected = React.useCallback(option => {
201
+ if (selectedValuesSet) {
202
+ return selectedValuesSet.has(option);
203
+ }
204
+ return selectedValues.some(value2 => value2 != null && isOptionEqualToValue(option, value2));
205
+ }, [isOptionEqualToValue, selectedValues, selectedValuesSet]);
183
206
  const filteredOptions = popupOpen ? filterOptions(options.filter(option => {
184
- if (filterSelectedOptions && (multiple ? value : [value]).some(value2 => value2 !== null && isOptionEqualToValue(option, value2))) {
207
+ if (filterSelectedOptions && isOptionSelected(option)) {
185
208
  return false;
186
209
  }
187
210
  return true;
@@ -214,9 +237,7 @@ function useAutocomplete(props) {
214
237
  if (itemToFocus === -1) {
215
238
  inputRef.current.focus();
216
239
  } else {
217
- // Using `data-tag-index` for deprecated `renderTags`. Remove when `renderTags` is gone.
218
- const indexType = renderValue ? 'data-item-index' : 'data-tag-index';
219
- anchorEl.querySelector(`[${indexType}="${itemToFocus}"]`).focus();
240
+ anchorEl.querySelector(`[data-item-index="${itemToFocus}"]`).focus();
220
241
  }
221
242
  });
222
243
 
@@ -587,10 +608,7 @@ function useAutocomplete(props) {
587
608
  if (direction === 'next' && nextFocus === value.length || direction === 'previous' && nextFocus === -1) {
588
609
  return -1;
589
610
  }
590
-
591
- // Using `data-tag-index` for deprecated `renderTags`. Remove when `renderTags` is removed.
592
- const indexType = renderValue ? 'data-item-index' : 'data-tag-index';
593
- const option = anchorEl.querySelector(`[${indexType}="${nextFocus}"]`);
611
+ const option = anchorEl.querySelector(`[data-item-index="${nextFocus}"]`);
594
612
 
595
613
  // Same logic as MenuList.js
596
614
  if (!option || !option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true') {
@@ -1047,11 +1065,7 @@ function useAutocomplete(props) {
1047
1065
  ...(multiple && {
1048
1066
  key: index
1049
1067
  }),
1050
- ...(renderValue ? {
1051
- 'data-item-index': index
1052
- } : {
1053
- 'data-tag-index': index
1054
- }),
1068
+ 'data-item-index': index,
1055
1069
  tabIndex: -1,
1056
1070
  ...(!readOnly && {
1057
1071
  onDelete: multiple ? handleItemDelete(index) : handleSingleItemDelete
@@ -1062,17 +1076,6 @@ function useAutocomplete(props) {
1062
1076
  type: 'button',
1063
1077
  onClick: handlePopupIndicator
1064
1078
  }),
1065
- // deprecated
1066
- getTagProps: ({
1067
- index
1068
- }) => ({
1069
- key: index,
1070
- 'data-tag-index': index,
1071
- tabIndex: -1,
1072
- ...(!readOnly && {
1073
- onDelete: handleItemDelete(index)
1074
- })
1075
- }),
1076
1079
  getListboxProps: () => ({
1077
1080
  role: 'listbox',
1078
1081
  id: `${id}-listbox`,
@@ -1088,7 +1091,7 @@ function useAutocomplete(props) {
1088
1091
  index,
1089
1092
  option
1090
1093
  }) => {
1091
- const selected = (multiple ? value : [value]).some(value2 => value2 != null && isOptionEqualToValue(option, value2));
1094
+ const selected = isOptionSelected(option);
1092
1095
  const disabled = getOptionDisabled ? getOptionDisabled(option) : false;
1093
1096
  return {
1094
1097
  key: getOptionKey?.(option) ?? getOptionLabel(option),
@@ -1113,8 +1116,6 @@ function useAutocomplete(props) {
1113
1116
  anchorEl,
1114
1117
  setAnchorEl,
1115
1118
  focusedItem,
1116
- // deprecated
1117
- focusedTag: focusedItem,
1118
1119
  groupedOptions
1119
1120
  };
1120
1121
  }
@@ -56,6 +56,7 @@ const defaultFilterOptions = createFilterOptions();
56
56
  // Number of options to jump in list box when `Page Up` and `Page Down` keys are used.
57
57
  const pageSize = 5;
58
58
  const defaultIsActiveElementInListbox = listboxRef => listboxRef.current !== null && listboxRef.current.parentElement?.contains(document.activeElement);
59
+ const defaultIsOptionEqualToValue = (option, value) => option === value;
59
60
  const MULTIPLE_DEFAULT_VALUE = [];
60
61
  function getInputValue(value, multiple, getOptionLabel, renderValue) {
61
62
  if (multiple || value == null || renderValue) {
@@ -94,7 +95,7 @@ function useAutocomplete(props) {
94
95
  id: idProp,
95
96
  includeInputInList = false,
96
97
  inputValue: inputValueProp,
97
- isOptionEqualToValue = (option, value) => option === value,
98
+ isOptionEqualToValue = defaultIsOptionEqualToValue,
98
99
  multiple = false,
99
100
  onChange,
100
101
  onClose,
@@ -172,8 +173,30 @@ function useAutocomplete(props) {
172
173
  const [inputPristine, setInputPristine] = React.useState(true);
173
174
  const inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value);
174
175
  const popupOpen = open && !readOnly;
176
+ const selectedValues = React.useMemo(() => {
177
+ if (multiple) {
178
+ return value;
179
+ }
180
+ if (value != null) {
181
+ return [value];
182
+ }
183
+ return [];
184
+ }, [multiple, value]);
185
+ const selectedValuesSet = React.useMemo(() => {
186
+ // Fast path for the default strict equality comparator to avoid O(n^2) option checks.
187
+ if (isOptionEqualToValue !== defaultIsOptionEqualToValue || selectedValues.length === 0) {
188
+ return null;
189
+ }
190
+ return new Set(selectedValues);
191
+ }, [isOptionEqualToValue, selectedValues]);
192
+ const isOptionSelected = React.useCallback(option => {
193
+ if (selectedValuesSet) {
194
+ return selectedValuesSet.has(option);
195
+ }
196
+ return selectedValues.some(value2 => value2 != null && isOptionEqualToValue(option, value2));
197
+ }, [isOptionEqualToValue, selectedValues, selectedValuesSet]);
175
198
  const filteredOptions = popupOpen ? filterOptions(options.filter(option => {
176
- if (filterSelectedOptions && (multiple ? value : [value]).some(value2 => value2 !== null && isOptionEqualToValue(option, value2))) {
199
+ if (filterSelectedOptions && isOptionSelected(option)) {
177
200
  return false;
178
201
  }
179
202
  return true;
@@ -206,9 +229,7 @@ function useAutocomplete(props) {
206
229
  if (itemToFocus === -1) {
207
230
  inputRef.current.focus();
208
231
  } else {
209
- // Using `data-tag-index` for deprecated `renderTags`. Remove when `renderTags` is gone.
210
- const indexType = renderValue ? 'data-item-index' : 'data-tag-index';
211
- anchorEl.querySelector(`[${indexType}="${itemToFocus}"]`).focus();
232
+ anchorEl.querySelector(`[data-item-index="${itemToFocus}"]`).focus();
212
233
  }
213
234
  });
214
235
 
@@ -579,10 +600,7 @@ function useAutocomplete(props) {
579
600
  if (direction === 'next' && nextFocus === value.length || direction === 'previous' && nextFocus === -1) {
580
601
  return -1;
581
602
  }
582
-
583
- // Using `data-tag-index` for deprecated `renderTags`. Remove when `renderTags` is removed.
584
- const indexType = renderValue ? 'data-item-index' : 'data-tag-index';
585
- const option = anchorEl.querySelector(`[${indexType}="${nextFocus}"]`);
603
+ const option = anchorEl.querySelector(`[data-item-index="${nextFocus}"]`);
586
604
 
587
605
  // Same logic as MenuList.js
588
606
  if (!option || !option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true') {
@@ -1039,11 +1057,7 @@ function useAutocomplete(props) {
1039
1057
  ...(multiple && {
1040
1058
  key: index
1041
1059
  }),
1042
- ...(renderValue ? {
1043
- 'data-item-index': index
1044
- } : {
1045
- 'data-tag-index': index
1046
- }),
1060
+ 'data-item-index': index,
1047
1061
  tabIndex: -1,
1048
1062
  ...(!readOnly && {
1049
1063
  onDelete: multiple ? handleItemDelete(index) : handleSingleItemDelete
@@ -1054,17 +1068,6 @@ function useAutocomplete(props) {
1054
1068
  type: 'button',
1055
1069
  onClick: handlePopupIndicator
1056
1070
  }),
1057
- // deprecated
1058
- getTagProps: ({
1059
- index
1060
- }) => ({
1061
- key: index,
1062
- 'data-tag-index': index,
1063
- tabIndex: -1,
1064
- ...(!readOnly && {
1065
- onDelete: handleItemDelete(index)
1066
- })
1067
- }),
1068
1071
  getListboxProps: () => ({
1069
1072
  role: 'listbox',
1070
1073
  id: `${id}-listbox`,
@@ -1080,7 +1083,7 @@ function useAutocomplete(props) {
1080
1083
  index,
1081
1084
  option
1082
1085
  }) => {
1083
- const selected = (multiple ? value : [value]).some(value2 => value2 != null && isOptionEqualToValue(option, value2));
1086
+ const selected = isOptionSelected(option);
1084
1087
  const disabled = getOptionDisabled ? getOptionDisabled(option) : false;
1085
1088
  return {
1086
1089
  key: getOptionKey?.(option) ?? getOptionLabel(option),
@@ -1105,8 +1108,6 @@ function useAutocomplete(props) {
1105
1108
  anchorEl,
1106
1109
  setAnchorEl,
1107
1110
  focusedItem,
1108
- // deprecated
1109
- focusedTag: focusedItem,
1110
1111
  groupedOptions
1111
1112
  };
1112
1113
  }
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 = "9.0.0-alpha.3";
7
+ const version = exports.version = "9.0.0-alpha.4";
8
8
  const major = exports.major = Number("9");
9
9
  const minor = exports.minor = Number("0");
10
10
  const patch = exports.patch = Number("0");
11
- const prerelease = exports.prerelease = "alpha.3";
11
+ const prerelease = exports.prerelease = "alpha.4";
12
12
  var _default = exports.default = version;
package/version/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- export const version = "9.0.0-alpha.3";
1
+ export const version = "9.0.0-alpha.4";
2
2
  export const major = Number("9");
3
3
  export const minor = Number("0");
4
4
  export const patch = Number("0");
5
- export const prerelease = "alpha.3";
5
+ export const prerelease = "alpha.4";
6
6
  export default version;
@@ -1,160 +0,0 @@
1
- import * as React from 'react';
2
- import { ResponsiveStyleValue, SxProps, SystemProps, Breakpoint, BreakpointOverrides } from '@mui/system';
3
- import { IfEquals } from '@mui/types';
4
- import { Theme } from "../styles/index.mjs";
5
- import { OverridableComponent, OverrideProps } from "../OverridableComponent/index.mjs";
6
- import { GridLegacyClasses } from "./gridLegacyClasses.mjs";
7
- export type GridLegacyDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';
8
- export type GridLegacySpacing = number | string;
9
- export type GridLegacyWrap = 'nowrap' | 'wrap' | 'wrap-reverse';
10
- export type GridLegacySize = 'auto' | number;
11
- export interface RegularBreakpoints {
12
- /**
13
- * If a number, it sets the number of columns the grid item uses.
14
- * It can't be greater than the total number of columns of the container (12 by default).
15
- * If 'auto', the grid item's width matches its content.
16
- * If false, the prop is ignored.
17
- * If true, the grid item's width grows to use the space available in the grid container.
18
- * The value is applied for the `lg` breakpoint and wider screens if not overridden.
19
- * @default false
20
- */
21
- lg?: boolean | GridLegacySize | undefined;
22
- /**
23
- * If a number, it sets the number of columns the grid item uses.
24
- * It can't be greater than the total number of columns of the container (12 by default).
25
- * If 'auto', the grid item's width matches its content.
26
- * If false, the prop is ignored.
27
- * If true, the grid item's width grows to use the space available in the grid container.
28
- * The value is applied for the `md` breakpoint and wider screens if not overridden.
29
- * @default false
30
- */
31
- md?: boolean | GridLegacySize | undefined;
32
- /**
33
- * If a number, it sets the number of columns the grid item uses.
34
- * It can't be greater than the total number of columns of the container (12 by default).
35
- * If 'auto', the grid item's width matches its content.
36
- * If false, the prop is ignored.
37
- * If true, the grid item's width grows to use the space available in the grid container.
38
- * The value is applied for the `sm` breakpoint and wider screens if not overridden.
39
- * @default false
40
- */
41
- sm?: boolean | GridLegacySize | undefined;
42
- /**
43
- * If a number, it sets the number of columns the grid item uses.
44
- * It can't be greater than the total number of columns of the container (12 by default).
45
- * If 'auto', the grid item's width matches its content.
46
- * If false, the prop is ignored.
47
- * If true, the grid item's width grows to use the space available in the grid container.
48
- * The value is applied for the `xl` breakpoint and wider screens if not overridden.
49
- * @default false
50
- */
51
- xl?: boolean | GridLegacySize | undefined;
52
- /**
53
- * If a number, it sets the number of columns the grid item uses.
54
- * It can't be greater than the total number of columns of the container (12 by default).
55
- * If 'auto', the grid item's width matches its content.
56
- * If false, the prop is ignored.
57
- * If true, the grid item's width grows to use the space available in the grid container.
58
- * The value is applied for all the screen sizes with the lowest priority.
59
- * @default false
60
- */
61
- xs?: boolean | GridLegacySize | undefined;
62
- }
63
- type CustomBreakpoints = Partial<Record<Breakpoint, boolean | GridLegacySize>>;
64
- interface BreakpointOverridesEmpty {}
65
- type Breakpoints = IfEquals<BreakpointOverrides, BreakpointOverridesEmpty, RegularBreakpoints, CustomBreakpoints>;
66
- export interface GridLegacyOwnProps extends SystemProps<Theme>, Breakpoints {
67
- /**
68
- * The content of the component.
69
- */
70
- children?: React.ReactNode;
71
- /**
72
- * Override or extend the styles applied to the component.
73
- */
74
- classes?: Partial<GridLegacyClasses> | undefined;
75
- /**
76
- * The number of columns.
77
- * @default 12
78
- */
79
- columns?: ResponsiveStyleValue<number> | undefined;
80
- /**
81
- * Defines the horizontal space between the type `item` components.
82
- * It overrides the value of the `spacing` prop.
83
- */
84
- columnSpacing?: ResponsiveStyleValue<GridLegacySpacing> | undefined;
85
- /**
86
- * If `true`, the component will have the flex *container* behavior.
87
- * You should be wrapping *items* with a *container*.
88
- * @default false
89
- */
90
- container?: boolean | undefined;
91
- /**
92
- * Defines the `flex-direction` style property.
93
- * It is applied for all screen sizes.
94
- * @default 'row'
95
- */
96
- direction?: ResponsiveStyleValue<GridLegacyDirection> | undefined;
97
- /**
98
- * If `true`, the component will have the flex *item* behavior.
99
- * You should be wrapping *items* with a *container*.
100
- * @default false
101
- */
102
- item?: boolean | undefined;
103
- /**
104
- * Defines the vertical space between the type `item` components.
105
- * It overrides the value of the `spacing` prop.
106
- */
107
- rowSpacing?: ResponsiveStyleValue<GridLegacySpacing> | undefined;
108
- /**
109
- * Defines the space between the type `item` components.
110
- * It can only be used on a type `container` component.
111
- * @default 0
112
- */
113
- spacing?: ResponsiveStyleValue<GridLegacySpacing> | undefined;
114
- /**
115
- * The system prop that allows defining system overrides as well as additional CSS styles.
116
- */
117
- sx?: SxProps<Theme> | undefined;
118
- /**
119
- * Defines the `flex-wrap` style property.
120
- * It's applied for all screen sizes.
121
- * @default 'wrap'
122
- */
123
- wrap?: GridLegacyWrap | undefined;
124
- /**
125
- * If `true`, it sets `min-width: 0` on the item.
126
- * Refer to the limitations section of the documentation to better understand the use case.
127
- * @default false
128
- */
129
- zeroMinWidth?: boolean | undefined;
130
- }
131
-
132
- /**
133
- * @deprecated Use the [`Grid`](https://mui.com/material-ui/react-grid/) component instead.
134
- */
135
- export interface GridLegacyTypeMap<AdditionalProps = {}, RootComponent extends React.ElementType = 'div'> {
136
- props: AdditionalProps & GridLegacyOwnProps;
137
- defaultComponent: RootComponent;
138
- }
139
-
140
- /**
141
- *
142
- * Demos:
143
- *
144
- * - [GridLegacy](https://next.mui.com/material-ui/react-grid-legacy/)
145
- *
146
- * API:
147
- *
148
- * - [GridLegacy API](https://next.mui.com/material-ui/api/grid-legacy/)
149
- *
150
- * @deprecated Use the [`Grid`](https://mui.com/material-ui/react-grid/) component instead.
151
- */
152
- declare const GridLegacy: OverridableComponent<GridLegacyTypeMap>;
153
-
154
- /**
155
- * @deprecated Use the [`Grid`](https://mui.com/material-ui/react-grid/) component instead.
156
- */
157
- export type GridLegacyProps<RootComponent extends React.ElementType = GridLegacyTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<GridLegacyTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
158
- component?: React.ElementType | undefined;
159
- };
160
- export default GridLegacy;
@@ -1,160 +0,0 @@
1
- import * as React from 'react';
2
- import { ResponsiveStyleValue, SxProps, SystemProps, Breakpoint, BreakpointOverrides } from '@mui/system';
3
- import { IfEquals } from '@mui/types';
4
- import { Theme } from "../styles/index.js";
5
- import { OverridableComponent, OverrideProps } from "../OverridableComponent/index.js";
6
- import { GridLegacyClasses } from "./gridLegacyClasses.js";
7
- export type GridLegacyDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';
8
- export type GridLegacySpacing = number | string;
9
- export type GridLegacyWrap = 'nowrap' | 'wrap' | 'wrap-reverse';
10
- export type GridLegacySize = 'auto' | number;
11
- export interface RegularBreakpoints {
12
- /**
13
- * If a number, it sets the number of columns the grid item uses.
14
- * It can't be greater than the total number of columns of the container (12 by default).
15
- * If 'auto', the grid item's width matches its content.
16
- * If false, the prop is ignored.
17
- * If true, the grid item's width grows to use the space available in the grid container.
18
- * The value is applied for the `lg` breakpoint and wider screens if not overridden.
19
- * @default false
20
- */
21
- lg?: boolean | GridLegacySize | undefined;
22
- /**
23
- * If a number, it sets the number of columns the grid item uses.
24
- * It can't be greater than the total number of columns of the container (12 by default).
25
- * If 'auto', the grid item's width matches its content.
26
- * If false, the prop is ignored.
27
- * If true, the grid item's width grows to use the space available in the grid container.
28
- * The value is applied for the `md` breakpoint and wider screens if not overridden.
29
- * @default false
30
- */
31
- md?: boolean | GridLegacySize | undefined;
32
- /**
33
- * If a number, it sets the number of columns the grid item uses.
34
- * It can't be greater than the total number of columns of the container (12 by default).
35
- * If 'auto', the grid item's width matches its content.
36
- * If false, the prop is ignored.
37
- * If true, the grid item's width grows to use the space available in the grid container.
38
- * The value is applied for the `sm` breakpoint and wider screens if not overridden.
39
- * @default false
40
- */
41
- sm?: boolean | GridLegacySize | undefined;
42
- /**
43
- * If a number, it sets the number of columns the grid item uses.
44
- * It can't be greater than the total number of columns of the container (12 by default).
45
- * If 'auto', the grid item's width matches its content.
46
- * If false, the prop is ignored.
47
- * If true, the grid item's width grows to use the space available in the grid container.
48
- * The value is applied for the `xl` breakpoint and wider screens if not overridden.
49
- * @default false
50
- */
51
- xl?: boolean | GridLegacySize | undefined;
52
- /**
53
- * If a number, it sets the number of columns the grid item uses.
54
- * It can't be greater than the total number of columns of the container (12 by default).
55
- * If 'auto', the grid item's width matches its content.
56
- * If false, the prop is ignored.
57
- * If true, the grid item's width grows to use the space available in the grid container.
58
- * The value is applied for all the screen sizes with the lowest priority.
59
- * @default false
60
- */
61
- xs?: boolean | GridLegacySize | undefined;
62
- }
63
- type CustomBreakpoints = Partial<Record<Breakpoint, boolean | GridLegacySize>>;
64
- interface BreakpointOverridesEmpty {}
65
- type Breakpoints = IfEquals<BreakpointOverrides, BreakpointOverridesEmpty, RegularBreakpoints, CustomBreakpoints>;
66
- export interface GridLegacyOwnProps extends SystemProps<Theme>, Breakpoints {
67
- /**
68
- * The content of the component.
69
- */
70
- children?: React.ReactNode;
71
- /**
72
- * Override or extend the styles applied to the component.
73
- */
74
- classes?: Partial<GridLegacyClasses> | undefined;
75
- /**
76
- * The number of columns.
77
- * @default 12
78
- */
79
- columns?: ResponsiveStyleValue<number> | undefined;
80
- /**
81
- * Defines the horizontal space between the type `item` components.
82
- * It overrides the value of the `spacing` prop.
83
- */
84
- columnSpacing?: ResponsiveStyleValue<GridLegacySpacing> | undefined;
85
- /**
86
- * If `true`, the component will have the flex *container* behavior.
87
- * You should be wrapping *items* with a *container*.
88
- * @default false
89
- */
90
- container?: boolean | undefined;
91
- /**
92
- * Defines the `flex-direction` style property.
93
- * It is applied for all screen sizes.
94
- * @default 'row'
95
- */
96
- direction?: ResponsiveStyleValue<GridLegacyDirection> | undefined;
97
- /**
98
- * If `true`, the component will have the flex *item* behavior.
99
- * You should be wrapping *items* with a *container*.
100
- * @default false
101
- */
102
- item?: boolean | undefined;
103
- /**
104
- * Defines the vertical space between the type `item` components.
105
- * It overrides the value of the `spacing` prop.
106
- */
107
- rowSpacing?: ResponsiveStyleValue<GridLegacySpacing> | undefined;
108
- /**
109
- * Defines the space between the type `item` components.
110
- * It can only be used on a type `container` component.
111
- * @default 0
112
- */
113
- spacing?: ResponsiveStyleValue<GridLegacySpacing> | undefined;
114
- /**
115
- * The system prop that allows defining system overrides as well as additional CSS styles.
116
- */
117
- sx?: SxProps<Theme> | undefined;
118
- /**
119
- * Defines the `flex-wrap` style property.
120
- * It's applied for all screen sizes.
121
- * @default 'wrap'
122
- */
123
- wrap?: GridLegacyWrap | undefined;
124
- /**
125
- * If `true`, it sets `min-width: 0` on the item.
126
- * Refer to the limitations section of the documentation to better understand the use case.
127
- * @default false
128
- */
129
- zeroMinWidth?: boolean | undefined;
130
- }
131
-
132
- /**
133
- * @deprecated Use the [`Grid`](https://mui.com/material-ui/react-grid/) component instead.
134
- */
135
- export interface GridLegacyTypeMap<AdditionalProps = {}, RootComponent extends React.ElementType = 'div'> {
136
- props: AdditionalProps & GridLegacyOwnProps;
137
- defaultComponent: RootComponent;
138
- }
139
-
140
- /**
141
- *
142
- * Demos:
143
- *
144
- * - [GridLegacy](https://next.mui.com/material-ui/react-grid-legacy/)
145
- *
146
- * API:
147
- *
148
- * - [GridLegacy API](https://next.mui.com/material-ui/api/grid-legacy/)
149
- *
150
- * @deprecated Use the [`Grid`](https://mui.com/material-ui/react-grid/) component instead.
151
- */
152
- declare const GridLegacy: OverridableComponent<GridLegacyTypeMap>;
153
-
154
- /**
155
- * @deprecated Use the [`Grid`](https://mui.com/material-ui/react-grid/) component instead.
156
- */
157
- export type GridLegacyProps<RootComponent extends React.ElementType = GridLegacyTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<GridLegacyTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
158
- component?: React.ElementType | undefined;
159
- };
160
- export default GridLegacy;