react-aria-components 1.14.0 → 1.15.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 (333) hide show
  1. package/dist/Breadcrumbs.main.js +3 -2
  2. package/dist/Breadcrumbs.main.js.map +1 -1
  3. package/dist/Breadcrumbs.mjs +4 -3
  4. package/dist/Breadcrumbs.module.js +4 -3
  5. package/dist/Breadcrumbs.module.js.map +1 -1
  6. package/dist/Button.main.js +1 -1
  7. package/dist/Button.main.js.map +1 -1
  8. package/dist/Button.mjs +2 -2
  9. package/dist/Button.module.js +2 -2
  10. package/dist/Button.module.js.map +1 -1
  11. package/dist/Calendar.main.js +11 -7
  12. package/dist/Calendar.main.js.map +1 -1
  13. package/dist/Calendar.mjs +12 -8
  14. package/dist/Calendar.module.js +12 -8
  15. package/dist/Calendar.module.js.map +1 -1
  16. package/dist/Checkbox.main.js +2 -2
  17. package/dist/Checkbox.main.js.map +1 -1
  18. package/dist/Checkbox.mjs +3 -3
  19. package/dist/Checkbox.module.js +3 -3
  20. package/dist/Checkbox.module.js.map +1 -1
  21. package/dist/ColorArea.main.js +1 -1
  22. package/dist/ColorArea.main.js.map +1 -1
  23. package/dist/ColorArea.mjs +2 -2
  24. package/dist/ColorArea.module.js +2 -2
  25. package/dist/ColorArea.module.js.map +1 -1
  26. package/dist/ColorField.main.js +7 -3
  27. package/dist/ColorField.main.js.map +1 -1
  28. package/dist/ColorField.mjs +8 -4
  29. package/dist/ColorField.module.js +8 -4
  30. package/dist/ColorField.module.js.map +1 -1
  31. package/dist/ColorSlider.main.js +1 -1
  32. package/dist/ColorSlider.main.js.map +1 -1
  33. package/dist/ColorSlider.mjs +2 -2
  34. package/dist/ColorSlider.module.js +2 -2
  35. package/dist/ColorSlider.module.js.map +1 -1
  36. package/dist/ColorSwatch.main.js +1 -1
  37. package/dist/ColorSwatch.main.js.map +1 -1
  38. package/dist/ColorSwatch.mjs +2 -2
  39. package/dist/ColorSwatch.module.js +2 -2
  40. package/dist/ColorSwatch.module.js.map +1 -1
  41. package/dist/ColorSwatchPicker.main.js +2 -0
  42. package/dist/ColorSwatchPicker.main.js.map +1 -1
  43. package/dist/ColorSwatchPicker.mjs +2 -0
  44. package/dist/ColorSwatchPicker.module.js +2 -0
  45. package/dist/ColorSwatchPicker.module.js.map +1 -1
  46. package/dist/ColorThumb.main.js +1 -1
  47. package/dist/ColorThumb.main.js.map +1 -1
  48. package/dist/ColorThumb.mjs +2 -2
  49. package/dist/ColorThumb.module.js +2 -2
  50. package/dist/ColorThumb.module.js.map +1 -1
  51. package/dist/ColorWheel.main.js +2 -2
  52. package/dist/ColorWheel.main.js.map +1 -1
  53. package/dist/ColorWheel.mjs +3 -3
  54. package/dist/ColorWheel.module.js +3 -3
  55. package/dist/ColorWheel.module.js.map +1 -1
  56. package/dist/ComboBox.main.js +2 -2
  57. package/dist/ComboBox.main.js.map +1 -1
  58. package/dist/ComboBox.mjs +3 -3
  59. package/dist/ComboBox.module.js +3 -3
  60. package/dist/ComboBox.module.js.map +1 -1
  61. package/dist/DateField.main.js +3 -3
  62. package/dist/DateField.main.js.map +1 -1
  63. package/dist/DateField.mjs +4 -4
  64. package/dist/DateField.module.js +4 -4
  65. package/dist/DateField.module.js.map +1 -1
  66. package/dist/DatePicker.main.js +2 -2
  67. package/dist/DatePicker.main.js.map +1 -1
  68. package/dist/DatePicker.mjs +3 -3
  69. package/dist/DatePicker.module.js +3 -3
  70. package/dist/DatePicker.module.js.map +1 -1
  71. package/dist/Dialog.main.js +2 -1
  72. package/dist/Dialog.main.js.map +1 -1
  73. package/dist/Dialog.mjs +3 -2
  74. package/dist/Dialog.module.js +3 -2
  75. package/dist/Dialog.module.js.map +1 -1
  76. package/dist/Disclosure.main.js +3 -3
  77. package/dist/Disclosure.main.js.map +1 -1
  78. package/dist/Disclosure.mjs +4 -4
  79. package/dist/Disclosure.module.js +4 -4
  80. package/dist/Disclosure.module.js.map +1 -1
  81. package/dist/DropZone.main.js +2 -3
  82. package/dist/DropZone.main.js.map +1 -1
  83. package/dist/DropZone.mjs +4 -5
  84. package/dist/DropZone.module.js +4 -5
  85. package/dist/DropZone.module.js.map +1 -1
  86. package/dist/Form.main.js +1 -1
  87. package/dist/Form.main.js.map +1 -1
  88. package/dist/Form.mjs +2 -2
  89. package/dist/Form.module.js +2 -2
  90. package/dist/Form.module.js.map +1 -1
  91. package/dist/GridList.main.js +16 -13
  92. package/dist/GridList.main.js.map +1 -1
  93. package/dist/GridList.mjs +17 -14
  94. package/dist/GridList.module.js +17 -14
  95. package/dist/GridList.module.js.map +1 -1
  96. package/dist/Group.main.js +1 -1
  97. package/dist/Group.main.js.map +1 -1
  98. package/dist/Group.mjs +2 -2
  99. package/dist/Group.module.js +2 -2
  100. package/dist/Group.module.js.map +1 -1
  101. package/dist/Header.main.js +1 -1
  102. package/dist/Header.main.js.map +1 -1
  103. package/dist/Header.mjs +2 -2
  104. package/dist/Header.module.js +2 -2
  105. package/dist/Header.module.js.map +1 -1
  106. package/dist/Heading.main.js +2 -2
  107. package/dist/Heading.main.js.map +1 -1
  108. package/dist/Heading.mjs +2 -2
  109. package/dist/Heading.module.js +2 -2
  110. package/dist/Heading.module.js.map +1 -1
  111. package/dist/HiddenDateInput.main.js +5 -1
  112. package/dist/HiddenDateInput.main.js.map +1 -1
  113. package/dist/HiddenDateInput.mjs +6 -2
  114. package/dist/HiddenDateInput.module.js +6 -2
  115. package/dist/HiddenDateInput.module.js.map +1 -1
  116. package/dist/Input.main.js +1 -1
  117. package/dist/Input.main.js.map +1 -1
  118. package/dist/Input.mjs +2 -2
  119. package/dist/Input.module.js +2 -2
  120. package/dist/Input.module.js.map +1 -1
  121. package/dist/Keyboard.main.js +1 -1
  122. package/dist/Keyboard.main.js.map +1 -1
  123. package/dist/Keyboard.mjs +2 -2
  124. package/dist/Keyboard.module.js +2 -2
  125. package/dist/Keyboard.module.js.map +1 -1
  126. package/dist/Label.main.js +2 -1
  127. package/dist/Label.main.js.map +1 -1
  128. package/dist/Label.mjs +3 -2
  129. package/dist/Label.module.js +3 -2
  130. package/dist/Label.module.js.map +1 -1
  131. package/dist/Link.main.js +3 -2
  132. package/dist/Link.main.js.map +1 -1
  133. package/dist/Link.mjs +4 -3
  134. package/dist/Link.module.js +4 -3
  135. package/dist/Link.module.js.map +1 -1
  136. package/dist/ListBox.main.js +13 -14
  137. package/dist/ListBox.main.js.map +1 -1
  138. package/dist/ListBox.mjs +14 -15
  139. package/dist/ListBox.module.js +14 -15
  140. package/dist/ListBox.module.js.map +1 -1
  141. package/dist/Menu.main.js +21 -8
  142. package/dist/Menu.main.js.map +1 -1
  143. package/dist/Menu.mjs +22 -9
  144. package/dist/Menu.module.js +22 -9
  145. package/dist/Menu.module.js.map +1 -1
  146. package/dist/Meter.main.js +1 -1
  147. package/dist/Meter.main.js.map +1 -1
  148. package/dist/Meter.mjs +2 -2
  149. package/dist/Meter.module.js +2 -2
  150. package/dist/Meter.module.js.map +1 -1
  151. package/dist/Modal.main.js +2 -2
  152. package/dist/Modal.main.js.map +1 -1
  153. package/dist/Modal.mjs +3 -3
  154. package/dist/Modal.module.js +3 -3
  155. package/dist/Modal.module.js.map +1 -1
  156. package/dist/NumberField.main.js +1 -1
  157. package/dist/NumberField.main.js.map +1 -1
  158. package/dist/NumberField.mjs +2 -2
  159. package/dist/NumberField.module.js +2 -2
  160. package/dist/NumberField.module.js.map +1 -1
  161. package/dist/OverlayArrow.main.js +1 -1
  162. package/dist/OverlayArrow.main.js.map +1 -1
  163. package/dist/OverlayArrow.mjs +2 -2
  164. package/dist/OverlayArrow.module.js +2 -2
  165. package/dist/OverlayArrow.module.js.map +1 -1
  166. package/dist/Popover.main.js +2 -2
  167. package/dist/Popover.main.js.map +1 -1
  168. package/dist/Popover.mjs +4 -4
  169. package/dist/Popover.module.js +4 -4
  170. package/dist/Popover.module.js.map +1 -1
  171. package/dist/ProgressBar.main.js +1 -1
  172. package/dist/ProgressBar.main.js.map +1 -1
  173. package/dist/ProgressBar.mjs +2 -2
  174. package/dist/ProgressBar.module.js +2 -2
  175. package/dist/ProgressBar.module.js.map +1 -1
  176. package/dist/RadioGroup.main.js +2 -2
  177. package/dist/RadioGroup.main.js.map +1 -1
  178. package/dist/RadioGroup.mjs +3 -3
  179. package/dist/RadioGroup.module.js +3 -3
  180. package/dist/RadioGroup.module.js.map +1 -1
  181. package/dist/SearchField.main.js +1 -1
  182. package/dist/SearchField.main.js.map +1 -1
  183. package/dist/SearchField.mjs +2 -2
  184. package/dist/SearchField.module.js +2 -2
  185. package/dist/SearchField.module.js.map +1 -1
  186. package/dist/Select.main.js +2 -2
  187. package/dist/Select.main.js.map +1 -1
  188. package/dist/Select.mjs +3 -3
  189. package/dist/Select.module.js +3 -3
  190. package/dist/Select.module.js.map +1 -1
  191. package/dist/Separator.main.js +3 -1
  192. package/dist/Separator.main.js.map +1 -1
  193. package/dist/Separator.mjs +4 -2
  194. package/dist/Separator.module.js +4 -2
  195. package/dist/Separator.module.js.map +1 -1
  196. package/dist/SharedElementTransition.main.js +3 -2
  197. package/dist/SharedElementTransition.main.js.map +1 -1
  198. package/dist/SharedElementTransition.mjs +4 -3
  199. package/dist/SharedElementTransition.module.js +4 -3
  200. package/dist/SharedElementTransition.module.js.map +1 -1
  201. package/dist/Slider.main.js +6 -5
  202. package/dist/Slider.main.js.map +1 -1
  203. package/dist/Slider.mjs +7 -6
  204. package/dist/Slider.module.js +7 -6
  205. package/dist/Slider.module.js.map +1 -1
  206. package/dist/Switch.main.js +1 -1
  207. package/dist/Switch.main.js.map +1 -1
  208. package/dist/Switch.mjs +2 -2
  209. package/dist/Switch.module.js +2 -2
  210. package/dist/Switch.module.js.map +1 -1
  211. package/dist/Table.main.js +30 -25
  212. package/dist/Table.main.js.map +1 -1
  213. package/dist/Table.mjs +31 -26
  214. package/dist/Table.module.js +31 -26
  215. package/dist/Table.module.js.map +1 -1
  216. package/dist/Tabs.main.js +13 -6
  217. package/dist/Tabs.main.js.map +1 -1
  218. package/dist/Tabs.mjs +14 -7
  219. package/dist/Tabs.module.js +14 -7
  220. package/dist/Tabs.module.js.map +1 -1
  221. package/dist/TagGroup.main.js +6 -5
  222. package/dist/TagGroup.main.js.map +1 -1
  223. package/dist/TagGroup.mjs +7 -6
  224. package/dist/TagGroup.module.js +7 -6
  225. package/dist/TagGroup.module.js.map +1 -1
  226. package/dist/Text.main.js +2 -1
  227. package/dist/Text.main.js.map +1 -1
  228. package/dist/Text.mjs +3 -2
  229. package/dist/Text.module.js +3 -2
  230. package/dist/Text.module.js.map +1 -1
  231. package/dist/TextArea.main.js +1 -1
  232. package/dist/TextArea.main.js.map +1 -1
  233. package/dist/TextArea.mjs +2 -2
  234. package/dist/TextArea.module.js +2 -2
  235. package/dist/TextArea.module.js.map +1 -1
  236. package/dist/TextField.main.js +1 -1
  237. package/dist/TextField.main.js.map +1 -1
  238. package/dist/TextField.mjs +2 -2
  239. package/dist/TextField.module.js +2 -2
  240. package/dist/TextField.module.js.map +1 -1
  241. package/dist/Toast.main.js +6 -4
  242. package/dist/Toast.main.js.map +1 -1
  243. package/dist/Toast.mjs +7 -5
  244. package/dist/Toast.module.js +7 -5
  245. package/dist/Toast.module.js.map +1 -1
  246. package/dist/ToggleButton.main.js +5 -2
  247. package/dist/ToggleButton.main.js.map +1 -1
  248. package/dist/ToggleButton.mjs +6 -3
  249. package/dist/ToggleButton.module.js +6 -3
  250. package/dist/ToggleButton.module.js.map +1 -1
  251. package/dist/ToggleButtonGroup.main.js +1 -1
  252. package/dist/ToggleButtonGroup.main.js.map +1 -1
  253. package/dist/ToggleButtonGroup.mjs +2 -2
  254. package/dist/ToggleButtonGroup.module.js +2 -2
  255. package/dist/ToggleButtonGroup.module.js.map +1 -1
  256. package/dist/Toolbar.main.js +1 -1
  257. package/dist/Toolbar.main.js.map +1 -1
  258. package/dist/Toolbar.mjs +2 -2
  259. package/dist/Toolbar.module.js +2 -2
  260. package/dist/Toolbar.module.js.map +1 -1
  261. package/dist/Tooltip.main.js +1 -1
  262. package/dist/Tooltip.main.js.map +1 -1
  263. package/dist/Tooltip.mjs +2 -2
  264. package/dist/Tooltip.module.js +2 -2
  265. package/dist/Tooltip.module.js.map +1 -1
  266. package/dist/Tree.main.js +6 -6
  267. package/dist/Tree.main.js.map +1 -1
  268. package/dist/Tree.mjs +7 -7
  269. package/dist/Tree.module.js +7 -7
  270. package/dist/Tree.module.js.map +1 -1
  271. package/dist/types.d.ts +121 -62
  272. package/dist/types.d.ts.map +1 -1
  273. package/dist/utils.main.js +41 -3
  274. package/dist/utils.main.js.map +1 -1
  275. package/dist/utils.mjs +42 -5
  276. package/dist/utils.module.js +42 -5
  277. package/dist/utils.module.js.map +1 -1
  278. package/package.json +24 -24
  279. package/src/Breadcrumbs.tsx +9 -6
  280. package/src/Button.tsx +4 -3
  281. package/src/Calendar.tsx +26 -20
  282. package/src/Checkbox.tsx +7 -6
  283. package/src/ColorArea.tsx +3 -2
  284. package/src/ColorField.tsx +18 -3
  285. package/src/ColorSlider.tsx +2 -1
  286. package/src/ColorSwatch.tsx +2 -1
  287. package/src/ColorSwatchPicker.tsx +2 -0
  288. package/src/ColorThumb.tsx +3 -3
  289. package/src/ColorWheel.tsx +4 -3
  290. package/src/ComboBox.tsx +3 -2
  291. package/src/DateField.tsx +5 -4
  292. package/src/DatePicker.tsx +3 -2
  293. package/src/Dialog.tsx +5 -4
  294. package/src/Disclosure.tsx +7 -6
  295. package/src/DropZone.tsx +5 -5
  296. package/src/Form.tsx +4 -4
  297. package/src/GridList.tsx +30 -23
  298. package/src/Group.tsx +10 -9
  299. package/src/Header.tsx +7 -5
  300. package/src/Heading.tsx +4 -4
  301. package/src/HiddenDateInput.tsx +10 -3
  302. package/src/Input.tsx +3 -2
  303. package/src/Keyboard.tsx +4 -2
  304. package/src/Label.tsx +4 -3
  305. package/src/Link.tsx +15 -12
  306. package/src/ListBox.tsx +23 -22
  307. package/src/Menu.tsx +32 -17
  308. package/src/Meter.tsx +3 -2
  309. package/src/Modal.tsx +5 -4
  310. package/src/NumberField.tsx +2 -1
  311. package/src/OverlayArrow.tsx +3 -2
  312. package/src/Popover.tsx +5 -4
  313. package/src/ProgressBar.tsx +3 -2
  314. package/src/RadioGroup.tsx +6 -5
  315. package/src/SearchField.tsx +3 -2
  316. package/src/Select.tsx +6 -5
  317. package/src/Separator.tsx +8 -5
  318. package/src/SharedElementTransition.tsx +4 -3
  319. package/src/Slider.tsx +9 -7
  320. package/src/Switch.tsx +11 -10
  321. package/src/Table.tsx +47 -36
  322. package/src/Tabs.tsx +23 -18
  323. package/src/TagGroup.tsx +16 -13
  324. package/src/Text.tsx +4 -3
  325. package/src/TextArea.tsx +3 -2
  326. package/src/TextField.tsx +4 -3
  327. package/src/Toast.tsx +15 -11
  328. package/src/ToggleButton.tsx +5 -4
  329. package/src/ToggleButtonGroup.tsx +3 -2
  330. package/src/Toolbar.tsx +3 -2
  331. package/src/Tooltip.tsx +3 -2
  332. package/src/Tree.tsx +18 -17
  333. package/src/utils.tsx +96 -10
package/src/Menu.tsx CHANGED
@@ -17,6 +17,9 @@ import {
17
17
  ClassNameOrFunction,
18
18
  ContextValue,
19
19
  DEFAULT_SLOT,
20
+ dom,
21
+ DOMRenderProps,
22
+ PossibleLinkDOMRenderProps,
20
23
  Provider,
21
24
  RenderProps,
22
25
  SlotProps,
@@ -29,7 +32,7 @@ import {
29
32
  import {CollectionProps, CollectionRendererContext, ItemRenderProps, SectionContext, SectionProps, usePersistedKeys} from './Collection';
30
33
  import {FieldInputContext, SelectableCollectionContext, SelectableCollectionContextValue} from './RSPContexts';
31
34
  import {filterDOMProps, useObjectRef, useResizeObserver} from '@react-aria/utils';
32
- import {FocusStrategy, forwardRefType, GlobalDOMAttributes, HoverEvents, Key, LinkDOMProps, MultipleSelection, PressEvents} from '@react-types/shared';
35
+ import {FocusEvents, FocusStrategy, forwardRefType, GlobalDOMAttributes, HoverEvents, Key, LinkDOMProps, MultipleSelection, PressEvents} from '@react-types/shared';
33
36
  import {HeaderContext} from './Header';
34
37
  import {KeyboardContext} from './Keyboard';
35
38
  import {MultipleSelectionState, SelectionManager, useMultipleSelectionState} from '@react-stately/selection';
@@ -194,7 +197,9 @@ export interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children'>, Collec
194
197
  */
195
198
  className?: ClassNameOrFunction<MenuRenderProps>,
196
199
  /** Provides content to display when there are no items in the list. */
197
- renderEmptyState?: () => ReactNode
200
+ renderEmptyState?: () => ReactNode,
201
+ /** Whether the menu should close when the menu item is selected. */
202
+ shouldCloseOnSelect?: boolean
198
203
  }
199
204
 
200
205
  /**
@@ -232,9 +237,9 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
232
237
  let {isVirtualized, CollectionRoot} = useContext(CollectionRendererContext);
233
238
  let {menuProps} = useMenu({...props, isVirtualized, onClose: props.onClose || triggerState?.close}, state, ref);
234
239
  let renderProps = useRenderProps({
240
+ ...props,
241
+ children: undefined,
235
242
  defaultClassName: 'react-aria-Menu',
236
- className: props.className,
237
- style: props.style,
238
243
  values: {
239
244
  isEmpty: state.collection.size === 0
240
245
  }
@@ -255,7 +260,7 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
255
260
 
256
261
  return (
257
262
  <FocusScope>
258
- <div
263
+ <dom.div
259
264
  {...mergeProps(DOMProps, renderProps, menuProps)}
260
265
  ref={ref as RefObject<HTMLDivElement>}
261
266
  slot={props.slot || undefined}
@@ -267,7 +272,7 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
267
272
  [SeparatorContext, {elementType: 'div'}],
268
273
  [SectionContext, {name: 'MenuSection', render: MenuSectionInner}],
269
274
  [SubmenuTriggerContext, {parentMenuRef: ref, shouldUseVirtualFocus: autocompleteMenuProps?.shouldUseVirtualFocus}],
270
- [MenuItemContext, null],
275
+ [MenuItemContext, {shouldCloseOnSelect: props.shouldCloseOnSelect}],
271
276
  [SelectableCollectionContext, null],
272
277
  [FieldInputContext, null],
273
278
  [SelectionManagerContext, state.selectionManager],
@@ -284,17 +289,19 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
284
289
  </SharedElementTransition>
285
290
  </Provider>
286
291
  {emptyState}
287
- </div>
292
+ </dom.div>
288
293
  </FocusScope>
289
294
  );
290
295
  }
291
296
 
292
- export interface MenuSectionProps<T> extends SectionProps<T>, MultipleSelection {
297
+ export interface MenuSectionProps<T> extends SectionProps<T>, MultipleSelection, DOMRenderProps<'section', undefined> {
293
298
  /**
294
299
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element.
295
300
  * @default 'react-aria-MenuSection'
296
301
  */
297
- className?: string
302
+ className?: string,
303
+ /** Whether the menu should close when the menu item is selected. */
304
+ shouldCloseOnSelect?: boolean
298
305
  }
299
306
 
300
307
  // A subclass of SelectionManager that forwards focus-related properties to the parent,
@@ -337,31 +344,37 @@ function MenuSectionInner<T extends object>(props: MenuSectionProps<T>, ref: For
337
344
  'aria-label': section.props['aria-label'] ?? undefined
338
345
  });
339
346
  let renderProps = useRenderProps({
347
+ ...props,
348
+ id: undefined,
349
+ children: undefined,
340
350
  defaultClassName: className,
341
351
  className: section.props?.className,
342
352
  style: section.props?.style,
343
- values: {}
353
+ values: undefined
344
354
  });
345
355
 
346
356
  let parent = useContext(SelectionManagerContext)!;
347
357
  let selectionState = useMultipleSelectionState(props);
348
358
  let manager = props.selectionMode != null ? new GroupSelectionManager(parent, selectionState) : parent;
349
359
 
360
+ let closeOnSelect = useSlottedContext(MenuItemContext)?.shouldCloseOnSelect;
361
+
350
362
  let DOMProps = filterDOMProps(props as any, {global: true});
351
363
  delete DOMProps.id;
352
364
 
353
365
  return (
354
- <section
366
+ <dom.section
355
367
  {...mergeProps(DOMProps, renderProps, groupProps)}
356
368
  ref={ref}>
357
369
  <Provider
358
370
  values={[
359
371
  [HeaderContext, {...headingProps, ref: headingRef}],
360
- [SelectionManagerContext, manager]
372
+ [SelectionManagerContext, manager],
373
+ [MenuItemContext, {shouldCloseOnSelect: props.shouldCloseOnSelect ?? closeOnSelect}]
361
374
  ]}>
362
375
  <CollectionBranch collection={state.collection} parent={section} />
363
376
  </Provider>
364
- </section>
377
+ </dom.section>
365
378
  );
366
379
  }
367
380
 
@@ -385,7 +398,7 @@ export interface MenuItemRenderProps extends ItemRenderProps {
385
398
  isOpen: boolean
386
399
  }
387
400
 
388
- export interface MenuItemProps<T = object> extends RenderProps<MenuItemRenderProps>, LinkDOMProps, HoverEvents, PressEvents, Omit<GlobalDOMAttributes<HTMLDivElement>, 'onClick'> {
401
+ export interface MenuItemProps<T = object> extends Omit<RenderProps<MenuItemRenderProps>, 'render'>, PossibleLinkDOMRenderProps<'div', MenuItemRenderProps>, LinkDOMProps, HoverEvents, FocusEvents, PressEvents, Omit<GlobalDOMAttributes<HTMLDivElement>, 'onClick'> {
389
402
  /**
390
403
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
391
404
  * @default 'react-aria-MenuItem'
@@ -402,7 +415,9 @@ export interface MenuItemProps<T = object> extends RenderProps<MenuItemRenderPro
402
415
  /** Whether the item is disabled. */
403
416
  isDisabled?: boolean,
404
417
  /** Handler that is called when the item is selected. */
405
- onAction?: () => void
418
+ onAction?: () => void,
419
+ /** Whether the menu should close when the menu item is selected. */
420
+ shouldCloseOnSelect?: boolean
406
421
  }
407
422
 
408
423
  const MenuItemContext = createContext<ContextValue<MenuItemProps, HTMLDivElement>>(null);
@@ -427,7 +442,7 @@ export const MenuItem = /*#__PURE__*/ createLeafComponent(ItemNode, function Men
427
442
  let {hoverProps, isHovered} = useHover({
428
443
  isDisabled: states.isDisabled
429
444
  });
430
- let renderProps = useRenderProps({
445
+ let renderProps = useRenderProps<MenuItemRenderProps, any>({
431
446
  ...props,
432
447
  id: undefined,
433
448
  children: item.rendered,
@@ -443,7 +458,7 @@ export const MenuItem = /*#__PURE__*/ createLeafComponent(ItemNode, function Men
443
458
  }
444
459
  });
445
460
 
446
- let ElementType: React.ElementType = props.href ? 'a' : 'div';
461
+ let ElementType = props.href ? dom.a : dom.div;
447
462
  let DOMProps = filterDOMProps(props as any, {global: true});
448
463
  delete DOMProps.id;
449
464
  delete DOMProps.onClick;
package/src/Meter.tsx CHANGED
@@ -15,6 +15,7 @@ import {clamp} from '@react-stately/utils';
15
15
  import {
16
16
  ClassNameOrFunction,
17
17
  ContextValue,
18
+ dom,
18
19
  RenderProps,
19
20
  SlotProps,
20
21
  useContextProps,
@@ -83,10 +84,10 @@ export const Meter = /*#__PURE__*/ (forwardRef as forwardRefType)(function Meter
83
84
  let DOMProps = filterDOMProps(props, {global: true});
84
85
 
85
86
  return (
86
- <div {...mergeProps(DOMProps, renderProps, meterProps)} ref={ref} slot={props.slot || undefined}>
87
+ <dom.div {...mergeProps(DOMProps, renderProps, meterProps)} ref={ref} slot={props.slot || undefined}>
87
88
  <LabelContext.Provider value={{...labelProps, ref: labelRef, elementType: 'span'}}>
88
89
  {renderProps.children}
89
90
  </LabelContext.Provider>
90
- </div>
91
+ </dom.div>
91
92
  );
92
93
  });
package/src/Modal.tsx CHANGED
@@ -14,6 +14,7 @@ import {AriaModalOverlayProps, DismissButton, Overlay, useIsSSR, useModalOverlay
14
14
  import {
15
15
  ClassNameOrFunction,
16
16
  ContextValue,
17
+ dom,
17
18
  Provider,
18
19
  RenderProps,
19
20
  SlotProps,
@@ -200,7 +201,7 @@ function ModalOverlayInner({UNSTABLE_portalContainer, ...props}: ModalOverlayInn
200
201
 
201
202
  return (
202
203
  <Overlay isExiting={props.isExiting} portalContainer={UNSTABLE_portalContainer}>
203
- <div
204
+ <dom.div
204
205
  {...mergeProps(filterDOMProps(props, {global: true}), underlayProps)}
205
206
  {...renderProps}
206
207
  style={style}
@@ -214,7 +215,7 @@ function ModalOverlayInner({UNSTABLE_portalContainer, ...props}: ModalOverlayInn
214
215
  ]}>
215
216
  {renderProps.children}
216
217
  </Provider>
217
- </div>
218
+ </dom.div>
218
219
  </Overlay>
219
220
  );
220
221
  }
@@ -246,7 +247,7 @@ function ModalContent(props: ModalContentProps) {
246
247
  });
247
248
 
248
249
  return (
249
- <div
250
+ <dom.div
250
251
  {...mergeProps(filterDOMProps(props, {global: true}), modalProps)}
251
252
  {...renderProps}
252
253
  ref={ref}
@@ -256,6 +257,6 @@ function ModalContent(props: ModalContentProps) {
256
257
  <DismissButton onDismiss={state.close} />
257
258
  }
258
259
  {renderProps.children}
259
- </div>
260
+ </dom.div>
260
261
  );
261
262
  }
@@ -15,6 +15,7 @@ import {ButtonContext} from './Button';
15
15
  import {
16
16
  ClassNameOrFunction,
17
17
  ContextValue,
18
+ dom,
18
19
  Provider,
19
20
  RACValidation,
20
21
  removeDataAttributes,
@@ -137,7 +138,7 @@ export const NumberField = /*#__PURE__*/ (forwardRef as forwardRefType)(function
137
138
  }],
138
139
  [FieldErrorContext, validation]
139
140
  ]}>
140
- <div
141
+ <dom.div
141
142
  {...DOMProps}
142
143
  {...renderProps}
143
144
  ref={ref}
@@ -13,6 +13,7 @@
13
13
  import {
14
14
  ClassNameOrFunction,
15
15
  ContextValue,
16
+ dom,
16
17
  RenderProps,
17
18
  useContextProps,
18
19
  useRenderProps
@@ -30,7 +31,7 @@ export const OverlayArrowContext = createContext<ContextValue<OverlayArrowContex
30
31
  placement: 'bottom'
31
32
  });
32
33
 
33
- export interface OverlayArrowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'children'>, RenderProps<OverlayArrowRenderProps>, DOMProps {
34
+ export interface OverlayArrowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'render' | 'children'>, RenderProps<OverlayArrowRenderProps>, DOMProps {
34
35
  /**
35
36
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
36
37
  * @default 'react-aria-OverlayArrow'
@@ -77,7 +78,7 @@ export const OverlayArrow = /*#__PURE__*/ (forwardRef as forwardRefType)(functio
77
78
  let DOMProps = filterDOMProps(props);
78
79
 
79
80
  return (
80
- <div
81
+ <dom.div
81
82
  {...DOMProps}
82
83
  {...renderProps}
83
84
  style={{
package/src/Popover.tsx CHANGED
@@ -15,12 +15,13 @@ import {AriaPopoverProps, DismissButton, Overlay, PlacementAxis, PositionProps,
15
15
  import {
16
16
  ClassNameOrFunction,
17
17
  ContextValue,
18
+ dom,
18
19
  RenderProps,
19
20
  SlotProps,
20
21
  useContextProps,
21
22
  useRenderProps
22
23
  } from './utils';
23
- import {filterDOMProps, mergeProps, useEnterAnimation, useExitAnimation, useLayoutEffect} from '@react-aria/utils';
24
+ import {filterDOMProps, mergeProps, nodeContains, useEnterAnimation, useExitAnimation, useLayoutEffect} from '@react-aria/utils';
24
25
  import {focusSafely} from '@react-aria/interactions';
25
26
  import {OverlayArrowContext} from './OverlayArrow';
26
27
  import {OverlayTriggerProps, OverlayTriggerState, useOverlayTriggerState} from 'react-stately';
@@ -198,7 +199,7 @@ function PopoverInner({state, isExiting, UNSTABLE_portalContainer, clearContexts
198
199
  // Focus the popover itself on mount, unless a child element is already focused.
199
200
  // Skip this for submenus since hovering a submenutrigger should keep focus on the trigger
200
201
  useEffect(() => {
201
- if (isDialog && props.trigger !== 'SubmenuTrigger' && ref.current && !ref.current.contains(document.activeElement)) {
202
+ if (isDialog && props.trigger !== 'SubmenuTrigger' && ref.current && !nodeContains(ref.current, document.activeElement)) {
202
203
  focusSafely(ref.current);
203
204
  }
204
205
  }, [isDialog, ref, props.trigger]);
@@ -220,7 +221,7 @@ function PopoverInner({state, isExiting, UNSTABLE_portalContainer, clearContexts
220
221
  };
221
222
 
222
223
  let overlay = (
223
- <div
224
+ <dom.div
224
225
  {...mergeProps(filterDOMProps(props, {global: true}), popoverProps)}
225
226
  {...renderProps}
226
227
  role={isDialog ? 'dialog' : undefined}
@@ -240,7 +241,7 @@ function PopoverInner({state, isExiting, UNSTABLE_portalContainer, clearContexts
240
241
  {children}
241
242
  </OverlayArrowContext.Provider>
242
243
  <DismissButton onDismiss={state.close} />
243
- </div>
244
+ </dom.div>
244
245
  );
245
246
 
246
247
  // If this is a root popover, render an extra div to act as the portal container for submenus/subdialogs.
@@ -15,6 +15,7 @@ import {clamp} from '@react-stately/utils';
15
15
  import {
16
16
  ClassNameOrFunction,
17
17
  ContextValue,
18
+ dom,
18
19
  RenderProps,
19
20
  SlotProps,
20
21
  useContextProps,
@@ -91,10 +92,10 @@ export const ProgressBar = forwardRef(function ProgressBar(props: ProgressBarPro
91
92
  let DOMProps = filterDOMProps(props, {global: true});
92
93
 
93
94
  return (
94
- <div {...mergeProps(DOMProps, renderProps, progressBarProps)} ref={ref} slot={props.slot || undefined}>
95
+ <dom.div {...mergeProps(DOMProps, renderProps, progressBarProps)} ref={ref} slot={props.slot || undefined}>
95
96
  <LabelContext.Provider value={{...labelProps, ref: labelRef, elementType: 'span'}}>
96
97
  {renderProps.children}
97
98
  </LabelContext.Provider>
98
- </div>
99
+ </dom.div>
99
100
  );
100
101
  });
@@ -14,6 +14,7 @@ import {AriaRadioGroupProps, AriaRadioProps, HoverEvents, Orientation, useFocusR
14
14
  import {
15
15
  ClassNameOrFunction,
16
16
  ContextValue,
17
+ dom,
17
18
  Provider,
18
19
  RACValidation,
19
20
  removeDataAttributes,
@@ -42,7 +43,7 @@ export interface RadioGroupProps extends Omit<AriaRadioGroupProps, 'children' |
42
43
  */
43
44
  className?: ClassNameOrFunction<RadioGroupRenderProps>
44
45
  }
45
- export interface RadioProps extends Omit<AriaRadioProps, 'children'>, HoverEvents, RenderProps<RadioRenderProps>, SlotProps, Omit<GlobalDOMAttributes<HTMLLabelElement>, 'onClick'> {
46
+ export interface RadioProps extends Omit<AriaRadioProps, 'children'>, HoverEvents, RenderProps<RadioRenderProps, 'label'>, SlotProps, Omit<GlobalDOMAttributes<HTMLLabelElement>, 'onClick'> {
46
47
  /**
47
48
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
48
49
  * @default 'react-aria-Radio'
@@ -175,7 +176,7 @@ export const RadioGroup = /*#__PURE__*/ (forwardRef as forwardRefType)(function
175
176
  let DOMProps = filterDOMProps(props, {global: true});
176
177
 
177
178
  return (
178
- <div
179
+ <dom.div
179
180
  {...mergeProps(DOMProps, renderProps, radioGroupProps)}
180
181
  ref={ref}
181
182
  slot={props.slot || undefined}
@@ -200,7 +201,7 @@ export const RadioGroup = /*#__PURE__*/ (forwardRef as forwardRefType)(function
200
201
  {renderProps.children}
201
202
  </SharedElementTransition>
202
203
  </Provider>
203
- </div>
204
+ </dom.div>
204
205
  );
205
206
  });
206
207
 
@@ -249,7 +250,7 @@ export const Radio = /*#__PURE__*/ (forwardRef as forwardRefType)(function Radio
249
250
  delete DOMProps.onClick;
250
251
 
251
252
  return (
252
- <label
253
+ <dom.label
253
254
  {...mergeProps(DOMProps, labelProps, hoverProps, renderProps)}
254
255
  ref={ref}
255
256
  data-selected={isSelected || undefined}
@@ -267,6 +268,6 @@ export const Radio = /*#__PURE__*/ (forwardRef as forwardRefType)(function Radio
267
268
  <SelectionIndicatorContext.Provider value={{isSelected}}>
268
269
  {renderProps.children}
269
270
  </SelectionIndicatorContext.Provider>
270
- </label>
271
+ </dom.label>
271
272
  );
272
273
  });
@@ -15,6 +15,7 @@ import {ButtonContext} from './Button';
15
15
  import {
16
16
  ClassNameOrFunction,
17
17
  ContextValue,
18
+ dom,
18
19
  Provider,
19
20
  RACValidation,
20
21
  removeDataAttributes,
@@ -120,7 +121,7 @@ export const SearchField = /*#__PURE__*/ createHideableComponent(function Search
120
121
  delete DOMProps.id;
121
122
 
122
123
  return (
123
- <div
124
+ <dom.div
124
125
  {...DOMProps}
125
126
  {...renderProps}
126
127
  ref={ref}
@@ -146,6 +147,6 @@ export const SearchField = /*#__PURE__*/ createHideableComponent(function Search
146
147
  ]}>
147
148
  {renderProps.children}
148
149
  </Provider>
149
- </div>
150
+ </dom.div>
150
151
  );
151
152
  });
package/src/Select.tsx CHANGED
@@ -15,6 +15,7 @@ import {ButtonContext} from './Button';
15
15
  import {
16
16
  ClassNameOrFunction,
17
17
  ContextValue,
18
+ dom,
18
19
  Provider,
19
20
  RACValidation,
20
21
  removeDataAttributes,
@@ -222,7 +223,7 @@ function SelectInner<T extends object>({props, selectRef: ref, collection}: Sele
222
223
  }],
223
224
  [FieldErrorContext, validation]
224
225
  ]}>
225
- <div
226
+ <dom.div
226
227
  {...mergeProps(DOMProps, renderProps, focusProps)}
227
228
  ref={ref}
228
229
  slot={props.slot || undefined}
@@ -236,7 +237,7 @@ function SelectInner<T extends object>({props, selectRef: ref, collection}: Sele
236
237
  <HiddenSelect
237
238
  {...hiddenSelectProps}
238
239
  autoComplete={props.autoComplete} />
239
- </div>
240
+ </dom.div>
240
241
  </Provider>
241
242
  );
242
243
  }
@@ -260,7 +261,7 @@ export interface SelectValueRenderProps<T> {
260
261
  state: SelectState<T, 'single' | 'multiple'>
261
262
  }
262
263
 
263
- export interface SelectValueProps<T extends object> extends Omit<HTMLAttributes<HTMLElement>, keyof RenderProps<unknown>>, RenderProps<SelectValueRenderProps<T>> {
264
+ export interface SelectValueProps<T extends object> extends Omit<HTMLAttributes<HTMLElement>, keyof RenderProps<unknown>>, RenderProps<SelectValueRenderProps<T>, 'span'> {
264
265
  /**
265
266
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
266
267
  * @default 'react-aria-SelectValue'
@@ -345,11 +346,11 @@ export const SelectValue = /*#__PURE__*/ createHideableComponent(function Select
345
346
  let DOMProps = filterDOMProps(props, {global: true});
346
347
 
347
348
  return (
348
- <span ref={ref} {...DOMProps} {...renderProps} data-placeholder={state.selectedItems.length === 0 || undefined}>
349
+ <dom.span ref={ref} {...DOMProps} {...renderProps} data-placeholder={state.selectedItems.length === 0 || undefined}>
349
350
  {/* clear description and error message slots */}
350
351
  <TextContext.Provider value={undefined}>
351
352
  {renderProps.children}
352
353
  </TextContext.Provider>
353
- </span>
354
+ </dom.span>
354
355
  );
355
356
  });
package/src/Separator.tsx CHANGED
@@ -12,12 +12,12 @@
12
12
 
13
13
  import {SeparatorProps as AriaSeparatorProps, useSeparator} from 'react-aria';
14
14
  import {BaseCollection, CollectionNode, createLeafComponent} from '@react-aria/collections';
15
- import {ContextValue, SlotProps, StyleProps, useContextProps} from './utils';
15
+ import {ContextValue, dom, DOMRenderProps, SlotProps, StyleProps, useContextProps} from './utils';
16
16
  import {filterDOMProps, mergeProps} from '@react-aria/utils';
17
17
  import {GlobalDOMAttributes} from '@react-types/shared';
18
- import React, {createContext, ElementType, ForwardedRef} from 'react';
18
+ import React, {createContext, ForwardedRef} from 'react';
19
19
 
20
- export interface SeparatorProps extends AriaSeparatorProps, StyleProps, SlotProps, GlobalDOMAttributes<HTMLElement> {
20
+ export interface SeparatorProps extends AriaSeparatorProps, StyleProps, SlotProps, DOMRenderProps<'hr' | 'div', undefined>, GlobalDOMAttributes<HTMLElement> {
21
21
  /**
22
22
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element.
23
23
  * @default 'react-aria-Separator'
@@ -49,11 +49,13 @@ export const Separator = /*#__PURE__*/ createLeafComponent(SeparatorNode, functi
49
49
  [props, ref] = useContextProps(props, ref, SeparatorContext);
50
50
 
51
51
  let {elementType, orientation, style, className, slot, ...otherProps} = props;
52
- let Element = (elementType as ElementType) || 'hr';
52
+ let Element = elementType || 'hr';
53
53
  if (Element === 'hr' && orientation === 'vertical') {
54
54
  Element = 'div';
55
55
  }
56
56
 
57
+ let ElementType = dom[Element];
58
+
57
59
  let {separatorProps} = useSeparator({
58
60
  ...otherProps,
59
61
  elementType,
@@ -63,7 +65,8 @@ export const Separator = /*#__PURE__*/ createLeafComponent(SeparatorNode, functi
63
65
  let DOMProps = filterDOMProps(props, {global: true});
64
66
 
65
67
  return (
66
- <Element
68
+ <ElementType
69
+ render={props.render}
67
70
  {...mergeProps(DOMProps, separatorProps)}
68
71
  style={style}
69
72
  className={className ?? 'react-aria-Separator'}
@@ -10,9 +10,9 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
+ import {dom, RenderProps, useRenderProps} from './utils';
13
14
  import {flushSync} from 'react-dom';
14
15
  import React, {createContext, ForwardedRef, forwardRef, HTMLAttributes, ReactNode, RefObject, useContext, useRef, useState} from 'react';
15
- import {RenderProps, useRenderProps} from './utils';
16
16
  import {useLayoutEffect} from '@react-aria/utils';
17
17
  import {useObjectRef} from 'react-aria';
18
18
 
@@ -63,7 +63,7 @@ export interface SharedElementProps extends SharedElementPropsBase {
63
63
  * An element that animates between its old and new position when moving between parents.
64
64
  */
65
65
  export const SharedElement = forwardRef(function SharedElement(props: SharedElementProps, ref: ForwardedRef<HTMLDivElement>) {
66
- let {name, isVisible = true, children, className, style, ...divProps} = props;
66
+ let {name, isVisible = true, children, className, style, render, ...divProps} = props;
67
67
  let [state, setState] = useState(isVisible ? 'visible' : 'hidden');
68
68
  let scopeRef = useContext(SharedElementContext);
69
69
  if (!scopeRef) {
@@ -164,6 +164,7 @@ export const SharedElement = forwardRef(function SharedElement(props: SharedElem
164
164
  children,
165
165
  className,
166
166
  style,
167
+ render,
167
168
  values: {
168
169
  isEntering: state === 'entering',
169
170
  isExiting: state === 'exiting'
@@ -175,7 +176,7 @@ export const SharedElement = forwardRef(function SharedElement(props: SharedElem
175
176
  }
176
177
 
177
178
  return (
178
- <div
179
+ <dom.div
179
180
  {...divProps}
180
181
  {...renderProps}
181
182
  ref={ref}
package/src/Slider.tsx CHANGED
@@ -14,6 +14,7 @@ import {AriaSliderProps, AriaSliderThumbProps, HoverEvents, mergeProps, Orientat
14
14
  import {
15
15
  ClassNameOrFunction,
16
16
  ContextValue,
17
+ dom,
17
18
  Provider,
18
19
  RenderProps,
19
20
  SlotProps,
@@ -101,7 +102,7 @@ export const Slider = /*#__PURE__*/ (forwardRef as forwardRefType)(function Slid
101
102
  [SliderOutputContext, outputProps],
102
103
  [LabelContext, {...labelProps, ref: labelRef}]
103
104
  ]}>
104
- <div
105
+ <dom.div
105
106
  {...mergeProps(DOMProps, renderProps, groupProps)}
106
107
  ref={ref}
107
108
  slot={props.slot || undefined}
@@ -111,7 +112,7 @@ export const Slider = /*#__PURE__*/ (forwardRef as forwardRefType)(function Slid
111
112
  );
112
113
  });
113
114
 
114
- export interface SliderOutputProps extends RenderProps<SliderRenderProps>, GlobalDOMAttributes<HTMLOutputElement> {
115
+ export interface SliderOutputProps extends RenderProps<SliderRenderProps, 'output'>, GlobalDOMAttributes<HTMLOutputElement> {
115
116
  /**
116
117
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
117
118
  * @default 'react-aria-SliderOutput'
@@ -125,12 +126,13 @@ interface SliderOutputContextValue extends Omit<OutputHTMLAttributes<HTMLOutputE
125
126
  */
126
127
  export const SliderOutput = /*#__PURE__*/ (forwardRef as forwardRefType)(function SliderOutput(props: SliderOutputProps, ref: ForwardedRef<HTMLOutputElement>) {
127
128
  [props, ref] = useContextProps(props, ref, SliderOutputContext);
128
- let {children, style, className, ...otherProps} = props;
129
+ let {children, style, className, render, ...otherProps} = props;
129
130
  let state = useContext(SliderStateContext)!;
130
131
  let renderProps = useRenderProps({
131
132
  className,
132
133
  style,
133
134
  children,
135
+ render,
134
136
  defaultChildren: state.getThumbValueLabel(0),
135
137
  defaultClassName: 'react-aria-SliderOutput',
136
138
  values: {
@@ -141,7 +143,7 @@ export const SliderOutput = /*#__PURE__*/ (forwardRef as forwardRefType)(functio
141
143
  });
142
144
 
143
145
  return (
144
- <output
146
+ <dom.output
145
147
  {...otherProps}
146
148
  {...renderProps}
147
149
  ref={ref}
@@ -187,7 +189,7 @@ export const SliderTrack = /*#__PURE__*/ (forwardRef as forwardRefType)(function
187
189
  });
188
190
 
189
191
  return (
190
- <div
192
+ <dom.div
191
193
  {...mergeProps(otherProps, hoverProps)}
192
194
  {...renderProps}
193
195
  ref={ref}
@@ -284,7 +286,7 @@ export const SliderThumb = /*#__PURE__*/ (forwardRef as forwardRefType)(function
284
286
  delete DOMProps.id;
285
287
 
286
288
  return (
287
- <div
289
+ <dom.div
288
290
  {...mergeProps(DOMProps, thumbProps, hoverProps)}
289
291
  {...renderProps}
290
292
  ref={ref}
@@ -303,6 +305,6 @@ export const SliderThumb = /*#__PURE__*/ (forwardRef as forwardRefType)(function
303
305
  ]}>
304
306
  {renderProps.children}
305
307
  </Provider>
306
- </div>
308
+ </dom.div>
307
309
  );
308
310
  });
package/src/Switch.tsx CHANGED
@@ -12,20 +12,21 @@
12
12
 
13
13
  import {AriaSwitchProps, HoverEvents, mergeProps, useFocusRing, useHover, useSwitch, VisuallyHidden} from 'react-aria';
14
14
  import {
15
- ClassNameOrFunction,
16
- ContextValue,
17
- removeDataAttributes,
18
- RenderProps,
19
- SlotProps,
20
- useContextProps,
21
- useRenderProps
15
+ ClassNameOrFunction,
16
+ ContextValue,
17
+ dom,
18
+ removeDataAttributes,
19
+ RenderProps,
20
+ SlotProps,
21
+ useContextProps,
22
+ useRenderProps
22
23
  } from './utils';
23
24
  import {filterDOMProps, mergeRefs, useObjectRef} from '@react-aria/utils';
24
25
  import {forwardRefType, GlobalDOMAttributes, RefObject} from '@react-types/shared';
25
26
  import React, {createContext, ForwardedRef, forwardRef} from 'react';
26
27
  import {ToggleState, useToggleState} from 'react-stately';
27
28
 
28
- export interface SwitchProps extends Omit<AriaSwitchProps, 'children'>, HoverEvents, RenderProps<SwitchRenderProps>, SlotProps, Omit<GlobalDOMAttributes<HTMLLabelElement>, 'onClick'> {
29
+ export interface SwitchProps extends Omit<AriaSwitchProps, 'children'>, HoverEvents, RenderProps<SwitchRenderProps, 'label'>, SlotProps, Omit<GlobalDOMAttributes<HTMLLabelElement>, 'onClick'> {
29
30
  /**
30
31
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
31
32
  * @default 'react-aria-Switch'
@@ -125,7 +126,7 @@ export const Switch = /*#__PURE__*/ (forwardRef as forwardRefType)(function Swit
125
126
  delete DOMProps.onClick;
126
127
 
127
128
  return (
128
- <label
129
+ <dom.label
129
130
  {...mergeProps(DOMProps, labelProps, hoverProps, renderProps)}
130
131
  ref={ref}
131
132
  slot={props.slot || undefined}
@@ -140,6 +141,6 @@ export const Switch = /*#__PURE__*/ (forwardRef as forwardRefType)(function Swit
140
141
  <input {...mergeProps(inputProps, focusProps)} ref={inputRef} />
141
142
  </VisuallyHidden>
142
143
  {renderProps.children}
143
- </label>
144
+ </dom.label>
144
145
  );
145
146
  });