react-aria-components 1.10.0 → 1.11.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/Breadcrumbs.main.js +9 -2
- package/dist/Breadcrumbs.main.js.map +1 -1
- package/dist/Breadcrumbs.mjs +10 -3
- package/dist/Breadcrumbs.module.js +10 -3
- package/dist/Breadcrumbs.module.js.map +1 -1
- package/dist/Button.main.js +7 -17
- package/dist/Button.main.js.map +1 -1
- package/dist/Button.mjs +7 -17
- package/dist/Button.module.js +7 -17
- package/dist/Button.module.js.map +1 -1
- package/dist/Calendar.main.js +36 -14
- package/dist/Calendar.main.js.map +1 -1
- package/dist/Calendar.mjs +38 -16
- package/dist/Calendar.module.js +38 -16
- package/dist/Calendar.module.js.map +1 -1
- package/dist/Checkbox.main.js +8 -3
- package/dist/Checkbox.main.js.map +1 -1
- package/dist/Checkbox.mjs +10 -5
- package/dist/Checkbox.module.js +10 -5
- package/dist/Checkbox.module.js.map +1 -1
- package/dist/Collection.main.js.map +1 -1
- package/dist/Collection.module.js.map +1 -1
- package/dist/ColorArea.main.js +4 -4
- package/dist/ColorArea.main.js.map +1 -1
- package/dist/ColorArea.mjs +5 -5
- package/dist/ColorArea.module.js +5 -5
- package/dist/ColorArea.module.js.map +1 -1
- package/dist/ColorField.main.js +14 -1
- package/dist/ColorField.main.js.map +1 -1
- package/dist/ColorField.mjs +14 -1
- package/dist/ColorField.module.js +14 -1
- package/dist/ColorField.module.js.map +1 -1
- package/dist/ColorSlider.main.js +3 -1
- package/dist/ColorSlider.main.js.map +1 -1
- package/dist/ColorSlider.mjs +3 -1
- package/dist/ColorSlider.module.js +3 -1
- package/dist/ColorSlider.module.js.map +1 -1
- package/dist/ColorSwatch.main.js +6 -2
- package/dist/ColorSwatch.main.js.map +1 -1
- package/dist/ColorSwatch.mjs +6 -2
- package/dist/ColorSwatch.module.js +6 -2
- package/dist/ColorSwatch.module.js.map +1 -1
- package/dist/ColorSwatchPicker.main.js.map +1 -1
- package/dist/ColorSwatchPicker.module.js.map +1 -1
- package/dist/ColorThumb.main.js +3 -1
- package/dist/ColorThumb.main.js.map +1 -1
- package/dist/ColorThumb.mjs +3 -1
- package/dist/ColorThumb.module.js +3 -1
- package/dist/ColorThumb.module.js.map +1 -1
- package/dist/ColorWheel.main.js +3 -1
- package/dist/ColorWheel.main.js.map +1 -1
- package/dist/ColorWheel.mjs +3 -1
- package/dist/ColorWheel.module.js +3 -1
- package/dist/ColorWheel.module.js.map +1 -1
- package/dist/ComboBox.main.js +4 -1
- package/dist/ComboBox.main.js.map +1 -1
- package/dist/ComboBox.mjs +4 -1
- package/dist/ComboBox.module.js +4 -1
- package/dist/ComboBox.module.js.map +1 -1
- package/dist/DateField.main.js +16 -3
- package/dist/DateField.main.js.map +1 -1
- package/dist/DateField.mjs +16 -3
- package/dist/DateField.module.js +16 -3
- package/dist/DateField.module.js.map +1 -1
- package/dist/DatePicker.main.js +15 -8
- package/dist/DatePicker.main.js.map +1 -1
- package/dist/DatePicker.mjs +16 -9
- package/dist/DatePicker.module.js +16 -9
- package/dist/DatePicker.module.js.map +1 -1
- package/dist/Dialog.main.js +4 -3
- package/dist/Dialog.main.js.map +1 -1
- package/dist/Dialog.mjs +5 -4
- package/dist/Dialog.module.js +5 -4
- package/dist/Dialog.module.js.map +1 -1
- package/dist/Disclosure.main.js +12 -10
- package/dist/Disclosure.main.js.map +1 -1
- package/dist/Disclosure.mjs +13 -11
- package/dist/Disclosure.module.js +13 -11
- package/dist/Disclosure.module.js.map +1 -1
- package/dist/DragAndDrop.main.js +31 -3
- package/dist/DragAndDrop.main.js.map +1 -1
- package/dist/DragAndDrop.mjs +31 -3
- package/dist/DragAndDrop.module.js +31 -3
- package/dist/DragAndDrop.module.js.map +1 -1
- package/dist/DropZone.main.js +4 -3
- package/dist/DropZone.main.js.map +1 -1
- package/dist/DropZone.mjs +4 -3
- package/dist/DropZone.module.js +4 -3
- package/dist/DropZone.module.js.map +1 -1
- package/dist/FieldError.main.js +3 -1
- package/dist/FieldError.main.js.map +1 -1
- package/dist/FieldError.mjs +3 -1
- package/dist/FieldError.module.js +3 -1
- package/dist/FieldError.module.js.map +1 -1
- package/dist/FileTrigger.main.js +3 -1
- package/dist/FileTrigger.main.js.map +1 -1
- package/dist/FileTrigger.mjs +3 -1
- package/dist/FileTrigger.module.js +3 -1
- package/dist/FileTrigger.module.js.map +1 -1
- package/dist/Form.main.js.map +1 -1
- package/dist/Form.module.js.map +1 -1
- package/dist/GridList.main.js +20 -13
- package/dist/GridList.main.js.map +1 -1
- package/dist/GridList.mjs +21 -14
- package/dist/GridList.module.js +21 -14
- package/dist/GridList.module.js.map +1 -1
- package/dist/HiddenDateInput.main.js +118 -0
- package/dist/HiddenDateInput.main.js.map +1 -0
- package/dist/HiddenDateInput.mjs +109 -0
- package/dist/HiddenDateInput.module.js +109 -0
- package/dist/HiddenDateInput.module.js.map +1 -0
- package/dist/Link.main.js +7 -1
- package/dist/Link.main.js.map +1 -1
- package/dist/Link.mjs +7 -1
- package/dist/Link.module.js +7 -1
- package/dist/Link.module.js.map +1 -1
- package/dist/ListBox.main.js +22 -19
- package/dist/ListBox.main.js.map +1 -1
- package/dist/ListBox.mjs +23 -20
- package/dist/ListBox.module.js +23 -20
- package/dist/ListBox.module.js.map +1 -1
- package/dist/Menu.main.js +15 -8
- package/dist/Menu.main.js.map +1 -1
- package/dist/Menu.mjs +16 -9
- package/dist/Menu.module.js +16 -9
- package/dist/Menu.module.js.map +1 -1
- package/dist/Meter.main.js +6 -2
- package/dist/Meter.main.js.map +1 -1
- package/dist/Meter.mjs +6 -2
- package/dist/Meter.module.js +6 -2
- package/dist/Meter.module.js.map +1 -1
- package/dist/Modal.main.js +31 -6
- package/dist/Modal.main.js.map +1 -1
- package/dist/Modal.mjs +31 -6
- package/dist/Modal.module.js +31 -6
- package/dist/Modal.module.js.map +1 -1
- package/dist/NumberField.main.js +4 -1
- package/dist/NumberField.main.js.map +1 -1
- package/dist/NumberField.mjs +4 -1
- package/dist/NumberField.module.js +4 -1
- package/dist/NumberField.module.js.map +1 -1
- package/dist/Popover.main.js +3 -1
- package/dist/Popover.main.js.map +1 -1
- package/dist/Popover.mjs +3 -1
- package/dist/Popover.module.js +3 -1
- package/dist/Popover.module.js.map +1 -1
- package/dist/ProgressBar.main.js +6 -2
- package/dist/ProgressBar.main.js.map +1 -1
- package/dist/ProgressBar.mjs +6 -2
- package/dist/ProgressBar.module.js +6 -2
- package/dist/ProgressBar.module.js.map +1 -1
- package/dist/RadioGroup.main.js +8 -3
- package/dist/RadioGroup.main.js.map +1 -1
- package/dist/RadioGroup.mjs +9 -4
- package/dist/RadioGroup.module.js +9 -4
- package/dist/RadioGroup.module.js.map +1 -1
- package/dist/SearchField.main.js +3 -1
- package/dist/SearchField.main.js.map +1 -1
- package/dist/SearchField.mjs +3 -1
- package/dist/SearchField.module.js +3 -1
- package/dist/SearchField.module.js.map +1 -1
- package/dist/Select.main.js +12 -14
- package/dist/Select.main.js.map +1 -1
- package/dist/Select.mjs +13 -15
- package/dist/Select.module.js +13 -15
- package/dist/Select.module.js.map +1 -1
- package/dist/Separator.main.js +4 -2
- package/dist/Separator.main.js.map +1 -1
- package/dist/Separator.mjs +5 -3
- package/dist/Separator.module.js +5 -3
- package/dist/Separator.module.js.map +1 -1
- package/dist/Slider.main.js +7 -5
- package/dist/Slider.main.js.map +1 -1
- package/dist/Slider.mjs +8 -6
- package/dist/Slider.module.js +8 -6
- package/dist/Slider.module.js.map +1 -1
- package/dist/Switch.main.js +4 -1
- package/dist/Switch.main.js.map +1 -1
- package/dist/Switch.mjs +4 -1
- package/dist/Switch.module.js +4 -1
- package/dist/Switch.module.js.map +1 -1
- package/dist/Table.main.js +47 -26
- package/dist/Table.main.js.map +1 -1
- package/dist/Table.mjs +48 -27
- package/dist/Table.module.js +48 -27
- package/dist/Table.module.js.map +1 -1
- package/dist/Tabs.main.js +22 -11
- package/dist/Tabs.main.js.map +1 -1
- package/dist/Tabs.mjs +23 -12
- package/dist/Tabs.module.js +23 -12
- package/dist/Tabs.module.js.map +1 -1
- package/dist/TagGroup.main.js +14 -8
- package/dist/TagGroup.main.js.map +1 -1
- package/dist/TagGroup.mjs +14 -8
- package/dist/TagGroup.module.js +14 -8
- package/dist/TagGroup.module.js.map +1 -1
- package/dist/TextField.main.js +13 -1
- package/dist/TextField.main.js.map +1 -1
- package/dist/TextField.mjs +13 -1
- package/dist/TextField.module.js +13 -1
- package/dist/TextField.module.js.map +1 -1
- package/dist/Toast.main.js +9 -5
- package/dist/Toast.main.js.map +1 -1
- package/dist/Toast.mjs +9 -5
- package/dist/Toast.module.js +9 -5
- package/dist/Toast.module.js.map +1 -1
- package/dist/ToggleButton.main.js +8 -2
- package/dist/ToggleButton.main.js.map +1 -1
- package/dist/ToggleButton.mjs +8 -2
- package/dist/ToggleButton.module.js +8 -2
- package/dist/ToggleButton.module.js.map +1 -1
- package/dist/ToggleButtonGroup.main.js +6 -2
- package/dist/ToggleButtonGroup.main.js.map +1 -1
- package/dist/ToggleButtonGroup.mjs +6 -2
- package/dist/ToggleButtonGroup.module.js +6 -2
- package/dist/ToggleButtonGroup.module.js.map +1 -1
- package/dist/Toolbar.main.js +4 -3
- package/dist/Toolbar.main.js.map +1 -1
- package/dist/Toolbar.mjs +4 -3
- package/dist/Toolbar.module.js +4 -3
- package/dist/Toolbar.module.js.map +1 -1
- package/dist/Tooltip.main.js +5 -3
- package/dist/Tooltip.main.js.map +1 -1
- package/dist/Tooltip.mjs +5 -3
- package/dist/Tooltip.module.js +5 -3
- package/dist/Tooltip.module.js.map +1 -1
- package/dist/Tree.main.js +73 -26
- package/dist/Tree.main.js.map +1 -1
- package/dist/Tree.mjs +74 -27
- package/dist/Tree.module.js +74 -27
- package/dist/Tree.module.js.map +1 -1
- package/dist/TreeDropTargetDelegate.main.js +8 -5
- package/dist/TreeDropTargetDelegate.main.js.map +1 -1
- package/dist/TreeDropTargetDelegate.mjs +8 -5
- package/dist/TreeDropTargetDelegate.module.js +8 -5
- package/dist/TreeDropTargetDelegate.module.js.map +1 -1
- package/dist/import.mjs +5 -5
- package/dist/main.js +4 -4
- 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 +212 -203
- package/dist/types.d.ts.map +1 -1
- package/dist/useDragAndDrop.main.js.map +1 -1
- package/dist/useDragAndDrop.module.js.map +1 -1
- package/dist/utils.main.js.map +1 -1
- package/dist/utils.module.js.map +1 -1
- package/i18n/de-DE.js +1 -1
- package/i18n/de-DE.mjs +1 -1
- package/package.json +25 -25
- package/src/Breadcrumbs.tsx +10 -6
- package/src/Button.tsx +8 -30
- package/src/Calendar.tsx +41 -24
- package/src/Checkbox.tsx +8 -6
- package/src/Collection.tsx +2 -2
- package/src/ColorArea.tsx +5 -6
- package/src/ColorField.tsx +6 -4
- package/src/ColorSlider.tsx +3 -2
- package/src/ColorSwatch.tsx +6 -3
- package/src/ColorSwatchPicker.tsx +3 -3
- package/src/ColorThumb.tsx +3 -3
- package/src/ColorWheel.tsx +6 -5
- package/src/ComboBox.tsx +4 -4
- package/src/DateField.tsx +15 -10
- package/src/DatePicker.tsx +14 -12
- package/src/Dialog.tsx +6 -6
- package/src/Disclosure.tsx +10 -14
- package/src/DragAndDrop.tsx +31 -1
- package/src/DropZone.tsx +4 -5
- package/src/FieldError.tsx +3 -3
- package/src/FileTrigger.tsx +4 -3
- package/src/Form.tsx +2 -1
- package/src/GridList.tsx +25 -18
- package/src/HiddenDateInput.tsx +142 -0
- package/src/Link.tsx +7 -3
- package/src/ListBox.tsx +30 -26
- package/src/Menu.tsx +15 -12
- package/src/Meter.tsx +6 -3
- package/src/Modal.tsx +16 -5
- package/src/NumberField.tsx +4 -4
- package/src/Popover.tsx +3 -3
- package/src/ProgressBar.tsx +6 -2
- package/src/RadioGroup.tsx +8 -6
- package/src/SearchField.tsx +3 -2
- package/src/Select.tsx +13 -16
- package/src/Separator.tsx +6 -4
- package/src/Slider.tsx +9 -11
- package/src/Switch.tsx +4 -3
- package/src/Table.tsx +58 -56
- package/src/Tabs.tsx +20 -16
- package/src/TagGroup.tsx +13 -12
- package/src/TextField.tsx +5 -2
- package/src/Toast.tsx +10 -8
- package/src/ToggleButton.tsx +8 -4
- package/src/ToggleButtonGroup.tsx +6 -4
- package/src/Toolbar.tsx +4 -5
- package/src/Tooltip.tsx +6 -5
- package/src/Tree.tsx +90 -42
- package/src/TreeDropTargetDelegate.ts +5 -1
- package/src/index.ts +8 -8
- package/src/useDragAndDrop.tsx +2 -2
- package/src/utils.tsx +9 -9
package/src/Table.tsx
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {AriaLabelingProps, HoverEvents, Key, LinkDOMProps, RefObject} from '@react-types/shared';
|
|
1
|
+
import {AriaLabelingProps, GlobalDOMAttributes, HoverEvents, Key, LinkDOMProps, PressEvents, RefObject} from '@react-types/shared';
|
|
2
2
|
import {BaseCollection, Collection, CollectionBuilder, CollectionNode, createBranchComponent, createLeafComponent, useCachedChildren} from '@react-aria/collections';
|
|
3
3
|
import {buildHeaderRows, TableColumnResizeState} from '@react-stately/table';
|
|
4
4
|
import {ButtonContext} from './Button';
|
|
5
5
|
import {CheckboxContext} from './RSPContexts';
|
|
6
6
|
import {CollectionProps, CollectionRendererContext, DefaultCollectionRenderer, ItemRenderProps} from './Collection';
|
|
7
7
|
import {ColumnSize, ColumnStaticSize, TableCollection as ITableCollection, TableProps as SharedTableProps} from '@react-types/table';
|
|
8
|
-
import {ContextValue, DEFAULT_SLOT, DOMProps, Provider, RenderProps,
|
|
8
|
+
import {ContextValue, DEFAULT_SLOT, DOMProps, Provider, RenderProps, SlotProps, StyleProps, StyleRenderProps, useContextProps, useRenderProps} from './utils';
|
|
9
9
|
import {DisabledBehavior, DraggableCollectionState, DroppableCollectionState, MultipleSelectionState, Node, SelectionBehavior, SelectionMode, SortDirection, TableState, useMultipleSelectionState, useTableColumnResizeState, useTableState} from 'react-stately';
|
|
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, inertValue, isScrollable, LoadMoreSentinelProps, mergeRefs,
|
|
13
|
+
import {filterDOMProps, inertValue, isScrollable, LoadMoreSentinelProps, mergeRefs, useLayoutEffect, useLoadMoreSentinel, 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';
|
|
@@ -110,10 +110,6 @@ class TableCollection<T> extends BaseCollection<T> implements ITableCollection<T
|
|
|
110
110
|
yield this.body;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
get size() {
|
|
114
|
-
return this.rows.length;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
113
|
getFirstKey() {
|
|
118
114
|
return this.body.firstChildKey;
|
|
119
115
|
}
|
|
@@ -209,7 +205,7 @@ interface ResizableTableContainerContextValue {
|
|
|
209
205
|
|
|
210
206
|
const ResizableTableContainerContext = createContext<ResizableTableContainerContextValue | null>(null);
|
|
211
207
|
|
|
212
|
-
export interface ResizableTableContainerProps extends DOMProps,
|
|
208
|
+
export interface ResizableTableContainerProps extends DOMProps, GlobalDOMAttributes<HTMLDivElement> {
|
|
213
209
|
/**
|
|
214
210
|
* Handler that is called when a user starts a column resize.
|
|
215
211
|
*/
|
|
@@ -270,7 +266,7 @@ export const ResizableTableContainer = forwardRef(function ResizableTableContain
|
|
|
270
266
|
|
|
271
267
|
return (
|
|
272
268
|
<div
|
|
273
|
-
{...filterDOMProps(props
|
|
269
|
+
{...filterDOMProps(props, {global: true})}
|
|
274
270
|
ref={containerRef}
|
|
275
271
|
className={props.className || 'react-aria-ResizableTableContainer'}
|
|
276
272
|
style={props.style}
|
|
@@ -282,7 +278,7 @@ export const ResizableTableContainer = forwardRef(function ResizableTableContain
|
|
|
282
278
|
);
|
|
283
279
|
});
|
|
284
280
|
|
|
285
|
-
export const TableContext = createContext<ContextValue<TableProps, HTMLTableElement>>(null);
|
|
281
|
+
export const TableContext = createContext<ContextValue<TableProps, HTMLTableElement | HTMLDivElement>>(null);
|
|
286
282
|
export const TableStateContext = createContext<TableState<any> | null>(null);
|
|
287
283
|
export const TableColumnResizeStateContext = createContext<TableColumnResizeState<unknown> | null>(null);
|
|
288
284
|
|
|
@@ -308,7 +304,7 @@ export interface TableRenderProps {
|
|
|
308
304
|
state: TableState<unknown>
|
|
309
305
|
}
|
|
310
306
|
|
|
311
|
-
export interface TableProps extends Omit<SharedTableProps<any>, 'children'>, StyleRenderProps<TableRenderProps>, SlotProps, AriaLabelingProps,
|
|
307
|
+
export interface TableProps extends Omit<SharedTableProps<any>, 'children'>, StyleRenderProps<TableRenderProps>, SlotProps, AriaLabelingProps, GlobalDOMAttributes<HTMLTableElement> {
|
|
312
308
|
/** The elements that make up the table. Includes the TableHeader, TableBody, Columns, and Rows. */
|
|
313
309
|
children?: ReactNode,
|
|
314
310
|
/**
|
|
@@ -331,7 +327,7 @@ export interface TableProps extends Omit<SharedTableProps<any>, 'children'>, Sty
|
|
|
331
327
|
* A table displays data in rows and columns and enables a user to navigate its contents via directional navigation keys,
|
|
332
328
|
* and optionally supports row selection and sorting.
|
|
333
329
|
*/
|
|
334
|
-
export const Table = forwardRef(function Table(props: TableProps, ref: ForwardedRef<HTMLTableElement>) {
|
|
330
|
+
export const Table = forwardRef(function Table(props: TableProps, ref: ForwardedRef<HTMLTableElement | HTMLDivElement>) {
|
|
335
331
|
[props, ref] = useContextProps(props, ref, TableContext);
|
|
336
332
|
|
|
337
333
|
// Separate selection state so we have access to it from collection components via useTableOptions.
|
|
@@ -353,7 +349,7 @@ export const Table = forwardRef(function Table(props: TableProps, ref: Forwarded
|
|
|
353
349
|
|
|
354
350
|
return (
|
|
355
351
|
<CollectionBuilder content={content} createCollection={() => new TableCollection<any>()}>
|
|
356
|
-
{collection => <TableInner props={props} forwardedRef={ref} selectionState={selectionState} collection={collection} />}
|
|
352
|
+
{collection => <TableInner props={props} forwardedRef={ref as any} selectionState={selectionState} collection={collection} />}
|
|
357
353
|
</CollectionBuilder>
|
|
358
354
|
);
|
|
359
355
|
});
|
|
@@ -474,6 +470,7 @@ function TableInner({props, forwardedRef: ref, selectionState, collection}: Tabl
|
|
|
474
470
|
}
|
|
475
471
|
|
|
476
472
|
let ElementType = useElementType('table');
|
|
473
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
477
474
|
|
|
478
475
|
return (
|
|
479
476
|
<Provider
|
|
@@ -485,9 +482,7 @@ function TableInner({props, forwardedRef: ref, selectionState, collection}: Tabl
|
|
|
485
482
|
]}>
|
|
486
483
|
<FocusScope>
|
|
487
484
|
<ElementType
|
|
488
|
-
{...
|
|
489
|
-
{...renderProps}
|
|
490
|
-
{...mergeProps(gridProps, focusProps, droppableCollection?.collectionProps)}
|
|
485
|
+
{...mergeProps(DOMProps, renderProps, gridProps, focusProps, droppableCollection?.collectionProps)}
|
|
491
486
|
style={style}
|
|
492
487
|
ref={ref}
|
|
493
488
|
slot={props.slot || undefined}
|
|
@@ -540,7 +535,7 @@ export interface TableHeaderRenderProps {
|
|
|
540
535
|
isHovered: boolean
|
|
541
536
|
}
|
|
542
537
|
|
|
543
|
-
export interface TableHeaderProps<T> extends StyleRenderProps<TableHeaderRenderProps>, HoverEvents {
|
|
538
|
+
export interface TableHeaderProps<T> extends StyleRenderProps<TableHeaderRenderProps>, HoverEvents, GlobalDOMAttributes<HTMLTableSectionElement> {
|
|
544
539
|
/** A list of table columns. */
|
|
545
540
|
columns?: Iterable<T>,
|
|
546
541
|
/** A list of `Column(s)` or a function. If the latter, a list of columns must be provided using the `columns` prop. */
|
|
@@ -554,7 +549,7 @@ export interface TableHeaderProps<T> extends StyleRenderProps<TableHeaderRenderP
|
|
|
554
549
|
*/
|
|
555
550
|
export const TableHeader = /*#__PURE__*/ createBranchComponent(
|
|
556
551
|
'tableheader',
|
|
557
|
-
<T extends object>(props: TableHeaderProps<T>, ref: ForwardedRef<HTMLTableSectionElement>) => {
|
|
552
|
+
<T extends object>(props: TableHeaderProps<T>, ref: ForwardedRef<HTMLTableSectionElement | HTMLDivElement>) => {
|
|
558
553
|
let collection = useContext(TableStateContext)!.collection as TableCollection<unknown>;
|
|
559
554
|
let headerRows = useCachedChildren({
|
|
560
555
|
items: collection.headerRows,
|
|
@@ -587,9 +582,9 @@ export const TableHeader = /*#__PURE__*/ createBranchComponent(
|
|
|
587
582
|
|
|
588
583
|
return (
|
|
589
584
|
<THead
|
|
590
|
-
{...mergeProps(filterDOMProps(props
|
|
585
|
+
{...mergeProps(filterDOMProps(props, {global: true}), rowGroupProps, hoverProps)}
|
|
591
586
|
{...renderProps}
|
|
592
|
-
ref={ref}
|
|
587
|
+
ref={ref as any}
|
|
593
588
|
data-hovered={isHovered || undefined}>
|
|
594
589
|
{headerRows}
|
|
595
590
|
</THead>
|
|
@@ -667,7 +662,7 @@ export interface ColumnRenderProps {
|
|
|
667
662
|
startResize(): void
|
|
668
663
|
}
|
|
669
664
|
|
|
670
|
-
export interface ColumnProps extends RenderProps<ColumnRenderProps> {
|
|
665
|
+
export interface ColumnProps extends RenderProps<ColumnRenderProps>, GlobalDOMAttributes<HTMLTableHeaderCellElement> {
|
|
671
666
|
/** The unique id of the column. */
|
|
672
667
|
id?: Key,
|
|
673
668
|
/** Whether the column allows sorting. */
|
|
@@ -689,8 +684,8 @@ export interface ColumnProps extends RenderProps<ColumnRenderProps> {
|
|
|
689
684
|
/**
|
|
690
685
|
* A column within a `<Table>`.
|
|
691
686
|
*/
|
|
692
|
-
export const Column = /*#__PURE__*/ createLeafComponent('column', (props: ColumnProps, forwardedRef: ForwardedRef<HTMLTableCellElement>, column: GridNode<unknown>) => {
|
|
693
|
-
let ref = useObjectRef<
|
|
687
|
+
export const Column = /*#__PURE__*/ createLeafComponent('column', (props: ColumnProps, forwardedRef: ForwardedRef<HTMLTableCellElement | HTMLDivElement>, column: GridNode<unknown>) => {
|
|
688
|
+
let ref = useObjectRef<HTMLTableCellElement | HTMLDivElement>(forwardedRef);
|
|
694
689
|
let state = useContext(TableStateContext)!;
|
|
695
690
|
let {isVirtualized} = useContext(CollectionRendererContext);
|
|
696
691
|
let {columnHeaderProps} = useTableColumnHeader(
|
|
@@ -747,13 +742,15 @@ export const Column = /*#__PURE__*/ createLeafComponent('column', (props: Column
|
|
|
747
742
|
}
|
|
748
743
|
|
|
749
744
|
let TH = useElementType('th');
|
|
745
|
+
let DOMProps = filterDOMProps(props as any, {global: true});
|
|
746
|
+
delete DOMProps.id;
|
|
750
747
|
|
|
751
748
|
return (
|
|
752
749
|
<TH
|
|
753
|
-
{...mergeProps(
|
|
750
|
+
{...mergeProps(DOMProps, columnHeaderProps, focusProps, hoverProps)}
|
|
754
751
|
{...renderProps}
|
|
755
752
|
style={style}
|
|
756
|
-
ref={ref}
|
|
753
|
+
ref={ref as any}
|
|
757
754
|
data-hovered={isHovered || undefined}
|
|
758
755
|
data-focused={isFocused || undefined}
|
|
759
756
|
data-focus-visible={isFocusVisible || undefined}
|
|
@@ -799,7 +796,7 @@ export interface ColumnResizerRenderProps {
|
|
|
799
796
|
resizableDirection: 'right' | 'left' | 'both'
|
|
800
797
|
}
|
|
801
798
|
|
|
802
|
-
export interface ColumnResizerProps extends HoverEvents, RenderProps<ColumnResizerRenderProps> {
|
|
799
|
+
export interface ColumnResizerProps extends HoverEvents, RenderProps<ColumnResizerRenderProps>, GlobalDOMAttributes<HTMLDivElement> {
|
|
803
800
|
/** A custom accessibility label for the resizer. */
|
|
804
801
|
'aria-label'?: string
|
|
805
802
|
}
|
|
@@ -881,13 +878,13 @@ export const ColumnResizer = forwardRef(function ColumnResizer(props: ColumnResi
|
|
|
881
878
|
setMouseDown(false);
|
|
882
879
|
}
|
|
883
880
|
|
|
881
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
882
|
+
|
|
884
883
|
return (
|
|
885
884
|
<div
|
|
886
885
|
ref={objectRef}
|
|
887
886
|
role="presentation"
|
|
888
|
-
{...
|
|
889
|
-
{...renderProps}
|
|
890
|
-
{...mergeProps(resizerProps, {onPointerDown}, hoverProps)}
|
|
887
|
+
{...mergeProps(DOMProps, renderProps, resizerProps, {onPointerDown}, hoverProps)}
|
|
891
888
|
data-hovered={isHovered || undefined}
|
|
892
889
|
data-focused={isFocused || undefined}
|
|
893
890
|
data-focus-visible={isFocusVisible || undefined}
|
|
@@ -915,14 +912,14 @@ export interface TableBodyRenderProps {
|
|
|
915
912
|
isDropTarget: boolean
|
|
916
913
|
}
|
|
917
914
|
|
|
918
|
-
export interface TableBodyProps<T> extends Omit<CollectionProps<T>, 'disabledKeys'>, StyleRenderProps<TableBodyRenderProps> {
|
|
915
|
+
export interface TableBodyProps<T> extends Omit<CollectionProps<T>, 'disabledKeys'>, StyleRenderProps<TableBodyRenderProps>, GlobalDOMAttributes<HTMLTableSectionElement> {
|
|
919
916
|
/** Provides content to display when there are no rows in the table. */
|
|
920
917
|
renderEmptyState?: (props: TableBodyRenderProps) => ReactNode
|
|
921
918
|
}
|
|
922
919
|
/**
|
|
923
920
|
* The body of a `<Table>`, containing the table rows.
|
|
924
921
|
*/
|
|
925
|
-
export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T extends object>(props: TableBodyProps<T>, ref: ForwardedRef<HTMLTableSectionElement>) => {
|
|
922
|
+
export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T extends object>(props: TableBodyProps<T>, ref: ForwardedRef<HTMLTableSectionElement | HTMLDivElement>) => {
|
|
926
923
|
let state = useContext(TableStateContext)!;
|
|
927
924
|
let {isVirtualized} = useContext(CollectionRendererContext);
|
|
928
925
|
let collection = state.collection;
|
|
@@ -931,7 +928,7 @@ export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T ext
|
|
|
931
928
|
let isDroppable = !!dragAndDropHooks?.useDroppableCollectionState && !dropState?.isDisabled;
|
|
932
929
|
let isRootDropTarget = isDroppable && !!dropState && (dropState.isDropTarget({type: 'root'}) ?? false);
|
|
933
930
|
|
|
934
|
-
let isEmpty = collection.size === 0
|
|
931
|
+
let isEmpty = collection.size === 0;
|
|
935
932
|
let renderValues = {
|
|
936
933
|
isDropTarget: isRootDropTarget,
|
|
937
934
|
isEmpty
|
|
@@ -954,7 +951,6 @@ export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T ext
|
|
|
954
951
|
let rowHeaderProps = {};
|
|
955
952
|
let style = {};
|
|
956
953
|
if (isVirtualized) {
|
|
957
|
-
rowProps['aria-rowindex'] = collection.headerRows.length + 1;
|
|
958
954
|
rowHeaderProps['aria-colspan'] = numColumns;
|
|
959
955
|
style = {display: 'contents'};
|
|
960
956
|
} else {
|
|
@@ -973,13 +969,14 @@ export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T ext
|
|
|
973
969
|
let {rowGroupProps} = useTableRowGroup();
|
|
974
970
|
let TBody = useElementType('tbody');
|
|
975
971
|
|
|
972
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
973
|
+
|
|
976
974
|
// TODO: TableBody doesn't support being the scrollable body of the table yet, to revisit if needed. Would need to
|
|
977
975
|
// call useLoadMore here and walk up the DOM to the nearest scrollable element to set scrollRef
|
|
978
976
|
return (
|
|
979
977
|
<TBody
|
|
980
|
-
{...mergeProps(
|
|
981
|
-
{
|
|
982
|
-
ref={ref}
|
|
978
|
+
{...mergeProps(DOMProps, renderProps, rowGroupProps)}
|
|
979
|
+
ref={ref as any}
|
|
983
980
|
data-empty={isEmpty || undefined}>
|
|
984
981
|
{isDroppable && <RootDropIndicator />}
|
|
985
982
|
<CollectionBranch
|
|
@@ -998,7 +995,7 @@ export interface RowRenderProps extends ItemRenderProps {
|
|
|
998
995
|
id?: Key
|
|
999
996
|
}
|
|
1000
997
|
|
|
1001
|
-
export interface RowProps<T> extends StyleRenderProps<RowRenderProps>, LinkDOMProps, HoverEvents {
|
|
998
|
+
export interface RowProps<T> extends StyleRenderProps<RowRenderProps>, LinkDOMProps, HoverEvents, PressEvents, Omit<GlobalDOMAttributes<HTMLTableRowElement>, 'onClick'> {
|
|
1002
999
|
/** A list of columns used when dynamically rendering cells. */
|
|
1003
1000
|
columns?: Iterable<T>,
|
|
1004
1001
|
/** The cells within the row. Supports static items or a function for dynamic rendering. */
|
|
@@ -1025,8 +1022,8 @@ export interface RowProps<T> extends StyleRenderProps<RowRenderProps>, LinkDOMPr
|
|
|
1025
1022
|
*/
|
|
1026
1023
|
export const Row = /*#__PURE__*/ createBranchComponent(
|
|
1027
1024
|
'item',
|
|
1028
|
-
<T extends object>(props: RowProps<T>, forwardedRef: ForwardedRef<HTMLTableRowElement>, item: GridNode<T>) => {
|
|
1029
|
-
let ref = useObjectRef<HTMLTableRowElement>(forwardedRef);
|
|
1025
|
+
<T extends object>(props: RowProps<T>, forwardedRef: ForwardedRef<HTMLTableRowElement | HTMLDivElement>, item: GridNode<T>) => {
|
|
1026
|
+
let ref = useObjectRef<HTMLTableRowElement | HTMLDivElement>(forwardedRef);
|
|
1030
1027
|
let state = useContext(TableStateContext)!;
|
|
1031
1028
|
let {dragAndDropHooks, dragState, dropState} = useContext(DragAndDropContext);
|
|
1032
1029
|
let {isVirtualized, CollectionBranch} = useContext(CollectionRendererContext);
|
|
@@ -1101,6 +1098,9 @@ export const Row = /*#__PURE__*/ createBranchComponent(
|
|
|
1101
1098
|
|
|
1102
1099
|
let TR = useElementType('tr');
|
|
1103
1100
|
let TD = useElementType('td');
|
|
1101
|
+
let DOMProps = filterDOMProps(props as any, {global: true});
|
|
1102
|
+
delete DOMProps.id;
|
|
1103
|
+
delete DOMProps.onClick;
|
|
1104
1104
|
|
|
1105
1105
|
return (
|
|
1106
1106
|
<>
|
|
@@ -1112,9 +1112,8 @@ export const Row = /*#__PURE__*/ createBranchComponent(
|
|
|
1112
1112
|
</TR>
|
|
1113
1113
|
)}
|
|
1114
1114
|
<TR
|
|
1115
|
-
{...mergeProps(
|
|
1116
|
-
{
|
|
1117
|
-
ref={ref}
|
|
1115
|
+
{...mergeProps(DOMProps, renderProps, rowProps, focusProps, hoverProps, draggableItem?.dragProps, focusWithinProps)}
|
|
1116
|
+
ref={ref as any}
|
|
1118
1117
|
data-disabled={states.isDisabled || undefined}
|
|
1119
1118
|
data-selected={states.isSelected || undefined}
|
|
1120
1119
|
data-hovered={isHovered || undefined}
|
|
@@ -1193,7 +1192,7 @@ export interface CellRenderProps {
|
|
|
1193
1192
|
id?: Key
|
|
1194
1193
|
}
|
|
1195
1194
|
|
|
1196
|
-
export interface CellProps extends RenderProps<CellRenderProps> {
|
|
1195
|
+
export interface CellProps extends RenderProps<CellRenderProps>, GlobalDOMAttributes<HTMLTableCellElement> {
|
|
1197
1196
|
/** The unique id of the cell. */
|
|
1198
1197
|
id?: Key,
|
|
1199
1198
|
/** A string representation of the cell's contents, used for features like typeahead. */
|
|
@@ -1205,8 +1204,8 @@ export interface CellProps extends RenderProps<CellRenderProps> {
|
|
|
1205
1204
|
/**
|
|
1206
1205
|
* A cell within a table row.
|
|
1207
1206
|
*/
|
|
1208
|
-
export const Cell = /*#__PURE__*/ createLeafComponent('cell', (props: CellProps, forwardedRef: ForwardedRef<HTMLTableCellElement>, cell: GridNode<unknown>) => {
|
|
1209
|
-
let ref = useObjectRef<HTMLTableCellElement>(forwardedRef);
|
|
1207
|
+
export const Cell = /*#__PURE__*/ createLeafComponent('cell', (props: CellProps, forwardedRef: ForwardedRef<HTMLTableCellElement | HTMLDivElement>, cell: GridNode<unknown>) => {
|
|
1208
|
+
let ref = useObjectRef<HTMLTableCellElement | HTMLDivElement>(forwardedRef);
|
|
1210
1209
|
let state = useContext(TableStateContext)!;
|
|
1211
1210
|
let {dragState} = useContext(DragAndDropContext);
|
|
1212
1211
|
let {isVirtualized} = useContext(CollectionRendererContext);
|
|
@@ -1235,12 +1234,13 @@ export const Cell = /*#__PURE__*/ createLeafComponent('cell', (props: CellProps,
|
|
|
1235
1234
|
});
|
|
1236
1235
|
|
|
1237
1236
|
let TD = useElementType('td');
|
|
1237
|
+
let DOMProps = filterDOMProps(props as any, {global: true});
|
|
1238
|
+
delete DOMProps.id;
|
|
1238
1239
|
|
|
1239
1240
|
return (
|
|
1240
1241
|
<TD
|
|
1241
|
-
{...mergeProps(
|
|
1242
|
-
{
|
|
1243
|
-
ref={ref}
|
|
1242
|
+
{...mergeProps(DOMProps, renderProps, gridCellProps, focusProps, hoverProps)}
|
|
1243
|
+
ref={ref as any}
|
|
1244
1244
|
data-focused={isFocused || undefined}
|
|
1245
1245
|
data-focus-visible={isFocusVisible || undefined}
|
|
1246
1246
|
data-pressed={isPressed || undefined}>
|
|
@@ -1270,7 +1270,7 @@ function TableDropIndicatorWrapper(props: DropIndicatorProps, ref: ForwardedRef<
|
|
|
1270
1270
|
);
|
|
1271
1271
|
}
|
|
1272
1272
|
|
|
1273
|
-
interface TableDropIndicatorProps extends DropIndicatorProps {
|
|
1273
|
+
interface TableDropIndicatorProps extends DropIndicatorProps, GlobalDOMAttributes<HTMLTableRowElement> {
|
|
1274
1274
|
dropIndicatorProps: React.HTMLAttributes<HTMLElement>,
|
|
1275
1275
|
isDropTarget: boolean,
|
|
1276
1276
|
buttonRef: RefObject<HTMLDivElement | null>
|
|
@@ -1299,7 +1299,7 @@ function TableDropIndicator(props: TableDropIndicatorProps, ref: ForwardedRef<HT
|
|
|
1299
1299
|
|
|
1300
1300
|
return (
|
|
1301
1301
|
<TR
|
|
1302
|
-
{...filterDOMProps(props as any)}
|
|
1302
|
+
{...filterDOMProps(props as any, {global: true})}
|
|
1303
1303
|
{...renderProps}
|
|
1304
1304
|
role="row"
|
|
1305
1305
|
ref={ref as RefObject<HTMLTableRowElement | null>}
|
|
@@ -1348,7 +1348,7 @@ function RootDropIndicator() {
|
|
|
1348
1348
|
);
|
|
1349
1349
|
}
|
|
1350
1350
|
|
|
1351
|
-
export interface
|
|
1351
|
+
export interface TableLoadMoreItemProps extends Omit<LoadMoreSentinelProps, 'collection'>, StyleProps, GlobalDOMAttributes<HTMLTableRowElement> {
|
|
1352
1352
|
/**
|
|
1353
1353
|
* The load more spinner to render when loading additional items.
|
|
1354
1354
|
*/
|
|
@@ -1359,7 +1359,7 @@ export interface TableLoadingSentinelProps extends Omit<LoadMoreSentinelProps, '
|
|
|
1359
1359
|
isLoading?: boolean
|
|
1360
1360
|
}
|
|
1361
1361
|
|
|
1362
|
-
export const
|
|
1362
|
+
export const TableLoadMoreItem = createLeafComponent('loader', function TableLoadingIndicator(props: TableLoadMoreItemProps, ref: ForwardedRef<HTMLTableRowElement>, item: Node<object>) {
|
|
1363
1363
|
let state = useContext(TableStateContext)!;
|
|
1364
1364
|
let {isVirtualized} = useContext(CollectionRendererContext);
|
|
1365
1365
|
let {isLoading, onLoadMore, scrollOffset, ...otherProps} = props;
|
|
@@ -1372,7 +1372,7 @@ export const UNSTABLE_TableLoadingSentinel = createLeafComponent('loader', funct
|
|
|
1372
1372
|
sentinelRef,
|
|
1373
1373
|
scrollOffset
|
|
1374
1374
|
}), [onLoadMore, scrollOffset, state?.collection]);
|
|
1375
|
-
|
|
1375
|
+
useLoadMoreSentinel(memoedLoadMoreProps, sentinelRef);
|
|
1376
1376
|
|
|
1377
1377
|
let renderProps = useRenderProps({
|
|
1378
1378
|
...otherProps,
|
|
@@ -1388,7 +1388,9 @@ export const UNSTABLE_TableLoadingSentinel = createLeafComponent('loader', funct
|
|
|
1388
1388
|
let style = {};
|
|
1389
1389
|
|
|
1390
1390
|
if (isVirtualized) {
|
|
1391
|
-
|
|
1391
|
+
// For now don't include aria-rowindex on loader since they aren't keyboard focusable
|
|
1392
|
+
// Arguably shouldn't include them ever since it might be confusing to the user to include the loaders as part of the
|
|
1393
|
+
// row count
|
|
1392
1394
|
rowHeaderProps['aria-colspan'] = numColumns;
|
|
1393
1395
|
style = {display: 'contents'};
|
|
1394
1396
|
} else {
|
|
@@ -1406,10 +1408,10 @@ export const UNSTABLE_TableLoadingSentinel = createLeafComponent('loader', funct
|
|
|
1406
1408
|
</TR>
|
|
1407
1409
|
{isLoading && renderProps.children && (
|
|
1408
1410
|
<TR
|
|
1409
|
-
{...mergeProps(filterDOMProps(props
|
|
1411
|
+
{...mergeProps(filterDOMProps(props, {global: true}), rowProps)}
|
|
1410
1412
|
{...renderProps}
|
|
1411
1413
|
role="row"
|
|
1412
|
-
ref={ref}>
|
|
1414
|
+
ref={ref as ForwardedRef<HTMLTableRowElement>}>
|
|
1413
1415
|
<TD role="rowheader" {...rowHeaderProps} style={style}>
|
|
1414
1416
|
{renderProps.children}
|
|
1415
1417
|
</TD>
|
package/src/Tabs.tsx
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {AriaLabelingProps, forwardRefType, HoverEvents, Key, LinkDOMProps, RefObject} from '@react-types/shared';
|
|
13
|
+
import {AriaLabelingProps, forwardRefType, GlobalDOMAttributes, HoverEvents, Key, LinkDOMProps, PressEvents, RefObject} from '@react-types/shared';
|
|
14
14
|
import {AriaTabListProps, AriaTabPanelProps, mergeProps, Orientation, useFocusRing, useHover, useTab, useTabList, useTabPanel} from 'react-aria';
|
|
15
15
|
import {Collection, CollectionBuilder, createHideableComponent, createLeafComponent} from '@react-aria/collections';
|
|
16
16
|
import {CollectionProps, CollectionRendererContext, DefaultCollectionRenderer, usePersistedKeys} from './Collection';
|
|
@@ -19,7 +19,7 @@ import {filterDOMProps, inertValue, useObjectRef} from '@react-aria/utils';
|
|
|
19
19
|
import {Collection as ICollection, Node, TabListState, useTabListState} from 'react-stately';
|
|
20
20
|
import React, {createContext, ForwardedRef, forwardRef, JSX, useContext, useMemo} from 'react';
|
|
21
21
|
|
|
22
|
-
export interface TabsProps extends Omit<AriaTabListProps<any>, 'items' | 'children'>, RenderProps<TabsRenderProps>, SlotProps {}
|
|
22
|
+
export interface TabsProps extends Omit<AriaTabListProps<any>, 'items' | 'children'>, RenderProps<TabsRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
|
|
23
23
|
|
|
24
24
|
export interface TabsRenderProps {
|
|
25
25
|
/**
|
|
@@ -29,7 +29,7 @@ export interface TabsRenderProps {
|
|
|
29
29
|
orientation: Orientation
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export interface TabListProps<T> extends StyleRenderProps<TabListRenderProps>, AriaLabelingProps, Omit<CollectionProps<T>, 'disabledKeys'> {}
|
|
32
|
+
export interface TabListProps<T> extends StyleRenderProps<TabListRenderProps>, AriaLabelingProps, Omit<CollectionProps<T>, 'disabledKeys'>, GlobalDOMAttributes<HTMLDivElement> {}
|
|
33
33
|
|
|
34
34
|
export interface TabListRenderProps {
|
|
35
35
|
/**
|
|
@@ -43,7 +43,7 @@ export interface TabListRenderProps {
|
|
|
43
43
|
state: TabListState<unknown>
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
export interface TabProps extends RenderProps<TabRenderProps>, AriaLabelingProps, LinkDOMProps, HoverEvents {
|
|
46
|
+
export interface TabProps extends RenderProps<TabRenderProps>, AriaLabelingProps, LinkDOMProps, HoverEvents, PressEvents, Omit<GlobalDOMAttributes<HTMLDivElement>, 'onClick'> {
|
|
47
47
|
/** The unique id of the tab. */
|
|
48
48
|
id?: Key,
|
|
49
49
|
/** Whether the tab is disabled. */
|
|
@@ -83,7 +83,7 @@ export interface TabRenderProps {
|
|
|
83
83
|
isDisabled: boolean
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
export interface TabPanelProps extends AriaTabPanelProps, RenderProps<TabPanelRenderProps> {
|
|
86
|
+
export interface TabPanelProps extends AriaTabPanelProps, RenderProps<TabPanelRenderProps>, GlobalDOMAttributes<HTMLDivElement> {
|
|
87
87
|
/**
|
|
88
88
|
* Whether to mount the tab panel in the DOM even when it is not currently selected.
|
|
89
89
|
* Inactive tab panels are inert and cannot be interacted with. They must be styled appropriately so this is clear to the user visually.
|
|
@@ -162,11 +162,11 @@ function TabsInner({props, tabsRef: ref, collection}: TabsInnerProps) {
|
|
|
162
162
|
values
|
|
163
163
|
});
|
|
164
164
|
|
|
165
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
166
|
+
|
|
165
167
|
return (
|
|
166
168
|
<div
|
|
167
|
-
{...
|
|
168
|
-
{...focusProps}
|
|
169
|
-
{...renderProps}
|
|
169
|
+
{...mergeProps(DOMProps, renderProps, focusProps)}
|
|
170
170
|
ref={ref}
|
|
171
171
|
slot={props.slot || undefined}
|
|
172
172
|
data-focused={isFocused || undefined}
|
|
@@ -222,15 +222,13 @@ function TabListInner<T extends object>({props, forwardedRef: ref}: TabListInner
|
|
|
222
222
|
}
|
|
223
223
|
});
|
|
224
224
|
|
|
225
|
-
let DOMProps = filterDOMProps(props);
|
|
225
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
226
226
|
delete DOMProps.id;
|
|
227
227
|
|
|
228
228
|
return (
|
|
229
229
|
<div
|
|
230
|
-
{...DOMProps}
|
|
231
|
-
{...tabListProps}
|
|
230
|
+
{...mergeProps(DOMProps, renderProps, tabListProps)}
|
|
232
231
|
ref={objectRef}
|
|
233
|
-
{...renderProps}
|
|
234
232
|
data-orientation={orientation || undefined}>
|
|
235
233
|
<CollectionRoot collection={state.collection} persistedKeys={usePersistedKeys(state.selectionManager.focusedKey)} />
|
|
236
234
|
</div>
|
|
@@ -268,10 +266,13 @@ export const Tab = /*#__PURE__*/ createLeafComponent('item', (props: TabProps, f
|
|
|
268
266
|
});
|
|
269
267
|
|
|
270
268
|
let ElementType: React.ElementType = item.props.href ? 'a' : 'div';
|
|
269
|
+
let DOMProps = filterDOMProps(props as any, {global: true});
|
|
270
|
+
delete DOMProps.id;
|
|
271
|
+
delete DOMProps.onClick;
|
|
271
272
|
|
|
272
273
|
return (
|
|
273
274
|
<ElementType
|
|
274
|
-
{...mergeProps(tabProps, focusProps, hoverProps
|
|
275
|
+
{...mergeProps(DOMProps, renderProps, tabProps, focusProps, hoverProps)}
|
|
275
276
|
ref={ref}
|
|
276
277
|
data-selected={isSelected || undefined}
|
|
277
278
|
data-disabled={isDisabled || undefined}
|
|
@@ -290,6 +291,8 @@ export const Tab = /*#__PURE__*/ createLeafComponent('item', (props: TabProps, f
|
|
|
290
291
|
export const TabPanel = /*#__PURE__*/ createHideableComponent(function TabPanel(props: TabPanelProps, forwardedRef: ForwardedRef<HTMLDivElement>) {
|
|
291
292
|
const state = useContext(TabListStateContext)!;
|
|
292
293
|
let ref = useObjectRef<HTMLDivElement>(forwardedRef);
|
|
294
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
295
|
+
let {id, ...otherProps} = props;
|
|
293
296
|
let {tabPanelProps} = useTabPanel(props, state, ref);
|
|
294
297
|
let {focusProps, isFocused, isFocusVisible} = useFocusRing();
|
|
295
298
|
|
|
@@ -300,7 +303,8 @@ export const TabPanel = /*#__PURE__*/ createHideableComponent(function TabPanel(
|
|
|
300
303
|
values: {
|
|
301
304
|
isFocused,
|
|
302
305
|
isFocusVisible,
|
|
303
|
-
|
|
306
|
+
// @ts-ignore - compatibility with React < 19
|
|
307
|
+
isInert: inertValue(!isSelected),
|
|
304
308
|
state
|
|
305
309
|
}
|
|
306
310
|
});
|
|
@@ -309,7 +313,7 @@ export const TabPanel = /*#__PURE__*/ createHideableComponent(function TabPanel(
|
|
|
309
313
|
return null;
|
|
310
314
|
}
|
|
311
315
|
|
|
312
|
-
let DOMProps = filterDOMProps(
|
|
316
|
+
let DOMProps = filterDOMProps(otherProps, {global: true});
|
|
313
317
|
delete DOMProps.id;
|
|
314
318
|
|
|
315
319
|
let domProps = isSelected
|
|
@@ -323,7 +327,7 @@ export const TabPanel = /*#__PURE__*/ createHideableComponent(function TabPanel(
|
|
|
323
327
|
data-focused={isFocused || undefined}
|
|
324
328
|
data-focus-visible={isFocusVisible || undefined}
|
|
325
329
|
// @ts-ignore
|
|
326
|
-
inert={inertValue(!isSelected)}
|
|
330
|
+
inert={inertValue(!isSelected || props.inert)}
|
|
327
331
|
data-inert={!isSelected ? 'true' : undefined}>
|
|
328
332
|
<Provider
|
|
329
333
|
values={[
|
package/src/TagGroup.tsx
CHANGED
|
@@ -16,14 +16,14 @@ import {Collection, CollectionBuilder, createLeafComponent} from '@react-aria/co
|
|
|
16
16
|
import {CollectionProps, CollectionRendererContext, DefaultCollectionRenderer, ItemRenderProps, usePersistedKeys} from './Collection';
|
|
17
17
|
import {ContextValue, DOMProps, Provider, RenderProps, SlotProps, StyleRenderProps, useContextProps, useRenderProps, useSlot} from './utils';
|
|
18
18
|
import {filterDOMProps, mergeProps, useObjectRef} from '@react-aria/utils';
|
|
19
|
-
import {forwardRefType, HoverEvents, Key, LinkDOMProps} from '@react-types/shared';
|
|
19
|
+
import {forwardRefType, GlobalDOMAttributes, HoverEvents, Key, LinkDOMProps, PressEvents} from '@react-types/shared';
|
|
20
20
|
import {LabelContext} from './Label';
|
|
21
21
|
import {ListState, Node, useListState} from 'react-stately';
|
|
22
22
|
import {ListStateContext} from './ListBox';
|
|
23
23
|
import React, {createContext, ForwardedRef, forwardRef, JSX, ReactNode, useContext, useEffect, useRef} from 'react';
|
|
24
24
|
import {TextContext} from './Text';
|
|
25
25
|
|
|
26
|
-
export interface TagGroupProps extends Omit<AriaTagGroupProps<unknown>, 'children' | 'items' | 'label' | 'description' | 'errorMessage' | 'keyboardDelegate'>, DOMProps, SlotProps {}
|
|
26
|
+
export interface TagGroupProps extends Omit<AriaTagGroupProps<unknown>, 'children' | 'items' | 'label' | 'description' | 'errorMessage' | 'keyboardDelegate'>, DOMProps, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
|
|
27
27
|
|
|
28
28
|
export interface TagListRenderProps {
|
|
29
29
|
/**
|
|
@@ -47,7 +47,7 @@ export interface TagListRenderProps {
|
|
|
47
47
|
state: ListState<unknown>
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export interface TagListProps<T> extends Omit<CollectionProps<T>, 'disabledKeys'>, StyleRenderProps<TagListRenderProps> {
|
|
50
|
+
export interface TagListProps<T> extends Omit<CollectionProps<T>, 'disabledKeys'>, StyleRenderProps<TagListRenderProps>, GlobalDOMAttributes<HTMLDivElement> {
|
|
51
51
|
/** Provides content to display when there are no items in the tag list. */
|
|
52
52
|
renderEmptyState?: (props: TagListRenderProps) => ReactNode
|
|
53
53
|
}
|
|
@@ -85,7 +85,7 @@ function TagGroupInner({props, forwardedRef: ref, collection}: TagGroupInnerProp
|
|
|
85
85
|
});
|
|
86
86
|
|
|
87
87
|
// Prevent DOM props from going to two places.
|
|
88
|
-
let domProps = filterDOMProps(props);
|
|
88
|
+
let domProps = filterDOMProps(props, {global: true});
|
|
89
89
|
let domPropOverrides = Object.fromEntries(Object.entries(domProps).map(([k]) => [k, undefined]));
|
|
90
90
|
let {
|
|
91
91
|
gridProps,
|
|
@@ -141,9 +141,7 @@ interface TagListInnerProps<T> {
|
|
|
141
141
|
function TagListInner<T extends object>({props, forwardedRef}: TagListInnerProps<T>) {
|
|
142
142
|
let state = useContext(ListStateContext)!;
|
|
143
143
|
let {CollectionRoot} = useContext(CollectionRendererContext);
|
|
144
|
-
let [gridProps, ref] = useContextProps(
|
|
145
|
-
delete gridProps.items;
|
|
146
|
-
delete gridProps.renderEmptyState;
|
|
144
|
+
let [gridProps, ref] = useContextProps({}, forwardedRef, TagListContext);
|
|
147
145
|
|
|
148
146
|
let {focusProps, isFocused, isFocusVisible} = useFocusRing();
|
|
149
147
|
let renderValues = {
|
|
@@ -160,11 +158,11 @@ function TagListInner<T extends object>({props, forwardedRef}: TagListInnerProps
|
|
|
160
158
|
});
|
|
161
159
|
|
|
162
160
|
let persistedKeys = usePersistedKeys(state.selectionManager.focusedKey);
|
|
161
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
163
162
|
|
|
164
163
|
return (
|
|
165
164
|
<div
|
|
166
|
-
{...mergeProps(gridProps, focusProps)}
|
|
167
|
-
{...renderProps}
|
|
165
|
+
{...mergeProps(DOMProps, renderProps, gridProps, focusProps)}
|
|
168
166
|
ref={ref}
|
|
169
167
|
data-empty={state.collection.size === 0 || undefined}
|
|
170
168
|
data-focused={isFocused || undefined}
|
|
@@ -184,7 +182,7 @@ export interface TagRenderProps extends Omit<ItemRenderProps, 'allowsDragging' |
|
|
|
184
182
|
allowsRemoving: boolean
|
|
185
183
|
}
|
|
186
184
|
|
|
187
|
-
export interface TagProps extends RenderProps<TagRenderProps>, LinkDOMProps, HoverEvents {
|
|
185
|
+
export interface TagProps extends RenderProps<TagRenderProps>, LinkDOMProps, HoverEvents, PressEvents, Omit<GlobalDOMAttributes<HTMLDivElement>, 'onClick'> {
|
|
188
186
|
/** A unique id for the tag. */
|
|
189
187
|
id?: Key,
|
|
190
188
|
/**
|
|
@@ -232,11 +230,14 @@ export const Tag = /*#__PURE__*/ createLeafComponent('item', (props: TagProps, f
|
|
|
232
230
|
}
|
|
233
231
|
}, [item.textValue]);
|
|
234
232
|
|
|
233
|
+
let DOMProps = filterDOMProps(props as any, {global: true});
|
|
234
|
+
delete DOMProps.id;
|
|
235
|
+
delete DOMProps.onClick;
|
|
236
|
+
|
|
235
237
|
return (
|
|
236
238
|
<div
|
|
237
239
|
ref={ref}
|
|
238
|
-
{...renderProps}
|
|
239
|
-
{...mergeProps(filterDOMProps(props as any), rowProps, focusProps, hoverProps)}
|
|
240
|
+
{...mergeProps(DOMProps, renderProps, rowProps, focusProps, hoverProps)}
|
|
240
241
|
data-selected={states.isSelected || undefined}
|
|
241
242
|
data-disabled={states.isDisabled || undefined}
|
|
242
243
|
data-hovered={isHovered || undefined}
|
package/src/TextField.tsx
CHANGED
|
@@ -16,6 +16,8 @@ import {createHideableComponent} from '@react-aria/collections';
|
|
|
16
16
|
import {FieldErrorContext} from './FieldError';
|
|
17
17
|
import {filterDOMProps, mergeProps} from '@react-aria/utils';
|
|
18
18
|
import {FormContext} from './Form';
|
|
19
|
+
import {GlobalDOMAttributes} from '@react-types/shared';
|
|
20
|
+
import {GroupContext} from './Group';
|
|
19
21
|
import {InputContext} from './Input';
|
|
20
22
|
import {LabelContext} from './Label';
|
|
21
23
|
import React, {createContext, ForwardedRef, useCallback, useRef, useState} from 'react';
|
|
@@ -45,7 +47,7 @@ export interface TextFieldRenderProps {
|
|
|
45
47
|
isRequired: boolean
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
export interface TextFieldProps extends Omit<AriaTextFieldProps, 'label' | 'placeholder' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, Omit<DOMProps, 'style' | 'className' | 'children'>, SlotProps, RenderProps<TextFieldRenderProps> {
|
|
50
|
+
export interface TextFieldProps extends Omit<AriaTextFieldProps, 'label' | 'placeholder' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, Omit<DOMProps, 'style' | 'className' | 'children'>, SlotProps, RenderProps<TextFieldRenderProps>, GlobalDOMAttributes<HTMLDivElement> {
|
|
49
51
|
/** Whether the value is invalid. */
|
|
50
52
|
isInvalid?: boolean
|
|
51
53
|
}
|
|
@@ -92,7 +94,7 @@ export const TextField = /*#__PURE__*/ createHideableComponent(function TextFiel
|
|
|
92
94
|
defaultClassName: 'react-aria-TextField'
|
|
93
95
|
});
|
|
94
96
|
|
|
95
|
-
let DOMProps = filterDOMProps(props);
|
|
97
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
96
98
|
delete DOMProps.id;
|
|
97
99
|
|
|
98
100
|
return (
|
|
@@ -110,6 +112,7 @@ export const TextField = /*#__PURE__*/ createHideableComponent(function TextFiel
|
|
|
110
112
|
[LabelContext, {...labelProps, ref: labelRef}],
|
|
111
113
|
[InputContext, {...mergeProps(inputProps, inputContextProps), ref: inputOrTextAreaRef}],
|
|
112
114
|
[TextAreaContext, {...inputProps, ref: inputOrTextAreaRef}],
|
|
115
|
+
[GroupContext, {role: 'presentation', isInvalid: validation.isInvalid, isDisabled: props.isDisabled || false}],
|
|
113
116
|
[TextContext, {
|
|
114
117
|
slots: {
|
|
115
118
|
description: descriptionProps,
|