-
Notifications
You must be signed in to change notification settings - Fork 1.3k
feat: support selectionMode="replace" in grid collection test utils #8028
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
now we shouldnt need to call runAllTimers after selectOption
… into highlight_selection_test_util_support
if a checkbox wasnt present we werent using the keyboard navigate logic flow
…gation simulation to util
// TODO: perhaps this should just be shouldUseModifierKeys? | ||
selectionBehavior = 'toggle' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This API naming feels unclear TBH, people may be confused as to when they would apply it. When set to selectionBehavior="replace"
this causes the alt/meta key to be used when keyboard navigating/pressing to select a row so that it doesn't cause your previous selection to be replaced on focus/click. I wasn't certain if something like shouldUseModifierKeys
was clear either since a user may not know what the "modifier keys" even do
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think selectionBehavior is fine or gridListSelectionBehavior if you want to be clear it should match, then the user profiles/interactions should handle most things behind the scenes
…_selection_test_util_support
// TODO: perhaps this should just be shouldUseModifierKeys? | ||
selectionBehavior = 'toggle' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think selectionBehavior is fine or gridListSelectionBehavior if you want to be clear it should match, then the user profiles/interactions should handle most things behind the scenes
…_selection_test_util_support
@@ -140,7 +159,14 @@ export class TreeTester { | |||
// Note that long press interactions with rows is strictly touch only for grid rows | |||
await triggerLongPress({element: cell, advanceTimer: this._advanceTimer, pointerOpts: {pointerType: 'touch'}}); | |||
} else { | |||
await pressElement(this.user, cell, interactionType); | |||
// TODO add modifiers here? Maybe move into pressElement if we get more cases for different types of modifier keys |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i don't quite follow this todo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this was more of a musing around perhaps consolidating all of these "trigger a press while holding a modifier key" into pressElement
itself if it turns out that we have a lot of these kinds of interactions in our components
}; | ||
|
||
/** | ||
* Toggles the selection for the specified tree row. Defaults to using the interaction type set on the tree tester. | ||
* Note that this will endevor to always add/remove JUST the provided row to the set of selected rows. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe an option shouldExpandCurrentSelection?: boolean
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
for now I want to avoid that because having shouldExpandCurrentSelection=false
in a multiselect tree that has selectionBehavior='toggle'
would mean the user would expect all rows to be unselected (via click/keyboard/etc) and then their target row toggled on which adds to the complexity here, especially for a virtualized case.
@@ -137,7 +137,7 @@ export class TabsTester { | |||
} | |||
|
|||
if (interactionType === 'keyboard') { | |||
if (document.activeElement !== this._tablist || !this._tablist.contains(document.activeElement)) { | |||
if (document.activeElement !== this._tablist && !this._tablist.contains(document.activeElement)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
instead of calling focus
if it's not on the tablist, perhaps we should be throwing an error sayings, "navigate to the tablist"?
I know you didn't change that behaviour here, so more of a future topic
I'm just worried about the case that came up recently where calling focus directly was problematic because it didn't follow user interactions closely enough, skipped some steps, which caused the wrong state in the UI
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah its a bit tricky, trying to balance usability (forcing the user to simulate all the interactions required to go from where ever they are in their test to the target TabList) vs realism. I think I'd lean towards the latter to avoid the issues you mentioned but will see about do that in a follow up.
@@ -137,7 +136,7 @@ export class TreeTester { | |||
// this would be better than the check to do nothing in events.ts | |||
// also, it'd be good to be able to trigger selection on the row instead of having to go to the checkbox directly | |||
if (interactionType === 'keyboard' && (!checkboxSelection || !rowCheckbox)) { | |||
await this.keyboardNavigateToRow({row, useAltKey: selectionBehavior === 'replace'}); | |||
await this.keyboardNavigateToRow({row, avoidSelectionOnNav: selectionBehavior === 'replace'}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"avoid" feels a bit, "i'll try my best, but it might happen" to me, maybe one of these instead?
noSelectionOnNav
shouldNotSelectOnNav
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
haha, I was thinking about exactly this when naming the option. I actually did want to give that kind of impression since using noSelectionOnNav
or shouldNotSelectOnNav
would mean it would sound like selection SHOULD change on nav if those were false, something which wouldn't happen for a collection with selectionBehavior: 'toggle'
without me firing Enter after every ArrowUp/Down.
avoidSelectionOnNav
is more of the following: if true
we endeavor to avoid selection on keyboard navigation via the Alt modifier, otherwise if false
we won't do anything special when keyboard navigating and if something gets selected as you keyboard navigate that is expected due to the selectionBehavior
of your collection
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hrmmmmm..... sounds tricky to document. maybe instead of a boolean, it should be
selectionOnNav: 'default' | 'none'
and it defaults to 'default'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that sounds good, will update
## API Changes
react-aria-components/react-aria-components:DropZone DropZone {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
children?: ReactNode | ((DropZoneRenderProps & {
defaultChildren: ReactNode | undefined
})) => ReactNode
className?: string | ((DropZoneRenderProps & {
defaultClassName: string | undefined
})) => string
getDropOperation?: (DragTypes, Array<DropOperation>) => DropOperation
isDisabled?: boolean
onDrop?: (DropEvent) => void
- onDropActivate?: (DropActivateEvent) => void
onDropEnter?: (DropEnterEvent) => void
onDropExit?: (DropExitEvent) => void
onDropMove?: (DropMoveEvent) => void
onHoverChange?: (boolean) => void
onHoverStart?: (HoverEvent) => void
slot?: string | null
style?: CSSProperties | ((DropZoneRenderProps & {
defaultStyle: CSSProperties
})) => CSSProperties | undefined
} /react-aria-components:ListBox ListBox <T extends {}> {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
autoFocus?: boolean | FocusStrategy
children?: ReactNode | ({}) => ReactNode
className?: string | ((ListBoxRenderProps & {
defaultClassName: string | undefined
})) => string
defaultSelectedKeys?: 'all' | Iterable<Key>
dependencies?: ReadonlyArray<any>
disabledKeys?: Iterable<Key>
disallowEmptySelection?: boolean
dragAndDropHooks?: DragAndDropHooks
escapeKeyBehavior?: 'clearSelection' | 'none' = 'clearSelection'
id?: string
items?: Iterable<T>
layout?: 'stack' | 'grid' = 'stack'
onAction?: (Key) => void
onBlur?: (FocusEvent<Target>) => void
onFocus?: (FocusEvent<Target>) => void
onFocusChange?: (boolean) => void
onScroll?: (UIEvent<Element>) => void
onSelectionChange?: (Selection) => void
orientation?: Orientation = 'vertical'
renderEmptyState?: (ListBoxRenderProps) => ReactNode
selectedKeys?: 'all' | Iterable<Key>
selectionBehavior?: SelectionBehavior
selectionMode?: SelectionMode
- shouldFocusOnHover?: boolean
shouldFocusWrap?: boolean
shouldSelectOnPressUp?: boolean
slot?: string | null
style?: CSSProperties | ((ListBoxRenderProps & {
})) => CSSProperties | undefined
} /react-aria-components:Tree Tree <T extends {}> {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
autoFocus?: boolean | FocusStrategy
children?: ReactNode | ({}) => ReactNode
className?: string | ((TreeRenderProps & {
defaultClassName: string | undefined
})) => string
defaultExpandedKeys?: Iterable<Key>
defaultSelectedKeys?: 'all' | Iterable<Key>
dependencies?: ReadonlyArray<any>
disabledBehavior?: DisabledBehavior = 'all'
disabledKeys?: Iterable<Key>
disallowEmptySelection?: boolean
- dragAndDropHooks?: DragAndDropHooks
escapeKeyBehavior?: 'clearSelection' | 'none' = 'clearSelection'
expandedKeys?: Iterable<Key>
id?: string
items?: Iterable<T>
- keyboardDelegate?: KeyboardDelegate
onAction?: (Key) => void
onExpandedChange?: (Set<Key>) => any
onScroll?: (UIEvent<Element>) => void
onSelectionChange?: (Selection) => void
selectedKeys?: 'all' | Iterable<Key>
selectionBehavior?: SelectionBehavior
selectionMode?: SelectionMode
shouldSelectOnPressUp?: boolean
slot?: string | null
style?: CSSProperties | ((TreeRenderProps & {
defaultStyle: CSSProperties
})) => CSSProperties | undefined
} /react-aria-components:DropIndicator DropIndicator {
- activateButtonRef?: RefObject<FocusableElement | null>
children?: ReactNode | ((DropIndicatorRenderProps & {
defaultChildren: ReactNode | undefined
})) => ReactNode
className?: string | ((DropIndicatorRenderProps & {
})) => string
style?: CSSProperties | ((DropIndicatorRenderProps & {
defaultStyle: CSSProperties
})) => CSSProperties | undefined
target: DropTarget
} /react-aria-components:DropZoneProps DropZoneProps {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
children?: ReactNode | ((DropZoneRenderProps & {
defaultChildren: ReactNode | undefined
})) => ReactNode
className?: string | ((DropZoneRenderProps & {
defaultClassName: string | undefined
})) => string
getDropOperation?: (DragTypes, Array<DropOperation>) => DropOperation
isDisabled?: boolean
onDrop?: (DropEvent) => void
- onDropActivate?: (DropActivateEvent) => void
onDropEnter?: (DropEnterEvent) => void
onDropExit?: (DropExitEvent) => void
onDropMove?: (DropMoveEvent) => void
onHoverChange?: (boolean) => void
onHoverStart?: (HoverEvent) => void
slot?: string | null
style?: CSSProperties | ((DropZoneRenderProps & {
defaultStyle: CSSProperties
})) => CSSProperties | undefined
} /react-aria-components:ListBoxProps ListBoxProps <T> {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
autoFocus?: boolean | FocusStrategy
children?: ReactNode | (T) => ReactNode
className?: string | ((ListBoxRenderProps & {
defaultClassName: string | undefined
})) => string
defaultSelectedKeys?: 'all' | Iterable<Key>
dependencies?: ReadonlyArray<any>
disabledKeys?: Iterable<Key>
disallowEmptySelection?: boolean
dragAndDropHooks?: DragAndDropHooks
escapeKeyBehavior?: 'clearSelection' | 'none' = 'clearSelection'
id?: string
items?: Iterable<T>
layout?: 'stack' | 'grid' = 'stack'
onAction?: (Key) => void
onBlur?: (FocusEvent<Target>) => void
onFocus?: (FocusEvent<Target>) => void
onFocusChange?: (boolean) => void
onScroll?: (UIEvent<Element>) => void
onSelectionChange?: (Selection) => void
orientation?: Orientation = 'vertical'
renderEmptyState?: (ListBoxRenderProps) => ReactNode
selectedKeys?: 'all' | Iterable<Key>
selectionBehavior?: SelectionBehavior
selectionMode?: SelectionMode
- shouldFocusOnHover?: boolean
shouldFocusWrap?: boolean
shouldSelectOnPressUp?: boolean
slot?: string | null
style?: CSSProperties | ((ListBoxRenderProps & {
})) => CSSProperties | undefined
} /react-aria-components:TreeProps TreeProps <T> {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
autoFocus?: boolean | FocusStrategy
children?: ReactNode | (T) => ReactNode
className?: string | ((TreeRenderProps & {
defaultClassName: string | undefined
})) => string
defaultExpandedKeys?: Iterable<Key>
defaultSelectedKeys?: 'all' | Iterable<Key>
dependencies?: ReadonlyArray<any>
disabledBehavior?: DisabledBehavior = 'all'
disabledKeys?: Iterable<Key>
disallowEmptySelection?: boolean
- dragAndDropHooks?: DragAndDropHooks
escapeKeyBehavior?: 'clearSelection' | 'none' = 'clearSelection'
expandedKeys?: Iterable<Key>
id?: string
items?: Iterable<T>
- keyboardDelegate?: KeyboardDelegate
onAction?: (Key) => void
onExpandedChange?: (Set<Key>) => any
onScroll?: (UIEvent<Element>) => void
onSelectionChange?: (Selection) => void
selectedKeys?: 'all' | Iterable<Key>
selectionBehavior?: SelectionBehavior
selectionMode?: SelectionMode
shouldSelectOnPressUp?: boolean
slot?: string | null
style?: CSSProperties | ((TreeRenderProps & {
defaultStyle: CSSProperties
})) => CSSProperties | undefined
} /react-aria-components:TreeItemRenderProps TreeItemRenderProps {
- allowsDragging?: boolean
hasChildItems: boolean
id: Key
isDisabled: boolean
- isDragging?: boolean
- isDropTarget?: boolean
isExpanded: boolean
isFocusVisible: boolean
isFocusVisibleWithin: boolean
isFocused: boolean
isPressed: boolean
isSelected: boolean
level: number
selectionBehavior: SelectionBehavior
selectionMode: SelectionMode
state: TreeState<unknown>
} /react-aria-components:TreeItemContentRenderProps TreeItemContentRenderProps {
- allowsDragging?: boolean
hasChildItems: boolean
id: Key
isDisabled: boolean
- isDragging?: boolean
- isDropTarget?: boolean
isExpanded: boolean
isFocusVisible: boolean
isFocusVisibleWithin: boolean
isFocused: boolean
isPressed: boolean
isSelected: boolean
level: number
selectionBehavior: SelectionBehavior
selectionMode: SelectionMode
state: TreeState<unknown>
} /react-aria-components:DragAndDropOptions DragAndDropOptions {
acceptedDragTypes?: 'all' | Array<string | symbol> = 'all'
dropTargetDelegate?: DropTargetDelegate
getAllowedDropOperations?: () => Array<DropOperation>
getDropOperation?: (DropTarget, DragTypes, Array<DropOperation>) => DropOperation
getItems?: (Set<Key>) => Array<DragItem> = () => []
isDisabled?: boolean
onDragEnd?: (DraggableCollectionEndEvent) => void
onDragMove?: (DraggableCollectionMoveEvent) => void
onDragStart?: (DraggableCollectionStartEvent) => void
onDrop?: (DroppableCollectionDropEvent) => void
- onDropActivate?: (DroppableCollectionActivateEvent) => void
onDropEnter?: (DroppableCollectionEnterEvent) => void
onDropExit?: (DroppableCollectionExitEvent) => void
onInsert?: (DroppableCollectionInsertDropEvent) => void
onItemDrop?: (DroppableCollectionOnItemDropEvent) => void
- onMove?: (DroppableCollectionReorderEvent) => void
onReorder?: (DroppableCollectionReorderEvent) => void
onRootDrop?: (DroppableCollectionRootDropEvent) => void
renderDragPreview?: (Array<DragItem>) => JSX.Element
renderDropIndicator?: (DropTarget) => JSX.Element
} /react-aria-components:DropIndicatorProps DropIndicatorProps {
- activateButtonRef?: RefObject<FocusableElement | null>
children?: ReactNode | ((DropIndicatorRenderProps & {
defaultChildren: ReactNode | undefined
})) => ReactNode
className?: string | ((DropIndicatorRenderProps & {
})) => string
style?: CSSProperties | ((DropIndicatorRenderProps & {
defaultStyle: CSSProperties
})) => CSSProperties | undefined
target: DropTarget
} /react-aria-components:CalendarState-CalendarState {
- focusNextDay: () => void
- focusNextPage: () => void
- focusNextRow: () => void
- focusNextSection: (boolean) => void
- focusPreviousDay: () => void
- focusPreviousPage: () => void
- focusPreviousRow: () => void
- focusPreviousSection: (boolean) => void
- focusSectionEnd: () => void
- focusSectionStart: () => void
- focusedDate: CalendarDate
- getDatesInWeek: (number, CalendarDate) => Array<CalendarDate | null>
- isCellDisabled: (CalendarDate) => boolean
- isCellFocused: (CalendarDate) => boolean
- isCellUnavailable: (CalendarDate) => boolean
- isDisabled: boolean
- isFocused: boolean
- isInvalid: (CalendarDate) => boolean
- isNextVisibleRangeInvalid: () => boolean
- isPreviousVisibleRangeInvalid: () => boolean
- isReadOnly: boolean
- isSelected: (CalendarDate) => boolean
- isValueInvalid: boolean
- maxValue?: DateValue | null
- minValue?: DateValue | null
- selectDate: (CalendarDate) => void
- selectFocusedDate: () => void
- setFocused: (boolean) => void
- setFocusedDate: (CalendarDate) => void
- setValue: (CalendarDate | null) => void
- timeZone: string
- value: CalendarDate | null
- visibleRange: RangeValue<CalendarDate>
-} /react-aria-components:CheckboxGroupState-CheckboxGroupState {
- addValue: (string) => void
- commitValidation: () => void
- displayValidation: ValidationResult
- isDisabled: boolean
- isInvalid: boolean
- isReadOnly: boolean
- isRequired: boolean
- isSelected: (string) => boolean
- realtimeValidation: ValidationResult
- removeValue: (string) => void
- resetValidation: () => void
- setInvalid: (string, ValidationResult) => void
- setValue: (Array<string>) => void
- toggleValue: (string) => void
- updateValidation: (ValidationResult) => void
- value: readonly Array<string>
-} /react-aria-components:ColorAreaState-ColorAreaState {
- channels: {
- xChannel: ColorChannel
- yChannel: ColorChannel
- zChannel: ColorChannel
-}
- decrementX: (number) => void
- decrementY: (number) => void
- getDisplayColor: () => Color
- getThumbPosition: () => {
- x: number
- y: number
-}
- incrementX: (number) => void
- incrementY: (number) => void
- isDragging: boolean
- setColorFromPoint: (number, number) => void
- setDragging: (boolean) => void
- setValue: (string | Color) => void
- setXValue: (number) => void
- setYValue: (number) => void
- value: Color
- xChannelPageStep: number
- xChannelStep: number
- xValue: number
- yChannelPageStep: number
- yChannelStep: number
- yValue: number
-} /react-aria-components:ColorFieldState-ColorFieldState {
- colorValue: Color | null
- commit: () => void
- commitValidation: () => void
- decrement: () => void
- decrementToMin: () => void
- displayValidation: ValidationResult
- increment: () => void
- incrementToMax: () => void
- inputValue: string
- realtimeValidation: ValidationResult
- resetValidation: () => void
- setInputValue: (string) => void
- updateValidation: (ValidationResult) => void
- validate: (string) => boolean
-} /react-aria-components:ColorPickerState-ColorPickerState {
- color: Color
- setColor: (Color | null) => void
-} /react-aria-components:ColorSliderState-ColorSliderState {
- decrementThumb: (number, number) => void
- focusedThumb: number | undefined
- getDisplayColor: () => Color
- getFormattedValue: (number) => string
- getPercentValue: (number) => number
- getThumbMaxValue: (number) => number
- getThumbMinValue: (number) => number
- getThumbPercent: (number) => number
- getThumbValue: (number) => number
- getThumbValueLabel: (number) => string
- getValuePercent: (number) => number
- incrementThumb: (number, number) => void
- isDisabled: boolean
- isDragging: boolean
- isThumbDragging: (number) => boolean
- isThumbEditable: (number) => boolean
- orientation: Orientation
- pageSize: number
- setFocusedThumb: (number | undefined) => void
- setThumbDragging: (number, boolean) => void
- setThumbEditable: (number, boolean) => void
- setThumbPercent: (number, number) => void
- setThumbValue: (number, number) => void
- setValue: (string | Color) => void
- step: number
- value: Color
- values: Array<number>
-} /react-aria-components:ColorWheelState-ColorWheelState {
- decrement: (number) => void
- getDisplayColor: () => Color
- getThumbPosition: (number) => {
- x: number
- y: number
-}
- hue: number
- increment: (number) => void
- isDisabled: boolean
- isDragging: boolean
- pageStep: number
- setDragging: (boolean) => void
- setHue: (number) => void
- setHueFromPoint: (number, number, number) => void
- setValue: (string | Color) => void
- step: number
- value: Color
-} /react-aria-components:ComboBoxState-ComboBoxState <T> {
- close: () => void
- collection: Collection<Node<T>>
- commit: () => void
- commitValidation: () => void
- disabledKeys: Set<Key>
- displayValidation: ValidationResult
- focusStrategy: FocusStrategy | null
- inputValue: string
- isFocused: boolean
- isOpen: boolean
- open: (FocusStrategy | null, MenuTriggerAction) => void
- realtimeValidation: ValidationResult
- resetValidation: () => void
- revert: () => void
- selectedItem: Node<T> | null
- selectedKey: Key | null
- selectionManager: SelectionManager
- setFocused: (boolean) => void
- setInputValue: (string) => void
- setOpen: (boolean) => void
- setSelectedKey: (Key | null) => void
- toggle: (FocusStrategy | null, MenuTriggerAction) => void
- updateValidation: (ValidationResult) => void
-} /react-aria-components:DateFieldState-DateFieldState {
- calendar: Calendar
- clearSegment: (SegmentType) => void
- commitValidation: () => void
- confirmPlaceholder: () => void
- dateFormatter: DateFormatter
- dateValue: Date
- decrement: (SegmentType) => void
- decrementPage: (SegmentType) => void
- displayValidation: ValidationResult
- formatValue: (FieldOptions) => string
- getDateFormatter: (string, FormatterOptions) => DateFormatter
- granularity: Granularity
- increment: (SegmentType) => void
- incrementPage: (SegmentType) => void
- isDisabled: boolean
- isInvalid: boolean
- isReadOnly: boolean
- isRequired: boolean
- maxGranularity: 'year' | 'month' | Granularity
- realtimeValidation: ValidationResult
- resetValidation: () => void
- segments: Array<DateSegment>
- setSegment: (SegmentType, number) => void
- setValue: (DateValue | null) => void
- updateValidation: (ValidationResult) => void
- value: DateValue | null
-} /react-aria-components:DatePickerState-DatePickerState {
- close: () => void
- commitValidation: () => void
- dateValue: DateValue | null
- displayValidation: ValidationResult
- formatValue: (string, FieldOptions) => string
- getDateFormatter: (string, FormatterOptions) => DateFormatter
- granularity: Granularity
- hasTime: boolean
- isInvalid: boolean
- isOpen: boolean
- open: () => void
- realtimeValidation: ValidationResult
- resetValidation: () => void
- setDateValue: (DateValue) => void
- setOpen: (boolean) => void
- setTimeValue: (TimeValue) => void
- setValue: (DateValue | null) => void
- timeValue: TimeValue | null
- toggle: () => void
- updateValidation: (ValidationResult) => void
- value: DateValue | null
-} /react-aria-components:DateRangePickerState-DateRangePickerState {
- close: () => void
- commitValidation: () => void
- dateRange: RangeValue<DateValue | null> | null
- displayValidation: ValidationResult
- formatValue: (string, FieldOptions) => {
- start: string
- end: string
-} | null
- getDateFormatter: (string, FormatterOptions) => DateFormatter
- granularity: Granularity
- hasTime: boolean
- isInvalid: boolean
- isOpen: boolean
- open: () => void
- realtimeValidation: ValidationResult
- resetValidation: () => void
- setDate: ('start' | 'end', DateValue | null) => void
- setDateRange: (DateRange) => void
- setDateTime: ('start' | 'end', DateValue | null) => void
- setOpen: (boolean) => void
- setTime: ('start' | 'end', TimeValue | null) => void
- setTimeRange: (TimeRange) => void
- setValue: (DateRange | null) => void
- timeRange: RangeValue<TimeValue | null> | null
- toggle: () => void
- updateValidation: (ValidationResult) => void
- value: RangeValue<DateValue | null>
-} /react-aria-components:DisclosureState-DisclosureState {
- collapse: () => void
- expand: () => void
- isExpanded: boolean
- setExpanded: (boolean) => void
- toggle: () => void
-} /react-aria-components:DisclosureGroupState-DisclosureGroupState {
- allowsMultipleExpanded: boolean
- expandedKeys: Set<Key>
- isDisabled: boolean
- setExpandedKeys: (Set<Key>) => void
- toggleKey: (Key) => void
-} /react-aria-components:DraggableCollectionState-DraggableCollectionState {
- collection: Collection<Node<unknown>>
- draggedKey: Key | null
- draggingKeys: Set<Key>
- endDrag: (DraggableCollectionEndEvent) => void
- getAllowedDropOperations?: () => Array<DropOperation>
- getItems: (Key) => Array<DragItem>
- getKeysForDrag: (Key) => Set<Key>
- isDisabled?: boolean
- isDragging: (Key) => boolean
- moveDrag: (DragMoveEvent) => void
- preview?: RefObject<DragPreviewRenderer | null>
- selectionManager: MultipleSelectionManager
- startDrag: (Key, DragStartEvent) => void
-} /react-aria-components:DroppableCollectionState-DroppableCollectionState {
- collection: Collection<Node<unknown>>
- getDropOperation: (DropOperationEvent) => DropOperation
- isDisabled?: boolean
- isDropTarget: (DropTarget | null) => boolean
- selectionManager: MultipleSelectionManager
- setTarget: (DropTarget | null) => void
- target: DropTarget | null
-} /react-aria-components:ListState-ListState <T> {
- collection: Collection<Node<T>>
- disabledKeys: Set<Key>
- selectionManager: SelectionManager
-} /react-aria-components:MultipleSelectionState-MultipleSelectionState {
- childFocusStrategy: FocusStrategy | null
- disabledBehavior: DisabledBehavior
- disabledKeys: Set<Key>
- disallowEmptySelection: boolean
- focusedKey: Key | null
- isFocused: boolean
- selectedKeys: Selection
- selectionBehavior: SelectionBehavior
- selectionMode: SelectionMode
- setFocused: (boolean) => void
- setFocusedKey: (Key | null, FocusStrategy) => void
- setSelectedKeys: (Selection) => void
- setSelectionBehavior: (SelectionBehavior) => void
-} /react-aria-components:NumberFieldState-NumberFieldState {
- canDecrement: boolean
- canIncrement: boolean
- commit: () => void
- commitValidation: () => void
- decrement: () => void
- decrementToMin: () => void
- displayValidation: ValidationResult
- increment: () => void
- incrementToMax: () => void
- inputValue: string
- maxValue?: number
- minValue?: number
- numberValue: number
- realtimeValidation: ValidationResult
- resetValidation: () => void
- setInputValue: (string) => void
- setNumberValue: (number) => void
- updateValidation: (ValidationResult) => void
- validate: (string) => boolean
-} /react-aria-components:OverlayTriggerState-OverlayTriggerState {
- close: () => void
- isOpen: boolean
- open: () => void
- setOpen: (boolean) => void
- toggle: () => void
-} /react-aria-components:RadioGroupState-RadioGroupState {
- commitValidation: () => void
- displayValidation: ValidationResult
- isDisabled: boolean
- isInvalid: boolean
- isReadOnly: boolean
- isRequired: boolean
- lastFocusedValue: string | null
- realtimeValidation: ValidationResult
- resetValidation: () => void
- selectedValue: string | null
- setLastFocusedValue: (string | null) => void
- setSelectedValue: (string | null) => void
- updateValidation: (ValidationResult) => void
-} /react-aria-components:RangeCalendarState-RangeCalendarState {
- anchorDate: CalendarDate | null
- focusNextDay: () => void
- focusNextPage: () => void
- focusNextRow: () => void
- focusNextSection: (boolean) => void
- focusPreviousDay: () => void
- focusPreviousPage: () => void
- focusPreviousRow: () => void
- focusPreviousSection: (boolean) => void
- focusSectionEnd: () => void
- focusSectionStart: () => void
- focusedDate: CalendarDate
- getDatesInWeek: (number, CalendarDate) => Array<CalendarDate | null>
- highlightDate: (CalendarDate) => void
- highlightedRange: RangeValue<CalendarDate> | null
- isCellDisabled: (CalendarDate) => boolean
- isCellFocused: (CalendarDate) => boolean
- isCellUnavailable: (CalendarDate) => boolean
- isDisabled: boolean
- isDragging: boolean
- isFocused: boolean
- isInvalid: (CalendarDate) => boolean
- isNextVisibleRangeInvalid: () => boolean
- isPreviousVisibleRangeInvalid: () => boolean
- isReadOnly: boolean
- isSelected: (CalendarDate) => boolean
- isValueInvalid: boolean
- maxValue?: DateValue | null
- minValue?: DateValue | null
- selectDate: (CalendarDate) => void
- selectFocusedDate: () => void
- setAnchorDate: (CalendarDate | null) => void
- setDragging: (boolean) => void
- setFocused: (boolean) => void
- setFocusedDate: (CalendarDate) => void
- setValue: (RangeValue<DateValue> | null) => void
- timeZone: string
- value: RangeValue<DateValue> | null
- visibleRange: RangeValue<CalendarDate>
-} /react-aria-components:RootMenuTriggerState-RootMenuTriggerState {
- close: () => void
- closeSubmenu: (Key, number) => void
- expandedKeysStack: Array<Key>
- focusStrategy: FocusStrategy | null
- isOpen: boolean
- open: (FocusStrategy | null) => void
- openSubmenu: (Key, number) => void
- setOpen: (boolean) => void
- toggle: (FocusStrategy | null) => void
-} /react-aria-components:SearchFieldState-SearchFieldState {
- setValue: (string) => void
- value: string
-} /react-aria-components:SelectState-SelectState <T> {
- close: () => void
- collection: Collection<Node<T>>
- commitValidation: () => void
- disabledKeys: Set<Key>
- displayValidation: ValidationResult
- focusStrategy: FocusStrategy | null
- isFocused: boolean
- isOpen: boolean
- open: (FocusStrategy | null) => void
- realtimeValidation: ValidationResult
- resetValidation: () => void
- selectedItem: Node<T> | null
- selectedKey: Key | null
- selectionManager: SelectionManager
- setFocused: (boolean) => void
- setOpen: (boolean) => void
- setSelectedKey: (Key | null) => void
- toggle: (FocusStrategy | null) => void
- updateValidation: (ValidationResult) => void
-} /react-aria-components:SliderState-SliderState {
- decrementThumb: (number, number) => void
- focusedThumb: number | undefined
- getFormattedValue: (number) => string
- getPercentValue: (number) => number
- getThumbMaxValue: (number) => number
- getThumbMinValue: (number) => number
- getThumbPercent: (number) => number
- getThumbValue: (number) => number
- getThumbValueLabel: (number) => string
- getValuePercent: (number) => number
- incrementThumb: (number, number) => void
- isDisabled: boolean
- isThumbDragging: (number) => boolean
- isThumbEditable: (number) => boolean
- orientation: Orientation
- pageSize: number
- setFocusedThumb: (number | undefined) => void
- setThumbDragging: (number, boolean) => void
- setThumbEditable: (number, boolean) => void
- setThumbPercent: (number, number) => void
- setThumbValue: (number, number) => void
- step: number
- values: Array<number>
-} /react-aria-components:TableState-TableState <T> {
- collection: TableCollection<T>
- disabledKeys: Set<Key>
- isKeyboardNavigationDisabled: boolean
- selectionManager: SelectionManager
- setKeyboardNavigationDisabled: (boolean) => void
- showSelectionCheckboxes: boolean
- sort: (Key, 'ascending' | 'descending') => void
- sortDescriptor: SortDescriptor | null
-} /react-aria-components:TabListState-TabListState <T> {
- collection: Collection<Node<T>>
- disabledKeys: Set<Key>
- isDisabled: boolean
- selectedItem: Node<T> | null
- selectedKey: Key | null
- selectionManager: SelectionManager
- setSelectedKey: (Key | null) => void
-} /react-aria-components:TimeFieldState-TimeFieldState {
- calendar: Calendar
- clearSegment: (SegmentType) => void
- commitValidation: () => void
- confirmPlaceholder: () => void
- dateFormatter: DateFormatter
- dateValue: Date
- decrement: (SegmentType) => void
- decrementPage: (SegmentType) => void
- displayValidation: ValidationResult
- formatValue: (FieldOptions) => string
- getDateFormatter: (string, FormatterOptions) => DateFormatter
- granularity: Granularity
- increment: (SegmentType) => void
- incrementPage: (SegmentType) => void
- isDisabled: boolean
- isInvalid: boolean
- isReadOnly: boolean
- isRequired: boolean
- maxGranularity: 'year' | 'month' | Granularity
- realtimeValidation: ValidationResult
- resetValidation: () => void
- segments: Array<DateSegment>
- setSegment: (SegmentType, number) => void
- setValue: (DateValue | null) => void
- timeValue: Time
- updateValidation: (ValidationResult) => void
- value: DateValue | null
-} /react-aria-components:ToastState-ToastState <T> {
- add: (T, ToastOptions) => string
- close: (string) => void
- pauseAll: () => void
- resumeAll: () => void
- visibleToasts: Array<QueuedToast<T>>
-} /react-aria-components:ToggleGroupState-ToggleGroupState {
- isDisabled: boolean
- selectedKeys: Set<Key>
- selectionMode: 'single' | 'multiple'
- setSelected: (Key, boolean) => void
- setSelectedKeys: (Set<Key>) => void
- toggleKey: (Key) => void
-} /react-aria-components:ToggleState-ToggleState {
- isSelected: boolean
- setSelected: (boolean) => void
- toggle: () => void
-} /react-aria-components:TooltipTriggerState-TooltipTriggerState {
- close: (boolean) => void
- isOpen: boolean
- open: (boolean) => void
-} /react-aria-components:TreeState-TreeState <T> {
- collection: Collection<Node<T>>
- disabledKeys: Set<Key>
- expandedKeys: Set<Key>
- selectionManager: SelectionManager
- setExpandedKeys: (Set<Key>) => void
- toggleKey: (Key) => void
-} /react-aria-components:AutocompleteState-AutocompleteState {
- focusedNodeId: string | null
- inputValue: string
- setFocusedNodeId: (string | null) => void
- setInputValue: (string) => void
-} /react-aria-components:VirtualizerState-VirtualizerState <T extends {}, V> {
- contentSize: Size
- endScrolling: () => void
- isScrolling: boolean
- setVisibleRect: (Rect) => void
- startScrolling: () => void
- virtualizer: Virtualizer<{}, V>
- visibleViews: Array<ReusableView<{}, V>>
-} @react-aria/dnd/@react-aria/dnd:DroppableCollectionOptions DroppableCollectionOptions {
acceptedDragTypes?: 'all' | Array<string | symbol> = 'all'
dropTargetDelegate: DropTargetDelegate
getDropOperation?: (DropTarget, DragTypes, Array<DropOperation>) => DropOperation
keyboardDelegate: KeyboardDelegate
onDrop?: (DroppableCollectionDropEvent) => void
- onDropActivate?: (DroppableCollectionActivateEvent) => void
onDropEnter?: (DroppableCollectionEnterEvent) => void
onDropExit?: (DroppableCollectionExitEvent) => void
onInsert?: (DroppableCollectionInsertDropEvent) => void
onItemDrop?: (DroppableCollectionOnItemDropEvent) => void
- onKeyDown?: (KeyboardEvent) => void
- onMove?: (DroppableCollectionReorderEvent) => void
onReorder?: (DroppableCollectionReorderEvent) => void
onRootDrop?: (DroppableCollectionRootDropEvent) => void
shouldAcceptItemDrop?: (ItemDropTarget, DragTypes) => boolean
} /@react-aria/dnd:DroppableItemOptions DroppableItemOptions {
- activateButtonRef?: RefObject<FocusableElement | null>
target: DropTarget
} /@react-aria/dnd:DropIndicatorProps DropIndicatorProps {
- activateButtonRef?: RefObject<FocusableElement | null>
target: DropTarget
} /@react-aria/dnd:DropOptions DropOptions {
getDropOperation?: (DragTypes, Array<DropOperation>) => DropOperation
getDropOperationForPoint?: (DragTypes, Array<DropOperation>, number, number) => DropOperation
hasDropButton?: boolean
isDisabled?: boolean
onDrop?: (DropEvent) => void
- onDropActivate?: (DropActivateEvent) => void
onDropEnter?: (DropEnterEvent) => void
onDropExit?: (DropExitEvent) => void
onDropMove?: (DropMoveEvent) => void
ref: RefObject<FocusableElement | null> @react-aria/listbox/@react-aria/listbox:AriaListBoxProps AriaListBoxProps <T> {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
autoFocus?: boolean | FocusStrategy
children: CollectionChildren<T>
defaultSelectedKeys?: 'all' | Iterable<Key>
disabledKeys?: Iterable<Key>
disallowEmptySelection?: boolean
escapeKeyBehavior?: 'clearSelection' | 'none' = 'clearSelection'
id?: string
items?: Iterable<T>
label?: ReactNode
onAction?: (Key) => void
onBlur?: (FocusEvent<Target>) => void
onFocus?: (FocusEvent<Target>) => void
onFocusChange?: (boolean) => void
onSelectionChange?: (Selection) => void
selectedKeys?: 'all' | Iterable<Key>
selectionBehavior?: SelectionBehavior
selectionMode?: SelectionMode
- shouldFocusOnHover?: boolean
shouldFocusWrap?: boolean
shouldSelectOnPressUp?: boolean
} @react-spectrum/dnd/@react-spectrum/dnd:DragAndDropOptions DragAndDropOptions {
acceptedDragTypes?: 'all' | Array<string | symbol> = 'all'
getAllowedDropOperations?: () => Array<DropOperation>
getDropOperation?: (DropTarget, DragTypes, Array<DropOperation>) => DropOperation
getItems?: (Set<Key>) => Array<DragItem> = () => []
onDragEnd?: (DraggableCollectionEndEvent) => void
onDragMove?: (DraggableCollectionMoveEvent) => void
onDragStart?: (DraggableCollectionStartEvent) => void
onDrop?: (DroppableCollectionDropEvent) => void
- onDropActivate?: (DroppableCollectionActivateEvent) => void
onDropEnter?: (DroppableCollectionEnterEvent) => void
onDropExit?: (DroppableCollectionExitEvent) => void
onInsert?: (DroppableCollectionInsertDropEvent) => void
onItemDrop?: (DroppableCollectionOnItemDropEvent) => void
- onMove?: (DroppableCollectionReorderEvent) => void
onReorder?: (DroppableCollectionReorderEvent) => void
onRootDrop?: (DroppableCollectionRootDropEvent) => void
renderPreview?: (Set<Key>, Key) => JSX.Element
shouldAcceptItemDrop?: (ItemDropTarget, DragTypes) => boolean @react-spectrum/dropzone/@react-spectrum/dropzone:DropZone DropZone {
UNSAFE_className?: string
UNSAFE_style?: CSSProperties
alignSelf?: Responsive<'auto' | 'normal' | 'start' | 'end' | 'center' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'stretch'>
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
bottom?: Responsive<DimensionValue>
children: ReactNode
end?: Responsive<DimensionValue>
flex?: Responsive<string | number | boolean>
flexBasis?: Responsive<number | string>
flexGrow?: Responsive<number>
flexShrink?: Responsive<number>
getDropOperation?: (DragTypes, Array<DropOperation>) => DropOperation
gridArea?: Responsive<string>
gridColumn?: Responsive<string>
gridColumnEnd?: Responsive<string>
gridColumnStart?: Responsive<string>
gridRow?: Responsive<string>
gridRowEnd?: Responsive<string>
gridRowStart?: Responsive<string>
height?: Responsive<DimensionValue>
id?: string
isFilled?: boolean
isHidden?: Responsive<boolean>
justifySelf?: Responsive<'auto' | 'normal' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'center' | 'left' | 'right' | 'stretch'>
left?: Responsive<DimensionValue>
margin?: Responsive<DimensionValue>
marginBottom?: Responsive<DimensionValue>
marginEnd?: Responsive<DimensionValue>
marginStart?: Responsive<DimensionValue>
marginTop?: Responsive<DimensionValue>
marginX?: Responsive<DimensionValue>
marginY?: Responsive<DimensionValue>
maxHeight?: Responsive<DimensionValue>
maxWidth?: Responsive<DimensionValue>
minHeight?: Responsive<DimensionValue>
minWidth?: Responsive<DimensionValue>
onDrop?: (DropEvent) => void
- onDropActivate?: (DropActivateEvent) => void
onDropEnter?: (DropEnterEvent) => void
onDropExit?: (DropExitEvent) => void
onDropMove?: (DropMoveEvent) => void
order?: Responsive<number>
replaceMessage?: string
right?: Responsive<DimensionValue>
slot?: string | null
start?: Responsive<DimensionValue>
top?: Responsive<DimensionValue>
width?: Responsive<DimensionValue>
zIndex?: Responsive<number>
} /@react-spectrum/dropzone:SpectrumDropZoneProps SpectrumDropZoneProps {
UNSAFE_className?: string
UNSAFE_style?: CSSProperties
alignSelf?: Responsive<'auto' | 'normal' | 'start' | 'end' | 'center' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'stretch'>
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
bottom?: Responsive<DimensionValue>
children: ReactNode
end?: Responsive<DimensionValue>
flex?: Responsive<string | number | boolean>
flexBasis?: Responsive<number | string>
flexGrow?: Responsive<number>
flexShrink?: Responsive<number>
getDropOperation?: (DragTypes, Array<DropOperation>) => DropOperation
gridArea?: Responsive<string>
gridColumn?: Responsive<string>
gridColumnEnd?: Responsive<string>
gridColumnStart?: Responsive<string>
gridRow?: Responsive<string>
gridRowEnd?: Responsive<string>
gridRowStart?: Responsive<string>
height?: Responsive<DimensionValue>
id?: string
isFilled?: boolean
isHidden?: Responsive<boolean>
justifySelf?: Responsive<'auto' | 'normal' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'center' | 'left' | 'right' | 'stretch'>
left?: Responsive<DimensionValue>
margin?: Responsive<DimensionValue>
marginBottom?: Responsive<DimensionValue>
marginEnd?: Responsive<DimensionValue>
marginStart?: Responsive<DimensionValue>
marginTop?: Responsive<DimensionValue>
marginX?: Responsive<DimensionValue>
marginY?: Responsive<DimensionValue>
maxHeight?: Responsive<DimensionValue>
maxWidth?: Responsive<DimensionValue>
minHeight?: Responsive<DimensionValue>
minWidth?: Responsive<DimensionValue>
onDrop?: (DropEvent) => void
- onDropActivate?: (DropActivateEvent) => void
onDropEnter?: (DropEnterEvent) => void
onDropExit?: (DropExitEvent) => void
onDropMove?: (DropMoveEvent) => void
order?: Responsive<number>
replaceMessage?: string
right?: Responsive<DimensionValue>
slot?: string | null
start?: Responsive<DimensionValue>
top?: Responsive<DimensionValue>
width?: Responsive<DimensionValue>
zIndex?: Responsive<number>
} @react-spectrum/s2/@react-spectrum/s2:DropZone DropZone {
UNSAFE_className?: UnsafeClassName
UNSAFE_style?: CSSProperties
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
children: ReactNode
getDropOperation?: (DragTypes, Array<DropOperation>) => DropOperation
id?: string
isFilled?: boolean
onDrop?: (DropEvent) => void
- onDropActivate?: (DropActivateEvent) => void
onDropEnter?: (DropEnterEvent) => void
onDropExit?: (DropExitEvent) => void
onDropMove?: (DropMoveEvent) => void
replaceMessage?: string
slot?: string | null
styles?: StylesPropWithHeight
} /@react-spectrum/s2:TreeView TreeView {
UNSAFE_className?: UnsafeClassName
UNSAFE_style?: CSSProperties
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
autoFocus?: boolean | FocusStrategy
children?: ReactNode | (T) => ReactNode
defaultExpandedKeys?: Iterable<Key>
defaultSelectedKeys?: 'all' | Iterable<Key>
dependencies?: ReadonlyArray<any>
disabledBehavior?: DisabledBehavior = 'all'
disabledKeys?: Iterable<Key>
disallowEmptySelection?: boolean
escapeKeyBehavior?: 'clearSelection' | 'none' = 'clearSelection'
expandedKeys?: Iterable<Key>
id?: string
isDetached?: boolean
isEmphasized?: boolean
items?: Iterable<T>
- keyboardDelegate?: KeyboardDelegate
onAction?: (Key) => void
onExpandedChange?: (Set<Key>) => any
onSelectionChange?: (Selection) => void
renderEmptyState?: (TreeEmptyStateRenderProps) => ReactNode
selectionMode?: SelectionMode
shouldSelectOnPressUp?: boolean
slot?: string | null
styles?: StylesPropWithHeight
} /@react-spectrum/s2:DropZoneProps DropZoneProps {
UNSAFE_className?: UnsafeClassName
UNSAFE_style?: CSSProperties
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
children: ReactNode
getDropOperation?: (DragTypes, Array<DropOperation>) => DropOperation
id?: string
isFilled?: boolean
onDrop?: (DropEvent) => void
- onDropActivate?: (DropActivateEvent) => void
onDropEnter?: (DropEnterEvent) => void
onDropExit?: (DropExitEvent) => void
onDropMove?: (DropMoveEvent) => void
replaceMessage?: string
slot?: string | null
styles?: StylesPropWithHeight
} /@react-spectrum/s2:TreeViewProps TreeViewProps {
UNSAFE_className?: UnsafeClassName
UNSAFE_style?: CSSProperties
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
autoFocus?: boolean | FocusStrategy
children?: ReactNode | (T) => ReactNode
defaultExpandedKeys?: Iterable<Key>
defaultSelectedKeys?: 'all' | Iterable<Key>
dependencies?: ReadonlyArray<any>
disabledBehavior?: DisabledBehavior = 'all'
disabledKeys?: Iterable<Key>
disallowEmptySelection?: boolean
escapeKeyBehavior?: 'clearSelection' | 'none' = 'clearSelection'
expandedKeys?: Iterable<Key>
id?: string
isDetached?: boolean
isEmphasized?: boolean
items?: Iterable<T>
- keyboardDelegate?: KeyboardDelegate
onAction?: (Key) => void
onExpandedChange?: (Set<Key>) => any
onSelectionChange?: (Selection) => void
renderEmptyState?: (TreeEmptyStateRenderProps) => ReactNode
selectionMode?: SelectionMode
shouldSelectOnPressUp?: boolean
slot?: string | null
styles?: StylesPropWithHeight
} @react-stately/dnd/@react-stately/dnd:DroppableCollectionStateOptions DroppableCollectionStateOptions {
acceptedDragTypes?: 'all' | Array<string | symbol> = 'all'
collection: Collection<Node<unknown>>
getDropOperation?: (DropTarget, DragTypes, Array<DropOperation>) => DropOperation
isDisabled?: boolean
onDrop?: (DroppableCollectionDropEvent) => void
onDropEnter?: (DroppableCollectionEnterEvent) => void
onDropExit?: (DroppableCollectionExitEvent) => void
onInsert?: (DroppableCollectionInsertDropEvent) => void
onItemDrop?: (DroppableCollectionOnItemDropEvent) => void
- onMove?: (DroppableCollectionReorderEvent) => void
onReorder?: (DroppableCollectionReorderEvent) => void
onRootDrop?: (DroppableCollectionRootDropEvent) => void
selectionManager: MultipleSelectionManager
shouldAcceptItemDrop?: (ItemDropTarget, DragTypes) => boolean |
Closes #7884
✅ Pull Request Checklist:
📝 Test Instructions:
🧢 Your Project: