react-aria-components 1.8.0 → 1.10.0
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/dist/Autocomplete.main.js.map +1 -1
- package/dist/Autocomplete.module.js.map +1 -1
- package/dist/Checkbox.main.js +4 -1
- package/dist/Checkbox.main.js.map +1 -1
- package/dist/Checkbox.mjs +5 -2
- package/dist/Checkbox.module.js +5 -2
- package/dist/Checkbox.module.js.map +1 -1
- package/dist/Collection.main.js +31 -7
- package/dist/Collection.main.js.map +1 -1
- package/dist/Collection.mjs +32 -9
- package/dist/Collection.module.js +32 -9
- package/dist/Collection.module.js.map +1 -1
- package/dist/ColorPicker.main.js.map +1 -1
- package/dist/ColorPicker.module.js.map +1 -1
- package/dist/ComboBox.main.js +10 -1
- package/dist/ComboBox.main.js.map +1 -1
- package/dist/ComboBox.mjs +10 -1
- package/dist/ComboBox.module.js +10 -1
- package/dist/ComboBox.module.js.map +1 -1
- package/dist/DatePicker.main.js +11 -2
- package/dist/DatePicker.main.js.map +1 -1
- package/dist/DatePicker.mjs +11 -2
- package/dist/DatePicker.module.js +11 -2
- package/dist/DatePicker.module.js.map +1 -1
- package/dist/Dialog.main.js +15 -1
- package/dist/Dialog.main.js.map +1 -1
- package/dist/Dialog.mjs +17 -3
- package/dist/Dialog.module.js +17 -3
- package/dist/Dialog.module.js.map +1 -1
- package/dist/DragAndDrop.main.js.map +1 -1
- package/dist/DragAndDrop.module.js.map +1 -1
- package/dist/GridList.main.js +59 -4
- package/dist/GridList.main.js.map +1 -1
- package/dist/GridList.mjs +60 -6
- package/dist/GridList.module.js +60 -6
- package/dist/GridList.module.js.map +1 -1
- package/dist/ListBox.main.js +61 -3
- package/dist/ListBox.main.js.map +1 -1
- package/dist/ListBox.mjs +62 -5
- package/dist/ListBox.module.js +62 -5
- package/dist/ListBox.module.js.map +1 -1
- package/dist/Menu.main.js.map +1 -1
- package/dist/Menu.module.js.map +1 -1
- package/dist/Popover.main.js +12 -2
- package/dist/Popover.main.js.map +1 -1
- package/dist/Popover.mjs +13 -3
- package/dist/Popover.module.js +13 -3
- package/dist/Popover.module.js.map +1 -1
- package/dist/RadioGroup.main.js +4 -1
- package/dist/RadioGroup.main.js.map +1 -1
- package/dist/RadioGroup.mjs +5 -2
- package/dist/RadioGroup.module.js +5 -2
- package/dist/RadioGroup.module.js.map +1 -1
- package/dist/Select.main.js +10 -2
- package/dist/Select.main.js.map +1 -1
- package/dist/Select.mjs +10 -2
- package/dist/Select.module.js +10 -2
- package/dist/Select.module.js.map +1 -1
- package/dist/Table.main.js +42 -10
- package/dist/Table.main.js.map +1 -1
- package/dist/Table.mjs +43 -11
- package/dist/Table.module.js +43 -11
- package/dist/Table.module.js.map +1 -1
- package/dist/TagGroup.main.js +1 -1
- package/dist/TagGroup.main.js.map +1 -1
- package/dist/TagGroup.mjs +1 -1
- package/dist/TagGroup.module.js +1 -1
- package/dist/TagGroup.module.js.map +1 -1
- package/dist/Tooltip.main.js.map +1 -1
- package/dist/Tooltip.module.js.map +1 -1
- package/dist/Tree.main.js +296 -18
- package/dist/Tree.main.js.map +1 -1
- package/dist/Tree.mjs +299 -21
- package/dist/Tree.module.js +299 -21
- package/dist/Tree.module.js.map +1 -1
- package/dist/TreeDropTargetDelegate.main.js +213 -0
- package/dist/TreeDropTargetDelegate.main.js.map +1 -0
- package/dist/TreeDropTargetDelegate.mjs +208 -0
- package/dist/TreeDropTargetDelegate.module.js +208 -0
- package/dist/TreeDropTargetDelegate.module.js.map +1 -0
- package/dist/Virtualizer.main.js +8 -10
- package/dist/Virtualizer.main.js.map +1 -1
- package/dist/Virtualizer.mjs +9 -11
- package/dist/Virtualizer.module.js +9 -11
- package/dist/Virtualizer.module.js.map +1 -1
- package/dist/import.mjs +5 -5
- package/dist/main.js +4 -1
- package/dist/main.js.map +1 -1
- package/dist/module.js +5 -5
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +115 -50
- package/dist/types.d.ts.map +1 -1
- package/dist/useDragAndDrop.main.js +2 -2
- package/dist/useDragAndDrop.main.js.map +1 -1
- package/dist/useDragAndDrop.mjs +2 -2
- package/dist/useDragAndDrop.module.js +2 -2
- package/dist/useDragAndDrop.module.js.map +1 -1
- package/package.json +32 -28
- package/src/Autocomplete.tsx +2 -2
- package/src/Checkbox.tsx +2 -2
- package/src/Collection.tsx +39 -5
- package/src/ColorPicker.tsx +2 -2
- package/src/ComboBox.tsx +5 -1
- package/src/DatePicker.tsx +7 -2
- package/src/Dialog.tsx +18 -4
- package/src/DragAndDrop.tsx +1 -1
- package/src/GridList.tsx +69 -7
- package/src/ListBox.tsx +70 -6
- package/src/Menu.tsx +2 -1
- package/src/Popover.tsx +21 -5
- package/src/RadioGroup.tsx +2 -2
- package/src/Select.tsx +13 -3
- package/src/Table.tsx +44 -16
- package/src/TagGroup.tsx +1 -1
- package/src/Tooltip.tsx +2 -2
- package/src/Tree.tsx +364 -38
- package/src/TreeDropTargetDelegate.ts +304 -0
- package/src/Virtualizer.tsx +9 -14
- package/src/index.ts +8 -7
- package/src/useDragAndDrop.tsx +2 -1
package/src/Table.tsx
CHANGED
|
@@ -10,7 +10,7 @@ import {DisabledBehavior, DraggableCollectionState, DroppableCollectionState, Mu
|
|
|
10
10
|
import {DragAndDropContext, DropIndicatorContext, DropIndicatorProps, useDndPersistedKeys, useRenderDropIndicator} from './DragAndDrop';
|
|
11
11
|
import {DragAndDropHooks} from './useDragAndDrop';
|
|
12
12
|
import {DraggableItemResult, DragPreviewRenderer, DropIndicatorAria, DroppableCollectionResult, FocusScope, ListKeyboardDelegate, mergeProps, useFocusRing, useHover, useLocale, useLocalizedStringFormatter, useTable, useTableCell, useTableColumnHeader, useTableColumnResize, useTableHeaderRow, useTableRow, useTableRowGroup, useTableSelectAllCheckbox, useTableSelectionCheckbox, useVisuallyHidden} from 'react-aria';
|
|
13
|
-
import {filterDOMProps, isScrollable, mergeRefs, useLayoutEffect, useObjectRef, useResizeObserver} from '@react-aria/utils';
|
|
13
|
+
import {filterDOMProps, inertValue, isScrollable, LoadMoreSentinelProps, mergeRefs, UNSTABLE_useLoadMoreSentinel, useLayoutEffect, useObjectRef, useResizeObserver} from '@react-aria/utils';
|
|
14
14
|
import {GridNode} from '@react-types/grid';
|
|
15
15
|
// @ts-ignore
|
|
16
16
|
import intlMessages from '../intl/*.json';
|
|
@@ -931,9 +931,10 @@ export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T ext
|
|
|
931
931
|
let isDroppable = !!dragAndDropHooks?.useDroppableCollectionState && !dropState?.isDisabled;
|
|
932
932
|
let isRootDropTarget = isDroppable && !!dropState && (dropState.isDropTarget({type: 'root'}) ?? false);
|
|
933
933
|
|
|
934
|
+
let isEmpty = collection.size === 0 || (collection.rows.length === 1 && collection.rows[0].type === 'loader');
|
|
934
935
|
let renderValues = {
|
|
935
936
|
isDropTarget: isRootDropTarget,
|
|
936
|
-
isEmpty
|
|
937
|
+
isEmpty
|
|
937
938
|
};
|
|
938
939
|
let renderProps = useRenderProps({
|
|
939
940
|
...props,
|
|
@@ -947,7 +948,8 @@ export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T ext
|
|
|
947
948
|
let TR = useElementType('tr');
|
|
948
949
|
let TD = useElementType('td');
|
|
949
950
|
let numColumns = collection.columnCount;
|
|
950
|
-
|
|
951
|
+
|
|
952
|
+
if (isEmpty && props.renderEmptyState && state) {
|
|
951
953
|
let rowProps = {};
|
|
952
954
|
let rowHeaderProps = {};
|
|
953
955
|
let style = {};
|
|
@@ -978,7 +980,7 @@ export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T ext
|
|
|
978
980
|
{...mergeProps(filterDOMProps(props as any), rowGroupProps)}
|
|
979
981
|
{...renderProps}
|
|
980
982
|
ref={ref}
|
|
981
|
-
data-empty={
|
|
983
|
+
data-empty={isEmpty || undefined}>
|
|
982
984
|
{isDroppable && <RootDropIndicator />}
|
|
983
985
|
<CollectionBranch
|
|
984
986
|
collection={collection}
|
|
@@ -1346,17 +1348,34 @@ function RootDropIndicator() {
|
|
|
1346
1348
|
);
|
|
1347
1349
|
}
|
|
1348
1350
|
|
|
1349
|
-
export interface
|
|
1350
|
-
|
|
1351
|
+
export interface TableLoadingSentinelProps extends Omit<LoadMoreSentinelProps, 'collection'>, StyleProps {
|
|
1352
|
+
/**
|
|
1353
|
+
* The load more spinner to render when loading additional items.
|
|
1354
|
+
*/
|
|
1355
|
+
children?: ReactNode,
|
|
1356
|
+
/**
|
|
1357
|
+
* Whether or not the loading spinner should be rendered or not.
|
|
1358
|
+
*/
|
|
1359
|
+
isLoading?: boolean
|
|
1351
1360
|
}
|
|
1352
1361
|
|
|
1353
|
-
export const
|
|
1362
|
+
export const UNSTABLE_TableLoadingSentinel = createLeafComponent('loader', function TableLoadingIndicator<T extends object>(props: TableLoadingSentinelProps, ref: ForwardedRef<HTMLTableRowElement>, item: Node<T>) {
|
|
1354
1363
|
let state = useContext(TableStateContext)!;
|
|
1355
1364
|
let {isVirtualized} = useContext(CollectionRendererContext);
|
|
1365
|
+
let {isLoading, onLoadMore, scrollOffset, ...otherProps} = props;
|
|
1356
1366
|
let numColumns = state.collection.columns.length;
|
|
1357
1367
|
|
|
1368
|
+
let sentinelRef = useRef(null);
|
|
1369
|
+
let memoedLoadMoreProps = useMemo(() => ({
|
|
1370
|
+
onLoadMore,
|
|
1371
|
+
collection: state?.collection,
|
|
1372
|
+
sentinelRef,
|
|
1373
|
+
scrollOffset
|
|
1374
|
+
}), [onLoadMore, scrollOffset, state?.collection]);
|
|
1375
|
+
UNSTABLE_useLoadMoreSentinel(memoedLoadMoreProps, sentinelRef);
|
|
1376
|
+
|
|
1358
1377
|
let renderProps = useRenderProps({
|
|
1359
|
-
...
|
|
1378
|
+
...otherProps,
|
|
1360
1379
|
id: undefined,
|
|
1361
1380
|
children: item.rendered,
|
|
1362
1381
|
defaultClassName: 'react-aria-TableLoadingIndicator',
|
|
@@ -1369,7 +1388,7 @@ export const UNSTABLE_TableLoadingIndicator = createLeafComponent('loader', func
|
|
|
1369
1388
|
let style = {};
|
|
1370
1389
|
|
|
1371
1390
|
if (isVirtualized) {
|
|
1372
|
-
rowProps['aria-rowindex'] =
|
|
1391
|
+
rowProps['aria-rowindex'] = item.index + 1 + state.collection.headerRows.length;
|
|
1373
1392
|
rowHeaderProps['aria-colspan'] = numColumns;
|
|
1374
1393
|
style = {display: 'contents'};
|
|
1375
1394
|
} else {
|
|
@@ -1378,15 +1397,24 @@ export const UNSTABLE_TableLoadingIndicator = createLeafComponent('loader', func
|
|
|
1378
1397
|
|
|
1379
1398
|
return (
|
|
1380
1399
|
<>
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
{
|
|
1385
|
-
|
|
1386
|
-
<TD role="rowheader" {...rowHeaderProps} style={style}>
|
|
1387
|
-
{renderProps.children}
|
|
1400
|
+
{/* Alway render the sentinel. For now onus is on the user for styling when using flex + gap (this would introduce a gap even though it doesn't take room) */}
|
|
1401
|
+
{/* @ts-ignore - compatibility with React < 19 */}
|
|
1402
|
+
<TR style={{height: 0}} inert={inertValue(true)}>
|
|
1403
|
+
<TD style={{padding: 0, border: 0}}>
|
|
1404
|
+
<div data-testid="loadMoreSentinel" ref={sentinelRef} style={{position: 'relative', height: 1, width: 1}} />
|
|
1388
1405
|
</TD>
|
|
1389
1406
|
</TR>
|
|
1407
|
+
{isLoading && renderProps.children && (
|
|
1408
|
+
<TR
|
|
1409
|
+
{...mergeProps(filterDOMProps(props as any), rowProps)}
|
|
1410
|
+
{...renderProps}
|
|
1411
|
+
role="row"
|
|
1412
|
+
ref={ref}>
|
|
1413
|
+
<TD role="rowheader" {...rowHeaderProps} style={style}>
|
|
1414
|
+
{renderProps.children}
|
|
1415
|
+
</TD>
|
|
1416
|
+
</TR>
|
|
1417
|
+
)}
|
|
1390
1418
|
</>
|
|
1391
1419
|
);
|
|
1392
1420
|
});
|
package/src/TagGroup.tsx
CHANGED
|
@@ -202,7 +202,7 @@ export interface TagProps extends RenderProps<TagRenderProps>, LinkDOMProps, Hov
|
|
|
202
202
|
export const Tag = /*#__PURE__*/ createLeafComponent('item', (props: TagProps, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<unknown>) => {
|
|
203
203
|
let state = useContext(ListStateContext)!;
|
|
204
204
|
let ref = useObjectRef<HTMLDivElement>(forwardedRef);
|
|
205
|
-
let {focusProps, isFocusVisible} = useFocusRing({within:
|
|
205
|
+
let {focusProps, isFocusVisible} = useFocusRing({within: false});
|
|
206
206
|
let {rowProps, gridCellProps, removeButtonProps, ...states} = useTag({item}, state, ref);
|
|
207
207
|
|
|
208
208
|
let {hoverProps, isHovered} = useHover({
|
package/src/Tooltip.tsx
CHANGED
|
@@ -16,7 +16,7 @@ import {ContextValue, Provider, RenderProps, useContextProps, useRenderProps} fr
|
|
|
16
16
|
import {FocusableProvider} from '@react-aria/focus';
|
|
17
17
|
import {OverlayArrowContext} from './OverlayArrow';
|
|
18
18
|
import {OverlayTriggerProps, TooltipTriggerProps, TooltipTriggerState, useTooltipTriggerState} from 'react-stately';
|
|
19
|
-
import React, {createContext, ForwardedRef, forwardRef, ReactNode, useContext, useRef, useState} from 'react';
|
|
19
|
+
import React, {createContext, ForwardedRef, forwardRef, JSX, ReactNode, useContext, useRef, useState} from 'react';
|
|
20
20
|
import {useEnterAnimation, useExitAnimation, useLayoutEffect} from '@react-aria/utils';
|
|
21
21
|
|
|
22
22
|
export interface TooltipTriggerComponentProps extends TooltipTriggerProps {
|
|
@@ -81,7 +81,7 @@ export const TooltipContext = createContext<ContextValue<TooltipProps, HTMLDivEl
|
|
|
81
81
|
* the Tooltip when the user hovers over or focuses the trigger, and positioning the Tooltip
|
|
82
82
|
* relative to the trigger.
|
|
83
83
|
*/
|
|
84
|
-
export function TooltipTrigger(props: TooltipTriggerComponentProps):
|
|
84
|
+
export function TooltipTrigger(props: TooltipTriggerComponentProps): JSX.Element {
|
|
85
85
|
let state = useTooltipTriggerState(props);
|
|
86
86
|
let ref = useRef<FocusableElement>(null);
|
|
87
87
|
let {triggerProps, tooltipProps} = useTooltipTrigger(props, state, ref);
|