11import React from 'react' ;
22import useStyles , { StyleSheet } from '../../hooks/useStyles' ;
3- import Item , { ListItemProps } from './Item' ;
3+ import Item from './Item' ;
44import { styleSheetList } from './styles' ;
55
66export { Item } ;
@@ -16,6 +16,8 @@ export type ListProps = {
1616 middleAlign ?: boolean ;
1717 /** Renders an `<ol></ol>`. */
1818 ordered ?: boolean ;
19+ /** Render items in reverse order visually. */
20+ reversed ?: boolean ;
1921 /** Wrap horizontal list. */
2022 wrap ?: boolean ;
2123 /** Custom style sheet. */
@@ -28,6 +30,7 @@ export default function List({
2830 horizontal,
2931 middleAlign,
3032 ordered,
33+ reversed,
3134 wrap,
3235 styleSheet,
3336} : ListProps ) {
@@ -38,20 +41,28 @@ export default function List({
3841 < Tag
3942 className = { cx (
4043 styles . list ,
44+ reversed && styles . list_reversed ,
4145 ! horizontal && gutter && styles . list_gutter ,
46+ ! horizontal && gutter && reversed && styles . list_gutter_reversed ,
4247 horizontal && styles . list_horizontal ,
48+ horizontal && reversed && styles . list_reversed_horizontal ,
4349 horizontal && gutter && styles . list_gutter_horizontal ,
44- horizontal && wrap && styles . list_horizontal_wrap ,
50+ horizontal && gutter && reversed && styles . list_gutter_horizontal_reversed ,
51+ horizontal && wrap && styles . list_wrap ,
4552 middleAlign && styles . list_middleAlign ,
4653 ) }
4754 >
48- { React . Children . map ( children , ( child ) => {
55+ { React . Children . map ( children as React . ReactElement [ ] , ( child : React . ReactElement ) => {
4956 if ( ! child ) {
5057 return null ;
5158 }
5259
53- if ( horizontal ) {
54- return React . cloneElement ( child as React . ReactElement < ListItemProps > , { horizontal } ) ;
60+ if ( horizontal && ( child . props . compact || child . props . spacious || child . props . spacious ) ) {
61+ if ( child . type === Item ) {
62+ return React . cloneElement ( child , { horizontal } ) ;
63+ }
64+
65+ return < Item horizontal > { child . props . children } </ Item > ;
5566 }
5667
5768 return child ;
0 commit comments