diff --git a/oxlint-suppressions.json b/oxlint-suppressions.json index 1aad8a76367..96e1398801d 100644 --- a/oxlint-suppressions.json +++ b/oxlint-suppressions.json @@ -1040,14 +1040,8 @@ } }, "web/app/components/base/file-uploader/audio-preview.tsx": { - "jsx_a11y/click-events-have-key-events": { - "count": 1 - }, "jsx_a11y/media-has-caption": { "count": 1 - }, - "jsx_a11y/no-static-element-interactions": { - "count": 1 } }, "web/app/components/base/file-uploader/dynamic-pdf-preview.tsx": { @@ -1099,14 +1093,6 @@ "count": 2 } }, - "web/app/components/base/file-uploader/pdf-preview.tsx": { - "jsx_a11y/click-events-have-key-events": { - "count": 1 - }, - "jsx_a11y/no-static-element-interactions": { - "count": 1 - } - }, "web/app/components/base/file-uploader/store.tsx": { "react/only-export-components": { "count": 4 @@ -1126,14 +1112,8 @@ } }, "web/app/components/base/file-uploader/video-preview.tsx": { - "jsx_a11y/click-events-have-key-events": { - "count": 1 - }, "jsx_a11y/media-has-caption": { "count": 1 - }, - "jsx_a11y/no-static-element-interactions": { - "count": 1 } }, "web/app/components/base/form/components/base/base-field.tsx": { @@ -1480,9 +1460,6 @@ } }, "web/app/components/base/image-uploader/image-preview.tsx": { - "jsx_a11y/click-events-have-key-events": { - "count": 1 - }, "jsx_a11y/no-static-element-interactions": { "count": 1 }, diff --git a/web/app/components/base/file-uploader/__tests__/audio-preview.spec.tsx b/web/app/components/base/file-uploader/__tests__/audio-preview.spec.tsx index a055d521ede..f462c3ccd0a 100644 --- a/web/app/components/base/file-uploader/__tests__/audio-preview.spec.tsx +++ b/web/app/components/base/file-uploader/__tests__/audio-preview.spec.tsx @@ -46,14 +46,15 @@ describe('AudioPreview', () => { expect(onCancel).toHaveBeenCalled() }) - it('should not close when backdrop is clicked', () => { + it('should not close when audio content is clicked', () => { const onCancel = vi.fn() render( , ) - const dialog = screen.getByRole('dialog') - fireEvent.click(dialog) + const audio = document.querySelector('audio') + expect(audio).toBeInTheDocument() + fireEvent.click(audio!) expect(onCancel).not.toHaveBeenCalled() }) diff --git a/web/app/components/base/file-uploader/__tests__/pdf-preview.spec.tsx b/web/app/components/base/file-uploader/__tests__/pdf-preview.spec.tsx index a8ca6438749..602ae409731 100644 --- a/web/app/components/base/file-uploader/__tests__/pdf-preview.spec.tsx +++ b/web/app/components/base/file-uploader/__tests__/pdf-preview.spec.tsx @@ -137,12 +137,10 @@ describe('PdfPreview', () => { expect(mockOnCancel).toHaveBeenCalled() }) - it('should render the overlay and keep backdrop clicks from closing', () => { + it('should keep preview content clicks from closing', () => { render() - const overlay = screen.getByRole('dialog') - expect(overlay).toBeInTheDocument() - fireEvent.click(overlay) + fireEvent.click(getScaleContainer()) expect(mockOnCancel).not.toHaveBeenCalled() }) }) diff --git a/web/app/components/base/file-uploader/__tests__/video-preview.spec.tsx b/web/app/components/base/file-uploader/__tests__/video-preview.spec.tsx index 5e951886816..a3099f88ebd 100644 --- a/web/app/components/base/file-uploader/__tests__/video-preview.spec.tsx +++ b/web/app/components/base/file-uploader/__tests__/video-preview.spec.tsx @@ -46,14 +46,15 @@ describe('VideoPreview', () => { expect(onCancel).toHaveBeenCalled() }) - it('should not close when backdrop is clicked', () => { + it('should not close when video content is clicked', () => { const onCancel = vi.fn() render( , ) - const dialog = screen.getByRole('dialog') - fireEvent.click(dialog) + const video = document.querySelector('video') + expect(video).toBeInTheDocument() + fireEvent.click(video!) expect(onCancel).not.toHaveBeenCalled() }) diff --git a/web/app/components/base/file-uploader/audio-preview.tsx b/web/app/components/base/file-uploader/audio-preview.tsx index 6c2741d5fa3..461fc8f5759 100644 --- a/web/app/components/base/file-uploader/audio-preview.tsx +++ b/web/app/components/base/file-uploader/audio-preview.tsx @@ -22,7 +22,7 @@ const AudioPreview: FC = ({ url, title, onCancel }) => { className="inset-0! top-0! left-0! flex h-dvh! max-h-none! w-screen! max-w-none! translate-0! items-center justify-center overflow-hidden! rounded-none! border-none! bg-black/80 p-8! shadow-none!" backdropClassName="bg-transparent!" > -
e.stopPropagation()}> +
diff --git a/web/app/components/base/file-uploader/pdf-preview.tsx b/web/app/components/base/file-uploader/pdf-preview.tsx index 54cc9264a57..820a985978c 100644 --- a/web/app/components/base/file-uploader/pdf-preview.tsx +++ b/web/app/components/base/file-uploader/pdf-preview.tsx @@ -58,7 +58,6 @@ const PdfPreview: FC = ({ url, onCancel }) => { >
e.stopPropagation()} className="h-[95vh] max-h-full w-screen max-w-full overflow-hidden" style={{ transform: `scale(${scale})`, diff --git a/web/app/components/base/file-uploader/video-preview.tsx b/web/app/components/base/file-uploader/video-preview.tsx index 37f833bbd26..9f9aab1fedf 100644 --- a/web/app/components/base/file-uploader/video-preview.tsx +++ b/web/app/components/base/file-uploader/video-preview.tsx @@ -22,7 +22,7 @@ const VideoPreview: FC = ({ url, title, onCancel }) => { className="inset-0! top-0! left-0! flex h-dvh! max-h-none! w-screen! max-w-none! translate-0! items-center justify-center overflow-hidden! rounded-none! border-none! bg-black/80 p-8! shadow-none!" backdropClassName="bg-transparent!" > -
e.stopPropagation()}> +
diff --git a/web/app/components/base/image-uploader/__tests__/image-preview.spec.tsx b/web/app/components/base/image-uploader/__tests__/image-preview.spec.tsx index 8f00b5ee456..19441eef57b 100644 --- a/web/app/components/base/image-uploader/__tests__/image-preview.spec.tsx +++ b/web/app/components/base/image-uploader/__tests__/image-preview.spec.tsx @@ -161,6 +161,21 @@ describe('ImagePreview', () => { }) describe('User Interactions', () => { + it('should not close when image content is clicked', () => { + const onCancel = vi.fn() + render( + , + ) + + fireEvent.click(screen.getByRole('img', { name: 'Preview Image' })) + + expect(onCancel).not.toHaveBeenCalled() + }) + it('should call onCancel when close button is clicked', async () => { const user = userEvent.setup() const onCancel = vi.fn() diff --git a/web/app/components/base/image-uploader/image-preview.tsx b/web/app/components/base/image-uploader/image-preview.tsx index e3562402ad0..f1c1e65aab0 100644 --- a/web/app/components/base/image-uploader/image-preview.tsx +++ b/web/app/components/base/image-uploader/image-preview.tsx @@ -188,7 +188,6 @@ const ImagePreview: FC = ({ url, title, onCancel, onPrev, onN data-testid="image-preview-container" tabIndex={-1} className="flex size-full items-center justify-center" - onClick={(e) => e.stopPropagation()} onWheel={handleWheel} onMouseDown={handleMouseDown} onMouseMove={handleMouseMove}