diff --git a/web/src/lib/components/Modal.svelte b/web/src/lib/components/Modal.svelte
new file mode 100644
index 00000000..32257700
--- /dev/null
+++ b/web/src/lib/components/Modal.svelte
@@ -0,0 +1,58 @@
+
+
+
body content
` +})); + +// The component's children-Snippet generic isn't inferable through +// testing-library's render; cast to any to satisfy the prop shape. +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type AnyProps = any; + +describe('Modal', () => { + test('renders nothing when open=false', () => { + render(Modal, { + props: { + title: 'Hidden', + open: false, + onClose: vi.fn(), + children: bodySnippet + } as AnyProps + }); + expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); + }); + + test('renders dialog with role/aria attrs when open=true', () => { + render(Modal, { + props: { + title: 'Visible', + open: true, + onClose: vi.fn(), + children: bodySnippet + } as AnyProps + }); + const dialog = screen.getByRole('dialog'); + expect(dialog).toHaveAttribute('aria-modal', 'true'); + expect(dialog).toHaveAttribute('aria-labelledby', 'modal-title'); + }); + + test('title text appears in+ This clears the saved configuration. Type + DISCONNECT to remove the + Lidarr connection. +
+ + {#if disconnectError} +Disconnect failed — {disconnectError}
+ {/if} +- Remove {deleteFileRow.track_title} - from disk and clear {deleteFileRow.report_count} reports? Lidarr may auto-redownload depending on its monitor settings. -
-+ Remove {deleteFileRow.track_title} + from disk and clear {deleteFileRow.report_count} reports? Lidarr may auto-redownload depending on its monitor settings. +
+
- This will tell Lidarr to remove {deleteLidarrRow.album_title}
- (artist {deleteLidarrRow.artist_name})
- and add it to the import-list exclusion. Affects all tracks on the album. Type DELETE to confirm.
+
+ This will tell Lidarr to remove {deleteLidarrRow.album_title}
+ (artist {deleteLidarrRow.artist_name})
+ and add it to the import-list exclusion. Affects all tracks on the album. Type DELETE to confirm.
+
+ {deleteLidarrError}
- {deleteLidarrError}
-
+ Leave fields blank to use the saved defaults. +
+ + - - - - -+ Notes are shown to the requester. +
+- The user will need to log in with the new password. -
- ++ The user will need to log in with the new password. +
++ This permanently deletes the account and cascades through plays, likes, + sessions, and quarantine. The action cannot be undone. +
+- This permanently deletes the account and cascades through plays, likes, - sessions, and quarantine. The action cannot be undone. -
-- Requesting {modalResult.name} - will add {modalResult.secondary_text}. - Continue? -
-+ Requesting {modalResult.name} + will add {modalResult.secondary_text}. + Continue? +
+