@@ -8,26 +8,28 @@ interface UseIndicatorOptions {
88 activeTabOffset : TabOffset ;
99 horizontal : boolean ;
1010 rtl : boolean ;
11- indicatorSize : GetIndicatorSize ;
12- indicatorAlign : 'start' | 'center' | 'end' ;
11+ indicator ?: {
12+ size ?: GetIndicatorSize ;
13+ align ?: 'start' | 'center' | 'end' ;
14+ } ;
1315}
1416
1517const useIndicator = ( options : UseIndicatorOptions ) => {
16- const { activeTabOffset, horizontal, rtl, indicatorSize , indicatorAlign } = options ;
18+ const { activeTabOffset, horizontal, rtl, indicator } = options ;
1719 const [ inkStyle , setInkStyle ] = useState < React . CSSProperties > ( ) ;
1820 const inkBarRafRef = useRef < number > ( ) ;
1921
2022 const getLength = React . useCallback (
2123 ( origin : number ) => {
22- if ( typeof indicatorSize === 'function' ) {
23- return indicatorSize ( origin ) ;
24+ if ( typeof indicator ?. size === 'function' ) {
25+ return indicator ?. size ( origin ) ;
2426 }
25- if ( typeof indicatorSize === 'number' ) {
26- return indicatorSize ;
27+ if ( typeof indicator ?. size === 'number' ) {
28+ return indicator ?. size ;
2729 }
2830 return origin ;
2931 } ,
30- [ indicatorSize ] ,
32+ [ indicator ] ,
3133 ) ;
3234
3335 // Delay set ink style to avoid remove tab blink
@@ -42,27 +44,27 @@ const useIndicator = (options: UseIndicatorOptions) => {
4244 if ( horizontal ) {
4345 newInkStyle . width = getLength ( activeTabOffset . width ) ;
4446 const key = rtl ? 'right' : 'left' ;
45- if ( indicatorAlign === 'start' ) {
47+ if ( indicator ?. align === 'start' ) {
4648 newInkStyle [ key ] = activeTabOffset [ key ] ;
4749 }
48- if ( indicatorAlign === 'center' ) {
50+ if ( indicator ?. align === 'center' ) {
4951 newInkStyle [ key ] = activeTabOffset [ key ] + activeTabOffset . width / 2 ;
5052 newInkStyle . transform = rtl ? 'translateX(50%)' : 'translateX(-50%)' ;
5153 }
52- if ( indicatorAlign === 'end' ) {
54+ if ( indicator ?. align === 'end' ) {
5355 newInkStyle [ key ] = activeTabOffset [ key ] + activeTabOffset . width ;
5456 newInkStyle . transform = 'translateX(-100%)' ;
5557 }
5658 } else {
5759 newInkStyle . height = getLength ( activeTabOffset . height ) ;
58- if ( indicatorAlign === 'start' ) {
60+ if ( indicator ?. align === 'start' ) {
5961 newInkStyle . top = activeTabOffset . top ;
6062 }
61- if ( indicatorAlign === 'center' ) {
63+ if ( indicator ?. align === 'center' ) {
6264 newInkStyle . top = activeTabOffset . top + activeTabOffset . height / 2 ;
6365 newInkStyle . transform = 'translateY(-50%)' ;
6466 }
65- if ( indicatorAlign === 'end' ) {
67+ if ( indicator ?. align === 'end' ) {
6668 newInkStyle . top = activeTabOffset . top + activeTabOffset . height ;
6769 newInkStyle . transform = 'translateY(-100%)' ;
6870 }
@@ -75,7 +77,7 @@ const useIndicator = (options: UseIndicatorOptions) => {
7577 } ) ;
7678
7779 return cleanInkBarRaf ;
78- } , [ activeTabOffset , horizontal , rtl , indicatorSize , indicatorAlign , getLength ] ) ;
80+ } , [ activeTabOffset , horizontal , rtl , indicator ?. align , getLength ] ) ;
7981
8082 return { style : inkStyle } ;
8183} ;
0 commit comments