diff options
| author | Aaron Iker <[email protected]> | 2026-01-30 18:57:49 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-30 17:57:49 +0000 |
| commit | 20619a6a26ec0cfc2707b7ed13387715e9f9cdaa (patch) | |
| tree | 50b8aa69da65642789c3fa92f65034a9dd1361df /packages/ui/src/context | |
| parent | 1bbe84ed8d0eceb96af06b971690ebd0b0213580 (diff) | |
| download | opencode-20619a6a26ec0cfc2707b7ed13387715e9f9cdaa.tar.gz opencode-20619a6a26ec0cfc2707b7ed13387715e9f9cdaa.zip | |
feat: Transitions, spacing, scroll fade, prompt area update (#11168)
Co-authored-by: Github Action <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: aaroniker <[email protected]>
Diffstat (limited to 'packages/ui/src/context')
| -rw-r--r-- | packages/ui/src/context/dialog.tsx | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/packages/ui/src/context/dialog.tsx b/packages/ui/src/context/dialog.tsx index afba5f648..bd47b86d3 100644 --- a/packages/ui/src/context/dialog.tsx +++ b/packages/ui/src/context/dialog.tsx @@ -28,6 +28,7 @@ const Context = createContext<ReturnType<typeof init>>() function init() { const [active, setActive] = createSignal<Active | undefined>() + const [renders, setRenders] = createSignal<Record<string, JSX.Element>>({}) const timer = { current: undefined as ReturnType<typeof setTimeout> | undefined } const lock = { value: false } @@ -118,12 +119,28 @@ function init() { setActive({ id, node, dispose, owner, onClose, setClosing }) } + const render = (element: JSX.Element, id: string, owner: Owner) => { + setRenders((renders) => ({ ...renders, [id]: element })) + show(() => element, owner, () => { + setRenders((renders) => { + const { [id]: _, ...rest } = renders + return rest + }) + }) + } + + const isActive = (id: string) => { + return renders()[id] !== undefined + } + return { get active() { return active() }, + isActive, close, show, + render, } } @@ -152,10 +169,17 @@ export function useDialog() { get active() { return ctx.active }, + isActive(id: string) { + return ctx.isActive(id) + }, show(element: DialogElement, onClose?: () => void) { const base = ctx.active?.owner ?? owner ctx.show(element, base, onClose) }, + render(element: JSX.Element, id: string) { + const base = ctx.active?.owner ?? owner + ctx.render(element, id, base) + }, close() { ctx.close() }, |
