react-aria-components 1.10.1 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/dist/Breadcrumbs.main.js +9 -2
  2. package/dist/Breadcrumbs.main.js.map +1 -1
  3. package/dist/Breadcrumbs.mjs +10 -3
  4. package/dist/Breadcrumbs.module.js +10 -3
  5. package/dist/Breadcrumbs.module.js.map +1 -1
  6. package/dist/Button.main.js +7 -17
  7. package/dist/Button.main.js.map +1 -1
  8. package/dist/Button.mjs +7 -17
  9. package/dist/Button.module.js +7 -17
  10. package/dist/Button.module.js.map +1 -1
  11. package/dist/Calendar.main.js +36 -14
  12. package/dist/Calendar.main.js.map +1 -1
  13. package/dist/Calendar.mjs +38 -16
  14. package/dist/Calendar.module.js +38 -16
  15. package/dist/Calendar.module.js.map +1 -1
  16. package/dist/Checkbox.main.js +8 -3
  17. package/dist/Checkbox.main.js.map +1 -1
  18. package/dist/Checkbox.mjs +10 -5
  19. package/dist/Checkbox.module.js +10 -5
  20. package/dist/Checkbox.module.js.map +1 -1
  21. package/dist/Collection.main.js.map +1 -1
  22. package/dist/Collection.module.js.map +1 -1
  23. package/dist/ColorArea.main.js +4 -4
  24. package/dist/ColorArea.main.js.map +1 -1
  25. package/dist/ColorArea.mjs +5 -5
  26. package/dist/ColorArea.module.js +5 -5
  27. package/dist/ColorArea.module.js.map +1 -1
  28. package/dist/ColorField.main.js +14 -1
  29. package/dist/ColorField.main.js.map +1 -1
  30. package/dist/ColorField.mjs +14 -1
  31. package/dist/ColorField.module.js +14 -1
  32. package/dist/ColorField.module.js.map +1 -1
  33. package/dist/ColorSlider.main.js +3 -1
  34. package/dist/ColorSlider.main.js.map +1 -1
  35. package/dist/ColorSlider.mjs +3 -1
  36. package/dist/ColorSlider.module.js +3 -1
  37. package/dist/ColorSlider.module.js.map +1 -1
  38. package/dist/ColorSwatch.main.js +6 -2
  39. package/dist/ColorSwatch.main.js.map +1 -1
  40. package/dist/ColorSwatch.mjs +6 -2
  41. package/dist/ColorSwatch.module.js +6 -2
  42. package/dist/ColorSwatch.module.js.map +1 -1
  43. package/dist/ColorSwatchPicker.main.js.map +1 -1
  44. package/dist/ColorSwatchPicker.module.js.map +1 -1
  45. package/dist/ColorThumb.main.js +3 -1
  46. package/dist/ColorThumb.main.js.map +1 -1
  47. package/dist/ColorThumb.mjs +3 -1
  48. package/dist/ColorThumb.module.js +3 -1
  49. package/dist/ColorThumb.module.js.map +1 -1
  50. package/dist/ColorWheel.main.js +3 -1
  51. package/dist/ColorWheel.main.js.map +1 -1
  52. package/dist/ColorWheel.mjs +3 -1
  53. package/dist/ColorWheel.module.js +3 -1
  54. package/dist/ColorWheel.module.js.map +1 -1
  55. package/dist/ComboBox.main.js +4 -1
  56. package/dist/ComboBox.main.js.map +1 -1
  57. package/dist/ComboBox.mjs +4 -1
  58. package/dist/ComboBox.module.js +4 -1
  59. package/dist/ComboBox.module.js.map +1 -1
  60. package/dist/DateField.main.js +16 -3
  61. package/dist/DateField.main.js.map +1 -1
  62. package/dist/DateField.mjs +16 -3
  63. package/dist/DateField.module.js +16 -3
  64. package/dist/DateField.module.js.map +1 -1
  65. package/dist/DatePicker.main.js +15 -8
  66. package/dist/DatePicker.main.js.map +1 -1
  67. package/dist/DatePicker.mjs +16 -9
  68. package/dist/DatePicker.module.js +16 -9
  69. package/dist/DatePicker.module.js.map +1 -1
  70. package/dist/Dialog.main.js +4 -3
  71. package/dist/Dialog.main.js.map +1 -1
  72. package/dist/Dialog.mjs +5 -4
  73. package/dist/Dialog.module.js +5 -4
  74. package/dist/Dialog.module.js.map +1 -1
  75. package/dist/Disclosure.main.js +12 -10
  76. package/dist/Disclosure.main.js.map +1 -1
  77. package/dist/Disclosure.mjs +13 -11
  78. package/dist/Disclosure.module.js +13 -11
  79. package/dist/Disclosure.module.js.map +1 -1
  80. package/dist/DragAndDrop.main.js +31 -3
  81. package/dist/DragAndDrop.main.js.map +1 -1
  82. package/dist/DragAndDrop.mjs +31 -3
  83. package/dist/DragAndDrop.module.js +31 -3
  84. package/dist/DragAndDrop.module.js.map +1 -1
  85. package/dist/DropZone.main.js +4 -3
  86. package/dist/DropZone.main.js.map +1 -1
  87. package/dist/DropZone.mjs +4 -3
  88. package/dist/DropZone.module.js +4 -3
  89. package/dist/DropZone.module.js.map +1 -1
  90. package/dist/FieldError.main.js +3 -1
  91. package/dist/FieldError.main.js.map +1 -1
  92. package/dist/FieldError.mjs +3 -1
  93. package/dist/FieldError.module.js +3 -1
  94. package/dist/FieldError.module.js.map +1 -1
  95. package/dist/FileTrigger.main.js +3 -1
  96. package/dist/FileTrigger.main.js.map +1 -1
  97. package/dist/FileTrigger.mjs +3 -1
  98. package/dist/FileTrigger.module.js +3 -1
  99. package/dist/FileTrigger.module.js.map +1 -1
  100. package/dist/Form.main.js.map +1 -1
  101. package/dist/Form.module.js.map +1 -1
  102. package/dist/GridList.main.js +20 -13
  103. package/dist/GridList.main.js.map +1 -1
  104. package/dist/GridList.mjs +21 -14
  105. package/dist/GridList.module.js +21 -14
  106. package/dist/GridList.module.js.map +1 -1
  107. package/dist/HiddenDateInput.main.js +118 -0
  108. package/dist/HiddenDateInput.main.js.map +1 -0
  109. package/dist/HiddenDateInput.mjs +109 -0
  110. package/dist/HiddenDateInput.module.js +109 -0
  111. package/dist/HiddenDateInput.module.js.map +1 -0
  112. package/dist/Link.main.js +7 -1
  113. package/dist/Link.main.js.map +1 -1
  114. package/dist/Link.mjs +7 -1
  115. package/dist/Link.module.js +7 -1
  116. package/dist/Link.module.js.map +1 -1
  117. package/dist/ListBox.main.js +22 -19
  118. package/dist/ListBox.main.js.map +1 -1
  119. package/dist/ListBox.mjs +23 -20
  120. package/dist/ListBox.module.js +23 -20
  121. package/dist/ListBox.module.js.map +1 -1
  122. package/dist/Menu.main.js +15 -8
  123. package/dist/Menu.main.js.map +1 -1
  124. package/dist/Menu.mjs +16 -9
  125. package/dist/Menu.module.js +16 -9
  126. package/dist/Menu.module.js.map +1 -1
  127. package/dist/Meter.main.js +6 -2
  128. package/dist/Meter.main.js.map +1 -1
  129. package/dist/Meter.mjs +6 -2
  130. package/dist/Meter.module.js +6 -2
  131. package/dist/Meter.module.js.map +1 -1
  132. package/dist/Modal.main.js +31 -6
  133. package/dist/Modal.main.js.map +1 -1
  134. package/dist/Modal.mjs +31 -6
  135. package/dist/Modal.module.js +31 -6
  136. package/dist/Modal.module.js.map +1 -1
  137. package/dist/NumberField.main.js +4 -1
  138. package/dist/NumberField.main.js.map +1 -1
  139. package/dist/NumberField.mjs +4 -1
  140. package/dist/NumberField.module.js +4 -1
  141. package/dist/NumberField.module.js.map +1 -1
  142. package/dist/Popover.main.js +3 -1
  143. package/dist/Popover.main.js.map +1 -1
  144. package/dist/Popover.mjs +3 -1
  145. package/dist/Popover.module.js +3 -1
  146. package/dist/Popover.module.js.map +1 -1
  147. package/dist/ProgressBar.main.js +6 -2
  148. package/dist/ProgressBar.main.js.map +1 -1
  149. package/dist/ProgressBar.mjs +6 -2
  150. package/dist/ProgressBar.module.js +6 -2
  151. package/dist/ProgressBar.module.js.map +1 -1
  152. package/dist/RadioGroup.main.js +8 -3
  153. package/dist/RadioGroup.main.js.map +1 -1
  154. package/dist/RadioGroup.mjs +9 -4
  155. package/dist/RadioGroup.module.js +9 -4
  156. package/dist/RadioGroup.module.js.map +1 -1
  157. package/dist/SearchField.main.js +3 -1
  158. package/dist/SearchField.main.js.map +1 -1
  159. package/dist/SearchField.mjs +3 -1
  160. package/dist/SearchField.module.js +3 -1
  161. package/dist/SearchField.module.js.map +1 -1
  162. package/dist/Select.main.js +12 -14
  163. package/dist/Select.main.js.map +1 -1
  164. package/dist/Select.mjs +13 -15
  165. package/dist/Select.module.js +13 -15
  166. package/dist/Select.module.js.map +1 -1
  167. package/dist/Separator.main.js +4 -2
  168. package/dist/Separator.main.js.map +1 -1
  169. package/dist/Separator.mjs +5 -3
  170. package/dist/Separator.module.js +5 -3
  171. package/dist/Separator.module.js.map +1 -1
  172. package/dist/Slider.main.js +7 -5
  173. package/dist/Slider.main.js.map +1 -1
  174. package/dist/Slider.mjs +8 -6
  175. package/dist/Slider.module.js +8 -6
  176. package/dist/Slider.module.js.map +1 -1
  177. package/dist/Switch.main.js +4 -1
  178. package/dist/Switch.main.js.map +1 -1
  179. package/dist/Switch.mjs +4 -1
  180. package/dist/Switch.module.js +4 -1
  181. package/dist/Switch.module.js.map +1 -1
  182. package/dist/Table.main.js +47 -26
  183. package/dist/Table.main.js.map +1 -1
  184. package/dist/Table.mjs +48 -27
  185. package/dist/Table.module.js +48 -27
  186. package/dist/Table.module.js.map +1 -1
  187. package/dist/Tabs.main.js +20 -10
  188. package/dist/Tabs.main.js.map +1 -1
  189. package/dist/Tabs.mjs +21 -11
  190. package/dist/Tabs.module.js +21 -11
  191. package/dist/Tabs.module.js.map +1 -1
  192. package/dist/TagGroup.main.js +14 -8
  193. package/dist/TagGroup.main.js.map +1 -1
  194. package/dist/TagGroup.mjs +14 -8
  195. package/dist/TagGroup.module.js +14 -8
  196. package/dist/TagGroup.module.js.map +1 -1
  197. package/dist/TextField.main.js +13 -1
  198. package/dist/TextField.main.js.map +1 -1
  199. package/dist/TextField.mjs +13 -1
  200. package/dist/TextField.module.js +13 -1
  201. package/dist/TextField.module.js.map +1 -1
  202. package/dist/Toast.main.js +9 -5
  203. package/dist/Toast.main.js.map +1 -1
  204. package/dist/Toast.mjs +9 -5
  205. package/dist/Toast.module.js +9 -5
  206. package/dist/Toast.module.js.map +1 -1
  207. package/dist/ToggleButton.main.js +8 -2
  208. package/dist/ToggleButton.main.js.map +1 -1
  209. package/dist/ToggleButton.mjs +8 -2
  210. package/dist/ToggleButton.module.js +8 -2
  211. package/dist/ToggleButton.module.js.map +1 -1
  212. package/dist/ToggleButtonGroup.main.js +6 -2
  213. package/dist/ToggleButtonGroup.main.js.map +1 -1
  214. package/dist/ToggleButtonGroup.mjs +6 -2
  215. package/dist/ToggleButtonGroup.module.js +6 -2
  216. package/dist/ToggleButtonGroup.module.js.map +1 -1
  217. package/dist/Toolbar.main.js +4 -3
  218. package/dist/Toolbar.main.js.map +1 -1
  219. package/dist/Toolbar.mjs +4 -3
  220. package/dist/Toolbar.module.js +4 -3
  221. package/dist/Toolbar.module.js.map +1 -1
  222. package/dist/Tooltip.main.js +5 -3
  223. package/dist/Tooltip.main.js.map +1 -1
  224. package/dist/Tooltip.mjs +5 -3
  225. package/dist/Tooltip.module.js +5 -3
  226. package/dist/Tooltip.module.js.map +1 -1
  227. package/dist/Tree.main.js +73 -26
  228. package/dist/Tree.main.js.map +1 -1
  229. package/dist/Tree.mjs +74 -27
  230. package/dist/Tree.module.js +74 -27
  231. package/dist/Tree.module.js.map +1 -1
  232. package/dist/TreeDropTargetDelegate.main.js +8 -5
  233. package/dist/TreeDropTargetDelegate.main.js.map +1 -1
  234. package/dist/TreeDropTargetDelegate.mjs +8 -5
  235. package/dist/TreeDropTargetDelegate.module.js +8 -5
  236. package/dist/TreeDropTargetDelegate.module.js.map +1 -1
  237. package/dist/import.mjs +5 -5
  238. package/dist/main.js +4 -4
  239. package/dist/main.js.map +1 -1
  240. package/dist/module.js +5 -5
  241. package/dist/module.js.map +1 -1
  242. package/dist/types.d.ts +212 -203
  243. package/dist/types.d.ts.map +1 -1
  244. package/dist/useDragAndDrop.main.js.map +1 -1
  245. package/dist/useDragAndDrop.module.js.map +1 -1
  246. package/dist/utils.main.js.map +1 -1
  247. package/dist/utils.module.js.map +1 -1
  248. package/i18n/de-DE.js +1 -1
  249. package/i18n/de-DE.mjs +1 -1
  250. package/package.json +25 -25
  251. package/src/Breadcrumbs.tsx +10 -6
  252. package/src/Button.tsx +8 -30
  253. package/src/Calendar.tsx +41 -24
  254. package/src/Checkbox.tsx +8 -6
  255. package/src/Collection.tsx +2 -2
  256. package/src/ColorArea.tsx +5 -6
  257. package/src/ColorField.tsx +6 -4
  258. package/src/ColorSlider.tsx +3 -2
  259. package/src/ColorSwatch.tsx +6 -3
  260. package/src/ColorSwatchPicker.tsx +3 -3
  261. package/src/ColorThumb.tsx +3 -3
  262. package/src/ColorWheel.tsx +6 -5
  263. package/src/ComboBox.tsx +4 -4
  264. package/src/DateField.tsx +15 -10
  265. package/src/DatePicker.tsx +14 -12
  266. package/src/Dialog.tsx +6 -6
  267. package/src/Disclosure.tsx +10 -14
  268. package/src/DragAndDrop.tsx +31 -1
  269. package/src/DropZone.tsx +4 -5
  270. package/src/FieldError.tsx +3 -3
  271. package/src/FileTrigger.tsx +4 -3
  272. package/src/Form.tsx +2 -1
  273. package/src/GridList.tsx +25 -18
  274. package/src/HiddenDateInput.tsx +142 -0
  275. package/src/Link.tsx +7 -3
  276. package/src/ListBox.tsx +30 -26
  277. package/src/Menu.tsx +15 -12
  278. package/src/Meter.tsx +6 -3
  279. package/src/Modal.tsx +16 -5
  280. package/src/NumberField.tsx +4 -4
  281. package/src/Popover.tsx +3 -3
  282. package/src/ProgressBar.tsx +6 -2
  283. package/src/RadioGroup.tsx +8 -6
  284. package/src/SearchField.tsx +3 -2
  285. package/src/Select.tsx +13 -16
  286. package/src/Separator.tsx +6 -4
  287. package/src/Slider.tsx +9 -11
  288. package/src/Switch.tsx +4 -3
  289. package/src/Table.tsx +58 -56
  290. package/src/Tabs.tsx +18 -15
  291. package/src/TagGroup.tsx +13 -12
  292. package/src/TextField.tsx +5 -2
  293. package/src/Toast.tsx +10 -8
  294. package/src/ToggleButton.tsx +8 -4
  295. package/src/ToggleButtonGroup.tsx +6 -4
  296. package/src/Toolbar.tsx +4 -5
  297. package/src/Tooltip.tsx +6 -5
  298. package/src/Tree.tsx +90 -42
  299. package/src/TreeDropTargetDelegate.ts +5 -1
  300. package/src/index.ts +8 -8
  301. package/src/useDragAndDrop.tsx +2 -2
  302. package/src/utils.tsx +9 -9
@@ -2,6 +2,7 @@ import {AriaColorSliderProps, Orientation, useColorSlider, useLocale} from 'reac
2
2
  import {ColorSliderContext} from './RSPContexts';
3
3
  import {ColorSliderState, useColorSliderState} from 'react-stately';
4
4
  import {filterDOMProps} from '@react-aria/utils';
5
+ import {GlobalDOMAttributes} from '@react-types/shared';
5
6
  import {InternalColorThumbContext} from './ColorThumb';
6
7
  import {LabelContext} from './Label';
7
8
  import {Provider, RenderProps, SlotProps, useContextProps, useRenderProps, useSlot} from './utils';
@@ -25,7 +26,7 @@ export interface ColorSliderRenderProps {
25
26
  state: ColorSliderState
26
27
  }
27
28
 
28
- export interface ColorSliderProps extends Omit<AriaColorSliderProps, 'label'>, RenderProps<ColorSliderRenderProps>, SlotProps {}
29
+ export interface ColorSliderProps extends Omit<AriaColorSliderProps, 'label'>, RenderProps<ColorSliderRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
29
30
 
30
31
  export const ColorSliderStateContext = createContext<ColorSliderState | null>(null);
31
32
 
@@ -65,7 +66,7 @@ export const ColorSlider = forwardRef(function ColorSlider(props: ColorSliderPro
65
66
  defaultClassName: 'react-aria-ColorSlider'
66
67
  });
67
68
 
68
- let DOMProps = filterDOMProps(props);
69
+ let DOMProps = filterDOMProps(props, {global: true});
69
70
  delete DOMProps.id;
70
71
 
71
72
  return (
@@ -1,6 +1,8 @@
1
1
  import {AriaColorSwatchProps, useColorSwatch} from 'react-aria';
2
2
  import {Color} from 'react-stately';
3
3
  import {ContextValue, SlotProps, StyleRenderProps, useContextProps, useRenderProps} from './utils';
4
+ import {filterDOMProps, mergeProps} from '@react-aria/utils';
5
+ import {GlobalDOMAttributes} from '@react-types/shared';
4
6
  import React, {createContext, ForwardedRef, forwardRef} from 'react';
5
7
 
6
8
  export interface ColorSwatchRenderProps {
@@ -8,7 +10,7 @@ export interface ColorSwatchRenderProps {
8
10
  color: Color
9
11
  }
10
12
 
11
- export interface ColorSwatchProps extends AriaColorSwatchProps, StyleRenderProps<ColorSwatchRenderProps>, SlotProps {}
13
+ export interface ColorSwatchProps extends AriaColorSwatchProps, StyleRenderProps<ColorSwatchRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
12
14
 
13
15
  export const ColorSwatchContext = createContext<ContextValue<ColorSwatchProps, HTMLDivElement>>(null);
14
16
 
@@ -26,11 +28,12 @@ export const ColorSwatch = forwardRef(function ColorSwatch(props: ColorSwatchPro
26
28
  color
27
29
  }
28
30
  });
31
+
32
+ let DOMProps = filterDOMProps(props, {global: true});
29
33
 
30
34
  return (
31
35
  <div
32
- {...colorSwatchProps}
33
- {...renderProps}
36
+ {...mergeProps(DOMProps, colorSwatchProps, renderProps)}
34
37
  slot={props.slot || undefined}
35
38
  ref={ref} />
36
39
  );
@@ -1,4 +1,4 @@
1
- import {AriaLabelingProps, HoverEvents, ValueBase} from '@react-types/shared';
1
+ import {AriaLabelingProps, GlobalDOMAttributes, HoverEvents, PressEvents, ValueBase} from '@react-types/shared';
2
2
  import {Color, parseColor, useColorPickerState} from 'react-stately';
3
3
  import {ColorSwatchContext} from './ColorSwatch';
4
4
  import {composeRenderProps, ContextValue, RenderProps, StyleRenderProps, useContextProps} from './utils';
@@ -10,7 +10,7 @@ import React, {createContext, ForwardedRef, forwardRef, ReactNode, useContext, u
10
10
  import {useLocale, useLocalizedStringFormatter} from 'react-aria';
11
11
 
12
12
  export interface ColorSwatchPickerRenderProps extends Omit<ListBoxRenderProps, 'isDropTarget'> {}
13
- export interface ColorSwatchPickerProps extends ValueBase<string | Color, Color>, AriaLabelingProps, StyleRenderProps<ColorSwatchPickerRenderProps> {
13
+ export interface ColorSwatchPickerProps extends ValueBase<string | Color, Color>, AriaLabelingProps, StyleRenderProps<ColorSwatchPickerRenderProps>, GlobalDOMAttributes<HTMLDivElement> {
14
14
  /** The children of the ColorSwatchPicker. */
15
15
  children?: ReactNode,
16
16
  /**
@@ -61,7 +61,7 @@ export interface ColorSwatchPickerItemRenderProps extends Omit<ListBoxItemRender
61
61
  color: Color
62
62
  }
63
63
 
64
- export interface ColorSwatchPickerItemProps extends RenderProps<ColorSwatchPickerItemRenderProps>, HoverEvents {
64
+ export interface ColorSwatchPickerItemProps extends RenderProps<ColorSwatchPickerItemRenderProps>, HoverEvents, PressEvents, Omit<GlobalDOMAttributes<HTMLDivElement>, 'onClick'> {
65
65
  /** The color of the swatch. */
66
66
  color: string | Color,
67
67
  /** Whether the color swatch is disabled. */
@@ -1,6 +1,6 @@
1
1
  import {Color} from 'react-stately';
2
2
  import {filterDOMProps} from '@react-aria/utils';
3
- import {HoverEvents, RefObject} from '@react-types/shared';
3
+ import {GlobalDOMAttributes, HoverEvents, RefObject} from '@react-types/shared';
4
4
  import {mergeProps, useFocusRing, useHover} from 'react-aria';
5
5
  import React, {createContext, ForwardedRef, forwardRef, HTMLAttributes, InputHTMLAttributes, useContext} from 'react';
6
6
  import {RenderProps, useRenderProps} from './utils';
@@ -54,7 +54,7 @@ export interface ColorThumbRenderProps {
54
54
  isDisabled: boolean
55
55
  }
56
56
 
57
- export interface ColorThumbProps extends HoverEvents, RenderProps<ColorThumbRenderProps> {}
57
+ export interface ColorThumbProps extends HoverEvents, RenderProps<ColorThumbRenderProps>, GlobalDOMAttributes<HTMLDivElement> {}
58
58
 
59
59
  /**
60
60
  * A color thumb appears within a ColorArea, ColorSlider, or ColorWheel and allows a user to drag to adjust the color value.
@@ -81,7 +81,7 @@ export const ColorThumb = forwardRef(function ColorThumb(props: ColorThumbProps,
81
81
  }
82
82
  });
83
83
 
84
- let DOMProps = filterDOMProps(props as any);
84
+ let DOMProps = filterDOMProps(props, {global: true});
85
85
  delete DOMProps.id;
86
86
 
87
87
  return (
@@ -3,6 +3,7 @@ import {ColorWheelContext} from './RSPContexts';
3
3
  import {ColorWheelState, useColorWheelState} from 'react-stately';
4
4
  import {ContextValue, Provider, RenderProps, SlotProps, StyleRenderProps, useContextProps, useRenderProps} from './utils';
5
5
  import {filterDOMProps} from '@react-aria/utils';
6
+ import {GlobalDOMAttributes} from '@react-types/shared';
6
7
  import {InternalColorThumbContext} from './ColorThumb';
7
8
  import React, {createContext, ForwardedRef, forwardRef, HTMLAttributes, useContext, useRef} from 'react';
8
9
 
@@ -13,12 +14,12 @@ export interface ColorWheelRenderProps {
13
14
  */
14
15
  isDisabled: boolean,
15
16
  /**
16
- * State of the color color wheel.
17
+ * State of the color wheel.
17
18
  */
18
19
  state: ColorWheelState
19
20
  }
20
21
 
21
- export interface ColorWheelProps extends AriaColorWheelOptions, RenderProps<ColorWheelRenderProps>, SlotProps {}
22
+ export interface ColorWheelProps extends AriaColorWheelOptions, RenderProps<ColorWheelRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
22
23
 
23
24
  export const ColorWheelStateContext = createContext<ColorWheelState | null>(null);
24
25
 
@@ -43,7 +44,7 @@ export const ColorWheel = forwardRef(function ColorWheel(props: ColorWheelProps,
43
44
  }
44
45
  });
45
46
 
46
- let DOMProps = filterDOMProps(props);
47
+ let DOMProps = filterDOMProps(props, {global: true});
47
48
  delete DOMProps.id;
48
49
 
49
50
  return (
@@ -66,8 +67,8 @@ export const ColorWheel = forwardRef(function ColorWheel(props: ColorWheelProps,
66
67
  });
67
68
 
68
69
  export interface ColorWheelTrackRenderProps extends ColorWheelRenderProps {}
69
- export interface ColorWheelTrackProps extends StyleRenderProps<ColorWheelTrackRenderProps> {}
70
- interface ColorWheelTrackContextValue extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'style'>, ColorWheelTrackProps {}
70
+ export interface ColorWheelTrackProps extends StyleRenderProps<ColorWheelTrackRenderProps>, GlobalDOMAttributes<HTMLDivElement> {}
71
+ interface ColorWheelTrackContextValue extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'style'>, StyleRenderProps<ColorWheelTrackRenderProps> {}
71
72
 
72
73
  export const ColorWheelTrackContext = createContext<ContextValue<ColorWheelTrackContextValue, HTMLDivElement>>(null);
73
74
 
package/src/ComboBox.tsx CHANGED
@@ -17,7 +17,7 @@ import {ContextValue, Provider, RACValidation, removeDataAttributes, RenderProps
17
17
  import {FieldErrorContext} from './FieldError';
18
18
  import {filterDOMProps, useResizeObserver} from '@react-aria/utils';
19
19
  import {FormContext} from './Form';
20
- import {forwardRefType, RefObject} from '@react-types/shared';
20
+ import {forwardRefType, GlobalDOMAttributes, RefObject} from '@react-types/shared';
21
21
  import {GroupContext} from './Group';
22
22
  import {InputContext} from './Input';
23
23
  import {LabelContext} from './Label';
@@ -50,7 +50,7 @@ export interface ComboBoxRenderProps {
50
50
  isRequired: boolean
51
51
  }
52
52
 
53
- export interface ComboBoxProps<T extends object> extends Omit<AriaComboBoxProps<T>, 'children' | 'placeholder' | 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<ComboBoxRenderProps>, SlotProps {
53
+ export interface ComboBoxProps<T extends object> extends Omit<AriaComboBoxProps<T>, 'children' | 'placeholder' | 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<ComboBoxRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {
54
54
  /** The filter function used to determine if a option should be included in the combo box list. */
55
55
  defaultFilter?: (textValue: string, inputValue: string) => boolean,
56
56
  /**
@@ -182,7 +182,7 @@ function ComboBoxInner<T extends object>({props, collection, comboBoxRef: ref}:
182
182
  defaultClassName: 'react-aria-ComboBox'
183
183
  });
184
184
 
185
- let DOMProps = filterDOMProps(props);
185
+ let DOMProps = filterDOMProps(props, {global: true});
186
186
  delete DOMProps.id;
187
187
 
188
188
  return (
@@ -224,7 +224,7 @@ function ComboBoxInner<T extends object>({props, collection, comboBoxRef: ref}:
224
224
  data-disabled={props.isDisabled || undefined}
225
225
  data-invalid={validation.isInvalid || undefined}
226
226
  data-required={props.isRequired || undefined} />
227
- {name && formValue === 'key' && <input type="hidden" name={name} value={state.selectedKey ?? ''} />}
227
+ {name && formValue === 'key' && <input type="hidden" name={name} form={props.form} value={state.selectedKey ?? ''} />}
228
228
  </Provider>
229
229
  );
230
230
  }
package/src/DateField.tsx CHANGED
@@ -16,8 +16,9 @@ import {DateFieldState, DateSegmentType, DateSegment as IDateSegment, TimeFieldS
16
16
  import {FieldErrorContext} from './FieldError';
17
17
  import {filterDOMProps, useObjectRef} from '@react-aria/utils';
18
18
  import {FormContext} from './Form';
19
- import {forwardRefType} from '@react-types/shared';
19
+ import {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';
20
20
  import {Group, GroupContext} from './Group';
21
+ import {HiddenDateInput} from './HiddenDateInput';
21
22
  import {Input, InputContext} from './Input';
22
23
  import {LabelContext} from './Label';
23
24
  import React, {cloneElement, createContext, ForwardedRef, forwardRef, JSX, ReactElement, useContext, useRef} from 'react';
@@ -39,8 +40,8 @@ export interface DateFieldRenderProps {
39
40
  */
40
41
  isDisabled: boolean
41
42
  }
42
- export interface DateFieldProps<T extends DateValue> extends Omit<AriaDateFieldProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<DateFieldRenderProps>, SlotProps {}
43
- export interface TimeFieldProps<T extends TimeValue> extends Omit<AriaTimeFieldProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<DateFieldRenderProps>, SlotProps {}
43
+ export interface DateFieldProps<T extends DateValue> extends Omit<AriaDateFieldProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<DateFieldRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
44
+ export interface TimeFieldProps<T extends TimeValue> extends Omit<AriaTimeFieldProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<DateFieldRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
44
45
 
45
46
  export const DateFieldContext = createContext<ContextValue<DateFieldProps<any>, HTMLDivElement>>(null);
46
47
  export const TimeFieldContext = createContext<ContextValue<TimeFieldProps<any>, HTMLDivElement>>(null);
@@ -85,7 +86,7 @@ export const DateField = /*#__PURE__*/ (forwardRef as forwardRefType)(function D
85
86
  defaultClassName: 'react-aria-DateField'
86
87
  });
87
88
 
88
- let DOMProps = filterDOMProps(props);
89
+ let DOMProps = filterDOMProps(props, {global: true});
89
90
  delete DOMProps.id;
90
91
 
91
92
  return (
@@ -110,6 +111,11 @@ export const DateField = /*#__PURE__*/ (forwardRef as forwardRefType)(function D
110
111
  slot={props.slot || undefined}
111
112
  data-invalid={state.isInvalid || undefined}
112
113
  data-disabled={state.isDisabled || undefined} />
114
+ <HiddenDateInput
115
+ autoComplete={props.autoComplete}
116
+ name={props.name}
117
+ isDisabled={props.isDisabled}
118
+ state={state} />
113
119
  </Provider>
114
120
  );
115
121
  });
@@ -151,7 +157,7 @@ export const TimeField = /*#__PURE__*/ (forwardRef as forwardRefType)(function T
151
157
  defaultClassName: 'react-aria-TimeField'
152
158
  });
153
159
 
154
- let DOMProps = filterDOMProps(props);
160
+ let DOMProps = filterDOMProps(props, {global: true});
155
161
  delete DOMProps.id;
156
162
 
157
163
  return (
@@ -209,7 +215,7 @@ export interface DateInputRenderProps {
209
215
  isInvalid: boolean
210
216
  }
211
217
 
212
- export interface DateInputProps extends SlotProps, StyleRenderProps<DateInputRenderProps> {
218
+ export interface DateInputProps extends SlotProps, StyleRenderProps<DateInputRenderProps>, GlobalDOMAttributes<HTMLDivElement> {
213
219
  children: (segment: IDateSegment) => ReactElement
214
220
  }
215
221
 
@@ -315,7 +321,7 @@ export interface DateSegmentRenderProps extends Omit<IDateSegment, 'isEditable'>
315
321
  type: DateSegmentType
316
322
  }
317
323
 
318
- export interface DateSegmentProps extends RenderProps<DateSegmentRenderProps>, HoverEvents {
324
+ export interface DateSegmentProps extends RenderProps<DateSegmentRenderProps>, HoverEvents, GlobalDOMAttributes<HTMLSpanElement> {
319
325
  segment: IDateSegment
320
326
  }
321
327
 
@@ -323,7 +329,7 @@ export interface DateSegmentProps extends RenderProps<DateSegmentRenderProps>, H
323
329
  * A date segment displays an individual unit of a date and time, and allows users to edit
324
330
  * the value by typing or using the arrow keys to increment and decrement.
325
331
  */
326
- export const DateSegment = /*#__PURE__*/ (forwardRef as forwardRefType)(function DateSegment({segment, ...otherProps}: DateSegmentProps, ref: ForwardedRef<HTMLDivElement>) {
332
+ export const DateSegment = /*#__PURE__*/ (forwardRef as forwardRefType)(function DateSegment({segment, ...otherProps}: DateSegmentProps, ref: ForwardedRef<HTMLSpanElement>) {
327
333
  let dateFieldState = useContext(DateFieldStateContext);
328
334
  let timeFieldState = useContext(TimeFieldStateContext);
329
335
  let state = dateFieldState ?? timeFieldState!;
@@ -347,10 +353,9 @@ export const DateSegment = /*#__PURE__*/ (forwardRef as forwardRefType)(function
347
353
  defaultClassName: 'react-aria-DateSegment'
348
354
  });
349
355
 
350
-
351
356
  return (
352
357
  <span
353
- {...mergeProps(filterDOMProps(otherProps as any), segmentProps, focusProps, hoverProps)}
358
+ {...mergeProps(filterDOMProps(otherProps, {global: true}), segmentProps, focusProps, hoverProps)}
354
359
  {...renderProps}
355
360
  style={segmentProps.style}
356
361
  ref={domRef}
@@ -17,10 +17,11 @@ import {DateFieldContext} from './DateField';
17
17
  import {DatePickerState, DatePickerStateOptions, DateRangePickerState, DateRangePickerStateOptions, useDatePickerState, useDateRangePickerState} from 'react-stately';
18
18
  import {DialogContext, OverlayTriggerStateContext} from './Dialog';
19
19
  import {FieldErrorContext} from './FieldError';
20
- import {filterDOMProps, useResizeObserver} from '@react-aria/utils';
20
+ import {filterDOMProps, mergeProps, useResizeObserver} from '@react-aria/utils';
21
21
  import {FormContext} from './Form';
22
- import {forwardRefType} from '@react-types/shared';
22
+ import {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';
23
23
  import {GroupContext} from './Group';
24
+ import {HiddenDateInput} from './HiddenDateInput';
24
25
  import {LabelContext} from './Label';
25
26
  import {PopoverContext} from './Popover';
26
27
  import React, {createContext, ForwardedRef, forwardRef, useCallback, useRef, useState} from 'react';
@@ -64,8 +65,8 @@ export interface DateRangePickerRenderProps extends Omit<DatePickerRenderProps,
64
65
  state: DateRangePickerState
65
66
  }
66
67
 
67
- export interface DatePickerProps<T extends DateValue> extends Omit<AriaDatePickerProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, Pick<DatePickerStateOptions<T>, 'shouldCloseOnSelect'>, RACValidation, RenderProps<DatePickerRenderProps>, SlotProps {}
68
- export interface DateRangePickerProps<T extends DateValue> extends Omit<AriaDateRangePickerProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, Pick<DateRangePickerStateOptions<T>, 'shouldCloseOnSelect'>, RACValidation, RenderProps<DateRangePickerRenderProps>, SlotProps {}
68
+ export interface DatePickerProps<T extends DateValue> extends Omit<AriaDatePickerProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, Pick<DatePickerStateOptions<T>, 'shouldCloseOnSelect'>, RACValidation, RenderProps<DatePickerRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
69
+ export interface DateRangePickerProps<T extends DateValue> extends Omit<AriaDateRangePickerProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, Pick<DateRangePickerStateOptions<T>, 'shouldCloseOnSelect'>, RACValidation, RenderProps<DateRangePickerRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
69
70
 
70
71
  export const DatePickerContext = createContext<ContextValue<DatePickerProps<any>, HTMLDivElement>>(null);
71
72
  export const DateRangePickerContext = createContext<ContextValue<DateRangePickerProps<any>, HTMLDivElement>>(null);
@@ -134,7 +135,7 @@ export const DatePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(function
134
135
  defaultClassName: 'react-aria-DatePicker'
135
136
  });
136
137
 
137
- let DOMProps = filterDOMProps(props);
138
+ let DOMProps = filterDOMProps(props, {global: true});
138
139
  delete DOMProps.id;
139
140
 
140
141
  return (
@@ -164,9 +165,7 @@ export const DatePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(function
164
165
  [FieldErrorContext, validation]
165
166
  ]}>
166
167
  <div
167
- {...focusProps}
168
- {...DOMProps}
169
- {...renderProps}
168
+ {...mergeProps(DOMProps, renderProps, focusProps)}
170
169
  ref={ref}
171
170
  slot={props.slot || undefined}
172
171
  data-focus-within={isFocused || undefined}
@@ -174,6 +173,11 @@ export const DatePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(function
174
173
  data-focus-visible={isFocusVisible || undefined}
175
174
  data-disabled={props.isDisabled || undefined}
176
175
  data-open={state.isOpen || undefined} />
176
+ <HiddenDateInput
177
+ autoComplete={props.autoComplete}
178
+ name={props.name}
179
+ isDisabled={props.isDisabled}
180
+ state={state} />
177
181
  </Provider>
178
182
  );
179
183
  });
@@ -239,7 +243,7 @@ export const DateRangePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(func
239
243
  defaultClassName: 'react-aria-DateRangePicker'
240
244
  });
241
245
 
242
- let DOMProps = filterDOMProps(props);
246
+ let DOMProps = filterDOMProps(props, {global: true});
243
247
  delete DOMProps.id;
244
248
 
245
249
  return (
@@ -274,9 +278,7 @@ export const DateRangePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(func
274
278
  [FieldErrorContext, validation]
275
279
  ]}>
276
280
  <div
277
- {...focusProps}
278
- {...DOMProps}
279
- {...renderProps}
281
+ {...mergeProps(DOMProps, renderProps, focusProps)}
280
282
  ref={ref}
281
283
  slot={props.slot || undefined}
282
284
  data-focus-within={isFocused || undefined}
package/src/Dialog.tsx CHANGED
@@ -12,8 +12,8 @@
12
12
  import {AriaDialogProps, useDialog, useId, useOverlayTrigger} from 'react-aria';
13
13
  import {ButtonContext} from './Button';
14
14
  import {ContextValue, DEFAULT_SLOT, Provider, SlotProps, StyleProps, useContextProps, useRenderProps} from './utils';
15
- import {filterDOMProps, useResizeObserver} from '@react-aria/utils';
16
- import {forwardRefType} from '@react-types/shared';
15
+ import {filterDOMProps, mergeProps, useResizeObserver} from '@react-aria/utils';
16
+ import {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';
17
17
  import {HeadingContext} from './RSPContexts';
18
18
  import {OverlayTriggerProps, OverlayTriggerState, useMenuTriggerState} from 'react-stately';
19
19
  import {PopoverContext} from './Popover';
@@ -29,7 +29,7 @@ export interface DialogRenderProps {
29
29
  close: () => void
30
30
  }
31
31
 
32
- export interface DialogProps extends AriaDialogProps, StyleProps, SlotProps {
32
+ export interface DialogProps extends AriaDialogProps, StyleProps, SlotProps, GlobalDOMAttributes<HTMLElement> {
33
33
  /** Children of the dialog. A function may be provided to access a function to close the dialog. */
34
34
  children?: ReactNode | ((opts: DialogRenderProps) => ReactNode)
35
35
  }
@@ -122,11 +122,11 @@ export const Dialog = /*#__PURE__*/ (forwardRef as forwardRefType)(function Dial
122
122
  }
123
123
  });
124
124
 
125
+ let DOMProps = filterDOMProps(props, {global: true});
126
+
125
127
  return (
126
128
  <section
127
- {...filterDOMProps(props)}
128
- {...dialogProps}
129
- {...renderProps}
129
+ {...mergeProps(DOMProps, renderProps, dialogProps)}
130
130
  ref={ref}
131
131
  slot={props.slot || undefined}>
132
132
  <Provider
@@ -14,11 +14,11 @@ import {AriaDisclosureProps, useDisclosure, useFocusRing} from 'react-aria';
14
14
  import {ButtonContext} from './Button';
15
15
  import {ContextValue, DEFAULT_SLOT, Provider, RenderProps, SlotProps, useContextProps, useRenderProps} from './utils';
16
16
  import {DisclosureGroupState, DisclosureState, DisclosureGroupProps as StatelyDisclosureGroupProps, useDisclosureGroupState, useDisclosureState} from 'react-stately';
17
- import {DOMProps, forwardRefType, Key} from '@react-types/shared';
17
+ import {DOMProps, forwardRefType, GlobalDOMAttributes, Key} from '@react-types/shared';
18
18
  import {filterDOMProps, mergeProps, mergeRefs, useId} from '@react-aria/utils';
19
19
  import React, {createContext, DOMAttributes, ForwardedRef, forwardRef, ReactNode, useContext} from 'react';
20
20
 
21
- export interface DisclosureGroupProps extends StatelyDisclosureGroupProps, RenderProps<DisclosureGroupRenderProps>, DOMProps {}
21
+ export interface DisclosureGroupProps extends StatelyDisclosureGroupProps, RenderProps<DisclosureGroupRenderProps>, DOMProps, GlobalDOMAttributes<HTMLDivElement> {}
22
22
 
23
23
  export interface DisclosureGroupRenderProps {
24
24
  /**
@@ -50,7 +50,7 @@ export const DisclosureGroup = forwardRef(function DisclosureGroup(props: Disclo
50
50
  }
51
51
  });
52
52
 
53
- let domProps = filterDOMProps(props);
53
+ let domProps = filterDOMProps(props, {global: true});
54
54
 
55
55
  return (
56
56
  <div
@@ -65,7 +65,7 @@ export const DisclosureGroup = forwardRef(function DisclosureGroup(props: Disclo
65
65
  );
66
66
  });
67
67
 
68
- export interface DisclosureProps extends Omit<AriaDisclosureProps, 'children'>, RenderProps<DisclosureRenderProps>, SlotProps {
68
+ export interface DisclosureProps extends Omit<AriaDisclosureProps, 'children'>, RenderProps<DisclosureRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {
69
69
  /** An id for the disclosure when used within a DisclosureGroup, matching the id used in `expandedKeys`. */
70
70
  id?: Key
71
71
  }
@@ -152,7 +152,7 @@ export const Disclosure = /*#__PURE__*/ (forwardRef as forwardRefType)(function
152
152
  }
153
153
  });
154
154
 
155
- let domProps = filterDOMProps(otherProps as any);
155
+ let domProps = filterDOMProps(otherProps, {global: true});
156
156
 
157
157
  return (
158
158
  <Provider
@@ -167,13 +167,11 @@ export const Disclosure = /*#__PURE__*/ (forwardRef as forwardRefType)(function
167
167
  [DisclosureStateContext, state]
168
168
  ]}>
169
169
  <div
170
+ {...mergeProps(domProps, renderProps, focusWithinProps)}
170
171
  ref={ref}
171
172
  data-expanded={state.isExpanded || undefined}
172
173
  data-disabled={isDisabled || undefined}
173
- data-focus-visible-within={isFocusVisibleWithin || undefined}
174
- {...domProps}
175
- {...focusWithinProps}
176
- {...renderProps}>
174
+ data-focus-visible-within={isFocusVisibleWithin || undefined}>
177
175
  {renderProps.children}
178
176
  </div>
179
177
  </Provider>
@@ -188,7 +186,7 @@ export interface DisclosurePanelRenderProps {
188
186
  isFocusVisibleWithin: boolean
189
187
  }
190
188
 
191
- export interface DisclosurePanelProps extends RenderProps<DisclosurePanelRenderProps>, DOMProps {
189
+ export interface DisclosurePanelProps extends RenderProps<DisclosurePanelRenderProps>, DOMProps, GlobalDOMAttributes<HTMLDivElement> {
192
190
  /**
193
191
  * The accessibility role for the disclosure's panel.
194
192
  * @default 'group'
@@ -217,13 +215,11 @@ export const DisclosurePanel = /*#__PURE__*/ (forwardRef as forwardRefType)(func
217
215
  isFocusVisibleWithin
218
216
  }
219
217
  });
220
- let DOMProps = filterDOMProps(props);
218
+ let DOMProps = filterDOMProps(props, {global: true});
221
219
  return (
222
220
  <div
223
- {...DOMProps}
221
+ {...mergeProps(DOMProps, renderProps, panelProps, focusWithinProps)}
224
222
  ref={mergeRefs(ref, panelRef)}
225
- {...mergeProps(panelProps, focusWithinProps)}
226
- {...renderProps}
227
223
  role={role}
228
224
  data-focus-visible-within={isFocusVisibleWithin || undefined}>
229
225
  <Provider
@@ -69,7 +69,37 @@ export function useDndPersistedKeys(selectionManager: MultipleSelectionManager,
69
69
  dropTargetKey = dropState.target.key;
70
70
  if (dropState.target.dropPosition === 'after') {
71
71
  // Normalize to the "before" drop position since we only render those to the DOM.
72
- dropTargetKey = dropState.collection.getKeyAfter(dropTargetKey) ?? dropTargetKey;
72
+ let nextKey = dropState.collection.getKeyAfter(dropTargetKey);
73
+ let lastDescendantKey: Key | null = null;
74
+ if (nextKey != null) {
75
+ let targetLevel = dropState.collection.getItem(dropTargetKey)?.level ?? 0;
76
+ // Skip over any rows that are descendants of the target ("after" position should be after all children)
77
+ while (nextKey) {
78
+ let node = dropState.collection.getItem(nextKey);
79
+ // eslint-disable-next-line max-depth
80
+ if (!node) {
81
+ break;
82
+ }
83
+ // Skip over non-item nodes (e.g., loaders) since they can't be drop targets.
84
+ // eslint-disable-next-line max-depth
85
+ if (node.type !== 'item') {
86
+ nextKey = dropState.collection.getKeyAfter(nextKey);
87
+ continue;
88
+ }
89
+
90
+ // Stop once we find an item at the same level or higher
91
+ // eslint-disable-next-line max-depth
92
+ if ((node.level ?? 0) <= targetLevel) {
93
+ break;
94
+ }
95
+
96
+ lastDescendantKey = nextKey;
97
+ nextKey = dropState.collection.getKeyAfter(nextKey);
98
+ }
99
+ }
100
+
101
+ // If nextKey is null (end of collection), use the last descendant
102
+ dropTargetKey = nextKey ?? lastDescendantKey ?? dropTargetKey;
73
103
  }
74
104
  }
75
105
 
package/src/DropZone.tsx CHANGED
@@ -10,7 +10,7 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import {AriaLabelingProps, HoverEvents} from '@react-types/shared';
13
+ import {AriaLabelingProps, GlobalDOMAttributes, HoverEvents} from '@react-types/shared';
14
14
  import {ContextValue, Provider, RenderProps, SlotProps, useContextProps, useRenderProps} from './utils';
15
15
  import {DropOptions, mergeProps, useButton, useClipboard, useDrop, useFocusRing, useHover, useLocalizedStringFormatter, VisuallyHidden} from 'react-aria';
16
16
  import {filterDOMProps, isFocusable, useLabels, useObjectRef, useSlotId} from '@react-aria/utils';
@@ -47,7 +47,7 @@ export interface DropZoneRenderProps {
47
47
  isDisabled: boolean
48
48
  }
49
49
 
50
- export interface DropZoneProps extends Omit<DropOptions, 'getDropOperationForPoint' | 'ref' | 'hasDropButton'>, HoverEvents, RenderProps<DropZoneRenderProps>, SlotProps, AriaLabelingProps {}
50
+ export interface DropZoneProps extends Omit<DropOptions, 'getDropOperationForPoint' | 'ref' | 'hasDropButton'>, HoverEvents, RenderProps<DropZoneRenderProps>, SlotProps, AriaLabelingProps, GlobalDOMAttributes<HTMLDivElement> {}
51
51
 
52
52
  export const DropZoneContext = createContext<ContextValue<DropZoneProps, HTMLDivElement>>(null);
53
53
 
@@ -88,7 +88,7 @@ export const DropZone = forwardRef(function DropZone(props: DropZoneProps, ref:
88
88
  values: {isHovered, isFocused, isFocusVisible, isDropTarget, isDisabled},
89
89
  defaultClassName: 'react-aria-DropZone'
90
90
  });
91
- let DOMProps = filterDOMProps(props);
91
+ let DOMProps = filterDOMProps(props, {global: true});
92
92
  delete DOMProps.id;
93
93
 
94
94
  return (
@@ -98,8 +98,7 @@ export const DropZone = forwardRef(function DropZone(props: DropZoneProps, ref:
98
98
  ]}>
99
99
  {/* eslint-disable-next-line */}
100
100
  <div
101
- {...mergeProps(dropProps, hoverProps, DOMProps)}
102
- {...renderProps}
101
+ {...mergeProps(DOMProps, renderProps, dropProps, hoverProps)}
103
102
  slot={props.slot || undefined}
104
103
  ref={dropzoneRef}
105
104
  onClick={(e) => {
@@ -10,7 +10,7 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import {DOMProps, ValidationResult} from '@react-types/shared';
13
+ import {DOMProps, GlobalDOMAttributes, ValidationResult} from '@react-types/shared';
14
14
  import {filterDOMProps} from '@react-aria/utils';
15
15
  import React, {createContext, ForwardedRef, forwardRef, useContext} from 'react';
16
16
  import {RenderProps, useRenderProps} from './utils';
@@ -19,7 +19,7 @@ import {Text} from './Text';
19
19
  export const FieldErrorContext = createContext<ValidationResult | null>(null);
20
20
 
21
21
  export interface FieldErrorRenderProps extends ValidationResult {}
22
- export interface FieldErrorProps extends RenderProps<FieldErrorRenderProps>, DOMProps {}
22
+ export interface FieldErrorProps extends RenderProps<FieldErrorRenderProps>, DOMProps, GlobalDOMAttributes<HTMLDivElement> {}
23
23
 
24
24
  /**
25
25
  * A FieldError displays validation errors for a form field.
@@ -35,7 +35,7 @@ export const FieldError = forwardRef(function FieldError(props: FieldErrorProps,
35
35
 
36
36
  const FieldErrorInner = forwardRef((props: FieldErrorProps, ref: ForwardedRef<HTMLElement>) => {
37
37
  let validation = useContext(FieldErrorContext)!;
38
- let domProps = filterDOMProps(props)!;
38
+ let domProps = filterDOMProps(props, {global: true})!;
39
39
  let renderProps = useRenderProps({
40
40
  ...props,
41
41
  defaultClassName: 'react-aria-FieldError',
@@ -11,15 +11,16 @@
11
11
  */
12
12
 
13
13
  import {filterDOMProps, useObjectRef} from '@react-aria/utils';
14
+ import {GlobalDOMAttributes} from '@react-types/shared';
14
15
  import {Input} from './Input';
15
16
  import {PressResponder} from '@react-aria/interactions';
16
17
  import React, {ForwardedRef, forwardRef, ReactNode} from 'react';
17
18
 
18
- export interface FileTriggerProps {
19
+ export interface FileTriggerProps extends GlobalDOMAttributes<HTMLInputElement> {
19
20
  /**
20
21
  * Specifies what mime type of files are allowed.
21
22
  */
22
- acceptedFileTypes?: Array<string>,
23
+ acceptedFileTypes?: ReadonlyArray<string>,
23
24
  /**
24
25
  * Whether multiple files can be selected.
25
26
  */
@@ -48,7 +49,7 @@ export interface FileTriggerProps {
48
49
  export const FileTrigger = forwardRef(function FileTrigger(props: FileTriggerProps, ref: ForwardedRef<HTMLInputElement>) {
49
50
  let {onSelect, acceptedFileTypes, allowsMultiple, defaultCamera, children, acceptDirectory, ...rest} = props;
50
51
  let inputRef = useObjectRef(ref);
51
- let domProps = filterDOMProps(rest);
52
+ let domProps = filterDOMProps(rest, {global: true});
52
53
 
53
54
  return (
54
55
  <>
package/src/Form.tsx CHANGED
@@ -12,10 +12,11 @@
12
12
 
13
13
  import {ContextValue, DOMProps, useContextProps} from './utils';
14
14
  import {FormValidationContext} from 'react-stately';
15
+ import {GlobalDOMAttributes} from '@react-types/shared';
15
16
  import React, {createContext, ForwardedRef, forwardRef} from 'react';
16
17
  import {FormProps as SharedFormProps} from '@react-types/form';
17
18
 
18
- export interface FormProps extends SharedFormProps, DOMProps {
19
+ export interface FormProps extends SharedFormProps, DOMProps, GlobalDOMAttributes<HTMLFormElement> {
19
20
  /**
20
21
  * Whether to use native HTML form validation to prevent form submission
21
22
  * when a field value is missing or invalid, or mark fields as required