diff --git a/.changeset/trace-viewer-event-icon-tooltips.md b/.changeset/trace-viewer-event-icon-tooltips.md new file mode 100644 index 0000000000..ef96ebb814 --- /dev/null +++ b/.changeset/trace-viewer-event-icon-tooltips.md @@ -0,0 +1,5 @@ +--- +'@workflow/web-shared': patch +--- + +Show a delayed tooltip (Step, Hook, Sleep, Workflow) when hovering the icon on each row in the new trace viewer's event list. diff --git a/packages/web-shared/src/components/new-trace-viewer/components/event-list.tsx b/packages/web-shared/src/components/new-trace-viewer/components/event-list.tsx index c7545367cb..3a54ab528a 100644 --- a/packages/web-shared/src/components/new-trace-viewer/components/event-list.tsx +++ b/packages/web-shared/src/components/new-trace-viewer/components/event-list.tsx @@ -2,6 +2,7 @@ import { Circle } from 'lucide-react'; import { useRef } from 'react'; import { cn } from '../../../lib/cn'; import { formatDurationPrecise } from '../../trace-viewer/util/timing'; +import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip'; import { SleepIcon, StepForwardIcon, @@ -17,18 +18,20 @@ import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window'; interface EventStyle { icon: React.ComponentType<{ className?: string }>; className: string; + label: string; } const eventStyles: Record = { - run: { icon: WorkflowIcon, className: 'text-blue-900' }, - step: { icon: StepForwardIcon, className: 'text-green-900' }, - hook: { icon: WebhookIcon, className: 'text-gray-900' }, - sleep: { icon: SleepIcon, className: 'text-gray-900' }, + run: { icon: WorkflowIcon, className: 'text-blue-900', label: 'Workflow' }, + step: { icon: StepForwardIcon, className: 'text-green-900', label: 'Step' }, + hook: { icon: WebhookIcon, className: 'text-gray-900', label: 'Hook' }, + sleep: { icon: SleepIcon, className: 'text-gray-900', label: 'Sleep' }, }; const defaultStyle: EventStyle = { icon: Circle, className: 'text-gray-900', + label: 'Event', }; const ROW_HEIGHT_CLASS = 'h-10'; @@ -38,6 +41,7 @@ function getEventStyle(resource: string, isErrored: boolean): EventStyle { return { icon: style.icon, className: cn(isErrored ? 'text-red-900' : style.className), + label: style.label, }; } @@ -54,10 +58,11 @@ const EventRow = ({ }) => { const durationMs = getSpanDurationMs(span); const isErrored = isSpanErrored(span); - const { icon: Icon, className: tagClassName } = getEventStyle( - span.resource, - isErrored - ); + const { + icon: Icon, + className: tagClassName, + label: iconLabel, + } = getEventStyle(span.resource, isErrored); return (
  • - - - + + + + + + + {iconLabel} +