Skip to content

Commit 1f99ba2

Browse files
reidbarberdannifyLFDanLu
authored
ListView CSS updates (#2517)
* initial ListView CSS updates * add stories * remove border radius from quiet ListItem * remove border radiu from focus ring * fix first and last items border radius * fix double border on adjacent selected items * fix to use emphasized styles by default * fix border styling * Update packages/@react-spectrum/list/src/listview.css Co-authored-by: Daniel Lu <[email protected]> Co-authored-by: Danni <[email protected]> Co-authored-by: Daniel Lu <[email protected]>
1 parent 499f54e commit 1f99ba2

File tree

4 files changed

+48
-26
lines changed

4 files changed

+48
-26
lines changed

packages/@react-spectrum/list/src/ListView.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ function ListView<T extends object>(props: ListViewProps<T>, ref: DOMRef<HTMLDiv
159159
listStyles,
160160
'react-spectrum-ListView',
161161
`react-spectrum-ListView--${density}`,
162+
'react-spectrum-ListView--emphasized',
162163
{
163164
'react-spectrum-ListView--quiet': isQuiet
164165
},
@@ -171,7 +172,7 @@ function ListView<T extends object>(props: ListViewProps<T>, ref: DOMRef<HTMLDiv
171172
{(type, item) => {
172173
if (type === 'item') {
173174
return (
174-
<ListViewItem item={item} onAction={onAction} />
175+
<ListViewItem item={item} onAction={onAction} isEmphasized />
175176
);
176177
} else if (type === 'loader') {
177178
return (

packages/@react-spectrum/list/src/ListViewItem.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ import {useLocale} from '@react-aria/i18n';
2727
export function ListViewItem(props) {
2828
let {
2929
item,
30-
onAction
30+
onAction,
31+
isEmphasized
3132
} = props;
3233
let cellNode = [...item.childNodes][0];
3334
let {state} = useContext(ListViewContext);
@@ -92,6 +93,7 @@ export function ListViewItem(props) {
9293
'focus-ring': isFocusVisible,
9394
'is-hovered': isHovered,
9495
'is-selected': isSelected,
96+
'is-previous-selected': state.selectionManager.isSelected(item.prevKey),
9597
'react-spectrum-ListViewItem--highlightSelection': state.selectionManager.selectionBehavior === 'replace' && (isSelected || state.selectionManager.isSelected(item.nextKey))
9698
}
9799
)
@@ -103,7 +105,7 @@ export function ListViewItem(props) {
103105
<Checkbox
104106
UNSAFE_className={listStyles['react-spectrum-ListViewItem-checkbox']}
105107
{...checkboxProps}
106-
isEmphasized />
108+
isEmphasized={isEmphasized} />
107109
)}
108110
<SlotProvider
109111
slots={{

packages/@react-spectrum/list/src/listview.css

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
--spectrum-listview-item-compact-padding-y: var(--spectrum-global-dimension-size-50);
44
--spectrum-listview-item-regular-padding-y: var(--spectrum-global-dimension-size-75);
55
--spectrum-listview-item-spacious-padding-y: var(--spectrum-global-dimension-size-100);
6+
--spectrum-listview-border-width: var(--spectrum-table-border-size, var(--spectrum-alias-border-size-thin));
7+
--spectrum-listview-border-radius: var(--spectrum-table-border-radius, var(--spectrum-alias-border-radius-regular));
8+
--spectrum-listview-item-start-end-border-radius: calc(var(--spectrum-listview-border-radius) - var(--spectrum-listview-border-width));
69
}
710

811
.react-spectrum-ListView {
912
box-sizing: border-box;
1013
border-color: var(--spectrum-table-border-color, var(--spectrum-alias-border-color-mid));
1114
border-style: solid;
1215
position: relative;
13-
border-width: var(--spectrum-table-border-size, var(--spectrum-alias-border-size-thin));
14-
border-radius: var(--spectrum-table-border-radius, var(--spectrum-alias-border-radius-regular));
16+
border-width: var(--spectrum-listview-border-width);
17+
border-radius: var(--spectrum-listview-border-radius);
1518
overflow: auto;
1619
vertical-align: var(--spectrum-table-cell-vertical-alignment);
1720
border-collapse: separate;
@@ -33,7 +36,8 @@
3336

3437
.react-spectrum-ListViewItem {
3538
display: grid; /* TODO: define grid areas */
36-
border-bottom: 1px solid var(--spectrum-tabel-cell-border-color, var(--spectrum-global-color-gray-300));
39+
border: 1px solid transparent;
40+
border-bottom-color: var(--spectrum-table-cell-border-color, var(--spectrum-global-color-gray-300));
3741
box-sizing: border-box;
3842
font-size: var(--spectrum-table-cell-text-size, var(--spectrum-alias-font-size-default));
3943
font-weight: var(--spectrum-table-cell-text-font-weight, var(--spectrum-global-font-weight-regular));
@@ -46,53 +50,62 @@
4650
outline: 0;
4751
min-height: var(--spectrum-global-dimension-size-500);
4852

49-
.react-spectrum-ListView--quiet & {
50-
border-bottom: 0;
53+
.react-spectrum-ListView--emphasized & {
54+
&.is-selected {
55+
background-color: var(--spectrum-table-row-background-color-selected);
56+
border-color: var(--spectrum-global-color-blue-500);
57+
&.is-hovered,
58+
&.is-active {
59+
background-color: var(--spectrum-table-row-background-color-selected);
60+
}
61+
62+
/* avoid double border for adjacent selected items */
63+
&.is-previous-selected {
64+
&:not(.is-focused) {
65+
border-top-color: transparent;
66+
}
67+
}
68+
}
5169
}
5270

5371
&.is-hovered,
5472
&.is-focused {
5573
background-color: var(--spectrum-table-row-background-color-hover);
56-
57-
.react-spectrum-ListView--quiet & {
58-
border-radius: var(--spectrum-table-border-radius, var(--spectrum-alias-border-radius-regular));
59-
}
6074
}
6175

6276
&:focus-ring {
6377
background-color: var(--spectrum-table-row-background-color-hover);
64-
box-shadow: inset 0 0 0 2px var(--spectrum-table-cell-border-color-key-focus);
65-
border-radius: var(--spectrum-table-cell-border-radius-key-focus);
78+
box-shadow: inset 0 0 0 1px var(--spectrum-table-cell-border-color-key-focus);
79+
border-color: var(--spectrum-global-color-blue-500);
6680
}
6781

6882
&.is-active {
6983
background-color: var(--spectrum-table-row-background-color-down);
7084
}
7185

7286
&.is-selected {
73-
background-color: var(--spectrum-table-row-background-color-selected);
87+
background-color: var(--spectrum-table-row-background-color-hover);
7488

7589
&.is-hovered,
7690
&.is-active {
77-
background-color: var(--spectrum-table-row-background-color-selected-hover);
91+
background-color: var(--spectrum-table-row-background-color-hover);
7892
}
7993
}
8094

81-
&.react-spectrum-ListViewItem--highlightSelection {
82-
border-bottom-color: var(--spectrum-global-color-blue-500);
83-
}
84-
8595
&.has-checkbox {
8696
/* have to eliminate vertical padding to allow proper vertical alignment */
8797
padding-top: 0px;
8898
padding-bottom: 0px;
8999
}
90-
}
91-
92-
.react-spectrum-ListViewItem-selected {
93-
background-color: var(--spectrum-table-row-background-color-selected, var(--spectrum-alias-highlight-selected));
94-
&.is-hovered {
95-
background-color: var(--spectrum-table-quiet-row-background-color-selected-hover);
100+
101+
/* give first and last items border-radius to match listview container */
102+
div:first-child > div[role="row"] > & {
103+
border-start-start-radius: var(--spectrum-listview-item-start-end-border-radius);
104+
border-start-end-radius: var(--spectrum-listview-item-start-end-border-radius);
105+
}
106+
div:last-child > div[role="row"] > & {
107+
border-end-start-radius: var(--spectrum-listview-item-start-end-border-radius);
108+
border-end-end-radius: var(--spectrum-listview-item-start-end-border-radius);
96109
}
97110
}
98111

packages/@react-spectrum/list/stories/ListView.stories.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,15 @@ storiesOf('ListView', module)
141141
.add('selection: single, checkbox, disabled', () => (
142142
<Example selectionMode="single" disabledKeys={['row1']} />
143143
))
144+
.add('selection: single, checkbox, isQuiet', () => (
145+
<Example selectionMode="single" isQuiet />
146+
))
144147
.add('selection: multiple, checkbox', () => (
145148
<Example selectionMode="multiple" />
146149
))
150+
.add('selection: multiple, checkbox, isQuiet', () => (
151+
<Example selectionMode="multiple" isQuiet />
152+
))
147153
.add('parent link example', () => (
148154
<Example2 selectionMode="multiple" />
149155
))

0 commit comments

Comments
 (0)