Skip to content

Commit 0567f11

Browse files
committed
fix(modal): correct calculation of boundingClientRect
1 parent 896656b commit 0567f11

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

packages/kit-headless/src/components/modal/modal-popup.tsx

+16-7
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { modalContextId } from './modal-context-id';
1414

1515
export const ModalPopup = component$(
1616
(props: Omit<QwikIntrinsicElements['dialog'], 'open'>) => {
17-
const { class: modalPopupClass, ...htmlDialogProps } = props;
1817
const modalContext = useContext(modalContextId);
1918
const refSig = useSignal<HTMLDialogElement>();
2019

@@ -61,23 +60,33 @@ export const ModalPopup = component$(
6160
});
6261

6362
const closeOnBackdropClick$ = $((event: QwikMouseEvent) => {
64-
if ((event.target as Element).nodeName !== 'DIALOG') {
63+
const modal = refSig.value;
64+
65+
if (!modal) {
6566
return;
6667
}
6768

68-
modalContext.showSig.value = false;
69+
const modalRect = modal.getBoundingClientRect();
70+
71+
const wasClickTriggeredOutsideModalRect =
72+
modalRect.left > event.clientX ||
73+
modalRect.right < event.clientX ||
74+
modalRect.top > event.clientY ||
75+
modalRect.bottom < event.clientY;
76+
77+
if (wasClickTriggeredOutsideModalRect) {
78+
modalContext.showSig.value = false;
79+
}
6980
});
7081

7182
return (
7283
<dialog
73-
{...htmlDialogProps}
84+
{...props}
7485
ref={refSig}
7586
onClick$={(event) => closeOnBackdropClick$(event)}
7687
onClose$={() => (modalContext.showSig.value = false)}
7788
>
78-
<div class={modalPopupClass}>
79-
<Slot />
80-
</div>
89+
<Slot />
8190
</dialog>
8291
);
8392
},

0 commit comments

Comments
 (0)