Skip to content

Commit 4a4b92d

Browse files
authored
feat(tabs): new light/dark mode colors (#1843)
1 parent ee0e4f5 commit 4a4b92d

File tree

8 files changed

+51
-44
lines changed

8 files changed

+51
-44
lines changed

packages/tabs/src/elements/Tab.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export const Tab = React.forwardRef<HTMLDivElement, ITabProps>(
2727
role="tab"
2828
aria-disabled={disabled}
2929
ref={ref}
30-
isVertical={tabsPropGetters?.isVertical}
30+
$isVertical={tabsPropGetters?.isVertical}
3131
{...otherProps}
3232
/>
3333
);
@@ -39,8 +39,8 @@ export const Tab = React.forwardRef<HTMLDivElement, ITabProps>(
3939

4040
return (
4141
<StyledTab
42-
isSelected={item === tabsPropGetters.selectedValue}
43-
isVertical={tabsPropGetters.isVertical}
42+
$isSelected={item === tabsPropGetters.selectedValue}
43+
$isVertical={tabsPropGetters.isVertical}
4444
{...tabProps}
4545
{...otherProps}
4646
ref={mergeRefs([tabRef, ref])}

packages/tabs/src/elements/TabList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export const TabList = React.forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivEl
2727

2828
return (
2929
<StyledTabList
30-
isVertical={tabsPropGetters.isVertical}
30+
$isVertical={tabsPropGetters.isVertical}
3131
{...tabListProps}
3232
{...props}
3333
ref={ref}

packages/tabs/src/elements/TabPanel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export const TabPanel = React.forwardRef<HTMLDivElement, ITabPanelProps>(
3131
return (
3232
<StyledTabPanel
3333
aria-hidden={tabsPropGetters.selectedValue !== item}
34-
isVertical={tabsPropGetters.isVertical}
34+
$isVertical={tabsPropGetters.isVertical}
3535
{...tabPanelProps}
3636
{...otherProps}
3737
ref={ref}

packages/tabs/src/elements/Tabs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export const TabsComponent = forwardRef<HTMLDivElement, ITabsProps>(
5252

5353
return (
5454
<TabsContext.Provider value={contextValue}>
55-
<StyledTabs isVertical={isVertical} {...otherProps} ref={ref}>
55+
<StyledTabs $isVertical={isVertical} {...otherProps} ref={ref}>
5656
{children}
5757
</StyledTabs>
5858
</TabsContext.Provider>

packages/tabs/src/styled/StyledTab.ts

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,38 @@
88
import styled, { DefaultTheme, css, ThemeProps } from 'styled-components';
99
import {
1010
DEFAULT_THEME,
11-
getColorV8,
1211
focusStyles,
13-
retrieveComponentStyles
12+
retrieveComponentStyles,
13+
getColor
1414
} from '@zendeskgarden/react-theming';
1515
import { stripUnit } from 'polished';
1616

1717
const COMPONENT_ID = 'tabs.tab';
1818

1919
interface IStyledTabProps {
20-
isSelected?: boolean;
21-
isVertical?: boolean;
20+
$isSelected?: boolean;
21+
$isVertical?: boolean;
2222
}
2323

2424
const colorStyles = ({
2525
theme,
26-
isSelected,
27-
isVertical
26+
$isSelected,
27+
$isVertical
2828
}: IStyledTabProps & ThemeProps<DefaultTheme>) => {
29-
const borderColor = isSelected ? 'currentcolor' : 'transparent';
30-
const selectedColor = getColorV8('primaryHue', 600, theme);
29+
const borderColor = $isSelected
30+
? getColor({ theme, variable: 'border.primaryEmphasis' })
31+
: 'transparent';
32+
const borderBlockEndColor = $isVertical ? undefined : borderColor;
33+
const borderInlineColor = $isVertical ? borderColor : undefined;
34+
35+
const selectedColor = getColor({ theme, variable: 'foreground.primary' });
36+
const foregroundColor = $isSelected ? selectedColor : 'inherit';
37+
const disabledColor = getColor({ theme, variable: 'foreground.disabled' });
3138

3239
return css`
33-
border-bottom-color: ${isVertical ? undefined : borderColor};
34-
border-${theme.rtl ? 'right' : 'left'}-color: ${isVertical ? borderColor : undefined};
35-
color: ${isSelected ? selectedColor : 'inherit'};
40+
border-bottom-color: ${borderBlockEndColor};
41+
border-${theme.rtl ? 'right' : 'left'}-color: ${borderInlineColor};
42+
color: ${foregroundColor};
3643
3744
&:hover {
3845
color: ${selectedColor};
@@ -54,18 +61,18 @@ const colorStyles = ({
5461
5562
&[aria-disabled='true'] {
5663
border-color: transparent;
57-
color: ${props => getColorV8('neutralHue', 400, props.theme)};
64+
color: ${disabledColor};
5865
}
5966
`;
6067
};
6168

62-
const sizeStyles = ({ theme, isVertical }: IStyledTabProps & ThemeProps<DefaultTheme>) => {
69+
const sizeStyles = ({ theme, $isVertical }: IStyledTabProps & ThemeProps<DefaultTheme>) => {
6370
const borderWidth = theme.borderWidths.md;
6471
const focusHeight = `${theme.space.base * 5}px`;
6572
let marginBottom;
6673
let padding;
6774

68-
if (isVertical) {
75+
if ($isVertical) {
6976
marginBottom = `${theme.space.base * 5}px`;
7077
padding = `${theme.space.base}px ${theme.space.base * 2}px`;
7178
} else {
@@ -104,17 +111,17 @@ export const StyledTab = styled.div.attrs({
104111
'data-garden-id': COMPONENT_ID,
105112
'data-garden-version': PACKAGE_VERSION
106113
})<IStyledTabProps>`
107-
display: ${props => (props.isVertical ? 'block' : 'inline-block')};
114+
display: ${props => (props.$isVertical ? 'block' : 'inline-block')};
108115
position: relative;
109116
transition: color 0.25s ease-in-out;
110-
border-bottom: ${props => (props.isVertical ? undefined : props.theme.borderStyles.solid)};
111-
border-${props => (props.theme.rtl ? 'right' : 'left')}: ${props => (props.isVertical ? props.theme.borderStyles.solid : undefined)};
117+
border-bottom: ${props => (props.$isVertical ? undefined : props.theme.borderStyles.solid)};
118+
border-${props => (props.theme.rtl ? 'right' : 'left')}: ${props => (props.$isVertical ? props.theme.borderStyles.solid : undefined)};
112119
cursor: pointer;
113120
overflow: hidden; /* [1] */
114121
vertical-align: top; /* [2] */
115122
user-select: none;
116123
text-align: ${props => {
117-
if (props.isVertical) {
124+
if (props.$isVertical) {
118125
return props.theme.rtl ? 'right' : 'left';
119126
}
120127
@@ -138,9 +145,9 @@ export const StyledTab = styled.div.attrs({
138145
139146
&:focus-visible::before {
140147
position: absolute;
141-
top: ${props => props.theme.space.base * (props.isVertical ? 1 : 2.5)}px;
142-
right: ${props => props.theme.space.base * (props.isVertical ? 1 : 6)}px;
143-
left: ${props => props.theme.space.base * (props.isVertical ? 1 : 6)}px;
148+
top: ${props => props.theme.space.base * (props.$isVertical ? 1 : 2.5)}px;
149+
right: ${props => props.theme.space.base * (props.$isVertical ? 1 : 6)}px;
150+
left: ${props => props.theme.space.base * (props.$isVertical ? 1 : 6)}px;
144151
border-radius: ${props => props.theme.borderRadii.md};
145152
pointer-events: none;
146153
}

packages/tabs/src/styled/StyledTabList.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,20 @@
88
import styled, { DefaultTheme, ThemeProps, css } from 'styled-components';
99
import {
1010
retrieveComponentStyles,
11-
getColorV8,
1211
DEFAULT_THEME,
13-
getLineHeight
12+
getLineHeight,
13+
getColor
1414
} from '@zendeskgarden/react-theming';
1515

1616
const COMPONENT_ID = 'tabs.tablist';
1717

1818
interface IStyledTabListProps {
19-
isVertical?: boolean;
19+
$isVertical?: boolean;
2020
}
2121

2222
const colorStyles = ({ theme }: ThemeProps<DefaultTheme>) => {
23-
const borderColor = getColorV8('neutralHue', 300, theme);
24-
const foregroundColor = getColorV8('neutralHue', 600, theme);
23+
const borderColor = getColor({ theme, variable: 'border.default' });
24+
const foregroundColor = getColor({ theme, variable: 'foreground.default' });
2525

2626
return css`
2727
border-bottom-color: ${borderColor};
@@ -32,9 +32,9 @@ const colorStyles = ({ theme }: ThemeProps<DefaultTheme>) => {
3232
/*
3333
* 1. List element reset.
3434
*/
35-
const sizeStyles = ({ theme, isVertical }: IStyledTabListProps & ThemeProps<DefaultTheme>) => {
36-
const marginBottom = isVertical ? 0 : `${theme.space.base * 5}px`;
37-
const borderBottom = isVertical ? undefined : theme.borderWidths.sm;
35+
const sizeStyles = ({ theme, $isVertical }: IStyledTabListProps & ThemeProps<DefaultTheme>) => {
36+
const marginBottom = $isVertical ? 0 : `${theme.space.base * 5}px`;
37+
const borderBottom = $isVertical ? undefined : theme.borderWidths.sm;
3838
const fontSize = theme.fontSizes.md;
3939
const lineHeight = getLineHeight(theme.space.base * 5, fontSize);
4040

@@ -52,9 +52,9 @@ export const StyledTabList = styled.div.attrs({
5252
'data-garden-id': COMPONENT_ID,
5353
'data-garden-version': PACKAGE_VERSION
5454
})<IStyledTabListProps>`
55-
display: ${props => (props.isVertical ? 'table-cell' : 'block')};
56-
border-bottom: ${props => (props.isVertical ? 'none' : props.theme.borderStyles.solid)};
57-
vertical-align: ${props => (props.isVertical ? 'top' : undefined)};
55+
display: ${props => (props.$isVertical ? 'table-cell' : 'block')};
56+
border-bottom: ${props => (props.$isVertical ? 'none' : props.theme.borderStyles.solid)};
57+
vertical-align: ${props => (props.$isVertical ? 'top' : undefined)};
5858
white-space: nowrap;
5959
6060
${sizeStyles};

packages/tabs/src/styled/StyledTabPanel.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import { retrieveComponentStyles, DEFAULT_THEME } from '@zendeskgarden/react-the
1111
const COMPONENT_ID = 'tabs.tabpanel';
1212

1313
interface IStyledTabPanelProps {
14-
isVertical?: boolean;
14+
$isVertical?: boolean;
1515
}
1616

17-
const sizeStyles = ({ theme, isVertical }: IStyledTabPanelProps & ThemeProps<DefaultTheme>) => {
18-
const margin = isVertical ? `${theme.space.base * 8}px` : undefined;
17+
const sizeStyles = ({ theme, $isVertical }: IStyledTabPanelProps & ThemeProps<DefaultTheme>) => {
18+
const margin = $isVertical ? `${theme.space.base * 8}px` : undefined;
1919

2020
return css`
2121
margin-${theme.rtl ? 'right' : 'left'}: ${margin};
@@ -27,7 +27,7 @@ export const StyledTabPanel = styled.div.attrs({
2727
'data-garden-version': PACKAGE_VERSION
2828
})<IStyledTabPanelProps>`
2929
display: block;
30-
vertical-align: ${props => props.isVertical && 'top'};
30+
vertical-align: ${props => props.$isVertical && 'top'};
3131
3232
${sizeStyles};
3333

packages/tabs/src/styled/StyledTabs.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { retrieveComponentStyles, DEFAULT_THEME } from '@zendeskgarden/react-the
1111
const COMPONENT_ID = 'tabs.tabs';
1212

1313
interface IStyledTabsProps {
14-
isVertical?: boolean;
14+
$isVertical?: boolean;
1515
}
1616

1717
/**
@@ -21,7 +21,7 @@ export const StyledTabs = styled.div.attrs<IStyledTabsProps>({
2121
'data-garden-id': COMPONENT_ID,
2222
'data-garden-version': PACKAGE_VERSION
2323
})<IStyledTabsProps>`
24-
display: ${props => (props.isVertical ? 'table' : 'block')};
24+
display: ${props => (props.$isVertical ? 'table' : 'block')};
2525
overflow: hidden;
2626
direction: ${props => props.theme.rtl && 'rtl'};
2727

0 commit comments

Comments
 (0)