* add minor ticks to timeline

* don't display motion events on veritcal bars on motion timeline

* color tweaks and spacing on config editor

* pad start and end of timeline to ensure handlebar is always visible
This commit is contained in:
Josh Hawkins 2024-03-12 10:23:54 -05:00 committed by GitHub
parent 579a7c8900
commit a2b0ca07cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 40 additions and 27 deletions

View File

@ -51,8 +51,8 @@ export function MotionReviewTimeline({
const timelineRef = useRef<HTMLDivElement>(null); const timelineRef = useRef<HTMLDivElement>(null);
const handlebarTimeRef = useRef<HTMLDivElement>(null); const handlebarTimeRef = useRef<HTMLDivElement>(null);
const timelineDuration = useMemo( const timelineDuration = useMemo(
() => timelineStart - timelineEnd, () => timelineStart - timelineEnd + 4 * segmentDuration,
[timelineEnd, timelineStart], [timelineEnd, timelineStart, segmentDuration],
); );
const { alignStartDateToTimeline, alignEndDateToTimeline } = useEventUtils( const { alignStartDateToTimeline, alignEndDateToTimeline } = useEventUtils(
@ -61,8 +61,8 @@ export function MotionReviewTimeline({
); );
const timelineStartAligned = useMemo( const timelineStartAligned = useMemo(
() => alignStartDateToTimeline(timelineStart), () => alignStartDateToTimeline(timelineStart) + 2 * segmentDuration,
[timelineStart, alignStartDateToTimeline], [timelineStart, alignStartDateToTimeline, segmentDuration],
); );
const { handleMouseDown, handleMouseUp, handleMouseMove } = const { handleMouseDown, handleMouseUp, handleMouseMove } =

View File

@ -244,7 +244,9 @@ export function MotionSegment({
</div> </div>
</div> </div>
{severity.map((severityValue: number, index: number) => ( {severity.map((severityValue: number, index: number) => {
if (severityValue > 1) {
return (
<React.Fragment key={index}> <React.Fragment key={index}>
<div className="absolute right-0 h-2 z-10"> <div className="absolute right-0 h-2 z-10">
<div <div
@ -258,7 +260,11 @@ export function MotionSegment({
></div> ></div>
</div> </div>
</React.Fragment> </React.Fragment>
))} );
} else {
return null;
}
})}
</div> </div>
); );
} }

View File

@ -48,7 +48,11 @@ export function ReviewTimeline({
isDragging && showHandlebar ? "cursor-grabbing" : "cursor-auto" isDragging && showHandlebar ? "cursor-grabbing" : "cursor-auto"
}`} }`}
> >
<div className="flex flex-col">{children}</div> <div className="flex flex-col relative">
<div className="absolute top-0 inset-x-0 z-20 w-full h-[30px] bg-gradient-to-b from-secondary to-transparent pointer-events-none"></div>
<div className="absolute bottom-0 inset-x-0 z-20 w-full h-[30px] bg-gradient-to-t from-secondary to-transparent pointer-events-none"></div>
{children}
</div>
{showHandlebar && ( {showHandlebar && (
<div <div
className="absolute left-0 top-0 z-20 w-full" className="absolute left-0 top-0 z-20 w-full"

View File

@ -64,8 +64,11 @@ export function Tick({ timestamp, timestampSpread }: TickSegmentProps) {
className={`h-0.5 ${ className={`h-0.5 ${
timestamp.getMinutes() % timestampSpread === 0 && timestamp.getMinutes() % timestampSpread === 0 &&
timestamp.getSeconds() === 0 timestamp.getSeconds() === 0
? "w-[12px] bg-gray-400" ? "w-[12px] bg-neutral-600 dark:bg-neutral-500"
: "w-[8px] bg-gray-600" : timestamp.getMinutes() % (timestampSpread == 15 ? 5 : 1) ===
0 && timestamp.getSeconds() === 0
? "w-[8px] bg-neutral-500 dark:bg-neutral-600" // Minor tick mark
: "w-[5px] bg-neutral-400 dark:bg-neutral-700"
}`} }`}
></div> ></div>
</div> </div>
@ -81,11 +84,11 @@ export function Timestamp({
segmentKey, segmentKey,
}: TimestampSegmentProps) { }: TimestampSegmentProps) {
return ( return (
<div className="absolute left-[15px] top-[1px] h-2 z-10"> <div className="absolute left-[15px] h-2 z-10">
{!isFirstSegmentInMinimap && !isLastSegmentInMinimap && ( {!isFirstSegmentInMinimap && !isLastSegmentInMinimap && (
<div <div
key={`${segmentKey}_timestamp`} key={`${segmentKey}_timestamp`}
className="text-[8px] text-gray-400" className="text-[8px] text-neutral-600 dark:text-neutral-500"
> >
{timestamp.getMinutes() % timestampSpread === 0 && {timestamp.getMinutes() % timestampSpread === 0 &&
timestamp.getSeconds() === 0 && timestamp.getSeconds() === 0 &&

View File

@ -195,8 +195,8 @@ function useDraggableHandler({
segmentHeight * (timelineDuration / segmentDuration) - segmentHeight * (timelineDuration / segmentDuration) -
segmentHeight * 2, segmentHeight * 2,
Math.max( Math.max(
// start of timeline // start of timeline - 2 segments added for handlebar visibility
segmentHeight + scrolled, segmentHeight * 2 + scrolled,
// current Y position // current Y position
clientYPosition - clientYPosition -
timelineTop + timelineTop +

View File

@ -123,7 +123,7 @@ function ConfigEditor() {
} }
return ( return (
<div className="absolute top-2 bottom-16 right-0 left-0 md:left-12"> <div className="absolute top-2 bottom-16 right-0 left-0 md:left-2">
<div className="lg:flex justify-between mr-1"> <div className="lg:flex justify-between mr-1">
<Heading as="h2">Config</Heading> <Heading as="h2">Config</Heading>
<div> <div>