diff --git a/packages/client/ui-trajectory/src/client/TrajectoryTable.module.css b/packages/client/ui-trajectory/src/client/TrajectoryTable.module.css index bedaa2aec4..92b78a6661 100644 --- a/packages/client/ui-trajectory/src/client/TrajectoryTable.module.css +++ b/packages/client/ui-trajectory/src/client/TrajectoryTable.module.css @@ -321,6 +321,13 @@ width: 76px; } +.kindSlot :global([role='tooltip']) { + border: 1px solid var(--dsw-alias-border-l2); + background: var(--dsw-alias-bg-layer-2); + box-shadow: var(--dsw-shadow-lv2); + color: var(--dsw-alias-label-primary); +} + .content { padding-left: 4px !important; color: var(--dsw-alias-label-primary); diff --git a/packages/client/ui-trajectory/src/client/TrajectoryTable.tsx b/packages/client/ui-trajectory/src/client/TrajectoryTable.tsx index 5a78e95a40..2ab44d2e55 100644 --- a/packages/client/ui-trajectory/src/client/TrajectoryTable.tsx +++ b/packages/client/ui-trajectory/src/client/TrajectoryTable.tsx @@ -1868,7 +1868,10 @@ export function TrajectoryTable({ - + { diff --git a/packages/client/ui-trajectory/tests/table.spec.tsx b/packages/client/ui-trajectory/tests/table.spec.tsx index d9959ae30c..f02eb6e0cc 100644 --- a/packages/client/ui-trajectory/tests/table.spec.tsx +++ b/packages/client/ui-trajectory/tests/table.spec.tsx @@ -184,7 +184,9 @@ describe('TrajectoryTable', () => { expect(toolTag?.querySelector('[data-role-icon="wrench"]')).toBeTruthy() fireEvent.mouseEnter(toolTag as HTMLElement) - expect(screen.getByRole('tooltip').textContent).toBe('TOOL') + const tooltip = screen.getByRole('tooltip') + expect(tooltip.textContent).toBe('TOOL') + expect(tooltip.getAttribute('data-side')).toBe('right') fireEvent.mouseLeave(toolTag as HTMLElement) expect(screen.queryByRole('tooltip')).toBeNull() }) diff --git a/packages/client/ui-trajectory/tests/views.spec.tsx b/packages/client/ui-trajectory/tests/views.spec.tsx index ff390d45ea..2ab119a5d9 100644 --- a/packages/client/ui-trajectory/tests/views.spec.tsx +++ b/packages/client/ui-trajectory/tests/views.spec.tsx @@ -465,7 +465,7 @@ describe('timeline projection', () => { it('auto-pans a zoomed viewport while a range drag pushes against an edge', () => { const onRangeChange = vi.fn() - render( + const view = render( { for (let index = 0; index < 24; index++) { fireEvent.pointerMove(plot, { clientX: 99, pointerId: 1 }) } + const draftSelection = view.container.querySelectorAll( + '[data-dragging="true"]', + ) + expect(draftSelection).toHaveLength(2) + for (const overlay of draftSelection) { + expect(Number.parseFloat( + overlay.style.getPropertyValue('--trajectory-selection-left'), + )).toBeLessThan(0) + } fireEvent.pointerUp(plot, { clientX: 99, pointerId: 1 }) const selectedRange = onRangeChange.mock.calls.at(-1)?.[0] as | { start: number; end: number } | undefined + const fullRange = deriveTrajectoryTimeline(longTurns) expect(selectedRange).toBeDefined() + expect(fullRange).not.toBeNull() expect((selectedRange?.end ?? 0) - (selectedRange?.start ?? 0)).toBeGreaterThan(4) + expect(selectedRange?.start).toBeGreaterThanOrEqual(fullRange?.start ?? 0) + expect(selectedRange?.end).toBeLessThanOrEqual(fullRange?.end ?? 0) }) it('uses equal-width operation slots and stable semantic lanes', () => {