Skip to content

Commit d2aebdf

Browse files
fix: make drawer mode click-through without overlay
1 parent 6b9915a commit d2aebdf

4 files changed

Lines changed: 40 additions & 4 deletions

File tree

web/src/index.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,12 @@ a {
554554
padding: 0;
555555
}
556556

557+
.ts-sidebar-modal-content--drawer,
558+
.ts-sidebar-modal-body--drawer,
559+
.ts-sidebar-frame--drawer {
560+
pointer-events: none;
561+
}
562+
557563
.ts-sidebar-frame {
558564
height: 100%;
559565
background: var(--ts-overlay);
@@ -567,6 +573,7 @@ a {
567573
.ts-sidebar-frame--drawer {
568574
display: flex;
569575
padding: 0;
576+
background: transparent;
570577
}
571578

572579
.ts-sidebar-frame--start {
@@ -597,6 +604,7 @@ a {
597604
min-height: 0;
598605
border-radius: 0;
599606
padding: 16px;
607+
pointer-events: auto;
600608
}
601609

602610
.ts-md {

web/src/ui/drawer-presentation.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ describe('drawer-presentation', () => {
1515
frameClassName: 'ts-sidebar-frame ts-sidebar-frame--drawer ts-sidebar-frame--start',
1616
containerClassName: 'ts-sidebar-container ts-sidebar-container--drawer',
1717
containerStyle: { width: 560 },
18+
modalContentClassName: 'ts-sidebar-modal-content ts-sidebar-modal-content--drawer',
19+
modalBodyClassName: 'ts-sidebar-modal-body ts-sidebar-modal-body--drawer',
20+
withOverlay: false,
1821
});
1922
});
2023

@@ -30,6 +33,9 @@ describe('drawer-presentation', () => {
3033
frameClassName: 'ts-sidebar-frame ts-sidebar-frame--fullscreen',
3134
containerClassName: 'ts-sidebar-container ts-sidebar-container--fullscreen',
3235
containerStyle: { maxWidth: 1440 },
36+
modalContentClassName: 'ts-sidebar-modal-content ts-sidebar-modal-content--fullscreen',
37+
modalBodyClassName: 'ts-sidebar-modal-body ts-sidebar-modal-body--fullscreen',
38+
withOverlay: true,
3339
});
3440
});
3541

@@ -38,6 +44,9 @@ describe('drawer-presentation', () => {
3844
frameClassName: 'ts-sidebar-frame ts-sidebar-frame--fullscreen',
3945
containerClassName: 'ts-sidebar-container ts-sidebar-container--fullscreen',
4046
containerStyle: { maxWidth: 1320 },
47+
modalContentClassName: 'ts-sidebar-modal-content ts-sidebar-modal-content--fullscreen',
48+
modalBodyClassName: 'ts-sidebar-modal-body ts-sidebar-modal-body--fullscreen',
49+
withOverlay: true,
4150
});
4251
});
4352
});

web/src/ui/drawer-presentation.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,19 @@ type DrawerPresentation = {
99
frameClassName: string;
1010
containerClassName: string;
1111
containerStyle: Record<string, number | string>;
12+
modalContentClassName: string;
13+
modalBodyClassName: string;
14+
withOverlay: boolean;
1215
};
1316

1417
export function getFullscreenSidebarPresentation(fullscreenContentMaxWidth: number): DrawerPresentation {
1518
return {
1619
frameClassName: 'ts-sidebar-frame ts-sidebar-frame--fullscreen',
1720
containerClassName: 'ts-sidebar-container ts-sidebar-container--fullscreen',
1821
containerStyle: { maxWidth: fullscreenContentMaxWidth },
22+
modalContentClassName: 'ts-sidebar-modal-content ts-sidebar-modal-content--fullscreen',
23+
modalBodyClassName: 'ts-sidebar-modal-body ts-sidebar-modal-body--fullscreen',
24+
withOverlay: true,
1925
};
2026
}
2127

@@ -33,5 +39,8 @@ export function getDrawerPresentation({
3339
frameClassName: `ts-sidebar-frame ts-sidebar-frame--drawer ts-sidebar-frame--${placement}`,
3440
containerClassName: 'ts-sidebar-container ts-sidebar-container--drawer',
3541
containerStyle: { width: drawerWidth },
42+
modalContentClassName: 'ts-sidebar-modal-content ts-sidebar-modal-content--drawer',
43+
modalBodyClassName: 'ts-sidebar-modal-body ts-sidebar-modal-body--drawer',
44+
withOverlay: false,
3645
};
3746
}

web/src/ui/drawer.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,14 @@ const drawerWidthBySize: Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number> = {
2929
xl: 640,
3030
};
3131

32-
export const Drawer = ({ name, title, children, fullscreenContentMaxWidth = 1440, fixedSize, defaultSize = 'lg' }: Props) => {
32+
export const Drawer = ({
33+
name,
34+
title,
35+
children,
36+
fullscreenContentMaxWidth = 1440,
37+
fixedSize,
38+
defaultSize = 'lg',
39+
}: Props) => {
3340
const { t } = useTranslation();
3441
const sidebar = useStoreMap({
3542
store: $sidebars,
@@ -92,11 +99,14 @@ export const Drawer = ({ name, title, children, fullscreenContentMaxWidth = 1440
9299
withinPortal={!contained}
93100
withCloseButton={false}
94101
padding={0}
95-
withOverlay={!contained}
102+
withOverlay={!contained && presentation.withOverlay}
103+
trapFocus={fullScreen}
104+
lockScroll={fullScreen}
105+
closeOnClickOutside={fullScreen}
96106
zIndex={Z_INDEX.overlay.drawer}
97107
classNames={{
98-
content: 'ts-sidebar-modal-content',
99-
body: 'ts-sidebar-modal-body',
108+
content: presentation.modalContentClassName,
109+
body: presentation.modalBodyClassName,
100110
}}
101111
>
102112
<Box className={`${presentation.frameClassName} ts-scrollbar-thin`}>

0 commit comments

Comments
 (0)