Skip to content

Commit c6217a2

Browse files
committed
feat: introduce min marker offset
1 parent c0828a8 commit c6217a2

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

src/components/Timeline.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ type OffsetConfig = number | { left?: number; right?: number };
77
const resolveOffsets = (offset: OffsetConfig) =>
88
typeof offset === 'number' ? { right: offset, left: 0 } : { right: offset.right ?? 0, left: offset.left ?? 0 };
99

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+
1020
export type TimelineProps = {
1121
items: TimelineItemProps[];
1222
gap?: number;
@@ -41,14 +51,19 @@ export function Timeline(props: TimelineProps) {
4151

4252
elements.forEach((item) => {
4353
const element = item;
54+
4455
if (leftHeight > rightHeight) {
56+
leftHeight += getMarkerCompensationOffset(leftHeight, rightHeight);
57+
4558
element.style.top = `${rightHeight}px`;
4659
element.classList.add('timeline-item--right');
4760
rightHeight += element.offsetHeight + (gap ?? 0);
4861
} else {
62+
rightHeight += getMarkerCompensationOffset(leftHeight, rightHeight);
63+
4964
element.style.top = `${leftHeight}px`;
50-
leftHeight += element.offsetHeight + (gap ?? 0);
5165
element.classList.add('timeline-item--left');
66+
leftHeight += element.offsetHeight + (gap ?? 0);
5267
}
5368
});
5469

0 commit comments

Comments
 (0)