@@ -82,23 +82,32 @@ const barCss = css`
8282 bor der- radius: 8px;
8383` ;
8484
85- const barAddContrastLightCss = css `
86- @media (prefers-color-scheme : light) {
87- border : 1px solid ${ palette ( '--football-match-stat-border' ) } ;
88- }
89- [data-color-scheme = 'light' ] & {
90- border : 1px solid ${ palette ( '--football-match-stat-border' ) } ;
91- }
92- ` ;
85+ const decideContrastRequired = ( colour : string ) => {
86+ // https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html
87+ const minimumContrast = 3.1 ;
9388
94- const barAddContrastDarkCss = css `
95- @media (prefers-color-scheme : dark) {
96- border : 1px solid ${ palette ( '--football-match-stat-border' ) } ;
97- }
98- [data-color-scheme = 'dark' ] & {
99- border : 1px solid ${ palette ( '--football-match-stat-border' ) } ;
100- }
101- ` ;
89+ const backgroundLight = sourcePalette . neutral [ 97 ] ;
90+ const backgroundDark = sourcePalette . neutral [ 10 ] ;
91+
92+ if ( getContrast ( colour , backgroundLight ) < minimumContrast ) return 'light' ;
93+ if ( getContrast ( colour , backgroundDark ) < minimumContrast ) return 'dark' ;
94+
95+ return 'none' ;
96+ } ;
97+
98+ const addContrastingBorderCss = ( colour : string ) => {
99+ const mode = decideContrastRequired ( colour ) ;
100+ if ( mode === 'none' ) return null ;
101+
102+ return css `
103+ @media (prefers-color-scheme: ${ mode } ) {
104+ border : 1px solid ${ palette ( '--football-match-stat-border' ) } ;
105+ }
106+ [data-color-scheme = '${ mode } ' ] & {
107+ border : 1px solid ${ palette ( '--football-match-stat-border' ) } ;
108+ }
109+ ` ;
110+ } ;
102111
103112type MatchStatistic = {
104113 teamName : string ;
@@ -129,20 +138,6 @@ export const FootballMatchStat = ({
129138 const homePercentage = ( home . value / ( home . value + away . value ) ) * 100 ;
130139 const awayPercentage = ( away . value / ( home . value + away . value ) ) * 100 ;
131140
132- const minimumContrast = 3.1 ; // https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html
133-
134- const backgroundLight = sourcePalette . neutral [ 97 ] ;
135- const backgroundDark = sourcePalette . neutral [ 10 ] ;
136-
137- const homeNeedsContrastWhenLight =
138- getContrast ( home . teamColour , backgroundLight ) < minimumContrast ;
139- const awayNeedsContrastWhenLight =
140- getContrast ( away . teamColour , backgroundLight ) < minimumContrast ;
141- const homeNeedsContrastWhenDark =
142- getContrast ( home . teamColour , backgroundDark ) < minimumContrast ;
143- const awayNeedsContrastWhenDark =
144- getContrast ( away . teamColour , backgroundDark ) < minimumContrast ;
145-
146141 return (
147142 < div css = { containerCss } >
148143 < div css = { [ headerCss , raiseLabelOnDesktop && raiseLabelCss ] } >
@@ -180,22 +175,14 @@ export const FootballMatchStat = ({
180175 </ div >
181176 < div aria-hidden = "true" css = { chartCss } >
182177 < div
183- css = { [
184- barCss ,
185- homeNeedsContrastWhenLight && barAddContrastLightCss ,
186- homeNeedsContrastWhenDark && barAddContrastDarkCss ,
187- ] }
178+ css = { [ barCss , addContrastingBorderCss ( home . teamColour ) ] }
188179 style = { {
189180 '--match-stat-percentage' : `${ homePercentage } %` ,
190181 '--match-stat-team-colour' : home . teamColour ,
191182 } }
192183 > </ div >
193184 < div
194- css = { [
195- barCss ,
196- awayNeedsContrastWhenLight && barAddContrastLightCss ,
197- awayNeedsContrastWhenDark && barAddContrastDarkCss ,
198- ] }
185+ css = { [ barCss , addContrastingBorderCss ( away . teamColour ) ] }
199186 style = { {
200187 '--match-stat-percentage' : `${ awayPercentage } %` ,
201188 '--match-stat-team-colour' : away . teamColour ,
0 commit comments