@@ -7,6 +7,16 @@ type OffsetConfig = number | { left?: number; right?: number };
7
7
const resolveOffsets = ( offset : OffsetConfig ) =>
8
8
typeof offset === 'number' ? { right : offset , left : 0 } : { right : offset . right ?? 0 , left : offset . left ?? 0 } ;
9
9
10
+ const MIN_MARKER_OFFSET = 50 ;
11
+
12
+ const getMarkerCompensationOffset = ( left : number , right : number ) => {
13
+ const heightDifference = Math . abs ( left - right ) ;
14
+ if ( heightDifference < MIN_MARKER_OFFSET ) {
15
+ return MIN_MARKER_OFFSET - heightDifference ;
16
+ }
17
+ return 0 ;
18
+ } ;
19
+
10
20
export type TimelineProps = {
11
21
items : TimelineItemProps [ ] ;
12
22
gap ?: number ;
@@ -41,14 +51,19 @@ export function Timeline(props: TimelineProps) {
41
51
42
52
elements . forEach ( ( item ) => {
43
53
const element = item ;
54
+
44
55
if ( leftHeight > rightHeight ) {
56
+ leftHeight += getMarkerCompensationOffset ( leftHeight , rightHeight ) ;
57
+
45
58
element . style . top = `${ rightHeight } px` ;
46
59
element . classList . add ( 'timeline-item--right' ) ;
47
60
rightHeight += element . offsetHeight + ( gap ?? 0 ) ;
48
61
} else {
62
+ rightHeight += getMarkerCompensationOffset ( leftHeight , rightHeight ) ;
63
+
49
64
element . style . top = `${ leftHeight } px` ;
50
- leftHeight += element . offsetHeight + ( gap ?? 0 ) ;
51
65
element . classList . add ( 'timeline-item--left' ) ;
66
+ leftHeight += element . offsetHeight + ( gap ?? 0 ) ;
52
67
}
53
68
} ) ;
54
69
0 commit comments