diff --git a/packages/trace-viewer/src/ui/logTab.tsx b/packages/trace-viewer/src/ui/logTab.tsx index be0469ab91..4fcb8a6f43 100644 --- a/packages/trace-viewer/src/ui/logTab.tsx +++ b/packages/trace-viewer/src/ui/logTab.tsx @@ -63,6 +63,6 @@ export const LogTab: React.FunctionComponent<{ {entry.time} {entry.message} } - noHighlightOnHover={true} + notSelectable={true} />; }; diff --git a/packages/trace-viewer/src/ui/sourceTab.css b/packages/trace-viewer/src/ui/sourceTab.css index 9a3352aea7..3b9a8261c8 100644 --- a/packages/trace-viewer/src/ui/sourceTab.css +++ b/packages/trace-viewer/src/ui/sourceTab.css @@ -29,3 +29,9 @@ align-items: center; flex: 1 1 auto; } + +.source-tab-file-name div { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/packages/trace-viewer/src/ui/sourceTab.tsx b/packages/trace-viewer/src/ui/sourceTab.tsx index cfa6e2ccd4..cf704a8438 100644 --- a/packages/trace-viewer/src/ui/sourceTab.tsx +++ b/packages/trace-viewer/src/ui/sourceTab.tsx @@ -95,6 +95,7 @@ export const SourceTab: React.FunctionComponent<{ }, [onOpenExternally, location]); const showStackFrames = (stack?.length ?? 0) > 1; + const shortFileName = getFileName(fileName); return { fileName && - {fileName} - +
+
{shortFileName}
+
+ {location && }
} diff --git a/packages/web/src/components/gridView.tsx b/packages/web/src/components/gridView.tsx index 43a40d55b4..f9ba7eb50a 100644 --- a/packages/web/src/components/gridView.tsx +++ b/packages/web/src/components/gridView.tsx @@ -121,7 +121,7 @@ export function GridView(model: GridViewProps) { onIconClicked={model.onIconClicked} noItemsMessage={model.noItemsMessage} dataTestId={model.dataTestId} - noHighlightOnHover={model.noHighlightOnHover} + notSelectable={model.notSelectable} > ; diff --git a/packages/web/src/components/listView.css b/packages/web/src/components/listView.css index cc8c769332..3b7791b83d 100644 --- a/packages/web/src/components/listView.css +++ b/packages/web/src/components/listView.css @@ -34,6 +34,10 @@ padding-left: 5px; } +.list-view-content.not-selectable > .list-view-entry { + cursor: inherit; +} + .list-view-entry.highlighted:not(.selected) { background-color: var(--vscode-list-inactiveSelectionBackground) !important; } diff --git a/packages/web/src/components/listView.tsx b/packages/web/src/components/listView.tsx index a932bf7435..5186a3d02a 100644 --- a/packages/web/src/components/listView.tsx +++ b/packages/web/src/components/listView.tsx @@ -16,6 +16,7 @@ import * as React from 'react'; import './listView.css'; +import { clsx } from '@web/uiUtils'; export type ListViewProps = { name: string, @@ -36,7 +37,7 @@ export type ListViewProps = { onIconClicked?: (item: T, index: number) => void, noItemsMessage?: string, dataTestId?: string, - noHighlightOnHover?: boolean, + notSelectable?: boolean, }; const scrollPositions = new Map(); @@ -60,7 +61,7 @@ export function ListView({ onIconClicked, noItemsMessage, dataTestId, - noHighlightOnHover, + notSelectable, }: ListViewProps) { const itemListRef = React.useRef(null); const [highlightedItem, setHighlightedItem] = React.useState(); @@ -85,9 +86,9 @@ export function ListView({ itemListRef.current.scrollTop = scrollPositions.get(name) || 0; }, [name]); - return
0 ? 'list' : undefined} data-testid={dataTestId || (name + '-list')}> + return
0 ? 'list' : undefined} data-testid={dataTestId || (name + '-list')}>
{ if (selectedItem && event.key === 'Enter') { @@ -134,18 +135,19 @@ export function ListView({ > {noItemsMessage && items.length === 0 &&
{noItemsMessage}
} {items.map((item, index) => { - const selectedSuffix = selectedItem === item ? ' selected' : ''; - const highlightedSuffix = !noHighlightOnHover && highlightedItem === item ? ' highlighted' : ''; - const errorSuffix = isError?.(item, index) ? ' error' : ''; - const warningSuffix = isWarning?.(item, index) ? ' warning' : ''; - const infoSuffix = isInfo?.(item, index) ? ' info' : ''; const indentation = indent?.(item, index) || 0; const rendered = render(item, index); return
onAccepted?.(item, index)} role='listitem' - className={'list-view-entry' + selectedSuffix + highlightedSuffix + errorSuffix + warningSuffix + infoSuffix} + className={clsx( + 'list-view-entry', + selectedItem === item && 'selected', + !notSelectable && highlightedItem === item && 'highlighted', + isError?.(item, index) && 'error', + isWarning?.(item, index) && 'warning', + isInfo?.(item, index) && 'info')} onClick={() => onSelected?.(item, index)} onMouseEnter={() => setHighlightedItem(item)} onMouseLeave={() => setHighlightedItem(undefined)}