Skip to content

Commit 73bb600

Browse files
committed
refac
1 parent 9cf4d34 commit 73bb600

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

src/lib/components/NotificationToast.svelte

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
66
import { marked } from 'marked';
77
import { createEventDispatcher, onMount } from 'svelte';
8+
import XMark from '$lib/components/icons/XMark.svelte';
89
910
const dispatch = createEventDispatcher();
1011
@@ -15,13 +16,18 @@
1516
let startX = 0,
1617
startY = 0;
1718
let moved = false;
19+
let closeButtonElement: HTMLButtonElement;
1820
const DRAG_THRESHOLD_PX = 6;
1921
2022
const clickHandler = () => {
2123
onClick();
2224
dispatch('closeToast');
2325
};
2426
27+
const closeHandler = () => {
28+
dispatch('closeToast');
29+
};
30+
2531
function onPointerDown(e: PointerEvent) {
2632
startX = e.clientX;
2733
startY = e.clientY;
@@ -43,6 +49,11 @@
4349
// Release capture if taken
4450
(e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId);
4551
52+
// Skip if clicking the close button
53+
if (closeButtonElement && (e.target === closeButtonElement || closeButtonElement.contains(e.target as Node))) {
54+
return;
55+
}
56+
4657
// Only treat as a click if there wasn't a drag
4758
if (!moved) {
4859
clickHandler();
@@ -71,7 +82,7 @@
7182
<!-- svelte-ignore a11y-click-events-have-key-events -->
7283
<!-- svelte-ignore a11y-no-static-element-interactions -->
7384
<div
74-
class="flex gap-2.5 text-left min-w-[var(--width)] w-full dark:bg-gray-850 dark:text-white bg-white text-black border border-gray-100 dark:border-gray-800 rounded-3xl px-4 py-3.5 cursor-pointer select-none"
85+
class="group relative flex gap-2.5 text-left min-w-[var(--width)] w-full dark:bg-gray-850 dark:text-white bg-white text-black border border-gray-100 dark:border-gray-800 rounded-3xl px-4 py-3.5 cursor-pointer select-none"
7586
on:dragstart|preventDefault
7687
on:pointerdown={onPointerDown}
7788
on:pointermove={onPointerMove}
@@ -84,6 +95,16 @@
8495
}
8596
}}
8697
>
98+
<!-- Close button (visible on hover) -->
99+
<button
100+
bind:this={closeButtonElement}
101+
class="absolute -top-0.5 -left-0.5 p-0.5 rounded-full opacity-0 group-hover:opacity-100 bg-gray-200 dark:bg-gray-700 hover:bg-gray-300 dark:hover:bg-gray-600 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 transition-opacity z-10"
102+
on:click|stopPropagation={closeHandler}
103+
aria-label="Dismiss notification"
104+
>
105+
<XMark className="size-3" />
106+
</button>
107+
87108
<div class="shrink-0 self-top -translate-y-0.5">
88109
<img src="{WEBUI_BASE_URL}/static/favicon.png" alt="favicon" class="size-6 rounded-full" />
89110
</div>

0 commit comments

Comments
 (0)