react-aria-components 1.5.0 → 1.6.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 (403) hide show
  1. package/dist/Autocomplete.main.js +80 -0
  2. package/dist/Autocomplete.main.js.map +1 -0
  3. package/dist/Autocomplete.mjs +68 -0
  4. package/dist/Autocomplete.module.js +68 -0
  5. package/dist/Autocomplete.module.js.map +1 -0
  6. package/dist/Breadcrumbs.main.js +2 -5
  7. package/dist/Breadcrumbs.main.js.map +1 -1
  8. package/dist/Breadcrumbs.mjs +3 -6
  9. package/dist/Breadcrumbs.module.js +3 -6
  10. package/dist/Breadcrumbs.module.js.map +1 -1
  11. package/dist/Button.main.js +5 -5
  12. package/dist/Button.main.js.map +1 -1
  13. package/dist/Button.mjs +5 -5
  14. package/dist/Button.module.js +5 -5
  15. package/dist/Button.module.js.map +1 -1
  16. package/dist/Calendar.main.js +29 -28
  17. package/dist/Calendar.main.js.map +1 -1
  18. package/dist/Calendar.mjs +30 -29
  19. package/dist/Calendar.module.js +30 -29
  20. package/dist/Calendar.module.js.map +1 -1
  21. package/dist/Checkbox.main.js +5 -12
  22. package/dist/Checkbox.main.js.map +1 -1
  23. package/dist/Checkbox.mjs +6 -13
  24. package/dist/Checkbox.module.js +6 -13
  25. package/dist/Checkbox.module.js.map +1 -1
  26. package/dist/ColorArea.main.js +2 -5
  27. package/dist/ColorArea.main.js.map +1 -1
  28. package/dist/ColorArea.mjs +3 -6
  29. package/dist/ColorArea.module.js +3 -6
  30. package/dist/ColorArea.module.js.map +1 -1
  31. package/dist/ColorField.main.js +2 -5
  32. package/dist/ColorField.main.js.map +1 -1
  33. package/dist/ColorField.mjs +2 -5
  34. package/dist/ColorField.module.js +2 -5
  35. package/dist/ColorField.module.js.map +1 -1
  36. package/dist/ColorSlider.main.js +2 -5
  37. package/dist/ColorSlider.main.js.map +1 -1
  38. package/dist/ColorSlider.mjs +2 -5
  39. package/dist/ColorSlider.module.js +2 -5
  40. package/dist/ColorSlider.module.js.map +1 -1
  41. package/dist/ColorSwatch.main.js +2 -5
  42. package/dist/ColorSwatch.main.js.map +1 -1
  43. package/dist/ColorSwatch.mjs +2 -5
  44. package/dist/ColorSwatch.module.js +2 -5
  45. package/dist/ColorSwatch.module.js.map +1 -1
  46. package/dist/ColorSwatchPicker.main.js +4 -8
  47. package/dist/ColorSwatchPicker.main.js.map +1 -1
  48. package/dist/ColorSwatchPicker.mjs +5 -9
  49. package/dist/ColorSwatchPicker.module.js +5 -9
  50. package/dist/ColorSwatchPicker.module.js.map +1 -1
  51. package/dist/ColorThumb.main.js +2 -5
  52. package/dist/ColorThumb.main.js.map +1 -1
  53. package/dist/ColorThumb.mjs +3 -6
  54. package/dist/ColorThumb.module.js +3 -6
  55. package/dist/ColorThumb.module.js.map +1 -1
  56. package/dist/ColorWheel.main.js +5 -11
  57. package/dist/ColorWheel.main.js.map +1 -1
  58. package/dist/ColorWheel.mjs +6 -12
  59. package/dist/ColorWheel.module.js +6 -12
  60. package/dist/ColorWheel.module.js.map +1 -1
  61. package/dist/ComboBox.main.js +2 -5
  62. package/dist/ComboBox.main.js.map +1 -1
  63. package/dist/ComboBox.mjs +3 -6
  64. package/dist/ComboBox.module.js +3 -6
  65. package/dist/ComboBox.module.js.map +1 -1
  66. package/dist/DateField.main.js +8 -23
  67. package/dist/DateField.main.js.map +1 -1
  68. package/dist/DateField.mjs +9 -24
  69. package/dist/DateField.module.js +9 -24
  70. package/dist/DateField.module.js.map +1 -1
  71. package/dist/DatePicker.main.js +4 -11
  72. package/dist/DatePicker.main.js.map +1 -1
  73. package/dist/DatePicker.mjs +5 -12
  74. package/dist/DatePicker.module.js +5 -12
  75. package/dist/DatePicker.module.js.map +1 -1
  76. package/dist/Dialog.main.js +2 -5
  77. package/dist/Dialog.main.js.map +1 -1
  78. package/dist/Dialog.mjs +3 -6
  79. package/dist/Dialog.module.js +3 -6
  80. package/dist/Dialog.module.js.map +1 -1
  81. package/dist/Disclosure.main.js +6 -16
  82. package/dist/Disclosure.main.js.map +1 -1
  83. package/dist/Disclosure.mjs +6 -16
  84. package/dist/Disclosure.module.js +6 -16
  85. package/dist/Disclosure.module.js.map +1 -1
  86. package/dist/DragAndDrop.main.js +2 -5
  87. package/dist/DragAndDrop.main.js.map +1 -1
  88. package/dist/DragAndDrop.mjs +3 -6
  89. package/dist/DragAndDrop.module.js +3 -6
  90. package/dist/DragAndDrop.module.js.map +1 -1
  91. package/dist/DropZone.main.js +2 -5
  92. package/dist/DropZone.main.js.map +1 -1
  93. package/dist/DropZone.mjs +3 -6
  94. package/dist/DropZone.module.js +3 -6
  95. package/dist/DropZone.module.js.map +1 -1
  96. package/dist/FieldError.main.js +2 -5
  97. package/dist/FieldError.main.js.map +1 -1
  98. package/dist/FieldError.mjs +3 -6
  99. package/dist/FieldError.module.js +3 -6
  100. package/dist/FieldError.module.js.map +1 -1
  101. package/dist/FileTrigger.main.js +2 -5
  102. package/dist/FileTrigger.main.js.map +1 -1
  103. package/dist/FileTrigger.mjs +2 -5
  104. package/dist/FileTrigger.module.js +2 -5
  105. package/dist/FileTrigger.module.js.map +1 -1
  106. package/dist/Form.main.js +2 -6
  107. package/dist/Form.main.js.map +1 -1
  108. package/dist/Form.mjs +2 -6
  109. package/dist/Form.module.js +2 -6
  110. package/dist/Form.module.js.map +1 -1
  111. package/dist/GridList.main.js +2 -6
  112. package/dist/GridList.main.js.map +1 -1
  113. package/dist/GridList.mjs +3 -7
  114. package/dist/GridList.module.js +3 -7
  115. package/dist/GridList.module.js.map +1 -1
  116. package/dist/Group.main.js +2 -5
  117. package/dist/Group.main.js.map +1 -1
  118. package/dist/Group.mjs +2 -5
  119. package/dist/Group.module.js +2 -5
  120. package/dist/Group.module.js.map +1 -1
  121. package/dist/Heading.main.js +2 -3
  122. package/dist/Heading.main.js.map +1 -1
  123. package/dist/Heading.mjs +2 -3
  124. package/dist/Heading.module.js +2 -3
  125. package/dist/Heading.module.js.map +1 -1
  126. package/dist/Input.main.js +2 -5
  127. package/dist/Input.main.js.map +1 -1
  128. package/dist/Input.mjs +2 -5
  129. package/dist/Input.module.js +2 -5
  130. package/dist/Input.module.js.map +1 -1
  131. package/dist/Keyboard.main.js +2 -3
  132. package/dist/Keyboard.main.js.map +1 -1
  133. package/dist/Keyboard.mjs +2 -3
  134. package/dist/Keyboard.module.js +2 -3
  135. package/dist/Keyboard.module.js.map +1 -1
  136. package/dist/Label.main.js +2 -3
  137. package/dist/Label.main.js.map +1 -1
  138. package/dist/Label.mjs +2 -3
  139. package/dist/Label.module.js +2 -3
  140. package/dist/Label.module.js.map +1 -1
  141. package/dist/Link.main.js +2 -6
  142. package/dist/Link.main.js.map +1 -1
  143. package/dist/Link.mjs +2 -6
  144. package/dist/Link.module.js +2 -6
  145. package/dist/Link.module.js.map +1 -1
  146. package/dist/ListBox.main.js +22 -11
  147. package/dist/ListBox.main.js.map +1 -1
  148. package/dist/ListBox.mjs +24 -13
  149. package/dist/ListBox.module.js +24 -13
  150. package/dist/ListBox.module.js.map +1 -1
  151. package/dist/Menu.main.js +21 -13
  152. package/dist/Menu.main.js.map +1 -1
  153. package/dist/Menu.mjs +23 -15
  154. package/dist/Menu.module.js +23 -15
  155. package/dist/Menu.module.js.map +1 -1
  156. package/dist/Meter.main.js +2 -5
  157. package/dist/Meter.main.js.map +1 -1
  158. package/dist/Meter.mjs +2 -5
  159. package/dist/Meter.module.js +2 -5
  160. package/dist/Meter.module.js.map +1 -1
  161. package/dist/Modal.main.js +7 -10
  162. package/dist/Modal.main.js.map +1 -1
  163. package/dist/Modal.mjs +10 -13
  164. package/dist/Modal.module.js +10 -13
  165. package/dist/Modal.module.js.map +1 -1
  166. package/dist/NumberField.main.js +2 -5
  167. package/dist/NumberField.main.js.map +1 -1
  168. package/dist/NumberField.mjs +3 -6
  169. package/dist/NumberField.module.js +3 -6
  170. package/dist/NumberField.module.js.map +1 -1
  171. package/dist/OverlayArrow.main.js +2 -6
  172. package/dist/OverlayArrow.main.js.map +1 -1
  173. package/dist/OverlayArrow.mjs +2 -6
  174. package/dist/OverlayArrow.module.js +2 -6
  175. package/dist/OverlayArrow.module.js.map +1 -1
  176. package/dist/Popover.main.js +4 -7
  177. package/dist/Popover.main.js.map +1 -1
  178. package/dist/Popover.mjs +7 -10
  179. package/dist/Popover.module.js +7 -10
  180. package/dist/Popover.module.js.map +1 -1
  181. package/dist/ProgressBar.main.js +2 -6
  182. package/dist/ProgressBar.main.js.map +1 -1
  183. package/dist/ProgressBar.mjs +2 -6
  184. package/dist/ProgressBar.module.js +2 -6
  185. package/dist/ProgressBar.module.js.map +1 -1
  186. package/dist/RadioGroup.main.js +4 -10
  187. package/dist/RadioGroup.main.js.map +1 -1
  188. package/dist/RadioGroup.mjs +4 -10
  189. package/dist/RadioGroup.module.js +4 -10
  190. package/dist/RadioGroup.module.js.map +1 -1
  191. package/dist/SearchField.main.js +6 -8
  192. package/dist/SearchField.main.js.map +1 -1
  193. package/dist/SearchField.mjs +8 -10
  194. package/dist/SearchField.module.js +8 -10
  195. package/dist/SearchField.module.js.map +1 -1
  196. package/dist/Select.main.js +6 -12
  197. package/dist/Select.main.js.map +1 -1
  198. package/dist/Select.mjs +7 -13
  199. package/dist/Select.module.js +7 -13
  200. package/dist/Select.module.js.map +1 -1
  201. package/dist/Slider.main.js +8 -20
  202. package/dist/Slider.main.js.map +1 -1
  203. package/dist/Slider.mjs +9 -21
  204. package/dist/Slider.module.js +9 -21
  205. package/dist/Slider.module.js.map +1 -1
  206. package/dist/Switch.main.js +2 -5
  207. package/dist/Switch.main.js.map +1 -1
  208. package/dist/Switch.mjs +2 -5
  209. package/dist/Switch.module.js +2 -5
  210. package/dist/Switch.module.js.map +1 -1
  211. package/dist/Table.main.js +6 -12
  212. package/dist/Table.main.js.map +1 -1
  213. package/dist/Table.mjs +7 -13
  214. package/dist/Table.module.js +7 -13
  215. package/dist/Table.module.js.map +1 -1
  216. package/dist/Tabs.main.js +9 -17
  217. package/dist/Tabs.main.js.map +1 -1
  218. package/dist/Tabs.mjs +11 -19
  219. package/dist/Tabs.module.js +11 -19
  220. package/dist/Tabs.module.js.map +1 -1
  221. package/dist/TagGroup.main.js +4 -10
  222. package/dist/TagGroup.main.js.map +1 -1
  223. package/dist/TagGroup.mjs +5 -11
  224. package/dist/TagGroup.module.js +5 -11
  225. package/dist/TagGroup.module.js.map +1 -1
  226. package/dist/Text.main.js +2 -3
  227. package/dist/Text.main.js.map +1 -1
  228. package/dist/Text.mjs +2 -3
  229. package/dist/Text.module.js +2 -3
  230. package/dist/Text.module.js.map +1 -1
  231. package/dist/TextArea.main.js +2 -5
  232. package/dist/TextArea.main.js.map +1 -1
  233. package/dist/TextArea.mjs +2 -5
  234. package/dist/TextArea.module.js +2 -5
  235. package/dist/TextArea.module.js.map +1 -1
  236. package/dist/TextField.main.js +9 -9
  237. package/dist/TextField.main.js.map +1 -1
  238. package/dist/TextField.mjs +11 -11
  239. package/dist/TextField.module.js +11 -11
  240. package/dist/TextField.module.js.map +1 -1
  241. package/dist/ToggleButton.main.js +2 -5
  242. package/dist/ToggleButton.main.js.map +1 -1
  243. package/dist/ToggleButton.mjs +3 -6
  244. package/dist/ToggleButton.module.js +3 -6
  245. package/dist/ToggleButton.module.js.map +1 -1
  246. package/dist/ToggleButtonGroup.main.js +2 -5
  247. package/dist/ToggleButtonGroup.main.js.map +1 -1
  248. package/dist/ToggleButtonGroup.mjs +2 -5
  249. package/dist/ToggleButtonGroup.module.js +2 -5
  250. package/dist/ToggleButtonGroup.module.js.map +1 -1
  251. package/dist/Toolbar.main.js +2 -6
  252. package/dist/Toolbar.main.js.map +1 -1
  253. package/dist/Toolbar.mjs +2 -6
  254. package/dist/Toolbar.module.js +2 -6
  255. package/dist/Toolbar.module.js.map +1 -1
  256. package/dist/Tooltip.main.js +4 -7
  257. package/dist/Tooltip.main.js.map +1 -1
  258. package/dist/Tooltip.mjs +7 -10
  259. package/dist/Tooltip.module.js +7 -10
  260. package/dist/Tooltip.module.js.map +1 -1
  261. package/dist/Tree.main.js +2 -6
  262. package/dist/Tree.main.js.map +1 -1
  263. package/dist/Tree.mjs +3 -7
  264. package/dist/Tree.module.js +3 -7
  265. package/dist/Tree.module.js.map +1 -1
  266. package/dist/import.mjs +4 -2
  267. package/dist/main.js +6 -0
  268. package/dist/main.js.map +1 -1
  269. package/dist/module.js +4 -2
  270. package/dist/module.js.map +1 -1
  271. package/dist/types.d.ts +230 -220
  272. package/dist/types.d.ts.map +1 -1
  273. package/dist/utils.main.js +0 -61
  274. package/dist/utils.main.js.map +1 -1
  275. package/dist/utils.mjs +1 -60
  276. package/dist/utils.module.js +1 -60
  277. package/dist/utils.module.js.map +1 -1
  278. package/i18n/ar-AE.js +1 -1
  279. package/i18n/ar-AE.mjs +1 -1
  280. package/i18n/bg-BG.js +1 -1
  281. package/i18n/bg-BG.mjs +1 -1
  282. package/i18n/cs-CZ.js +1 -1
  283. package/i18n/cs-CZ.mjs +1 -1
  284. package/i18n/da-DK.js +1 -1
  285. package/i18n/da-DK.mjs +1 -1
  286. package/i18n/de-DE.js +1 -1
  287. package/i18n/de-DE.mjs +1 -1
  288. package/i18n/el-GR.js +1 -1
  289. package/i18n/el-GR.mjs +1 -1
  290. package/i18n/en-US.js +1 -1
  291. package/i18n/en-US.mjs +1 -1
  292. package/i18n/es-ES.js +1 -1
  293. package/i18n/es-ES.mjs +1 -1
  294. package/i18n/et-EE.js +1 -1
  295. package/i18n/et-EE.mjs +1 -1
  296. package/i18n/fi-FI.js +1 -1
  297. package/i18n/fi-FI.mjs +1 -1
  298. package/i18n/fr-FR.js +1 -1
  299. package/i18n/fr-FR.mjs +1 -1
  300. package/i18n/he-IL.js +1 -1
  301. package/i18n/he-IL.mjs +1 -1
  302. package/i18n/hr-HR.js +1 -1
  303. package/i18n/hr-HR.mjs +1 -1
  304. package/i18n/hu-HU.js +1 -1
  305. package/i18n/hu-HU.mjs +1 -1
  306. package/i18n/index.js +1 -1
  307. package/i18n/index.mjs +1 -1
  308. package/i18n/it-IT.js +1 -1
  309. package/i18n/it-IT.mjs +1 -1
  310. package/i18n/ja-JP.js +1 -1
  311. package/i18n/ja-JP.mjs +1 -1
  312. package/i18n/ko-KR.js +1 -1
  313. package/i18n/ko-KR.mjs +1 -1
  314. package/i18n/lt-LT.js +1 -1
  315. package/i18n/lt-LT.mjs +1 -1
  316. package/i18n/lv-LV.js +1 -1
  317. package/i18n/lv-LV.mjs +1 -1
  318. package/i18n/nb-NO.js +1 -1
  319. package/i18n/nb-NO.mjs +1 -1
  320. package/i18n/nl-NL.js +1 -1
  321. package/i18n/nl-NL.mjs +1 -1
  322. package/i18n/pl-PL.js +1 -1
  323. package/i18n/pl-PL.mjs +1 -1
  324. package/i18n/pt-BR.js +1 -1
  325. package/i18n/pt-BR.mjs +1 -1
  326. package/i18n/pt-PT.js +1 -1
  327. package/i18n/pt-PT.mjs +1 -1
  328. package/i18n/ro-RO.js +1 -1
  329. package/i18n/ro-RO.mjs +1 -1
  330. package/i18n/ru-RU.js +1 -1
  331. package/i18n/ru-RU.mjs +1 -1
  332. package/i18n/sk-SK.js +1 -1
  333. package/i18n/sk-SK.mjs +1 -1
  334. package/i18n/sl-SI.js +1 -1
  335. package/i18n/sl-SI.mjs +1 -1
  336. package/i18n/sr-SP.js +1 -1
  337. package/i18n/sr-SP.mjs +1 -1
  338. package/i18n/sv-SE.js +1 -1
  339. package/i18n/sv-SE.mjs +1 -1
  340. package/i18n/tr-TR.js +1 -1
  341. package/i18n/tr-TR.mjs +1 -1
  342. package/i18n/uk-UA.js +1 -1
  343. package/i18n/uk-UA.mjs +1 -1
  344. package/i18n/zh-CN.js +1 -1
  345. package/i18n/zh-CN.mjs +1 -1
  346. package/i18n/zh-TW.js +1 -1
  347. package/i18n/zh-TW.mjs +1 -1
  348. package/package.json +30 -28
  349. package/src/Autocomplete.tsx +71 -0
  350. package/src/Breadcrumbs.tsx +5 -8
  351. package/src/Button.tsx +8 -8
  352. package/src/Calendar.tsx +35 -39
  353. package/src/Checkbox.tsx +11 -17
  354. package/src/ColorArea.tsx +5 -8
  355. package/src/ColorField.tsx +5 -8
  356. package/src/ColorSlider.tsx +5 -8
  357. package/src/ColorSwatch.tsx +5 -8
  358. package/src/ColorSwatchPicker.tsx +7 -13
  359. package/src/ColorThumb.tsx +5 -8
  360. package/src/ColorWheel.tsx +10 -16
  361. package/src/ComboBox.tsx +5 -8
  362. package/src/DateField.tsx +21 -33
  363. package/src/DatePicker.tsx +9 -15
  364. package/src/Dialog.tsx +5 -8
  365. package/src/Disclosure.tsx +16 -25
  366. package/src/DragAndDrop.tsx +5 -8
  367. package/src/DropZone.tsx +5 -8
  368. package/src/FieldError.tsx +5 -8
  369. package/src/FileTrigger.tsx +5 -8
  370. package/src/Form.tsx +6 -9
  371. package/src/GridList.tsx +6 -9
  372. package/src/Group.tsx +5 -8
  373. package/src/Heading.tsx +2 -5
  374. package/src/Input.tsx +5 -8
  375. package/src/Keyboard.tsx +2 -5
  376. package/src/Label.tsx +2 -5
  377. package/src/Link.tsx +6 -9
  378. package/src/ListBox.tsx +16 -15
  379. package/src/Menu.tsx +20 -19
  380. package/src/Meter.tsx +5 -8
  381. package/src/Modal.tsx +7 -10
  382. package/src/NumberField.tsx +5 -8
  383. package/src/OverlayArrow.tsx +6 -9
  384. package/src/Popover.tsx +7 -10
  385. package/src/ProgressBar.tsx +6 -9
  386. package/src/RadioGroup.tsx +10 -16
  387. package/src/SearchField.tsx +9 -11
  388. package/src/Select.tsx +12 -17
  389. package/src/Slider.tsx +20 -32
  390. package/src/Switch.tsx +5 -8
  391. package/src/Table.tsx +10 -19
  392. package/src/Tabs.tsx +18 -25
  393. package/src/TagGroup.tsx +8 -14
  394. package/src/Text.tsx +2 -5
  395. package/src/TextArea.tsx +5 -7
  396. package/src/TextField.tsx +11 -13
  397. package/src/ToggleButton.tsx +5 -8
  398. package/src/ToggleButtonGroup.tsx +5 -8
  399. package/src/Toolbar.tsx +6 -9
  400. package/src/Tooltip.tsx +7 -10
  401. package/src/Tree.tsx +6 -9
  402. package/src/index.ts +3 -1
  403. package/src/utils.tsx +0 -71
@@ -35,7 +35,11 @@ export interface DisclosureGroupRenderProps {
35
35
 
36
36
  export const DisclosureGroupStateContext = createContext<DisclosureGroupState | null>(null);
37
37
 
38
- function DisclosureGroup(props: DisclosureGroupProps, ref: ForwardedRef<HTMLDivElement>) {
38
+ /**
39
+ * A DisclosureGroup is a grouping of related disclosures, sometimes called an accordion.
40
+ * It supports both single and multiple expanded items.
41
+ */
42
+ export const DisclosureGroup = forwardRef(function DisclosureGroup(props: DisclosureGroupProps, ref: ForwardedRef<HTMLDivElement>) {
39
43
  let state = useDisclosureGroupState(props);
40
44
 
41
45
  let renderProps = useRenderProps({
@@ -60,14 +64,7 @@ function DisclosureGroup(props: DisclosureGroupProps, ref: ForwardedRef<HTMLDivE
60
64
  </DisclosureGroupStateContext.Provider>
61
65
  </div>
62
66
  );
63
- }
64
-
65
- /**
66
- * A DisclosureGroup is a grouping of related disclosures, sometimes called an accordion.
67
- * It supports both single and multiple expanded items.
68
- */
69
- const _DisclosureGroup = forwardRef(DisclosureGroup);
70
- export {_DisclosureGroup as DisclosureGroup};
67
+ });
71
68
 
72
69
  export interface DisclosureProps extends Omit<AriaDisclosureProps, 'children'>, RenderProps<DisclosureRenderProps>, SlotProps {
73
70
  /** An id for the disclosure when used within a DisclosureGroup, matching the id used in `expandedKeys`. */
@@ -106,7 +103,10 @@ interface InternalDisclosureContextValue {
106
103
 
107
104
  const InternalDisclosureContext = createContext<InternalDisclosureContextValue | null>(null);
108
105
 
109
- function Disclosure(props: DisclosureProps, ref: ForwardedRef<HTMLDivElement>) {
106
+ /**
107
+ * A disclosure is a collapsible section of content. It is composed of a a header with a heading and trigger button, and a panel that contains the content.
108
+ */
109
+ export const Disclosure = /*#__PURE__*/ (forwardRef as forwardRefType)(function Disclosure(props: DisclosureProps, ref: ForwardedRef<HTMLDivElement>) {
110
110
  [props, ref] = useContextProps(props, ref, DisclosureContext);
111
111
  let groupState = useContext(DisclosureGroupStateContext)!;
112
112
  let {id, ...otherProps} = props;
@@ -179,7 +179,7 @@ function Disclosure(props: DisclosureProps, ref: ForwardedRef<HTMLDivElement>) {
179
179
  </div>
180
180
  </Provider>
181
181
  );
182
- }
182
+ });
183
183
 
184
184
  export interface DisclosurePanelRenderProps {
185
185
  /**
@@ -201,7 +201,10 @@ export interface DisclosurePanelProps extends RenderProps<DisclosurePanelRenderP
201
201
  children: ReactNode
202
202
  }
203
203
 
204
- function DisclosurePanel(props: DisclosurePanelProps, ref: ForwardedRef<HTMLDivElement>) {
204
+ /**
205
+ * A DisclosurePanel provides the content for a disclosure.
206
+ */
207
+ export const DisclosurePanel = /*#__PURE__*/ (forwardRef as forwardRefType)(function DisclosurePanel(props: DisclosurePanelProps, ref: ForwardedRef<HTMLDivElement>) {
205
208
  let {role = 'group'} = props;
206
209
  let {panelProps, panelRef} = useContext(InternalDisclosureContext)!;
207
210
  let {
@@ -232,16 +235,4 @@ function DisclosurePanel(props: DisclosurePanelProps, ref: ForwardedRef<HTMLDivE
232
235
  </Provider>
233
236
  </div>
234
237
  );
235
- }
236
-
237
- /**
238
- * A disclosure is a collapsible section of content. It is composed of a a header with a heading and trigger button, and a panel that contains the content.
239
- */
240
- const _Disclosure = /*#__PURE__*/ (forwardRef as forwardRefType)(Disclosure);
241
- export {_Disclosure as Disclosure};
242
-
243
- /**
244
- * A DisclosurePanel provides the content for a disclosure.
245
- */
246
- const _DisclosurePanel = /*#__PURE__*/ (forwardRef as forwardRefType)(DisclosurePanel);
247
- export {_DisclosurePanel as DisclosurePanel};
238
+ });
@@ -37,16 +37,13 @@ interface DropIndicatorContextValue {
37
37
  render: (props: DropIndicatorProps, ref: ForwardedRef<HTMLElement>) => ReactNode
38
38
  }
39
39
 
40
- function DropIndicator(props: DropIndicatorProps, ref: ForwardedRef<HTMLElement>): JSX.Element {
41
- let {render} = useContext(DropIndicatorContext)!;
42
- return <>{render(props, ref)}</>;
43
- }
44
-
45
40
  /**
46
41
  * A DropIndicator is rendered between items in a collection to indicate where dropped data will be inserted.
47
42
  */
48
- const _DropIndicator = forwardRef(DropIndicator);
49
- export {_DropIndicator as DropIndicator};
43
+ export const DropIndicator = forwardRef(function DropIndicator(props: DropIndicatorProps, ref: ForwardedRef<HTMLElement>): JSX.Element {
44
+ let {render} = useContext(DropIndicatorContext)!;
45
+ return <>{render(props, ref)}</>;
46
+ });
50
47
 
51
48
  export function useRenderDropIndicator(dragAndDropHooks?: DragAndDropHooks, dropState?: DroppableCollectionState) {
52
49
  let renderDropIndicator = dragAndDropHooks?.renderDropIndicator;
@@ -54,7 +51,7 @@ export function useRenderDropIndicator(dragAndDropHooks?: DragAndDropHooks, drop
54
51
  let fn = useCallback((target: ItemDropTarget) => {
55
52
  // Only show drop indicators when virtual dragging or this is the current drop target.
56
53
  if (isVirtualDragging || dropState?.isDropTarget(target)) {
57
- return renderDropIndicator ? renderDropIndicator(target) : <_DropIndicator target={target} />;
54
+ return renderDropIndicator ? renderDropIndicator(target) : <DropIndicator target={target} />;
58
55
  }
59
56
  // We invalidate whenever the target changes.
60
57
  // eslint-disable-next-line react-hooks/exhaustive-deps
package/src/DropZone.tsx CHANGED
@@ -52,7 +52,10 @@ export interface DropZoneProps extends Omit<DropOptions, 'getDropOperationForPoi
52
52
 
53
53
  export const DropZoneContext = createContext<ContextValue<DropZoneProps, HTMLDivElement>>(null);
54
54
 
55
- function DropZone(props: DropZoneProps, ref: ForwardedRef<HTMLDivElement>) {
55
+ /**
56
+ * A drop zone is an area into which one or multiple objects can be dragged and dropped.
57
+ */
58
+ export const DropZone = forwardRef(function DropZone(props: DropZoneProps, ref: ForwardedRef<HTMLDivElement>) {
56
59
  let {isDisabled = false} = props;
57
60
  [props, ref] = useContextProps(props, ref, DropZoneContext);
58
61
  let dropzoneRef = useObjectRef(ref);
@@ -127,10 +130,4 @@ function DropZone(props: DropZoneProps, ref: ForwardedRef<HTMLDivElement>) {
127
130
  </div>
128
131
  </Provider>
129
132
  );
130
- }
131
-
132
- /**
133
- * A drop zone is an area into which one or multiple objects can be dragged and dropped.
134
- */
135
- const _DropZone = forwardRef(DropZone);
136
- export {_DropZone as DropZone};
133
+ });
@@ -21,20 +21,17 @@ export const FieldErrorContext = createContext<ValidationResult | null>(null);
21
21
  export interface FieldErrorRenderProps extends ValidationResult {}
22
22
  export interface FieldErrorProps extends RenderProps<FieldErrorRenderProps>, DOMProps {}
23
23
 
24
- function FieldError(props: FieldErrorProps, ref: ForwardedRef<HTMLElement>) {
24
+ /**
25
+ * A FieldError displays validation errors for a form field.
26
+ */
27
+ export const FieldError = forwardRef(function FieldError(props: FieldErrorProps, ref: ForwardedRef<HTMLElement>) {
25
28
  let validation = useContext(FieldErrorContext);
26
29
  if (!validation?.isInvalid) {
27
30
  return null;
28
31
  }
29
32
 
30
33
  return <FieldErrorInner {...props} ref={ref} />;
31
- }
32
-
33
- /**
34
- * A FieldError displays validation errors for a form field.
35
- */
36
- const _FieldError = forwardRef(FieldError);
37
- export {_FieldError as FieldError};
34
+ });
38
35
 
39
36
  const FieldErrorInner = forwardRef((props: FieldErrorProps, ref: ForwardedRef<HTMLElement>) => {
40
37
  let validation = useContext(FieldErrorContext)!;
@@ -42,7 +42,10 @@ export interface FileTriggerProps {
42
42
  acceptDirectory?: boolean
43
43
  }
44
44
 
45
- function FileTrigger(props: FileTriggerProps, ref: ForwardedRef<HTMLInputElement>) {
45
+ /**
46
+ * A FileTrigger allows a user to access the file system with any pressable React Aria or React Spectrum component, or custom components built with usePress.
47
+ */
48
+ export const FileTrigger = forwardRef(function FileTrigger(props: FileTriggerProps, ref: ForwardedRef<HTMLInputElement>) {
46
49
  let {onSelect, acceptedFileTypes, allowsMultiple, defaultCamera, children, acceptDirectory, ...rest} = props;
47
50
  let inputRef = useObjectRef(ref);
48
51
  let domProps = filterDOMProps(rest);
@@ -71,10 +74,4 @@ function FileTrigger(props: FileTriggerProps, ref: ForwardedRef<HTMLInputElement
71
74
  webkitdirectory={acceptDirectory ? '' : undefined} />
72
75
  </>
73
76
  );
74
- }
75
-
76
- /**
77
- * A FileTrigger allows a user to access the file system with any pressable React Aria or React Spectrum component, or custom components built with usePress.
78
- */
79
- const _FileTrigger = forwardRef(FileTrigger);
80
- export {_FileTrigger as FileTrigger};
77
+ });
package/src/Form.tsx CHANGED
@@ -27,7 +27,11 @@ export interface FormProps extends SharedFormProps, DOMProps {
27
27
 
28
28
  export const FormContext = createContext<ContextValue<FormProps, HTMLFormElement>>(null);
29
29
 
30
- function Form(props: FormProps, ref: ForwardedRef<HTMLFormElement>) {
30
+ /**
31
+ * A form is a group of inputs that allows users to submit data to a server,
32
+ * with support for providing field validation errors.
33
+ */
34
+ export const Form = forwardRef(function Form(props: FormProps, ref: ForwardedRef<HTMLFormElement>) {
31
35
  [props, ref] = useContextProps(props, ref, FormContext);
32
36
  let {validationErrors, validationBehavior = 'native', children, className, ...domProps} = props;
33
37
  return (
@@ -39,11 +43,4 @@ function Form(props: FormProps, ref: ForwardedRef<HTMLFormElement>) {
39
43
  </FormContext.Provider>
40
44
  </form>
41
45
  );
42
- }
43
-
44
- /**
45
- * A form is a group of inputs that allows users to submit data to a server,
46
- * with support for providing field validation errors.
47
- */
48
- const _Form = forwardRef(Form);
49
- export {_Form as Form};
46
+ });
package/src/GridList.tsx CHANGED
@@ -73,7 +73,11 @@ export interface GridListProps<T> extends Omit<AriaGridListProps<T>, 'children'>
73
73
 
74
74
  export const GridListContext = createContext<ContextValue<GridListProps<any>, HTMLDivElement>>(null);
75
75
 
76
- function GridList<T extends object>(props: GridListProps<T>, ref: ForwardedRef<HTMLDivElement>) {
76
+ /**
77
+ * A grid list displays a list of interactive items, with support for keyboard navigation,
78
+ * single or multiple selection, and row actions.
79
+ */
80
+ export const GridList = /*#__PURE__*/ (forwardRef as forwardRefType)(function GridList<T extends object>(props: GridListProps<T>, ref: ForwardedRef<HTMLDivElement>) {
77
81
  // Render the portal first so that we have the collection by the time we render the DOM in SSR.
78
82
  [props, ref] = useContextProps(props, ref, GridListContext);
79
83
 
@@ -82,7 +86,7 @@ function GridList<T extends object>(props: GridListProps<T>, ref: ForwardedRef<H
82
86
  {collection => <GridListInner props={props} collection={collection} gridListRef={ref} />}
83
87
  </CollectionBuilder>
84
88
  );
85
- }
89
+ });
86
90
 
87
91
  interface GridListInnerProps<T extends object> {
88
92
  props: GridListProps<T>,
@@ -243,13 +247,6 @@ function GridListInner<T extends object>({props, collection, gridListRef: ref}:
243
247
  );
244
248
  }
245
249
 
246
- /**
247
- * A grid list displays a list of interactive items, with support for keyboard navigation,
248
- * single or multiple selection, and row actions.
249
- */
250
- const _GridList = /*#__PURE__*/ (forwardRef as forwardRefType)(GridList);
251
- export {_GridList as GridList};
252
-
253
250
  export interface GridListItemRenderProps extends ItemRenderProps {}
254
251
 
255
252
  export interface GridListItemProps<T = object> extends RenderProps<GridListItemRenderProps>, LinkDOMProps, HoverEvents {
package/src/Group.tsx CHANGED
@@ -60,7 +60,10 @@ export interface GroupProps extends AriaLabelingProps, Omit<HTMLAttributes<HTMLE
60
60
 
61
61
  export const GroupContext = createContext<ContextValue<GroupProps, HTMLDivElement>>({});
62
62
 
63
- function Group(props: GroupProps, ref: ForwardedRef<HTMLDivElement>) {
63
+ /**
64
+ * A group represents a set of related UI controls, and supports interactive states for styling.
65
+ */
66
+ export const Group = /*#__PURE__*/ (forwardRef as forwardRefType)(function Group(props: GroupProps, ref: ForwardedRef<HTMLDivElement>) {
64
67
  [props, ref] = useContextProps(props, ref, GroupContext);
65
68
  let {isDisabled, isInvalid, onHoverStart, onHoverChange, onHoverEnd, ...otherProps} = props;
66
69
 
@@ -92,10 +95,4 @@ function Group(props: GroupProps, ref: ForwardedRef<HTMLDivElement>) {
92
95
  {renderProps.children}
93
96
  </div>
94
97
  );
95
- }
96
-
97
- /**
98
- * A group represents a set of related UI controls, and supports interactive states for styling.
99
- */
100
- const _Group = /*#__PURE__*/ (forwardRef as forwardRefType)(Group);
101
- export {_Group as Group};
98
+ });
package/src/Heading.tsx CHANGED
@@ -18,7 +18,7 @@ export interface HeadingProps extends HTMLAttributes<HTMLElement> {
18
18
  level?: number
19
19
  }
20
20
 
21
- function Heading(props: HeadingProps, ref: ForwardedRef<HTMLHeadingElement>) {
21
+ export const Heading = forwardRef(function Heading(props: HeadingProps, ref: ForwardedRef<HTMLHeadingElement>) {
22
22
  [props, ref] = useContextProps(props, ref, HeadingContext);
23
23
  let {children, level = 3, className, ...domProps} = props;
24
24
  let Element = `h${level}` as ElementType;
@@ -28,7 +28,4 @@ function Heading(props: HeadingProps, ref: ForwardedRef<HTMLHeadingElement>) {
28
28
  {children}
29
29
  </Element>
30
30
  );
31
- }
32
-
33
- const _Heading = forwardRef(Heading);
34
- export {_Heading as Heading};
31
+ });
package/src/Input.tsx CHANGED
@@ -53,7 +53,10 @@ let filterHoverProps = (props: InputProps) => {
53
53
  return otherProps;
54
54
  };
55
55
 
56
- function Input(props: InputProps, ref: ForwardedRef<HTMLInputElement>) {
56
+ /**
57
+ * An input allows a user to input text.
58
+ */
59
+ export const Input = /*#__PURE__*/ createHideableComponent(function Input(props: InputProps, ref: ForwardedRef<HTMLInputElement>) {
57
60
  [props, ref] = useContextProps(props, ref, InputContext);
58
61
 
59
62
  let {hoverProps, isHovered} = useHover(props);
@@ -86,10 +89,4 @@ function Input(props: InputProps, ref: ForwardedRef<HTMLInputElement>) {
86
89
  data-focus-visible={isFocusVisible || undefined}
87
90
  data-invalid={isInvalid || undefined} />
88
91
  );
89
- }
90
-
91
- /**
92
- * An input allows a user to input text.
93
- */
94
- const _Input = /*#__PURE__*/ createHideableComponent(Input);
95
- export {_Input as Input};
92
+ });
package/src/Keyboard.tsx CHANGED
@@ -15,10 +15,7 @@ import React, {createContext, ForwardedRef, forwardRef, HTMLAttributes} from 're
15
15
 
16
16
  export const KeyboardContext = createContext<ContextValue<HTMLAttributes<HTMLElement>, HTMLElement>>({});
17
17
 
18
- function Keyboard(props: HTMLAttributes<HTMLElement>, ref: ForwardedRef<HTMLElement>) {
18
+ export const Keyboard = forwardRef(function Keyboard(props: HTMLAttributes<HTMLElement>, ref: ForwardedRef<HTMLElement>) {
19
19
  [props, ref] = useContextProps(props, ref, KeyboardContext);
20
20
  return <kbd dir="ltr" {...props} ref={ref} />;
21
- }
22
-
23
- const _Keyboard = forwardRef(Keyboard);
24
- export {_Keyboard as Keyboard};
21
+ });
package/src/Label.tsx CHANGED
@@ -20,12 +20,9 @@ export interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
20
20
 
21
21
  export const LabelContext = createContext<ContextValue<LabelProps, HTMLLabelElement>>({});
22
22
 
23
- function Label(props: LabelProps, ref: ForwardedRef<HTMLLabelElement>) {
23
+ export const Label = /*#__PURE__*/ createHideableComponent(function Label(props: LabelProps, ref: ForwardedRef<HTMLLabelElement>) {
24
24
  [props, ref] = useContextProps(props, ref, LabelContext);
25
25
  let {elementType: ElementType = 'label', ...labelProps} = props;
26
26
  // @ts-ignore
27
27
  return <ElementType className="react-aria-Label" {...labelProps} ref={ref} />;
28
- }
29
-
30
- const _Label = /*#__PURE__*/ createHideableComponent(Label);
31
- export {_Label as Label};
28
+ });
package/src/Link.tsx CHANGED
@@ -52,7 +52,11 @@ export interface LinkRenderProps {
52
52
 
53
53
  export const LinkContext = createContext<ContextValue<LinkProps, HTMLAnchorElement>>(null);
54
54
 
55
- function Link(props: LinkProps, ref: ForwardedRef<HTMLAnchorElement>) {
55
+ /**
56
+ * A link allows a user to navigate to another page or resource within a web page
57
+ * or application.
58
+ */
59
+ export const Link = /*#__PURE__*/ (forwardRef as forwardRefType)(function Link(props: LinkProps, ref: ForwardedRef<HTMLAnchorElement>) {
56
60
  [props, ref] = useContextProps(props, ref, LinkContext);
57
61
 
58
62
  let ElementType: ElementType = props.href && !props.isDisabled ? 'a' : 'span';
@@ -88,11 +92,4 @@ function Link(props: LinkProps, ref: ForwardedRef<HTMLAnchorElement>) {
88
92
  {renderProps.children}
89
93
  </ElementType>
90
94
  );
91
- }
92
-
93
- /**
94
- * A link allows a user to navigate to another page or resource within a web page
95
- * or application.
96
- */
97
- const _Link = /*#__PURE__*/ (forwardRef as forwardRefType)(Link);
98
- export {_Link as Link};
95
+ });
package/src/ListBox.tsx CHANGED
@@ -17,12 +17,13 @@ import {ContextValue, Provider, RenderProps, ScrollableProps, SlotProps, StyleRe
17
17
  import {DragAndDropContext, DropIndicatorContext, DropIndicatorProps, useDndPersistedKeys, useRenderDropIndicator} from './DragAndDrop';
18
18
  import {DragAndDropHooks} from './useDragAndDrop';
19
19
  import {DraggableCollectionState, DroppableCollectionState, ListState, Node, Orientation, SelectionBehavior, useListState} from 'react-stately';
20
- import {filterDOMProps, useObjectRef} from '@react-aria/utils';
20
+ import {filterDOMProps, mergeRefs, useObjectRef} from '@react-aria/utils';
21
21
  import {forwardRefType, HoverEvents, Key, LinkDOMProps, RefObject} from '@react-types/shared';
22
22
  import {HeaderContext} from './Header';
23
23
  import React, {createContext, ForwardedRef, forwardRef, JSX, ReactNode, useContext, useEffect, useMemo, useRef} from 'react';
24
24
  import {SeparatorContext} from './Separator';
25
25
  import {TextContext} from './Text';
26
+ import {UNSTABLE_InternalAutocompleteContext} from './Autocomplete';
26
27
 
27
28
  export interface ListBoxRenderProps {
28
29
  /**
@@ -79,7 +80,10 @@ export interface ListBoxProps<T> extends Omit<AriaListBoxProps<T>, 'children' |
79
80
  export const ListBoxContext = createContext<ContextValue<ListBoxProps<any>, HTMLDivElement>>(null);
80
81
  export const ListStateContext = createContext<ListState<any> | null>(null);
81
82
 
82
- function ListBox<T extends object>(props: ListBoxProps<T>, ref: ForwardedRef<HTMLDivElement>) {
83
+ /**
84
+ * A listbox displays a list of options and allows a user to select one or more of them.
85
+ */
86
+ export const ListBox = /*#__PURE__*/ (forwardRef as forwardRefType)(function ListBox<T extends object>(props: ListBoxProps<T>, ref: ForwardedRef<HTMLDivElement>) {
83
87
  [props, ref] = useContextProps(props, ref, ListBoxContext);
84
88
  let state = useContext(ListStateContext);
85
89
 
@@ -98,21 +102,19 @@ function ListBox<T extends object>(props: ListBoxProps<T>, ref: ForwardedRef<HTM
98
102
  {collection => <StandaloneListBox props={props} listBoxRef={ref} collection={collection} />}
99
103
  </CollectionBuilder>
100
104
  );
101
- }
105
+ });
102
106
 
103
107
  function StandaloneListBox({props, listBoxRef, collection}) {
104
108
  props = {...props, collection, children: null, items: null};
105
109
  let {layoutDelegate} = useContext(CollectionRendererContext);
106
- let state = useListState({...props, layoutDelegate});
107
- return <ListBoxInner state={state} props={props} listBoxRef={listBoxRef} />;
110
+ let {filterFn, collectionProps, collectionRef} = useContext(UNSTABLE_InternalAutocompleteContext) || {};
111
+ // Memoed so that useAutocomplete callback ref is properly only called once on mount and not everytime a rerender happens
112
+ listBoxRef = useObjectRef(useMemo(() => mergeRefs(listBoxRef, collectionRef !== undefined ? collectionRef as RefObject<HTMLDivElement> : null), [collectionRef, listBoxRef]));
113
+ let filteredCollection = useMemo(() => filterFn ? collection.filter(filterFn) : collection, [collection, filterFn]);
114
+ let state = useListState({...props, collection: filteredCollection, layoutDelegate});
115
+ return <ListBoxInner state={state} props={{...props, ...collectionProps}} listBoxRef={listBoxRef} />;
108
116
  }
109
117
 
110
- /**
111
- * A listbox displays a list of options and allows a user to select one or more of them.
112
- */
113
- const _ListBox = /*#__PURE__*/ (forwardRef as forwardRefType)(ListBox);
114
- export {_ListBox as ListBox};
115
-
116
118
  interface ListBoxInnerProps<T> {
117
119
  state: ListState<T>,
118
120
  props: ListBoxProps<T> & AriaListBoxOptions<T>,
@@ -246,7 +248,7 @@ function ListBoxInner<T extends object>({state, props, listBoxRef}: ListBoxInner
246
248
  [DragAndDropContext, {dragAndDropHooks, dragState, dropState}],
247
249
  [SeparatorContext, {elementType: 'div'}],
248
250
  [DropIndicatorContext, {render: ListBoxDropIndicatorWrapper}],
249
- [SectionContext, {name: 'ListBoxSection', render: ListBoxSection}]
251
+ [SectionContext, {name: 'ListBoxSection', render: ListBoxSectionInner}]
250
252
  ]}>
251
253
  <CollectionRoot
252
254
  collection={collection}
@@ -263,7 +265,7 @@ function ListBoxInner<T extends object>({state, props, listBoxRef}: ListBoxInner
263
265
 
264
266
  export interface ListBoxSectionProps<T> extends SectionProps<T> {}
265
267
 
266
- function ListBoxSection<T extends object>(props: ListBoxSectionProps<T>, ref: ForwardedRef<HTMLElement>, section: Node<T>, className = 'react-aria-ListBoxSection') {
268
+ function ListBoxSectionInner<T extends object>(props: ListBoxSectionProps<T>, ref: ForwardedRef<HTMLElement>, section: Node<T>, className = 'react-aria-ListBoxSection') {
267
269
  let state = useContext(ListStateContext)!;
268
270
  let {dragAndDropHooks, dropState} = useContext(DragAndDropContext)!;
269
271
  let {CollectionBranch} = useContext(CollectionRendererContext);
@@ -298,8 +300,7 @@ function ListBoxSection<T extends object>(props: ListBoxSectionProps<T>, ref: Fo
298
300
  /**
299
301
  * A ListBoxSection represents a section within a ListBox.
300
302
  */
301
- const _ListBoxSection = /*#__PURE__*/ createBranchComponent('section', ListBoxSection);
302
- export {_ListBoxSection as ListBoxSection};
303
+ export const ListBoxSection = /*#__PURE__*/ createBranchComponent('section', ListBoxSectionInner);
303
304
 
304
305
  export interface ListBoxItemRenderProps extends ItemRenderProps {}
305
306
 
package/src/Menu.tsx CHANGED
@@ -10,13 +10,12 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
-
14
13
  import {AriaMenuProps, FocusScope, mergeProps, useFocusRing, useMenu, useMenuItem, useMenuSection, useMenuTrigger} from 'react-aria';
14
+ import {BaseCollection, Collection, CollectionBuilder, createBranchComponent, createLeafComponent} from '@react-aria/collections';
15
15
  import {MenuTriggerProps as BaseMenuTriggerProps, Collection as ICollection, Node, TreeState, useMenuTriggerState, useTreeState} from 'react-stately';
16
- import {Collection, CollectionBuilder, createBranchComponent, createLeafComponent} from '@react-aria/collections';
17
16
  import {CollectionProps, CollectionRendererContext, ItemRenderProps, SectionContext, SectionProps, usePersistedKeys} from './Collection';
18
17
  import {ContextValue, Provider, RenderProps, ScrollableProps, SlotProps, StyleProps, useContextProps, useRenderProps, useSlot, useSlottedContext} from './utils';
19
- import {filterDOMProps, useObjectRef, useResizeObserver} from '@react-aria/utils';
18
+ import {filterDOMProps, mergeRefs, useObjectRef, useResizeObserver} from '@react-aria/utils';
20
19
  import {FocusStrategy, forwardRefType, HoverEvents, Key, LinkDOMProps, MultipleSelection} from '@react-types/shared';
21
20
  import {HeaderContext} from './Header';
22
21
  import {KeyboardContext} from './Keyboard';
@@ -33,12 +32,14 @@ import React, {
33
32
  RefObject,
34
33
  useCallback,
35
34
  useContext,
35
+ useMemo,
36
36
  useRef,
37
37
  useState
38
38
  } from 'react';
39
39
  import {RootMenuTriggerState, useSubmenuTriggerState} from '@react-stately/menu';
40
40
  import {SeparatorContext} from './Separator';
41
41
  import {TextContext} from './Text';
42
+ import {UNSTABLE_InternalAutocompleteContext} from './Autocomplete';
42
43
  import {useSubmenuTrigger} from '@react-aria/menu';
43
44
 
44
45
  export const MenuContext = createContext<ContextValue<MenuProps<any>, HTMLDivElement>>(null);
@@ -151,7 +152,10 @@ export const SubmenuTrigger = /*#__PURE__*/ createBranchComponent('submenutrigg
151
152
 
152
153
  export interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children'>, CollectionProps<T>, StyleProps, SlotProps, ScrollableProps<HTMLDivElement> {}
153
154
 
154
- function Menu<T extends object>(props: MenuProps<T>, ref: ForwardedRef<HTMLDivElement>) {
155
+ /**
156
+ * A menu displays a list of actions or options that a user can choose.
157
+ */
158
+ export const Menu = /*#__PURE__*/ (forwardRef as forwardRefType)(function Menu<T extends object>(props: MenuProps<T>, ref: ForwardedRef<HTMLDivElement>) {
155
159
  [props, ref] = useContextProps(props, ref, MenuContext);
156
160
 
157
161
  // Delay rendering the actual menu until we have the collection so that auto focus works properly.
@@ -160,23 +164,27 @@ function Menu<T extends object>(props: MenuProps<T>, ref: ForwardedRef<HTMLDivEl
160
164
  {collection => collection.size > 0 && <MenuInner props={props} collection={collection} menuRef={ref} />}
161
165
  </CollectionBuilder>
162
166
  );
163
- }
167
+ });
164
168
 
165
169
  interface MenuInnerProps<T> {
166
170
  props: MenuProps<T>,
167
- collection: ICollection<Node<object>>,
171
+ collection: BaseCollection<object>,
168
172
  menuRef: RefObject<HTMLDivElement | null>
169
173
  }
170
174
 
171
175
  function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInnerProps<T>) {
176
+ let {filterFn, collectionProps: autocompleteMenuProps, collectionRef} = useContext(UNSTABLE_InternalAutocompleteContext) || {};
177
+ // Memoed so that useAutocomplete callback ref is properly only called once on mount and not everytime a rerender happens
178
+ ref = useObjectRef(useMemo(() => mergeRefs(ref, collectionRef !== undefined ? collectionRef as RefObject<HTMLDivElement> : null), [collectionRef, ref]));
179
+ let filteredCollection = useMemo(() => filterFn ? collection.filter(filterFn) : collection, [collection, filterFn]);
172
180
  let state = useTreeState({
173
181
  ...props,
174
- collection,
182
+ collection: filteredCollection as ICollection<Node<object>>,
175
183
  children: undefined
176
184
  });
177
185
  let triggerState = useContext(RootMenuTriggerStateContext);
178
186
  let {isVirtualized, CollectionRoot} = useContext(CollectionRendererContext);
179
- let {menuProps} = useMenu({...props, isVirtualized, onClose: props.onClose || triggerState?.close}, state, ref);
187
+ let {menuProps} = useMenu({...props, ...autocompleteMenuProps, isVirtualized, onClose: props.onClose || triggerState?.close}, state, ref);
180
188
  let renderProps = useRenderProps({
181
189
  defaultClassName: 'react-aria-Menu',
182
190
  className: props.className,
@@ -197,13 +205,13 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
197
205
  values={[
198
206
  [MenuStateContext, state],
199
207
  [SeparatorContext, {elementType: 'div'}],
200
- [SectionContext, {name: 'MenuSection', render: MenuSection}],
208
+ [SectionContext, {name: 'MenuSection', render: MenuSectionInner}],
201
209
  [SubmenuTriggerContext, {parentMenuRef: ref}],
202
210
  [MenuItemContext, null],
203
211
  [SelectionManagerContext, state.selectionManager]
204
212
  ]}>
205
213
  <CollectionRoot
206
- collection={collection}
214
+ collection={state.collection}
207
215
  persistedKeys={usePersistedKeys(state.selectionManager.focusedKey)}
208
216
  scrollRef={ref} />
209
217
  </Provider>
@@ -212,12 +220,6 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
212
220
  );
213
221
  }
214
222
 
215
- /**
216
- * A menu displays a list of actions or options that a user can choose.
217
- */
218
- const _Menu = /*#__PURE__*/ (forwardRef as forwardRefType)(Menu);
219
- export {_Menu as Menu};
220
-
221
223
  export interface MenuSectionProps<T> extends SectionProps<T>, MultipleSelection {}
222
224
 
223
225
  // A subclass of SelectionManager that forwards focus-related properties to the parent,
@@ -251,7 +253,7 @@ class GroupSelectionManager extends SelectionManager {
251
253
  }
252
254
  }
253
255
 
254
- function MenuSection<T extends object>(props: MenuSectionProps<T>, ref: ForwardedRef<HTMLElement>, section: Node<T>, className = 'react-aria-MenuSection') {
256
+ function MenuSectionInner<T extends object>(props: MenuSectionProps<T>, ref: ForwardedRef<HTMLElement>, section: Node<T>, className = 'react-aria-MenuSection') {
255
257
  let state = useContext(MenuStateContext)!;
256
258
  let {CollectionBranch} = useContext(CollectionRendererContext);
257
259
  let [headingRef, heading] = useSlot();
@@ -290,8 +292,7 @@ function MenuSection<T extends object>(props: MenuSectionProps<T>, ref: Forwarde
290
292
  /**
291
293
  * A MenuSection represents a section within a Menu.
292
294
  */
293
- const _MenuSection = /*#__PURE__*/ createBranchComponent('section', MenuSection);
294
- export {_MenuSection as MenuSection};
295
+ export const MenuSection = /*#__PURE__*/ createBranchComponent('section', MenuSectionInner);
295
296
 
296
297
  export interface MenuItemRenderProps extends ItemRenderProps {
297
298
  /**
package/src/Meter.tsx CHANGED
@@ -33,7 +33,10 @@ export interface MeterRenderProps {
33
33
 
34
34
  export const MeterContext = createContext<ContextValue<MeterProps, HTMLDivElement>>(null);
35
35
 
36
- function Meter(props: MeterProps, ref: ForwardedRef<HTMLDivElement>) {
36
+ /**
37
+ * A meter represents a quantity within a known range, or a fractional value.
38
+ */
39
+ export const Meter = /*#__PURE__*/ (forwardRef as forwardRefType)(function Meter(props: MeterProps, ref: ForwardedRef<HTMLDivElement>) {
37
40
  [props, ref] = useContextProps(props, ref, MeterContext);
38
41
  let {
39
42
  value = 0,
@@ -67,10 +70,4 @@ function Meter(props: MeterProps, ref: ForwardedRef<HTMLDivElement>) {
67
70
  </LabelContext.Provider>
68
71
  </div>
69
72
  );
70
- }
71
-
72
- /**
73
- * A meter represents a quantity within a known range, or a fractional value.
74
- */
75
- const _Meter = /*#__PURE__*/ (forwardRef as forwardRefType)(Meter);
76
- export {_Meter as Meter};
73
+ });
package/src/Modal.tsx CHANGED
@@ -11,9 +11,9 @@
11
11
  */
12
12
 
13
13
  import {AriaModalOverlayProps, DismissButton, Overlay, useIsSSR, useModalOverlay} from 'react-aria';
14
- import {ContextValue, Provider, RenderProps, SlotProps, useContextProps, useEnterAnimation, useExitAnimation, useRenderProps} from './utils';
14
+ import {ContextValue, Provider, RenderProps, SlotProps, useContextProps, useRenderProps} from './utils';
15
15
  import {DOMAttributes, forwardRefType, RefObject} from '@react-types/shared';
16
- import {filterDOMProps, mergeProps, mergeRefs, useObjectRef, useViewportSize} from '@react-aria/utils';
16
+ import {filterDOMProps, mergeProps, mergeRefs, useEnterAnimation, useExitAnimation, useObjectRef, useViewportSize} from '@react-aria/utils';
17
17
  import {OverlayTriggerProps, OverlayTriggerState, useOverlayTriggerState} from 'react-stately';
18
18
  import {OverlayTriggerStateContext} from './Dialog';
19
19
  import React, {createContext, ForwardedRef, forwardRef, useContext, useMemo, useRef} from 'react';
@@ -61,7 +61,10 @@ export interface ModalRenderProps {
61
61
  state: OverlayTriggerState
62
62
  }
63
63
 
64
- function Modal(props: ModalOverlayProps, ref: ForwardedRef<HTMLDivElement>) {
64
+ /**
65
+ * A modal is an overlay element which blocks interaction with elements outside it.
66
+ */
67
+ export const Modal = /*#__PURE__*/ (forwardRef as forwardRefType)(function Modal(props: ModalOverlayProps, ref: ForwardedRef<HTMLDivElement>) {
65
68
  let ctx = useContext(InternalModalContext);
66
69
 
67
70
  if (ctx) {
@@ -98,7 +101,7 @@ function Modal(props: ModalOverlayProps, ref: ForwardedRef<HTMLDivElement>) {
98
101
  </ModalContent>
99
102
  </ModalOverlay>
100
103
  );
101
- }
104
+ });
102
105
 
103
106
  interface ModalOverlayInnerProps extends ModalOverlayProps {
104
107
  overlayRef: RefObject<HTMLDivElement | null>,
@@ -107,12 +110,6 @@ interface ModalOverlayInnerProps extends ModalOverlayProps {
107
110
  isExiting: boolean
108
111
  }
109
112
 
110
- /**
111
- * A modal is an overlay element which blocks interaction with elements outside it.
112
- */
113
- const _Modal = /*#__PURE__*/ (forwardRef as forwardRefType)(Modal);
114
- export {_Modal as Modal};
115
-
116
113
  function ModalOverlayWithForwardRef(props: ModalOverlayProps, ref: ForwardedRef<HTMLDivElement>) {
117
114
  [props, ref] = useContextProps(props, ref, ModalContext);
118
115
  let contextState = useContext(OverlayTriggerStateContext);