@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,323 @@
1
+ /** @jsxImportSource octane */
2
+ // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-stately/src/calendar/useRangeCalendarState.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 { alignCenter, constrainValue, isInvalid, previousAvailableDate } from './utils';
16
+ import {
17
+ Calendar,
18
+ CalendarDate,
19
+ CalendarIdentifier,
20
+ DateDuration,
21
+ GregorianCalendar,
22
+ maxDate,
23
+ minDate,
24
+ toCalendar,
25
+ toCalendarDate,
26
+ } from '@internationalized/date';
27
+ import { CalendarPropsBase, DateValue, MappedDateValue, RangeCalendarState } from './types';
28
+ import { RangeValue, ValidationState, ValueBase } from '@react-types/shared';
29
+ import { useCalendarState } from './useCalendarState';
30
+ import { useCallback, useMemo, useState } from '../../compat/react';
31
+ import { useControlledState } from '../utils/useControlledState';
32
+
33
+ export type DateRange = RangeValue<DateValue> | null;
34
+ export interface RangeCalendarProps<T extends DateValue>
35
+ extends CalendarPropsBase, ValueBase<RangeValue<T> | null, RangeValue<MappedDateValue<T>>> {
36
+ /**
37
+ * When combined with `isDateUnavailable`, determines whether non-contiguous ranges,
38
+ * i.e. ranges containing unavailable dates, may be selected.
39
+ */
40
+ allowsNonContiguousRanges?: boolean;
41
+ /**
42
+ * Callback that is called for each date of the calendar. If it returns true, then the date is
43
+ * unavailable. The second argument provides the current selection anchor date, if any. This can
44
+ * be used to adjust the available dates based on the user's first selected date.
45
+ */
46
+ isDateUnavailable?: (date: DateValue, anchorDate: CalendarDate | null) => boolean;
47
+ }
48
+
49
+ export interface RangeCalendarStateOptions<
50
+ T extends DateValue = DateValue,
51
+ > extends RangeCalendarProps<T> {
52
+ /** The locale to display and edit the value according to. */
53
+ locale: string;
54
+ /**
55
+ * A function that creates a [Calendar](../internationalized/date/Calendar.html)
56
+ * object for a given calendar identifier. Such a function may be imported from the
57
+ * `@internationalized/date` package, or manually implemented to include support for
58
+ * only certain calendars.
59
+ */
60
+ createCalendar: (name: CalendarIdentifier) => Calendar;
61
+ /**
62
+ * The amount of days that will be displayed at once. This affects how pagination works.
63
+ *
64
+ * @default { months: 1 }
65
+ */
66
+ visibleDuration?: DateDuration;
67
+ /**
68
+ * Determines the alignment of the visible months on initial render based on the current selection
69
+ * or current date if there is no selection.
70
+ *
71
+ * @default 'center'
72
+ */
73
+ selectionAlignment?: 'start' | 'center' | 'end';
74
+ }
75
+
76
+ /**
77
+ * Provides state management for a range calendar component. A range calendar displays one or more
78
+ * date grids and allows users to select a contiguous range of dates.
79
+ */
80
+ export function useRangeCalendarState<T extends DateValue = DateValue>(
81
+ props: RangeCalendarStateOptions<T>,
82
+ ): RangeCalendarState<T> {
83
+ let {
84
+ value: valueProp,
85
+ defaultValue,
86
+ onChange,
87
+ createCalendar,
88
+ locale,
89
+ visibleDuration = { months: 1 },
90
+ minValue,
91
+ maxValue,
92
+ ...calendarProps
93
+ } = props;
94
+ let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<MappedDateValue<T>>>(
95
+ valueProp!,
96
+ defaultValue || null!,
97
+ onChange,
98
+ );
99
+
100
+ let [anchorDate, setAnchorDate] = useState<CalendarDate | null>(null);
101
+ let alignment: 'center' | 'start' = 'center';
102
+ if (value && value.start && value.end) {
103
+ let start = alignCenter(
104
+ toCalendarDate(value.start),
105
+ visibleDuration,
106
+ locale,
107
+ minValue,
108
+ maxValue,
109
+ );
110
+ let end = start.add(visibleDuration).subtract({ days: 1 });
111
+
112
+ if (value.end.compare(end) > 0) {
113
+ alignment = 'start';
114
+ }
115
+ }
116
+
117
+ let isDateUnavailable = useMemo(() => {
118
+ let isDateUnavailable = props.isDateUnavailable;
119
+ if (!isDateUnavailable) {
120
+ return undefined;
121
+ }
122
+
123
+ return (date: DateValue) => isDateUnavailable(date, anchorDate);
124
+ }, [props.isDateUnavailable, anchorDate]);
125
+
126
+ let getAvailableRange = useCallback(
127
+ (anchorDate: CalendarDate | null) => {
128
+ if (anchorDate && isDateUnavailable && !props.allowsNonContiguousRanges) {
129
+ const nextAvailableStartDate = nextUnavailableDate(
130
+ anchorDate,
131
+ isDateUnavailable,
132
+ visibleDuration,
133
+ -1,
134
+ );
135
+ const nextAvailableEndDate = nextUnavailableDate(
136
+ anchorDate,
137
+ isDateUnavailable,
138
+ visibleDuration,
139
+ 1,
140
+ );
141
+ return {
142
+ start: nextAvailableStartDate,
143
+ end: nextAvailableEndDate,
144
+ };
145
+ } else {
146
+ return null;
147
+ }
148
+ },
149
+ [isDateUnavailable, visibleDuration, props.allowsNonContiguousRanges],
150
+ );
151
+
152
+ let availableRange = useMemo(
153
+ () => getAvailableRange(anchorDate),
154
+ [getAvailableRange, anchorDate],
155
+ );
156
+ let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);
157
+ let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);
158
+
159
+ let calendar = useCalendarState({
160
+ ...calendarProps,
161
+ value: value && value.start,
162
+ createCalendar,
163
+ locale,
164
+ visibleDuration,
165
+ minValue: min,
166
+ maxValue: max,
167
+ selectionAlignment: props.selectionAlignment || alignment,
168
+ isDateUnavailable,
169
+ });
170
+
171
+ let highlightedRange = anchorDate
172
+ ? makeRange(anchorDate, calendar.focusedDate)
173
+ : value && makeRange(value.start, value.end);
174
+ let selectDate = (date: CalendarDate) => {
175
+ if (props.isReadOnly) {
176
+ return;
177
+ }
178
+
179
+ const constrainedDate = constrainValue(date, min, max);
180
+ const previousAvailableConstrainedDate = previousAvailableDate(
181
+ constrainedDate,
182
+ calendar.visibleRange.start,
183
+ isDateUnavailable,
184
+ );
185
+ if (!previousAvailableConstrainedDate) {
186
+ return;
187
+ }
188
+
189
+ if (!anchorDate) {
190
+ setAnchorDate(previousAvailableConstrainedDate);
191
+ } else {
192
+ let range = makeRange(anchorDate, previousAvailableConstrainedDate);
193
+ if (range) {
194
+ setValue({
195
+ start: convertValue(range.start, value?.start) as T,
196
+ end: convertValue(range.end, value?.end) as T,
197
+ });
198
+ }
199
+ setAnchorDate(null);
200
+ }
201
+ };
202
+
203
+ let [isDragging, setDragging] = useState(false);
204
+
205
+ let isInvalidSelection = useMemo(() => {
206
+ if (!value || anchorDate) {
207
+ return false;
208
+ }
209
+
210
+ if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {
211
+ return true;
212
+ }
213
+
214
+ return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);
215
+ }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);
216
+
217
+ let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;
218
+ let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;
219
+
220
+ return {
221
+ ...calendar,
222
+ value,
223
+ setValue,
224
+ anchorDate,
225
+ setAnchorDate,
226
+ highlightedRange,
227
+ validationState,
228
+ isValueInvalid,
229
+ selectFocusedDate() {
230
+ if (!calendar.isCellUnavailable(calendar.focusedDate)) {
231
+ selectDate(calendar.focusedDate);
232
+ }
233
+ },
234
+ commitSelection() {
235
+ selectDate(calendar.focusedDate);
236
+ },
237
+ selectDate,
238
+ highlightDate(date) {
239
+ if (anchorDate) {
240
+ calendar.setFocusedDate(date);
241
+ }
242
+ },
243
+ isSelected(date) {
244
+ return Boolean(
245
+ highlightedRange &&
246
+ date.compare(highlightedRange.start) >= 0 &&
247
+ date.compare(highlightedRange.end) <= 0 &&
248
+ !calendar.isCellDisabled(date) &&
249
+ !calendar.isCellUnavailable(date),
250
+ );
251
+ },
252
+ isInvalid(date) {
253
+ return (
254
+ calendar.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end)
255
+ );
256
+ },
257
+ isDragging,
258
+ setDragging,
259
+ clearSelection() {
260
+ setAnchorDate(null);
261
+ setValue(null);
262
+ },
263
+ focusNearestAvailableDate(anchorDate) {
264
+ let availableRange = getAvailableRange(anchorDate);
265
+ let isDateInvalid = (date: CalendarDate) =>
266
+ this.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end);
267
+ let nextDay = anchorDate.add({ days: 1 });
268
+ if (isDateInvalid(nextDay)) {
269
+ nextDay = anchorDate.subtract({ days: 1 });
270
+ }
271
+ if (!isDateInvalid(nextDay)) {
272
+ this.setFocusedDate(nextDay);
273
+ this.setFocused(true);
274
+ }
275
+ },
276
+ };
277
+ }
278
+
279
+ function makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {
280
+ if (!start || !end) {
281
+ return null;
282
+ }
283
+
284
+ if (end.compare(start) < 0) {
285
+ [start, end] = [end, start];
286
+ }
287
+
288
+ return { start: toCalendarDate(start), end: toCalendarDate(end) };
289
+ }
290
+
291
+ function convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {
292
+ // The display calendar should not have any effect on the emitted value.
293
+ // Emit dates in the same calendar as the original value, if any, otherwise gregorian.
294
+ newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());
295
+
296
+ // Preserve time if the input value had one.
297
+ if (oldValue && 'hour' in oldValue) {
298
+ return oldValue.set(newValue);
299
+ }
300
+
301
+ return newValue;
302
+ }
303
+
304
+ function nextUnavailableDate(
305
+ anchorDate: CalendarDate,
306
+ isDateUnavailable: (date: CalendarDate) => boolean,
307
+ visibleDuration: DateDuration,
308
+ dir: number,
309
+ ): CalendarDate | undefined {
310
+ let nextDate = anchorDate.add({ days: dir });
311
+ let minDate = anchorDate.subtract(visibleDuration);
312
+ let maxDate = anchorDate.add(visibleDuration);
313
+ while (
314
+ (dir < 0 ? nextDate.compare(minDate) >= 0 : nextDate.compare(maxDate) <= 0) &&
315
+ !isDateUnavailable(nextDate)
316
+ ) {
317
+ nextDate = nextDate.add({ days: dir });
318
+ }
319
+
320
+ if (isDateUnavailable(nextDate)) {
321
+ return nextDate.add({ days: -dir });
322
+ }
323
+ }
@@ -0,0 +1,175 @@
1
+ /** @jsxImportSource octane */
2
+ // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-stately/src/calendar/utils.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
+ import {
15
+ CalendarDate,
16
+ DateDuration,
17
+ maxDate,
18
+ minDate,
19
+ startOfMonth,
20
+ startOfWeek,
21
+ startOfYear,
22
+ toCalendarDate,
23
+ } from '@internationalized/date';
24
+ import { DateValue } from './types';
25
+
26
+ export function isInvalid(
27
+ date: DateValue,
28
+ minValue?: DateValue | null,
29
+ maxValue?: DateValue | null,
30
+ ): boolean {
31
+ return (
32
+ (minValue != null && date.compare(minValue) < 0) ||
33
+ (maxValue != null && date.compare(maxValue) > 0)
34
+ );
35
+ }
36
+
37
+ export function alignCenter(
38
+ date: CalendarDate,
39
+ duration: DateDuration,
40
+ locale: string,
41
+ minValue?: DateValue | null,
42
+ maxValue?: DateValue | null,
43
+ ): CalendarDate {
44
+ let halfDuration: DateDuration = {};
45
+ for (let key in duration) {
46
+ let durationValue = (duration as Record<string, number | undefined>)[key] ?? 0;
47
+ (halfDuration as Record<string, number | undefined>)[key] = Math.floor(durationValue / 2);
48
+ if (
49
+ ((halfDuration as Record<string, number | undefined>)[key] ?? 0) > 0 &&
50
+ durationValue % 2 === 0
51
+ ) {
52
+ (halfDuration as Record<string, number>)[key]--;
53
+ }
54
+ }
55
+
56
+ let aligned = alignStart(date, duration, locale).subtract(halfDuration);
57
+ return constrainStart(date, aligned, duration, locale, minValue, maxValue);
58
+ }
59
+
60
+ export function alignStart(
61
+ date: CalendarDate,
62
+ duration: DateDuration,
63
+ locale: string,
64
+ minValue?: DateValue | null,
65
+ maxValue?: DateValue | null,
66
+ ): CalendarDate {
67
+ // align to the start of the largest unit
68
+ let aligned = date;
69
+ if (duration.years) {
70
+ aligned = startOfYear(date);
71
+ } else if (duration.months) {
72
+ aligned = startOfMonth(date);
73
+ } else if (duration.weeks || (duration.days && duration.days > 7)) {
74
+ aligned = startOfWeek(date, locale);
75
+ }
76
+
77
+ return constrainStart(date, aligned, duration, locale, minValue, maxValue);
78
+ }
79
+
80
+ export function alignEnd(
81
+ date: CalendarDate,
82
+ duration: DateDuration,
83
+ locale: string,
84
+ minValue?: DateValue | null,
85
+ maxValue?: DateValue | null,
86
+ ): CalendarDate {
87
+ let d = { ...duration };
88
+ // subtract 1 from the smallest unit
89
+ if (d.days) {
90
+ d.days--;
91
+ } else if (d.weeks) {
92
+ d.weeks--;
93
+ } else if (d.months) {
94
+ d.months--;
95
+ } else if (d.years) {
96
+ d.years--;
97
+ }
98
+
99
+ let aligned = alignStart(date, duration, locale).subtract(d);
100
+ return constrainStart(date, aligned, duration, locale, minValue, maxValue);
101
+ }
102
+
103
+ export function constrainStart(
104
+ date: CalendarDate,
105
+ aligned: CalendarDate,
106
+ duration: DateDuration,
107
+ locale: string,
108
+ minValue?: DateValue | null,
109
+ maxValue?: DateValue | null,
110
+ ): CalendarDate {
111
+ if (minValue && date.compare(minValue) >= 0) {
112
+ let newDate = maxDate(aligned, alignStart(toCalendarDate(minValue), duration, locale));
113
+ if (newDate) {
114
+ aligned = newDate;
115
+ }
116
+ }
117
+
118
+ if (maxValue && date.compare(maxValue) <= 0) {
119
+ let newDate = minDate(aligned, alignEnd(toCalendarDate(maxValue), duration, locale));
120
+ if (newDate) {
121
+ aligned = newDate;
122
+ }
123
+ }
124
+
125
+ return aligned;
126
+ }
127
+
128
+ export function constrainValue(
129
+ date: CalendarDate,
130
+ minValue?: DateValue | null,
131
+ maxValue?: DateValue | null,
132
+ ): CalendarDate {
133
+ if (minValue) {
134
+ let newDate = maxDate(date, toCalendarDate(minValue));
135
+ if (newDate) {
136
+ date = newDate;
137
+ }
138
+ }
139
+
140
+ if (maxValue) {
141
+ let newDate = minDate(date, toCalendarDate(maxValue));
142
+ if (newDate) {
143
+ date = newDate;
144
+ }
145
+ }
146
+
147
+ return date;
148
+ }
149
+
150
+ export function previousAvailableDate(
151
+ date: CalendarDate,
152
+ minValue: DateValue,
153
+ isDateUnavailable?: (date: CalendarDate) => boolean,
154
+ ): CalendarDate | null {
155
+ if (!isDateUnavailable) {
156
+ return date;
157
+ }
158
+
159
+ while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {
160
+ date = date.subtract({ days: 1 });
161
+ }
162
+
163
+ if (date.compare(minValue) >= 0) {
164
+ return date;
165
+ }
166
+ return null;
167
+ }
168
+
169
+ export function isEqualDuration(a: DateDuration, b: DateDuration): boolean {
170
+ if (a === b) {
171
+ return true;
172
+ }
173
+
174
+ return a.days === b.days && a.weeks === b.weeks && a.months === b.months && a.years === b.years;
175
+ }