mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-24 07:41:47 +00:00
Namespace the modal backdrop class so content blockers stop hiding it (#1027)
Generic class names like .modal-backdrop sit on the cosmetic filter lists that content blockers (1Blocker, EasyList Annoyances) ship, and get hidden with display:none. The shared Modal - used by New Trip and Add Place - carried that class, so Safari users running such a blocker saw the modal silently fail to open with no error and no network request. Rename it to .trek-modal-backdrop.
This commit is contained in:
@@ -222,7 +222,7 @@ export default function TodoListPanel({ tripId, items, addItemSignal = 0 }: { tr
|
|||||||
)}
|
)}
|
||||||
{isAddingNew && !selectedItem && !isMobile && ReactDOM.createPortal(
|
{isAddingNew && !selectedItem && !isMobile && ReactDOM.createPortal(
|
||||||
<div onClick={e => { if (e.target === e.currentTarget) setIsAddingNew(false) }}
|
<div onClick={e => { if (e.target === e.currentTarget) setIsAddingNew(false) }}
|
||||||
className="modal-backdrop"
|
className="trek-modal-backdrop"
|
||||||
style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(15,23,42,0.5)', display: 'flex', justifyContent: 'center', alignItems: 'flex-start', paddingTop: 'calc(var(--nav-h) + 60px)', paddingBottom: 40 }}>
|
style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(15,23,42,0.5)', display: 'flex', justifyContent: 'center', alignItems: 'flex-start', paddingTop: 'calc(var(--nav-h) + 60px)', paddingBottom: 40 }}>
|
||||||
<div style={{ width: 'min(520px, 92vw)', maxHeight: 'calc(100vh - var(--nav-h) - 120px)', overflow: 'auto', borderRadius: 16, boxShadow: '0 20px 60px rgba(0,0,0,0.25)' }}
|
<div style={{ width: 'min(520px, 92vw)', maxHeight: 'calc(100vh - var(--nav-h) - 120px)', overflow: 'auto', borderRadius: 16, boxShadow: '0 20px 60px rgba(0,0,0,0.25)' }}
|
||||||
ref={el => { if (el) { const child = el.firstElementChild as HTMLElement; if (child) { child.style.width = '100%'; child.style.borderLeft = 'none'; child.style.borderRadius = '16px' } } }}>
|
ref={el => { if (el) { const child = el.firstElementChild as HTMLElement; if (child) { child.style.width = '100%'; child.style.borderLeft = 'none'; child.style.borderRadius = '16px' } } }}>
|
||||||
@@ -240,7 +240,7 @@ export default function TodoListPanel({ tripId, items, addItemSignal = 0 }: { tr
|
|||||||
)}
|
)}
|
||||||
{isAddingNew && !selectedItem && isMobile && ReactDOM.createPortal(
|
{isAddingNew && !selectedItem && isMobile && ReactDOM.createPortal(
|
||||||
<div onClick={e => { if (e.target === e.currentTarget) setIsAddingNew(false) }}
|
<div onClick={e => { if (e.target === e.currentTarget) setIsAddingNew(false) }}
|
||||||
className="modal-backdrop"
|
className="trek-modal-backdrop"
|
||||||
style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(0,0,0,0.4)', display: 'flex', justifyContent: 'center', alignItems: 'flex-end', paddingBottom: 'var(--bottom-nav-h)' }}>
|
style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(0,0,0,0.4)', display: 'flex', justifyContent: 'center', alignItems: 'flex-end', paddingBottom: 'var(--bottom-nav-h)' }}>
|
||||||
<div style={{ width: '100%', maxHeight: '85vh', borderRadius: '16px 16px 0 0', overflow: 'auto' }}
|
<div style={{ width: '100%', maxHeight: '85vh', borderRadius: '16px 16px 0 0', overflow: 'auto' }}
|
||||||
ref={el => { if (el) { const child = el.firstElementChild as HTMLElement; if (child) { child.style.width = '100%'; child.style.borderLeft = 'none'; child.style.borderRadius = '16px 16px 0 0' } } }}>
|
ref={el => { if (el) { const child = el.firstElementChild as HTMLElement; if (child) { child.style.width = '100%'; child.style.borderLeft = 'none'; child.style.borderRadius = '16px 16px 0 0' } } }}>
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ describe('Modal', () => {
|
|||||||
|
|
||||||
it('FE-COMP-MODAL-008: clicking the backdrop calls onClose', () => {
|
it('FE-COMP-MODAL-008: clicking the backdrop calls onClose', () => {
|
||||||
render(<Modal isOpen={true} onClose={onClose}><p>inner</p></Modal>);
|
render(<Modal isOpen={true} onClose={onClose}><p>inner</p></Modal>);
|
||||||
const backdrop = document.querySelector('.modal-backdrop') as HTMLElement;
|
const backdrop = document.querySelector('.trek-modal-backdrop') as HTMLElement;
|
||||||
// Simulate mousedown then click on the backdrop itself
|
// Simulate mousedown then click on the backdrop itself
|
||||||
fireEvent.mouseDown(backdrop, { target: backdrop });
|
fireEvent.mouseDown(backdrop, { target: backdrop });
|
||||||
fireEvent.click(backdrop);
|
fireEvent.click(backdrop);
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export default function Modal({
|
|||||||
|
|
||||||
return ReactDOM.createPortal(
|
return ReactDOM.createPortal(
|
||||||
<div
|
<div
|
||||||
className="fixed inset-0 z-[200] flex items-start sm:items-center justify-center px-4 modal-backdrop trek-backdrop-enter bg-[rgba(15,23,42,0.5)]"
|
className="fixed inset-0 z-[200] flex items-start sm:items-center justify-center px-4 trek-modal-backdrop trek-backdrop-enter bg-[rgba(15,23,42,0.5)]"
|
||||||
style={{ paddingTop: 70, paddingBottom: 'calc(20px + var(--bottom-nav-h))', overflow: 'hidden' }}
|
style={{ paddingTop: 70, paddingBottom: 'calc(20px + var(--bottom-nav-h))', overflow: 'hidden' }}
|
||||||
onMouseDown={e => { mouseDownTarget.current = e.target }}
|
onMouseDown={e => { mouseDownTarget.current = e.target }}
|
||||||
onClick={e => {
|
onClick={e => {
|
||||||
|
|||||||
@@ -734,7 +734,7 @@ img[alt="TREK"] {
|
|||||||
.dark .min-h-screen { background-color: var(--bg-primary) !important; }
|
.dark .min-h-screen { background-color: var(--bg-primary) !important; }
|
||||||
|
|
||||||
/* Modal-Hintergrund */
|
/* Modal-Hintergrund */
|
||||||
.dark .modal-backdrop { background: rgba(0,0,0,0.6); }
|
.dark .trek-modal-backdrop { background: rgba(0,0,0,0.6); }
|
||||||
|
|
||||||
/* ── Dark: Fallback für Komponenten die noch nicht auf CSS-Variablen umgestellt sind ── */
|
/* ── Dark: Fallback für Komponenten die noch nicht auf CSS-Variablen umgestellt sind ── */
|
||||||
.dark {
|
.dark {
|
||||||
@@ -766,8 +766,8 @@ img[alt="TREK"] {
|
|||||||
animation: slide-out-right 0.3s ease-in forwards;
|
animation: slide-out-right 0.3s ease-in forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Modal-Hintergrund */
|
/* Modal-Hintergrund (eigener Namespace, sonst blenden Content-Blocker .modal-backdrop aus) */
|
||||||
.modal-backdrop {
|
.trek-modal-backdrop {
|
||||||
backdrop-filter: blur(4px);
|
backdrop-filter: blur(4px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user