@@ -3,6 +3,8 @@ import raf from 'rc-util/lib/raf';
33import * as React from 'react' ;
44import { getPageXY } from './hooks/useScrollDrag' ;
55
6+ const isDark = ( ) => window . matchMedia ?.( '(prefers-color-scheme: dark)' ) . matches ;
7+
68export type ScrollBarDirectionType = 'ltr' | 'rtl' ;
79
810export interface ScrollBarProps {
@@ -45,6 +47,7 @@ const ScrollBar = React.forwardRef<ScrollBarRef, ScrollBarProps>((props, ref) =>
4547 const [ dragging , setDragging ] = React . useState ( false ) ;
4648 const [ pageXY , setPageXY ] = React . useState < number | null > ( null ) ;
4749 const [ startTop , setStartTop ] = React . useState < number | null > ( null ) ;
50+ const [ dark , setDark ] = React . useState ( isDark ( ) ) ;
4851
4952 const isLTR = ! rtl ;
5053
@@ -187,6 +190,28 @@ const ScrollBar = React.forwardRef<ScrollBarRef, ScrollBarProps>((props, ref) =>
187190 }
188191 } , [ dragging ] ) ;
189192
193+ React . useEffect ( ( ) => {
194+ const media = window . matchMedia ?.( '(prefers-color-scheme: dark)' ) ;
195+
196+ const listener = ( e : MediaQueryListEvent ) => {
197+ setDark ( e . matches ) ;
198+ } ;
199+
200+ if ( media ?. addEventListener ) {
201+ media . addEventListener ( 'change' , listener ) ;
202+ } else if ( media ?. addListener ) {
203+ media . addListener ( listener ) ;
204+ }
205+
206+ return ( ) => {
207+ if ( media ?. removeEventListener ) {
208+ media . removeEventListener ( 'change' , listener ) ;
209+ } else if ( media ?. removeListener ) {
210+ media . removeListener ( listener ) ;
211+ }
212+ } ;
213+ } , [ ] ) ;
214+
190215 React . useEffect ( ( ) => {
191216 delayHidden ( ) ;
192217 return ( ) => {
@@ -209,10 +234,11 @@ const ScrollBar = React.forwardRef<ScrollBarRef, ScrollBarProps>((props, ref) =>
209234
210235 const thumbStyle : React . CSSProperties = {
211236 position : 'absolute' ,
212- background : 'rgba(0, 0, 0, 0.5)' ,
237+ background : dark ? 'rgba(255, 255, 255, 0.5)' : 'rgba(0, 0, 0, 0.5)' ,
213238 borderRadius : 99 ,
214239 cursor : 'pointer' ,
215240 userSelect : 'none' ,
241+ ...propsThumbStyle ,
216242 } ;
217243
218244 if ( horizontal ) {
@@ -266,7 +292,7 @@ const ScrollBar = React.forwardRef<ScrollBarRef, ScrollBarProps>((props, ref) =>
266292 className = { classNames ( `${ scrollbarPrefixCls } -thumb` , {
267293 [ `${ scrollbarPrefixCls } -thumb-moving` ] : dragging ,
268294 } ) }
269- style = { { ...thumbStyle , ... propsThumbStyle } }
295+ style = { { ...thumbStyle } }
270296 onMouseDown = { onThumbMouseDown }
271297 />
272298 </ div >
0 commit comments