From 92229b44f885b78d6c729d5d2e71ddbe096d2672 Mon Sep 17 00:00:00 2001 From: David Hill Date: Mon, 26 Jan 2026 16:39:01 +0000 Subject: feat(ui): add optional transition animations to dialog --- packages/ui/src/context/dialog.tsx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'packages/ui/src/context') diff --git a/packages/ui/src/context/dialog.tsx b/packages/ui/src/context/dialog.tsx index a3aafa0c7..4d03b218d 100644 --- a/packages/ui/src/context/dialog.tsx +++ b/packages/ui/src/context/dialog.tsx @@ -21,6 +21,7 @@ type Active = { dispose: () => void owner: Owner onClose?: () => void + setClosing: (closing: boolean) => void } const Context = createContext>() @@ -32,8 +33,11 @@ function init() { const current = active() if (!current) return current.onClose?.() - current.dispose() - setActive(undefined) + current.setClosing(true) + setTimeout(() => { + current.dispose() + setActive(undefined) + }, 100) } createEffect(() => { @@ -55,14 +59,17 @@ function init() { const id = Math.random().toString(36).slice(2) let dispose: (() => void) | undefined + let setClosing: ((closing: boolean) => void) | undefined const node = runWithOwner(owner, () => createRoot((d: () => void) => { dispose = d + const [closing, setClosingSignal] = createSignal(false) + setClosing = setClosingSignal return ( { if (open) return close() @@ -77,9 +84,9 @@ function init() { }), ) - if (!dispose) return + if (!dispose || !setClosing) return - setActive({ id, node, dispose, owner, onClose }) + setActive({ id, node, dispose, owner, onClose, setClosing }) } return { -- cgit v1.2.3