@octanejs/aria 0.0.40 → 0.0.42

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,599 @@
1
+ /** @jsxImportSource octane */
2
+ // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-aria/src/color/useColorArea.ts).
3
+ /*
4
+ * Copyright 2020 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
+ AriaLabelingProps,
17
+ DOMAttributes,
18
+ DOMProps,
19
+ MoveMoveEvent,
20
+ RefObject,
21
+ } from '@react-types/shared';
22
+ import {
23
+ ColorAreaProps,
24
+ ColorAreaState,
25
+ } from '../upstream-exports/react-stately/useColorAreaState';
26
+ import { ColorChannel } from '../upstream-exports/react-stately/Color';
27
+ import { focusWithoutScrolling } from '../utils/focusWithoutScrolling';
28
+ import intlMessages from '../intl/color/index';
29
+ import { isAndroid, isIOS } from '../utils/platform';
30
+ import { mergeProps } from '../utils/mergeProps';
31
+ import React, { InputHTMLAttributes, useCallback, useRef, useState } from '../compat/react';
32
+ import { useColorAreaGradient } from './useColorAreaGradient';
33
+ import { useFocus } from '../interactions/useFocus';
34
+ import { useFocusWithin } from '../interactions/useFocusWithin';
35
+ import { useFormReset } from '../utils/useFormReset';
36
+ import { useGlobalListeners } from '../utils/useGlobalListeners';
37
+ import { useKeyboard } from '../interactions/useKeyboard';
38
+ import { useLabels } from '../utils/useLabels';
39
+ import { useLocale } from '../i18n/I18nProvider';
40
+ import { useLocalizedStringFormatter } from '../i18n/useLocalizedStringFormatter';
41
+ import { useMove } from '../interactions/useMove';
42
+ import { useVisuallyHidden } from '../visually-hidden/VisuallyHidden';
43
+
44
+ export interface AriaColorAreaProps extends ColorAreaProps, DOMProps, AriaLabelingProps {
45
+ /**
46
+ * The name of the x channel input element, used when submitting an HTML form. See
47
+ * [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefname).
48
+ */
49
+ xName?: string;
50
+ /**
51
+ * The name of the y channel input element, used when submitting an HTML form. See
52
+ * [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefname).
53
+ */
54
+ yName?: string;
55
+ /**
56
+ * The `<form>` element to associate the ColorArea with.
57
+ * The value of this attribute must be the id of a `<form>` in the same document.
58
+ * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#form).
59
+ */
60
+ form?: string;
61
+ }
62
+
63
+ export interface ColorAreaAria {
64
+ /** Props for the color area container element. */
65
+ colorAreaProps: DOMAttributes;
66
+ /** Props for the thumb element. */
67
+ thumbProps: DOMAttributes;
68
+ /** Props for the visually hidden horizontal range input element. */
69
+ xInputProps: InputHTMLAttributes<HTMLInputElement>;
70
+ /** Props for the visually hidden vertical range input element. */
71
+ yInputProps: InputHTMLAttributes<HTMLInputElement>;
72
+ }
73
+
74
+ export interface AriaColorAreaOptions extends AriaColorAreaProps {
75
+ /** A ref to the input that represents the x axis of the color area. */
76
+ inputXRef: RefObject<HTMLInputElement | null>;
77
+ /** A ref to the input that represents the y axis of the color area. */
78
+ inputYRef: RefObject<HTMLInputElement | null>;
79
+ /** A ref to the color area containing element. */
80
+ containerRef: RefObject<Element | null>;
81
+ }
82
+
83
+ type NativeInputEvent = Event & { currentTarget: HTMLInputElement };
84
+
85
+ /**
86
+ * Provides the behavior and accessibility implementation for a color area component. Color area
87
+ * allows users to adjust two channels of an RGB, HSL or HSB color value against a two-dimensional
88
+ * gradient background.
89
+ */
90
+ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState): ColorAreaAria {
91
+ let {
92
+ isDisabled,
93
+ inputXRef,
94
+ inputYRef,
95
+ containerRef,
96
+ 'aria-label': ariaLabel,
97
+ xName,
98
+ yName,
99
+ form,
100
+ } = props;
101
+ let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/color');
102
+
103
+ let { addGlobalListener, removeGlobalListener } = useGlobalListeners();
104
+
105
+ let { direction, locale } = useLocale();
106
+
107
+ let [focusedInput, setFocusedInput] = useState<'x' | 'y' | null>(null);
108
+ let focusInput = useCallback(
109
+ (inputRef: RefObject<HTMLInputElement | null> = inputXRef) => {
110
+ if (inputRef.current) {
111
+ focusWithoutScrolling(inputRef.current);
112
+ }
113
+ },
114
+ [inputXRef],
115
+ );
116
+
117
+ useFormReset(inputXRef, state.defaultValue, state.setValue);
118
+
119
+ let [valueChangedViaKeyboard, setValueChangedViaKeyboard] = useState(false);
120
+ let [valueChangedViaInputEvent, setValueChangedViaInputEvent] = useState(false);
121
+ let { xChannel, yChannel, zChannel } = state.channels;
122
+ let xChannelStep = state.xChannelStep;
123
+ let yChannelStep = state.yChannelStep;
124
+
125
+ let currentPosition = useRef<{ x: number; y: number } | null>(null);
126
+
127
+ let { keyboardProps } = useKeyboard({
128
+ onKeyDown(e) {
129
+ // these are the cases that useMove doesn't handle
130
+ if (!/^(PageUp|PageDown|Home|End)$/.test(e.key)) {
131
+ e.continuePropagation();
132
+ return;
133
+ }
134
+ // same handling as useMove, don't need to stop propagation, useKeyboard will do that for us
135
+ e.preventDefault();
136
+ // remember to set this and unset it so that onChangeEnd is fired
137
+ state.setDragging(true);
138
+ setValueChangedViaKeyboard(true);
139
+ let dir: 'x' | 'y' | undefined;
140
+ switch (e.key) {
141
+ case 'PageUp':
142
+ state.incrementY(state.yChannelPageStep);
143
+ dir = 'y';
144
+ break;
145
+ case 'PageDown':
146
+ state.decrementY(state.yChannelPageStep);
147
+ dir = 'y';
148
+ break;
149
+ case 'Home':
150
+ direction === 'rtl'
151
+ ? state.incrementX(state.xChannelPageStep)
152
+ : state.decrementX(state.xChannelPageStep);
153
+ dir = 'x';
154
+ break;
155
+ case 'End':
156
+ direction === 'rtl'
157
+ ? state.decrementX(state.xChannelPageStep)
158
+ : state.incrementX(state.xChannelPageStep);
159
+ dir = 'x';
160
+ break;
161
+ }
162
+ state.setDragging(false);
163
+ if (dir) {
164
+ let input = dir === 'x' ? inputXRef : inputYRef;
165
+ focusInput(input);
166
+ setFocusedInput(dir);
167
+ }
168
+ },
169
+ });
170
+
171
+ let moveHandler = {
172
+ onMoveStart() {
173
+ currentPosition.current = null;
174
+ state.setDragging(true);
175
+ },
176
+ onMove({ deltaX, deltaY, pointerType, shiftKey }: MoveMoveEvent) {
177
+ let {
178
+ incrementX,
179
+ decrementX,
180
+ incrementY,
181
+ decrementY,
182
+ xChannelPageStep,
183
+ xChannelStep,
184
+ yChannelPageStep,
185
+ yChannelStep,
186
+ getThumbPosition,
187
+ setColorFromPoint,
188
+ } = state;
189
+ if (currentPosition.current == null) {
190
+ currentPosition.current = getThumbPosition();
191
+ }
192
+ let { width, height } = containerRef.current?.getBoundingClientRect() || {
193
+ width: 0,
194
+ height: 0,
195
+ };
196
+ let valueChanged = deltaX !== 0 || deltaY !== 0;
197
+ if (pointerType === 'keyboard') {
198
+ let deltaXValue =
199
+ shiftKey && xChannelPageStep > xChannelStep ? xChannelPageStep : xChannelStep;
200
+ let deltaYValue =
201
+ shiftKey && yChannelPageStep > yChannelStep ? yChannelPageStep : yChannelStep;
202
+ if ((deltaX > 0 && direction === 'ltr') || (deltaX < 0 && direction === 'rtl')) {
203
+ incrementX(deltaXValue);
204
+ } else if ((deltaX < 0 && direction === 'ltr') || (deltaX > 0 && direction === 'rtl')) {
205
+ decrementX(deltaXValue);
206
+ } else if (deltaY > 0) {
207
+ decrementY(deltaYValue);
208
+ } else if (deltaY < 0) {
209
+ incrementY(deltaYValue);
210
+ }
211
+ setValueChangedViaKeyboard(valueChanged);
212
+ // set the focused input based on which axis has the greater delta
213
+ focusedInput = valueChanged && Math.abs(deltaY) > Math.abs(deltaX) ? 'y' : 'x';
214
+ setFocusedInput(focusedInput);
215
+ } else {
216
+ currentPosition.current.x += ((direction === 'rtl' ? -1 : 1) * deltaX) / width;
217
+ currentPosition.current.y += deltaY / height;
218
+ setColorFromPoint(currentPosition.current.x, currentPosition.current.y);
219
+ }
220
+ },
221
+ onMoveEnd() {
222
+ isOnColorArea.current = false;
223
+ state.setDragging(false);
224
+ let input = focusedInput === 'x' ? inputXRef : inputYRef;
225
+ focusInput(input);
226
+ },
227
+ };
228
+ let { moveProps: movePropsThumb } = useMove(moveHandler);
229
+
230
+ let { focusWithinProps } = useFocusWithin({
231
+ onFocusWithinChange: (focusWithin: boolean) => {
232
+ if (!focusWithin) {
233
+ setValueChangedViaKeyboard(false);
234
+ setValueChangedViaInputEvent(false);
235
+ }
236
+ },
237
+ });
238
+
239
+ let currentPointer = useRef<number | null | undefined>(undefined);
240
+ let isOnColorArea = useRef<boolean>(false);
241
+ let { moveProps: movePropsContainer } = useMove({
242
+ onMoveStart() {
243
+ if (isOnColorArea.current) {
244
+ moveHandler.onMoveStart();
245
+ }
246
+ },
247
+ onMove(e) {
248
+ if (isOnColorArea.current) {
249
+ moveHandler.onMove(e);
250
+ }
251
+ },
252
+ onMoveEnd() {
253
+ if (isOnColorArea.current) {
254
+ moveHandler.onMoveEnd();
255
+ }
256
+ },
257
+ });
258
+
259
+ let onThumbDown = (id: number | null | undefined) => {
260
+ if (!state.isDragging) {
261
+ currentPointer.current = id;
262
+ setValueChangedViaKeyboard(false);
263
+ focusInput();
264
+ state.setDragging(true);
265
+ if (typeof PointerEvent !== 'undefined') {
266
+ addGlobalListener(window, 'pointerup', onThumbUp, false);
267
+ } else {
268
+ addGlobalListener(window, 'mouseup', onThumbUp, false);
269
+ addGlobalListener(window, 'touchend', onThumbUp, false);
270
+ }
271
+ }
272
+ };
273
+
274
+ let onThumbUp = (e: any) => {
275
+ let id = e.pointerId ?? e.changedTouches?.[0].identifier;
276
+ if (id === currentPointer.current) {
277
+ setValueChangedViaKeyboard(false);
278
+ focusInput();
279
+ state.setDragging(false);
280
+ currentPointer.current = undefined;
281
+ isOnColorArea.current = false;
282
+
283
+ if (typeof PointerEvent !== 'undefined') {
284
+ removeGlobalListener(window, 'pointerup', onThumbUp, false);
285
+ } else {
286
+ removeGlobalListener(window, 'mouseup', onThumbUp, false);
287
+ removeGlobalListener(window, 'touchend', onThumbUp, false);
288
+ }
289
+ }
290
+ };
291
+
292
+ let onColorAreaDown = (
293
+ colorArea: Element,
294
+ id: number | null | undefined,
295
+ clientX: number,
296
+ clientY: number,
297
+ ) => {
298
+ let rect = colorArea.getBoundingClientRect();
299
+ let { width, height } = rect;
300
+ let x = (clientX - rect.x) / width;
301
+ let y = (clientY - rect.y) / height;
302
+ if (direction === 'rtl') {
303
+ x = 1 - x;
304
+ }
305
+ if (
306
+ x >= 0 &&
307
+ x <= 1 &&
308
+ y >= 0 &&
309
+ y <= 1 &&
310
+ !state.isDragging &&
311
+ currentPointer.current === undefined
312
+ ) {
313
+ isOnColorArea.current = true;
314
+ setValueChangedViaKeyboard(false);
315
+ currentPointer.current = id;
316
+ state.setColorFromPoint(x, y);
317
+
318
+ focusInput();
319
+ state.setDragging(true);
320
+
321
+ if (typeof PointerEvent !== 'undefined') {
322
+ addGlobalListener(window, 'pointerup', onColorAreaUp, false);
323
+ } else {
324
+ addGlobalListener(window, 'mouseup', onColorAreaUp, false);
325
+ addGlobalListener(window, 'touchend', onColorAreaUp, false);
326
+ }
327
+ }
328
+ };
329
+
330
+ let onColorAreaUp = (e: any) => {
331
+ let id = e.pointerId ?? e.changedTouches?.[0].identifier;
332
+ if (isOnColorArea.current && id === currentPointer.current) {
333
+ isOnColorArea.current = false;
334
+ setValueChangedViaKeyboard(false);
335
+ currentPointer.current = undefined;
336
+ state.setDragging(false);
337
+ focusInput();
338
+
339
+ if (typeof PointerEvent !== 'undefined') {
340
+ removeGlobalListener(window, 'pointerup', onColorAreaUp, false);
341
+ } else {
342
+ removeGlobalListener(window, 'mouseup', onColorAreaUp, false);
343
+ removeGlobalListener(window, 'touchend', onColorAreaUp, false);
344
+ }
345
+ }
346
+ };
347
+
348
+ let colorAreaInteractions = isDisabled
349
+ ? {}
350
+ : mergeProps(
351
+ {
352
+ ...(typeof PointerEvent !== 'undefined'
353
+ ? {
354
+ onPointerDown: (e: React.PointerEvent) => {
355
+ if (
356
+ e.pointerType === 'mouse' &&
357
+ (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey)
358
+ ) {
359
+ return;
360
+ }
361
+ onColorAreaDown(e.currentTarget, e.pointerId, e.clientX, e.clientY);
362
+ },
363
+ }
364
+ : {
365
+ onMouseDown: (e: React.MouseEvent) => {
366
+ if (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey) {
367
+ return;
368
+ }
369
+ onColorAreaDown(e.currentTarget, undefined, e.clientX, e.clientY);
370
+ },
371
+ onTouchStart: (e: React.TouchEvent) => {
372
+ onColorAreaDown(
373
+ e.currentTarget,
374
+ e.changedTouches[0].identifier,
375
+ e.changedTouches[0].clientX,
376
+ e.changedTouches[0].clientY,
377
+ );
378
+ },
379
+ }),
380
+ },
381
+ movePropsContainer,
382
+ );
383
+
384
+ let thumbInteractions = isDisabled
385
+ ? {}
386
+ : mergeProps(
387
+ {
388
+ ...(typeof PointerEvent !== 'undefined'
389
+ ? {
390
+ onPointerDown: (e: React.PointerEvent) => {
391
+ if (
392
+ e.pointerType === 'mouse' &&
393
+ (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey)
394
+ ) {
395
+ return;
396
+ }
397
+ onThumbDown(e.pointerId);
398
+ },
399
+ }
400
+ : {
401
+ onMouseDown: (e: React.MouseEvent) => {
402
+ if (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey) {
403
+ return;
404
+ }
405
+ onThumbDown(undefined);
406
+ },
407
+ onTouchStart: (e: React.TouchEvent) => {
408
+ onThumbDown(e.changedTouches[0].identifier);
409
+ },
410
+ }),
411
+ },
412
+ focusWithinProps,
413
+ keyboardProps,
414
+ movePropsThumb,
415
+ );
416
+
417
+ let { focusProps: xInputFocusProps } = useFocus({
418
+ onFocus: () => {
419
+ setFocusedInput('x');
420
+ },
421
+ });
422
+
423
+ let { focusProps: yInputFocusProps } = useFocus({
424
+ onFocus: () => {
425
+ setFocusedInput('y');
426
+ },
427
+ });
428
+
429
+ const onInput = (e: NativeInputEvent) => {
430
+ const { currentTarget } = e;
431
+ setValueChangedViaInputEvent(true);
432
+ if (currentTarget === inputXRef.current) {
433
+ state.setXValue(parseFloat(currentTarget.value));
434
+ } else if (currentTarget === inputYRef.current) {
435
+ state.setYValue(parseFloat(currentTarget.value));
436
+ }
437
+ };
438
+
439
+ let isMobile = isIOS() || isAndroid();
440
+
441
+ let value = state.getDisplayColor();
442
+ const getAriaValueTextForChannel = useCallback(
443
+ (channel: ColorChannel) => {
444
+ const isAfterInput = valueChangedViaInputEvent || valueChangedViaKeyboard;
445
+ return `${
446
+ isAfterInput
447
+ ? stringFormatter.format('colorNameAndValue', {
448
+ name: value.getChannelName(channel, locale),
449
+ value: value.formatChannelValue(channel, locale),
450
+ })
451
+ : [
452
+ stringFormatter.format('colorNameAndValue', {
453
+ name: value.getChannelName(channel, locale),
454
+ value: value.formatChannelValue(channel, locale),
455
+ }),
456
+ stringFormatter.format('colorNameAndValue', {
457
+ name: value.getChannelName(channel === yChannel ? xChannel : yChannel, locale),
458
+ value: value.formatChannelValue(channel === yChannel ? xChannel : yChannel, locale),
459
+ }),
460
+ stringFormatter.format('colorNameAndValue', {
461
+ name: value.getChannelName(zChannel, locale),
462
+ value: value.formatChannelValue(zChannel, locale),
463
+ }),
464
+ ].join(', ')
465
+ }, ${value.getColorName(locale)}`;
466
+ },
467
+ [
468
+ locale,
469
+ value,
470
+ stringFormatter,
471
+ valueChangedViaInputEvent,
472
+ valueChangedViaKeyboard,
473
+ xChannel,
474
+ yChannel,
475
+ zChannel,
476
+ ],
477
+ );
478
+
479
+ let colorPickerLabel = stringFormatter.format('colorPicker');
480
+
481
+ let xInputLabellingProps = useLabels({
482
+ ...props,
483
+ 'aria-label': ariaLabel
484
+ ? stringFormatter.format('colorInputLabel', {
485
+ label: ariaLabel,
486
+ channelLabel: colorPickerLabel,
487
+ })
488
+ : colorPickerLabel,
489
+ });
490
+
491
+ let yInputLabellingProps = useLabels({
492
+ ...props,
493
+ 'aria-label': ariaLabel
494
+ ? stringFormatter.format('colorInputLabel', {
495
+ label: ariaLabel,
496
+ channelLabel: colorPickerLabel,
497
+ })
498
+ : colorPickerLabel,
499
+ });
500
+
501
+ let colorAreaLabellingProps = useLabels(
502
+ {
503
+ ...props,
504
+ 'aria-label': ariaLabel ? `${ariaLabel}, ${colorPickerLabel}` : undefined,
505
+ },
506
+ isMobile ? colorPickerLabel : undefined,
507
+ );
508
+
509
+ let ariaRoleDescription = stringFormatter.format('twoDimensionalSlider');
510
+
511
+ let { visuallyHiddenProps } = useVisuallyHidden({
512
+ style: {
513
+ opacity: '0.0001',
514
+ width: '100%',
515
+ height: '100%',
516
+ pointerEvents: 'none',
517
+ },
518
+ });
519
+
520
+ let { colorAreaStyleProps, thumbStyleProps } = useColorAreaGradient({
521
+ direction,
522
+ state,
523
+ xChannel,
524
+ yChannel,
525
+ zChannel,
526
+ });
527
+
528
+ return {
529
+ colorAreaProps: {
530
+ ...colorAreaLabellingProps,
531
+ ...colorAreaInteractions,
532
+ ...colorAreaStyleProps,
533
+ role: 'group',
534
+ },
535
+ thumbProps: {
536
+ ...thumbInteractions,
537
+ ...thumbStyleProps,
538
+ role: 'presentation',
539
+ },
540
+ xInputProps: {
541
+ ...xInputLabellingProps,
542
+ ...visuallyHiddenProps,
543
+ ...xInputFocusProps,
544
+ type: 'range',
545
+ min: state.value.getChannelRange(xChannel).minValue,
546
+ max: state.value.getChannelRange(xChannel).maxValue,
547
+ step: xChannelStep,
548
+ 'aria-roledescription': ariaRoleDescription,
549
+ 'aria-valuetext': getAriaValueTextForChannel(xChannel),
550
+ 'aria-orientation': 'horizontal',
551
+ 'aria-describedby': props['aria-describedby'],
552
+ 'aria-details': props['aria-details'],
553
+ disabled: isDisabled,
554
+ value: state.value.getChannelValue(xChannel),
555
+ name: xName,
556
+ form,
557
+ tabIndex: isMobile || !focusedInput || focusedInput === 'x' ? undefined : -1,
558
+ /*
559
+ So that only a single "2d slider" control shows up when listing form elements for screen readers,
560
+ add aria-hidden="true" to the unfocused control when the value has not changed via the keyboard,
561
+ but remove aria-hidden to reveal the input for each channel when the value has changed with the keyboard.
562
+ */
563
+ 'aria-hidden':
564
+ isMobile || !focusedInput || focusedInput === 'x' || valueChangedViaKeyboard
565
+ ? undefined
566
+ : 'true',
567
+ // React's synthetic onChange for range inputs follows the native input event.
568
+ onInput,
569
+ },
570
+ yInputProps: {
571
+ ...yInputLabellingProps,
572
+ ...visuallyHiddenProps,
573
+ ...yInputFocusProps,
574
+ type: 'range',
575
+ min: state.value.getChannelRange(yChannel).minValue,
576
+ max: state.value.getChannelRange(yChannel).maxValue,
577
+ step: yChannelStep,
578
+ 'aria-roledescription': ariaRoleDescription,
579
+ 'aria-valuetext': getAriaValueTextForChannel(yChannel),
580
+ 'aria-orientation': 'vertical',
581
+ 'aria-describedby': props['aria-describedby'],
582
+ 'aria-details': props['aria-details'],
583
+ disabled: isDisabled,
584
+ value: state.value.getChannelValue(yChannel),
585
+ name: yName,
586
+ form,
587
+ tabIndex: isMobile || focusedInput === 'y' ? undefined : -1,
588
+ /*
589
+ So that only a single "2d slider" control shows up when listing form elements for screen readers,
590
+ add aria-hidden="true" to the unfocused input when the value has not changed via the keyboard,
591
+ but remove aria-hidden to reveal the input for each channel when the value has changed with the keyboard.
592
+ */
593
+ 'aria-hidden':
594
+ isMobile || focusedInput === 'y' || valueChangedViaKeyboard ? undefined : 'true',
595
+ // React's synthetic onChange for range inputs follows the native input event.
596
+ onInput,
597
+ },
598
+ };
599
+ }