Skip to content

Commit 9ff6bc9

Browse files
priscilawebdevclaudecodexnatemoo-re
authored
fix(drawer): Match responsive header height on small screens (#113016)
Follow-up to #112898. The page-frame event drawer used header sizing that no longer matched the page header on smaller viewports, which made the drawer chrome look visibly off around the activity and event drawers. Move the event drawer's responsive header sizing onto the shared event drawer container so the header row and navigator row inherit the same page-frame values. Keep the fixed-height navigator treatment scoped to page-frame drawers so non-page-frame drawers retain their previous spacing and shadow behavior. ## Before / After <table> <tr> <th>Before</th> <th>After</th> </tr> <tr> <td> <img width="1119" height="872" alt="image" src="https://github.com/user-attachments/assets/e7c99393-d05e-4a9f-a740-d55c62f706f8" /> </td> <td> <img width="1195" height="494" alt="image" src="https://github.com/user-attachments/assets/cfdaa498-1ced-4426-9178-0d1524c665f1" /> </td> </tr> </table> Closes https://linear.app/getsentry/issue/DE-1145/drawer-header-is-misaligned-with-the-other-header-on-smaller-devices --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: OpenAI Codex <noreply@openai.com> Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
1 parent 7e3195c commit 9ff6bc9

File tree

1 file changed

+46
-6
lines changed

1 file changed

+46
-6
lines changed

static/app/components/events/eventDrawer.tsx

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type {ComponentPropsWithoutRef} from 'react';
12
import styled from '@emotion/styled';
23

34
import {InputGroup} from '@sentry/scraps/input';
@@ -6,6 +7,11 @@ import {Flex, type FlexProps} from '@sentry/scraps/layout';
67
import {Breadcrumbs as NavigationBreadcrumbs} from 'sentry/components/breadcrumbs';
78
import {DrawerBody, DrawerHeader} from 'sentry/components/globalDrawer/components';
89
import {MIN_NAV_HEIGHT} from 'sentry/views/issueDetails/streamline/eventTitle';
10+
import {
11+
NAVIGATION_MOBILE_TOPBAR_HEIGHT_WITH_PAGE_FRAME,
12+
PRIMARY_HEADER_HEIGHT,
13+
} from 'sentry/views/navigation/constants';
14+
import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature';
915

1016
export const Header = styled('h3')`
1117
display: block;
@@ -31,16 +37,45 @@ export const ShortId = styled('div')`
3137
line-height: 1;
3238
`;
3339

34-
export const EventDrawerContainer = styled('div')`
40+
const EventDrawerContainerRoot = styled('div')<{hasPageFrameFeature: boolean}>`
3541
height: 100%;
3642
display: grid;
3743
grid-template-rows: max-content max-content auto;
44+
45+
${p =>
46+
p.hasPageFrameFeature &&
47+
`
48+
/* Responsive height that matches the TopBar (48px mobile, 53px desktop) */
49+
--event-drawer-header-height: ${NAVIGATION_MOBILE_TOPBAR_HEIGHT_WITH_PAGE_FRAME}px;
50+
--event-navigator-box-shadow: none;
51+
--event-navigator-border-bottom: 1px solid ${p.theme.tokens.border.primary};
52+
53+
@media (min-width: ${p.theme.breakpoints.md}) {
54+
--event-drawer-header-height: ${PRIMARY_HEADER_HEIGHT}px;
55+
}
56+
`}
3857
`;
3958

59+
export function EventDrawerContainer(props: ComponentPropsWithoutRef<'div'>) {
60+
const hasPageFrameFeature = useHasPageFrameFeature();
61+
62+
return (
63+
<EventDrawerContainerRoot {...props} hasPageFrameFeature={hasPageFrameFeature} />
64+
);
65+
}
66+
4067
export const EventDrawerHeader = styled(DrawerHeader)`
4168
position: unset;
42-
max-height: var(--drawer-header-height, ${MIN_NAV_HEIGHT}px);
43-
min-height: var(--drawer-header-height, ${MIN_NAV_HEIGHT}px);
69+
/* Height priority: container variable (responsive) → DrawerHeader height prop → default */
70+
height: var(--event-drawer-header-height, var(--drawer-header-height, auto));
71+
max-height: var(
72+
--event-drawer-header-height,
73+
var(--drawer-header-height, ${MIN_NAV_HEIGHT}px)
74+
);
75+
min-height: var(
76+
--event-drawer-header-height,
77+
var(--drawer-header-height, ${MIN_NAV_HEIGHT}px)
78+
);
4479
align-items: center;
4580
box-shadow: none;
4681
border-bottom: 1px solid ${p => p.theme.tokens.border.primary};
@@ -54,12 +89,17 @@ export const EventNavigator = styled('div')`
5489
grid-template-columns: 1fr auto;
5590
align-items: center;
5691
column-gap: ${p => p.theme.space.md};
57-
padding: ${p => p.theme.space.sm} 24px;
92+
padding: 0 24px;
5893
background: ${p => p.theme.tokens.background.primary};
5994
z-index: 2; /* Just above EventStickyControls */
60-
min-height: ${MIN_NAV_HEIGHT}px;
95+
height: var(--event-drawer-header-height, auto);
96+
min-height: var(--event-drawer-header-height, ${MIN_NAV_HEIGHT}px);
97+
border-bottom: var(--event-navigator-border-bottom, 0);
6198
/* eslint-disable-next-line @sentry/scraps/use-semantic-token */
62-
box-shadow: ${p => p.theme.tokens.border.primary} 0 1px;
99+
box-shadow: var(
100+
--event-navigator-box-shadow,
101+
${p => `${p.theme.tokens.border.primary} 0 1px`}
102+
);
63103
`;
64104

65105
export const EventStickyControls = styled('div')`

0 commit comments

Comments
 (0)