Skip to content

Commit 290514a

Browse files
committed
replace other instances of createLeaf/createBranch to use node classes
1 parent ac323e9 commit 290514a

File tree

9 files changed

+151
-24
lines changed

9 files changed

+151
-24
lines changed

packages/@react-aria/collections/test/CollectionBuilder.test.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
import {Collection, CollectionBuilder, createLeafComponent} from '../src';
1+
import {Collection, CollectionBuilder, CollectionNode, createLeafComponent} from '../src';
22
import React from 'react';
33
import {render} from '@testing-library/react';
44

5-
const Item = createLeafComponent('item', () => {
5+
class ItemNode extends CollectionNode {
6+
constructor(key) {
7+
super('item', key);
8+
}
9+
}
10+
11+
const Item = createLeafComponent(ItemNode, () => {
612
return <div />;
713
});
814

packages/react-aria-components/src/Breadcrumbs.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212
import {AriaBreadcrumbsProps, useBreadcrumbs} from 'react-aria';
13-
import {Collection, CollectionBuilder, createLeafComponent} from '@react-aria/collections';
13+
import {Collection, CollectionBuilder, CollectionNode, createLeafComponent} from '@react-aria/collections';
1414
import {CollectionProps, CollectionRendererContext} from './Collection';
1515
import {ContextValue, RenderProps, SlotProps, StyleProps, useContextProps, useRenderProps, useSlottedContext} from './utils';
1616
import {filterDOMProps} from '@react-aria/utils';
@@ -72,10 +72,17 @@ export interface BreadcrumbProps extends RenderProps<BreadcrumbRenderProps> {
7272
id?: Key
7373
}
7474

75+
// TODO: perhaps this should be reuse ItemNode, for now just have it separate
76+
class BreadcrumbNode extends CollectionNode<any> {
77+
constructor(key: Key) {
78+
super('item', key);
79+
}
80+
}
81+
7582
/**
7683
* A Breadcrumb represents an individual item in a `<Breadcrumbs>` list.
7784
*/
78-
export const Breadcrumb = /*#__PURE__*/ createLeafComponent('item', function Breadcrumb(props: BreadcrumbProps, ref: ForwardedRef<HTMLLIElement>, node: Node<unknown>) {
85+
export const Breadcrumb = /*#__PURE__*/ createLeafComponent(BreadcrumbNode, function Breadcrumb(props: BreadcrumbProps, ref: ForwardedRef<HTMLLIElement>, node: Node<unknown>) {
7986
// Recreating useBreadcrumbItem because we want to use composition instead of having the link builtin.
8087
let isCurrent = node.nextKey == null;
8188
let {isDisabled, onAction} = useSlottedContext(BreadcrumbsContext)!;

packages/react-aria-components/src/Collection.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ interface SectionContextValue {
9999

100100
export const SectionContext = createContext<SectionContextValue | null>(null);
101101

102+
// TODO: should I update this since it is deprecated?
102103
/** @deprecated */
103104
export const Section = /*#__PURE__*/ createBranchComponent('section', <T extends object>(props: SectionProps<T>, ref: ForwardedRef<HTMLElement>, section: Node<T>): JSX.Element => {
104105
let {name, render} = useContext(SectionContext)!;

packages/react-aria-components/src/GridList.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import {AriaGridListProps, DraggableItemResult, DragPreviewRenderer, DropIndicatorAria, DroppableCollectionResult, FocusScope, ListKeyboardDelegate, mergeProps, useCollator, useFocusRing, useGridList, useGridListItem, useGridListSelectionCheckbox, useHover, useLocale, useVisuallyHidden} from 'react-aria';
1313
import {ButtonContext} from './Button';
1414
import {CheckboxContext} from './RSPContexts';
15-
import {Collection, CollectionBuilder, createLeafComponent} from '@react-aria/collections';
15+
import {Collection, CollectionBuilder, CollectionNode, createLeafComponent} from '@react-aria/collections';
1616
import {CollectionProps, CollectionRendererContext, DefaultCollectionRenderer, ItemRenderProps} from './Collection';
1717
import {ContextValue, DEFAULT_SLOT, Provider, RenderProps, ScrollableProps, SlotProps, StyleProps, StyleRenderProps, useContextProps, useRenderProps} from './utils';
1818
import {DragAndDropContext, DropIndicatorContext, DropIndicatorProps, useDndPersistedKeys, useRenderDropIndicator} from './DragAndDrop';
@@ -280,10 +280,16 @@ export interface GridListItemProps<T = object> extends RenderProps<GridListItemR
280280
onAction?: () => void
281281
}
282282

283+
class GridListNode extends CollectionNode<any> {
284+
constructor(key: Key) {
285+
super('item', key);
286+
}
287+
}
288+
283289
/**
284290
* A GridListItem represents an individual item in a GridList.
285291
*/
286-
export const GridListItem = /*#__PURE__*/ createLeafComponent('item', function GridListItem<T extends object>(props: GridListItemProps<T>, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<T>) {
292+
export const GridListItem = /*#__PURE__*/ createLeafComponent(GridListNode, function GridListItem<T extends object>(props: GridListItemProps<T>, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<T>) {
287293
let state = useContext(ListStateContext)!;
288294
let {dragAndDropHooks, dragState, dropState} = useContext(DragAndDropContext);
289295
let ref = useObjectRef<HTMLDivElement>(forwardedRef);
@@ -511,7 +517,14 @@ export interface GridListLoadingSentinelProps extends Omit<LoadMoreSentinelProps
511517
isLoading?: boolean
512518
}
513519

514-
export const UNSTABLE_GridListLoadingSentinel = createLeafComponent('loader', function GridListLoadingIndicator<T extends object>(props: GridListLoadingSentinelProps, ref: ForwardedRef<HTMLDivElement>, item: Node<T>) {
520+
// TODO: can probably reuse ListBox's loaderNode
521+
class GridLoaderNode extends CollectionNode<any> {
522+
constructor(key: Key) {
523+
super('loader', key);
524+
}
525+
}
526+
527+
export const UNSTABLE_GridListLoadingSentinel = createLeafComponent(GridLoaderNode, function GridListLoadingIndicator<T extends object>(props: GridListLoadingSentinelProps, ref: ForwardedRef<HTMLDivElement>, item: Node<T>) {
515528
let state = useContext(ListStateContext)!;
516529
let {isVirtualized} = useContext(CollectionRendererContext);
517530
let {isLoading, onLoadMore, scrollOffset, ...otherProps} = props;

packages/react-aria-components/src/Menu.tsx

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212

1313
import {AriaMenuProps, FocusScope, mergeProps, useHover, useMenu, useMenuItem, useMenuSection, useMenuTrigger, useSubmenuTrigger} from 'react-aria';
14-
import {BaseCollection, Collection, CollectionBuilder, createBranchComponent, createLeafComponent} from '@react-aria/collections';
14+
import {BaseCollection, Collection, CollectionBuilder, CollectionNode, createBranchComponent, createLeafComponent} from '@react-aria/collections';
1515
import {MenuTriggerProps as BaseMenuTriggerProps, Collection as ICollection, Node, RootMenuTriggerState, TreeState, useMenuTriggerState, useSubmenuTriggerState, useTreeState} from 'react-stately';
1616
import {CollectionProps, CollectionRendererContext, ItemRenderProps, SectionContext, SectionProps, usePersistedKeys} from './Collection';
1717
import {ContextValue, DEFAULT_SLOT, Provider, RenderProps, ScrollableProps, SlotProps, StyleRenderProps, useContextProps, useRenderProps, useSlot, useSlottedContext} from './utils';
@@ -107,12 +107,19 @@ export interface SubmenuTriggerProps {
107107

108108
const SubmenuTriggerContext = createContext<{parentMenuRef: RefObject<HTMLElement | null>, shouldUseVirtualFocus?: boolean} | null>(null);
109109

110+
// todo: what logic should this have?
111+
class SubMenuTriggerNode extends CollectionNode<any> {
112+
constructor(key: Key) {
113+
super('submenutrigger', key);
114+
}
115+
}
116+
110117
/**
111118
* A submenu trigger is used to wrap a submenu's trigger item and the submenu itself.
112119
*
113120
* @version alpha
114121
*/
115-
export const SubmenuTrigger = /*#__PURE__*/ createBranchComponent('submenutrigger', (props: SubmenuTriggerProps, ref: ForwardedRef<HTMLDivElement>, item) => {
122+
export const SubmenuTrigger = /*#__PURE__*/ createBranchComponent(SubMenuTriggerNode, (props: SubmenuTriggerProps, ref: ForwardedRef<HTMLDivElement>, item) => {
116123
let {CollectionBranch} = useContext(CollectionRendererContext);
117124
let state = useContext(MenuStateContext)!;
118125
let rootMenuTriggerState = useContext(RootMenuTriggerStateContext)!;
@@ -318,10 +325,17 @@ function MenuSectionInner<T extends object>(props: MenuSectionProps<T>, ref: For
318325
);
319326
}
320327

328+
// todo can probably reuse the SectionNode from ListBox?
329+
class SectionNode extends CollectionNode<any> {
330+
constructor(key: Key) {
331+
super('section', key);
332+
}
333+
}
334+
321335
/**
322336
* A MenuSection represents a section within a Menu.
323337
*/
324-
export const MenuSection = /*#__PURE__*/ createBranchComponent('section', MenuSectionInner);
338+
export const MenuSection = /*#__PURE__*/ createBranchComponent(SectionNode, MenuSectionInner);
325339

326340
export interface MenuItemRenderProps extends ItemRenderProps {
327341
/**
@@ -355,10 +369,17 @@ export interface MenuItemProps<T = object> extends RenderProps<MenuItemRenderPro
355369

356370
const MenuItemContext = createContext<ContextValue<MenuItemProps, HTMLDivElement>>(null);
357371

372+
// TODO maybe this needs to a separate node type?
373+
class MenuItemNode extends CollectionNode<any> {
374+
constructor(key: Key) {
375+
super('item', key);
376+
}
377+
}
378+
358379
/**
359380
* A MenuItem represents an individual action in a Menu.
360381
*/
361-
export const MenuItem = /*#__PURE__*/ createLeafComponent('item', function MenuItem<T extends object>(props: MenuItemProps<T>, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<T>) {
382+
export const MenuItem = /*#__PURE__*/ createLeafComponent(MenuItemNode, function MenuItem<T extends object>(props: MenuItemProps<T>, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<T>) {
362383
[props, forwardedRef] = useContextProps(props, forwardedRef, MenuItemContext);
363384
let id = useSlottedContext(MenuItemContext)?.id as string;
364385
let state = useContext(MenuStateContext)!;

packages/react-aria-components/src/Table.tsx

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -549,11 +549,19 @@ export interface TableHeaderProps<T> extends StyleRenderProps<TableHeaderRenderP
549549
dependencies?: ReadonlyArray<any>
550550
}
551551

552+
// TODO: will this have any logic? Maybe for ones like this where we aren't adding the filter function just yet we could
553+
// keep it as returning the string instead of the class in createBranchComponent
554+
class TableHeaderNode extends CollectionNode<any> {
555+
constructor(key: Key) {
556+
super('tableheader', key);
557+
}
558+
}
559+
552560
/**
553561
* A header within a `<Table>`, containing the table columns.
554562
*/
555563
export const TableHeader = /*#__PURE__*/ createBranchComponent(
556-
'tableheader',
564+
TableHeaderNode,
557565
<T extends object>(props: TableHeaderProps<T>, ref: ForwardedRef<HTMLTableSectionElement>) => {
558566
let collection = useContext(TableStateContext)!.collection as TableCollection<unknown>;
559567
let headerRows = useCachedChildren({
@@ -686,10 +694,18 @@ export interface ColumnProps extends RenderProps<ColumnRenderProps> {
686694
maxWidth?: ColumnStaticSize | null
687695
}
688696

697+
698+
// TODO does this need to be separate or should ItemNode be generic enough that it can take an arbitrary "type"?
699+
class ColumnNode extends CollectionNode<any> {
700+
constructor(key: Key) {
701+
super('column', key);
702+
}
703+
}
704+
689705
/**
690706
* A column within a `<Table>`.
691707
*/
692-
export const Column = /*#__PURE__*/ createLeafComponent('column', (props: ColumnProps, forwardedRef: ForwardedRef<HTMLTableCellElement>, column: GridNode<unknown>) => {
708+
export const Column = /*#__PURE__*/ createLeafComponent(ColumnNode, (props: ColumnProps, forwardedRef: ForwardedRef<HTMLTableCellElement>, column: GridNode<unknown>) => {
693709
let ref = useObjectRef<HTMLTableHeaderCellElement>(forwardedRef);
694710
let state = useContext(TableStateContext)!;
695711
let {isVirtualized} = useContext(CollectionRendererContext);
@@ -919,10 +935,18 @@ export interface TableBodyProps<T> extends Omit<CollectionProps<T>, 'disabledKey
919935
/** Provides content to display when there are no rows in the table. */
920936
renderEmptyState?: (props: TableBodyRenderProps) => ReactNode
921937
}
938+
939+
// TODO: do we need this
940+
class TableBodyNode extends CollectionNode<any> {
941+
constructor(key: Key) {
942+
super('tablebody', key);
943+
}
944+
}
945+
922946
/**
923947
* The body of a `<Table>`, containing the table rows.
924948
*/
925-
export const TableBody = /*#__PURE__*/ createBranchComponent('tablebody', <T extends object>(props: TableBodyProps<T>, ref: ForwardedRef<HTMLTableSectionElement>) => {
949+
export const TableBody = /*#__PURE__*/ createBranchComponent(TableBodyNode, <T extends object>(props: TableBodyProps<T>, ref: ForwardedRef<HTMLTableSectionElement>) => {
926950
let state = useContext(TableStateContext)!;
927951
let {isVirtualized} = useContext(CollectionRendererContext);
928952
let collection = state.collection;
@@ -1020,11 +1044,18 @@ export interface RowProps<T> extends StyleRenderProps<RowRenderProps>, LinkDOMPr
10201044
id?: Key
10211045
}
10221046

1047+
// TODO: maybe can reuse the item node, but probably will have different filter logic here so splitting out for now
1048+
class TableRowNode extends CollectionNode<any> {
1049+
constructor(key: Key) {
1050+
super('item', key);
1051+
}
1052+
}
1053+
10231054
/**
10241055
* A row within a `<Table>`.
10251056
*/
10261057
export const Row = /*#__PURE__*/ createBranchComponent(
1027-
'item',
1058+
TableRowNode,
10281059
<T extends object>(props: RowProps<T>, forwardedRef: ForwardedRef<HTMLTableRowElement>, item: GridNode<T>) => {
10291060
let ref = useObjectRef<HTMLTableRowElement>(forwardedRef);
10301061
let state = useContext(TableStateContext)!;
@@ -1202,10 +1233,17 @@ export interface CellProps extends RenderProps<CellRenderProps> {
12021233
colSpan?: number
12031234
}
12041235

1236+
// TODO: Also perhaps can just be ItemNode?
1237+
class CellNode extends CollectionNode<any> {
1238+
constructor(key: Key) {
1239+
super('cell', key);
1240+
}
1241+
}
1242+
12051243
/**
12061244
* A cell within a table row.
12071245
*/
1208-
export const Cell = /*#__PURE__*/ createLeafComponent('cell', (props: CellProps, forwardedRef: ForwardedRef<HTMLTableCellElement>, cell: GridNode<unknown>) => {
1246+
export const Cell = /*#__PURE__*/ createLeafComponent(CellNode, (props: CellProps, forwardedRef: ForwardedRef<HTMLTableCellElement>, cell: GridNode<unknown>) => {
12091247
let ref = useObjectRef<HTMLTableCellElement>(forwardedRef);
12101248
let state = useContext(TableStateContext)!;
12111249
let {dragState} = useContext(DragAndDropContext);
@@ -1359,7 +1397,14 @@ export interface TableLoadingSentinelProps extends Omit<LoadMoreSentinelProps, '
13591397
isLoading?: boolean
13601398
}
13611399

1362-
export const UNSTABLE_TableLoadingSentinel = createLeafComponent('loader', function TableLoadingIndicator<T extends object>(props: TableLoadingSentinelProps, ref: ForwardedRef<HTMLTableRowElement>, item: Node<T>) {
1400+
// TODO: can reuse this most likely
1401+
class LoaderNode extends CollectionNode<any> {
1402+
constructor(key: Key) {
1403+
super('loader', key);
1404+
}
1405+
}
1406+
1407+
export const UNSTABLE_TableLoadingSentinel = createLeafComponent(LoaderNode, function TableLoadingIndicator<T extends object>(props: TableLoadingSentinelProps, ref: ForwardedRef<HTMLTableRowElement>, item: Node<T>) {
13631408
let state = useContext(TableStateContext)!;
13641409
let {isVirtualized} = useContext(CollectionRendererContext);
13651410
let {isLoading, onLoadMore, scrollOffset, ...otherProps} = props;

packages/react-aria-components/src/Tabs.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import {AriaLabelingProps, forwardRefType, HoverEvents, Key, LinkDOMProps, RefObject} from '@react-types/shared';
1414
import {AriaTabListProps, AriaTabPanelProps, mergeProps, Orientation, useFocusRing, useHover, useTab, useTabList, useTabPanel} from 'react-aria';
15-
import {Collection, CollectionBuilder, createHideableComponent, createLeafComponent} from '@react-aria/collections';
15+
import {Collection, CollectionBuilder, CollectionNode, createHideableComponent, createLeafComponent} from '@react-aria/collections';
1616
import {CollectionProps, CollectionRendererContext, DefaultCollectionRenderer, usePersistedKeys} from './Collection';
1717
import {ContextValue, Provider, RenderProps, SlotProps, StyleRenderProps, useContextProps, useRenderProps, useSlottedContext} from './utils';
1818
import {filterDOMProps, inertValue, useObjectRef} from '@react-aria/utils';
@@ -237,10 +237,17 @@ function TabListInner<T extends object>({props, forwardedRef: ref}: TabListInner
237237
);
238238
}
239239

240+
// TODO probably can reuse ItemNode
241+
class TabItemNode extends CollectionNode<any> {
242+
constructor(key: Key) {
243+
super('item', key);
244+
}
245+
}
246+
240247
/**
241248
* A Tab provides a title for an individual item within a TabList.
242249
*/
243-
export const Tab = /*#__PURE__*/ createLeafComponent('item', (props: TabProps, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<unknown>) => {
250+
export const Tab = /*#__PURE__*/ createLeafComponent(TabItemNode, (props: TabProps, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<unknown>) => {
244251
let state = useContext(TabListStateContext)!;
245252
let ref = useObjectRef<any>(forwardedRef);
246253
let {tabProps, isSelected, isDisabled, isPressed} = useTab({key: item.key, ...props}, state, ref);

packages/react-aria-components/src/TagGroup.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import {AriaTagGroupProps, useFocusRing, useHover, useTag, useTagGroup} from 'react-aria';
1414
import {ButtonContext} from './Button';
15-
import {Collection, CollectionBuilder, createLeafComponent} from '@react-aria/collections';
15+
import {Collection, CollectionBuilder, CollectionNode, createLeafComponent} from '@react-aria/collections';
1616
import {CollectionProps, CollectionRendererContext, DefaultCollectionRenderer, ItemRenderProps, usePersistedKeys} from './Collection';
1717
import {ContextValue, DOMProps, Provider, RenderProps, SlotProps, StyleRenderProps, useContextProps, useRenderProps, useSlot} from './utils';
1818
import {filterDOMProps, mergeProps, useObjectRef} from '@react-aria/utils';
@@ -196,10 +196,17 @@ export interface TagProps extends RenderProps<TagRenderProps>, LinkDOMProps, Hov
196196
isDisabled?: boolean
197197
}
198198

199+
// TODO probably can reuse item node
200+
class TagItemNode extends CollectionNode<any> {
201+
constructor(key: Key) {
202+
super('item', key);
203+
}
204+
}
205+
199206
/**
200207
* A Tag is an individual item within a TagList.
201208
*/
202-
export const Tag = /*#__PURE__*/ createLeafComponent('item', (props: TagProps, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<unknown>) => {
209+
export const Tag = /*#__PURE__*/ createLeafComponent(TagItemNode, (props: TagProps, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<unknown>) => {
203210
let state = useContext(ListStateContext)!;
204211
let ref = useObjectRef<HTMLDivElement>(forwardedRef);
205212
let {focusProps, isFocusVisible} = useFocusRing({within: false});

packages/react-aria-components/src/Tree.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,13 @@ export interface TreeItemContentRenderProps extends TreeItemRenderProps {}
449449
// need to do a bunch of check to figure out what is the Content and what are the actual collection elements (aka child rows) of the TreeItem
450450
export interface TreeItemContentProps extends Pick<RenderProps<TreeItemContentRenderProps>, 'children'> {}
451451

452-
export const TreeItemContent = /*#__PURE__*/ createLeafComponent('content', function TreeItemContent(props: TreeItemContentProps) {
452+
class ContentNode extends CollectionNode<any> {
453+
constructor(key: Key) {
454+
super('content', key);
455+
}
456+
}
457+
458+
export const TreeItemContent = /*#__PURE__*/ createLeafComponent(ContentNode, function TreeItemContent(props: TreeItemContentProps) {
453459
let values = useContext(TreeItemContentContext)!;
454460
let renderProps = useRenderProps({
455461
children: props.children,
@@ -484,10 +490,17 @@ export interface TreeItemProps<T = object> extends StyleRenderProps<TreeItemRend
484490
onAction?: () => void
485491
}
486492

493+
// TODO: also might be able to reuse the ItemNode
494+
class TreeItemNode extends CollectionNode<any> {
495+
constructor(key: Key) {
496+
super('item', key);
497+
}
498+
}
499+
487500
/**
488501
* A TreeItem represents an individual item in a Tree.
489502
*/
490-
export const TreeItem = /*#__PURE__*/ createBranchComponent('item', <T extends object>(props: TreeItemProps<T>, ref: ForwardedRef<HTMLDivElement>, item: Node<T>) => {
503+
export const TreeItem = /*#__PURE__*/ createBranchComponent(TreeItemNode, <T extends object>(props: TreeItemProps<T>, ref: ForwardedRef<HTMLDivElement>, item: Node<T>) => {
491504
let state = useContext(TreeStateContext)!;
492505
ref = useObjectRef<HTMLDivElement>(ref);
493506
let {dragAndDropHooks, dragState, dropState} = useContext(DragAndDropContext)!;
@@ -708,7 +721,14 @@ export interface UNSTABLE_TreeLoadingIndicatorRenderProps {
708721

709722
export interface TreeLoaderProps extends RenderProps<UNSTABLE_TreeLoadingIndicatorRenderProps>, StyleRenderProps<UNSTABLE_TreeLoadingIndicatorRenderProps> {}
710723

711-
export const UNSTABLE_TreeLoadingIndicator = createLeafComponent('loader', function TreeLoader<T extends object>(props: TreeLoaderProps, ref: ForwardedRef<HTMLDivElement>, item: Node<T>) {
724+
// TODO: can reuse this most likely
725+
class LoaderNode extends CollectionNode<any> {
726+
constructor(key: Key) {
727+
super('loader', key);
728+
}
729+
}
730+
731+
export const UNSTABLE_TreeLoadingIndicator = createLeafComponent(LoaderNode, function TreeLoader<T extends object>(props: TreeLoaderProps, ref: ForwardedRef<HTMLDivElement>, item: Node<T>) {
712732
let state = useContext(TreeStateContext)!;
713733
// This loader row is is non-interactable, but we want the same aria props calculated as a typical row
714734
// @ts-ignore

0 commit comments

Comments
 (0)