@octanejs/aria 0.0.39 → 0.0.41

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 (416) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/README.md +20 -7
  3. package/UPSTREAM.md +108 -0
  4. package/package.json +10 -6
  5. package/src/calendar/useCalendar.tsx +36 -0
  6. package/src/calendar/useCalendarBase.tsx +142 -0
  7. package/src/calendar/useCalendarCell.tsx +416 -0
  8. package/src/calendar/useCalendarGrid.tsx +202 -0
  9. package/src/calendar/useCalendarHeading.tsx +85 -0
  10. package/src/calendar/useCalendarMonthPicker.tsx +92 -0
  11. package/src/calendar/useCalendarYearPicker.tsx +127 -0
  12. package/src/calendar/useRangeCalendar.tsx +121 -0
  13. package/src/calendar/utils.tsx +183 -0
  14. package/src/color/useColorArea.tsx +599 -0
  15. package/src/color/useColorAreaGradient.tsx +157 -0
  16. package/src/color/useColorChannelField.tsx +53 -0
  17. package/src/color/useColorField.tsx +170 -0
  18. package/src/color/useColorSlider.tsx +177 -0
  19. package/src/color/useColorSwatch.tsx +83 -0
  20. package/src/color/useColorWheel.tsx +401 -0
  21. package/src/compat/react.ts +111 -0
  22. package/src/components/Calendar.tsx +842 -0
  23. package/src/components/ColorArea.tsx +120 -0
  24. package/src/components/ColorField.tsx +304 -0
  25. package/src/components/ColorPicker.tsx +86 -0
  26. package/src/components/ColorSlider.tsx +144 -0
  27. package/src/components/ColorSwatch.tsx +72 -0
  28. package/src/components/ColorSwatchPicker.tsx +176 -0
  29. package/src/components/ColorThumb.tsx +140 -0
  30. package/src/components/ColorWheel.tsx +163 -0
  31. package/src/components/DateField.tsx +580 -0
  32. package/src/components/DatePicker.tsx +386 -0
  33. package/src/components/DropZone.tsx +181 -0
  34. package/src/components/FileTrigger.tsx +96 -0
  35. package/src/components/GridLayout.tsx +33 -0
  36. package/src/components/HiddenDateInput.tsx +169 -0
  37. package/src/components/TableLayout.tsx +39 -0
  38. package/src/components/Toast.tsx +336 -0
  39. package/src/components/Virtualizer.tsx +219 -0
  40. package/src/components/index.ts +257 -7
  41. package/src/components/useDragAndDrop.tsx +221 -0
  42. package/src/components/utils.ts +12 -89
  43. package/src/datepicker/useDateField.tsx +272 -0
  44. package/src/datepicker/useDatePicker.tsx +229 -0
  45. package/src/datepicker/useDatePickerGroup.tsx +147 -0
  46. package/src/datepicker/useDateRangePicker.tsx +288 -0
  47. package/src/datepicker/useDateSegment.tsx +439 -0
  48. package/src/datepicker/useDisplayNames.tsx +53 -0
  49. package/src/dnd/DragManager.tsx +718 -0
  50. package/src/dnd/DragPreview.tsx +100 -0
  51. package/src/dnd/DropTargetKeyboardNavigation.tsx +317 -0
  52. package/src/dnd/ListDropTargetDelegate.tsx +215 -0
  53. package/src/dnd/constants.tsx +93 -0
  54. package/src/dnd/useAutoScroll.tsx +116 -0
  55. package/src/dnd/useClipboard.tsx +160 -0
  56. package/src/dnd/useDrag.tsx +437 -0
  57. package/src/dnd/useDraggableCollection.tsx +35 -0
  58. package/src/dnd/useDraggableItem.tsx +168 -0
  59. package/src/dnd/useDrop.tsx +518 -0
  60. package/src/dnd/useDropIndicator.tsx +129 -0
  61. package/src/dnd/useDroppableCollection.tsx +808 -0
  62. package/src/dnd/useDroppableItem.tsx +99 -0
  63. package/src/dnd/useVirtualDrop.tsx +52 -0
  64. package/src/dnd/utils.tsx +430 -0
  65. package/src/intl/calendar/ar-AE.json +14 -0
  66. package/src/intl/calendar/bg-BG.json +14 -0
  67. package/src/intl/calendar/cs-CZ.json +14 -0
  68. package/src/intl/calendar/da-DK.json +14 -0
  69. package/src/intl/calendar/de-DE.json +14 -0
  70. package/src/intl/calendar/el-GR.json +14 -0
  71. package/src/intl/calendar/en-US.json +14 -0
  72. package/src/intl/calendar/es-ES.json +14 -0
  73. package/src/intl/calendar/et-EE.json +14 -0
  74. package/src/intl/calendar/fi-FI.json +14 -0
  75. package/src/intl/calendar/fr-FR.json +14 -0
  76. package/src/intl/calendar/he-IL.json +14 -0
  77. package/src/intl/calendar/hr-HR.json +14 -0
  78. package/src/intl/calendar/hu-HU.json +14 -0
  79. package/src/intl/calendar/index.ts +73 -0
  80. package/src/intl/calendar/it-IT.json +14 -0
  81. package/src/intl/calendar/ja-JP.json +14 -0
  82. package/src/intl/calendar/ko-KR.json +14 -0
  83. package/src/intl/calendar/lt-LT.json +14 -0
  84. package/src/intl/calendar/lv-LV.json +14 -0
  85. package/src/intl/calendar/nb-NO.json +14 -0
  86. package/src/intl/calendar/nl-NL.json +14 -0
  87. package/src/intl/calendar/pl-PL.json +14 -0
  88. package/src/intl/calendar/pt-BR.json +14 -0
  89. package/src/intl/calendar/pt-PT.json +14 -0
  90. package/src/intl/calendar/ro-RO.json +14 -0
  91. package/src/intl/calendar/ru-RU.json +14 -0
  92. package/src/intl/calendar/sk-SK.json +14 -0
  93. package/src/intl/calendar/sl-SI.json +14 -0
  94. package/src/intl/calendar/sr-SP.json +14 -0
  95. package/src/intl/calendar/sv-SE.json +14 -0
  96. package/src/intl/calendar/tr-TR.json +14 -0
  97. package/src/intl/calendar/uk-UA.json +14 -0
  98. package/src/intl/calendar/zh-CN.json +14 -0
  99. package/src/intl/calendar/zh-TW.json +14 -0
  100. package/src/intl/color/ar-AE.json +8 -0
  101. package/src/intl/color/bg-BG.json +8 -0
  102. package/src/intl/color/cs-CZ.json +8 -0
  103. package/src/intl/color/da-DK.json +8 -0
  104. package/src/intl/color/de-DE.json +8 -0
  105. package/src/intl/color/el-GR.json +8 -0
  106. package/src/intl/color/en-US.json +8 -0
  107. package/src/intl/color/es-ES.json +8 -0
  108. package/src/intl/color/et-EE.json +8 -0
  109. package/src/intl/color/fi-FI.json +8 -0
  110. package/src/intl/color/fr-FR.json +8 -0
  111. package/src/intl/color/he-IL.json +8 -0
  112. package/src/intl/color/hr-HR.json +8 -0
  113. package/src/intl/color/hu-HU.json +8 -0
  114. package/src/intl/color/index.ts +73 -0
  115. package/src/intl/color/it-IT.json +8 -0
  116. package/src/intl/color/ja-JP.json +8 -0
  117. package/src/intl/color/ko-KR.json +8 -0
  118. package/src/intl/color/lt-LT.json +8 -0
  119. package/src/intl/color/lv-LV.json +8 -0
  120. package/src/intl/color/nb-NO.json +8 -0
  121. package/src/intl/color/nl-NL.json +8 -0
  122. package/src/intl/color/pl-PL.json +8 -0
  123. package/src/intl/color/pt-BR.json +8 -0
  124. package/src/intl/color/pt-PT.json +8 -0
  125. package/src/intl/color/ro-RO.json +8 -0
  126. package/src/intl/color/ru-RU.json +8 -0
  127. package/src/intl/color/sk-SK.json +8 -0
  128. package/src/intl/color/sl-SI.json +8 -0
  129. package/src/intl/color/sr-SP.json +8 -0
  130. package/src/intl/color/sv-SE.json +8 -0
  131. package/src/intl/color/tr-TR.json +8 -0
  132. package/src/intl/color/uk-UA.json +8 -0
  133. package/src/intl/color/zh-CN.json +8 -0
  134. package/src/intl/color/zh-TW.json +8 -0
  135. package/src/intl/datepicker/ar-AE.json +18 -0
  136. package/src/intl/datepicker/bg-BG.json +18 -0
  137. package/src/intl/datepicker/cs-CZ.json +18 -0
  138. package/src/intl/datepicker/da-DK.json +18 -0
  139. package/src/intl/datepicker/de-DE.json +18 -0
  140. package/src/intl/datepicker/el-GR.json +18 -0
  141. package/src/intl/datepicker/en-US.json +18 -0
  142. package/src/intl/datepicker/es-ES.json +18 -0
  143. package/src/intl/datepicker/et-EE.json +18 -0
  144. package/src/intl/datepicker/fi-FI.json +18 -0
  145. package/src/intl/datepicker/fr-FR.json +18 -0
  146. package/src/intl/datepicker/he-IL.json +18 -0
  147. package/src/intl/datepicker/hr-HR.json +18 -0
  148. package/src/intl/datepicker/hu-HU.json +18 -0
  149. package/src/intl/datepicker/index.ts +73 -0
  150. package/src/intl/datepicker/it-IT.json +18 -0
  151. package/src/intl/datepicker/ja-JP.json +18 -0
  152. package/src/intl/datepicker/ko-KR.json +18 -0
  153. package/src/intl/datepicker/lt-LT.json +18 -0
  154. package/src/intl/datepicker/lv-LV.json +18 -0
  155. package/src/intl/datepicker/nb-NO.json +18 -0
  156. package/src/intl/datepicker/nl-NL.json +18 -0
  157. package/src/intl/datepicker/pl-PL.json +18 -0
  158. package/src/intl/datepicker/pt-BR.json +18 -0
  159. package/src/intl/datepicker/pt-PT.json +18 -0
  160. package/src/intl/datepicker/ro-RO.json +18 -0
  161. package/src/intl/datepicker/ru-RU.json +18 -0
  162. package/src/intl/datepicker/sk-SK.json +18 -0
  163. package/src/intl/datepicker/sl-SI.json +18 -0
  164. package/src/intl/datepicker/sr-SP.json +18 -0
  165. package/src/intl/datepicker/sv-SE.json +18 -0
  166. package/src/intl/datepicker/tr-TR.json +18 -0
  167. package/src/intl/datepicker/uk-UA.json +18 -0
  168. package/src/intl/datepicker/zh-CN.json +18 -0
  169. package/src/intl/datepicker/zh-TW.json +18 -0
  170. package/src/intl/dnd/ar-AE.json +29 -0
  171. package/src/intl/dnd/bg-BG.json +29 -0
  172. package/src/intl/dnd/cs-CZ.json +29 -0
  173. package/src/intl/dnd/da-DK.json +29 -0
  174. package/src/intl/dnd/de-DE.json +29 -0
  175. package/src/intl/dnd/el-GR.json +29 -0
  176. package/src/intl/dnd/en-US.json +29 -0
  177. package/src/intl/dnd/es-ES.json +29 -0
  178. package/src/intl/dnd/et-EE.json +29 -0
  179. package/src/intl/dnd/fi-FI.json +29 -0
  180. package/src/intl/dnd/fr-FR.json +29 -0
  181. package/src/intl/dnd/he-IL.json +29 -0
  182. package/src/intl/dnd/hr-HR.json +29 -0
  183. package/src/intl/dnd/hu-HU.json +29 -0
  184. package/src/intl/dnd/index.ts +73 -0
  185. package/src/intl/dnd/it-IT.json +29 -0
  186. package/src/intl/dnd/ja-JP.json +29 -0
  187. package/src/intl/dnd/ko-KR.json +29 -0
  188. package/src/intl/dnd/lt-LT.json +29 -0
  189. package/src/intl/dnd/lv-LV.json +29 -0
  190. package/src/intl/dnd/nb-NO.json +29 -0
  191. package/src/intl/dnd/nl-NL.json +29 -0
  192. package/src/intl/dnd/pl-PL.json +29 -0
  193. package/src/intl/dnd/pt-BR.json +29 -0
  194. package/src/intl/dnd/pt-PT.json +29 -0
  195. package/src/intl/dnd/ro-RO.json +29 -0
  196. package/src/intl/dnd/ru-RU.json +29 -0
  197. package/src/intl/dnd/sk-SK.json +29 -0
  198. package/src/intl/dnd/sl-SI.json +29 -0
  199. package/src/intl/dnd/sr-SP.json +29 -0
  200. package/src/intl/dnd/sv-SE.json +29 -0
  201. package/src/intl/dnd/tr-TR.json +29 -0
  202. package/src/intl/dnd/uk-UA.json +29 -0
  203. package/src/intl/dnd/zh-CN.json +29 -0
  204. package/src/intl/dnd/zh-TW.json +29 -0
  205. package/src/intl/react-aria-components/ar-AE.json +6 -0
  206. package/src/intl/react-aria-components/bg-BG.json +6 -0
  207. package/src/intl/react-aria-components/cs-CZ.json +6 -0
  208. package/src/intl/react-aria-components/da-DK.json +6 -0
  209. package/src/intl/react-aria-components/de-DE.json +6 -0
  210. package/src/intl/react-aria-components/el-GR.json +6 -0
  211. package/src/intl/react-aria-components/en-US.json +6 -0
  212. package/src/intl/react-aria-components/es-ES.json +6 -0
  213. package/src/intl/react-aria-components/et-EE.json +6 -0
  214. package/src/intl/react-aria-components/fi-FI.json +6 -0
  215. package/src/intl/react-aria-components/fr-FR.json +6 -0
  216. package/src/intl/react-aria-components/he-IL.json +6 -0
  217. package/src/intl/react-aria-components/hr-HR.json +6 -0
  218. package/src/intl/react-aria-components/hu-HU.json +6 -0
  219. package/src/intl/react-aria-components/index.ts +73 -0
  220. package/src/intl/react-aria-components/it-IT.json +6 -0
  221. package/src/intl/react-aria-components/ja-JP.json +6 -0
  222. package/src/intl/react-aria-components/ko-KR.json +6 -0
  223. package/src/intl/react-aria-components/lt-LT.json +6 -0
  224. package/src/intl/react-aria-components/lv-LV.json +6 -0
  225. package/src/intl/react-aria-components/nb-NO.json +6 -0
  226. package/src/intl/react-aria-components/nl-NL.json +6 -0
  227. package/src/intl/react-aria-components/pl-PL.json +6 -0
  228. package/src/intl/react-aria-components/pt-BR.json +6 -0
  229. package/src/intl/react-aria-components/pt-PT.json +6 -0
  230. package/src/intl/react-aria-components/ro-RO.json +6 -0
  231. package/src/intl/react-aria-components/ru-RU.json +6 -0
  232. package/src/intl/react-aria-components/sk-SK.json +6 -0
  233. package/src/intl/react-aria-components/sl-SI.json +6 -0
  234. package/src/intl/react-aria-components/sr-SP.json +6 -0
  235. package/src/intl/react-aria-components/sv-SE.json +6 -0
  236. package/src/intl/react-aria-components/tr-TR.json +6 -0
  237. package/src/intl/react-aria-components/uk-UA.json +6 -0
  238. package/src/intl/react-aria-components/zh-CN.json +6 -0
  239. package/src/intl/react-aria-components/zh-TW.json +6 -0
  240. package/src/intl/stately-color/ar-AE.json +39 -0
  241. package/src/intl/stately-color/bg-BG.json +39 -0
  242. package/src/intl/stately-color/cs-CZ.json +39 -0
  243. package/src/intl/stately-color/da-DK.json +39 -0
  244. package/src/intl/stately-color/de-DE.json +39 -0
  245. package/src/intl/stately-color/el-GR.json +39 -0
  246. package/src/intl/stately-color/en-US.json +39 -0
  247. package/src/intl/stately-color/es-ES.json +39 -0
  248. package/src/intl/stately-color/et-EE.json +39 -0
  249. package/src/intl/stately-color/fi-FI.json +39 -0
  250. package/src/intl/stately-color/fr-FR.json +39 -0
  251. package/src/intl/stately-color/he-IL.json +39 -0
  252. package/src/intl/stately-color/hr-HR.json +39 -0
  253. package/src/intl/stately-color/hu-HU.json +39 -0
  254. package/src/intl/stately-color/index.ts +73 -0
  255. package/src/intl/stately-color/it-IT.json +39 -0
  256. package/src/intl/stately-color/ja-JP.json +39 -0
  257. package/src/intl/stately-color/ko-KR.json +39 -0
  258. package/src/intl/stately-color/lt-LT.json +39 -0
  259. package/src/intl/stately-color/lv-LV.json +39 -0
  260. package/src/intl/stately-color/nb-NO.json +39 -0
  261. package/src/intl/stately-color/nl-NL.json +39 -0
  262. package/src/intl/stately-color/pl-PL.json +39 -0
  263. package/src/intl/stately-color/pt-BR.json +39 -0
  264. package/src/intl/stately-color/pt-PT.json +39 -0
  265. package/src/intl/stately-color/ro-RO.json +39 -0
  266. package/src/intl/stately-color/ru-RU.json +39 -0
  267. package/src/intl/stately-color/sk-SK.json +39 -0
  268. package/src/intl/stately-color/sl-SI.json +39 -0
  269. package/src/intl/stately-color/sr-SP.json +39 -0
  270. package/src/intl/stately-color/sv-SE.json +39 -0
  271. package/src/intl/stately-color/tr-TR.json +39 -0
  272. package/src/intl/stately-color/uk-UA.json +39 -0
  273. package/src/intl/stately-color/zh-CN.json +39 -0
  274. package/src/intl/stately-color/zh-TW.json +39 -0
  275. package/src/intl/toast/ar-AE.json +4 -0
  276. package/src/intl/toast/bg-BG.json +4 -0
  277. package/src/intl/toast/cs-CZ.json +4 -0
  278. package/src/intl/toast/da-DK.json +4 -0
  279. package/src/intl/toast/de-DE.json +4 -0
  280. package/src/intl/toast/el-GR.json +4 -0
  281. package/src/intl/toast/en-US.json +4 -0
  282. package/src/intl/toast/es-ES.json +4 -0
  283. package/src/intl/toast/et-EE.json +4 -0
  284. package/src/intl/toast/fi-FI.json +4 -0
  285. package/src/intl/toast/fr-FR.json +4 -0
  286. package/src/intl/toast/he-IL.json +4 -0
  287. package/src/intl/toast/hr-HR.json +4 -0
  288. package/src/intl/toast/hu-HU.json +4 -0
  289. package/src/intl/toast/index.ts +73 -0
  290. package/src/intl/toast/it-IT.json +4 -0
  291. package/src/intl/toast/ja-JP.json +4 -0
  292. package/src/intl/toast/ko-KR.json +4 -0
  293. package/src/intl/toast/lt-LT.json +4 -0
  294. package/src/intl/toast/lv-LV.json +4 -0
  295. package/src/intl/toast/nb-NO.json +4 -0
  296. package/src/intl/toast/nl-NL.json +4 -0
  297. package/src/intl/toast/pl-PL.json +4 -0
  298. package/src/intl/toast/pt-BR.json +4 -0
  299. package/src/intl/toast/pt-PT.json +4 -0
  300. package/src/intl/toast/ro-RO.json +4 -0
  301. package/src/intl/toast/ru-RU.json +4 -0
  302. package/src/intl/toast/sk-SK.json +4 -0
  303. package/src/intl/toast/sl-SI.json +4 -0
  304. package/src/intl/toast/sr-SP.json +4 -0
  305. package/src/intl/toast/sv-SE.json +4 -0
  306. package/src/intl/toast/tr-TR.json +4 -0
  307. package/src/intl/toast/uk-UA.json +4 -0
  308. package/src/intl/toast/zh-CN.json +4 -0
  309. package/src/intl/toast/zh-TW.json +4 -0
  310. package/src/landmark/useLandmark.tsx +569 -0
  311. package/src/stately/calendar/types.tsx +239 -0
  312. package/src/stately/calendar/useCalendarState.tsx +527 -0
  313. package/src/stately/calendar/useRangeCalendarState.tsx +323 -0
  314. package/src/stately/calendar/utils.tsx +175 -0
  315. package/src/stately/color/Color.tsx +889 -0
  316. package/src/stately/color/types.tsx +82 -0
  317. package/src/stately/color/useColor.tsx +30 -0
  318. package/src/stately/color/useColorAreaState.tsx +255 -0
  319. package/src/stately/color/useColorChannelFieldState.tsx +86 -0
  320. package/src/stately/color/useColorFieldState.tsx +220 -0
  321. package/src/stately/color/useColorPickerState.tsx +31 -0
  322. package/src/stately/color/useColorSliderState.tsx +143 -0
  323. package/src/stately/color/useColorWheelState.tsx +225 -0
  324. package/src/stately/data/useAsyncList.tsx +382 -0
  325. package/src/stately/data/useListData.tsx +447 -0
  326. package/src/stately/data/useTreeData.tsx +603 -0
  327. package/src/stately/datepicker/IncompleteDate.tsx +427 -0
  328. package/src/stately/datepicker/placeholders.tsx +116 -0
  329. package/src/stately/datepicker/types.tsx +169 -0
  330. package/src/stately/datepicker/useDateFieldState.tsx +564 -0
  331. package/src/stately/datepicker/useDatePickerState.tsx +244 -0
  332. package/src/stately/datepicker/useDateRangePickerState.tsx +397 -0
  333. package/src/stately/datepicker/useTimeFieldState.tsx +123 -0
  334. package/src/stately/datepicker/utils.tsx +316 -0
  335. package/src/stately/dnd/useDraggableCollectionState.tsx +191 -0
  336. package/src/stately/dnd/useDroppableCollectionState.tsx +288 -0
  337. package/src/stately/layout/GridLayout.tsx +449 -0
  338. package/src/stately/layout/ListLayout.tsx +872 -0
  339. package/src/stately/layout/TableLayout.tsx +793 -0
  340. package/src/stately/layout/WaterfallLayout.tsx +399 -0
  341. package/src/stately/toast/useToastState.tsx +219 -0
  342. package/src/stately/virtualizer/Layout.tsx +105 -0
  343. package/src/stately/virtualizer/LayoutInfo.tsx +127 -0
  344. package/src/stately/virtualizer/OverscanManager.tsx +56 -0
  345. package/src/stately/virtualizer/Point.tsx +47 -0
  346. package/src/stately/virtualizer/Rect.tsx +194 -0
  347. package/src/stately/virtualizer/ReusableView.tsx +101 -0
  348. package/src/stately/virtualizer/Size.tsx +48 -0
  349. package/src/stately/virtualizer/Virtualizer.tsx +408 -0
  350. package/src/stately/virtualizer/types.tsx +48 -0
  351. package/src/stately/virtualizer/useVirtualizerState.tsx +138 -0
  352. package/src/stately/virtualizer/utils.tsx +32 -0
  353. package/src/textfield/useTextField.ts +3 -0
  354. package/src/toast/useToast.tsx +105 -0
  355. package/src/toast/useToastRegion.tsx +223 -0
  356. package/src/upstream-exports/react-aria/I18nProvider.tsx +17 -0
  357. package/src/upstream-exports/react-aria/ListDropTargetDelegate.tsx +15 -0
  358. package/src/upstream-exports/react-aria/PortalProvider.tsx +19 -0
  359. package/src/upstream-exports/react-aria/SSRProvider.tsx +15 -0
  360. package/src/upstream-exports/react-aria/VisuallyHidden.tsx +15 -0
  361. package/src/upstream-exports/react-aria/filterDOMProps.tsx +3 -0
  362. package/src/upstream-exports/react-aria/mergeProps.tsx +14 -0
  363. package/src/upstream-exports/react-aria/private/dnd/DragManager.tsx +3 -0
  364. package/src/upstream-exports/react-aria/private/interactions/PressResponder.tsx +3 -0
  365. package/src/upstream-exports/react-aria/private/utils/isFocusable.tsx +3 -0
  366. package/src/upstream-exports/react-aria/private/utils/shadowdom/DOMFunctions.tsx +8 -0
  367. package/src/upstream-exports/react-aria/private/utils/useId.tsx +3 -0
  368. package/src/upstream-exports/react-aria/private/utils/useLabels.tsx +3 -0
  369. package/src/upstream-exports/react-aria/private/virtualizer/ScrollView.tsx +3 -0
  370. package/src/upstream-exports/react-aria/private/virtualizer/VirtualizerItem.tsx +3 -0
  371. package/src/upstream-exports/react-aria/useButton.tsx +22 -0
  372. package/src/upstream-exports/react-aria/useCalendar.tsx +37 -0
  373. package/src/upstream-exports/react-aria/useClipboard.tsx +23 -0
  374. package/src/upstream-exports/react-aria/useColorArea.tsx +19 -0
  375. package/src/upstream-exports/react-aria/useColorField.tsx +20 -0
  376. package/src/upstream-exports/react-aria/useColorSlider.tsx +19 -0
  377. package/src/upstream-exports/react-aria/useColorSwatch.tsx +15 -0
  378. package/src/upstream-exports/react-aria/useColorWheel.tsx +19 -0
  379. package/src/upstream-exports/react-aria/useDateField.tsx +23 -0
  380. package/src/upstream-exports/react-aria/useDatePicker.tsx +17 -0
  381. package/src/upstream-exports/react-aria/useDateRangePicker.tsx +24 -0
  382. package/src/upstream-exports/react-aria/useDraggableCollection.tsx +31 -0
  383. package/src/upstream-exports/react-aria/useDrop.tsx +33 -0
  384. package/src/upstream-exports/react-aria/useDroppableCollection.tsx +47 -0
  385. package/src/upstream-exports/react-aria/useFocusRing.tsx +16 -0
  386. package/src/upstream-exports/react-aria/useHover.tsx +17 -0
  387. package/src/upstream-exports/react-aria/useLocalizedStringFormatter.tsx +19 -0
  388. package/src/upstream-exports/react-aria/useObjectRef.tsx +14 -0
  389. package/src/upstream-exports/react-aria/useRangeCalendar.tsx +38 -0
  390. package/src/upstream-exports/react-aria/useTimeField.tsx +23 -0
  391. package/src/upstream-exports/react-aria/useToast.tsx +18 -0
  392. package/src/upstream-exports/react-stately/Color.tsx +23 -0
  393. package/src/upstream-exports/react-stately/private/form/useFormValidationState.tsx +11 -0
  394. package/src/upstream-exports/react-stately/useCalendarState.tsx +24 -0
  395. package/src/upstream-exports/react-stately/useColorAreaState.tsx +24 -0
  396. package/src/upstream-exports/react-stately/useColorFieldState.tsx +22 -0
  397. package/src/upstream-exports/react-stately/useColorPickerState.tsx +25 -0
  398. package/src/upstream-exports/react-stately/useColorSliderState.tsx +25 -0
  399. package/src/upstream-exports/react-stately/useColorWheelState.tsx +24 -0
  400. package/src/upstream-exports/react-stately/useDateFieldState.tsx +29 -0
  401. package/src/upstream-exports/react-stately/useDatePickerState.tsx +25 -0
  402. package/src/upstream-exports/react-stately/useDateRangePickerState.tsx +26 -0
  403. package/src/upstream-exports/react-stately/useDraggableCollectionState.tsx +19 -0
  404. package/src/upstream-exports/react-stately/useDroppableCollectionState.tsx +19 -0
  405. package/src/upstream-exports/react-stately/useRangeCalendarState.tsx +27 -0
  406. package/src/upstream-exports/react-stately/useTimeFieldState.tsx +26 -0
  407. package/src/upstream-exports/react-stately/useToastState.tsx +21 -0
  408. package/src/upstream-exports/react-stately/useVirtualizerState.tsx +22 -0
  409. package/src/utils/useLoadMore.tsx +89 -0
  410. package/src/virtualizer/ScrollView.tsx +401 -0
  411. package/src/virtualizer/Virtualizer.tsx +147 -0
  412. package/src/virtualizer/VirtualizerItem.tsx +108 -0
  413. package/src/virtualizer/useVirtualizerItem.tsx +57 -0
  414. package/src/virtualizer/utils.tsx +105 -0
  415. package/LICENSE +0 -21
  416. package/src/components/useDragAndDrop.ts +0 -164
@@ -0,0 +1,386 @@
1
+ /** @jsxImportSource octane */
2
+ // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-aria-components/src/DatePicker.tsx).
3
+ /*
4
+ * Copyright 2022 Adobe. All rights reserved.
5
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License. You may obtain a copy
7
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
11
+ * OF ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ */
14
+ import { AriaDatePickerProps, useDatePicker } from '../upstream-exports/react-aria/useDatePicker';
15
+ import {
16
+ AriaDateRangePickerProps,
17
+ useDateRangePicker,
18
+ } from '../upstream-exports/react-aria/useDateRangePicker';
19
+ import { ButtonContext } from './Button';
20
+ import { CalendarContext, RangeCalendarContext } from './Calendar';
21
+ import {
22
+ ClassNameOrFunction,
23
+ ContextValue,
24
+ dom,
25
+ Provider,
26
+ RACValidation,
27
+ removeDataAttributes,
28
+ RenderProps,
29
+ SlotProps,
30
+ useContextProps,
31
+ useRenderProps,
32
+ useSlot,
33
+ useSlottedContext,
34
+ } from './utils';
35
+ import { DateFieldContext } from './DateField';
36
+ import {
37
+ DatePickerState,
38
+ DatePickerStateOptions,
39
+ DateValue,
40
+ useDatePickerState,
41
+ } from '../upstream-exports/react-stately/useDatePickerState';
42
+ import {
43
+ DateRangePickerState,
44
+ DateRangePickerStateOptions,
45
+ useDateRangePickerState,
46
+ } from '../upstream-exports/react-stately/useDateRangePickerState';
47
+ import { DialogContext, OverlayTriggerStateContext } from './Dialog';
48
+ import { FieldErrorContext } from './FieldError';
49
+ import { filterDOMProps } from '../upstream-exports/react-aria/filterDOMProps';
50
+ import { FormContext } from './Form';
51
+ import { forwardRefType, GlobalDOMAttributes } from '@react-types/shared';
52
+ import { GroupContext } from './Group';
53
+ import { HiddenDateInput } from './HiddenDateInput';
54
+ import { LabelContext } from './Label';
55
+ import { mergeProps } from '../upstream-exports/react-aria/mergeProps';
56
+ import { PopoverContext } from './Popover';
57
+ import React, { createContext, ForwardedRef, forwardRef, useRef } from '../compat/react';
58
+ import { TextContext } from './Text';
59
+ import { useFocusRing } from '../upstream-exports/react-aria/useFocusRing';
60
+
61
+ export interface DatePickerRenderProps {
62
+ /**
63
+ * Whether an element within the date picker is focused, either via a mouse or keyboard.
64
+ *
65
+ * @selector [data-focus-within]
66
+ */
67
+ isFocusWithin: boolean;
68
+ /**
69
+ * Whether an element within the date picker is keyboard focused.
70
+ *
71
+ * @selector [data-focus-visible]
72
+ */
73
+ isFocusVisible: boolean;
74
+ /**
75
+ * Whether the date picker is disabled.
76
+ *
77
+ * @selector [data-disabled]
78
+ */
79
+ isDisabled: boolean;
80
+ /**
81
+ * Whether the date picker is read only.
82
+ *
83
+ * @selector [data-readonly]
84
+ */
85
+ isReadOnly: boolean;
86
+ /**
87
+ * Whether the date picker is invalid.
88
+ *
89
+ * @selector [data-invalid]
90
+ */
91
+ isInvalid: boolean;
92
+ /**
93
+ * Whether the date picker is required.
94
+ *
95
+ * @selector [data-required]
96
+ */
97
+ isRequired: boolean;
98
+ /**
99
+ * Whether the date picker's popover is currently open.
100
+ *
101
+ * @selector [data-open]
102
+ */
103
+ isOpen: boolean;
104
+ /**
105
+ * State of the date picker.
106
+ */
107
+ state: DatePickerState;
108
+ }
109
+ export interface DateRangePickerRenderProps extends Omit<DatePickerRenderProps, 'state'> {
110
+ /**
111
+ * State of the date range picker.
112
+ */
113
+ state: DateRangePickerState;
114
+ }
115
+
116
+ export interface DatePickerProps<T extends DateValue>
117
+ extends
118
+ Omit<
119
+ AriaDatePickerProps<T>,
120
+ 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'
121
+ >,
122
+ Pick<DatePickerStateOptions<T>, 'shouldCloseOnSelect'>,
123
+ RACValidation,
124
+ RenderProps<DatePickerRenderProps>,
125
+ SlotProps,
126
+ GlobalDOMAttributes<HTMLDivElement> {
127
+ /**
128
+ * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the
129
+ * element. A function may be provided to compute the class based on component state.
130
+ *
131
+ * @default 'react-aria-DatePicker'
132
+ */
133
+ className?: ClassNameOrFunction<DatePickerRenderProps>;
134
+ }
135
+ export interface DateRangePickerProps<T extends DateValue>
136
+ extends
137
+ Omit<
138
+ AriaDateRangePickerProps<T>,
139
+ 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'
140
+ >,
141
+ Pick<DateRangePickerStateOptions<T>, 'shouldCloseOnSelect'>,
142
+ RACValidation,
143
+ RenderProps<DateRangePickerRenderProps>,
144
+ SlotProps,
145
+ GlobalDOMAttributes<HTMLDivElement> {
146
+ /**
147
+ * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the
148
+ * element. A function may be provided to compute the class based on component state.
149
+ *
150
+ * @default 'react-aria-DateRangePicker'
151
+ */
152
+ className?: ClassNameOrFunction<DateRangePickerRenderProps>;
153
+ }
154
+
155
+ export const DatePickerContext =
156
+ createContext<ContextValue<DatePickerProps<any>, HTMLDivElement>>(null);
157
+ export const DateRangePickerContext =
158
+ createContext<ContextValue<DateRangePickerProps<any>, HTMLDivElement>>(null);
159
+ export const DatePickerStateContext = createContext<DatePickerState | null>(null);
160
+ export const DateRangePickerStateContext = createContext<DateRangePickerState | null>(null);
161
+
162
+ // Contexts to clear inside the popover.
163
+ const CLEAR_CONTEXTS = [GroupContext, ButtonContext, LabelContext, TextContext];
164
+
165
+ /**
166
+ * A date picker combines a DateField and a Calendar popover to allow users to enter or select a
167
+ * date and time value.
168
+ */
169
+ export const DatePicker = /*#__PURE__*/ (forwardRef as any)(function DatePicker<
170
+ T extends DateValue,
171
+ >(props: DatePickerProps<T>, ref: ForwardedRef<HTMLDivElement>) {
172
+ [props, ref] = useContextProps(props, ref, DatePickerContext);
173
+ let { validationBehavior: formValidationBehavior } = useSlottedContext(FormContext) || {};
174
+ let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';
175
+ let state = useDatePickerState({
176
+ ...props,
177
+ validationBehavior,
178
+ });
179
+
180
+ let groupRef = useRef<HTMLDivElement>(null);
181
+ let [labelRef, label] = useSlot(!props['aria-label'] && !props['aria-labelledby']);
182
+ let {
183
+ groupProps,
184
+ labelProps,
185
+ fieldProps,
186
+ buttonProps,
187
+ dialogProps,
188
+ calendarProps,
189
+ descriptionProps,
190
+ errorMessageProps,
191
+ ...validation
192
+ } = useDatePicker(
193
+ {
194
+ ...removeDataAttributes(props),
195
+ label,
196
+ validationBehavior,
197
+ },
198
+ state,
199
+ groupRef,
200
+ );
201
+
202
+ let { focusProps, isFocused, isFocusVisible } = useFocusRing({ within: true });
203
+ let renderProps = useRenderProps({
204
+ ...props,
205
+ values: {
206
+ state,
207
+ isFocusWithin: isFocused,
208
+ isFocusVisible,
209
+ isDisabled: props.isDisabled || false,
210
+ isInvalid: state.isInvalid,
211
+ isOpen: state.isOpen,
212
+ isReadOnly: props.isReadOnly || false,
213
+ isRequired: props.isRequired || false,
214
+ },
215
+ defaultClassName: 'react-aria-DatePicker',
216
+ });
217
+
218
+ let DOMProps = filterDOMProps(props, { global: true });
219
+ delete DOMProps.id;
220
+
221
+ return (
222
+ <Provider
223
+ values={[
224
+ [DatePickerStateContext, state],
225
+ [GroupContext, { ...groupProps, ref: groupRef, isInvalid: state.isInvalid }],
226
+ [DateFieldContext, fieldProps],
227
+ [ButtonContext, { ...buttonProps, isPressed: state.isOpen }],
228
+ [LabelContext, { ...labelProps, ref: labelRef, elementType: 'span' }],
229
+ [CalendarContext, calendarProps as any],
230
+ [OverlayTriggerStateContext, state],
231
+ [
232
+ PopoverContext,
233
+ {
234
+ trigger: 'DatePicker',
235
+ triggerRef: groupRef,
236
+ placement: 'bottom start',
237
+ clearContexts: CLEAR_CONTEXTS,
238
+ },
239
+ ],
240
+ [DialogContext, dialogProps],
241
+ [
242
+ TextContext,
243
+ {
244
+ slots: {
245
+ description: descriptionProps,
246
+ errorMessage: errorMessageProps,
247
+ },
248
+ },
249
+ ],
250
+ [FieldErrorContext, validation],
251
+ ]}
252
+ >
253
+ <dom.div
254
+ {...mergeProps(DOMProps, renderProps, focusProps)}
255
+ ref={ref}
256
+ slot={props.slot || undefined}
257
+ data-focus-within={isFocused || undefined}
258
+ data-invalid={state.isInvalid || undefined}
259
+ data-focus-visible={isFocusVisible || undefined}
260
+ data-disabled={props.isDisabled || undefined}
261
+ data-readonly={props.isReadOnly || undefined}
262
+ data-required={props.isRequired || undefined}
263
+ data-open={state.isOpen || undefined}
264
+ />
265
+ <HiddenDateInput
266
+ autoComplete={props.autoComplete}
267
+ name={props.name}
268
+ isDisabled={props.isDisabled}
269
+ state={state}
270
+ />
271
+ </Provider>
272
+ );
273
+ });
274
+
275
+ /**
276
+ * A date range picker combines two DateFields and a RangeCalendar popover to allow
277
+ * users to enter or select a date and time range.
278
+ */
279
+ export const DateRangePicker = /*#__PURE__*/ (forwardRef as any)(function DateRangePicker<
280
+ T extends DateValue,
281
+ >(props: DateRangePickerProps<T>, ref: ForwardedRef<HTMLDivElement>) {
282
+ [props, ref] = useContextProps(props, ref, DateRangePickerContext);
283
+ let { validationBehavior: formValidationBehavior } = useSlottedContext(FormContext) || {};
284
+ let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';
285
+ let state = useDateRangePickerState({
286
+ ...props,
287
+ validationBehavior,
288
+ });
289
+
290
+ let groupRef = useRef<HTMLDivElement>(null);
291
+ let [labelRef, label] = useSlot(!props['aria-label'] && !props['aria-labelledby']);
292
+ let {
293
+ groupProps,
294
+ labelProps,
295
+ startFieldProps,
296
+ endFieldProps,
297
+ buttonProps,
298
+ dialogProps,
299
+ calendarProps,
300
+ descriptionProps,
301
+ errorMessageProps,
302
+ ...validation
303
+ } = useDateRangePicker(
304
+ {
305
+ ...removeDataAttributes(props),
306
+ label,
307
+ validationBehavior,
308
+ },
309
+ state,
310
+ groupRef,
311
+ );
312
+
313
+ let { focusProps, isFocused, isFocusVisible } = useFocusRing({ within: true });
314
+ let renderProps = useRenderProps({
315
+ ...props,
316
+ values: {
317
+ state,
318
+ isFocusWithin: isFocused,
319
+ isFocusVisible,
320
+ isDisabled: props.isDisabled || false,
321
+ isInvalid: state.isInvalid,
322
+ isOpen: state.isOpen,
323
+ isReadOnly: props.isReadOnly || false,
324
+ isRequired: props.isRequired || false,
325
+ },
326
+ defaultClassName: 'react-aria-DateRangePicker',
327
+ });
328
+
329
+ let DOMProps = filterDOMProps(props, { global: true });
330
+ delete DOMProps.id;
331
+
332
+ return (
333
+ <Provider
334
+ values={[
335
+ [DateRangePickerStateContext, state],
336
+ [GroupContext, { ...groupProps, ref: groupRef, isInvalid: state.isInvalid }],
337
+ [ButtonContext, { ...buttonProps, isPressed: state.isOpen }],
338
+ [LabelContext, { ...labelProps, ref: labelRef, elementType: 'span' }],
339
+ [RangeCalendarContext, calendarProps],
340
+ [OverlayTriggerStateContext, state],
341
+ [
342
+ PopoverContext,
343
+ {
344
+ trigger: 'DateRangePicker',
345
+ triggerRef: groupRef,
346
+ placement: 'bottom start',
347
+ clearContexts: CLEAR_CONTEXTS,
348
+ },
349
+ ],
350
+ [DialogContext, dialogProps],
351
+ [
352
+ DateFieldContext,
353
+ {
354
+ slots: {
355
+ start: startFieldProps,
356
+ end: endFieldProps,
357
+ },
358
+ },
359
+ ],
360
+ [
361
+ TextContext,
362
+ {
363
+ slots: {
364
+ description: descriptionProps,
365
+ errorMessage: errorMessageProps,
366
+ },
367
+ },
368
+ ],
369
+ [FieldErrorContext, validation],
370
+ ]}
371
+ >
372
+ <dom.div
373
+ {...mergeProps(DOMProps, renderProps, focusProps)}
374
+ ref={ref}
375
+ slot={props.slot || undefined}
376
+ data-focus-within={isFocused || undefined}
377
+ data-invalid={state.isInvalid || undefined}
378
+ data-focus-visible={isFocusVisible || undefined}
379
+ data-disabled={props.isDisabled || undefined}
380
+ data-readonly={props.isReadOnly || undefined}
381
+ data-required={props.isRequired || undefined}
382
+ data-open={state.isOpen || undefined}
383
+ />
384
+ </Provider>
385
+ );
386
+ });
@@ -0,0 +1,181 @@
1
+ /** @jsxImportSource octane */
2
+ // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-aria-components/src/DropZone.tsx).
3
+ /*
4
+ * Copyright 2023 Adobe. All rights reserved.
5
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License. You may obtain a copy
7
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
11
+ * OF ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ */
14
+
15
+ import { AriaLabelingProps, GlobalDOMAttributes, HoverEvents } from '@react-types/shared';
16
+ import {
17
+ ClassNameOrFunction,
18
+ ContextValue,
19
+ dom,
20
+ Provider,
21
+ RenderProps,
22
+ SlotProps,
23
+ useContextProps,
24
+ useRenderProps,
25
+ } from './utils';
26
+ import { DropOptions, useDrop } from '../upstream-exports/react-aria/useDrop';
27
+ import { filterDOMProps } from '../upstream-exports/react-aria/filterDOMProps';
28
+ import {
29
+ getEventTarget,
30
+ nodeContains,
31
+ } from '../upstream-exports/react-aria/private/utils/shadowdom/DOMFunctions';
32
+ import intlMessages from '../intl/react-aria-components/index';
33
+ import { isFocusable } from '../upstream-exports/react-aria/private/utils/isFocusable';
34
+ import { mergeProps } from '../upstream-exports/react-aria/mergeProps';
35
+ import React, { createContext, ForwardedRef, forwardRef, useRef } from '../compat/react';
36
+ import { TextContext } from './Text';
37
+ import { useButton } from '../upstream-exports/react-aria/useButton';
38
+ import { useClipboard } from '../upstream-exports/react-aria/useClipboard';
39
+ import { useFocusRing } from '../upstream-exports/react-aria/useFocusRing';
40
+ import { useHover } from '../upstream-exports/react-aria/useHover';
41
+ import { useLabels } from '../upstream-exports/react-aria/private/utils/useLabels';
42
+ import { useLocalizedStringFormatter } from '../upstream-exports/react-aria/useLocalizedStringFormatter';
43
+ import { useObjectRef } from '../upstream-exports/react-aria/useObjectRef';
44
+ import { useSlotId } from '../upstream-exports/react-aria/private/utils/useId';
45
+ import { VisuallyHidden } from '../upstream-exports/react-aria/VisuallyHidden';
46
+
47
+ export interface DropZoneRenderProps {
48
+ /**
49
+ * Whether the dropzone is currently hovered with a mouse.
50
+ *
51
+ * @selector [data-hovered]
52
+ */
53
+ isHovered: boolean;
54
+ /**
55
+ * Whether the dropzone is focused, either via a mouse or keyboard.
56
+ *
57
+ * @selector [data-focused]
58
+ */
59
+ isFocused: boolean;
60
+ /**
61
+ * Whether the dropzone is keyboard focused.
62
+ *
63
+ * @selector [data-focus-visible]
64
+ */
65
+ isFocusVisible: boolean;
66
+ /**
67
+ * Whether the dropzone is the drop target.
68
+ *
69
+ * @selector [data-drop-target]
70
+ */
71
+ isDropTarget: boolean;
72
+ /**
73
+ * Whether the dropzone is disabled.
74
+ *
75
+ * @selector [data-disabled]
76
+ */
77
+ isDisabled: boolean;
78
+ }
79
+
80
+ export interface DropZoneProps
81
+ extends
82
+ Omit<DropOptions, 'getDropOperationForPoint' | 'ref' | 'hasDropButton'>,
83
+ HoverEvents,
84
+ RenderProps<DropZoneRenderProps>,
85
+ SlotProps,
86
+ AriaLabelingProps,
87
+ GlobalDOMAttributes<HTMLDivElement> {
88
+ /**
89
+ * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the
90
+ * element. A function may be provided to compute the class based on component state.
91
+ *
92
+ * @default 'react-aria-DropZone'
93
+ */
94
+ className?: ClassNameOrFunction<DropZoneRenderProps>;
95
+ }
96
+
97
+ export const DropZoneContext = createContext<ContextValue<DropZoneProps, HTMLDivElement>>(null);
98
+
99
+ /**
100
+ * A drop zone is an area into which one or multiple objects can be dragged and dropped.
101
+ */
102
+ export const DropZone = forwardRef(function DropZone(
103
+ props: DropZoneProps,
104
+ ref: ForwardedRef<HTMLDivElement>,
105
+ ) {
106
+ let { isDisabled = false } = props;
107
+ [props, ref] = useContextProps(props, ref, DropZoneContext);
108
+ let dropzoneRef = useObjectRef(ref);
109
+ let buttonRef = useRef<HTMLButtonElement>(null);
110
+ let { dropProps, dropButtonProps, isDropTarget } = useDrop({
111
+ ...props,
112
+ ref: buttonRef,
113
+ hasDropButton: true,
114
+ });
115
+ let { buttonProps } = useButton(dropButtonProps || {}, buttonRef);
116
+ let { hoverProps, isHovered } = useHover(props);
117
+ let { focusProps, isFocused, isFocusVisible } = useFocusRing();
118
+ let stringFormatter = useLocalizedStringFormatter(intlMessages, 'react-aria-components');
119
+
120
+ let textId = useSlotId();
121
+ let ariaLabel = props['aria-label'] || stringFormatter.format('dropzoneLabel');
122
+ let messageId = props['aria-labelledby'];
123
+ let ariaLabelledby = [textId, messageId].filter(Boolean).join(' ');
124
+ let labelProps = useLabels({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby });
125
+
126
+ let { clipboardProps } = useClipboard({
127
+ isDisabled,
128
+ onPaste: (items) =>
129
+ props.onDrop?.({
130
+ type: 'drop',
131
+ items,
132
+ x: 0,
133
+ y: 0,
134
+ dropOperation: 'copy',
135
+ }),
136
+ });
137
+
138
+ let renderProps = useRenderProps({
139
+ ...props,
140
+ values: { isHovered, isFocused, isFocusVisible, isDropTarget, isDisabled },
141
+ defaultClassName: 'react-aria-DropZone',
142
+ });
143
+ let DOMProps = filterDOMProps(props, { global: true });
144
+ delete DOMProps.id;
145
+
146
+ return (
147
+ <Provider values={[[TextContext, { id: textId, slot: 'label' }]]}>
148
+ <dom.div
149
+ {...mergeProps(DOMProps, renderProps, dropProps, hoverProps)}
150
+ slot={props.slot || undefined}
151
+ ref={dropzoneRef}
152
+ onClick={(e: MouseEvent) => {
153
+ let target = getEventTarget(e) as HTMLElement | null;
154
+ while (target && nodeContains(dropzoneRef.current, target)) {
155
+ if (isFocusable(target)) {
156
+ break;
157
+ } else if (target === dropzoneRef.current) {
158
+ buttonRef.current?.focus();
159
+ break;
160
+ }
161
+
162
+ target = target.parentElement;
163
+ }
164
+ }}
165
+ data-hovered={isHovered || undefined}
166
+ data-focused={isFocused || undefined}
167
+ data-focus-visible={isFocusVisible || undefined}
168
+ data-drop-target={isDropTarget || undefined}
169
+ data-disabled={isDisabled || undefined}
170
+ >
171
+ <VisuallyHidden>
172
+ <dom.button
173
+ {...mergeProps(buttonProps, focusProps, clipboardProps, labelProps)}
174
+ ref={buttonRef}
175
+ />
176
+ </VisuallyHidden>
177
+ {renderProps.children}
178
+ </dom.div>
179
+ </Provider>
180
+ );
181
+ });
@@ -0,0 +1,96 @@
1
+ /** @jsxImportSource octane */
2
+ // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-aria-components/src/FileTrigger.tsx).
3
+ /*
4
+ * Copyright 2023 Adobe. All rights reserved.
5
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License. You may obtain a copy
7
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
11
+ * OF ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ */
14
+
15
+ import { filterDOMProps } from '../upstream-exports/react-aria/filterDOMProps';
16
+
17
+ import { GlobalDOMAttributes } from '@react-types/shared';
18
+ import { Input } from './Input';
19
+ import { PressResponder } from '../upstream-exports/react-aria/private/interactions/PressResponder';
20
+ import React, { ForwardedRef, forwardRef, ReactNode } from '../compat/react';
21
+ import { useObjectRef } from '../upstream-exports/react-aria/useObjectRef';
22
+
23
+ export interface FileTriggerProps extends GlobalDOMAttributes<HTMLInputElement> {
24
+ /**
25
+ * Specifies what mime type of files are allowed.
26
+ */
27
+ acceptedFileTypes?: ReadonlyArray<string>;
28
+ /**
29
+ * Whether multiple files can be selected.
30
+ */
31
+ allowsMultiple?: boolean;
32
+ /**
33
+ * Specifies the use of a media capture mechanism to capture the media on the spot.
34
+ */
35
+ defaultCamera?: 'user' | 'environment';
36
+ /**
37
+ * Handler when a user selects a file.
38
+ */
39
+ onSelect?: (files: FileList | null) => void;
40
+ /**
41
+ * The children of the component.
42
+ */
43
+ children?: ReactNode;
44
+ /**
45
+ * Enables the selection of directories instead of individual files.
46
+ */
47
+ acceptDirectory?: boolean;
48
+ }
49
+
50
+ /**
51
+ * A FileTrigger allows a user to access the file system with any pressable React Aria or React
52
+ * Spectrum component, or custom components built with usePress.
53
+ */
54
+ export const FileTrigger = forwardRef(function FileTrigger(
55
+ props: FileTriggerProps,
56
+ ref: ForwardedRef<HTMLInputElement>,
57
+ ) {
58
+ let {
59
+ onSelect,
60
+ acceptedFileTypes,
61
+ allowsMultiple,
62
+ defaultCamera,
63
+ children,
64
+ acceptDirectory,
65
+ ...rest
66
+ } = props;
67
+ let inputRef = useObjectRef(ref);
68
+ let domProps = filterDOMProps(rest, { global: true });
69
+
70
+ return (
71
+ <>
72
+ <PressResponder
73
+ onPress={() => {
74
+ if (inputRef.current?.value) {
75
+ inputRef.current.value = '';
76
+ }
77
+ inputRef.current?.click();
78
+ }}
79
+ >
80
+ {children}
81
+ </PressResponder>
82
+ <Input
83
+ {...domProps}
84
+ className=""
85
+ type="file"
86
+ ref={inputRef}
87
+ style={{ display: 'none' }}
88
+ accept={acceptedFileTypes?.toString()}
89
+ onChange={(e: React.ChangeEvent<HTMLInputElement>) => onSelect?.(e.currentTarget.files)}
90
+ capture={defaultCamera}
91
+ multiple={allowsMultiple}
92
+ webkitdirectory={acceptDirectory ? '' : undefined}
93
+ />
94
+ </>
95
+ );
96
+ });
@@ -0,0 +1,33 @@
1
+ /** @jsxImportSource octane */
2
+ // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-aria-components/src/GridLayout.ts).
3
+ /*
4
+ * Copyright 2024 Adobe. All rights reserved.
5
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License. You may obtain a copy
7
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
11
+ * OF ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ */
14
+
15
+ import {
16
+ GridLayout as BaseGridLayout,
17
+ GridLayoutOptions,
18
+ } from '../upstream-exports/react-stately/useVirtualizerState';
19
+ import { LayoutOptionsDelegate } from './Virtualizer';
20
+ import { useLocale } from '../upstream-exports/react-aria/I18nProvider';
21
+ import { useMemo } from '../compat/react';
22
+
23
+ export class GridLayout<T, O extends GridLayoutOptions = GridLayoutOptions>
24
+ extends BaseGridLayout<T, O>
25
+ implements LayoutOptionsDelegate<GridLayoutOptions>
26
+ {
27
+ // Automatically determine the layout direction from the current locale.
28
+ useLayoutOptions(): GridLayoutOptions {
29
+ /* eslint-disable react-hooks/rules-of-hooks */
30
+ let { direction } = useLocale();
31
+ return useMemo(() => ({ direction }), [direction]);
32
+ }
33
+ }