@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.
- package/LICENSE-APACHE-2.0 +201 -0
- package/README.md +20 -7
- package/UPSTREAM.md +108 -0
- package/package.json +10 -6
- package/src/calendar/useCalendar.tsx +36 -0
- package/src/calendar/useCalendarBase.tsx +142 -0
- package/src/calendar/useCalendarCell.tsx +416 -0
- package/src/calendar/useCalendarGrid.tsx +202 -0
- package/src/calendar/useCalendarHeading.tsx +85 -0
- package/src/calendar/useCalendarMonthPicker.tsx +92 -0
- package/src/calendar/useCalendarYearPicker.tsx +127 -0
- package/src/calendar/useRangeCalendar.tsx +121 -0
- package/src/calendar/utils.tsx +183 -0
- package/src/color/useColorArea.tsx +599 -0
- package/src/color/useColorAreaGradient.tsx +157 -0
- package/src/color/useColorChannelField.tsx +53 -0
- package/src/color/useColorField.tsx +170 -0
- package/src/color/useColorSlider.tsx +177 -0
- package/src/color/useColorSwatch.tsx +83 -0
- package/src/color/useColorWheel.tsx +401 -0
- package/src/compat/react.ts +111 -0
- package/src/components/Calendar.tsx +842 -0
- package/src/components/ColorArea.tsx +120 -0
- package/src/components/ColorField.tsx +304 -0
- package/src/components/ColorPicker.tsx +86 -0
- package/src/components/ColorSlider.tsx +144 -0
- package/src/components/ColorSwatch.tsx +72 -0
- package/src/components/ColorSwatchPicker.tsx +176 -0
- package/src/components/ColorThumb.tsx +140 -0
- package/src/components/ColorWheel.tsx +163 -0
- package/src/components/DateField.tsx +580 -0
- package/src/components/DatePicker.tsx +386 -0
- package/src/components/DropZone.tsx +181 -0
- package/src/components/FileTrigger.tsx +96 -0
- package/src/components/GridLayout.tsx +33 -0
- package/src/components/HiddenDateInput.tsx +169 -0
- package/src/components/TableLayout.tsx +39 -0
- package/src/components/Toast.tsx +336 -0
- package/src/components/Virtualizer.tsx +219 -0
- package/src/components/index.ts +257 -7
- package/src/components/useDragAndDrop.tsx +221 -0
- package/src/components/utils.ts +12 -89
- package/src/datepicker/useDateField.tsx +272 -0
- package/src/datepicker/useDatePicker.tsx +229 -0
- package/src/datepicker/useDatePickerGroup.tsx +147 -0
- package/src/datepicker/useDateRangePicker.tsx +288 -0
- package/src/datepicker/useDateSegment.tsx +439 -0
- package/src/datepicker/useDisplayNames.tsx +53 -0
- package/src/dnd/DragManager.tsx +718 -0
- package/src/dnd/DragPreview.tsx +100 -0
- package/src/dnd/DropTargetKeyboardNavigation.tsx +317 -0
- package/src/dnd/ListDropTargetDelegate.tsx +215 -0
- package/src/dnd/constants.tsx +93 -0
- package/src/dnd/useAutoScroll.tsx +116 -0
- package/src/dnd/useClipboard.tsx +160 -0
- package/src/dnd/useDrag.tsx +437 -0
- package/src/dnd/useDraggableCollection.tsx +35 -0
- package/src/dnd/useDraggableItem.tsx +168 -0
- package/src/dnd/useDrop.tsx +518 -0
- package/src/dnd/useDropIndicator.tsx +129 -0
- package/src/dnd/useDroppableCollection.tsx +808 -0
- package/src/dnd/useDroppableItem.tsx +99 -0
- package/src/dnd/useVirtualDrop.tsx +52 -0
- package/src/dnd/utils.tsx +430 -0
- package/src/intl/calendar/ar-AE.json +14 -0
- package/src/intl/calendar/bg-BG.json +14 -0
- package/src/intl/calendar/cs-CZ.json +14 -0
- package/src/intl/calendar/da-DK.json +14 -0
- package/src/intl/calendar/de-DE.json +14 -0
- package/src/intl/calendar/el-GR.json +14 -0
- package/src/intl/calendar/en-US.json +14 -0
- package/src/intl/calendar/es-ES.json +14 -0
- package/src/intl/calendar/et-EE.json +14 -0
- package/src/intl/calendar/fi-FI.json +14 -0
- package/src/intl/calendar/fr-FR.json +14 -0
- package/src/intl/calendar/he-IL.json +14 -0
- package/src/intl/calendar/hr-HR.json +14 -0
- package/src/intl/calendar/hu-HU.json +14 -0
- package/src/intl/calendar/index.ts +73 -0
- package/src/intl/calendar/it-IT.json +14 -0
- package/src/intl/calendar/ja-JP.json +14 -0
- package/src/intl/calendar/ko-KR.json +14 -0
- package/src/intl/calendar/lt-LT.json +14 -0
- package/src/intl/calendar/lv-LV.json +14 -0
- package/src/intl/calendar/nb-NO.json +14 -0
- package/src/intl/calendar/nl-NL.json +14 -0
- package/src/intl/calendar/pl-PL.json +14 -0
- package/src/intl/calendar/pt-BR.json +14 -0
- package/src/intl/calendar/pt-PT.json +14 -0
- package/src/intl/calendar/ro-RO.json +14 -0
- package/src/intl/calendar/ru-RU.json +14 -0
- package/src/intl/calendar/sk-SK.json +14 -0
- package/src/intl/calendar/sl-SI.json +14 -0
- package/src/intl/calendar/sr-SP.json +14 -0
- package/src/intl/calendar/sv-SE.json +14 -0
- package/src/intl/calendar/tr-TR.json +14 -0
- package/src/intl/calendar/uk-UA.json +14 -0
- package/src/intl/calendar/zh-CN.json +14 -0
- package/src/intl/calendar/zh-TW.json +14 -0
- package/src/intl/color/ar-AE.json +8 -0
- package/src/intl/color/bg-BG.json +8 -0
- package/src/intl/color/cs-CZ.json +8 -0
- package/src/intl/color/da-DK.json +8 -0
- package/src/intl/color/de-DE.json +8 -0
- package/src/intl/color/el-GR.json +8 -0
- package/src/intl/color/en-US.json +8 -0
- package/src/intl/color/es-ES.json +8 -0
- package/src/intl/color/et-EE.json +8 -0
- package/src/intl/color/fi-FI.json +8 -0
- package/src/intl/color/fr-FR.json +8 -0
- package/src/intl/color/he-IL.json +8 -0
- package/src/intl/color/hr-HR.json +8 -0
- package/src/intl/color/hu-HU.json +8 -0
- package/src/intl/color/index.ts +73 -0
- package/src/intl/color/it-IT.json +8 -0
- package/src/intl/color/ja-JP.json +8 -0
- package/src/intl/color/ko-KR.json +8 -0
- package/src/intl/color/lt-LT.json +8 -0
- package/src/intl/color/lv-LV.json +8 -0
- package/src/intl/color/nb-NO.json +8 -0
- package/src/intl/color/nl-NL.json +8 -0
- package/src/intl/color/pl-PL.json +8 -0
- package/src/intl/color/pt-BR.json +8 -0
- package/src/intl/color/pt-PT.json +8 -0
- package/src/intl/color/ro-RO.json +8 -0
- package/src/intl/color/ru-RU.json +8 -0
- package/src/intl/color/sk-SK.json +8 -0
- package/src/intl/color/sl-SI.json +8 -0
- package/src/intl/color/sr-SP.json +8 -0
- package/src/intl/color/sv-SE.json +8 -0
- package/src/intl/color/tr-TR.json +8 -0
- package/src/intl/color/uk-UA.json +8 -0
- package/src/intl/color/zh-CN.json +8 -0
- package/src/intl/color/zh-TW.json +8 -0
- package/src/intl/datepicker/ar-AE.json +18 -0
- package/src/intl/datepicker/bg-BG.json +18 -0
- package/src/intl/datepicker/cs-CZ.json +18 -0
- package/src/intl/datepicker/da-DK.json +18 -0
- package/src/intl/datepicker/de-DE.json +18 -0
- package/src/intl/datepicker/el-GR.json +18 -0
- package/src/intl/datepicker/en-US.json +18 -0
- package/src/intl/datepicker/es-ES.json +18 -0
- package/src/intl/datepicker/et-EE.json +18 -0
- package/src/intl/datepicker/fi-FI.json +18 -0
- package/src/intl/datepicker/fr-FR.json +18 -0
- package/src/intl/datepicker/he-IL.json +18 -0
- package/src/intl/datepicker/hr-HR.json +18 -0
- package/src/intl/datepicker/hu-HU.json +18 -0
- package/src/intl/datepicker/index.ts +73 -0
- package/src/intl/datepicker/it-IT.json +18 -0
- package/src/intl/datepicker/ja-JP.json +18 -0
- package/src/intl/datepicker/ko-KR.json +18 -0
- package/src/intl/datepicker/lt-LT.json +18 -0
- package/src/intl/datepicker/lv-LV.json +18 -0
- package/src/intl/datepicker/nb-NO.json +18 -0
- package/src/intl/datepicker/nl-NL.json +18 -0
- package/src/intl/datepicker/pl-PL.json +18 -0
- package/src/intl/datepicker/pt-BR.json +18 -0
- package/src/intl/datepicker/pt-PT.json +18 -0
- package/src/intl/datepicker/ro-RO.json +18 -0
- package/src/intl/datepicker/ru-RU.json +18 -0
- package/src/intl/datepicker/sk-SK.json +18 -0
- package/src/intl/datepicker/sl-SI.json +18 -0
- package/src/intl/datepicker/sr-SP.json +18 -0
- package/src/intl/datepicker/sv-SE.json +18 -0
- package/src/intl/datepicker/tr-TR.json +18 -0
- package/src/intl/datepicker/uk-UA.json +18 -0
- package/src/intl/datepicker/zh-CN.json +18 -0
- package/src/intl/datepicker/zh-TW.json +18 -0
- package/src/intl/dnd/ar-AE.json +29 -0
- package/src/intl/dnd/bg-BG.json +29 -0
- package/src/intl/dnd/cs-CZ.json +29 -0
- package/src/intl/dnd/da-DK.json +29 -0
- package/src/intl/dnd/de-DE.json +29 -0
- package/src/intl/dnd/el-GR.json +29 -0
- package/src/intl/dnd/en-US.json +29 -0
- package/src/intl/dnd/es-ES.json +29 -0
- package/src/intl/dnd/et-EE.json +29 -0
- package/src/intl/dnd/fi-FI.json +29 -0
- package/src/intl/dnd/fr-FR.json +29 -0
- package/src/intl/dnd/he-IL.json +29 -0
- package/src/intl/dnd/hr-HR.json +29 -0
- package/src/intl/dnd/hu-HU.json +29 -0
- package/src/intl/dnd/index.ts +73 -0
- package/src/intl/dnd/it-IT.json +29 -0
- package/src/intl/dnd/ja-JP.json +29 -0
- package/src/intl/dnd/ko-KR.json +29 -0
- package/src/intl/dnd/lt-LT.json +29 -0
- package/src/intl/dnd/lv-LV.json +29 -0
- package/src/intl/dnd/nb-NO.json +29 -0
- package/src/intl/dnd/nl-NL.json +29 -0
- package/src/intl/dnd/pl-PL.json +29 -0
- package/src/intl/dnd/pt-BR.json +29 -0
- package/src/intl/dnd/pt-PT.json +29 -0
- package/src/intl/dnd/ro-RO.json +29 -0
- package/src/intl/dnd/ru-RU.json +29 -0
- package/src/intl/dnd/sk-SK.json +29 -0
- package/src/intl/dnd/sl-SI.json +29 -0
- package/src/intl/dnd/sr-SP.json +29 -0
- package/src/intl/dnd/sv-SE.json +29 -0
- package/src/intl/dnd/tr-TR.json +29 -0
- package/src/intl/dnd/uk-UA.json +29 -0
- package/src/intl/dnd/zh-CN.json +29 -0
- package/src/intl/dnd/zh-TW.json +29 -0
- package/src/intl/react-aria-components/ar-AE.json +6 -0
- package/src/intl/react-aria-components/bg-BG.json +6 -0
- package/src/intl/react-aria-components/cs-CZ.json +6 -0
- package/src/intl/react-aria-components/da-DK.json +6 -0
- package/src/intl/react-aria-components/de-DE.json +6 -0
- package/src/intl/react-aria-components/el-GR.json +6 -0
- package/src/intl/react-aria-components/en-US.json +6 -0
- package/src/intl/react-aria-components/es-ES.json +6 -0
- package/src/intl/react-aria-components/et-EE.json +6 -0
- package/src/intl/react-aria-components/fi-FI.json +6 -0
- package/src/intl/react-aria-components/fr-FR.json +6 -0
- package/src/intl/react-aria-components/he-IL.json +6 -0
- package/src/intl/react-aria-components/hr-HR.json +6 -0
- package/src/intl/react-aria-components/hu-HU.json +6 -0
- package/src/intl/react-aria-components/index.ts +73 -0
- package/src/intl/react-aria-components/it-IT.json +6 -0
- package/src/intl/react-aria-components/ja-JP.json +6 -0
- package/src/intl/react-aria-components/ko-KR.json +6 -0
- package/src/intl/react-aria-components/lt-LT.json +6 -0
- package/src/intl/react-aria-components/lv-LV.json +6 -0
- package/src/intl/react-aria-components/nb-NO.json +6 -0
- package/src/intl/react-aria-components/nl-NL.json +6 -0
- package/src/intl/react-aria-components/pl-PL.json +6 -0
- package/src/intl/react-aria-components/pt-BR.json +6 -0
- package/src/intl/react-aria-components/pt-PT.json +6 -0
- package/src/intl/react-aria-components/ro-RO.json +6 -0
- package/src/intl/react-aria-components/ru-RU.json +6 -0
- package/src/intl/react-aria-components/sk-SK.json +6 -0
- package/src/intl/react-aria-components/sl-SI.json +6 -0
- package/src/intl/react-aria-components/sr-SP.json +6 -0
- package/src/intl/react-aria-components/sv-SE.json +6 -0
- package/src/intl/react-aria-components/tr-TR.json +6 -0
- package/src/intl/react-aria-components/uk-UA.json +6 -0
- package/src/intl/react-aria-components/zh-CN.json +6 -0
- package/src/intl/react-aria-components/zh-TW.json +6 -0
- package/src/intl/stately-color/ar-AE.json +39 -0
- package/src/intl/stately-color/bg-BG.json +39 -0
- package/src/intl/stately-color/cs-CZ.json +39 -0
- package/src/intl/stately-color/da-DK.json +39 -0
- package/src/intl/stately-color/de-DE.json +39 -0
- package/src/intl/stately-color/el-GR.json +39 -0
- package/src/intl/stately-color/en-US.json +39 -0
- package/src/intl/stately-color/es-ES.json +39 -0
- package/src/intl/stately-color/et-EE.json +39 -0
- package/src/intl/stately-color/fi-FI.json +39 -0
- package/src/intl/stately-color/fr-FR.json +39 -0
- package/src/intl/stately-color/he-IL.json +39 -0
- package/src/intl/stately-color/hr-HR.json +39 -0
- package/src/intl/stately-color/hu-HU.json +39 -0
- package/src/intl/stately-color/index.ts +73 -0
- package/src/intl/stately-color/it-IT.json +39 -0
- package/src/intl/stately-color/ja-JP.json +39 -0
- package/src/intl/stately-color/ko-KR.json +39 -0
- package/src/intl/stately-color/lt-LT.json +39 -0
- package/src/intl/stately-color/lv-LV.json +39 -0
- package/src/intl/stately-color/nb-NO.json +39 -0
- package/src/intl/stately-color/nl-NL.json +39 -0
- package/src/intl/stately-color/pl-PL.json +39 -0
- package/src/intl/stately-color/pt-BR.json +39 -0
- package/src/intl/stately-color/pt-PT.json +39 -0
- package/src/intl/stately-color/ro-RO.json +39 -0
- package/src/intl/stately-color/ru-RU.json +39 -0
- package/src/intl/stately-color/sk-SK.json +39 -0
- package/src/intl/stately-color/sl-SI.json +39 -0
- package/src/intl/stately-color/sr-SP.json +39 -0
- package/src/intl/stately-color/sv-SE.json +39 -0
- package/src/intl/stately-color/tr-TR.json +39 -0
- package/src/intl/stately-color/uk-UA.json +39 -0
- package/src/intl/stately-color/zh-CN.json +39 -0
- package/src/intl/stately-color/zh-TW.json +39 -0
- package/src/intl/toast/ar-AE.json +4 -0
- package/src/intl/toast/bg-BG.json +4 -0
- package/src/intl/toast/cs-CZ.json +4 -0
- package/src/intl/toast/da-DK.json +4 -0
- package/src/intl/toast/de-DE.json +4 -0
- package/src/intl/toast/el-GR.json +4 -0
- package/src/intl/toast/en-US.json +4 -0
- package/src/intl/toast/es-ES.json +4 -0
- package/src/intl/toast/et-EE.json +4 -0
- package/src/intl/toast/fi-FI.json +4 -0
- package/src/intl/toast/fr-FR.json +4 -0
- package/src/intl/toast/he-IL.json +4 -0
- package/src/intl/toast/hr-HR.json +4 -0
- package/src/intl/toast/hu-HU.json +4 -0
- package/src/intl/toast/index.ts +73 -0
- package/src/intl/toast/it-IT.json +4 -0
- package/src/intl/toast/ja-JP.json +4 -0
- package/src/intl/toast/ko-KR.json +4 -0
- package/src/intl/toast/lt-LT.json +4 -0
- package/src/intl/toast/lv-LV.json +4 -0
- package/src/intl/toast/nb-NO.json +4 -0
- package/src/intl/toast/nl-NL.json +4 -0
- package/src/intl/toast/pl-PL.json +4 -0
- package/src/intl/toast/pt-BR.json +4 -0
- package/src/intl/toast/pt-PT.json +4 -0
- package/src/intl/toast/ro-RO.json +4 -0
- package/src/intl/toast/ru-RU.json +4 -0
- package/src/intl/toast/sk-SK.json +4 -0
- package/src/intl/toast/sl-SI.json +4 -0
- package/src/intl/toast/sr-SP.json +4 -0
- package/src/intl/toast/sv-SE.json +4 -0
- package/src/intl/toast/tr-TR.json +4 -0
- package/src/intl/toast/uk-UA.json +4 -0
- package/src/intl/toast/zh-CN.json +4 -0
- package/src/intl/toast/zh-TW.json +4 -0
- package/src/landmark/useLandmark.tsx +569 -0
- package/src/stately/calendar/types.tsx +239 -0
- package/src/stately/calendar/useCalendarState.tsx +527 -0
- package/src/stately/calendar/useRangeCalendarState.tsx +323 -0
- package/src/stately/calendar/utils.tsx +175 -0
- package/src/stately/color/Color.tsx +889 -0
- package/src/stately/color/types.tsx +82 -0
- package/src/stately/color/useColor.tsx +30 -0
- package/src/stately/color/useColorAreaState.tsx +255 -0
- package/src/stately/color/useColorChannelFieldState.tsx +86 -0
- package/src/stately/color/useColorFieldState.tsx +220 -0
- package/src/stately/color/useColorPickerState.tsx +31 -0
- package/src/stately/color/useColorSliderState.tsx +143 -0
- package/src/stately/color/useColorWheelState.tsx +225 -0
- package/src/stately/data/useAsyncList.tsx +382 -0
- package/src/stately/data/useListData.tsx +447 -0
- package/src/stately/data/useTreeData.tsx +603 -0
- package/src/stately/datepicker/IncompleteDate.tsx +427 -0
- package/src/stately/datepicker/placeholders.tsx +116 -0
- package/src/stately/datepicker/types.tsx +169 -0
- package/src/stately/datepicker/useDateFieldState.tsx +564 -0
- package/src/stately/datepicker/useDatePickerState.tsx +244 -0
- package/src/stately/datepicker/useDateRangePickerState.tsx +397 -0
- package/src/stately/datepicker/useTimeFieldState.tsx +123 -0
- package/src/stately/datepicker/utils.tsx +316 -0
- package/src/stately/dnd/useDraggableCollectionState.tsx +191 -0
- package/src/stately/dnd/useDroppableCollectionState.tsx +288 -0
- package/src/stately/layout/GridLayout.tsx +449 -0
- package/src/stately/layout/ListLayout.tsx +872 -0
- package/src/stately/layout/TableLayout.tsx +793 -0
- package/src/stately/layout/WaterfallLayout.tsx +399 -0
- package/src/stately/toast/useToastState.tsx +219 -0
- package/src/stately/virtualizer/Layout.tsx +105 -0
- package/src/stately/virtualizer/LayoutInfo.tsx +127 -0
- package/src/stately/virtualizer/OverscanManager.tsx +56 -0
- package/src/stately/virtualizer/Point.tsx +47 -0
- package/src/stately/virtualizer/Rect.tsx +194 -0
- package/src/stately/virtualizer/ReusableView.tsx +101 -0
- package/src/stately/virtualizer/Size.tsx +48 -0
- package/src/stately/virtualizer/Virtualizer.tsx +408 -0
- package/src/stately/virtualizer/types.tsx +48 -0
- package/src/stately/virtualizer/useVirtualizerState.tsx +138 -0
- package/src/stately/virtualizer/utils.tsx +32 -0
- package/src/textfield/useTextField.ts +3 -0
- package/src/toast/useToast.tsx +105 -0
- package/src/toast/useToastRegion.tsx +223 -0
- package/src/upstream-exports/react-aria/I18nProvider.tsx +17 -0
- package/src/upstream-exports/react-aria/ListDropTargetDelegate.tsx +15 -0
- package/src/upstream-exports/react-aria/PortalProvider.tsx +19 -0
- package/src/upstream-exports/react-aria/SSRProvider.tsx +15 -0
- package/src/upstream-exports/react-aria/VisuallyHidden.tsx +15 -0
- package/src/upstream-exports/react-aria/filterDOMProps.tsx +3 -0
- package/src/upstream-exports/react-aria/mergeProps.tsx +14 -0
- package/src/upstream-exports/react-aria/private/dnd/DragManager.tsx +3 -0
- package/src/upstream-exports/react-aria/private/interactions/PressResponder.tsx +3 -0
- package/src/upstream-exports/react-aria/private/utils/isFocusable.tsx +3 -0
- package/src/upstream-exports/react-aria/private/utils/shadowdom/DOMFunctions.tsx +8 -0
- package/src/upstream-exports/react-aria/private/utils/useId.tsx +3 -0
- package/src/upstream-exports/react-aria/private/utils/useLabels.tsx +3 -0
- package/src/upstream-exports/react-aria/private/virtualizer/ScrollView.tsx +3 -0
- package/src/upstream-exports/react-aria/private/virtualizer/VirtualizerItem.tsx +3 -0
- package/src/upstream-exports/react-aria/useButton.tsx +22 -0
- package/src/upstream-exports/react-aria/useCalendar.tsx +37 -0
- package/src/upstream-exports/react-aria/useClipboard.tsx +23 -0
- package/src/upstream-exports/react-aria/useColorArea.tsx +19 -0
- package/src/upstream-exports/react-aria/useColorField.tsx +20 -0
- package/src/upstream-exports/react-aria/useColorSlider.tsx +19 -0
- package/src/upstream-exports/react-aria/useColorSwatch.tsx +15 -0
- package/src/upstream-exports/react-aria/useColorWheel.tsx +19 -0
- package/src/upstream-exports/react-aria/useDateField.tsx +23 -0
- package/src/upstream-exports/react-aria/useDatePicker.tsx +17 -0
- package/src/upstream-exports/react-aria/useDateRangePicker.tsx +24 -0
- package/src/upstream-exports/react-aria/useDraggableCollection.tsx +31 -0
- package/src/upstream-exports/react-aria/useDrop.tsx +33 -0
- package/src/upstream-exports/react-aria/useDroppableCollection.tsx +47 -0
- package/src/upstream-exports/react-aria/useFocusRing.tsx +16 -0
- package/src/upstream-exports/react-aria/useHover.tsx +17 -0
- package/src/upstream-exports/react-aria/useLocalizedStringFormatter.tsx +19 -0
- package/src/upstream-exports/react-aria/useObjectRef.tsx +14 -0
- package/src/upstream-exports/react-aria/useRangeCalendar.tsx +38 -0
- package/src/upstream-exports/react-aria/useTimeField.tsx +23 -0
- package/src/upstream-exports/react-aria/useToast.tsx +18 -0
- package/src/upstream-exports/react-stately/Color.tsx +23 -0
- package/src/upstream-exports/react-stately/private/form/useFormValidationState.tsx +11 -0
- package/src/upstream-exports/react-stately/useCalendarState.tsx +24 -0
- package/src/upstream-exports/react-stately/useColorAreaState.tsx +24 -0
- package/src/upstream-exports/react-stately/useColorFieldState.tsx +22 -0
- package/src/upstream-exports/react-stately/useColorPickerState.tsx +25 -0
- package/src/upstream-exports/react-stately/useColorSliderState.tsx +25 -0
- package/src/upstream-exports/react-stately/useColorWheelState.tsx +24 -0
- package/src/upstream-exports/react-stately/useDateFieldState.tsx +29 -0
- package/src/upstream-exports/react-stately/useDatePickerState.tsx +25 -0
- package/src/upstream-exports/react-stately/useDateRangePickerState.tsx +26 -0
- package/src/upstream-exports/react-stately/useDraggableCollectionState.tsx +19 -0
- package/src/upstream-exports/react-stately/useDroppableCollectionState.tsx +19 -0
- package/src/upstream-exports/react-stately/useRangeCalendarState.tsx +27 -0
- package/src/upstream-exports/react-stately/useTimeFieldState.tsx +26 -0
- package/src/upstream-exports/react-stately/useToastState.tsx +21 -0
- package/src/upstream-exports/react-stately/useVirtualizerState.tsx +22 -0
- package/src/utils/useLoadMore.tsx +89 -0
- package/src/virtualizer/ScrollView.tsx +401 -0
- package/src/virtualizer/Virtualizer.tsx +147 -0
- package/src/virtualizer/VirtualizerItem.tsx +108 -0
- package/src/virtualizer/useVirtualizerItem.tsx +57 -0
- package/src/virtualizer/utils.tsx +105 -0
- package/LICENSE +0 -21
- 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
|
+
}
|