-
+
Photos
@@ -43,10 +43,10 @@ function TestTree(props) {
Delete
-
+
-
+
Projects
@@ -59,9 +59,9 @@ function TestTree(props) {
Delete
-
+
-
+
Projects-1
@@ -74,9 +74,9 @@ function TestTree(props) {
Delete
-
+
-
+
Projects-1A
@@ -89,11 +89,11 @@ function TestTree(props) {
Delete
-
+
-
+
Projects-2
@@ -106,13 +106,13 @@ function TestTree(props) {
Delete
-
+
-
+
Projects-3
-
+
diff --git a/packages/@react-spectrum/tree/chromatic/TreeView.stories.tsx b/packages/@react-spectrum/tree/chromatic/TreeView.stories.tsx
index 20fc3b429c5..df3441545c9 100644
--- a/packages/@react-spectrum/tree/chromatic/TreeView.stories.tsx
+++ b/packages/@react-spectrum/tree/chromatic/TreeView.stories.tsx
@@ -24,7 +24,7 @@ import {Heading, Text} from '@react-spectrum/text';
import {IllustratedMessage} from '@react-spectrum/illustratedmessage';
import {Meta} from '@storybook/react';
import React from 'react';
-import {SpectrumTreeViewProps, TreeItemContent, TreeView, TreeViewItem} from '../src';
+import {SpectrumTreeViewProps, TreeView, TreeViewItem, TreeViewItemContent} from '../src';
let states = [
{selectionMode: ['multiple', 'single']},
@@ -78,7 +78,7 @@ const Template = ({combos}) => (
-
+
Photos
@@ -91,10 +91,10 @@ const Template = ({combos}) => (
Delete
-
+
-
+
Projects
@@ -107,9 +107,9 @@ const Template = ({combos}) => (
Delete
-
+
-
+
Projects-1
@@ -122,9 +122,9 @@ const Template = ({combos}) => (
Delete
-
+
-
+
Projects-1A
@@ -137,11 +137,11 @@ const Template = ({combos}) => (
Delete
-
+
-
+
Projects-2
@@ -154,13 +154,13 @@ const Template = ({combos}) => (
Delete
-
+
-
+
Projects-3
-
+
@@ -190,9 +190,9 @@ const EmptyTemplate = () =>
renderEmptyState={renderEmptyState}>
{() => (
-
+
dummy content
-
+
)}
diff --git a/packages/@react-spectrum/tree/docs/TreeView.mdx b/packages/@react-spectrum/tree/docs/TreeView.mdx
index 44d74459b20..273ea9f537f 100644
--- a/packages/@react-spectrum/tree/docs/TreeView.mdx
+++ b/packages/@react-spectrum/tree/docs/TreeView.mdx
@@ -26,7 +26,7 @@ import Image from '@spectrum-icons/workflow/Image';
import Edit from '@spectrum-icons/workflow/Edit';
import Delete from '@spectrum-icons/workflow/Delete';
import {Text} from '@react-spectrum/text';
-import {Collection, TreeView, TreeViewItem, TreeItemContent} from '@react-spectrum/tree';
+import {Collection, TreeView, TreeViewItem, TreeViewItemContent} from '@react-spectrum/tree';
import {JSX} from "react";
import {Key} from "@react-types/shared";
import {ActionGroup, Item} from '@react-spectrum/actiongroup';
@@ -54,57 +54,57 @@ keywords: [tree, grid]
```tsx example
-
+
Documents
-
+
-
+
Project A
-
+
-
+
Weekly Report
-
+
-
+
Document 1
-
+
-
+
Document 2
-
+
-
+
Photos
-
+
-
+
Image 1
-
+
-
+
Image 2
-
+
-
+
Image 3
-
+
@@ -146,10 +146,10 @@ const DynamicTreeItem = (props) => {
return (
<>
-
+
{props.name}
{props.icon}
-
+
{(item: any) => (
-
+
Bookmarks
-
+
-
+
Adobe
-
+
-
+
Google
-
+
-
+
New York Times
-
+
@@ -421,7 +421,7 @@ The `` component works with frameworks and client side routers lik
{(item: MyItem) => (
-
+
{item.name}
{item.icon}
alert(`Item: ${item.id}, Action: ${key}`)}>
@@ -434,7 +434,7 @@ The `` component works with frameworks and client side routers lik
Delete
-
+
)}
@@ -446,7 +446,7 @@ The `` component works with frameworks and client side routers lik
{(item: MyItem) => (
-
+
{item.name}
{item.icon}
alert(`Item: ${item.id}, Action: ${key}`)}>
@@ -459,7 +459,7 @@ The `` component works with frameworks and client side routers lik
Delete
-
+
)}
@@ -471,9 +471,9 @@ The `` component works with frameworks and client side routers lik
-### TreeItemContent props
+### TreeViewItemContent props
-
+
### TreeViewItem props
diff --git a/packages/@react-spectrum/tree/src/TreeView.tsx b/packages/@react-spectrum/tree/src/TreeView.tsx
index a42d0152a93..56ebaf2f718 100644
--- a/packages/@react-spectrum/tree/src/TreeView.tsx
+++ b/packages/@react-spectrum/tree/src/TreeView.tsx
@@ -11,7 +11,18 @@
*/
import {AriaTreeGridListProps} from '@react-aria/tree';
-import {ButtonContext, TreeItemContentProps, TreeItemContentRenderProps, TreeItemProps, TreeItemRenderProps, TreeRenderProps, UNSTABLE_Tree, UNSTABLE_TreeItem, UNSTABLE_TreeItemContent, useContextProps} from 'react-aria-components';
+import {
+ ButtonContext,
+ Tree,
+ TreeItem,
+ TreeItemContent,
+ TreeItemContentProps,
+ TreeItemContentRenderProps,
+ TreeItemProps,
+ TreeItemRenderProps,
+ TreeRenderProps,
+ useContextProps
+} from 'react-aria-components';
import {Checkbox} from '@react-spectrum/checkbox';
import ChevronLeftMedium from '@spectrum-icons/ui/ChevronLeftMedium';
import ChevronRightMedium from '@spectrum-icons/ui/ChevronRightMedium';
@@ -97,9 +108,9 @@ export const TreeView = React.forwardRef(function TreeView(pro
return (
- tree({isEmpty})} selectionBehavior={selectionBehavior as SelectionBehavior} ref={domRef}>
+ tree({isEmpty})} selectionBehavior={selectionBehavior as SelectionBehavior} ref={domRef}>
{props.children}
-
+
);
}) as (props: SpectrumTreeViewProps & {ref?: DOMRef}) => ReactElement;
@@ -223,7 +234,7 @@ export const TreeViewItem = (props: SpectrumTreeViewItemProps<
} = props;
return (
- treeRow({
...renderProps,
@@ -233,13 +244,13 @@ export const TreeViewItem = (props: SpectrumTreeViewItemProps<
};
-export const TreeItemContent = (props: Omit & {children: ReactNode}) => {
+export const TreeViewItemContent = (props: Omit & {children: ReactNode}) => {
let {
children
} = props;
return (
-
+
{({isExpanded, hasChildItems, level, selectionMode, selectionBehavior, isDisabled, isSelected, isFocusVisible}) => (
{selectionMode !== 'none' && selectionBehavior === 'toggle' && (
@@ -275,7 +286,7 @@ export const TreeItemContent = (props: Omit
&
)}
-
+
);
};
diff --git a/packages/@react-spectrum/tree/src/index.ts b/packages/@react-spectrum/tree/src/index.ts
index c6b9cae2689..b74185a6188 100644
--- a/packages/@react-spectrum/tree/src/index.ts
+++ b/packages/@react-spectrum/tree/src/index.ts
@@ -12,6 +12,6 @@
///
-export {TreeViewItem, TreeView, TreeItemContent} from './TreeView';
+export {TreeViewItem, TreeView, TreeViewItemContent} from './TreeView';
export {Collection} from 'react-aria-components';
export type {SpectrumTreeViewProps, SpectrumTreeViewItemProps} from './TreeView';
diff --git a/packages/@react-spectrum/tree/stories/TreeView.stories.tsx b/packages/@react-spectrum/tree/stories/TreeView.stories.tsx
index 2d68536f804..2c99783ec8e 100644
--- a/packages/@react-spectrum/tree/stories/TreeView.stories.tsx
+++ b/packages/@react-spectrum/tree/stories/TreeView.stories.tsx
@@ -22,7 +22,7 @@ import {Heading, Text} from '@react-spectrum/text';
import {IllustratedMessage} from '@react-spectrum/illustratedmessage';
import {Link} from '@react-spectrum/link';
import React from 'react';
-import {SpectrumTreeViewProps, TreeItemContent, TreeView, TreeViewItem} from '../src';
+import {SpectrumTreeViewProps, TreeView, TreeViewItem, TreeViewItemContent} from '../src';
export default {
title: 'TreeView',
@@ -48,7 +48,7 @@ export const TreeExampleStatic = (args: SpectrumTreeViewProps) => (
-
+
Photos
@@ -61,10 +61,10 @@ export const TreeExampleStatic = (args: SpectrumTreeViewProps) => (
Delete
-
+
-
+
Projects
@@ -77,9 +77,9 @@ export const TreeExampleStatic = (args: SpectrumTreeViewProps) => (
Delete
-
+
-
+
Projects-1
@@ -92,9 +92,9 @@ export const TreeExampleStatic = (args: SpectrumTreeViewProps) => (
Delete
-
+
-
+
Projects-1A
@@ -107,11 +107,11 @@ export const TreeExampleStatic = (args: SpectrumTreeViewProps) => (
Delete
-
+
-
+
Projects-2
@@ -124,10 +124,10 @@ export const TreeExampleStatic = (args: SpectrumTreeViewProps) => (
Delete
-
+
-
+
Projects-3
@@ -140,7 +140,7 @@ export const TreeExampleStatic = (args: SpectrumTreeViewProps) => (
Delete
-
+
@@ -209,7 +209,7 @@ const DynamicTreeItem = (props) => {
return (
<>
-
+
{name}
{icon}
@@ -222,7 +222,7 @@ const DynamicTreeItem = (props) => {
Delete
-
+
{(item: any) => (
(
-
+
Photos
@@ -46,10 +46,10 @@ let StaticTree = ({treeProps = {}, rowProps = {}}) => (
Delete
-
+
-
+
Projects
@@ -62,9 +62,9 @@ let StaticTree = ({treeProps = {}, rowProps = {}}) => (
Delete
-
+
-
+
Projects-1
@@ -77,9 +77,9 @@ let StaticTree = ({treeProps = {}, rowProps = {}}) => (
Delete
-
+
-
+
Projects-1A
@@ -92,11 +92,11 @@ let StaticTree = ({treeProps = {}, rowProps = {}}) => (
Delete
-
+
-
+
Projects-2
@@ -109,10 +109,10 @@ let StaticTree = ({treeProps = {}, rowProps = {}}) => (
Delete
-
+
-
+
Projects-3
@@ -125,7 +125,7 @@ let StaticTree = ({treeProps = {}, rowProps = {}}) => (
Delete
-
+
@@ -166,7 +166,7 @@ const DynamicTreeItem = (props) => {
return (
<>
-
+
{name}
-
@@ -178,7 +178,7 @@ const DynamicTreeItem = (props) => {
Delete
-
+
{(item: any) => (
{
let {getAllByRole} = render(
-
+
Test
-
+
);
@@ -488,9 +488,9 @@ describe('Tree', () => {
let {getAllByRole} = render(
-
+
Test
-
+
);
@@ -1238,9 +1238,9 @@ describe('Tree', () => {
let tree = render(
-
+
Test
-
+
);
@@ -1252,9 +1252,9 @@ describe('Tree', () => {
tree,
-
+
Test
-
+
);
@@ -1266,9 +1266,9 @@ describe('Tree', () => {
tree,
-
+
Test
-
+
);
diff --git a/packages/dev/docs/pages/assets/component-illustrations/Tree.svg b/packages/dev/docs/pages/assets/component-illustrations/Tree.svg
new file mode 100644
index 00000000000..11283245e7a
--- /dev/null
+++ b/packages/dev/docs/pages/assets/component-illustrations/Tree.svg
@@ -0,0 +1,182 @@
+
diff --git a/packages/dev/docs/pages/react-aria/components.mdx b/packages/dev/docs/pages/react-aria/components.mdx
index d16f953fa8b..7b9af915e0a 100644
--- a/packages/dev/docs/pages/react-aria/components.mdx
+++ b/packages/dev/docs/pages/react-aria/components.mdx
@@ -38,6 +38,7 @@ import Menu from '../assets/component-illustrations/Menu.svg';
import ListBox from '../assets/component-illustrations/ListBox.svg';
import ListView from '../assets/component-illustrations/ListView.svg';
import Table from '../assets/component-illustrations/Table.svg';
+import Tree from '../assets/component-illustrations/Tree.svg';
import Calendar from '../assets/component-illustrations/Calendar.svg';
import RangeCalendar from '../assets/component-illustrations/RangeCalendar.svg';
import DateField from '../assets/component-illustrations/DateField.svg';
@@ -162,6 +163,13 @@ order: 5
+
+
+
+
-
+
+
+
+
+
!prop.optional);
}
- let showSelector = props.some(prop => prop.selector);
+ let showSelector = !hideSelector && props.some(prop => prop.selector);
return (
diff --git a/packages/react-aria-components/docs/TableAnatomy.svg b/packages/react-aria-components/docs/TableAnatomy.svg
index 0a4fd051714..b760f97603b 100644
--- a/packages/react-aria-components/docs/TableAnatomy.svg
+++ b/packages/react-aria-components/docs/TableAnatomy.svg
@@ -1,4 +1,4 @@
-