@react-md/core 6.4.0 → 6.5.1

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 (431) hide show
  1. package/dist/_a11y.scss +3 -1
  2. package/dist/_box-shadows.scss +20 -12
  3. package/dist/_core.scss +1 -1
  4. package/dist/_utils.scss +26 -11
  5. package/dist/app-bar/_app-bar.scss +3 -3
  6. package/dist/autocomplete/AutocompleteChip.js +2 -2
  7. package/dist/autocomplete/AutocompleteChip.js.map +1 -1
  8. package/dist/autocomplete/AutocompleteListboxChildren.js +1 -1
  9. package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -1
  10. package/dist/autocomplete/_autocomplete.scss +20 -16
  11. package/dist/autocomplete/useAutocomplete.js +4 -4
  12. package/dist/autocomplete/useAutocomplete.js.map +1 -1
  13. package/dist/autocomplete/utils.js +3 -3
  14. package/dist/autocomplete/utils.js.map +1 -1
  15. package/dist/avatar/_avatar.scss +2 -1
  16. package/dist/box/styles.js +2 -2
  17. package/dist/box/styles.js.map +1 -1
  18. package/dist/button/AsyncButton.js +1 -1
  19. package/dist/button/AsyncButton.js.map +1 -1
  20. package/dist/button/_button.scss +9 -5
  21. package/dist/card/_card.scss +6 -6
  22. package/dist/chip/Chip.js +1 -1
  23. package/dist/chip/Chip.js.map +1 -1
  24. package/dist/chip/_chip.scss +6 -6
  25. package/dist/cssUtils.d.ts +11 -6
  26. package/dist/cssUtils.js.map +1 -1
  27. package/dist/datetime/useTimeField.js +1 -1
  28. package/dist/datetime/useTimeField.js.map +1 -1
  29. package/dist/delegateEvent.js +9 -9
  30. package/dist/delegateEvent.js.map +1 -1
  31. package/dist/dialog/_dialog.scss +6 -6
  32. package/dist/divider/_divider.scss +6 -2
  33. package/dist/draggable/useDraggable.js +4 -4
  34. package/dist/draggable/useDraggable.js.map +1 -1
  35. package/dist/draggable/utils.js +1 -1
  36. package/dist/draggable/utils.js.map +1 -1
  37. package/dist/expansion-panel/ExpansionPanel.js +1 -1
  38. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  39. package/dist/expansion-panel/useExpansionPanels.js +1 -1
  40. package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
  41. package/dist/files/FileInput.js +1 -1
  42. package/dist/files/FileInput.js.map +1 -1
  43. package/dist/files/createAcceptFromExtensions.d.ts +5 -0
  44. package/dist/files/createAcceptFromExtensions.js +15 -0
  45. package/dist/files/createAcceptFromExtensions.js.map +1 -0
  46. package/dist/files/useFileUpload.js +45 -41
  47. package/dist/files/useFileUpload.js.map +1 -1
  48. package/dist/files/utils.js +14 -10
  49. package/dist/files/utils.js.map +1 -1
  50. package/dist/files/validation.js +7 -8
  51. package/dist/files/validation.js.map +1 -1
  52. package/dist/focus/useFocusContainer.js +1 -1
  53. package/dist/focus/useFocusContainer.js.map +1 -1
  54. package/dist/focus/utils.js +12 -7
  55. package/dist/focus/utils.js.map +1 -1
  56. package/dist/form/InputToggleIcon.js +5 -1
  57. package/dist/form/InputToggleIcon.js.map +1 -1
  58. package/dist/form/NativeSelect.js +1 -1
  59. package/dist/form/NativeSelect.js.map +1 -1
  60. package/dist/form/Select.d.ts +24 -0
  61. package/dist/form/Select.js +19 -8
  62. package/dist/form/Select.js.map +1 -1
  63. package/dist/form/SelectedOption.d.ts +1 -2
  64. package/dist/form/SelectedOption.js +2 -2
  65. package/dist/form/SelectedOption.js.map +1 -1
  66. package/dist/form/_input-toggle.scss +6 -5
  67. package/dist/form/_label.scss +2 -2
  68. package/dist/form/_legend.scss +22 -13
  69. package/dist/form/_slider.scss +7 -5
  70. package/dist/form/_switch.scss +7 -5
  71. package/dist/form/_text-field.scss +13 -11
  72. package/dist/form/formConfig.js +1 -1
  73. package/dist/form/formConfig.js.map +1 -1
  74. package/dist/form/inputToggleStyles.js +7 -1
  75. package/dist/form/inputToggleStyles.js.map +1 -1
  76. package/dist/form/legendStyles.d.ts +1 -1
  77. package/dist/form/legendStyles.js.map +1 -1
  78. package/dist/form/selectUtils.js +2 -2
  79. package/dist/form/selectUtils.js.map +1 -1
  80. package/dist/form/useCombobox.js +1 -0
  81. package/dist/form/useCombobox.js.map +1 -1
  82. package/dist/form/useFormReset.js +2 -2
  83. package/dist/form/useFormReset.js.map +1 -1
  84. package/dist/form/useNumberField.js +1 -1
  85. package/dist/form/useNumberField.js.map +1 -1
  86. package/dist/form/useResizingTextArea.js +4 -4
  87. package/dist/form/useResizingTextArea.js.map +1 -1
  88. package/dist/form/useSelectCombobox.js +1 -1
  89. package/dist/form/useSelectCombobox.js.map +1 -1
  90. package/dist/form/validation.js +1 -1
  91. package/dist/form/validation.js.map +1 -1
  92. package/dist/hoverMode/useHoverMode.js +8 -8
  93. package/dist/hoverMode/useHoverMode.js.map +1 -1
  94. package/dist/hoverMode/useHoverModeProvider.js +3 -3
  95. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  96. package/dist/icon/config.js +3 -3
  97. package/dist/icon/config.js.map +1 -1
  98. package/dist/icon/materialConfig.js +1 -1
  99. package/dist/icon/materialConfig.js.map +1 -1
  100. package/dist/interaction/UserInteractionModeProvider.js +11 -10
  101. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  102. package/dist/interaction/_interaction.scss +5 -3
  103. package/dist/interaction/utils.js +7 -3
  104. package/dist/interaction/utils.js.map +1 -1
  105. package/dist/layout/useExpandableLayout.js +3 -4
  106. package/dist/layout/useExpandableLayout.js.map +1 -1
  107. package/dist/layout/useMainTabIndex.js +1 -1
  108. package/dist/layout/useMainTabIndex.js.map +1 -1
  109. package/dist/list/ListItem.js +1 -1
  110. package/dist/list/ListItem.js.map +1 -1
  111. package/dist/media-queries/AppSizeProvider.js +1 -1
  112. package/dist/media-queries/AppSizeProvider.js.map +1 -1
  113. package/dist/media-queries/config.js +2 -2
  114. package/dist/media-queries/config.js.map +1 -1
  115. package/dist/media-queries/useMediaQuery.js +3 -3
  116. package/dist/media-queries/useMediaQuery.js.map +1 -1
  117. package/dist/menu/Menu.js +4 -4
  118. package/dist/menu/Menu.js.map +1 -1
  119. package/dist/menu/MenuItemButton.js +1 -1
  120. package/dist/menu/MenuItemButton.js.map +1 -1
  121. package/dist/menu/MenuItemFileInput.js +1 -1
  122. package/dist/menu/MenuItemFileInput.js.map +1 -1
  123. package/dist/menu/MenuWidget.js +2 -2
  124. package/dist/menu/MenuWidget.js.map +1 -1
  125. package/dist/movement/findMatchIndex.js +2 -2
  126. package/dist/movement/findMatchIndex.js.map +1 -1
  127. package/dist/movement/useKeyboardMovementProvider.js +2 -2
  128. package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
  129. package/dist/movement/utils.js +12 -10
  130. package/dist/movement/utils.js.map +1 -1
  131. package/dist/navigation/getTableOfContentsHeadings.js +4 -3
  132. package/dist/navigation/getTableOfContentsHeadings.js.map +1 -1
  133. package/dist/navigation/useActiveHeadingId.js +9 -9
  134. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  135. package/dist/navigation/useTableOfContentsHeadings.js +1 -1
  136. package/dist/navigation/useTableOfContentsHeadings.js.map +1 -1
  137. package/dist/navigation/utils.js +6 -5
  138. package/dist/navigation/utils.js.map +1 -1
  139. package/dist/portal/PortalContainerProvider.js +5 -3
  140. package/dist/portal/PortalContainerProvider.js.map +1 -1
  141. package/dist/positioning/getFixedPosition.js +2 -4
  142. package/dist/positioning/getFixedPosition.js.map +1 -1
  143. package/dist/positioning/useFixedPositioning.js +2 -2
  144. package/dist/positioning/useFixedPositioning.js.map +1 -1
  145. package/dist/positioning/utils.js +3 -3
  146. package/dist/positioning/utils.js.map +1 -1
  147. package/dist/scroll/getScrollbarWidth.js +4 -4
  148. package/dist/scroll/getScrollbarWidth.js.map +1 -1
  149. package/dist/searching/fuzzy.js +3 -2
  150. package/dist/searching/fuzzy.js.map +1 -1
  151. package/dist/searching/toSearchQuery.js +1 -1
  152. package/dist/searching/toSearchQuery.js.map +1 -1
  153. package/dist/searching/utils.js +1 -1
  154. package/dist/searching/utils.js.map +1 -1
  155. package/dist/snackbar/Toast.js +1 -1
  156. package/dist/snackbar/Toast.js.map +1 -1
  157. package/dist/snackbar/ToastContent.js +2 -2
  158. package/dist/snackbar/ToastContent.js.map +1 -1
  159. package/dist/snackbar/ToastManager.d.ts +1 -1
  160. package/dist/snackbar/ToastManager.js +11 -11
  161. package/dist/snackbar/ToastManager.js.map +1 -1
  162. package/dist/snackbar/_snackbar.scss +3 -3
  163. package/dist/spinbutton/useSpinButton.js +1 -1
  164. package/dist/spinbutton/useSpinButton.js.map +1 -1
  165. package/dist/spinbutton/utils/deselectNode.js +1 -1
  166. package/dist/spinbutton/utils/deselectNode.js.map +1 -1
  167. package/dist/spinbutton/utils/resolveInputEvent.js +1 -1
  168. package/dist/spinbutton/utils/resolveInputEvent.js.map +1 -1
  169. package/dist/spinbutton/utils/selectNode.js +1 -1
  170. package/dist/spinbutton/utils/selectNode.js.map +1 -1
  171. package/dist/storage/useStorage.js +8 -3
  172. package/dist/storage/useStorage.js.map +1 -1
  173. package/dist/table/useStickyTableSection.js +1 -1
  174. package/dist/table/useStickyTableSection.js.map +1 -1
  175. package/dist/tabs/TabList.js +2 -2
  176. package/dist/tabs/TabList.js.map +1 -1
  177. package/dist/tabs/_tabs.scss +5 -6
  178. package/dist/tabs/useMaxTabPanelHeight.js +4 -3
  179. package/dist/tabs/useMaxTabPanelHeight.js.map +1 -1
  180. package/dist/tabs/useTabList.js +1 -1
  181. package/dist/tabs/useTabList.js.map +1 -1
  182. package/dist/test-utils/jest-globals/match-media.d.ts +1 -1
  183. package/dist/test-utils/jest-globals/match-media.js +1 -1
  184. package/dist/test-utils/jest-globals/match-media.js.map +1 -1
  185. package/dist/test-utils/jest-globals/timers.js +1 -1
  186. package/dist/test-utils/jest-globals/timers.js.map +1 -1
  187. package/dist/test-utils/jest-globals/uploadMenuItemFileInput.js +1 -1
  188. package/dist/test-utils/jest-globals/uploadMenuItemFileInput.js.map +1 -1
  189. package/dist/test-utils/mocks/ResizeObserver.js +2 -2
  190. package/dist/test-utils/mocks/ResizeObserver.js.map +1 -1
  191. package/dist/test-utils/polyfills/IntersectionObserver.js +2 -2
  192. package/dist/test-utils/polyfills/IntersectionObserver.js.map +1 -1
  193. package/dist/test-utils/polyfills/ResizeObserver.js +2 -2
  194. package/dist/test-utils/polyfills/ResizeObserver.js.map +1 -1
  195. package/dist/test-utils/polyfills/TextDecoder.js +2 -2
  196. package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
  197. package/dist/test-utils/polyfills/TextEncoder.js +2 -2
  198. package/dist/test-utils/polyfills/TextEncoder.js.map +1 -1
  199. package/dist/test-utils/polyfills/matchMedia.js +2 -2
  200. package/dist/test-utils/polyfills/matchMedia.js.map +1 -1
  201. package/dist/test-utils/polyfills/offsetParent.js +2 -2
  202. package/dist/test-utils/polyfills/offsetParent.js.map +1 -1
  203. package/dist/test-utils/polyfills/scrollIntoView.js +1 -1
  204. package/dist/test-utils/polyfills/scrollIntoView.js.map +1 -1
  205. package/dist/test-utils/queries/select.js +2 -2
  206. package/dist/test-utils/queries/select.js.map +1 -1
  207. package/dist/test-utils/queries/slider.js +1 -1
  208. package/dist/test-utils/queries/slider.js.map +1 -1
  209. package/dist/test-utils/utils/createFileList.js +2 -0
  210. package/dist/test-utils/utils/createFileList.js.map +1 -1
  211. package/dist/test-utils/utils/createMatchMediaSpy.d.ts +1 -1
  212. package/dist/test-utils/utils/createMatchMediaSpy.js +3 -3
  213. package/dist/test-utils/utils/createMatchMediaSpy.js.map +1 -1
  214. package/dist/test-utils/vitest/match-media.d.ts +1 -1
  215. package/dist/test-utils/vitest/match-media.js +1 -1
  216. package/dist/test-utils/vitest/match-media.js.map +1 -1
  217. package/dist/test-utils/vitest/timers.js +1 -1
  218. package/dist/test-utils/vitest/timers.js.map +1 -1
  219. package/dist/test-utils/vitest/uploadMenuItemFileInput.js +1 -1
  220. package/dist/test-utils/vitest/uploadMenuItemFileInput.js.map +1 -1
  221. package/dist/theme/ThemeProvider.js +2 -2
  222. package/dist/theme/ThemeProvider.js.map +1 -1
  223. package/dist/theme/_a11y.scss +3 -1
  224. package/dist/theme/_theme.scss +16 -12
  225. package/dist/theme/getDerivedTheme.js +1 -1
  226. package/dist/theme/getDerivedTheme.js.map +1 -1
  227. package/dist/theme/useCSSVariables.js +5 -5
  228. package/dist/theme/useCSSVariables.js.map +1 -1
  229. package/dist/theme/useColorSchemeMetaTag.js +2 -2
  230. package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
  231. package/dist/theme/useInlineCSSVariables.js +4 -3
  232. package/dist/theme/useInlineCSSVariables.js.map +1 -1
  233. package/dist/theme/utils.js +8 -8
  234. package/dist/theme/utils.js.map +1 -1
  235. package/dist/tooltip/useTooltip.js +7 -7
  236. package/dist/tooltip/useTooltip.js.map +1 -1
  237. package/dist/tooltip/useTooltipPosition.js +1 -1
  238. package/dist/tooltip/useTooltipPosition.js.map +1 -1
  239. package/dist/transition/useCarousel.js +2 -2
  240. package/dist/transition/useCarousel.js.map +1 -1
  241. package/dist/transition/useCollapseTransition.js +1 -1
  242. package/dist/transition/useCollapseTransition.js.map +1 -1
  243. package/dist/transition/useSkeletonPlaceholder.js +4 -4
  244. package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
  245. package/dist/transition/useTransition.js +2 -2
  246. package/dist/transition/useTransition.js.map +1 -1
  247. package/dist/transition/utils.js +5 -5
  248. package/dist/transition/utils.js.map +1 -1
  249. package/dist/tree/TreeItem.js +1 -1
  250. package/dist/tree/TreeItem.js.map +1 -1
  251. package/dist/tree/useTreeItems.js +7 -5
  252. package/dist/tree/useTreeItems.js.map +1 -1
  253. package/dist/tree/useTreeMovement.js +1 -1
  254. package/dist/tree/useTreeMovement.js.map +1 -1
  255. package/dist/tree/utils.js +6 -9
  256. package/dist/tree/utils.js.map +1 -1
  257. package/dist/typography/HighlightText.js +2 -1
  258. package/dist/typography/HighlightText.js.map +1 -1
  259. package/dist/typography/SrOnly.js +7 -1
  260. package/dist/typography/SrOnly.js.map +1 -1
  261. package/dist/useDebouncedFunction.js +4 -4
  262. package/dist/useDebouncedFunction.js.map +1 -1
  263. package/dist/useDropzone.js +9 -9
  264. package/dist/useDropzone.js.map +1 -1
  265. package/dist/useEnsuredState.js +5 -5
  266. package/dist/useEnsuredState.js.map +1 -1
  267. package/dist/useIntersectionObserver.js +3 -3
  268. package/dist/useIntersectionObserver.js.map +1 -1
  269. package/dist/useIsomorphicLayoutEffect.js +1 -1
  270. package/dist/useIsomorphicLayoutEffect.js.map +1 -1
  271. package/dist/useOrientation.js +1 -1
  272. package/dist/useOrientation.js.map +1 -1
  273. package/dist/useReadonlySet.js +1 -1
  274. package/dist/useReadonlySet.js.map +1 -1
  275. package/dist/useResizeListener.js +2 -2
  276. package/dist/useResizeListener.js.map +1 -1
  277. package/dist/useResizeObserver.js +3 -4
  278. package/dist/useResizeObserver.js.map +1 -1
  279. package/dist/useThrottledFunction.js +3 -3
  280. package/dist/useThrottledFunction.js.map +1 -1
  281. package/dist/useWindowSize.js +1 -1
  282. package/dist/useWindowSize.js.map +1 -1
  283. package/dist/utils/alphaNumericSort.js +3 -1
  284. package/dist/utils/alphaNumericSort.js.map +1 -1
  285. package/dist/utils/bem.js +9 -12
  286. package/dist/utils/bem.js.map +1 -1
  287. package/dist/utils/getNumberOfDigits.js +1 -0
  288. package/dist/utils/getNumberOfDigits.js.map +1 -1
  289. package/dist/utils/getRangeDefaultValue.js +1 -1
  290. package/dist/utils/getRangeDefaultValue.js.map +1 -1
  291. package/dist/utils/nearest.js +2 -2
  292. package/dist/utils/nearest.js.map +1 -1
  293. package/dist/utils/parseCssLengthUnit.js +3 -3
  294. package/dist/utils/parseCssLengthUnit.js.map +1 -1
  295. package/dist/utils/trigonometry.js +1 -1
  296. package/dist/utils/trigonometry.js.map +1 -1
  297. package/dist/window-splitter/_window-splitter.scss +15 -17
  298. package/package.json +9 -7
  299. package/src/autocomplete/AutocompleteChip.tsx +2 -2
  300. package/src/autocomplete/AutocompleteListboxChildren.tsx +1 -1
  301. package/src/autocomplete/useAutocomplete.ts +4 -4
  302. package/src/autocomplete/utils.ts +3 -3
  303. package/src/box/styles.ts +2 -2
  304. package/src/button/AsyncButton.tsx +1 -3
  305. package/src/chip/Chip.tsx +1 -2
  306. package/src/cssUtils.ts +12 -6
  307. package/src/datetime/useTimeField.ts +1 -1
  308. package/src/delegateEvent.ts +9 -9
  309. package/src/draggable/useDraggable.ts +4 -4
  310. package/src/draggable/utils.ts +1 -1
  311. package/src/expansion-panel/ExpansionPanel.tsx +1 -1
  312. package/src/expansion-panel/useExpansionPanels.ts +1 -1
  313. package/src/files/FileInput.tsx +1 -1
  314. package/src/files/createAcceptFromExtensions.ts +18 -0
  315. package/src/files/useFileUpload.ts +36 -37
  316. package/src/files/utils.ts +15 -11
  317. package/src/files/validation.ts +7 -9
  318. package/src/focus/useFocusContainer.ts +1 -1
  319. package/src/focus/utils.ts +11 -6
  320. package/src/form/InputToggleIcon.tsx +5 -5
  321. package/src/form/NativeSelect.tsx +1 -1
  322. package/src/form/Select.tsx +58 -7
  323. package/src/form/SelectedOption.tsx +2 -4
  324. package/src/form/formConfig.ts +1 -1
  325. package/src/form/inputToggleStyles.ts +9 -4
  326. package/src/form/legendStyles.ts +1 -1
  327. package/src/form/selectUtils.ts +2 -2
  328. package/src/form/useCombobox.ts +1 -0
  329. package/src/form/useFormReset.ts +2 -2
  330. package/src/form/useNumberField.ts +1 -1
  331. package/src/form/useResizingTextArea.ts +5 -5
  332. package/src/form/useSelectCombobox.ts +1 -4
  333. package/src/form/validation.ts +1 -1
  334. package/src/hoverMode/useHoverMode.ts +9 -9
  335. package/src/hoverMode/useHoverModeProvider.ts +4 -4
  336. package/src/icon/config.tsx +3 -3
  337. package/src/icon/materialConfig.ts +1 -1
  338. package/src/interaction/UserInteractionModeProvider.tsx +11 -10
  339. package/src/interaction/utils.ts +3 -3
  340. package/src/layout/useExpandableLayout.ts +3 -4
  341. package/src/layout/useMainTabIndex.ts +1 -1
  342. package/src/list/ListItem.tsx +1 -1
  343. package/src/media-queries/AppSizeProvider.tsx +1 -1
  344. package/src/media-queries/config.ts +2 -2
  345. package/src/media-queries/useMediaQuery.ts +3 -3
  346. package/src/menu/Menu.tsx +4 -4
  347. package/src/menu/MenuItemButton.tsx +1 -1
  348. package/src/menu/MenuItemFileInput.tsx +1 -1
  349. package/src/menu/MenuWidget.tsx +6 -4
  350. package/src/movement/findMatchIndex.ts +2 -2
  351. package/src/movement/useKeyboardMovementProvider.ts +2 -2
  352. package/src/movement/utils.ts +15 -14
  353. package/src/navigation/getTableOfContentsHeadings.ts +4 -3
  354. package/src/navigation/useActiveHeadingId.ts +8 -8
  355. package/src/navigation/useTableOfContentsHeadings.ts +1 -1
  356. package/src/navigation/utils.ts +6 -5
  357. package/src/portal/PortalContainerProvider.tsx +5 -3
  358. package/src/positioning/getFixedPosition.ts +9 -6
  359. package/src/positioning/useFixedPositioning.ts +2 -2
  360. package/src/positioning/utils.ts +3 -3
  361. package/src/scroll/getScrollbarWidth.ts +4 -4
  362. package/src/searching/fuzzy.ts +7 -3
  363. package/src/searching/toSearchQuery.ts +1 -1
  364. package/src/searching/utils.ts +1 -1
  365. package/src/snackbar/Toast.tsx +1 -1
  366. package/src/snackbar/ToastContent.tsx +2 -2
  367. package/src/snackbar/ToastManager.ts +11 -12
  368. package/src/spinbutton/useSpinButton.ts +1 -1
  369. package/src/spinbutton/utils/deselectNode.ts +1 -1
  370. package/src/spinbutton/utils/resolveInputEvent.ts +1 -1
  371. package/src/spinbutton/utils/selectNode.ts +1 -1
  372. package/src/storage/useStorage.ts +7 -2
  373. package/src/table/useStickyTableSection.tsx +1 -1
  374. package/src/tabs/TabList.tsx +2 -2
  375. package/src/tabs/useMaxTabPanelHeight.ts +6 -3
  376. package/src/tabs/useTabList.ts +2 -2
  377. package/src/test-utils/jest-globals/match-media.ts +5 -2
  378. package/src/test-utils/jest-globals/timers.ts +1 -1
  379. package/src/test-utils/jest-globals/uploadMenuItemFileInput.ts +1 -1
  380. package/src/test-utils/mocks/ResizeObserver.ts +2 -2
  381. package/src/test-utils/polyfills/IntersectionObserver.ts +2 -2
  382. package/src/test-utils/polyfills/ResizeObserver.ts +2 -2
  383. package/src/test-utils/polyfills/TextDecoder.ts +2 -2
  384. package/src/test-utils/polyfills/TextEncoder.ts +2 -2
  385. package/src/test-utils/polyfills/matchMedia.ts +5 -2
  386. package/src/test-utils/polyfills/offsetParent.ts +2 -2
  387. package/src/test-utils/polyfills/scrollIntoView.ts +1 -1
  388. package/src/test-utils/queries/select.ts +2 -2
  389. package/src/test-utils/queries/slider.ts +1 -1
  390. package/src/test-utils/utils/createFileList.ts +2 -0
  391. package/src/test-utils/utils/createMatchMediaSpy.ts +4 -4
  392. package/src/test-utils/vitest/match-media.ts +2 -2
  393. package/src/test-utils/vitest/timers.ts +1 -1
  394. package/src/test-utils/vitest/uploadMenuItemFileInput.ts +1 -1
  395. package/src/theme/ThemeProvider.tsx +2 -2
  396. package/src/theme/getDerivedTheme.ts +1 -1
  397. package/src/theme/useCSSVariables.ts +5 -5
  398. package/src/theme/useColorSchemeMetaTag.ts +2 -2
  399. package/src/theme/useInlineCSSVariables.ts +6 -7
  400. package/src/theme/utils.ts +8 -8
  401. package/src/tooltip/useTooltip.ts +7 -7
  402. package/src/tooltip/useTooltipPosition.ts +1 -1
  403. package/src/transition/useCarousel.ts +2 -2
  404. package/src/transition/useCollapseTransition.ts +1 -1
  405. package/src/transition/useSkeletonPlaceholder.ts +4 -4
  406. package/src/transition/useTransition.ts +2 -2
  407. package/src/transition/utils.ts +5 -5
  408. package/src/tree/TreeItem.tsx +1 -1
  409. package/src/tree/useTreeItems.ts +5 -5
  410. package/src/tree/useTreeMovement.ts +1 -1
  411. package/src/tree/utils.ts +9 -9
  412. package/src/typography/HighlightText.tsx +4 -3
  413. package/src/typography/SrOnly.tsx +9 -2
  414. package/src/useDebouncedFunction.ts +5 -5
  415. package/src/useDropzone.ts +10 -10
  416. package/src/useEnsuredState.ts +5 -5
  417. package/src/useIntersectionObserver.ts +3 -3
  418. package/src/useIsomorphicLayoutEffect.ts +3 -3
  419. package/src/useOrientation.ts +1 -1
  420. package/src/useReadonlySet.ts +3 -1
  421. package/src/useResizeListener.ts +2 -2
  422. package/src/useResizeObserver.ts +3 -4
  423. package/src/useThrottledFunction.ts +4 -4
  424. package/src/useWindowSize.ts +1 -1
  425. package/src/utils/alphaNumericSort.ts +1 -1
  426. package/src/utils/bem.ts +15 -16
  427. package/src/utils/getNumberOfDigits.ts +1 -0
  428. package/src/utils/getRangeDefaultValue.ts +1 -1
  429. package/src/utils/nearest.ts +5 -2
  430. package/src/utils/parseCssLengthUnit.ts +5 -4
  431. package/src/utils/trigonometry.ts +1 -1
@@ -10,7 +10,7 @@ import { useUserInteractionMode } from "../interaction/UserInteractionModeProvid
10
10
  */
11
11
  export function useMainTabIndex(tabIndex?: number): number | undefined {
12
12
  const keyboard = useUserInteractionMode() === "keyboard";
13
- if (keyboard && typeof tabIndex === "undefined") {
13
+ if (keyboard && tabIndex === undefined) {
14
14
  // eslint-disable-next-line no-param-reassign
15
15
  tabIndex = -1;
16
16
  }
@@ -159,7 +159,7 @@ export const ListItem = forwardRef<HTMLLIElement, ListItemProps>(
159
159
  } = props;
160
160
 
161
161
  let tabIndex = propTabIndex;
162
- if (!presentational && typeof tabIndex === "undefined") {
162
+ if (!presentational && tabIndex === undefined) {
163
163
  tabIndex = disabled ? -1 : 0;
164
164
  }
165
165
 
@@ -137,7 +137,7 @@ export function AppSizeProvider(props: AppSizeProviderProps): ReactElement {
137
137
  );
138
138
 
139
139
  let value = appSize;
140
- if (ssr || typeof window === "undefined") {
140
+ if (ssr || globalThis.window === undefined) {
141
141
  value = {
142
142
  __root: true,
143
143
  ...ssrSize,
@@ -28,13 +28,13 @@ export function configureMediaQueries(
28
28
  queries: Readonly<Partial<MediaQueryConfig>>
29
29
  ): void {
30
30
  if (process.env.NODE_ENV !== "production") {
31
- Object.entries(queries).forEach(([name, value]) => {
31
+ for (const [name, value] of Object.entries(queries)) {
32
32
  if (!(name in MEDIA_QUERY_CONFIG)) {
33
33
  throw new Error(`${name} is an invalid react-md media query.`);
34
34
  }
35
35
 
36
36
  MEDIA_QUERY_CONFIG[name as keyof MediaQueryConfig] = value;
37
- });
37
+ }
38
38
  } else {
39
39
  Object.assign(MEDIA_QUERY_CONFIG, queries);
40
40
  }
@@ -28,11 +28,11 @@ import { useSsr } from "../SsrProvider.js";
28
28
  export function useMediaQuery(query: string, disabled = false): boolean {
29
29
  const ssr = useSsr();
30
30
  const [matches, setMatches] = useState(() => {
31
- if (typeof window === "undefined" || disabled || ssr) {
31
+ if (globalThis.window === undefined || disabled || ssr) {
32
32
  return false;
33
33
  }
34
34
 
35
- return window.matchMedia(query).matches;
35
+ return globalThis.matchMedia(query).matches;
36
36
  });
37
37
 
38
38
  useEffect(() => {
@@ -40,7 +40,7 @@ export function useMediaQuery(query: string, disabled = false): boolean {
40
40
  return;
41
41
  }
42
42
 
43
- const result = window.matchMedia(query);
43
+ const result = globalThis.matchMedia(query);
44
44
  setMatches(result.matches);
45
45
 
46
46
  const updater = ({ matches }: MediaQueryListEvent): void => {
package/src/menu/Menu.tsx CHANGED
@@ -543,13 +543,13 @@ export const Menu = forwardRef<HTMLDivElement, LabelRequiredForA11y<MenuProps>>(
543
543
 
544
544
  // wait an animation frame so the initial click event that caused the menu
545
545
  // to become visible does not immediately close the menu
546
- const frame = window.requestAnimationFrame(() => {
547
- window.addEventListener("click", callback);
546
+ const frame = globalThis.requestAnimationFrame(() => {
547
+ globalThis.addEventListener("click", callback);
548
548
  });
549
549
 
550
550
  return () => {
551
- window.cancelAnimationFrame(frame);
552
- window.removeEventListener("click", callback);
551
+ globalThis.cancelAnimationFrame(frame);
552
+ globalThis.removeEventListener("click", callback);
553
553
  };
554
554
  }, [disableHoverMode, role, visible]);
555
555
  useIsomorphicLayoutEffect(() => {
@@ -46,7 +46,7 @@ export const MenuItemButton = forwardRef<HTMLLIElement, MenuItemButtonProps>(
46
46
  onMouseLeave = noop,
47
47
  rightAddon: propRightAddon,
48
48
  iconRotatorProps,
49
- disableDropdownIcon = typeof propRightAddon !== "undefined",
49
+ disableDropdownIcon = propRightAddon !== undefined,
50
50
  ...remaining
51
51
  } = props;
52
52
  const { disabled } = props;
@@ -114,7 +114,7 @@ export const MenuItemFileInput = forwardRef<
114
114
 
115
115
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
116
116
  // @ts-expect-error
117
- input.onchange = onChange;
117
+ input.addEventListener("change", onChange);
118
118
  input.click();
119
119
  input = null;
120
120
  }}
@@ -92,7 +92,7 @@ export const MenuWidget = forwardRef<HTMLDivElement, MenuWidgetProps>(
92
92
  return;
93
93
  }
94
94
 
95
- window.cancelAnimationFrame(sheetBlurredFame.current);
95
+ globalThis.cancelAnimationFrame(sheetBlurredFame.current);
96
96
  setSheetMenuFocused(true);
97
97
  },
98
98
  onKeyDown,
@@ -127,9 +127,11 @@ export const MenuWidget = forwardRef<HTMLDivElement, MenuWidgetProps>(
127
127
  return;
128
128
  }
129
129
 
130
- sheetBlurredFame.current = window.requestAnimationFrame(() => {
131
- setSheetMenuFocused(false);
132
- });
130
+ sheetBlurredFame.current = globalThis.requestAnimationFrame(
131
+ () => {
132
+ setSheetMenuFocused(false);
133
+ }
134
+ );
133
135
  }}
134
136
  >
135
137
  <List
@@ -36,7 +36,7 @@ export interface MatchInRangeOptions extends BaseOptions {
36
36
  */
37
37
  export function findMatchInRange(options: MatchInRangeOptions): number {
38
38
  const { values, startIndex, endIndex } = options;
39
- if (!values.length) {
39
+ if (values.length === 0) {
40
40
  return -1;
41
41
  }
42
42
 
@@ -76,7 +76,7 @@ export interface MatchIndexOptions extends BaseOptions {
76
76
  export function findMatchIndex(options: MatchIndexOptions): number {
77
77
  const { value, values, startIndex, isSelfMatchable = true } = options;
78
78
  // this was added to support comboboxes when there are no options available
79
- if (!values.length) {
79
+ if (values.length === 0) {
80
80
  return -1;
81
81
  }
82
82
 
@@ -490,7 +490,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
490
490
  const focusedIndex = focusables.findIndex(
491
491
  (element) => element === target || element.contains(target)
492
492
  );
493
- if (focusedIndex === -1 || !focusables.length) {
493
+ if (focusedIndex === -1 || focusables.length === 0) {
494
494
  return;
495
495
  }
496
496
 
@@ -530,7 +530,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
530
530
  event.currentTarget,
531
531
  programmatic
532
532
  );
533
- if (!focusables.length) {
533
+ if (focusables.length === 0) {
534
534
  return;
535
535
  }
536
536
 
@@ -48,7 +48,7 @@ export const getVirtualFocusDefaultIndex = (
48
48
  options: VirtualFocusableIndexOptions
49
49
  ): number => {
50
50
  const { focusables, includeDisabled, activeDescendantId } = options;
51
- if (!focusables.length || (!activeDescendantId && includeDisabled)) {
51
+ if (focusables.length === 0 || (!activeDescendantId && includeDisabled)) {
52
52
  return 0;
53
53
  }
54
54
 
@@ -71,7 +71,7 @@ export const getFirstFocusableIndex = (
71
71
  ): number => {
72
72
  const { focusables, includeDisabled } = options;
73
73
 
74
- if (!focusables.length) {
74
+ if (focusables.length === 0) {
75
75
  return -1;
76
76
  }
77
77
 
@@ -99,7 +99,7 @@ export const getLastFocusableIndex = (
99
99
  ): number => {
100
100
  const { focusables, includeDisabled } = options;
101
101
 
102
- if (!focusables.length) {
102
+ if (focusables.length === 0) {
103
103
  return -1;
104
104
  }
105
105
 
@@ -142,7 +142,7 @@ export const getNextFocusableIndex = (
142
142
  includeDisabled,
143
143
  currentFocusIndex,
144
144
  } = options;
145
- if (!focusables.length) {
145
+ if (focusables.length === 0) {
146
146
  return currentFocusIndex;
147
147
  }
148
148
 
@@ -186,14 +186,14 @@ export function getSearchText(
186
186
  }
187
187
 
188
188
  const cloned = element.cloneNode(true) as HTMLElement;
189
- cloned
190
- .querySelectorAll(
191
- // Note: do not include DISPLAY_NONE_CLASS since it is presentational only
192
- ".rmd-icon--font,[aria-hidden=true],[hidden],[role=presentation]"
193
- )
194
- .forEach((element) => {
195
- element.parentNode?.removeChild(element);
196
- });
189
+
190
+ const invisibleElements = cloned.querySelectorAll(
191
+ // Note: do not include DISPLAY_NONE_CLASS since it is presentational only
192
+ ".rmd-icon--font,[aria-hidden=true],[hidden],[role=presentation]"
193
+ );
194
+ for (const element of invisibleElements) {
195
+ element.remove();
196
+ }
197
197
 
198
198
  // Note: It would be good to use `cloned.innerText` (maybe?) at some point,
199
199
  // but it returns `undefined` in jsdom. It also does cause a reflow, so maybe
@@ -232,8 +232,9 @@ export function recalculateFocusIndex(options: RecalculateOptions): number {
232
232
  });
233
233
  }
234
234
 
235
- const { activeElement } = document;
236
- return focusables.findIndex((element) => element === activeElement);
235
+ // do type-casting since the types don't matter much here
236
+ const activeElement = document.activeElement as HTMLElement;
237
+ return focusables.indexOf(activeElement);
237
238
  }
238
239
 
239
240
  /**
@@ -28,7 +28,7 @@ export function getTableOfContentsHeadings(
28
28
  ): TableOfContentsHeadings {
29
29
  const { ssr, selector, getDepth, getHeadingText } = options;
30
30
 
31
- if (ssr || typeof window === "undefined") {
31
+ if (ssr || globalThis.window === undefined) {
32
32
  return [];
33
33
  }
34
34
 
@@ -41,7 +41,7 @@ export function getTableOfContentsHeadings(
41
41
  let previous: TableOfContentsHeadingItem = root;
42
42
  const parents: TableOfContentsHeadingItem[] = [];
43
43
  const headings = document.querySelectorAll(selector);
44
- headings.forEach((heading) => {
44
+ for (const heading of headings) {
45
45
  const depth = getDepth(heading);
46
46
  const item: TableOfContentsHeadingItem = {
47
47
  id: heading.id,
@@ -56,6 +56,7 @@ export function getTableOfContentsHeadings(
56
56
 
57
57
  parents.push(previous);
58
58
  } else if (depth < previous.depth) {
59
+ // eslint-disable-next-line unicorn/prefer-at
59
60
  while (parents[parents.length - 1].depth >= depth) {
60
61
  parents.pop();
61
62
  }
@@ -63,7 +64,7 @@ export function getTableOfContentsHeadings(
63
64
  const i = parents.length - 1;
64
65
  parents[i].items = [...(parents[i].items ?? []), item];
65
66
  previous = item;
66
- });
67
+ }
67
68
 
68
69
  return root.items;
69
70
  }
@@ -16,7 +16,7 @@ import { type HeadingReferenceWithChildren } from "./types.js";
16
16
  * @since 6.0.0
17
17
  */
18
18
  export const DEFAULT_ACTIVE_HEADING_THRESHOLD: IntersectionObserverThreshold = [
19
- 0.0, 1.0,
19
+ 0, 1,
20
20
  ];
21
21
 
22
22
  /**
@@ -33,7 +33,7 @@ export const DEFAULT_ACTIVE_HEADING_THRESHOLD: IntersectionObserverThreshold = [
33
33
  * @since 6.0.0
34
34
  */
35
35
  export const DEFAULT_ACTIVE_HEADING_GET_ROOT_MARGIN = (): string => {
36
- const headerHeightVar = window
36
+ const headerHeightVar = globalThis
37
37
  .getComputedStyle(document.documentElement)
38
38
  .getPropertyValue("--rmd-layout-header-height");
39
39
  const headerHeight = parseCssLengthUnit({
@@ -51,7 +51,7 @@ function getHeadingElements(
51
51
  items: readonly HeadingReferenceWithChildren[]
52
52
  ): readonly HTMLElement[] {
53
53
  const headings: HTMLElement[] = [];
54
- items.forEach((item) => {
54
+ for (const item of items) {
55
55
  const heading = document.getElementById(item.id);
56
56
  if (heading) {
57
57
  headings.push(heading);
@@ -60,7 +60,7 @@ function getHeadingElements(
60
60
  if (item.items) {
61
61
  headings.push(...getHeadingElements(item.items));
62
62
  }
63
- });
63
+ }
64
64
 
65
65
  return headings;
66
66
  }
@@ -134,9 +134,9 @@ export function useActiveHeadingId(options: ActiveHeadingIdOptions): string {
134
134
  getTargets: useCallback(() => {
135
135
  const headingElements = getHeadingElements(headings);
136
136
  const lookup = new Map<string, boolean>();
137
- headingElements.forEach((heading) => {
137
+ for (const heading of headingElements) {
138
138
  lookup.set(heading.id, false);
139
- });
139
+ }
140
140
  elements.current = lookup;
141
141
 
142
142
  return headingElements;
@@ -148,9 +148,9 @@ export function useActiveHeadingId(options: ActiveHeadingIdOptions): string {
148
148
  return;
149
149
  }
150
150
 
151
- entries.forEach((entry) => {
151
+ for (const entry of entries) {
152
152
  lookup.set(entry.target.id, entry.isIntersecting);
153
- });
153
+ }
154
154
 
155
155
  // get the first visible/intersecting item and set it
156
156
  let foundId = [...lookup.entries()].find(
@@ -25,7 +25,7 @@ export const DEFAULT_HEADING_SELECTOR =
25
25
  * @since 6.0.0
26
26
  */
27
27
  export const DEFAULT_GET_HEADING_DEPTH = (element: Element): number => {
28
- const depth = parseInt(element.tagName.substring(1));
28
+ const depth = Number.parseInt(element.tagName.slice(1));
29
29
  return Number.isNaN(depth) ? 0 : depth;
30
30
  };
31
31
 
@@ -4,14 +4,15 @@ import { type NavigationItem } from "./types.js";
4
4
  * @since 6.0.0
5
5
  */
6
6
  export function getHrefFromParents(parents: readonly NavigationItem[]): string {
7
- return parents.reduce<string>((result, parent) => {
7
+ let result = "";
8
+ for (const parent of parents) {
8
9
  if ("href" in parent && parent.href) {
9
10
  const { href } = parent;
10
- return result + href;
11
+ result += href;
11
12
  }
13
+ }
12
14
 
13
- return result;
14
- }, "");
15
+ return result;
15
16
  }
16
17
 
17
18
  /**
@@ -33,7 +34,7 @@ export function getNavigationGroupId(
33
34
  */
34
35
  export function getPartsFromPathname(pathname: string): ReadonlySet<string> {
35
36
  // remove trailing slashes just in case there aren't rewrites in place
36
- const href = pathname.replace(/\/{2,}/g, "/").replace(/\/+$/, "");
37
+ const href = pathname.replaceAll(/\/{2,}/g, "/").replace(/\/+$/, "");
37
38
  const parts = href.split("/");
38
39
  const set = new Set<string>();
39
40
  let prefix = "";
@@ -29,7 +29,7 @@ export const PORTAL_CONTAINER_ID = "rmd-portal-container";
29
29
  let portalContainer: PortalContainerNode = null;
30
30
 
31
31
  const getPortalContainer = (): PortalContainerNode =>
32
- typeof window === "undefined" ? null : document.body;
32
+ globalThis.window === undefined ? null : document.body;
33
33
 
34
34
  const context = createContext<PortalContainerNode>(getPortalContainer());
35
35
  context.displayName = "PortalContainer";
@@ -77,7 +77,7 @@ export function PortalContainerProvider(
77
77
  return;
78
78
  }
79
79
 
80
- if (typeof container !== "undefined") {
80
+ if (container !== undefined) {
81
81
  setValue(container);
82
82
  return;
83
83
  }
@@ -87,13 +87,15 @@ export function PortalContainerProvider(
87
87
  portalContainer.id = PORTAL_CONTAINER_ID;
88
88
  }
89
89
  if (!document.body.contains(portalContainer)) {
90
- document.body.appendChild(portalContainer);
90
+ document.body.append(portalContainer);
91
91
  }
92
92
 
93
93
  setValue(portalContainer);
94
94
 
95
95
  return () => {
96
96
  if (portalContainer && document.body.contains(portalContainer)) {
97
+ // can't use `portalContainer.remove()` since `DocumentFragment` does not have `.remove()`
98
+ // eslint-disable-next-line unicorn/prefer-dom-node-remove
97
99
  document.body.removeChild(portalContainer);
98
100
  }
99
101
  };
@@ -80,12 +80,15 @@ export function getFixedPosition(options: FixedPositionOptions): FixedPosition {
80
80
  let { initialY } = options;
81
81
  const container = findSizingContainer(options.container);
82
82
 
83
- if (process.env.NODE_ENV !== "production") {
84
- if (preventOverlap && anchor.y !== "above" && anchor.y !== "below") {
85
- throw new Error(
86
- 'Unable to prevent overlap when the vertical anchor is not `"above"` or `"below"`'
87
- );
88
- }
83
+ if (
84
+ process.env.NODE_ENV !== "production" &&
85
+ preventOverlap &&
86
+ anchor.y !== "above" &&
87
+ anchor.y !== "below"
88
+ ) {
89
+ throw new Error(
90
+ 'Unable to prevent overlap when the vertical anchor is not `"above"` or `"below"`'
91
+ );
89
92
  }
90
93
 
91
94
  if (!element) {
@@ -407,8 +407,8 @@ export function useFixedPositioning<
407
407
  updateStyle();
408
408
  };
409
409
 
410
- const resizeHandler = delegateEvent("resize", window, true);
411
- const scrollHandler = delegateEvent("scroll", window, true, {
410
+ const resizeHandler = delegateEvent("resize", globalThis.window, true);
411
+ const scrollHandler = delegateEvent("scroll", globalThis.window, true, {
412
412
  passive: true,
413
413
  });
414
414
  resizeHandler.add(resizeCallback);
@@ -294,7 +294,7 @@ export function findSizingContainer(
294
294
  }
295
295
  }
296
296
 
297
- const data = el.getAttribute("data-sizing-selector");
297
+ const data = el.dataset.sizingSelector;
298
298
  if (data) {
299
299
  const content = el.querySelector(data) as HTMLElement;
300
300
  if (content) {
@@ -344,10 +344,10 @@ export function getElementRect(element: HTMLElement): DOMRect {
344
344
  cloned.style.transform = "none";
345
345
 
346
346
  const parent = element.parentElement || document.body;
347
- parent.appendChild(cloned);
347
+ parent.append(cloned);
348
348
 
349
349
  const rect = cloned.getBoundingClientRect();
350
- parent.removeChild(cloned);
350
+ cloned.remove();
351
351
 
352
352
  return rect;
353
353
  }
@@ -5,7 +5,7 @@ let cache: number | undefined;
5
5
  */
6
6
  export function getScrollbarWidth(force = false): number {
7
7
  /* istanbul ignore if */
8
- if (typeof window === "undefined") {
8
+ if (globalThis.window === undefined) {
9
9
  return 0;
10
10
  }
11
11
 
@@ -17,16 +17,16 @@ export function getScrollbarWidth(force = false): number {
17
17
  const outer = document.createElement("div");
18
18
  outer.style.visibility = "hidden";
19
19
  outer.style.overflow = "scroll";
20
- document.body.appendChild(outer);
20
+ document.body.append(outer);
21
21
 
22
22
  const inner = document.createElement("div");
23
- outer.appendChild(inner);
23
+ outer.append(inner);
24
24
 
25
25
  // the scrollbar width can be determined by comparing the width of the parent
26
26
  // element that has scrollbars to the child element that does not.
27
27
  value = outer.offsetWidth - inner.offsetWidth;
28
28
  cache = value;
29
- document.body.removeChild(outer);
29
+ outer.remove();
30
30
 
31
31
  return value;
32
32
  }
@@ -42,11 +42,15 @@ const DEFAULT_EXTRACTOR = defaultExtractor("fuzzySearch");
42
42
  export function createFuzzyRegExp(query: string): RegExp {
43
43
  return new RegExp(
44
44
  query
45
+ // eslint-disable-next-line unicorn/prefer-spread
45
46
  .split("")
46
- .join("\\w*")
47
- .replace(/(\(|\||\)|\\(?!w\*)|\[|\|-|\.|\^|\+|\$|\?|^(?!w)\*)/g, "\\$1")
47
+ .join(String.raw`\w*`)
48
+ .replaceAll(
49
+ /(\(|\||\)|\\(?!w\*)|\[|\|-|\.|\^|\+|\$|\?|^(?!w)\*)/g,
50
+ String.raw`\$1`
51
+ )
48
52
  // Couldn't get the matching of two '*' working, so replace them here..
49
- .replace(/\*\*/g, "*\\*"),
53
+ .replaceAll("**", String.raw`*\*`),
50
54
  "i"
51
55
  );
52
56
  }
@@ -11,7 +11,7 @@ export function toSearchQuery(
11
11
  ): string {
12
12
  let q = s.toLowerCase();
13
13
  if (whitespace === "ignore") {
14
- q = q.replace(/\s/g, "");
14
+ q = q.replaceAll(/\s/g, "");
15
15
  } else if (whitespace === "trim") {
16
16
  q = q.trim();
17
17
  }
@@ -48,7 +48,7 @@ export function search<T>(
48
48
  ): readonly T[] | T | undefined {
49
49
  const { list, type, query, filter, extractor, whitespace = "keep" } = options;
50
50
  const fallback = type === "search" ? undefined : list;
51
- if (!list.length) {
51
+ if (list.length === 0) {
52
52
  return fallback;
53
53
  }
54
54
 
@@ -190,7 +190,7 @@ export const Toast = forwardRef<HTMLDivElement, ToastProps>(
190
190
  }
191
191
 
192
192
  let closeIcon = propCloseIcon;
193
- if (typeof closeButtonProps?.children !== "undefined") {
193
+ if (closeButtonProps?.children !== undefined) {
194
194
  closeIcon = closeButtonProps.children;
195
195
  }
196
196
 
@@ -62,8 +62,8 @@ export const ToastContent = forwardRef<HTMLDivElement, ToastContentProps>(
62
62
  disableWidth: true,
63
63
  onUpdate: useCallback((entry) => {
64
64
  const element = entry.target;
65
- const style = window.getComputedStyle(element);
66
- const lineHeight = parseFloat(style.lineHeight);
65
+ const style = globalThis.getComputedStyle(element);
66
+ const lineHeight = Number.parseFloat(style.lineHeight);
67
67
  if (Number.isNaN(lineHeight)) {
68
68
  return;
69
69
  }
@@ -121,7 +121,7 @@ export interface ToastVisibilityTimers {
121
121
  inactive: boolean;
122
122
  startTime: number;
123
123
  elapsedTime: number;
124
- exitTimeout?: number;
124
+ exitTimeout?: NodeJS.Timeout;
125
125
  }
126
126
 
127
127
  /**
@@ -154,9 +154,9 @@ export class ToastManager {
154
154
  #emit = (): void => {
155
155
  // shallow clone to ensure react updates
156
156
  this.#queue = [...this.#queue];
157
- this.#listeners.forEach((callback) => {
157
+ for (const callback of this.#listeners) {
158
158
  callback(this.#queue);
159
- });
159
+ }
160
160
  };
161
161
 
162
162
  #getToastIndex = (toastId: string | undefined): number => {
@@ -404,7 +404,7 @@ export class ToastManager {
404
404
  startTime: Date.now(),
405
405
  elapsedTime: 0,
406
406
  };
407
- window.clearTimeout(timers.exitTimeout);
407
+ globalThis.clearTimeout(timers.exitTimeout);
408
408
 
409
409
  let duration = visibleTime;
410
410
  if (timers.elapsedTime) {
@@ -412,7 +412,7 @@ export class ToastManager {
412
412
  }
413
413
 
414
414
  timers.inactive = false;
415
- timers.exitTimeout = window.setTimeout(() => {
415
+ timers.exitTimeout = globalThis.setTimeout(() => {
416
416
  this.removeToast(toastId, true);
417
417
  }, duration);
418
418
  this.#timers.set(toastId, timers);
@@ -431,9 +431,8 @@ export class ToastManager {
431
431
  return;
432
432
  }
433
433
 
434
- window.clearTimeout(cached.exitTimeout);
435
- const timers = { ...cached };
436
- timers.inactive = true;
434
+ globalThis.clearTimeout(cached.exitTimeout);
435
+ const timers = { ...cached, inactive: true };
437
436
  timers.elapsedTime = Date.now() - timers.startTime + timers.elapsedTime;
438
437
  this.#timers.set(toastId, timers);
439
438
  this.#updateToast(toastId, { paused: true });
@@ -499,7 +498,7 @@ export class ToastManager {
499
498
  */
500
499
  clearTimer = (toastId: string): void => {
501
500
  const timer = this.#timers.get(toastId);
502
- window.clearTimeout(timer?.exitTimeout);
501
+ globalThis.clearTimeout(timer?.exitTimeout);
503
502
  this.#timers.delete(toastId);
504
503
  };
505
504
 
@@ -520,9 +519,9 @@ export class ToastManager {
520
519
  */
521
520
  clearToasts = (disableEmit = false): void => {
522
521
  this.#queue = [];
523
- this.#timers.forEach((meta) => {
524
- window.clearTimeout(meta.exitTimeout);
525
- });
522
+ for (const [, meta] of this.#timers) {
523
+ globalThis.clearTimeout(meta.exitTimeout);
524
+ }
526
525
  this.#timers.clear();
527
526
  if (!disableEmit) {
528
527
  this.#emit();
@@ -70,7 +70,7 @@ export function useSpinButton<E extends HTMLElement = HTMLDivElement>(
70
70
  // trigger a noop setValue when `value` and `onValueChange` are provided
71
71
  // since `onValueChange is always called with `setValue
72
72
  let propSetValue: Dispatch<SpinButtonValue> | undefined;
73
- if (typeof propValue !== "undefined" && options.onValueChange) {
73
+ if (propValue !== undefined && options.onValueChange) {
74
74
  propSetValue = noop;
75
75
  }
76
76
 
@@ -3,7 +3,7 @@
3
3
  * @internal
4
4
  */
5
5
  export function deselectNode(node: Node): void {
6
- const selection = window.getSelection();
6
+ const selection = globalThis.getSelection();
7
7
  if (!selection) {
8
8
  return;
9
9
  }